diff --git a/classes/actions/ActionBlog.class.php b/classes/actions/ActionBlog.class.php index 37f492f9..ab300a4a 100644 --- a/classes/actions/ActionBlog.class.php +++ b/classes/actions/ActionBlog.class.php @@ -722,6 +722,16 @@ class ActionBlog extends Action { $aBlogModerators=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),LsBlog::BLOG_USER_ROLE_MODERATOR); $aBlogAdministrators=$this->Blog_GetBlogUsersByBlogId($oBlog->getId(),LsBlog::BLOG_USER_ROLE_ADMINISTRATOR); + /** + * Для админов проекта получаем список блогов и передаем их во вьювер + */ + if($this->oUserCurrent and $this->oUserCurrent->isAdministrator()) { + $aBlogs = $this->Blog_GetBlogs(); + unset($aBlogs[$oBlog->getId()]); + + $this->Viewer_Assign('aBlogs',$aBlogs); + } + /** * Вызов хуков */ @@ -1185,7 +1195,7 @@ class ActionBlog extends Action { } /** * проверяем есть ли право на удаление топика - */ + */ if (!$bAccess=$this->ACL_IsAllowDeleteBlog($oBlog,$this->oUserCurrent)) { return parent::EventNotFound(); } @@ -1200,20 +1210,34 @@ class ActionBlog extends Action { case LsACL::CAN_DELETE_BLOG_WITH_TOPICS : /** * Если указан идентификатор блога для перемещения, - * то делаем попытку переместить топики + * то делаем попытку переместить топики. + * + * (-1) - выбран пункт меню "удалить топики". */ - if($sBlogIdNew=getRequest('topic_move_to') and is_array($aTopics) and count($aTopics)) { + if($sBlogIdNew=getRequest('topic_move_to') and ($sBlogIdNew!=-1) and is_array($aTopics) and count($aTopics)) { if(!$oBlogNew = $this->Blog_GetBlogById($sBlogIdNew)){ $this->Message_AddErrorSingle($this->Lang_Get('blog_admin_delete_move_error'),$this->Lang_Get('error'),true); Router::Location($oBlog()->getUrlFull()); - } else { - $this->Topic_MoveTopicsByArrayId($aTopics,$sBlogIdNew); } + /** + * Если выбранный блог является персональным, возвращаем ошибку + */ + if($oBlogNew->getType()=='personal') { + $this->Message_AddErrorSingle($this->Lang_Get('blog_admin_delete_move_personal'),$this->Lang_Get('error'),true); + Router::Location($oBlog()->getUrlFull()); + } + /** + * Перемещаем топики + */ + $this->Topic_MoveTopics($sBlogId,$sBlogIdNew); } break; default: return parent::EventNotFound(); } + /** + * Удаляяем блог и перенаправляем пользователя к списку блогов + */ if($this->Blog_DeleteBlog($sBlogId)) { $this->Message_AddNoticeSingle($this->Lang_Get('blog_admin_delete_success'),$this->Lang_Get('attention'),true); Router::Location(Router::GetPath('blogs')); diff --git a/classes/modules/blog/Blog.class.php b/classes/modules/blog/Blog.class.php index a9ce9387..bbcdbebb 100644 --- a/classes/modules/blog/Blog.class.php +++ b/classes/modules/blog/Blog.class.php @@ -697,38 +697,42 @@ class LsBlog extends Module { if($iBlogId instanceof BlogEntity_Blog){ $iBlogId = $iBlogId->getId(); } + /** + * Получаем идентификаторы топиков блога. Удаляем топики блога. + * При удалении топиков удаляются комментарии к ним и голоса. + */ + $aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId); /** * Если блог не удален, возвращаем false */ - if(!$this->oMapperBlog->DeleteBlog($iBlogId)) return 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" + "blog_update", "blog_relation_change_blog_{$iBlogId}", + "topic_update", "comment_online_update_topic", "comment_update" ) ); $this->Cache_Delete("blog_{$iBlogId}"); - /** - * Удаляем топики блога. - * При удалении топиков удаляются комментарии к ним и голоса. - */ - $aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId); - 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(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); + } } + } + /** * Удаляем связи пользователей блога. */ @@ -739,6 +743,9 @@ class LsBlog extends Module { * Удаляем голосование за блог */ $this->Vote_DeleteVoteByTarget($iBlogId, 'blog'); + /** + * Удаляем комментарии к записям из блога и метки прямого эфира + */ return true; } diff --git a/classes/modules/topic/Topic.class.php b/classes/modules/topic/Topic.class.php index bb4fab21..a8c02ece 100644 --- a/classes/modules/topic/Topic.class.php +++ b/classes/modules/topic/Topic.class.php @@ -174,9 +174,10 @@ class LsTopic extends Module { /** * Если топик успешно удален, удаляем связанные данные */ - if($this->oMapperTopic->DeleteTopic($sTopicId)){ + if($bResult=$this->oMapperTopic->DeleteTopic($sTopicId)){ return $this->DeleteTopicAdditionalData($sTopicId); } + return false; } /** @@ -186,6 +187,11 @@ class LsTopic extends Module { * @return bool */ public function DeleteTopicAdditionalData($iTopicId) { + /** + * Чистим зависимые кеши + */ + $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('topic_update')); + $this->Cache_Delete("topic_{$iTopicId}"); /** * Удаляем комментарии к топику. * При удалении комментариев они удаляются из избранного,прямого эфира и голоса за них @@ -1294,5 +1300,17 @@ class LsTopic extends Module { $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("topic_update", "topic_new_blog_{$sBlogId}")); return $this->oMapperTopic->MoveTopicsByArrayId($aTopics,$sBlogId); } + + /** + * Перемещает топики в другой блог + * + * @param string $sBlogId + * @param string $sBlogIdNew + * @return bool + */ + public function MoveTopics($sBlogId,$sBlogIdNew) { + $this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("topic_update", "topic_new_blog_{$sBlogId}", "topic_new_blog_{$sBlogIdNew}")); + return $this->oMapperTopic->MoveTopics($sBlogId,$sBlogIdNew); + } } ?> \ No newline at end of file diff --git a/classes/modules/topic/mapper/Topic.mapper.class.php b/classes/modules/topic/mapper/Topic.mapper.class.php index 82c8f159..85ee0baa 100644 --- a/classes/modules/topic/mapper/Topic.mapper.class.php +++ b/classes/modules/topic/mapper/Topic.mapper.class.php @@ -591,5 +591,25 @@ class Mapper_Topic extends Mapper { } return false; } + + /** + * Перемещает топики в другой блог + * + * @param string $sBlogId + * @param string $sBlogIdNew + * @return bool + */ + public function MoveTopics($sBlogId,$sBlogIdNew) { + $sql = "UPDATE ".Config::Get('db.table.topic')." + SET + blog_id= ?d + WHERE + blog_id = ?d + "; + if ($this->oDb->query($sql,$sBlogIdNew,$sBlogId)) { + return true; + } + return false; + } } ?> \ No newline at end of file diff --git a/templates/language/russian.php b/templates/language/russian.php index d3d61cb2..667f7847 100644 --- a/templates/language/russian.php +++ b/templates/language/russian.php @@ -148,9 +148,11 @@ return array( 'blog_admin_delete_confirm' => 'Вы уверены, что хотите удалить блог?', 'blog_admin_delete_move' => 'Переместить топики в блог', + 'blog_delete_clear' => 'Удалить топики', 'blog_admin_delete_success' => 'Блог успешно удален', 'blog_admin_delete_not_empty' => 'Вы не можете удалить блок с записями. Предварительно удалите из блога все записи.', 'blog_admin_delete_move_error' => 'Не удалось переместить топики из удаляемого блога', + 'blog_admin_delete_move_personal' => 'Нельзя перемещать топики в персональный блог', 'blog_admin_user_add_label' => 'Пригласить пользователей:', 'blog_admin_user_invited' => 'Список приглашенных:', diff --git a/templates/skin/new/actions/ActionBlog/blog.tpl b/templates/skin/new/actions/ActionBlog/blog.tpl index 0f61292c..747fe0eb 100644 --- a/templates/skin/new/actions/ActionBlog/blog.tpl +++ b/templates/skin/new/actions/ActionBlog/blog.tpl @@ -61,7 +61,15 @@ function toggleBlogDeleteForm(id,link) { {else}