FEATURE: Add setting & preference for search sort default order (#24428)

This commit adds a new `search_default_sort_order` site setting,
set to "relevance" by default, that controls the default sort order
for the full page /search route.

If the user changes the order in the dropdown on that page, we remember
their preference automatically, and it takes precedence over the site
setting as a default from then on. This way people who prefer e.g.
Latest Post as their default can make it so.
This commit is contained in:
Martin Brennan
2023-11-20 10:43:58 +10:00
committed by GitHub
parent 186e415e38
commit 146da75fd7
10 changed files with 138 additions and 4 deletions

View File

@@ -0,0 +1,29 @@
# frozen_string_literal: true
class SearchSortOrderSiteSetting < EnumSiteSetting
def self.valid_value?(val)
val.to_i.to_s == val.to_s && values.any? { |v| v[:value] == val.to_i }
end
def self.values
@values ||= [
{ name: "search.relevance", value: 0, id: :relevance },
{ name: "search.latest_post", value: 1, id: :latest },
{ name: "search.most_liked", value: 2, id: :likes },
{ name: "search.most_viewed", value: 3, id: :views },
{ name: "search.latest_topic", value: 4, id: :latest_topic },
]
end
def self.value_from_id(id)
values.find { |v| v[:id] == id }[:value]
end
def self.id_from_value(value)
values.find { |v| v[:value] == value }[:id]
end
def self.translate_names?
true
end
end