/** * Удаляет блог * * @param int|array $aBlogsId ID блога|массив ID блогов * * @return bool */ public function DeleteBlog($aBlogsId) { // Получаем массив ID, если передан объект или массив объектов $aBlogsId = $this->_entitiesId($aBlogsId); if ($aBlogsId) { // * Получаем идентификаторы топиков блога. Удаляем топики блога. // * При удалении топиков удаляются комментарии к ним и голоса. $aTopicsId = E::ModuleTopic()->GetTopicsByBlogId($aBlogsId); // * Если блог не удален, возвращаем false if (!$this->oMapper->DeleteBlog($aBlogsId)) { return false; } if ($aTopicsId) { // * Удаляем топики E::ModuleTopic()->DeleteTopics($aTopicsId); } // * Удаляем связи пользователей блога. $this->oMapper->DeleteBlogUsersByBlogId($aBlogsId); // * Удаляем голосование за блог E::ModuleVote()->DeleteVoteByTarget($aBlogsId, 'blog'); // * Чистим кеш E::ModuleCache()->CleanByTags(array('blog_update', 'topic_update', 'comment_online_update_topic', 'comment_update')); foreach ($aBlogsId as $nBlogId) { E::ModuleCache()->CleanByTags(array("blog_relation_change_blog_{$nBlogId}")); E::ModuleCache()->Delete("blog_{$nBlogId}"); } } return true; }
/** * Удаляет блог * * @param int $iBlogId ID блога * @return bool */ public function DeleteBlog($iBlogId) { if ($iBlogId instanceof ModuleBlog_EntityBlog) { $iBlogId = $iBlogId->getId(); } /** * Получаем идентификаторы топиков блога. Удаляем топики блога. * При удалении топиков удаляются комментарии к ним и голоса. */ $aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId); /** * Если блог не удален, возвращаем false */ if (!$this->oMapperBlog->DeleteBlog($iBlogId)) { return false; } /** * Чистим кеш */ $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("blog_update", "blog_relation_change_blog_{$iBlogId}", "topic_update", "comment_online_update_topic", "comment_update")); $this->Cache_Delete("blog_{$iBlogId}"); if (is_array($aTopicIds) and count($aTopicIds)) { /** * Удаляем топики */ foreach ($aTopicIds as $iTopicId) { $this->Cache_Delete("topic_{$iTopicId}"); if (Config::Get('db.tables.engine') == "InnoDB") { $this->Topic_DeleteTopicAdditionalData($iTopicId); } else { $this->Topic_DeleteTopic($iTopicId); } } } /** * Удаляем связи пользователей блога. */ if (Config::Get('db.tables.engine') != "InnoDB") { $this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId); } /** * Удаляем голосование за блог */ $this->Vote_DeleteVoteByTarget($iBlogId, 'blog'); return true; }
/** * Удаляет блог * * @param int $iBlogId ID блога * @return bool */ public function DeleteBlog($iBlogId) { if ($iBlogId instanceof ModuleBlog_EntityBlog) { $oBlog = $iBlogId; $iBlogId = $oBlog->getId(); } else { $oBlog = $this->Blog_GetBlogById($iBlogId); } /** * Получаем идентификаторы топиков блога. Удаляем топики блога. * При удалении топиков удаляются комментарии к ним, голоса и т.п. */ $iPage = 1; while ($aTopicsRes = $this->Topic_GetTopicsByBlogId($iBlogId, $iPage, 100, array(), false) and $aTopicsRes['collection']) { /** * Удаляем топики */ foreach ($aTopicsRes['collection'] as $oTopic) { $aBlogsCurrent = $oTopic->getBlogIds(); /** * Удалять нужно только те топики, где текущий блог является единственным, у остальных просто удаляем связь */ if (count($aBlogsCurrent) == 1) { $this->Topic_DeleteTopic($oTopic); } else { array_splice($aBlogsCurrent, array_search($oBlog->getId(), $aBlogsCurrent), 1); /** * Устанавливаем новые связи с блогами */ foreach ($aBlogsCurrent as $i => $iBlogCurrent) { $sMethodSet = 'setBlogId' . ($i == 0 ? '' : $i + 1); call_user_func(array($oTopic, $sMethodSet), $iBlogCurrent); } for ($i = $i + 2; $i <= 10; $i++) { $sMethodSet = 'setBlogId' . $i; call_user_func(array($oTopic, $sMethodSet), null); } $this->Topic_UpdateTopic($oTopic); } } $iPage++; } /** * Если блог не удален, возвращаем false */ if (!$this->oMapperBlog->DeleteBlog($iBlogId)) { return false; } /** * Чистим кеш */ $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("blog_update", "blog_relation_change_blog_{$iBlogId}", "topic_update", "comment_online_update_topic", "comment_update")); $this->Cache_Delete("blog_{$iBlogId}"); /** * Удаляем аватар */ $this->DeleteBlogAvatar($oBlog); /** * Удаляем связи пользователей блога. */ $this->oMapperBlog->DeleteBlogUsersByBlogId($iBlogId); /** * Удаляем голосование за блог */ $this->Vote_DeleteVoteByTarget($iBlogId, 'blog'); /** * Удаляем медиа данные */ $this->Media_RemoveTarget('blog', $iBlogId, true); /** * Обновляем категорию блога */ $oBlog->category->CallbackAfterDelete(); return true; }