Support customizing the default (base) class and install class of a module

This commit is contained in:
Kijin Sung 2023-08-11 22:09:26 +09:00
parent 7502b7308b
commit 3241354872
3 changed files with 23 additions and 4 deletions

View file

@ -450,7 +450,7 @@ class ModuleHandler extends Handler
$oModule = self::getModuleInstance($this->module, $type ?: 'class', $kind); $oModule = self::getModuleInstance($this->module, $type ?: 'class', $kind);
if (!$oModule) if (!$oModule)
{ {
$oModule = ModuleModel::getModuleBaseClass($this->module, $xml_info); $oModule = ModuleModel::getModuleDefaultClass($this->module, $xml_info);
} }
} }

View file

@ -51,10 +51,11 @@ class ModuleActionParser extends BaseParser
$info->action = new \stdClass; $info->action = new \stdClass;
$info->grant = new \stdClass; $info->grant = new \stdClass;
$info->menu = new \stdClass; $info->menu = new \stdClass;
$info->error_handlers = []; $info->classes = [];
$info->event_handlers = [];
$info->namespaces = []; $info->namespaces = [];
$info->prefixes = []; $info->prefixes = [];
$info->error_handlers = [];
$info->event_handlers = [];
// Parse grants. // Parse grants.
foreach ($xml->grants->grant ?: [] as $grant) 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. // Parse custom namespaces.
foreach ($xml->namespaces->namespace ?: [] as $namespace) foreach ($xml->namespaces->namespace ?: [] as $namespace)
{ {

View file

@ -1432,7 +1432,7 @@ class ModuleModel extends Module
* @param string $module_name * @param string $module_name
* @return ModuleObject|null * @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) if (!$module_action_info)
{ {
@ -1448,6 +1448,12 @@ class ModuleModel extends Module
$namespace = 'Rhymix\\Modules\\' . ucfirst($module_name); $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'; $class_name = $namespace . '\\Base';
if (class_exists($class_name)) if (class_exists($class_name))
{ {
@ -1490,6 +1496,12 @@ class ModuleModel extends Module
$namespace = 'Rhymix\\Modules\\' . ucfirst($module_name); $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'; $class_name = $namespace . '\\Install';
if (class_exists($class_name)) if (class_exists($class_name))
{ {