1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-02 16:18:12 +03:00

Учет количества топиков в блогах

This commit is contained in:
Mzhelskiy Maxim 2012-03-10 11:02:55 +04:00
parent 3df93111d8
commit c7e1058f53
12 changed files with 154 additions and 4 deletions

View file

@ -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');
}
/**
* Страница со списком плагинов
*

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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
*/

View file

@ -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' => 'Количество топиков пересчитанно',
/**
* Страница администрирования плагинов
*/

View file

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