diff --git a/lib/ext/search_controller.rb b/lib/ext/search_controller.rb index 5632130..f4b44ec 100644 --- a/lib/ext/search_controller.rb +++ b/lib/ext/search_controller.rb @@ -93,12 +93,37 @@ class SearchController def sort_communities_list communities_list communities_list.sort!{|a, b| a.name <=> b.name} + if params[:sort] && params[:sort] == "desc" communities_list.reverse! + elsif params[:sort] && params[:sort] == "relevance" + communities_list = sort_by_relevance(communities_list, params[:query]){ |community| [community.software_info.finality, community.name] } end communities_list end + def sort_by_relevance list, text + queries = text.split + + list.sort! do |a, b| + found_in_a, found_in_b = 1, 1 + + relevance_list_a = yield(a) + relevance_list_b = yield(b) + + queries.each do |q| + relevance_list_a.count.times do |i| + found_in_a = (i * -1) if relevance_list_a[i].downcase.include?(q.downcase) + found_in_b = (i * -1) if relevance_list_b[i].downcase.include?(q.downcase) + end + end + + found_in_a <=> found_in_b + end + + list + end + def prepare_software_search_page prepare_software_infos_params prepare_software_infos_message diff --git a/views/search/_mpog_search_form.html.erb b/views/search/_mpog_search_form.html.erb index 4152800..405ceaa 100644 --- a/views/search/_mpog_search_form.html.erb +++ b/views/search/_mpog_search_form.html.erb @@ -37,7 +37,8 @@ options_for_select( [ [_("Name A-Z"), 'asc'], - [_("Name Z-A"), 'desc'] + [_("Name Z-A"), 'desc'], + [_("Relevance"), 'relevance'] ], :selected=>params[:sort]) ) %> -- libgit2 0.21.2