public static function scan_all_modules() { $Directory = new RecursiveDirectoryIterator('./modules'); $Iterator = new RecursiveIteratorIterator($Directory); $regex = new RegexIterator($Iterator, '/^.+\\module.php$/i', RecursiveRegexIterator::GET_MATCH); $systemModules = get_all_classes_implementing_interfaces("SystemModule"); $res = array(); $enabled = method_invoke_all("info"); $modules = array(); $systemModules = array_map('strtolower', $systemModules); $available = array(); foreach ($enabled as $k => $e) { $modules[$e['name']] = $e; $modules[$e['name']]["path"] = ""; $modules[$e['name']]["system_module"] = in_array(strtolower($e["name"]), $systemModules) ? "1" : "0"; $modules[$e['name']]["enabled"] = 1; } foreach ($regex as $item) { $data = file_get_contents($item[0]); if (preg_match("/@moduleName ([A-Za-z0-9_]+)/", $data, $matches)) { include_once $item[0]; $res = method_invoke($matches[1], "info"); $res["path"] = $item[0]; $res["system_module"] = 0; $res['enabled'] = 0; $available[$matches[1]] = $res; } } foreach ($available as $k => $v) { if (in_array($k, array_keys($modules))) { $modules[$k]['path'] = $v['path']; } else { $modules[$k] = $v; } } return $modules; }
function get_all_modules($interface = "Module") { return get_all_classes_implementing_interfaces($interface); }