/** * * * @param Gdn_SQLDriver $Sql * @param $Tag * @param $Limit * @param int $Offset * @param string $Op * @throws Exception */ protected function _setTagSql($Sql, $Tag, &$Limit, &$Offset = 0, $Op = 'or') { $SortField = 'd.DateLastComment'; $SortDirection = 'desc'; $TagSql = clone Gdn::sql(); if ($DateFrom = Gdn::request()->get('DateFrom')) { // Find the discussion ID of the first discussion created on or after the date from. $DiscussionIDFrom = $TagSql->getWhere('Discussion', array('DateInserted >= ' => $DateFrom), 'DiscussionID', 'asc', 1)->value('DiscussionID'); $SortField = 'd.DiscussionID'; } $Tags = array_map('trim', explode(',', $Tag)); $TagIDs = $TagSql->select('TagID')->from('Tag')->whereIn('Name', $Tags)->get()->resultArray(); $TagIDs = array_column($TagIDs, 'TagID'); if ($Op == 'and' && count($Tags) > 1) { $DiscussionIDs = $TagSql->select('DiscussionID')->select('TagID', 'count', 'CountTags')->from('TagDiscussion')->whereIn('TagID', $TagIDs)->groupBy('DiscussionID')->having('CountTags >=', count($Tags))->limit($Limit, $Offset)->orderBy('DiscussionID', 'desc')->get()->resultArray(); $Limit = ''; $Offset = 0; $DiscussionIDs = array_column($DiscussionIDs, 'DiscussionID'); $Sql->whereIn('d.DiscussionID', $DiscussionIDs); $SortField = 'd.DiscussionID'; } else { $Sql->join('TagDiscussion td', 'd.DiscussionID = td.DiscussionID')->limit($Limit, $Offset)->whereIn('td.TagID', $TagIDs); if ($Op == 'and') { $SortField = 'd.DiscussionID'; } } // Set up the sort field and direction. saveToConfig(array('Vanilla.Discussions.SortField' => $SortField, 'Vanilla.Discussions.SortDirection' => $SortDirection), '', false); }