diff --git a/kernel/manifest.json b/kernel/manifest.json index 25031b0..65282d4 100644 --- a/kernel/manifest.json +++ b/kernel/manifest.json @@ -1,3 +1,8 @@ { - "version": "0.2" -} \ No newline at end of file + "name": "Kernel", + "version": "0.2", + "author": "ITGuild", + "slug": "kernel", + "type": "kernel", + "description": "Kernel" +} diff --git a/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php b/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php index a83f465..f2f3f95 100644 --- a/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php +++ b/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php @@ -14,6 +14,7 @@ use kernel\helpers\SMTP; use kernel\Mailing; use kernel\modules\module_shop_client\services\ModuleShopClientService; use kernel\Request; +use kernel\services\KernelService; use kernel\services\ModuleService; use kernel\services\ModuleShopService; use kernel\services\TokenService; @@ -24,6 +25,7 @@ class ModuleShopClientController extends AdminController protected Client $client; protected ModuleService $moduleService; + protected KernelService $kernelService; protected function init(): void { @@ -32,6 +34,7 @@ class ModuleShopClientController extends AdminController $this->client = new Client(); $this->moduleService = new ModuleService(); + $this->kernelService = new KernelService(); } /** @@ -55,6 +58,7 @@ class ModuleShopClientController extends AdminController 'page_number' => $page_number, 'module_count' => $module_count, 'per_page' => $per_page, + 'kernelService' => new KernelService(), ]); } else { $this->cgView->render("module_shop_error_connection.php"); @@ -112,6 +116,36 @@ class ModuleShopClientController extends AdminController $this->redirect('/admin/module_shop_client', 302); } + public function actionRenderKernelUpdateForm(): void + { + $this->cgView->render("kernel_update.php"); + } + + #[NoReturn] public function actionKernelUpdate(): void + { + $request = new Request(); + $modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug'); + + $modules_info = json_decode($modules_info->getBody()->getContents(), true); + foreach ($modules_info as $module) { + if ($module['slug'] === 'kernel') { + $path = $module['path_to_archive']; + } + } + if (isset($path)) { + Files::uploadByUrl($_ENV['MODULE_SHOP_URL'] . $path, RESOURCES_DIR . "/tmp/kernel"); + if ($this->kernelService->updateKernel('/resources/tmp/kernel/' . basename($path))) { + Flash::setMessage("success", "Ядро успешно обновлено."); + } else { + Flash::setMessage("error", "Ошибка обновления ядра."); + } + } else { + Flash::setMessage("error", "Ошибка обновления ядра."); + } + + $this->redirect('/admin/module_shop_client', 302); + } + #[NoReturn] public function actionDelete(): void { $request = new Request(); @@ -131,13 +165,6 @@ class ModuleShopClientController extends AdminController $request = new Request(); $address = $request->post("email"); -// $mailing = new Mailing(); -// $mailing->send_html("login_by_code.php", ['code' => mt_rand(100000, 999999)], [ -// 'address' => $address, -// 'subject' => "Код авторизации", -// "from_name" => $_ENV['APP_NAME'] -// ]); - $moduleShopService = new ModuleShopService(); $result = $moduleShopService->email_auth($address); @@ -153,13 +180,6 @@ class ModuleShopClientController extends AdminController $request = new Request(); $code = $request->post("code"); -// $mailing = new Mailing(); -// $mailing->send_html("login_by_code.php", ['code' => mt_rand(100000, 999999)], [ -// 'address' => $address, -// 'subject' => "Код авторизации", -// "from_name" => $_ENV['APP_NAME'] -// ]); - $moduleShopService = new ModuleShopService(); $result = $moduleShopService->code_check($code); diff --git a/kernel/modules/module_shop_client/routs/module_shop_client.php b/kernel/modules/module_shop_client/routs/module_shop_client.php index 5004486..7e7a00a 100644 --- a/kernel/modules/module_shop_client/routs/module_shop_client.php +++ b/kernel/modules/module_shop_client/routs/module_shop_client.php @@ -17,6 +17,10 @@ App::$collector->group(["prefix" => "admin"], function (RouteCollector $router){ App::$collector->get('/update', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionUpdate']); App::$collector->post('/auth', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionAuth']); App::$collector->post('/code_check', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionCodeCheck']); + App::$collector->group(["prefix" => "kernel"], function (RouteCollector $router) { + App::$collector->get('/update_form', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionRenderKernelUpdateForm']); + App::$collector->post('/update', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionKernelUpdate']); + }); }); }); }); \ No newline at end of file diff --git a/kernel/modules/module_shop_client/views/index.php b/kernel/modules/module_shop_client/views/index.php index bfe766d..da38552 100644 --- a/kernel/modules/module_shop_client/views/index.php +++ b/kernel/modules/module_shop_client/views/index.php @@ -5,6 +5,7 @@ * @var int $page_number * @var int $per_page * @var \kernel\services\ModuleService $moduleService + * @var \kernel\services\KernelService $kernelService */ use Itguild\Tables\ListJsonTable; @@ -37,21 +38,23 @@ $table->addAction(function ($row, $url) use ($moduleService) { }); $table->addAction(function ($row, $url) use ($moduleService){ - if ($moduleService->isInstall($row['slug'])){ - $url = "$url/delete/?slug=" . $row['slug']; + if ($row['slug'] !== 'kernel') { + if ($moduleService->isInstall($row['slug'])) { + $url = "$url/delete/?slug=" . $row['slug']; - return \kernel\widgets\IconBtn\IconBtnDeleteWidget::create(['url' => $url])->run(); - } - else { - $url = "$url/install/?id=" . $row['id']; + return \kernel\widgets\IconBtn\IconBtnDeleteWidget::create(['url' => $url])->run(); + } else { + $url = "$url/install/?id=" . $row['id']; - return \kernel\widgets\IconBtn\IconBtnInstallWidget::create(['url' => $url])->run(); + return \kernel\widgets\IconBtn\IconBtnInstallWidget::create(['url' => $url])->run(); + } } + return null; }); -$table->addAction(function ($row, $url) use ($moduleService){ +$table->addAction(function ($row, $url) use ($moduleService, $kernelService){ $slug = $row['slug']; - if ($moduleService->isInstall($slug)){ + if ($moduleService->isInstall($slug)) { if (!$moduleService->isLastVersion($slug)) { $url = "$url/update/?slug=" . $slug; @@ -59,6 +62,14 @@ $table->addAction(function ($row, $url) use ($moduleService){ } } + if ($slug === 'kernel') { + if (!$kernelService->isLastVersion()) { + $url = "$url/kernel/update_form/"; + + return \kernel\widgets\IconBtn\IconBtnUpdateWidget::create(['url' => $url])->run(); + } + } + return false; }); diff --git a/kernel/modules/module_shop_client/views/kernel_update.php b/kernel/modules/module_shop_client/views/kernel_update.php new file mode 100644 index 0000000..0bbe204 --- /dev/null +++ b/kernel/modules/module_shop_client/views/kernel_update.php @@ -0,0 +1,39 @@ +run(); + +echo \kernel\helpers\Html::h(2, "Выберите нужные файлы для обновления"); + +$form = new ActiveForm(); +$form->beginForm("/admin/module_shop_client/kernel/update/", enctype: 'multipart/form-data'); + +$form->field(\itguild\forms\inputs\Select::class, "files[]", [ + 'class' => "form-control", + 'multiple' => "multiple", +]) + ->setLabel("Дополнительные файлы") + ->setOptions([ + '.env.example' => '.env.example', + 'bootstrap.php' => 'bootstrap', + 'composer.json' => 'composer.json', + ]) + ->render(); +?> + +