mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-02 16:18:12 +03:00
Учет количества топиков в блогах
This commit is contained in:
parent
3df93111d8
commit
c7e1058f53
|
@ -44,6 +44,7 @@ class ActionAdmin extends Action {
|
|||
$this->AddEvent('userfields','EventUserfields');
|
||||
$this->AddEvent('recalcfavourite','EventRecalculateFavourite');
|
||||
$this->AddEvent('recalcvote','EventRecalculateVote');
|
||||
$this->AddEvent('recalctopic','EventRecalculateTopic');
|
||||
}
|
||||
|
||||
|
||||
|
@ -95,6 +96,18 @@ class ActionAdmin extends Action {
|
|||
$this->SetTemplateAction('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчет количества топиков в блогах
|
||||
*/
|
||||
protected function EventRecalculateTopic() {
|
||||
set_time_limit(0);
|
||||
$this->Blog_RecalculateCountTopic();
|
||||
$this->Cache_Clean();
|
||||
|
||||
$this->Message_AddNotice($this->Lang_Get('admin_topics_recalculated'),$this->Lang_Get('attention'));
|
||||
$this->SetTemplateAction('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Страница со списком плагинов
|
||||
*
|
||||
|
|
|
@ -314,6 +314,10 @@ class ActionLink extends Action {
|
|||
* Получаем топик, чтоб подцепить связанные данные
|
||||
*/
|
||||
$oTopic=$this->Topic_GetTopicById($oTopic->getId());
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
//Делаем рассылку спама всем, кто состоит в этом блоге
|
||||
if ($oTopic->getPublish()==1 and $oBlog->getType()!='personal') {
|
||||
$this->Topic_SendNotifyTopicNew($oBlog,$oTopic,$this->oUserCurrent);
|
||||
|
@ -370,7 +374,11 @@ class ActionLink extends Action {
|
|||
if (isPost('submit_topic_publish') and !$oTopic->getPublishDraft() and !$this->ACL_CanPostTopicTime($this->oUserCurrent)) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('topic_time_limit'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Сохраняем старое значение идентификатора блога
|
||||
*/
|
||||
$sBlogIdOld = $oTopic->getBlogId();
|
||||
/**
|
||||
* Теперь можно смело редактировать топик
|
||||
*/
|
||||
|
@ -430,6 +438,20 @@ class ActionLink extends Action {
|
|||
if ($this->Topic_UpdateTopic($oTopic)) {
|
||||
$this->Hook_Run('topic_edit_after', array('oTopic'=>$oTopic,'oBlog'=>$oBlog,'bSendNotify'=>&$bSendNotify));
|
||||
/**
|
||||
* Обновляем данные в комментариях, если топик был перенесен в новый блог
|
||||
*/
|
||||
if($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
$this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
}
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
if ($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Blog_RecalculateCountTopicByBlogId($sBlogIdOld);
|
||||
}
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
/**
|
||||
* Добавляем событие в ленту
|
||||
*/
|
||||
$this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(),$oTopic->getPublish() && $oBlog->getType()!='close');
|
||||
|
|
|
@ -530,6 +530,10 @@ class ActionPhotoset extends Action {
|
|||
* Получаем топик, чтоб подцепить связанные данные
|
||||
*/
|
||||
$oTopic=$this->Topic_GetTopicById($oTopic->getId());
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
//Делаем рассылку спама всем, кто состоит в этом блоге
|
||||
if ($oTopic->getPublish()==1 and $oBlog->getType()!='personal') {
|
||||
$this->Topic_SendNotifyTopicNew($oBlog,$oTopic,$this->oUserCurrent);
|
||||
|
@ -602,6 +606,10 @@ class ActionPhotoset extends Action {
|
|||
$this->Message_AddErrorSingle($this->Lang_Get('topic_time_limit'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Сохраняем старое значение идентификатора блога
|
||||
*/
|
||||
$sBlogIdOld = $oTopic->getBlogId();
|
||||
/**
|
||||
* Теперь можно смело редактировать топик
|
||||
*/
|
||||
|
@ -674,6 +682,20 @@ class ActionPhotoset extends Action {
|
|||
if ($this->Topic_UpdateTopic($oTopic)) {
|
||||
$this->Hook_Run('topic_edit_after', array('oTopic'=>$oTopic,'oBlog'=>$oBlog,'bSendNotify'=>&$bSendNotify));
|
||||
/**
|
||||
* Обновляем данные в комментариях, если топик был перенесен в новый блог
|
||||
*/
|
||||
if($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
$this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
}
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
if ($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Blog_RecalculateCountTopicByBlogId($sBlogIdOld);
|
||||
}
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
/**
|
||||
* Добавляем событие в ленту
|
||||
*/
|
||||
$this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(),$oTopic->getPublish() && $oBlog->getType()!='close');
|
||||
|
|
|
@ -295,6 +295,10 @@ class ActionQuestion extends Action {
|
|||
* Получаем топик, чтоб подцепить связанные данные
|
||||
*/
|
||||
$oTopic=$this->Topic_GetTopicById($oTopic->getId());
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
//Делаем рассылку спама всем, кто состоит в этом блоге
|
||||
if ($oTopic->getPublish()==1 and $oBlog->getType()!='personal') {
|
||||
$this->Topic_SendNotifyTopicNew($oBlog,$oTopic,$this->oUserCurrent);
|
||||
|
@ -351,7 +355,11 @@ class ActionQuestion extends Action {
|
|||
if (isPost('submit_topic_publish') and !$oTopic->getPublishDraft() and !$this->ACL_CanPostTopicTime($this->oUserCurrent)) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('topic_time_limit'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Сохраняем старое значение идентификатора блога
|
||||
*/
|
||||
$sBlogIdOld = $oTopic->getBlogId();
|
||||
/**
|
||||
* Теперь можно смело редактировать топик
|
||||
*/
|
||||
|
@ -420,6 +428,20 @@ class ActionQuestion extends Action {
|
|||
if ($this->Topic_UpdateTopic($oTopic)) {
|
||||
$this->Hook_Run('topic_edit_after', array('oTopic'=>$oTopic,'oBlog'=>$oBlog,'bSendNotify'=>&$bSendNotify));
|
||||
/**
|
||||
* Обновляем данные в комментариях, если топик был перенесен в новый блог
|
||||
*/
|
||||
if($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Comment_UpdateTargetParentByTargetId($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
$this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
}
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
if ($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Blog_RecalculateCountTopicByBlogId($sBlogIdOld);
|
||||
}
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
/**
|
||||
* Добавляем событие в ленту
|
||||
*/
|
||||
$this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(),$oTopic->getPublish() && $oBlog->getType()!='close');
|
||||
|
|
|
@ -345,6 +345,10 @@ class ActionTopic extends Action {
|
|||
* Получаем топик, чтоб подцепить связанные данные
|
||||
*/
|
||||
$oTopic=$this->Topic_GetTopicById($oTopic->getId());
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
/**
|
||||
* Делаем рассылку спама всем, кто состоит в этом блоге
|
||||
*/
|
||||
|
@ -480,6 +484,14 @@ class ActionTopic extends Action {
|
|||
$this->Comment_UpdateTargetParentByTargetIdOnline($oTopic->getBlogId(), 'topic', $oTopic->getId());
|
||||
}
|
||||
/**
|
||||
* Обновляем количество топиков в блоге
|
||||
*/
|
||||
if ($sBlogIdOld!=$oTopic->getBlogId()) {
|
||||
$this->Blog_RecalculateCountTopicByBlogId($sBlogIdOld);
|
||||
}
|
||||
$this->Blog_RecalculateCountTopicByBlogId($oTopic->getBlogId());
|
||||
|
||||
/**
|
||||
* Добавляем событие в ленту
|
||||
*/
|
||||
$this->Stream_write($oTopic->getUserId(), 'add_topic', $oTopic->getId(),$oTopic->getPublish() && $oBlog->getType()!='close');
|
||||
|
|
|
@ -833,6 +833,25 @@ class ModuleBlog extends Module {
|
|||
@unlink($this->Image_GetServerPath($oBlog->getAvatarPath($iSize)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчет количества топиков в блогах
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function RecalculateCountTopic() {
|
||||
return $this->oMapperBlog->RecalculateCountTopic();
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчет количества топиков в конкретном блоге
|
||||
*
|
||||
* @param $iBlogId
|
||||
* @return mixed
|
||||
*/
|
||||
public function RecalculateCountTopicByBlogId($iBlogId) {
|
||||
return $this->oMapperBlog->RecalculateCountTopic($iBlogId);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -47,6 +47,9 @@ class ModuleBlog_EntityBlog extends Entity
|
|||
public function getCountUser() {
|
||||
return $this->_aData['blog_count_user'];
|
||||
}
|
||||
public function getCountTopic() {
|
||||
return $this->_aData['blog_count_topic'];
|
||||
}
|
||||
public function getLimitRatingTopic() {
|
||||
return $this->_aData['blog_limit_rating_topic'];
|
||||
}
|
||||
|
@ -123,6 +126,9 @@ class ModuleBlog_EntityBlog extends Entity
|
|||
public function setCountUser($data) {
|
||||
$this->_aData['blog_count_user']=$data;
|
||||
}
|
||||
public function setCountTopic($data) {
|
||||
$this->_aData['blog_count_topic']=$data;
|
||||
}
|
||||
public function setLimitRatingTopic($data) {
|
||||
$this->_aData['blog_limit_rating_topic']=$data;
|
||||
}
|
||||
|
|
|
@ -51,13 +51,14 @@ class ModuleBlog_MapperBlog extends Mapper {
|
|||
blog_rating= ?f,
|
||||
blog_count_vote = ?d,
|
||||
blog_count_user= ?d,
|
||||
blog_count_topic= ?d,
|
||||
blog_limit_rating_topic= ?f ,
|
||||
blog_url= ?,
|
||||
blog_avatar= ?
|
||||
WHERE
|
||||
blog_id = ?d
|
||||
";
|
||||
if ($this->oDb->query($sql,$oBlog->getTitle(),$oBlog->getDescription(),$oBlog->getType(),$oBlog->getDateEdit(),$oBlog->getRating(),$oBlog->getCountVote(),$oBlog->getCountUser(),$oBlog->getLimitRatingTopic(),$oBlog->getUrl(),$oBlog->getAvatar(),$oBlog->getId())) {
|
||||
if ($this->oDb->query($sql,$oBlog->getTitle(),$oBlog->getDescription(),$oBlog->getType(),$oBlog->getDateEdit(),$oBlog->getRating(),$oBlog->getCountVote(),$oBlog->getCountUser(),$oBlog->getCountTopic(),$oBlog->getLimitRatingTopic(),$oBlog->getUrl(),$oBlog->getAvatar(),$oBlog->getId())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -385,5 +386,30 @@ class ModuleBlog_MapperBlog extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчитывает число топиков в блогах
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function RecalculateCountTopic($iBlogId=null) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.blog')." b
|
||||
SET b.blog_count_topic = (
|
||||
SELECT count(*)
|
||||
FROM ".Config::Get('db.table.topic')." t
|
||||
WHERE
|
||||
t.blog_id = b.blog_id
|
||||
AND
|
||||
t.topic_publish = 1
|
||||
)
|
||||
WHERE 1=1
|
||||
{ and b.blog_id = ?d }
|
||||
";
|
||||
if ($this->oDb->query($sql,is_null($iBlogId) ? DBSIMPLE_SKIP : $iBlogId)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -4,3 +4,6 @@ ALTER TABLE `prefix_comment` ADD `comment_count_favourite` INT( 11 ) UNSIGNED NO
|
|||
ALTER TABLE `prefix_topic` ADD `topic_count_vote_up` INT NOT NULL DEFAULT '0' AFTER `topic_count_vote` ,
|
||||
ADD `topic_count_vote_down` INT NOT NULL DEFAULT '0' AFTER `topic_count_vote_up` ,
|
||||
ADD `topic_count_vote_abstain` INT NOT NULL DEFAULT '0' AFTER `topic_count_vote_down`;
|
||||
|
||||
ALTER TABLE `prefix_blog` ADD `blog_count_topic` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `blog_count_user` ,
|
||||
ADD INDEX ( `blog_count_topic` );
|
||||
|
|
|
@ -790,6 +790,7 @@ return array(
|
|||
'admin_list_restorecomment' => 'Rebuilding a tree comments',
|
||||
'admin_list_recalcfavourite' => 'Recalculate counters of favorites',
|
||||
'admin_list_recalcvote' => 'Recalculate counters of votes',
|
||||
'admin_list_recalctopic' => 'Recalculate count topics of blogs',
|
||||
/**
|
||||
* Rating TOP
|
||||
*/
|
||||
|
@ -850,6 +851,7 @@ return array(
|
|||
'admin_comment_restore_tree' => 'Tree comments restore successful',
|
||||
'admin_favourites_recalculated' => 'Favourites counters has been recalculated',
|
||||
'admin_votes_recalculated' => 'Votes counters has been recalculated',
|
||||
'admin_topics_recalculated' => 'Count topics has been recalculated',
|
||||
/**
|
||||
* Plugin administration page
|
||||
*/
|
||||
|
|
|
@ -790,6 +790,7 @@ return array(
|
|||
'admin_list_restorecomment' => 'Перестроение дерева комментариев',
|
||||
'admin_list_recalcfavourite' => 'Пересчитать счетчики избранных',
|
||||
'admin_list_recalcvote' => 'Пересчитать счетчики голосований',
|
||||
'admin_list_recalctopic' => 'Пересчитать количество топиков в блогах',
|
||||
/**
|
||||
* Рейтинг TOP
|
||||
*/
|
||||
|
@ -850,6 +851,7 @@ return array(
|
|||
'admin_comment_restore_tree' => 'Дерево комментариев перестроенно',
|
||||
'admin_favourites_recalculated' => 'Счетчики избранных пересчитаны',
|
||||
'admin_votes_recalculated' => 'Счетчики голосований пересчитаны',
|
||||
'admin_topics_recalculated' => 'Количество топиков пересчитанно',
|
||||
/**
|
||||
* Страница администрирования плагинов
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<li><a href="{router page="admin"}restorecomment">{$aLang.admin_list_restorecomment}</a></li>
|
||||
<li><a href="{router page="admin"}recalcfavourite">{$aLang.admin_list_recalcfavourite}</a></li>
|
||||
<li><a href="{router page="admin"}recalcvote">{$aLang.admin_list_recalcvote}</a></li>
|
||||
<li><a href="{router page="admin"}recalctopic">{$aLang.admin_list_recalctopic}</a></li>
|
||||
{hook run='admin_action_item'}
|
||||
</ul>
|
||||
|
||||
|
|
Loading…
Reference in a new issue