mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-26 03:30:48 +03:00
Фикс удаления блогов #587
This commit is contained in:
parent
fc2febd6e1
commit
d2cb5cb0b2
|
@ -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++;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчитывает счетчик избранных топиков
|
||||
*
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
{/block}
|
||||
|
||||
{block 'layout_content_header'}
|
||||
{component 'blog' blog=$blog}
|
||||
{component 'blog' blog=$blog blogs=$blogs}
|
||||
|
||||
{$smarty.block.parent}
|
||||
|
||||
|
|
Loading…
Reference in a new issue