Skip to content
Snippets Groups Projects
Commit 928a557a authored by Demian Katz's avatar Demian Katz
Browse files

Always sort tags case-insensitively.

parent 196026be
No related merge requests found
...@@ -395,7 +395,7 @@ class ResourceTags extends Gateway ...@@ -395,7 +395,7 @@ class ResourceTags extends Gateway
$select->where->equalTo('resource_tags.tag_id', $tagId); $select->where->equalTo('resource_tags.tag_id', $tagId);
} }
$select->group(['tag_id', 'tag']); $select->group(['tag_id', 'tag']);
$select->order(['tag']); $select->order([new Expression('lower(tag)')]);
}; };
return $this->select($callback); return $this->select($callback);
} }
...@@ -456,6 +456,27 @@ class ResourceTags extends Gateway ...@@ -456,6 +456,27 @@ class ResourceTags extends Gateway
return $this->select($callback); return $this->select($callback);
} }
/**
* Given an array for sorting database results, make sure the tag field is
* sorted in a case-insensitive fashion.
*
* @param array $order Order settings
*
* @return array
*/
protected function formatTagOrder($order)
{
if (empty($order)) {
return $order;
}
$newOrder = [];
foreach ((array)$order as $current) {
$newOrder[] = $current == 'tag'
? new Expression('lower(tag)') : $current;
}
return $newOrder;
}
/** /**
* Get Resource Tags * Get Resource Tags
* *
...@@ -502,7 +523,7 @@ class ResourceTags extends Gateway ...@@ -502,7 +523,7 @@ class ResourceTags extends Gateway
if (null !== $tagId) { if (null !== $tagId) {
$select->where->equalTo('resource_tags.tag_id', $tagId); $select->where->equalTo('resource_tags.tag_id', $tagId);
} }
$select->order($order); $select->order($this->formatTagOrder($order));
if (null !== $page) { if (null !== $page) {
$select->limit($limit); $select->limit($limit);
......
...@@ -198,9 +198,9 @@ class Tags extends Gateway ...@@ -198,9 +198,9 @@ class Tags extends Gateway
$select->group(['tags.id', 'tag']); $select->group(['tags.id', 'tag']);
if ($sort == 'count') { if ($sort == 'count') {
$select->order(['cnt DESC', 'tags.tag']); $select->order(['cnt DESC', new Expression('lower(tags.tag)')]);
} else if ($sort == 'tag') { } else if ($sort == 'tag') {
$select->order(['tags.tag']); $select->order([new Expression('lower(tags.tag)')]);
} }
if ($limit > 0) { if ($limit > 0) {
...@@ -284,14 +284,14 @@ class Tags extends Gateway ...@@ -284,14 +284,14 @@ class Tags extends Gateway
$select->group(['tags.id', 'tags.tag']); $select->group(['tags.id', 'tags.tag']);
switch ($sort) { switch ($sort) {
case 'alphabetical': case 'alphabetical':
$select->order(['tags.tag', 'cnt DESC']); $select->order([new Expression('lower(tags.tag)'), 'cnt DESC']);
break; break;
case 'popularity': case 'popularity':
$select->order(['cnt DESC', 'tags.tag']); $select->order(['cnt DESC', new Expression('lower(tags.tag)')]);
break; break;
case 'recent': case 'recent':
$select->order( $select->order(
['posted DESC', 'cnt DESC', 'tags.tag'] ['posted DESC', 'cnt DESC', new Expression('lower(tags.tag)')]
); );
break; break;
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment