settings = $settings; $this->db = $db; $this->user = $user; $this->default = $default; } public function isLoaded($name) { return isset($this->modules[$name]); } /** * Создает экземпляр модуля и выполняет действия для него * @param string $name Имя модуля * @param request $request Имя модуля * @return string */ public function loadModule($name, Collection $request, $controller = null) { if ($this->isLoaded($name)) { $module = $this->modules[$name]; return $module->access->execute($request); } $system = $this->settings['system']; $moulesPath = $system->readKey(['path', 'modules']); $logPath = Path::join($this->settings['site'], $system->readKey(['path', 'access.log'])); $moduleFile = Path::join($this->settings['base'], $moulesPath, $name, 'classes', $controller ? $controller : $name); $ucname = ucfirst($name); $moduleClass = "Modules\\$ucname\\$ucname"; $module = new $moduleClass(); if ($module) { // Инициализация модуля $modPath = Path::join($moulesPath, $name); $module->viewPath = $modPath; $module->name = $name; // $module->settings = $this->settings; $module->db = $this->db; // Ведение лога $logger = new ActionLogger($module, $logPath, $this->user); $logger->before = $this->loadSettings(Path::join($modPath, 'filter', 'logger.php')); // Управление доступом $module->access = new ActionAccess($logger); $module->access->access = $this->loadSettings(Path::join($modPath, 'filter', 'access.php')); $module->setUp(); $this->modules[$name] = $module; $result = $module->access->execute($request); return $result; } return null; // throw new FileNotFoundException(); } public function execute(HttpRequest $request) { $name = explode("\\", $request->get('module', $this->default)); if (count($name) >= 2) { $controller = $name[1]; } else { $controller = null; } try { return $this->loadModule($name[0], $request, $controller); } catch (UserMessageException $ex) { //Исключение с понятным пользователю сообщением $mode = $request->get('mode'); if($mode == 'ajax' || $mode == 'json') { return json_encode(['result'=>'fail', 'message'=> $ex->userMessage]); } else { return $ex->userMessage; } } } }