/** * Get modules having current module in dependence and deactivate it if needed * * @param ModuleToggleActivationEvent $event * */ public function recursiveDeactivation(ModuleToggleActivationEvent $event) { if (null !== ($module = ModuleQuery::create()->findPk($event->getModuleId()))) { $moduleValidator = new ModuleValidator($module->getAbsoluteBaseDir()); $dependencies = $moduleValidator->getModulesDependOf(true); foreach ($dependencies as $defMod) { $submodule = ModuleQuery::create()->findOneByCode($defMod["code"]); if ($submodule && $submodule->getActivate() == BaseModule::IS_ACTIVATED) { $subevent = new ModuleToggleActivationEvent($submodule->getId()); $subevent->setRecursive(true); $event->getDispatcher()->dispatch(TheliaEvents::MODULE_TOGGLE_ACTIVATION, $subevent); } } } }
/** * Check if module can be deactivated safely because other modules * could have dependencies to this module * * @param \Thelia\Model\Module $module * @return bool true if the module can be deactivated, otherwise false */ private function checkDeactivation($module) { $moduleValidator = new ModuleValidator($module->getAbsoluteBaseDir()); $modules = $moduleValidator->getModulesDependOf(); if (count($modules) > 0) { $moduleList = implode(', ', array_column($modules, 'code')); $message = count($modules) == 1 ? Translator::getInstance()->trans('%s has dependency to module %s. You have to deactivate this module before.') : Translator::getInstance()->trans('%s have dependencies to module %s. You have to deactivate these modules before.'); throw new ModuleException(sprintf($message, $moduleList, $moduleValidator->getModuleDefinition()->getCode())); } return true; }