public function ShutdownAddRating($aParams)
 {
     $aBonuses = Config::Get('plugin.ratingbonus.action_bonus');
     $oCurrentUser = $this->User_GetUserCurrent();
     if (isset($oCurrentUser)) {
         if (isset($aBonuses[Router::GetActionEvent()]) && isset($aBonuses[Router::GetActionEvent()][Router::GetActionEventName()])) {
             $sTag = Router::GetActionEvent() . '_' . Router::GetActionEventName();
             $oCurrentUser = $this->PluginRatingbonus_Ratingbonus_AddBonus($oCurrentUser, $sTag, $aBonuses[Router::GetActionEvent()][Router::GetActionEventName()]);
         }
         $this->User_Update($oCurrentUser);
     }
 }
 /**
  * Анализируем правила и наборы массивов
  * получаем окончательные списки блоков
  */
 protected function BuildBlocks()
 {
     $sAction = strtolower(Router::GetAction());
     $sEvent = strtolower(Router::GetActionEvent());
     $sEventName = strtolower(Router::GetActionEventName());
     foreach ($this->aBlockRules as $sName => $aRule) {
         $bUse = false;
         /**
          * Если в правиле не указан список блоков, нам такое не нужно
          */
         if (!array_key_exists('blocks', $aRule)) {
             continue;
         }
         /**
          * Если не задан action для исполнения и нет ни одного шаблона path,
          * или текущий не входит в перечисленные в правиле
          * то выбираем следующее правило
          */
         if (!array_key_exists('action', $aRule) && !array_key_exists('path', $aRule)) {
             continue;
         }
         if (isset($aRule['action'])) {
             if (in_array($sAction, (array) $aRule['action'])) {
                 $bUse = true;
             }
             if (array_key_exists($sAction, (array) $aRule['action'])) {
                 /**
                  * Если задан список event`ов и текущий в него не входит,
                  * переходи к следующему действию.
                  */
                 foreach ((array) $aRule['action'][$sAction] as $sEventPreg) {
                     if (substr($sEventPreg, 0, 1) == '/') {
                         /**
                          * Это регулярное выражение
                          */
                         if (preg_match($sEventPreg, $sEvent)) {
                             $bUse = true;
                             break;
                         }
                     } elseif (substr($sEventPreg, 0, 1) == '{') {
                         /**
                          * Это имя event'a (именованный евент, если его нет, то совпадает с именем метода евента в экшене)
                          */
                         if (trim($sEventPreg, '{}') == $sEventName) {
                             $bUse = true;
                             break;
                         }
                     } else {
                         /**
                          * Это название event`a
                          */
                         if ($sEvent == $sEventPreg) {
                             $bUse = true;
                             break;
                         }
                     }
                 }
             }
         }
         /**
          * Если не найдено совпадение по паре Action/Event,
          * переходим к поиску по regexp путей.
          */
         if (!$bUse && isset($aRule['path'])) {
             $sPath = rtrim(Router::GetPathWebCurrent(), "/");
             /**
              * Проверяем последовательно каждый regexp
              */
             foreach ((array) $aRule['path'] as $sRulePath) {
                 $sPattern = "~" . str_replace(array('/', '*'), array('\\/', '[\\w\\-]+'), $sRulePath) . "~";
                 if (preg_match($sPattern, $sPath)) {
                     $bUse = true;
                     break 1;
                 }
             }
         }
         if ($bUse) {
             /**
              * Если задан режим очистки блоков, сначала чистим старые блоки
              */
             if (isset($aRule['clear'])) {
                 switch (true) {
                     /**
                      * Если установлен в true, значит очищаем все
                      */
                     case $aRule['clear'] === true:
                         $this->ClearBlocksAll();
                         break;
                     case is_string($aRule['clear']):
                         $this->ClearBlocks($aRule['clear']);
                         break;
                     case is_array($aRule['clear']):
                         foreach ($aRule['clear'] as $sGroup) {
                             $this->ClearBlocks($sGroup);
                         }
                         break;
                 }
             }
             /**
              * Добавляем все блоки, указанные в параметре blocks
              */
             foreach ($aRule['blocks'] as $sGroup => $aBlocks) {
                 foreach ((array) $aBlocks as $sName => $aParams) {
                     /**
                      * Если название блока указывается в параметрах
                      */
                     if (is_int($sName)) {
                         if (is_array($aParams)) {
                             $sName = $aParams['block'];
                         }
                     }
                     /**
                      * Если $aParams не являются массивом, значит передано только имя блока
                      */
                     if (!is_array($aParams)) {
                         $this->AddBlock($sGroup, $aParams);
                     } else {
                         $this->AddBlock($sGroup, $sName, isset($aParams['params']) ? $aParams['params'] : array(), isset($aParams['priority']) ? $aParams['priority'] : 5);
                     }
                 }
             }
         }
     }
 }
