/** * Удаляет топик. * Если тип таблиц в БД 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; }
/** * Удаление топиков по массиву 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; }
/** * Удаляет топик. * Если тип таблиц в БД 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; }