public function loadModule($name, $config, $info)
{
$ext = false;
$baseClass = $this->moduleNamespace . '\\' . $name . '\\Module';
$cl = $baseClass;
if (!$config->params->installed || !$config->params->active || $config->params->only_auth && true) {
return false;
}
if ($this->moduleContainer->offsetExists($this->moduleNamespace . '\\' . $name)) {
return false;
}
if (isset($config->class_ext)) {
$baseClass = $cl;
$cl = $config->class_ext;
$ext = true;
}
if (!class_exists($cl)) {
throw new \Exception("Class \"{$cl}\" not found", 1);
}
if ($ext) {
$p = trim(get_parent_class($cl), '\\');
$b = trim($baseClass, '\\');
if ($p != $b) {
throw new \Exception("Class \"{$cl}\" not extend base class \"{$baseClass}\"", 1);
}
}
if (isset($config->dependeny) && is_array($config->dependeny)) {
$this->checkDependecies($config->dependeny);
}
$this->moduleContainer->singleton($this->moduleNamespace . '\\' . $name, function () use($info, $config, $cl) {
$module = new $cl();
$module->setInfo($info);
$module->setConfig($config->params);
return $module;
});
$this->moduleContainer->alias($this->moduleNamespace . '\\' . $name, $info->system_name);
$this->modulesName[] = $info->system_name;
if (isset($config->class_decorators) && is_array($config->class_decorators)) {
$this->decoratorsInit($this->moduleNamespace . '\\' . $name, $config->class_decorators);
}
return true;
}