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; }
public function Counts($Column, $From = FALSE, $To = FALSE, $Max = FALSE) { $Result = array('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; }
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 = ConsolidateArrayValuesByKey($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 = GetValueR("{$CommentID}.DiscussionID", $Discussions, NULL); $DateLastComment = Gdn_Format::ToTimestamp($Row['DateLastComment']); $DateLastDiscussion = Gdn_Format::ToTimestamp($Row['DateLastDiscussion']); $Set = array('LastCommentID' => $CommentID); if ($DiscussionID) { $LastDiscussionID = GetValue('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 = GetValue('DateLastDiscussion', $Category); $DateLastComment = GetValue('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; }
public function Counts($Column, $UserID = null) { if ($UserID) { $Where = array('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) { $this->ClearCache($UserID); } }
/** * Used by the DBA controller to update the denormalized badge count on the * user table via dba/counts * @param string $Column * @param int $UserID * @return boolean * @throws Gdn_UserException */ public function Counts($Column, $UserID = NULL) { if ($UserID) { $Where = array('UserID' => $UserID); } else { $Where = NULL; } $Result = array('Complete' => TRUE); switch ($Column) { case 'CountBadges': Gdn::Database()->Query(DBAModel::GetCountSQL('count', 'User', 'BadgeAward', 'CountBadges', 'BadgeAwardID', 'UserID', 'UserID', $Where)); break; default: throw new Gdn_UserException("Unknown column {$Column}"); } return $Result; }