diff --git a/modules/autoinstall/autoinstall.lib.php b/modules/autoinstall/autoinstall.lib.php index caa5533b4..04655e659 100644 --- a/modules/autoinstall/autoinstall.lib.php +++ b/modules/autoinstall/autoinstall.lib.php @@ -153,12 +153,8 @@ class ModuleInstaller { $path_array = explode("/", $this->package->path); $target_name = array_pop($path_array); - $oModule = getModule($target_name, "class"); - if(!$oModule) - { - return new BaseObject(-1, 'msg_invalid_request'); - } - if(!method_exists($oModule, "moduleUninstall")) + $oModule = ModuleModel::getModuleInstallClass($target_name); + if(!$oModule || !method_exists($oModule, 'moduleUninstall')) { return new BaseObject(-1, 'msg_invalid_request'); } @@ -203,16 +199,15 @@ class ModuleInstaller if($type == "module") { - $oModuleModel = getModel('module'); $oInstallController = getController('install'); $module_path = ModuleHandler::getModulePath($target_name); - if($oModuleModel->checkNeedInstall($target_name)) + if(ModuleModel::checkNeedInstall($target_name)) { $oInstallController->installModule($target_name, $module_path); } - if($oModuleModel->checkNeedUpdate($target_name)) + if(ModuleModel::checkNeedUpdate($target_name)) { - $oModule = getModule($target_name, 'class'); + $oModule = ModuleModel::getModuleInstallClass($target_name); if(method_exists($oModule, 'moduleUpdate')) { $oModule->moduleUpdate(); diff --git a/modules/autoinstall/autoinstall.model.php b/modules/autoinstall/autoinstall.model.php index c785cf17e..3165c913b 100644 --- a/modules/autoinstall/autoinstall.model.php +++ b/modules/autoinstall/autoinstall.model.php @@ -316,7 +316,7 @@ class autoinstallModel extends autoinstall { $path_array = explode("/", $path); $target_name = array_pop($path_array); - $oModule = getModule($target_name, "class"); + $oModule = ModuleModel::getModuleInstallClass($target_name); if(!$oModule) { return FALSE; diff --git a/modules/install/install.admin.controller.php b/modules/install/install.admin.controller.php index 6ca71b961..3095849d6 100644 --- a/modules/install/install.admin.controller.php +++ b/modules/install/install.admin.controller.php @@ -38,8 +38,11 @@ class installAdminController extends install $module_name = Context::get('module_name'); if(!$module_name) throw new Rhymix\Framework\Exceptions\InvalidRequest; - $oModule = getModule($module_name, 'class'); - if(!$oModule) throw new Rhymix\Framework\Exceptions\InvalidRequest; + $oModule = ModuleModel::getModuleInstallClass($module_name); + if(!$oModule || !method_exists($oModule, 'moduleUpdate')) + { + throw new Rhymix\Framework\Exceptions\InvalidRequest; + } Rhymix\Framework\Session::close(); diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index 12d5acad4..c72082c84 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -472,7 +472,7 @@ class installController extends install } // Install "module" module in advance $this->installModule('module','./modules/module'); - $oModule = getClass('module'); + $oModule = ModuleModel::getModuleInstallClass($module); if($oModule->checkUpdate()) $oModule->moduleUpdate(); // Determine the order of module installation depending on category $install_step = array('system','content','member'); @@ -486,7 +486,7 @@ class installController extends install if($module == 'module') continue; $this->installModule($module, sprintf('./modules/%s', $module)); - $oModule = getClass($module); + $oModule = ModuleModel::getModuleInstallClass($module); if(is_object($oModule) && method_exists($oModule, 'checkUpdate')) { if($oModule->checkUpdate()) $oModule->moduleUpdate(); @@ -507,7 +507,7 @@ class installController extends install if($module == 'module') continue; $this->installModule($module, sprintf('./modules/%s', $module)); - $oModule = getClass($module); + $oModule = ModuleModel::getModuleInstallClass($module); if($oModule && method_exists($oModule, 'checkUpdate') && method_exists($oModule, 'moduleUpdate')) { if($oModule->checkUpdate()) $oModule->moduleUpdate(); @@ -555,7 +555,7 @@ class installController extends install } // Create a table and module instance and then execute install() method unset($oModule); - $oModule = getClass($module); + $oModule = ModuleModel::getModuleInstallClass($module); if(method_exists($oModule, 'moduleInstall')) $oModule->moduleInstall(); return new BaseObject(); } diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 71772f797..5d9455a4b 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -1375,6 +1375,27 @@ class moduleModel extends module return $list; } + /** + * Get module install class + * + * This method supports namespaced modules as well as XE-compatible modules. + * + * @param string $module_name + * @return ModuleObject|null + */ + public static function getModuleInstallClass(string $module_name) + { + $class_name = 'Rhymix\\Modules\\' . ucfirst($module_name) . '\\Install'; + if (class_exists($class_name)) + { + return $class_name::getInstance(); + } + elseif ($oModule = getModule($module_name, 'class')) + { + return $oModule; + } + } + public static function checkNeedInstall($module_name) { $oDB = &DB::getInstance(); @@ -1402,7 +1423,7 @@ class moduleModel extends module public static function checkNeedUpdate($module_name) { // Check if it is upgraded to module.class.php on each module - $oDummy = getModule($module_name, 'class'); + $oDummy = self::getModuleInstallClass($module_name); if($oDummy && method_exists($oDummy, "checkUpdate")) { return $oDummy->checkUpdate(); @@ -1502,7 +1523,7 @@ class moduleModel extends module } // Check if it is upgraded to module.class.php on each module - $oDummy = getModule($module_name, 'class'); + $oDummy = self::getModuleInstallClass($module_name); if($oDummy && method_exists($oDummy, "checkUpdate")) { $info->need_update = $oDummy->checkUpdate();