402 lines
11 KiB
PHP
Raw Normal View History

2017-09-14 22:21:00 +03:00
<?php
namespace App\Http\Controllers\Modules;
2019-11-16 10:21:14 +03:00
use App\Abstracts\Http\Controller;
2022-02-14 18:00:44 +03:00
use App\Http\Requests\Module\Install as InstallRequest;
2020-12-24 02:16:00 +03:00
use App\Jobs\Install\CopyFiles;
use App\Jobs\Install\DisableModule;
use App\Jobs\Install\DownloadFile;
use App\Jobs\Install\EnableModule;
use App\Jobs\Install\InstallModule;
use App\Jobs\Install\UninstallModule;
use App\Jobs\Install\UnzipFile;
2017-09-14 22:21:00 +03:00
use App\Models\Module\Module;
use App\Traits\Modules;
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
2020-06-21 18:00:31 +03:00
$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-12-27 17:06:14 +03:00
}
2017-09-14 22:21:00 +03:00
/**
* Show the form for viewing the specified resource.
*
* @param $alias
*
* @return Response
*/
public function show($alias)
{
$enable = false;
$installed = false;
2017-09-14 22:21:00 +03:00
$module = $this->getModule($alias);
2018-08-30 16:30:22 +03:00
if (empty($module)) {
2020-06-11 23:32:13 +03:00
return redirect()->route('apps.home.index')->send();
2018-08-30 16:30:22 +03:00
}
2018-12-24 16:53:10 +03:00
if ($this->moduleExists($alias) && ($model = Module::alias($alias)->first())) {
2017-09-14 22:21:00 +03:00
$installed = true;
2019-11-16 10:21:14 +03:00
if ($model->enabled) {
2017-09-14 22:21:00 +03:00
$enable = true;
}
}
if (request()->get('utm_source')) {
$parameters = request()->all();
$character = '?';
if (strpos($module->action_url, '?') !== false) {
$character = '&';
}
$module->action_url .= $character . http_build_query($parameters);
}
2019-01-31 18:19:30 +03:00
if ($module->status_type == 'pre_sale') {
2019-01-30 18:39:39 +03:00
return view('modules.item.pre_sale', compact('module', 'installed', 'enable'));
}
2018-11-12 23:52:48 +03:00
return view('modules.item.show', compact('module', 'installed', 'enable'));
2017-09-14 22:21:00 +03:00
}
/**
* 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
*/
2022-02-14 18:00:44 +03:00
public function steps(InstallRequest $request)
2017-09-14 22:21:00 +03:00
{
2019-11-20 17:11:35 +03:00
$steps = [];
2017-09-14 22:21:00 +03:00
$name = $request['name'];
2020-12-12 14:59:58 +03:00
$alias = $request['alias'];
2020-12-24 02:16:00 +03:00
if ($this->moduleExists($alias)) {
// Install
$steps[] = [
'text' => trans('modules.installation.install', ['module' => $name]),
'url' => route('apps.install')
];
} else {
2020-12-12 14:59:58 +03:00
// Download
$steps[] = [
'text' => trans('modules.installation.download', ['module' => $name]),
'url' => route('apps.download')
];
// Unzip
$steps[] = [
'text' => trans('modules.installation.unzip', ['module' => $name]),
'url' => route('apps.unzip')
];
// Copy
$steps[] = [
'text' => trans('modules.installation.file_copy', ['module' => $name]),
'url' => route('apps.copy')
];
// Install
$steps[] = [
'text' => trans('modules.installation.install', ['module' => $name]),
'url' => route('apps.install')
];
}
2017-09-14 22:21:00 +03:00
2019-11-20 17:11:35 +03:00
return response()->json([
'success' => true,
'error' => false,
'data' => $steps,
'message' => null
]);
2017-09-14 22:21:00 +03:00
}
/**
* 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
*/
2022-02-14 18:00:44 +03:00
public function download(InstallRequest $request)
2017-09-14 22:21:00 +03:00
{
2020-12-24 02:16:00 +03:00
try {
$path = $this->dispatch(new DownloadFile($request['alias'], $request['version']));
$json = [
'success' => true,
'error' => false,
'message' => null,
'data' => [
'path' => $path,
],
];
} catch (\Exception $e) {
$json = [
'success' => false,
'error' => true,
'message' => $e->getMessage(),
'data' => [],
];
}
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
*/
2022-02-14 18:00:44 +03:00
public function unzip(InstallRequest $request)
2017-09-14 22:21:00 +03:00
{
2020-12-24 02:16:00 +03:00
try {
$path = $this->dispatch(new UnzipFile($request['alias'], $request['path']));
$json = [
'success' => true,
'error' => false,
'message' => null,
'data' => [
'path' => $path,
],
];
} catch (\Exception $e) {
$json = [
'success' => false,
'error' => true,
'message' => $e->getMessage(),
'data' => [],
];
}
2017-09-14 22:21:00 +03:00
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
*/
2022-02-14 18:00:44 +03:00
public function copy(InstallRequest $request)
2017-09-14 22:21:00 +03:00
{
2020-12-24 02:16:00 +03:00
try {
$this->dispatch(new CopyFiles($request['alias'], $request['path']));
2021-04-16 00:59:43 +03:00
event(new \App\Events\Module\Copied($request['alias'], company_id()));
2020-12-24 02:16:00 +03:00
$json = [
'success' => true,
'error' => false,
'message' => null,
'data' => [
'alias' => $request['alias'],
],
];
} catch (\Exception $e) {
$json = [
'success' => false,
'error' => true,
'message' => $e->getMessage(),
'data' => [],
];
}
2020-12-12 14:59:58 +03:00
return response()->json($json);
}
/**
* Show the form for viewing the specified resource.
*
* @param $request
*
* @return Response
*/
2022-02-14 18:00:44 +03:00
public function install(InstallRequest $request)
2020-12-12 14:59:58 +03:00
{
2020-12-24 02:16:00 +03:00
try {
2021-04-16 00:59:43 +03:00
event(new \App\Events\Module\Installing($request['alias'], company_id()));
2021-01-22 14:46:09 +03:00
2021-04-16 00:59:43 +03:00
$this->dispatch(new InstallModule($request['alias'], company_id()));
2020-12-12 14:59:58 +03:00
2020-12-24 02:16:00 +03:00
$name = module($request['alias'])->getName();
$module_routes = module_attribute($request['alias'], 'routes', []);
2017-09-14 22:21:00 +03:00
2020-12-24 02:16:00 +03:00
$message = trans('modules.installed', ['module' => $name]);
2017-09-14 22:21:00 +03:00
flash($message)->success();
2020-12-24 02:16:00 +03:00
$redirect = route('apps.app.show', $request['alias']);
// Get module.json redirect route
if (! empty($module_routes['redirect_after_install'])) {
if (is_array($module_routes['redirect_after_install'])) {
$route = array_shift($module_routes['redirect_after_install']);
$redirect = route($route, $module_routes['redirect_after_install']);
} else {
$redirect = route($module_routes['redirect_after_install']);
}
}
2020-12-24 02:16:00 +03:00
$json = [
'success' => true,
'error' => false,
'message' => null,
'redirect' => $redirect,
2020-12-24 02:16:00 +03:00
'data' => [
'name' => $name,
'alias' => $request['alias'],
],
];
} catch (\Exception $e) {
$message = $e->getMessage();
flash($message)->error()->important();
2020-12-24 02:16:00 +03:00
$json = [
'success' => false,
'error' => true,
'message' => $message,
'data' => [],
];
2017-09-14 22:21:00 +03:00
}
return response()->json($json);
}
public function uninstall($alias)
{
2020-12-24 02:16:00 +03:00
try {
2022-06-01 10:15:55 +03:00
$name = module($alias)->getName();
$this->dispatch(new UninstallModule($alias, company_id()));
2020-12-24 02:16:00 +03:00
$message = trans('modules.uninstalled', ['module' => $name]);
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
flash($message)->success();
2020-12-24 02:16:00 +03:00
} catch (\Exception $e) {
$message = $e->getMessage();
flash($message)->error()->important();
2020-06-11 23:32:13 +03:00
}
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
return redirect()->route('apps.app.show', $alias)->send();
2017-09-14 22:21:00 +03:00
}
public function enable($alias)
2017-09-14 22:21:00 +03:00
{
2020-12-24 02:16:00 +03:00
try {
2022-06-01 10:15:55 +03:00
$name = module($alias)->getName();
2017-09-14 22:21:00 +03:00
$this->dispatch(new EnableModule($alias, company_id()));
2020-12-24 02:16:00 +03:00
$message = trans('modules.enabled', ['module' => $name]);
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
flash($message)->success();
2020-12-24 02:16:00 +03:00
} catch (\Exception $e) {
$message = $e->getMessage();
flash($message)->error()->important();
2020-06-11 23:32:13 +03:00
}
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
return redirect()->route('apps.app.show', $alias)->send();
2017-09-14 22:21:00 +03:00
}
public function disable($alias)
2017-09-14 22:21:00 +03:00
{
2020-12-24 02:16:00 +03:00
try {
2022-06-01 10:15:55 +03:00
$name = module($alias)->getName();
$this->dispatch(new DisableModule($alias, company_id()));
2020-12-24 02:16:00 +03:00
$message = trans('modules.disabled', ['module' => $name]);
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
flash($message)->success();
2020-12-24 02:16:00 +03:00
} catch (\Exception $e) {
$message = $e->getMessage();
flash($message)->error()->important();
2020-06-11 23:32:13 +03:00
}
2017-09-14 22:21:00 +03:00
2020-06-11 23:32:13 +03:00
return redirect()->route('apps.app.show', $alias)->send();
2017-09-14 22:21:00 +03:00
}
2021-05-31 14:22:20 +03:00
public function releases($alias, Request $request)
{
$data = [
'query' => [
'page' => $request->get('page', 1),
]
];
$releases = $this->getModuleReleases($alias, $data);
2022-06-01 10:15:55 +03:00
$html = view('components.layouts.modules.releases', compact('releases'))->render();
2021-05-31 14:22:20 +03:00
return response()->json([
'success' => true,
'error' => false,
'data' => $releases,
'message' => null,
'html' => $html,
]);
}
2018-09-20 18:35:24 +03:00
public function reviews($alias, Request $request)
{
$data = [
'query' => [
'page' => $request->get('page', 1),
2018-09-20 18:35:24 +03:00
]
];
$reviews = $this->getModuleReviews($alias, $data);
2022-06-01 10:15:55 +03:00
$html = view('components.layouts.modules.reviews', compact('reviews'))->render();
2018-09-20 18:35:24 +03:00
return response()->json([
'success' => true,
'error' => false,
'data' => $reviews,
2018-09-20 18:35:24 +03:00
'message' => null,
'html' => $html,
]);
}
public function documentation($alias)
{
$documentation = $this->getModuleDocumentation($alias);
2020-06-11 23:32:13 +03:00
$back = route('apps.app.show', $alias);
if (empty($documentation)) {
2020-06-11 23:32:13 +03:00
return redirect()->route($back)->send();
}
return view('modules.item.documentation', compact('documentation', 'back'));
}
2017-09-14 22:21:00 +03:00
}