diff --git a/src/noosfero-spb/software_communities/lib/ext/search_controller.rb b/src/noosfero-spb/software_communities/lib/ext/search_controller.rb index 6822dc8..0bf869d 100644 --- a/src/noosfero-spb/software_communities/lib/ext/search_controller.rb +++ b/src/noosfero-spb/software_communities/lib/ext/search_controller.rb @@ -1,171 +1,162 @@ -# require_dependency 'search_controller' - -# class SearchController - -# def communities -# delete_communities = [] -# valid_communities_string = Community.get_valid_communities_string -# Community.all.each{|community| delete_communities << community.id unless eval(valid_communities_string)} - -# @scope = visible_profiles(Community) -# @scope = @scope.where(["id NOT IN (?)", delete_communities]) unless delete_communities.empty? - -# full_text_search -# end - -# def software_infos -# prepare_software_search_page -# results = filter_software_infos_list -# @software_count = results.count -# results = results.paginate(:per_page => @per_page, :page => params[:page]) -# @searches[@asset] = {:results => results} -# @search = results - -# render :layout=>false if request.xhr? -# end - -# protected - -# def filter_communities_list -# unfiltered_list = visible_profiles(Community) - -# unless params[:query].nil? -# unfiltered_list = unfiltered_list.select do |com| -# com.name.downcase =~ /#{params[:query].downcase}/ -# end -# end - -# communities_list = [] -# unfiltered_list.each do |profile| -# if profile.class == Community && !profile.is_template? && yield(profile) -# communities_list << profile -# end -# end - -# communities_list -# end - -# def filter_software_infos_list -# filtered_software_list = get_filtered_software_list -# filtered_community_list = get_communities_list(filtered_software_list) -# sort_communities_list filtered_community_list -# end - -# def get_filter_category_ids -# category_ids = [] -# unless params[:selected_categories_id].blank? -# category_ids = params[:selected_categories_id] -# end -# category_ids.map(&:to_i) -# end - -# def get_filtered_software_list -# params[:query] ||= "" -# visible_communities = visible_profiles(Community) - -# filtered_software_list = SoftwareCommunitiesPlugin::SoftwareInfo.search_by_query(params[:query]) - -# if params[:only_softwares] -# params[:only_softwares].collect!{ |software_name| software_name.to_slug } -# filtered_software_list = SoftwareCommunitiesPlugin::SoftwareInfo.all.select{ |s| params[:only_softwares].include?(s.identifier) } -# @public_software_selected = false -# end - -# filtered_software_list.select!{ |software| visible_communities.include?(software.community) } -# category_ids = get_filter_category_ids - -# unless category_ids.empty? -# filtered_software_list.select! do |software| -# if software.nil? || software.community.nil? -# false -# else -# result_ids = (software.community.category_ids & category_ids).sort -# result_ids == category_ids.sort -# end -# end -# end - -# filtered_software_list -# end - -# def get_communities_list software_list -# filtered_community_list = [] -# software_list.each do |software| -# if !@public_software_selected || software.public_software? -# filtered_community_list << software.community unless software.community.nil? -# end -# end -# filtered_community_list -# end - -# def sort_communities_list communities_list -# communities_list.sort! {|a, b| a.name.downcase <=> b.name.downcase} - -# 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 prepare_software_search_page -# prepare_software_infos_params -# prepare_software_infos_message -# prepare_software_infos_category_groups -# prepare_software_infos_category_enable -# end - -# def prepare_software_infos_params -# @asset = "software_communities_plugin/software_infos" -# @assets = [@asset] -# @titles["software_communities_plugin/software_infos"] = _("Result Search") -# @selected_categories_id = params[:selected_categories_id] -# @selected_categories_id ||= [] -# @selected_categories_id = @selected_categories_id.map(&:to_i) -# @all_selected = params[:software_type] == "all" -# @public_software_selected = !@all_selected -# @per_page = prepare_per_page -# end - -# def prepare_per_page -# return 15 if params[:software_display].nil? - -# if params[:software_display] == "all" -# SoftwareCommunitiesPlugin::SoftwareInfo.count -# else -# params[:software_display].to_i -# end -# end - -# def prepare_software_infos_message -# @message_selected_options = "" - -# @selected_categories = [] -# unless @selected_categories_id.empty? -# @message_selected_options = _("Selected options: ") - -# @selected_categories = Category.find(@selected_categories_id) -# @message_selected_options += @selected_categories.collect { |category| -# "#{category.name}; " -# }.join() -# end -# end - -# def prepare_software_infos_category_groups -# @categories = Category.software_categories.sort{|a, b| a.name <=> b.name} -# end - -# def prepare_software_infos_category_enable -# @enabled_check_box = Hash.new -# categories = Category.software_categories - -# categories.each do |category| -# if category.software_infos.count > 0 -# @enabled_check_box[category] = :enabled -# else -# @enabled_check_box[category] = :disabled -# end -# end -# end -# end +require_dependency 'search_controller' + +class SearchController + + # def communities + # delete_communities = [] + # valid_communities_string = Community.get_valid_communities_string + # Community.all.each{|community| delete_communities << community.id unless eval(valid_communities_string)} + + # @scope = visible_profiles(Community) + # @scope = @scope.where(["id NOT IN (?)", delete_communities]) unless delete_communities.empty? + + # full_text_search + # end + + # def software_infos + # prepare_software_search_page + # results = filter_software_infos_list + # @software_count = results.count + # results = results.paginate(:per_page => @per_page, :page => params[:page]) + # @searches[@asset] = {:results => results} + # @search = results + + # render :layout=>false if request.xhr? + # end + + protected + + def filter_communities_list + unfiltered_list = visible_profiles(Community) + + unless params[:query].nil? + unfiltered_list = unfiltered_list.select do |com| + com.name.downcase =~ /#{params[:query].downcase}/ + end + end + + communities_list = [] + unfiltered_list.each do |profile| + if profile.class == Community && !profile.is_template? && yield(profile) + communities_list << profile + end + end + + communities_list + end + + def filter_software_infos_list + filtered_software_list = get_filtered_software_list + # filtered_community_list = get_communities_list(filtered_software_list) + sort_communities_list filtered_software_list + end + + def get_filter_category_ids + category_ids = [] + unless params[:selected_categories_id].blank? + category_ids = params[:selected_categories_id] + end + category_ids.map(&:to_i) + end + + def get_filtered_software_list + params[:query] ||= "" + visible_communities = visible_profiles(Community) + + filtered_software_list = SoftwareCommunitiesPlugin::SoftwareInfo.search_by_query(params[:query]) + + if params[:only_softwares] + params[:only_softwares].collect!{ |software_name| software_name.to_slug } + filtered_software_list = SoftwareCommunitiesPlugin::SoftwareInfo.all.select{ |s| params[:only_softwares].include?(s.identifier) } + @public_software_selected = false + end + + filtered_software_list.select!{ |software| visible_communities.include?(software.community) } + category_ids = get_filter_category_ids + + unless category_ids.empty? + filtered_software_list.select! do |software| + if software.nil? || software.community.nil? + false + else + result_ids = (software.community.category_ids & category_ids).sort + result_ids == category_ids.sort + end + end + end + + ids = filtered_software_list.pluck(:id) + visible_communities.joins(:software_infos).where("software_infos.id IN ?", ids) + end + + def sort_communities_list communities_list + communities_list.order('name') + + if params[:sort] && params[:sort] == "desc" + communities_list.order('name DESC') + 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 prepare_software_search_page + prepare_software_infos_params + prepare_software_infos_message + prepare_software_infos_category_groups + prepare_software_infos_category_enable + end + + def prepare_software_infos_params + @asset = "software_communities_plugin/software_infos" + @assets = [@asset] + @titles["software_communities_plugin/software_infos"] = _("Result Search") + @selected_categories_id = params[:selected_categories_id] + @selected_categories_id ||= [] + @selected_categories_id = @selected_categories_id.map(&:to_i) + @all_selected = params[:software_type] == "all" + @public_software_selected = !@all_selected + @per_page = prepare_per_page + end + + def prepare_per_page + return 15 if params[:software_display].nil? + + if params[:software_display] == "all" + SoftwareCommunitiesPlugin::SoftwareInfo.count + else + params[:software_display].to_i + end + end + + def prepare_software_infos_message + @message_selected_options = "" + + @selected_categories = [] + unless @selected_categories_id.empty? + @message_selected_options = _("Selected options: ") + + @selected_categories = Category.find(@selected_categories_id) + @message_selected_options += @selected_categories.collect { |category| + "#{category.name}; " + }.join() + end + end + + def prepare_software_infos_category_groups + @categories = Category.software_categories.sort{|a, b| a.name <=> b.name} + end + + def prepare_software_infos_category_enable + @enabled_check_box = Hash.new + categories = Category.software_categories + + categories.each do |category| + if category.software_infos.count > 0 + @enabled_check_box[category] = :enabled + else + @enabled_check_box[category] = :disabled + end + end + end +end diff --git a/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb b/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb index 90b2a30..a90d553 100644 --- a/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb +++ b/src/noosfero-spb/software_communities/lib/software_communities_plugin.rb @@ -114,6 +114,7 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin person.has_permission_without_plugins?(permission, target) end + def filter_search_scope(scope, asset) # Select only communities that are not related to any software. if asset.to_s == 'communities' @@ -136,10 +137,19 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin def new_search_assets class_name_underscored = "software_communities_plugin/software_infos" block = proc do + prepare_software_search_page + results = filter_software_infos_list @scope = visible_profiles(Community) @asset = class_name_underscored @assets = [@asset] @titles[class_name_underscored] = _("Result Search") + @categories = Category.software_categories.sort{|a, b| a.name <=> b.name} + @selected_categories_id = params[:selected_categories_id] + @selected_categories_id ||= [] + @selected_categories_id = @selected_categories_id.map(&:to_i) + @all_selected = params[:software_type] == "all" + @public_software_selected = !@all_selected + @per_page = prepare_per_page params[:limit] = 24 end diff --git a/src/noosfero-spb/software_communities/public/views/search-software-catalog.js b/src/noosfero-spb/software_communities/public/views/search-software-catalog.js index 552b055..0a491d5 100644 --- a/src/noosfero-spb/software_communities/public/views/search-software-catalog.js +++ b/src/noosfero-spb/software_communities/public/views/search-software-catalog.js @@ -2,8 +2,8 @@ modulejs.define('SearchSoftwareCatalog', ['jquery', 'NoosferoRoot', 'SoftwareCat 'use strict'; var AJAX_URL = { - software_infos: - NoosferoRoot.urlWithSubDirectory("/search/software_infos") + softwares: + NoosferoRoot.urlWithSubDirectory("/search/softwares") }; @@ -15,7 +15,7 @@ modulejs.define('SearchSoftwareCatalog', ['jquery', 'NoosferoRoot', 'SoftwareCat } $.ajax({ - url: AJAX_URL.software_infos, + url: AJAX_URL.softwares, type: "GET", data: search_params, success: update_search_page_on_ajax, diff --git a/src/noosfero-spb/software_communities/views/search/_catalog_filter.html.erb b/src/noosfero-spb/software_communities/views/search/_catalog_filter.html.erb index 2a22b0c..c4dc72d 100644 --- a/src/noosfero-spb/software_communities/views/search/_catalog_filter.html.erb +++ b/src/noosfero-spb/software_communities/views/search/_catalog_filter.html.erb @@ -1,7 +1,8 @@
-
-

