/**
  * Удаляет комментарии из базы данных
  *
  * @param   array|int $aTargetId Список ID владельцев
  * @param   string $sTargetType Тип владельцев
  * @return  bool
  */
 public function DeleteCommentByTargetId($aTargetId, $sTargetType)
 {
     if (!is_array($aTargetId)) {
         $aTargetId = array($aTargetId);
     }
     /**
      * Получаем список идентификаторов удаляемых комментариев
      */
     $aCommentsId = array();
     foreach ($aTargetId as $sTargetId) {
         $aComments = $this->GetCommentsByTargetId($sTargetId, $sTargetType);
         $aCommentsId = array_merge($aCommentsId, array_keys($aComments['comments']));
     }
     /**
      * Если ни одного комментария не найдено, выходим
      */
     if (!count($aCommentsId)) {
         return true;
     }
     /**
      * Чистим зависимые кеши
      */
     if (Config::Get('sys.cache.solid')) {
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("comment_update", "comment_target_{$sTargetId}_{$sTargetType}"));
     } else {
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("comment_target_{$sTargetId}_{$sTargetType}"));
         /**
          * Удаляем кеш для каждого комментария
          */
         foreach ($aCommentsId as $iCommentId) {
             $this->Cache_Delete("comment_{$iCommentId}");
         }
     }
     if ($this->oMapper->DeleteCommentByTargetId($aTargetId, $sTargetType)) {
         /**
          * Удаляем комментарии из избранного
          */
         $this->DeleteFavouriteCommentsByArrayId($aCommentsId);
         /**
          * Удаляем комментарии к топику из прямого эфира
          */
         $this->DeleteCommentOnlineByArrayId($aCommentsId, $sTargetType);
         /**
          * Удаляем голосование за комментарии
          */
         $this->Vote_DeleteVoteByTarget($aCommentsId, 'comment');
         return true;
     }
     return false;
 }
Exemple #2
0
 /**
  * Удаляет комментарии из базы данных
  *
  * @param   array|int   $aTargetsId      Список ID владельцев
  * @param   string      $sTargetType     Тип владельцев
  *
  * @return  bool
  */
 public function DeleteCommentByTargetId($aTargetsId, $sTargetType)
 {
     if (!is_array($aTargetsId)) {
         $aTargetsId = array($aTargetsId);
     }
     // * Получаем список идентификаторов удаляемых комментариев
     $aCommentsId = $this->GetCommentsIdByTargetsId($aTargetsId, $sTargetType);
     // * Если ни одного комментария не найдено, выходим
     if (!count($aCommentsId)) {
         return true;
     }
     $bResult = $this->oMapper->DeleteCommentByTargetId($aTargetsId, $sTargetType);
     if ($bResult) {
         // * Удаляем комментарии из избранного
         $this->DeleteFavouriteCommentsByArrayId($aCommentsId);
         // * Удаляем комментарии к топику из прямого эфира
         $this->DeleteCommentOnlineByArrayId($aCommentsId, $sTargetType);
         // * Удаляем голосование за комментарии
         E::ModuleVote()->DeleteVoteByTarget($aCommentsId, 'comment');
     }
     // * Чистим зависимые кеши, даже если что-то не так пошло
     if (Config::Get('sys.cache.solid')) {
         foreach ($aTargetsId as $nTargetId) {
             E::ModuleCache()->CleanByTags(array("comment_update", "comment_target_{$nTargetId}_{$sTargetType}"));
         }
     } else {
         foreach ($aTargetsId as $nTargetId) {
             E::ModuleCache()->CleanByTags(array("comment_target_{$nTargetId}_{$sTargetType}"));
         }
         if ($aCommentsId) {
             // * Удаляем кеш для каждого комментария
             foreach ($aCommentsId as $iCommentId) {
                 E::ModuleCache()->Delete("comment_{$iCommentId}");
             }
         }
     }
     return $bResult;
 }