예제 #1
0
 /**
  * Удаляет топик.
  * Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
  *
  * @param ModuleTopic_EntityTopic|int $oTopic Объект топика или ID
  * @return bool
  */
 public function DeleteTopic($oTopic)
 {
     if ($oTopic instanceof ModuleTopic_EntityTopic) {
         $sTopicId = $oTopic->getId();
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update_user_{$oTopic->getUserId()}"));
     } else {
         $sTopicId = $oTopic;
         $oTopic = $this->GetTopicById($sTopicId);
     }
     /**
      * Удаляем дополнительные поля
      */
     $this->Property_RemovePropertiesValue($oTopic);
     /**
      * Чистим зависимые кеши
      */
     $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update'));
     $this->Cache_Delete("topic_{$sTopicId}");
     /**
      * Если топик успешно удален, удаляем связанные данные
      */
     if ($this->oMapperTopic->DeleteTopic($sTopicId)) {
         /**
          * Обновляем счетчики топиков в блогах
          */
         $this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogsId());
         return $this->DeleteTopicAdditionalData($sTopicId);
     }
     return false;
 }
예제 #2
0
 /**
  * Удаление топиков по массиву ID пользователей
  *
  * @param int[] $aUsersId
  *
  * @return bool
  */
 public function DeleteTopicsByUsersId($aUsersId)
 {
     $aFilter = array('user_id' => $aUsersId);
     $aTopicsId = $this->oMapper->GetAllTopics($aFilter);
     if ($bResult = $this->oMapper->DeleteTopic($aTopicsId)) {
         $bResult = $this->DeleteTopicAdditionalData($aTopicsId);
     }
     // * Чистим зависимые кеши
     $aTags = array('topic_update');
     foreach ($aUsersId as $nUserId) {
         $aTags[] = 'topic_update_user_' . $nUserId;
     }
     E::ModuleCache()->CleanByTags($aTags);
     if ($aTopicsId) {
         // * Чистим зависимые кеши
         $aCacheTags = array('topic_update');
         foreach ($aUsersId as $iUserId) {
             $aCacheTags[] = 'topic_update_user_' . $iUserId;
         }
         E::ModuleCache()->CleanByTags($aCacheTags);
         foreach ($aTopicsId as $iTopicId) {
             E::ModuleCache()->Delete('topic_' . $iTopicId);
         }
     }
     return $bResult;
 }
예제 #3
0
 /**
  * Удаляет топик.
  * Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
  *
  * @param ModuleTopic_EntityTopic|int $oTopicId Объект топика или ID
  * @return bool
  */
 public function DeleteTopic($oTopicId)
 {
     if ($oTopicId instanceof ModuleTopic_EntityTopic) {
         $sTopicId = $oTopicId->getId();
         $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update_user_{$oTopicId->getUserId()}"));
     } else {
         $sTopicId = $oTopicId;
     }
     /**
      * Чистим зависимые кеши
      */
     $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('topic_update'));
     $this->Cache_Delete("topic_{$sTopicId}");
     /**
      * Список изображений
      */
     $aPhotos = $this->getPhotosByTopicId($sTopicId);
     /**
      * Если топик успешно удален, удаляем связанные данные
      */
     if ($bResult = $this->oMapperTopic->DeleteTopic($sTopicId)) {
         return $this->DeleteTopicAdditionalData($sTopicId, $aPhotos);
     }
     return false;
 }