<%= _("Categories") %>

+
+

<%= _("Categories") %>

+
    <% unless @categories.blank? %> @@ -15,8 +16,11 @@
-
<%= _("More options") %>
+
+ <%= _("More options") %> +
<%= button_tag _("Clean up"), :id => "cleanup-filter-catalg", :type => "button" %> <%= button_tag _("Close"), :id => "close-filter-catalog", :type => "button" %>
+
diff --git a/src/noosfero-spb/software_communities/views/search/_catalog_result_list.html.erb b/src/noosfero-spb/software_communities/views/search/_catalog_result_list.html.erb index 976a13d..6e9e717 100644 --- a/src/noosfero-spb/software_communities/views/search/_catalog_result_list.html.erb +++ b/src/noosfero-spb/software_communities/views/search/_catalog_result_list.html.erb @@ -38,7 +38,7 @@
<% @selected_categories.each do |category| %>
- <%= link_to _("#{category.name}") + " (#{category.software_infos.count})", {:controller => :search, :action => :software_infos, :selected_categories_id => [category.id]} %> + <%= link_to _("#{category.name}") + " (#{category.software_infos.count})", {:controller => :search, :action => :softwares, :selected_categories_id => [category.id]} %> <% end %>
diff --git a/src/noosfero-spb/software_communities/views/search/_full_community.html.erb b/src/noosfero-spb/software_communities/views/search/_full_community.html.erb index 23e2b14..eec5bde 100644 --- a/src/noosfero-spb/software_communities/views/search/_full_community.html.erb +++ b/src/noosfero-spb/software_communities/views/search/_full_community.html.erb @@ -34,7 +34,7 @@
  • <%= link_to _("#{category.name}"), { :controller => :search, - :action => :software_infos, + :action => :softwares, :selected_categories_id => [category.id], :software_type => params[:software_type] } %> diff --git a/src/noosfero-spb/software_communities/views/search/_software_search_form.html.erb b/src/noosfero-spb/software_communities/views/search/_software_search_form.html.erb index de95237..24e755a 100644 --- a/src/noosfero-spb/software_communities/views/search/_software_search_form.html.erb +++ b/src/noosfero-spb/software_communities/views/search/_software_search_form.html.erb @@ -2,7 +2,7 @@

    <%= _("Search Software Catalog") %>

    - <%= form_tag( { :controller => 'search', :action => @asset ? @asset : 'index', :asset => nil, :category_path => ( @category ? @category.path : nil ) }, + <%= form_tag( { :controller => 'search', :action => 'softwares', :asset => @asset, :category_path => ( @category ? @category.path : nil ) }, :method => 'get') do %>
    -- libgit2 0.21.2