From d03cf071e7450bcdf9907203a8b43ac8c9e4e85c Mon Sep 17 00:00:00 2001 From: e107steved Date: Thu, 17 Nov 2011 21:16:28 +0000 Subject: [PATCH] Bugtracker #5233 - news comment recalc fixed --- e107_admin/newspost.php | 40 ++++++++++++++----- e107_languages/English/admin/lan_newspost.php | 7 +++- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/e107_admin/newspost.php b/e107_admin/newspost.php index 3cea916c6..d2bd40d55 100644 --- a/e107_admin/newspost.php +++ b/e107_admin/newspost.php @@ -2468,13 +2468,17 @@ class admin_newspost
".LAN_NEWS_59." - + + + @@ -2495,21 +2499,37 @@ class admin_newspost { $this->noPermissions(); } - $qry = "SELECT - COUNT(`comment_id`) AS c_count, - `comment_item_id` - FROM `#comments` - WHERE (`comment_type`='0') OR (`comment_type`='news') - GROUP BY `comment_item_id`"; - if (e107::getDb()->db_Select_gen($qry)) + $qry = "SELECT + COUNT(`comment_id`) AS c_count, + `news_id`, `news_comment_total`, `news_allow_comments` + FROM `#news` LEFT JOIN `#comments` ON `news_id`=`comment_item_id` GROUP BY `comment_item_id`"; + + $deleteCount = 0; + $updateCount = 0; + $canDelete = isset($_POST['newsdeletecomments']); + if ($result = e107::getDb()->db_Select_gen($qry)) { while ($row = e107::getDb()->db_Fetch(MYSQL_ASSOC)) { - e107::getDb('sql2')->db_Update('news', 'news_comment_total = '.$row['c_count'].' WHERE news_id='.$row['comment_item_id']); + if ($canDelete && ($row['news_allow_comments'] != 0) && ($row['c_count'] > 0)) // N.B. sense of 'news_allow_comments' is 0 = allow!!! + { // Delete comments + e107::getDb('sql2')->db_Delete('comments', 'comment_item_id='.$row['news_id']); + $deleteCount = $deleteCount + $row['c_count']; + $row['c_count'] = 0; // Forces update of news table if necessary + } + if ($row['news_comment_total'] != $row['c_count']) + { + e107::getDb('sql2')->db_Update('news', 'news_comment_total = '.$row['c_count'].' WHERE news_id='.$row['news_id']); + $updateCount++; + } } + $this->show_message(str_replace(array('--UPDATE--', '--DELETED--'), array($updateCount, $deleteCount), LAN_NEWS_58), E_MESSAGE_SUCCESS); + } + else + { + $this->show_message(LAN_NEWS_62, E_MESSAGE_SUCCESS); } - $this->show_message(LAN_NEWS_58, E_MESSAGE_SUCCESS); } diff --git a/e107_languages/English/admin/lan_newspost.php b/e107_languages/English/admin/lan_newspost.php index 4f318644c..158d71389 100644 --- a/e107_languages/English/admin/lan_newspost.php +++ b/e107_languages/English/admin/lan_newspost.php @@ -191,10 +191,13 @@ define("LAN_NEWS_54", "stay in edit mode"); define('LAN_NEWS_55', 'Maintenance'); // Was LAN_NEWS_50 in 0.7 define('LAN_NEWS_56', 'Recalculate comment counts'); define('LAN_NEWS_57', 'Proceed'); -define('LAN_NEWS_58', 'Update complete'); +define('LAN_NEWS_58', 'Update complete - --UPDATE-- comment counts updated, --DELETED-- disallowed comments deleted'); define('LAN_NEWS_59', 'News Maintenance'); -define("LAN_NEWS_60", "Comment Total"); +define('LAN_NEWS_60', 'Comment Total'); +define('LAN_NEWS_61', 'Also delete disallowed comments'); +define('LAN_NEWS_62', 'Error accessing database, or no news items found'); + ?> \ No newline at end of file
".LAN_NEWS_56." + ".$frm->checkbox('newsdeletecomments', '1', '0').LAN_NEWS_61." + ".$frm->admin_button('news_comments_recalc', LAN_NEWS_57, 'update')."