diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 4d4135c25..59c479f8a 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -450,7 +450,7 @@ class ModuleHandler extends Handler $oModule = self::getModuleInstance($this->module, $type ?: 'class', $kind); if (!$oModule) { - $oModule = ModuleModel::getModuleBaseClass($this->module, $xml_info); + $oModule = ModuleModel::getModuleDefaultClass($this->module, $xml_info); } } diff --git a/common/framework/parsers/ModuleActionParser.php b/common/framework/parsers/ModuleActionParser.php index 565547a2e..1aed494a4 100644 --- a/common/framework/parsers/ModuleActionParser.php +++ b/common/framework/parsers/ModuleActionParser.php @@ -51,10 +51,11 @@ class ModuleActionParser extends BaseParser $info->action = new \stdClass; $info->grant = new \stdClass; $info->menu = new \stdClass; - $info->error_handlers = []; - $info->event_handlers = []; + $info->classes = []; $info->namespaces = []; $info->prefixes = []; + $info->error_handlers = []; + $info->event_handlers = []; // Parse grants. foreach ($xml->grants->grant ?: [] as $grant) @@ -242,6 +243,12 @@ class ModuleActionParser extends BaseParser } } + // Parse custom classes. + foreach ($xml->classes->class ?: [] as $class) + { + $info->classes[strval($class['type'])] = strval($class['name']); + } + // Parse custom namespaces. foreach ($xml->namespaces->namespace ?: [] as $namespace) { diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 9ee113f32..0211c0141 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -1432,7 +1432,7 @@ class ModuleModel extends Module * @param string $module_name * @return ModuleObject|null */ - public static function getModuleBaseClass(string $module_name, ?object $module_action_info = null) + public static function getModuleDefaultClass(string $module_name, ?object $module_action_info = null) { if (!$module_action_info) { @@ -1448,6 +1448,12 @@ class ModuleModel extends Module $namespace = 'Rhymix\\Modules\\' . ucfirst($module_name); } + if (isset($module_action_info->classes['default'])) + { + $class_name = $namespace . '\\' . $module_action_info->classes['default']; + return class_exists($class_name) ? $class_name::getInstance() : null; + } + $class_name = $namespace . '\\Base'; if (class_exists($class_name)) { @@ -1490,6 +1496,12 @@ class ModuleModel extends Module $namespace = 'Rhymix\\Modules\\' . ucfirst($module_name); } + if (isset($module_action_info->classes['install'])) + { + $class_name = $namespace . '\\' . $module_action_info->classes['install']; + return class_exists($class_name) ? $class_name::getInstance() : null; + } + $class_name = $namespace . '\\Install'; if (class_exists($class_name)) {