290 lines
6.9 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
<?php
namespace App\Http\Controllers\Modules;
use App\Http\Controllers\Controller;
use App\Models\Module\Module;
use App\Models\Module\ModuleHistory;
use App\Traits\Modules;
2017-11-01 22:15:25 +03:00
use Artisan;
use Module as LModule;
2017-12-27 17:06:14 +03:00
use Illuminate\Http\Request;
2017-09-14 22:21:00 +03:00
class Item extends Controller
{
use Modules;
2017-12-27 17:06:14 +03:00
/**
* Instantiate a new controller instance.
*/
2018-05-09 17:27:33 +03:00
public function __construct()
2017-12-27 17:06:14 +03:00
{
// Add CRUD permission check
$this->middleware('permission:create-modules-item')->only(['install']);
$this->middleware('permission:update-modules-item')->only(['update', 'enable', 'disable']);
$this->middleware('permission:delete-modules-item')->only(['uninstall']);
}
2017-09-14 22:21:00 +03:00
/**
* Show the form for viewing the specified resource.
*
* @param $alias
*
* @return Response
*/
public function show($alias)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$enable = false;
$installed = false;
2017-09-14 22:21:00 +03:00
$module = $this->getModule($alias);
2017-12-27 17:06:14 +03:00
$check = Module::alias($alias)->first();
2017-09-14 22:21:00 +03:00
if ($check) {
$installed = true;
if ($check->status) {
$enable = true;
}
}
return view('modules.item.show', compact('module', 'about', 'installed', 'enable'));
}
/**
* Show the form for viewing the specified resource.
*
2017-11-02 02:00:54 +03:00
* @param $request
2017-09-14 22:21:00 +03:00
*
* @return Response
*/
public function steps(Request $request)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
$json = [];
$json['step'] = [];
2017-09-14 22:21:00 +03:00
$name = $request['name'];
$version = $request['version'];
// Download
$json['step'][] = [
2017-09-14 22:21:00 +03:00
'text' => trans('modules.installation.download', ['module' => $name]),
2017-11-01 22:15:25 +03:00
'url' => url('apps/download')
];
2017-09-14 22:21:00 +03:00
// Unzip
$json['step'][] = [
2017-09-14 22:21:00 +03:00
'text' => trans('modules.installation.unzip', ['module' => $name]),
2017-11-01 22:15:25 +03:00
'url' => url('apps/unzip')
];
2017-09-14 22:21:00 +03:00
// Download
$json['step'][] = [
2017-09-14 22:21:00 +03:00
'text' => trans('modules.installation.install', ['module' => $name]),
2017-11-01 22:15:25 +03:00
'url' => url('apps/install')
];
2017-09-14 22:21:00 +03:00
return response()->json($json);
}
/**
* Show the form for viewing the specified resource.
*
2017-11-02 02:00:54 +03:00
* @param $request
2017-09-14 22:21:00 +03:00
*
* @return Response
*/
public function download(Request $request)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$path = $request['path'];
$version = $request['version'];
$path .= '/' . $version . '/' . version('short') . '/' . setting('general.api_token');
$json = $this->downloadModule($path);
return response()->json($json);
}
/**
* Show the form for viewing the specified resource.
*
2017-11-02 02:00:54 +03:00
* @param $request
2017-09-14 22:21:00 +03:00
*
* @return Response
*/
public function unzip(Request $request)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$path = $request['path'];
$json = $this->unzipModule($path);
return response()->json($json);
}
/**
* Show the form for viewing the specified resource.
*
2017-11-01 19:43:42 +03:00
* @param $request
2017-09-14 22:21:00 +03:00
*
* @return Response
*/
public function install(Request $request)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$path = $request['path'];
$json = $this->installModule($path);
if ($json['success']) {
2017-11-01 22:15:25 +03:00
$message = trans('modules.installed', ['module' => $json['data']['name']]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
}
return response()->json($json);
}
public function uninstall($alias)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$json = $this->uninstallModule($alias);
2017-12-27 17:06:14 +03:00
$module = Module::alias($alias)->first();
2017-09-14 22:21:00 +03:00
$data = [
2017-09-14 22:21:00 +03:00
'company_id' => session('company_id'),
'module_id' => $module->id,
'category' => $json['data']['category'],
'version' => $json['data']['version'],
2017-11-01 22:15:25 +03:00
'description' => trans('modules.uninstalled', ['module' => $json['data']['name']]),
];
2017-09-14 22:21:00 +03:00
ModuleHistory::create($data);
$module->delete();
2017-11-01 22:15:25 +03:00
$message = trans('modules.uninstalled', ['module' => $json['data']['name']]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
2017-11-01 22:15:25 +03:00
return redirect('apps/' . $alias)->send();
2017-09-14 22:21:00 +03:00
}
public function update($alias)
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
2017-09-14 22:21:00 +03:00
$json = $this->updateModule($alias);
2017-12-27 17:06:14 +03:00
$module = Module::alias($alias)->first();
2017-09-14 22:21:00 +03:00
$data = [
2017-09-14 22:21:00 +03:00
'company_id' => session('company_id'),
'module_id' => $module->id,
'category' => $json['data']['category'],
'version' => $json['data']['version'],
2017-11-01 22:15:25 +03:00
'description' => trans_choice('modules.updated', $json['data']['name']),
];
2017-09-14 22:21:00 +03:00
ModuleHistory::create($data);
2017-11-01 22:15:25 +03:00
$message = trans('modules.updated', ['module' => $json['data']['name']]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
2017-11-01 22:15:25 +03:00
return redirect('apps/' . $alias)->send();
2017-09-14 22:21:00 +03:00
}
public function enable($alias)
2017-09-14 22:21:00 +03:00
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
$json = $this->enableModule($alias);
2017-09-14 22:21:00 +03:00
2017-12-27 17:06:14 +03:00
$module = Module::alias($alias)->first();
2017-09-14 22:21:00 +03:00
$data = [
2017-09-14 22:21:00 +03:00
'company_id' => session('company_id'),
'module_id' => $module->id,
'category' => $json['data']['category'],
'version' => $json['data']['version'],
2017-11-01 22:15:25 +03:00
'description' => trans('modules.enabled', ['module' => $json['data']['name']]),
];
2017-09-14 22:21:00 +03:00
$module->status = 1;
$module->save();
ModuleHistory::create($data);
2017-11-01 22:15:25 +03:00
$message = trans('modules.enabled', ['module' => $json['data']['name']]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
2017-11-01 22:15:25 +03:00
return redirect('apps/' . $alias)->send();
2017-09-14 22:21:00 +03:00
}
public function disable($alias)
2017-09-14 22:21:00 +03:00
{
2017-11-02 02:00:54 +03:00
$this->checkApiToken();
$json = $this->disableModule($alias);
2017-09-14 22:21:00 +03:00
2017-12-27 17:06:14 +03:00
$module = Module::alias($alias)->first();
2017-09-14 22:21:00 +03:00
$data = [
2017-09-14 22:21:00 +03:00
'company_id' => session('company_id'),
'module_id' => $module->id,
'category' => $json['data']['category'],
'version' => $json['data']['version'],
2017-11-01 22:15:25 +03:00
'description' => trans('modules.disabled', ['module' => $json['data']['name']]),
];
2017-09-14 22:21:00 +03:00
$module->status = 0;
$module->save();
ModuleHistory::create($data);
2017-11-01 22:15:25 +03:00
$message = trans('modules.disabled', ['module' => $json['data']['name']]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
2017-11-01 22:15:25 +03:00
return redirect('apps/' . $alias)->send();
2017-09-14 22:21:00 +03:00
}
/**
* Final actions post update.
*
* @param $alias
* @param $old
* @param $new
* @return Response
*/
public function post($alias)
{
Artisan::call('module:install', ['alias' => $alias, 'company_id' => session('company_id')]);
$module = LModule::findByAlias($alias);
$message = trans('modules.installed', ['module' => $module->get('name')]);
flash($message)->success();
return redirect('apps/' . $alias);
}
2017-09-14 22:21:00 +03:00
}