public function counts($Column, $From = false, $To = false, $Max = false) { $Result = array('Complete' => true); switch ($Column) { case 'CountMessages': $this->Database->query(DBAModel::getCountSQL('count', 'Conversation', 'ConversationMessage', $Column, 'MessageID')); break; case 'CountParticipants': $this->SQL->update('Conversation c')->set('c.CountParticipants', '(select count(uc.ConversationID) from GDN_UserConversation uc where uc.ConversationID = c.ConversationID and uc.Deleted = 0)', false, false)->put(); break; case 'FirstMessageID': $this->Database->query(DBAModel::getCountSQL('min', 'Conversation', 'ConversationMessage', $Column, 'MessageID')); break; case 'LastMessageID': $this->Database->query(DBAModel::getCountSQL('max', 'Conversation', 'ConversationMessage', $Column, 'MessageID')); break; case 'DateUpdated': $this->Database->query(DBAModel::getCountSQL('max', 'Conversation', 'ConversationMessage', $Column, 'DateInserted')); break; case 'UpdateUserID': $this->SQL->update('Conversation c')->join('ConversationMessage m', 'c.LastMessageID = m.MessageID')->set('c.UpdateUserID', 'm.InsertUserID', false, false)->put(); break; default: throw new Gdn_UserException("Unknown column {$Column}"); } return $Result; }
/** * User counts. * * @param string $Column The name of the count column. (ex. CountDiscussions, CountComments). * @param int|null $UserID The user ID to get the counts for or **null** for the current user. */ public function counts($Column, $UserID = null) { if ($UserID > 0) { $Where = ['UserID' => $UserID]; } else { $Where = null; } switch (strtolower($Column)) { case 'countdiscussions': Gdn::database()->query(DBAModel::getCountSQL('count', 'User', 'Discussion', 'CountDiscussions', 'DiscussionID', 'UserID', 'InsertUserID', $Where)); break; case 'countcomments': Gdn::database()->query(DBAModel::getCountSQL('count', 'User', 'Comment', 'CountComments', 'CommentID', 'UserID', 'InsertUserID', $Where)); break; } if ($UserID > 0) { $this->clearCache($UserID); } }
/** * @param $Column * @return array */ public function counts($Column) { $Result = array('Complete' => true); switch ($Column) { case 'CountDiscussions': $this->Database->query(DBAModel::getCountSQL('count', 'Category', 'Discussion')); break; case 'CountComments': $this->Database->query(DBAModel::getCountSQL('sum', 'Category', 'Discussion', $Column, 'CountComments')); break; case 'LastDiscussionID': $this->Database->query(DBAModel::getCountSQL('max', 'Category', 'Discussion')); break; case 'LastCommentID': $Data = $this->SQL->select('d.CategoryID')->select('c.CommentID', 'max', 'LastCommentID')->select('d.DiscussionID', 'max', 'LastDiscussionID')->select('c.DateInserted', 'max', 'DateLastComment')->select('d.DateInserted', 'max', 'DateLastDiscussion')->from('Comment c')->join('Discussion d', 'd.DiscussionID = c.DiscussionID')->groupBy('d.CategoryID')->get()->resultArray(); // Now we have to grab the discussions associated with these comments. $CommentIDs = array_column($Data, 'LastCommentID'); // Grab the discussions for the comments. $this->SQL->select('c.CommentID, c.DiscussionID')->from('Comment c')->whereIn('c.CommentID', $CommentIDs); $Discussions = $this->SQL->get()->resultArray(); $Discussions = Gdn_DataSet::Index($Discussions, array('CommentID')); foreach ($Data as $Row) { $CategoryID = (int) $Row['CategoryID']; $Category = CategoryModel::categories($CategoryID); $CommentID = $Row['LastCommentID']; $DiscussionID = valr("{$CommentID}.DiscussionID", $Discussions, null); $DateLastComment = Gdn_Format::toTimestamp($Row['DateLastComment']); $DateLastDiscussion = Gdn_Format::toTimestamp($Row['DateLastDiscussion']); $Set = array('LastCommentID' => $CommentID); if ($DiscussionID) { $LastDiscussionID = val('LastDiscussionID', $Category); if ($DateLastComment >= $DateLastDiscussion) { // The most recent discussion is from this comment. $Set['LastDiscussionID'] = $DiscussionID; } else { // The most recent discussion has no comments. $Set['LastCommentID'] = null; } } else { // Something went wrong. $Set['LastCommentID'] = null; $Set['LastDiscussionID'] = null; } $this->setField($CategoryID, $Set); } break; case 'LastDateInserted': $Categories = $this->SQL->select('ca.CategoryID')->select('d.DateInserted', '', 'DateLastDiscussion')->select('c.DateInserted', '', 'DateLastComment')->from('Category ca')->join('Discussion d', 'd.DiscussionID = ca.LastDiscussionID')->join('Comment c', 'c.CommentID = ca.LastCommentID')->get()->resultArray(); foreach ($Categories as $Category) { $DateLastDiscussion = val('DateLastDiscussion', $Category); $DateLastComment = val('DateLastComment', $Category); $MaxDate = $DateLastComment; if (is_null($DateLastComment) || $DateLastDiscussion > $MaxDate) { $MaxDate = $DateLastDiscussion; } if (is_null($MaxDate)) { continue; } $CategoryID = (int) $Category['CategoryID']; $this->setField($CategoryID, 'LastDateInserted', $MaxDate); } break; } self::ClearCache(); return $Result; }
/** * * * @param $Column * @param null $UserID * @return array * @throws Gdn_UserException */ public function counts($Column, $UserID = null) { // Delete all the orphaned tagdiscussion records $Px = $this->Database->DatabasePrefix; $Sql = "delete td.* from {$Px}TagDiscussion as td left join {$Px}Discussion as d ON td.DiscussionID = d.DiscussionID where d.DiscussionID is null"; $this->Database->query($Sql); $Result = array('Complete' => true); switch ($Column) { case 'CountDiscussions': Gdn::database()->query(DBAModel::getCountSQL('count', 'Tag', 'TagDiscussion', 'CountDiscussions', 'DiscussionID', 'TagID', 'TagID')); break; default: throw new Gdn_UserException("Unknown column {$Column}"); } return $Result; }
public function counts($Column, $From = false, $To = false, $Max = false) { $Result = ['Complete' => true]; switch ($Column) { case 'CountComments': $this->Database->query(DBAModel::getCountSQL('count', 'Discussion', 'Comment')); break; case 'FirstCommentID': $this->Database->query(DBAModel::getCountSQL('min', 'Discussion', 'Comment', $Column)); break; case 'LastCommentID': $this->Database->query(DBAModel::getCountSQL('max', 'Discussion', 'Comment', $Column)); break; case 'DateLastComment': $this->Database->query(DBAModel::getCountSQL('max', 'Discussion', 'Comment', $Column, 'DateInserted')); $this->SQL->update('Discussion')->set('DateLastComment', 'DateInserted', false, false)->where('DateLastComment', null)->put(); break; case 'LastCommentUserID': if (!$Max) { // Get the range for this update. $DBAModel = new DBAModel(); list($Min, $Max) = $DBAModel->primaryKeyRange('Discussion'); if (!$From) { $From = $Min; $To = $Min + DBAModel::$ChunkSize - 1; } } $this->SQL->update('Discussion d')->join('Comment c', 'c.CommentID = d.LastCommentID')->set('d.LastCommentUserID', 'c.InsertUserID', false, false)->where('d.DiscussionID >=', $From)->where('d.DiscussionID <=', $To)->put(); $Result['Complete'] = $To >= $Max; $Percent = round($To * 100 / $Max); if ($Percent > 100 || $Result['Complete']) { $Result['Percent'] = '100%'; } else { $Result['Percent'] = $Percent . '%'; } $From = $To + 1; $To = $From + DBAModel::$ChunkSize - 1; $Result['Args']['From'] = $From; $Result['Args']['To'] = $To; $Result['Args']['Max'] = $Max; break; default: throw new Gdn_UserException("Unknown column {$Column}"); } return $Result; }