Example #3
0
 /**
  * Загружает виджеты, указанные в правилах
  *
  * @return mixed
  */
 protected function _loadWidgetsList()
 {
     $aResult = parent::_loadWidgetsList();
     // добавляем LS-блоки по старым правилам, если они есть
     $aBlockRules = Config::Get('block');
     if ($aBlockRules) {
         $sAction = strtolower(Router::GetAction());
         $sEvent = strtolower(Router::GetActionEvent());
         $sEventName = strtolower(Router::GetActionEventName());
         foreach ($aBlockRules as $aRule) {
             $bUse = false;
             // * Если в правиле не указан список блоков, нам такое не нужно
             if (!array_key_exists('blocks', $aRule)) {
                 continue;
             }
             /*
              * Если не задан action для исполнения и нет ни одного шаблона path,
              * или текущий не входит в перечисленные в правиле
              * то выбираем следующее правило
              */
             if (!array_key_exists('action', $aRule) && !array_key_exists('path', $aRule)) {
                 continue;
             }
             if (isset($aRule['action'])) {
                 if (in_array($sAction, (array) $aRule['action'])) {
                     $bUse = true;
                 }
                 if (array_key_exists($sAction, (array) $aRule['action'])) {
                     /**
                      * Если задан список event`ов и текущий в него не входит,
                      * переходи к следующему действию.
                      */
                     foreach ((array) $aRule['action'][$sAction] as $sEventPreg) {
                         if (substr($sEventPreg, 0, 1) == '/') {
                             // * Это регулярное выражение
                             if (preg_match($sEventPreg, $sEvent)) {
                                 $bUse = true;
                                 break;
                             }
                         } elseif (substr($sEventPreg, 0, 1) == '{') {
                             // * Это имя event'a (именованный евент, если его нет, то совпадает с именем метода евента в экшене)
                             if (trim($sEventPreg, '{}') == $sEventName) {
                                 $bUse = true;
                                 break;
                             }
                         } else {
                             // * Это название event`a
                             if ($sEvent == $sEventPreg) {
                                 $bUse = true;
                                 break;
                             }
                         }
                     }
                 }
             }
             // * Если не найдено совпадение по паре Action/Event, то переходим к поиску по regexp путей.
             if (!$bUse && isset($aRule['path'])) {
                 $sPath = rtrim(Router::GetPathWebCurrent(), "/");
                 // * Проверяем последовательно каждый regexp
                 foreach ((array) $aRule['path'] as $sRulePath) {
                     $sPattern = "~" . str_replace(array('/', '*'), array('\\/', '[\\w\\-]+'), $sRulePath) . "~";
                     if (preg_match($sPattern, $sPath)) {
                         $bUse = true;
                         break 1;
                     }
                 }
             }
             if ($bUse) {
                 // * Если задан режим очистки блоков, сначала чистим старые блоки
                 if (isset($aRule['clear'])) {
                     switch (true) {
                         // * Если установлен в true, значит очищаем все
                         case $aRule['clear'] === true:
                             //$this->ClearBlocksAll();
                             $aResult = array();
                             break;
                         case is_string($aRule['clear']):
                             //$this->ClearBlocks($aRule['clear']);
                             foreach ($aResult as $sId => $oWidget) {
                                 if ($oWidget->GetGroup() == $aRule['clear']) {
                                     unset($aResult[$sId]);
                                 }
                             }
                             break;
                         case is_array($aRule['clear']):
                             /*
                             foreach ($aRule['clear'] as $sGroup) {
                                 $this->ClearBlocks($sGroup);
                             }
                             */
                             foreach ($aResult as $sId => $oWidget) {
                                 if (in_array($oWidget->GetGroup(), $aRule['clear'])) {
                                     unset($aResult[$sId]);
                                 }
                             }
                             break;
                     }
                 }
                 // * Добавляем все блоки, указанные в параметре blocks
                 foreach ($aRule['blocks'] as $sGroup => $aBlocks) {
                     foreach ((array) $aBlocks as $sName => $aParams) {
                         // * Если название блока указывается в параметрах
                         if (is_int($sName)) {
                             if (is_array($aParams)) {
                                 $sName = $aParams['block'];
                             }
                         }
                         // * Если $aParams не являются массивом, значит передано только имя блока
                         if (!is_array($aParams)) {
                             $sName = $aParams;
                             $aParams = array();
                             $nPriority = isset($aParams['priority']) ? $aParams['priority'] : 5;
                         } else {
                             $nPriority = isset($aParams['priority']) ? $aParams['priority'] : 5;
                             $aParams = isset($aParams['params']) ? $aParams['params'] : array();
                         }
                         $aWidgetData = array('name' => $sName, 'group' => $sGroup, 'priority' => $nPriority, 'params' => $aParams);
                         $oWidget = $this->MakeWidget($aWidgetData);
                         $aResult[$oWidget->getId()] = $oWidget;
                     }
                 }
             }
         }
     }
     return $aResult;
 }