From aa913293ef8db322cb9407909b62339a66163a75 Mon Sep 17 00:00:00 2001 From: stasbilay02 Date: Wed, 18 Dec 2024 12:27:29 +0300 Subject: [PATCH] admine theme --- kernel/manifest.json | 2 +- .../ModuleShopClientController.php | 2 + .../routs/module_shop_client.php | 4 ++ .../module_shop_client/views/index.php | 24 ++++++++++- kernel/services/AdminThemeService.php | 43 +++++++++++++++++++ 5 files changed, 73 insertions(+), 2 deletions(-) diff --git a/kernel/manifest.json b/kernel/manifest.json index 65282d4..3cccfd0 100644 --- a/kernel/manifest.json +++ b/kernel/manifest.json @@ -1,6 +1,6 @@ { "name": "Kernel", - "version": "0.2", + "version": "0.1", "author": "ITGuild", "slug": "kernel", "type": "kernel", diff --git a/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php b/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php index d2d9b7e..3612132 100644 --- a/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php +++ b/kernel/modules/module_shop_client/controllers/ModuleShopClientController.php @@ -13,6 +13,7 @@ use kernel\helpers\RESTClient; use kernel\helpers\SMTP; use kernel\Mailing; use kernel\Request; +use kernel\services\AdminThemeService; use kernel\services\KernelService; use kernel\services\ModuleService; use kernel\services\ModuleShopService; @@ -58,6 +59,7 @@ class ModuleShopClientController extends AdminController 'module_count' => $module_count, 'per_page' => $per_page, 'kernelService' => new KernelService(), + 'adminThemeService' => new AdminThemeService(), ]); } else { $this->cgView->render("module_shop_error_connection.php"); 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 7e7a00a..cd1a960 100644 --- a/kernel/modules/module_shop_client/routs/module_shop_client.php +++ b/kernel/modules/module_shop_client/routs/module_shop_client.php @@ -21,6 +21,10 @@ App::$collector->group(["prefix" => "admin"], 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']); }); + App::$collector->group(["prefix" => "admin_theme"], function (RouteCollector $router) { + App::$collector->get('/install', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionAdminThemeInstall']); + App::$collector->post('/update', [\kernel\modules\module_shop_client\controllers\ModuleShopClientController::class, 'actionAdminThemeUpdate']); + }); }); }); }); \ 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 da38552..72ab7cd 100644 --- a/kernel/modules/module_shop_client/views/index.php +++ b/kernel/modules/module_shop_client/views/index.php @@ -6,6 +6,7 @@ * @var int $per_page * @var \kernel\services\ModuleService $moduleService * @var \kernel\services\KernelService $kernelService + * @var \kernel\services\AdminThemeService $adminThemeService */ use Itguild\Tables\ListJsonTable; @@ -52,7 +53,7 @@ $table->addAction(function ($row, $url) use ($moduleService){ return null; }); -$table->addAction(function ($row, $url) use ($moduleService, $kernelService){ +$table->addAction(function ($row, $url) use ($moduleService) { $slug = $row['slug']; if ($moduleService->isInstall($slug)) { if (!$moduleService->isLastVersion($slug)) { @@ -62,6 +63,11 @@ $table->addAction(function ($row, $url) use ($moduleService, $kernelService){ } } + return false; +}); + +$table->addAction(function ($row, $url) use ($kernelService) { + $slug = $row['slug']; if ($slug === 'kernel') { if (!$kernelService->isLastVersion()) { $url = "$url/kernel/update_form/"; @@ -73,6 +79,22 @@ $table->addAction(function ($row, $url) use ($moduleService, $kernelService){ return false; }); +$table->addAction(function ($row, $url) use ($adminThemeService) { + $type = $row['type']; + $slug = $row['slug']; + if ($type === 'admin_theme') { + if ($adminThemeService->isInstall($slug)) { + if (!$adminThemeService->isLastVersion($slug)) { + $url = "$url/admin_theme/update/"; + + return \kernel\widgets\IconBtn\IconBtnUpdateWidget::create(['url' => $url])->run(); + } + } + } + + return false; +}); + \kernel\widgets\ModuleTabsWidget::create()->run(); $table->create(); diff --git a/kernel/services/AdminThemeService.php b/kernel/services/AdminThemeService.php index c833cbb..457fa02 100644 --- a/kernel/services/AdminThemeService.php +++ b/kernel/services/AdminThemeService.php @@ -2,20 +2,24 @@ namespace kernel\services; +use DirectoryIterator; use kernel\helpers\Debug; use kernel\helpers\Manifest; +use kernel\helpers\RESTClient; use kernel\models\Option; class AdminThemeService { protected Option $option; protected string $active_theme; + protected ModuleService $moduleService; public function __construct() { $this->option = new Option(); $this->findActiveAdminTheme(); + $this->moduleService = new ModuleService(); } public function findActiveAdminTheme(): void @@ -56,4 +60,43 @@ class AdminThemeService return $info; } + public function isInstall(string $slug): bool + { + $adminThemePaths = Option::where("key", "admin_theme_paths")->first(); + $dirs = []; + if ($adminThemePaths) { + $path = json_decode($adminThemePaths->value); + foreach ($path->paths as $p) { + $dirs[] = getConst($p); + } + } + foreach ($dirs as $dir) { + foreach (new DirectoryIterator($dir) as $fileInfo) { + if ($fileInfo->isDot()) continue; + if ($this->getAdminThemeInfo($fileInfo->getPathname())['slug'] === $slug) { + return true; + } + } + } + + return false; + } + + public function isLastVersion(string $slug): bool + { + if ($this->moduleService->isServerAvailable()) { + $modules_info = RESTClient::request($_ENV['MODULE_SHOP_URL'] . '/api/module_shop/gb_slug'); + + $modules_info = json_decode($modules_info->getBody()->getContents(), true); + + $themeInfo = $this->getAdminThemeInfo($slug); + foreach ($modules_info as $mod) { + if ($mod['slug'] === $themeInfo['slug'] && $mod['version'] === $themeInfo['version']) { + return true; + } + } + } + + return false; + } } \ No newline at end of file