예제 #1
0
 /**
  * Запускает на выполнение экшен
  * Может запускаться рекурсивно если в одном экшене стоит переадресация на другой
  *
  */
 public function ExecAction()
 {
     $this->DefineActionClass();
     /**
      * Сначала запускаем инициализирующий евент
      */
     $this->Hook_Run('init_action');
     $sActionClass = $this->DefineActionClass();
     /**
      * Определяем наличие делегата экшена
      */
     if ($aChain = $this->Plugin_GetDelegationChain('action', $sActionClass)) {
         if (!empty($aChain)) {
             $sActionClass = $aChain[0];
         }
     }
     self::$sActionClass = $sActionClass;
     /**
      * Если класс экешна начинается с Plugin*_, значит необходимо загрузить объект из указанного плагина
      */
     if (!preg_match('/^Plugin([\\w]+)_Action([\\w]+)$/i', $sActionClass, $aMatches)) {
         require_once Config::Get('path.root.server') . '/classes/actions/' . $sActionClass . '.class.php';
     } else {
         require_once Config::Get('path.root.server') . '/plugins/' . strtolower($aMatches[1]) . '/classes/actions/Action' . ucfirst($aMatches[2]) . '.class.php';
     }
     $sClassName = $sActionClass;
     $this->oAction = new $sClassName($this->oEngine, self::$sAction);
     /**
      * Инициализируем экшен
      */
     $this->Hook_Run("action_init_" . strtolower($sActionClass) . "_before");
     $sInitResult = $this->oAction->Init();
     $this->Hook_Run("action_init_" . strtolower($sActionClass) . "_after");
     if ($sInitResult === 'next') {
         $this->ExecAction();
     } else {
         /**
          * Замеряем время работы action`а
          */
         $oProfiler = ProfilerSimple::getInstance();
         $iTimeId = $oProfiler->Start('ExecAction', self::$sAction);
         $res = $this->oAction->ExecEvent();
         self::$sActionEventName = $this->oAction->GetCurrentEventName();
         $this->Hook_Run("action_shutdown_" . strtolower($sActionClass) . "_before");
         $this->oAction->EventShutdown();
         $this->Hook_Run("action_shutdown_" . strtolower($sActionClass) . "_after");
         $oProfiler->Stop($iTimeId);
         if ($res === 'next') {
             $this->ExecAction();
         }
     }
 }
예제 #2
0
 /**
  * Запускает на выполнение экшен
  * Может запускаться рекурсивно если в одном экшене стоит переадресация на другой
  *
  */
 public function ExecAction()
 {
     $this->DefineActionClass();
     /**
      * Сначала запускаем инициализирующий евент
      */
     $this->Hook_Run('init_action');
     $sActionClass = $this->DefineActionClass();
     /**
      * Определяем наличие делегата экшена
      */
     if ($aChain = $this->Plugin_GetDelegationChain('action', $sActionClass)) {
         if (!empty($aChain)) {
             $sActionClass = $aChain[0];
         }
     }
     self::$sActionClass = $sActionClass;
     $sClassName = $sActionClass;
     $this->oAction = new $sClassName(self::$sAction);
     /**
      * Инициализируем экшен
      */
     $this->Hook_Run("action_init_" . strtolower($sActionClass) . "_before");
     $sInitResult = $this->oAction->Init();
     $this->Hook_Run("action_init_" . strtolower($sActionClass) . "_after");
     if ($sInitResult === 'next') {
         $this->ExecAction();
     } else {
         $mRes = $this->oAction->ExecEvent();
         self::$sActionEventName = $this->oAction->GetCurrentEventName();
         $this->Hook_Run("action_shutdown_" . strtolower($sActionClass) . "_before");
         $this->oAction->EventShutdown();
         $this->Hook_Run("action_shutdown_" . strtolower($sActionClass) . "_after");
         if ($mRes === 'next') {
             $this->ExecAction();
         }
     }
 }
예제 #3
0
 /**
  * Запускает на выполнение экшен
  * Может запускаться рекурсивно если в одном экшене стоит переадресация на другой
  *
  */
 public function ExecAction()
 {
     $this->DefineActionClass();
     // Hook before action
     E::ModuleHook()->Run('action_before');
     $sActionClass = $this->DefineActionClass();
     // * Определяем наличие делегата экшена
     if ($aChain = E::ModulePlugin()->GetDelegationChain('action', $sActionClass)) {
         if (!empty($aChain)) {
             $sActionClass = $aChain[0];
         }
     }
     static::$sActionClass = $sActionClass;
     if (!class_exists($sActionClass)) {
         throw new Exception('Cannot load class "' . $sActionClass . '"');
     }
     $this->oAction = new $sActionClass(static::$sAction);
     // * Инициализируем экшен
     $sInitResult = $this->oAction->Init();
     if ($sInitResult === 'next') {
         $this->ExecAction();
     } else {
         // Если инициализация экшена прошла успешно и метод провеки доступа вернул
         // положительный результат то запускаем запрошенный ивент на исполнение.
         if ($sInitResult !== false && $this->oAction->Access(self::GetActionEvent()) !== false) {
             $res = $this->oAction->ExecEvent();
             static::$sActionEventName = $this->oAction->GetCurrentEventName();
             $this->oAction->EventShutdown();
             if ($res === 'next') {
                 $this->ExecAction();
             }
         } else {
             if (!F::AjaxRequest()) {
                 static::$sAction = $this->aConfigRoute['config']['action_not_found'];
                 static::$sActionEvent = '404';
                 $this->ExecAction();
             }
         }
     }
     // Hook after action
     E::ModuleHook()->Run('action_after');
 }
예제 #4
0
 /**
  * Запускает на выполнение экшен
  * Может запускаться рекурсивно если в одном экшене стоит переадресация на другой
  *
  */
 public function ExecAction()
 {
     $this->DefineActionClass();
     // Hook before action
     E::ModuleHook()->Run('action_before');
     $sActionClass = $this->DefineActionClass();
     // * Определяем наличие делегата экшена
     if ($aChain = E::ModulePlugin()->GetDelegationChain('action', $sActionClass)) {
         if (!empty($aChain)) {
             $sActionClass = $aChain[0];
         }
     }
     static::$sActionClass = $sActionClass;
     if (!class_exists($sActionClass)) {
         throw new Exception('Cannot load class "' . $sActionClass . '"');
     }
     $this->oAction = new $sActionClass(static::$sAction);
     // * Инициализируем экшен
     $sInitResult = $this->oAction->Init();
     if ($sInitResult === 'next') {
         $this->ExecAction();
     } else {
         // Если инициализация экшена прошла успешно,
         // то запускаем запрошенный ивент на исполнение.
         if ($sInitResult !== false) {
             $xEventResult = $this->oAction->ExecEvent();
             static::$sActionEventName = $this->oAction->GetCurrentEventName();
             $this->oAction->EventShutdown();
             if ($xEventResult === 'next') {
                 $this->ExecAction();
             }
         }
     }
     // Hook after action
     E::ModuleHook()->Run('action_after');
 }