1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-29 04:55:02 +03:00

Новый интерфейс удаления блога, запрет на перенос топиков в персональный блог, фикс кеша

This commit is contained in:
Alexey Kachayev 2009-11-25 14:06:02 +00:00
parent 79f8ace68d
commit a082c490fa
6 changed files with 104 additions and 25 deletions

View file

@ -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'));

View file

@ -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;
}

View file

@ -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);
}
}
?>

View file

@ -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;
}
}
?>

View file

@ -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' => 'Список приглашенных:',

View file

@ -61,7 +61,15 @@ function toggleBlogDeleteForm(id,link) {
<form id="blog_delete_form" class="hidden" action="{router page='blog'}delete/{$oBlog->getId()}/" method="POST">
<input type="hidden" value="{$LIVESTREET_SECURITY_KEY}" name="security_ls_key" />
{$aLang.blog_admin_delete_move}:<br />
<input type="text" value="" name="topic_move_to" />
<select name="topic_move_to">
<option value="-1">{$aLang.blog_delete_clear}</option>
{if $aBlogs}
<option disabled="disabled">-------------</option>
{foreach from=$aBlogs item=oBlog}
<option value="{$oBlog->getId()}">{$oBlog->getTitle()}</option>
{/foreach}
{/if}
</select>
<input type="submit" value="{$aLang.blog_delete}" />
</form></li>
{else}