diff --git a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php index ce5f745d0f0ca68c2dead764772a7bd1dc4d40fe..afee8149d76378a2a249643488861e15741bb09f 100644 --- a/module/VuFind/src/VuFind/Db/Table/ResourceTags.php +++ b/module/VuFind/src/VuFind/Db/Table/ResourceTags.php @@ -395,7 +395,7 @@ class ResourceTags extends Gateway $select->where->equalTo('resource_tags.tag_id', $tagId); } $select->group(['tag_id', 'tag']); - $select->order(['tag']); + $select->order([new Expression('lower(tag)')]); }; return $this->select($callback); } @@ -456,6 +456,27 @@ class ResourceTags extends Gateway 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 * @@ -502,7 +523,7 @@ class ResourceTags extends Gateway if (null !== $tagId) { $select->where->equalTo('resource_tags.tag_id', $tagId); } - $select->order($order); + $select->order($this->formatTagOrder($order)); if (null !== $page) { $select->limit($limit); diff --git a/module/VuFind/src/VuFind/Db/Table/Tags.php b/module/VuFind/src/VuFind/Db/Table/Tags.php index d0fb645df71fa799643f2398c1e087f9dca341a5..9d0529954c118aa749cba9bdc791d5aaf857dcad 100644 --- a/module/VuFind/src/VuFind/Db/Table/Tags.php +++ b/module/VuFind/src/VuFind/Db/Table/Tags.php @@ -198,9 +198,9 @@ class Tags extends Gateway $select->group(['tags.id', 'tag']); if ($sort == 'count') { - $select->order(['cnt DESC', 'tags.tag']); + $select->order(['cnt DESC', new Expression('lower(tags.tag)')]); } else if ($sort == 'tag') { - $select->order(['tags.tag']); + $select->order([new Expression('lower(tags.tag)')]); } if ($limit > 0) { @@ -284,14 +284,14 @@ class Tags extends Gateway $select->group(['tags.id', 'tags.tag']); switch ($sort) { case 'alphabetical': - $select->order(['tags.tag', 'cnt DESC']); + $select->order([new Expression('lower(tags.tag)'), 'cnt DESC']); break; case 'popularity': - $select->order(['cnt DESC', 'tags.tag']); + $select->order(['cnt DESC', new Expression('lower(tags.tag)')]); break; case 'recent': $select->order( - ['posted DESC', 'cnt DESC', 'tags.tag'] + ['posted DESC', 'cnt DESC', new Expression('lower(tags.tag)')] ); break; }