<?php namespace kernel\services; use DirectoryIterator; use kernel\helpers\Debug; use kernel\helpers\Manifest; use kernel\models\Option; class ModuleService { public function getModuleInfo(string $module): false|array|string { $info = []; $info['path'] = $module; if (file_exists($module . "/manifest.json")){ $manifest = file_get_contents($module . "/manifest.json"); $manifest = Manifest::getWithVars($manifest); $info = array_merge($info, $manifest); } return $info; } 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); } else { $path->modules[] = $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; } }