Kaydet (Commit) 60173f93 authored tarafından mertcelen's avatar mertcelen

Extension add views added.

üst c26d6693
......@@ -27,7 +27,7 @@ sudo apt update
#### PHP ve diger kutuphanelerin kurulumu
```bash
sudo apt install php7.3-fpm -y
sudo apt install php7.3 php7.3-mongodb php7.3-ldap php7.3-mbstring php7.3-xml php7.3-zip php7.3-simplexml php7.3-ssh2 -y
sudo apt install php7.3 php7.3-mongodb php7.3-ldap php7.3-mbstring php7.3-xml php7.3-zip php7.3-simplexml php7.3-ssh2 php7.3-mysqli -y
```
#### Nginx Kurulumu
```bash
......
......@@ -20,6 +20,7 @@ class SSHConnector implements Connector
protected $connection;
protected $server;
protected $ssh;
protected $key;
protected $user_id;
protected $username;
/**
......@@ -85,7 +86,7 @@ class SSHConnector implements Connector
*/
public function runScript($script, $parameters, $extra = null)
{
$flag = $this->sendFile(storage_path('app/scripts/' . $script->_id), '/tmp/' . $script->_id,0555);
$this->sendFile(storage_path('app/scripts/' . $script->_id), '/tmp/' . $script->_id,0555);
$query = ($script->root == 1) ? 'sudo ' : '';
$query = $query . $script->language . ' /tmp/' . $script->_id . " run " . $parameters . $extra;
return $this->execute($query);
......
......@@ -26,7 +26,8 @@ class Extension extends Eloquent
* @var array
*/
protected $fillable = [
"name" , "status" , "service" , "icon", "publisher", "support", "serverless", "setup", "views", "parameters" , "install" , "install_script", "version"
"name" , "status" , "service" , "icon", "publisher", "support", "serverless",
"setup", "views", "parameters" , "install" , "install_script", "version", "database", "widgets"
];
/**
......
......@@ -186,4 +186,27 @@ class MainController extends Controller
}
rmdir($dir);
}
public function newExtension()
{
$ext = new \App\Extension();
$ext->name = request('name');
$ext->publisher = auth()->user()->name;
$ext->version = "1.0";
$ext->database = [];
$ext->widgets = [];
$ext->views = [
[
"name" => "index",
"scripts" => ""
]
];
$ext->status = 0;
$ext->save();
$folder = resource_path('views/extensions/') . strtolower(request('name'));
mkdir($folder);
touch($folder . '/index.blade.php');
touch($folder . '/functions.php');
return respond(route('extension_one',$ext->_id),300);
}
}
......@@ -15,11 +15,11 @@ class OneController extends Controller
public function server()
{
// Now that we have server, let's check if required parameters set for extension.
foreach (extension()->setup as $key => $setting) {
foreach (extension()->database as $setting) {
if (!auth()->user()->getAttribute('settings') ||
!array_key_exists(server()->_id,auth()->user()->settings) ||
!array_key_exists(extension()->_id,auth()->user()->settings[server()->_id]) ||
!array_key_exists($key, auth()->user()->settings[server()->_id][extension()->_id])) {
!array_key_exists($setting["variable"], auth()->user()->settings[server()->_id][extension()->_id])) {
return redirect(route('extension_server_settings_page', [
"server_id" => server()->_id,
"extension_id" => extension()->_id
......@@ -30,25 +30,33 @@ class OneController extends Controller
$outputs = [];
// Go through each required scripts and run each of them.
if (extension()->views["index"]) {
foreach (extension()->views["index"] as $unique_code) {
// Get Script
$script = extension()->scripts()->where('unique_code', $unique_code)->first();
// Check if required script is available or not.
if (!$script) {
return respond("Eklenti için gerekli olan betik yüklü değil, lütfen yöneticinizle görüşün.", 404);
$views = extension()->views;
foreach ($views as $view){
if($view["name"] == "index"){
$scripts = explode(',',$view["scripts"]);
if(count($scripts) == 1 && $scripts[0] == ""){
break;
}
foreach ($scripts as $unique_code){
// Get Script
$script = extension()->scripts()->where('unique_code', $unique_code)->first();
// Check if required script is available or not.
if (!$script) {
return respond("Eklenti için gerekli olan betik yüklü değil, lütfen yöneticinizle görüşün.", 404);
}
// Run Script with no parameters.
$output = server()->runScript($script, '');
// Run Script with no parameters.
$output = server()->runScript($script, '');
// Decode output and set it into outputs array.
$output = str_replace('\n', '', $output);
$outputs[$unique_code] = json_decode($output, true);
// Decode output and set it into outputs array.
$output = str_replace('\n', '', $output);
$outputs[$unique_code] = json_decode($output, true);
}
break;
}
}
// Return all required parameters.
return view('extension_pages.server', [
"extension" => extension(),
......@@ -119,8 +127,8 @@ class OneController extends Controller
public function serverSettings()
{
$extension_config = [];
foreach (array_keys(extension()->setup) as $key) {
$extension_config[$key] = request($key);
foreach (extension()->database as $key) {
$extension_config[$key["variable"]] = request($key["variable"]);
}
$settings = auth()->user()->settings;
......@@ -168,7 +176,8 @@ class OneController extends Controller
public function updateCode()
{
file_put_contents(public_path('deneme.blade.php'),json_decode(request('code')));
return "OK";
$file = resource_path('views/extensions/') . strtolower(extension()->name) . '/' . request('page') . '.blade.php';
file_put_contents($file,json_decode(request('code')));
return respond("Kaydedildi",200);
}
}
......@@ -28,7 +28,7 @@ class SettingsController extends Controller
*/
public function settings_one()
{
$extension = Extension::where('_id',\request('extension_id'))->first();
$extension = Extension::where('_id', \request('extension_id'))->first();
// Go through all files and list them as tree style in array.
$files = $this->tree(resource_path('views' . DIRECTORY_SEPARATOR . 'extensions' . DIRECTORY_SEPARATOR . strtolower($extension->name)));
......@@ -88,11 +88,12 @@ class SettingsController extends Controller
/**
* @return array
*/
public function getScriptsOfView(){
public function getScriptsOfView()
{
$extension = Extension::find(request('extension_id'));
if(array_key_exists(request('view'),$extension->views)){
if (array_key_exists(request('view'), $extension->views)) {
$arr = $extension->views[request('view')];
}else{
} else {
$arr = [];
}
return $arr;
......@@ -101,42 +102,122 @@ class SettingsController extends Controller
/**
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function addScriptToView(){
public function addScriptToView()
{
$extension = Extension::find(request('extension_id'));
$temp = $extension->views;
if(array_key_exists(request('view'),$extension->views)){
array_push($temp[request('view')],request('unique_code'));
}else{
if (array_key_exists(request('view'), $extension->views)) {
array_push($temp[request('view')], request('unique_code'));
} else {
$temp[request('view')] = [request('unique_code')];
}
$extension->views = $temp;
$extension->save();
return response(__("Başarıyla Eklendi."),200);
return response(__("Başarıyla Eklendi."), 200);
}
/**
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
*/
public function removeScriptFromView(){
public function removeScriptFromView()
{
$extension = Extension::find(request('extension_id'));
$temp = $extension->views;
if(array_key_exists(request('view'),$extension->views)){
if (array_key_exists(request('view'), $extension->views)) {
unset($temp[request('view')][array_search(request('unique_code'), $temp[request('view')])]);
}else{
return response(__("Sayfa Bulunamadı."),404);
} else {
return response(__("Sayfa Bulunamadı."), 404);
}
return response(__("Başarıyla kaldırıldı."),200);
return response(__("Başarıyla kaldırıldı."), 200);
}
public function update()
{
$params = [];
if(request('type') == "general"){
if (request('type') == "general") {
$params = request()->all();
}else{
$params = [request('type') => request(request('type'))];
} else {
$values = extension()->__get(request('table'));
foreach ($values as $key => $value) {
if ($value["name"] == request('name_old')) {
switch (request('table')) {
case "database":
$values[$key]["variable"] = request('variable');
$values[$key]["type"] = request('type');
$values[$key]["name"] = request('name');
break;
case "widgets":
$values[$key]["target"] = request('target');
$values[$key]["type"] = request('type');
$values[$key]["name"] = request('name');
break;
case "views":
$values[$key]["scripts"] = request('scripts');
$values[$key]["name"] = request('name');
break;
}
break;
}
}
$params = [request('table') => $values];
}
extension()->update($params);
return respond("Guncellendi", 200);
}
public function add()
{
$params = [];
$values = extension()->__get(request('table'));
switch (request('table')) {
case "database":
array_push($values, [
"variable" => request('variable'),
"type" => request('type'),
"name" => request('name'),
]);
break;
case "widgets":
array_push($values, [
"target" => request('target'),
"type" => request('type'),
"name" => request('name'),
]);
break;
case "views":
array_push($values, [
"scripts" => request('scripts'),
"name" => request('name'),
]);
$file = resource_path('views/extensions/') . strtolower(extension()->name) . '/' . request('name') . '.blade.php';
touch($file);
break;
}
$params = [request('table') => $values];
extension()->update($params);
return respond("Guncellendi",200);
return respond("Eklendi", 200);
}
public function remove()
{
$params = [];
$values = extension()->__get(request('table'));
foreach ($values as $key => $value) {
if ($value["name"] == request('name')) {
unset($values[$key]);
break;
}
}
if(request('table') == "views"){
$file = resource_path('views/extensions/') . strtolower(extension()->name) . '/' . request('name') . '.blade.php';
unlink($file);
}
$params = [request('table') => $values];
extension()->update($params);
return respond("Silindi", 200);
}
}
......@@ -48,12 +48,16 @@ Route::post('/yukle/eklenti/','Extension\MainController@upload')->name('extensio
// Extension Remove Page
Route::post('/eklenti/sil','Extension\OneController@remove')->name('extension_remove')->middleware('admin');
Route::view('/eklenti/yeni','extension_pages.new')->name('extension_new_view')->middleware('admin');
Route::post('/eklenti/yeni','Extension\MainController@newExtension')->name('extension_new')->middleware('admin');
Route::get('/eklentiler/{extension_id}/{page_name}','Extension\OneController@page')->middleware('admin');
Route::get('/eklentiler/{extension_id}/{page_name}','Extension\OneController@page')->middleware('admin')->name('extension_page_edit_view');
Route::post('/ayar/eklenti/guncelle','Extension\SettingsController@update')->middleware('admin')->name('extension_settings_update');
Route::post('/ayar/eklenti/ekle','Extension\SettingsController@add')->middleware('admin')->name('extension_settings_add');
Route::post('/ayar/eklenti/kod','Extension\OneController@updateCode')->middleware('admin')->name('extension_code_update');
\ No newline at end of file
Route::post('/ayar/eklenti/sil','Extension\SettingsController@remove')->middleware('admin')->name('extension_settings_remove');
Route::post('/ayar/eklenti/kod','Extension\OneController@updateCode')->middleware('admin')->name('extension_code_update');
Route::post('/ayar/eklenti/yeni/sayfa','Extension\MainController@newExtensionPage')->middleware('admin')->name('extension_new_page');
\ No newline at end of file
......@@ -39,20 +39,6 @@
0 => 'JeroenNoten\\LaravelAdminLte\\ServiceProvider',
),
),
'laravel/nexmo-notification-channel' =>
array (
'providers' =>
array (
0 => 'Illuminate\\Notifications\\NexmoChannelServiceProvider',
),
),
'laravel/slack-notification-channel' =>
array (
'providers' =>
array (
0 => 'Illuminate\\Notifications\\SlackChannelServiceProvider',
),
),
'laravel/tinker' =>
array (
'providers' =>
......
......@@ -29,17 +29,15 @@
25 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
26 => 'Jenssegers\\Mongodb\\MongodbQueueServiceProvider',
27 => 'JeroenNoten\\LaravelAdminLte\\ServiceProvider',
28 => 'Illuminate\\Notifications\\NexmoChannelServiceProvider',
29 => 'Illuminate\\Notifications\\SlackChannelServiceProvider',
30 => 'Laravel\\Tinker\\TinkerServiceProvider',
31 => 'Carbon\\Laravel\\ServiceProvider',
32 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
33 => 'App\\Providers\\AppServiceProvider',
34 => 'App\\Providers\\AuthServiceProvider',
35 => 'App\\Providers\\EventServiceProvider',
36 => 'App\\Providers\\RouteServiceProvider',
37 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
38 => 'Jenssegers\\Mongodb\\MongodbQueueServiceProvider',
28 => 'Laravel\\Tinker\\TinkerServiceProvider',
29 => 'Carbon\\Laravel\\ServiceProvider',
30 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
31 => 'App\\Providers\\AppServiceProvider',
32 => 'App\\Providers\\AuthServiceProvider',
33 => 'App\\Providers\\EventServiceProvider',
34 => 'App\\Providers\\RouteServiceProvider',
35 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
36 => 'Jenssegers\\Mongodb\\MongodbQueueServiceProvider',
),
'eager' =>
array (
......@@ -57,14 +55,12 @@
11 => 'BeyondCode\\DumpServer\\DumpServerServiceProvider',
12 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
13 => 'JeroenNoten\\LaravelAdminLte\\ServiceProvider',
14 => 'Illuminate\\Notifications\\NexmoChannelServiceProvider',
15 => 'Illuminate\\Notifications\\SlackChannelServiceProvider',
16 => 'Carbon\\Laravel\\ServiceProvider',
17 => 'App\\Providers\\AppServiceProvider',
18 => 'App\\Providers\\AuthServiceProvider',
19 => 'App\\Providers\\EventServiceProvider',
20 => 'App\\Providers\\RouteServiceProvider',
21 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
14 => 'Carbon\\Laravel\\ServiceProvider',
15 => 'App\\Providers\\AppServiceProvider',
16 => 'App\\Providers\\AuthServiceProvider',
17 => 'App\\Providers\\EventServiceProvider',
18 => 'App\\Providers\\RouteServiceProvider',
19 => 'Jenssegers\\Mongodb\\MongodbServiceProvider',
),
'deferred' =>
array (
......
......@@ -12,10 +12,11 @@
"ext-xml": "*",
"ext-ssh2": "*",
"ext-zip": "*",
"ext-mysqli" : "*",
"guzzlehttp/guzzle": "~6.0",
"jenssegers/mongodb": "^3.4",
"jeroennoten/laravel-adminlte": "^1.24",
"laravel/framework": "5.7.*",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0",
"phpseclib/phpseclib": "^2.0"
},
......
This diff is collapsed.
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form onsubmit="talkApi(this)">
<input id="girilenVeri" type="text" name="name">
<button type="submit">Ekle</button>
</form>
<div id="gelencevap">
Cevap :
</div>
<script type="text/javascript">
function talkApi(data){
console.log(data);
return true;
let isim = document.getElementById("girilenVeri").value;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("gelencevap").innerHTML = this.responseText;
}
};
// xhttp.open("POST", "/muhterem/muhterem.php", true);
// let data = new FormData();
// data.append("name",isim);
// xhttp.send(data);
}
</script>
</body>
</html>
\ No newline at end of file
......@@ -17,7 +17,11 @@
"target_id" => "extensionExport",
"text" => "Indir"
])
<button class="btn btn-info" onclick="location.href = '{{route('extension_new_view')}}'">{{__("Yeni")}}</button>
@include('l.modal-button',[
"class" => "btn-info",
"target_id" => "newExtension",
"text" => "Yeni"
])
<br><br>
@include('l.table',[
......@@ -64,6 +68,16 @@
"submit_text" => "İndir"
])
@include('l.modal',[
"id"=>"newExtension",
"url" => route('extension_new'),
"title" => "Yeni Eklenti Oluştur",
"inputs" => [
"Eklenti Adı" => "name:text"
],
"submit_text" => "Oluştur"
])
@include('l.modal',[
"id"=>"delete",
"title" =>"Eklentiyi Sil",
......
@extends('layouts.app')
@section('content')
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{route('home')}}">{{__("Ana Sayfa")}}</a></li>
<li class="breadcrumb-item" aria-current="page"><a href="{{route('extensions_settings')}}">{{__("Eklenti Yönetimi")}}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ __('Yeni Eklenti') }}</li>
</ol>
</nav>
<form action="" class="form-group">
<h3>{{__("Eklenti Adı")}}</h3>
<input type="text" name="name" class="form-control">
<h3>{{__("Yayınlayan")}}</h3>
<input type="text" name="name" class="form-control" value="{{auth()->user()->name}}" disabled>
<h3>{{__("Destek Email'i")}}</h3>
<input type="text" name="email" class="form-control" value="{{auth()->user()->email}}">
<h3>{{__("Eklenti için sunucuda betik çalıştırılması gerekiyor mu?")}}</h3>
<div class="bd-example">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="serverless" id="inlineRadio1" value="true">
<label class="form-check-label" for="inlineRadio1">{{__("Evet")}}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="serverless" id="inlineRadio2" value="false">
<label class="form-check-label" for="inlineRadio2">{{__("Hayır")}}</label>
</div>
</div>
<h3>{{__("Logo (Font Awesome Ikon)")}}</h3>
<input type="text" name="icon" class="form-control">
</form>
@endsection
\ No newline at end of file
......@@ -12,10 +12,10 @@
"server_id" => request()->route('server_id')
])}}" method="POST">
@csrf
@foreach($extension->setup as $key => $item)
@foreach($extension->database as $item)
@include('l.inputs',[
"inputs" => [
$item["name"] => $key . ":" . $item["type"]
$item["name"] => $item["variable"] . ":" . $item["type"]
]
])
@endforeach
......
......@@ -37,7 +37,7 @@
"id"=>"add_key",
"title" => "SSH Anahtar Ekle",
"url" => route('key_add'),
"next" => "reload",
"next" => "debug",
"inputs" => [
"Sunucu Seçin:server_id" => objectToArray($servers,"name","_id"),
"Kullanıcı Adı" => "username:text",
......
......@@ -44,12 +44,25 @@
}
function save(){
Swal.fire({
position: 'center',
type: 'info',
title: '{{__("Kaydediliyor...")}}',
showConfirmButton: false,
});
let code = JSON.stringify(window.editor.getValue());
let data = new FormData();
data.append('code',code);
data.append('page','{{request('page_name')}}');
data.append('extension_id','{{extension()->_id}}');
request('{{route('extension_code_update')}}',data,function(response){
console.log(response);
Swal.fire({
position: 'center',
type: 'success',
title: "{{__("Başarıyla kaydedildi")}}",
showConfirmButton: false,
timer: 1500
});
});
}
</script>
......
......@@ -25,14 +25,7 @@
<tr class="tableRow" id="{{str_random(10)}}" @isset($onclick)style="cursor: pointer;" onclick="{{$onclick}}(this)" @endisset>
<td>{{$loop->iteration}}</td>
@foreach($display as $item)
@if($item == "server_id" || $item == "extension_id" || $item == "script_id")
@if(is_array($k))
<td id="{{$item}}" hidden>{{$k[$item]}}</td>
@else
<td id="{{$item}}" hidden>{{$k->__get($item)}}</td>
@endif
@elseif(count(explode(':',$item)) > 1)
@if(count(explode(':',$item)) > 1)
@if(is_array($k))
<td id="{{explode(':',$item)[1]}}" hidden>{{$k[explode(':',$item)[0]]}}</td>
@else
......@@ -62,6 +55,10 @@
{{$setCurrentVariable}} = options.$trigger[0].getAttribute("id");
@endisset
let target = $("#" + key);
if(target.length === 0){
window[key](options.$trigger[0]);
return;
}
inputs =[];
$("#" + key + " input , #" + key + ' select').each(function (index, value) {
let element_value = $("#" + options.$trigger[0].getAttribute("id") + " #" + value.getAttribute('name')).html();
......@@ -71,7 +68,6 @@
+ "#" + key + " input[name='" + value.getAttribute('name') + "']").val(element_value);
}
});
console.log(inputs);
target.modal('show');
},
items: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment