示例#1
0
 /**
  * Determine current state.
  * @todo Если компонент активный - то передача значения в параметре state - ни на что не влияет,
  * @todo все равно используется состояние определяемое конфигом
  * @todo непонятно то ли это фича то ли бага
  * @final
  */
 private final function determineState()
 {
     //Текущее действие берем из параметров
     //По умолчанию оно равно self::DEFAULT_STATE_NAME
     $this->state = $this->getParam('state');
     // если это основной компонент страницы, должен быть конфигурационный файл
     if ($this->isActive()) {
         if ($this->getConfig()->isEmpty()) {
             throw new SystemException('ERR_DEV_NO_COMPONENT_CONFIG', SystemException::ERR_DEVELOPER, $this->getName());
         }
         // определяем действие по запрошенному URI
         $action = $this->getConfig()->getActionByURI($this->request->getPath(Request::PATH_ACTION, true));
         if ($action !== false) {
             $this->state = $action['name'];
             $this->stateParams = $action['params'];
         }
     } elseif (isset($_POST[$this->getName()]['state'])) {
         $this->state = $_POST[$this->getName()]['state'];
     }
     // устанавливаем права на действие из конфигурации, если определены
     if (!$this->getConfig()->isEmpty()) {
         $this->getConfig()->setCurrentState($this->getState());
         $sc = $this->getConfig()->getCurrentStateConfig();
         if (isset($sc['rights'])) {
             $this->rights = (int) $sc['rights'];
         }
         if ($csp = $this->getConfig()->getCurrentStateParams()) {
             if ($this->stateParams) {
                 $this->stateParams = array_merge($this->stateParams, $csp);
             } else {
                 $this->stateParams = $csp;
             }
         }
     }
 }
示例#2
0
 /**
  * Define and load page components into the ComponentManager.
  * @todo Полный рефакторинг!
  */
 public function loadComponents(callable $getStructure)
 {
     // определяем и загружаем описания content- и layout- частей страницы
     $structure = call_user_func($getStructure, $this->getID());
     // вызывается ли компонент в single режиме?
     $actionParams = $this->request->getPath(Request::PATH_ACTION);
     if (sizeof($actionParams) > 1 && $actionParams[0] == self::SINGLE_SEGMENT) {
         /*
          * Устанавливаем смещение пути на количество существующих
          * сегментов + 1 зарезирвированный сегмент + 1 сегмент
          * имени компонента.
          */
         $this->request->setPathOffset($this->request->getPathOffset() + 2);
         $this->setProperty('single', 'single');
         if ($actionParams[1] == 'pageToolBar') {
             $this->componentManager->add($this->componentManager->createComponent('pageToolBar', 'Energine\\share\\components\\DivisionEditor', ['state' => 'showPageToolbar']));
         } else {
             if (!($blockDescription = ComponentManager::findBlockByName($structure, $actionParams[1]))) {
                 throw new SystemException('ERR_NO_SINGLE_COMPONENT', SystemException::ERR_CRITICAL, $actionParams[1]);
             }
             if (E()->getController()->getViewMode() == DocumentController::TRANSFORM_STRUCTURE_XML) {
                 $int = new IRQ();
                 $int->setStructure($blockDescription);
                 throw $int;
             }
             if ($c = ComponentManager::createBlockFromDescription($blockDescription)) {
                 $this->componentManager->add($c);
             }
         }
     } else {
         if (E()->getController()->getViewMode() == DocumentController::TRANSFORM_STRUCTURE_XML) {
             $int = new IRQ();
             $int->setStructure($structure);
             throw $int;
         }
         foreach ($structure->children() as $XML) {
             if ($c = ComponentManager::createBlockFromDescription($XML)) {
                 $this->componentManager->add($c);
             }
         }
         /*
          * Добавляем к набору компонентов страницы
          * обязательные стандартные компоненты:
          *     - BreadCrumbs
          */
         $this->componentManager->add($this->componentManager->createComponent('breadCrumbs', $this->breadCrumbsClass));
         //Если пользователь не авторизован и авторизационный домен не включает текущеий домен - то добавляем компонент для кроссдоменной авторизации
         if (!$this->user->isAuthenticated() && strpos(E()->getSiteManager()->getCurrentSite()->host, $this->getConfigValue('site.domain')) === false) {
             $this->componentManager->add($this->componentManager->createComponent('cdAuth', 'Energine\\share\\components\\CrossDomainAuth'));
         }
     }
 }