getModuleInfo($this->getModuleDir($slug)); } public function isActive(string $slug): bool { $active_modules = Option::where("key", "active_modules")->first(); if ($active_modules) { $path = json_decode($active_modules->value); foreach ($path->modules as $p) { if ($p === $slug) { return true; } } } return false; } public function setActiveModule(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); $this->runDeactivateScript($this->getModuleInfoBySlug($module)); } else { $path->modules[] = $module; $this->runInitScript($this->getModuleInfoBySlug($module)); } $active_modules->value = json_encode($path, JSON_UNESCAPED_UNICODE); $active_modules->save(); } public function getModuleDir(string $slug) { $module_paths = Option::where("key", "module_paths")->first(); $dirs = []; if ($module_paths) { $path = json_decode($module_paths->value); foreach ($path->paths as $p) { $dirs[] = getConst($p); } } foreach ($dirs as $dir) { foreach (new DirectoryIterator($dir) as $fileInfo) { if (basename($fileInfo->getPathname()) === $slug) { return $fileInfo->getPathname(); } } } return false; } public function runInitScript($mod_info): void { if (isset($mod_info['module_class'])){ if (isset($mod_info['module_class_file'])){ require_once $mod_info['module_class_file']; } $moduleClass = new $mod_info['module_class'](); $moduleClass->init(); } } public function runDeactivateScript($mod_info): void { if (isset($mod_info['module_class'])){ if (isset($mod_info['module_class_file'])){ require_once $mod_info['module_class_file']; } $moduleClass = new $mod_info['module_class'](); $moduleClass->deactivate(); } } public function getActiveModules(): array { $modules = []; $module_paths = Option::where("key", "module_paths")->first(); $active_modules = Option::where("key", "active_modules")->first(); $dirs = []; if ($module_paths) { $path = json_decode($module_paths->value); foreach ($path->paths as $p) { $dirs[] = getConst($p); } } $active_modules = json_decode($active_modules->value, true); foreach ($dirs as $dir) { foreach (new DirectoryIterator($dir) as $fileInfo) { if($fileInfo->isDot() or !in_array($fileInfo->getFilename(), $active_modules['modules'])) continue; $modules[] = $this->getModuleInfo($fileInfo->getPathname()); } } return $modules; } public function getModulesRouts(): array { $routs = []; $modules = $this->getActiveModules(); foreach ($modules as $module){ if (isset($module['routs'])){ $routs[] = $module['path'] . "/" . $module['routs']; } } return $routs; } public function getModulesMigrationsPaths(): array { $migrationsPaths = []; $modules = $this->getActiveModules(); foreach ($modules as $module){ if (isset($module['migration_path'])){ $migrationsPaths[] = $module['path'] . "/" . $module['migration_path']; } } return $migrationsPaths; } }