/** * * @param Gdn_SQLDriver $Sql */ 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 = ConsolidateArrayValuesByKey($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 = ConsolidateArrayValuesByKey($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); }