/** * Пакетное управление доступом к MVC-ресурсам * * @return void */ public function aclAction() { $User = new Phorm_User(); if ($this->_request->isPost()) { $FormData = $this->_request->getPost(); if (isset($FormData['acl']) && is_array($FormData['acl'])) { if ($this->Mvc->updateRolesAcl($FormData['acl'])) { $this->_usersession->UserData = $User->getUserInfo(array('userid' => $this->_usersession->UserData['userid'])); $this->view->assign("Success", array($this->_translate->_('Изменения внесены'))); } else { $this->composeTransactionErrorMessage($this->Mvc->_errors); } } } $this->view->assign('Resources', $this->Mvc->getModulesControllersActions()); $this->view->assign('AclList', $this->Mvc->getAclList()); $this->view->assign('Roles', $User->getRolesList()); }
/** * Главная страница * * @return void * @todo Подумать над более красивым решением проблемы с escape * @todo Что за die?!!!! */ public function indexAction() { if ($this->_request->isXmlHttpRequest()) { if (isset($this->_params['categoryid'])) { $Categories = new Phorm_Categories(); $this->view->setEscape('trim'); $Menu = $this->view->navigation()->menu($Categories->getNavigationMenu($this->_params['categoryid']))->render(); die($Menu); } } else { $Mvc = new Phorm_Mvc(); $this->view->assign('MvcTree', $this->view->navigation()->menu($Mvc->getNavigationMenu())->render()); $Resource = new Phorm_Resource(); $this->view->assign('ModulesList', $Resource->getModulesList()); $Categories = new Phorm_Categories(); $this->view->setEscape('trim'); $Menu = $this->view->navigation()->menu($Categories->getNavigationMenu())->render(); $this->view->setEscape('htmlspecialchars'); $this->view->assign('CategoriesTree', $Menu); } }
/** * Инициализация контроллера * * @return void */ public function init() { /** * Вытаскиваем ресурсы из реестра загрузки */ $this->_boot = $this->getInvokeArg('bootstrap'); $this->_cnf = $this->_boot->getOptions(); $this->_params = $this->_request->getParams(); $this->_usersession = $this->_boot->getResource('UserSession'); $this->_translate = $this->_boot->getResource('Translate'); /** * Переопределяем информацию об MVC-ресурсе в случае перенаправлений (форвардов) */ if (!isset($this->_params['mvcinfo']) || ($this->_params['mvcinfo']['module'] != $this->_params['module'] || $this->_params['mvcinfo']['controller'] != $this->_params['controller'] || $this->_params['mvcinfo']['action'] != $this->_params['action'])) { $Mvc = new Phorm_Mvc(); $this->_params['mvcinfo'] = $Mvc->getCurrentMvcInfo(); $this->_setParam('WidgetSetId', $this->_params['mvcinfo']['widgetssetid']); $this->_setParam('mvcinfo', $this->_params['mvcinfo']); $this->_params['isfwd'] = true; } //print_r($this->_request->getParams()); }
/** * Matches a user submitted path with parts defined by a map. Assigns and * returns an array of variables on a successful match. * * @param string $path Path used to match against this routing map * @return array|false An array of assigned values or a false on a mismatch */ public function match($path, $partial = false) { $params = array(); $Mvc = new Phorm_Mvc(); // Проверяем существование идентификатора материала в пути // @todo Сделать возможность конфигурирования паттернов урлов материалов if (preg_match("#^(/.*?)(/([а-яa-z0-9_-]+)\\.html)?\$#iu", $path, $pathinfo)) { // Если мы получили идентификатор материала, то устанавливаем CategoriesController if (isset($pathinfo[3])) { $params["module"] = "default"; $params["controller"] = "categories"; $params["action"] = "index"; $params["resourceid"] = $pathinfo[3]; $params["categorypath"] = $pathinfo[1] == "/" ? "/" : $pathinfo[1] . "/"; $params["categorypath"] = $pathinfo[1] == "/" ? "/" : $pathinfo[1] . "/"; // Иначе получаем модуль, контроллер и действие из родительского math } else { $params = parent::match($path, $partial); // Проверяем существование MVC-ресурса в базе if ($params['mvcinfo'] = $Mvc->getMvcInfo($params)) { $params['WidgetSetId'] = $params['mvcinfo']['widgetssetid']; //print_r($params); return $params; // Если MVC-ресурс не найден, то устанавливаем CategoriesController } else { $params["module"] = "default"; $params["controller"] = "categories"; $params["action"] = "index"; $params["categorypath"] = preg_match("#/\$#", $pathinfo[1]) ? $pathinfo[1] : $pathinfo[1] . "/"; } } } // После всех экзекуций у нас должны остаться только ресурсы для CategoriesControllerа $Categories = new Phorm_Categories(); $Categories->setModule($params["module"]); // Проверяем существование раздела if ($CategoryInfo = $Categories->getCategoryInfoByPath($params["categorypath"])) { $params["categoryinfo"] = $CategoryInfo; $params["WidgetSetId"] = $CategoryInfo["widgetssetid"]; // Если мы на главной странице раздела и есть материал для замещения, то переопределяем идентификатор материала if (!isset($params["resourceid"]) && $CategoryInfo["mainresourceid"] > 0) { $params["resourceid"] = $CategoryInfo["mainresourceid"]; } // Проверяем существование материала в текущем разделе и модуле по его идентификатору if (isset($params["resourceid"])) { $Resource = new Phorm_Resource(); $Resource->setModule($params["module"]); $options = array("categoryid" => $CategoryInfo["categoryid"], "moduleid" => $CategoryInfo["moduleid"]); if ($ResourceInfo = $Resource->getResourceInfo($params["resourceid"], $options)) { $params["module"] = "default"; $params["controller"] = $CategoryInfo["modulecontroller"]; $params["action"] = "view"; $params["resourceinfo"] = $ResourceInfo; $params["mvcinfo"] = $Mvc->getMvcInfo($params); $params["WidgetSetId"] = $ResourceInfo["widgetssetid"]; //print_r($params); return $params; } } else { $params["mvcinfo"] = $Mvc->getMvcInfo($params); //print_r($params); return $params; } } // Все, что не смогло вернуться выше, попадает в ErrorController notfoundAction $params["module"] = "default"; $params["controller"] = "error"; $params["action"] = "notfound"; $params["mvcinfo"] = $Mvc->getMvcInfo($params); $params["WidgetSetId"] = $params["mvcinfo"]["widgetssetid"]; return $params; }