diff --git a/common/defaults/config.php b/common/defaults/config.php index a476851f7..94b655b29 100644 --- a/common/defaults/config.php +++ b/common/defaults/config.php @@ -135,6 +135,7 @@ return array( 'tablets' => false, 'viewport' => 'width=device-width, initial-scale=1.0, user-scalable=yes', ), + 'namespaces' => [], 'use_rewrite' => true, 'use_sso' => false, 'other' => array(), diff --git a/modules/install/install.admin.controller.php b/modules/install/install.admin.controller.php index 924990afe..feca76eee 100644 --- a/modules/install/install.admin.controller.php +++ b/modules/install/install.admin.controller.php @@ -61,6 +61,27 @@ class installAdminController extends install return $output; } + $output = $oModuleController->registerEventHandlers($module_name); + if($output instanceof BaseObject && !$output->toBool()) + { + Rhymix\Framework\Session::start(); + return $output; + } + + $output = $oModuleController->registerNamespaces($module_name); + if($output instanceof BaseObject && !$output->toBool()) + { + Rhymix\Framework\Session::start(); + return $output; + } + + $output = $oModuleController->registerPrefixes($module_name); + if($output instanceof BaseObject && !$output->toBool()) + { + Rhymix\Framework\Session::start(); + return $output; + } + Rhymix\Framework\Session::start(); $this->setMessage('success_updated'); } diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index cc615412d..2b8917ae4 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -1388,6 +1388,73 @@ class ModuleController extends Module return new BaseObject(); } + + /** + * Check if all event handlers are registered. If not, register them. + * + * @param string $module_name + * @return object + */ + public function registerEventHandlers(string $module_name) + { + $module_action_info = ModuleModel::getModuleActionXml($module_name); + + foreach ($module_action_info->event_handlers ?? [] as $ev) + { + if(!ModuleModel::getTrigger($ev->event_name, $module_name, $ev->class_name, $ev->method, $ev->position)) + { + $output = $this->insertTrigger($ev->event_name, $module_name, $ev->class_name, $ev->method, $ev->position); + if (!$output->toBool()) + { + return $output; + } + } + } + + return new BaseObject(); + } + + /** + * Check if all custom namespaces are registered. If not, register them. + * + * @param string $module_name + * @return object + */ + public function registerNamespaces(string $module_name) + { + $module_action_info = ModuleModel::getModuleActionXml($module_name); + $namespaces = config('namespaces') ?? []; + $changed = false; + + foreach ($module_action_info->namespaces ?? [] as $name) + { + if(!isset($namespaces[$name])) + { + $namespaces[$name] = $module_name; + $changed = true; + } + } + + if ($changed) + { + Rhymix\Framework\Config::set('namespaces', $namespaces); + Rhymix\Framework\Config::save(); + } + + return new BaseObject(); + } + + /** + * Check if all prefixes for a module are registered. If not, register them. + * + * @param string $module_name + * @return object + */ + public function registerPrefixes(string $module_name) + { + // TODO + return new BaseObject(); + } } /* End of file module.controller.php */ /* Location: ./modules/module/module.controller.php */ diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 672eb7925..967c0cbec 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -1631,9 +1631,39 @@ class ModuleModel extends Module $info->need_update = true; } } + + // Check if all event handlers are registered. + foreach ($module_action_info->event_handlers ?? [] as $ev) + { + if(!ModuleModel::getTrigger($ev->event_name, $module_name, $ev->class_name, $ev->method, $ev->position)) + { + $info->need_update = true; + } + } + + // Check if all namespaces are registered. + $namespaces = config('namespaces') ?? []; + foreach ($module_action_info->namespaces ?? [] as $name) + { + if(!isset($namespaces[$name])) + { + $info->need_update = true; + } + } + + // Check if all prefixes are registered. + foreach ($module_action_info->prefixes ?? [] as $name) + { + if(!ModuleModel::getModuleSrlByMid($name)) + { + $info->need_update = true; + } + } } + $list[] = $info; } + return $list; }