1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-26 03:30:48 +03:00

Фикс удаления блогов #587

This commit is contained in:
Mzhelskiy Maxim 2015-02-01 15:50:43 +07:00
parent fc2febd6e1
commit d2cb5cb0b2
5 changed files with 54 additions and 88 deletions

View file

@ -965,13 +965,32 @@ class ModuleBlog extends Module
* При удалении топиков удаляются комментарии к ним, голоса и т.п.
*/
$iPage = 1;
while ($aTopicIds = $this->Topic_GetTopicsByBlogId($iBlogId, $iPage, 100)) {
if (is_array($aTopicIds) and count($aTopicIds)) {
while ($aTopicsRes = $this->Topic_GetTopicsByBlogId($iBlogId, $iPage, 100, array(),
false) and $aTopicsRes['collection']) {
/**
* Удаляем топики
*/
foreach ($aTopicsRes['collection'] as $oTopic) {
$aBlogsCurrent = $oTopic->getBlogIds();
/**
* Удаляем топики
* Удалять нужно только те топики, где текущий блог является единственным, у остальных просто удаляем связь
*/
foreach ($aTopicIds as $iTopicId) {
$this->Topic_DeleteTopic($iTopicId);
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++;

View file

@ -398,6 +398,15 @@ class ModuleTopic extends Module
*/
$this->Comment_SetCommentsPublish($oTopic->getId(), 'topic', $oTopic->getPublish());
}
/**
* Смена главного блога
*/
if ($oTopic->getBlogId() != $oTopicOld->getBlogId()) {
// меняем target parent у комментов
$this->Comment_MoveTargetParent($oTopicOld->getBlogId(), 'topic', $oTopic->getBlogId());
// меняем target parent у комментов в прямом эфире
$this->Comment_MoveTargetParentOnline($oTopicOld->getBlogId(), 'topic', $oTopic->getBlogId());
}
/**
* Обновляем дополнительные поля
* Здесь важный момент - перед сохранением топика всегда нужно вызывать валидацию полей $this->Property_ValidateEntityPropertiesCheck($oTopic);
@ -1648,37 +1657,12 @@ class ModuleTopic extends Module
/**
* Перемещает топики в другой блог
*
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
public function MoveTopicsByArrayId($aTopics, $sBlogId)
{
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array("topic_update", "topic_new_blog_{$sBlogId}"));
if ($res = $this->oMapperTopic->MoveTopicsByArrayId($aTopics, $sBlogId)) {
// перемещаем теги
$this->oMapperTopic->MoveTopicsTagsByArrayId($aTopics, $sBlogId);
// меняем target parent у комментов
$this->Comment_UpdateTargetParentByTargetId($sBlogId, 'topic', $aTopics);
// меняем target parent у комментов в прямом эфире
$this->Comment_UpdateTargetParentByTargetIdOnline($sBlogId, 'topic', $aTopics);
return $res;
}
return false;
}
/**
* Перемещает топики в другой блог
* TODO: пофиксить перенос для функционала мультиблогов
*
* @param int $sBlogId ID старого блога
* @param int $sBlogIdNew ID нового блога
* @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}"));
if ($res = $this->oMapperTopic->MoveTopics($sBlogId, $sBlogIdNew)) {
// перемещаем теги
$this->oMapperTopic->MoveTopicsTags($sBlogId, $sBlogIdNew);
@ -1686,9 +1670,14 @@ class ModuleTopic extends Module
$this->Comment_MoveTargetParent($sBlogId, 'topic', $sBlogIdNew);
// меняем target parent у комментов в прямом эфире
$this->Comment_MoveTargetParentOnline($sBlogId, 'topic', $sBlogIdNew);
return $res;
/**
* Обновляем количество топиков в блоге
*/
$this->Blog_RecalculateCountTopicByBlogId($sBlogIdNew);
}
return false;
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,
array("topic_update", "topic_new_blog_{$sBlogId}", "topic_new_blog_{$sBlogIdNew}"));
return $res;
}
/**

View file

@ -776,29 +776,6 @@ class ModuleTopic_MapperTopic extends Mapper
return $aReads;
}
/**
* Перемещает топики в другой блог
*
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
public function MoveTopicsByArrayId($aTopics, $sBlogId)
{
if (!is_array($aTopics)) {
$aTopics = array($aTopics);
}
$sql = "UPDATE " . Config::Get('db.table.topic') . "
SET
blog_id= ?d
WHERE
topic_id IN(?a)
";
$res = $this->oDb->query($sql, $sBlogId, $aTopics);
return $this->IsSuccessful($res);
}
/**
* Перемещает топики в другой блог
*
@ -808,14 +785,18 @@ class ModuleTopic_MapperTopic extends Mapper
*/
public function MoveTopics($sBlogId, $sBlogIdNew)
{
$sql = "UPDATE " . Config::Get('db.table.topic') . "
SET
blog_id= ?d
WHERE
blog_id = ?d
";
$res = $this->oDb->query($sql, $sBlogIdNew, $sBlogId);
return $this->IsSuccessful($res);
$aFields=array('blog_id','blog_id2','blog_id3','blog_id4','blog_id5');
foreach($aFields as $sField) {
$sql = "UPDATE " . Config::Get('db.table.topic') . "
SET
{$sField} = ?d
WHERE
{$sField} = ?d
";
$this->oDb->query($sql, $sBlogIdNew, $sBlogId);
}
return true;
}
/**
@ -837,29 +818,6 @@ class ModuleTopic_MapperTopic extends Mapper
return $this->IsSuccessful($res);
}
/**
* Перемещает теги топиков в другой блог
*
* @param array $aTopics Список ID топиков
* @param int $sBlogId ID блога
* @return bool
*/
public function MoveTopicsTagsByArrayId($aTopics, $sBlogId)
{
if (!is_array($aTopics)) {
$aTopics = array($aTopics);
}
$sql = "UPDATE " . Config::Get('db.table.topic_tag') . "
SET
blog_id= ?d
WHERE
topic_id IN(?a)
";
$res = $this->oDb->query($sql, $sBlogId, $aTopics);
return $this->IsSuccessful($res);
}
/**
* Пересчитывает счетчик избранных топиков
*

View file

@ -20,7 +20,7 @@
<form action="{router page='blog'}delete/{$blog->getId()}/" method="POST" id="js-blog-remove-form">
{* Переместить топики в блог *}
{$selectBlogs = [
[ 'value' => -1, 'text' => $aLang.blog.remove.remove_topics ]
[ 'value' => -1, 'text' => "-- {$aLang.blog.remove.remove_topics} --" ]
]}
{foreach $smarty.local.blogs as $blog}

View file

@ -22,7 +22,7 @@
{/block}
{block 'layout_content_header'}
{component 'blog' blog=$blog}
{component 'blog' blog=$blog blogs=$blogs}
{$smarty.block.parent}