diff --git a/bootstrap.php b/bootstrap.php index afca5a1..da9207e 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -33,6 +33,7 @@ function getConst($text): array|false|string ]; $str = $text; + foreach($constStr as $key => $value) { $str = str_replace($key, $value, $str); diff --git a/kernel/controllers/ModuleController.php b/kernel/controllers/ModuleController.php index cbae844..458671e 100644 --- a/kernel/controllers/ModuleController.php +++ b/kernel/controllers/ModuleController.php @@ -24,10 +24,10 @@ class ModuleController extends AdminController public function actionIndex(): void { - $admin_theme_paths = Option::where("key", "module_paths")->first(); + $module_paths = Option::where("key", "module_paths")->first(); $dirs = []; - if ($admin_theme_paths){ - $path = json_decode($admin_theme_paths->value); + if ($module_paths){ + $path = json_decode($module_paths->value); foreach ($path->paths as $p){ $dirs[] = getConst($p); } diff --git a/kernel/modules/post/manifest.json b/kernel/modules/post/manifest.json index fb2c610..51e2b4a 100644 --- a/kernel/modules/post/manifest.json +++ b/kernel/modules/post/manifest.json @@ -7,5 +7,6 @@ "module_class": "kernel\\modules\\post\\PostModule", "module_class_file": "{KERNEL_MODULES}/post/PostModule.php", "routs": "routs/post.php", - "migration_path": "migrations" + "migration_path": "migrations", + "dependence": "user" } \ No newline at end of file diff --git a/kernel/services/ModuleService.php b/kernel/services/ModuleService.php index 8d9d228..24b602c 100644 --- a/kernel/services/ModuleService.php +++ b/kernel/services/ModuleService.php @@ -3,7 +3,6 @@ namespace kernel\services; use DirectoryIterator; -use kernel\console\Out; use kernel\helpers\Debug; use kernel\helpers\Files; use kernel\helpers\Manifest; @@ -47,20 +46,32 @@ class ModuleService return false; } + /** + * @throws \Exception + */ public function toggleModule(string $module): void { - $active_modules = Option::where("key", "active_modules")->first(); - $path = json_decode($active_modules->value); - if (in_array($module, $path->modules)) { - unset($path->modules[array_search($module, $path->modules)]); - $path->modules = array_values($path->modules); + $active_modules_info = Option::where("key", "active_modules")->first(); + $active_modules = json_decode($active_modules_info->value); + if (in_array($module, $active_modules->modules)) { + unset($active_modules->modules[array_search($module, $active_modules->modules)]); + $active_modules->modules = array_values($active_modules->modules); $this->runDeactivateScript($this->getModuleInfoBySlug($module)); } else { - $path->modules[] = $module; + $module_info = $this->getModuleInfoBySlug($module); + if (isset($module_info['dependence'])) { + $dependence_array = explode(';', $module_info['dependence']); + foreach ($dependence_array as $depend) { + if (!in_array($depend, $active_modules->modules)) { + throw new \Exception("first activate the $depend module"); + } + } + } + $active_modules->modules[] = $module; $this->runInitScript($this->getModuleInfoBySlug($module)); } - $active_modules->value = json_encode($path, JSON_UNESCAPED_UNICODE); - $active_modules->save(); + $active_modules_info->value = json_encode($active_modules, JSON_UNESCAPED_UNICODE); + $active_modules_info->save(); } public function getModuleDir(string $slug)