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 37d5bf6..6822dc8 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,171 @@ -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_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 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 e2d2c2d..90b2a30 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,38 @@ 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' + scope = scope.joins('LEFT OUTER JOIN software_communities_plugin_software_infos as softwares + ON profiles.id = softwares.community_id'). + where('softwares.community_id IS NULL') + + return [scope, asset] + # Select only communities that are related to a software. + elsif asset.to_s == 'software_communities_plugin/software_infos' + scope = scope.joins('INNER JOIN software_communities_plugin_software_infos as softwares + ON profiles.id = softwares.community_id') + return [scope, asset] + # Go with the flow. + else + return [scope, asset] + end + end + + def new_search_assets + class_name_underscored = "software_communities_plugin/software_infos" + block = proc do + @scope = visible_profiles(Community) + @asset = class_name_underscored + @assets = [@asset] + @titles[class_name_underscored] = _("Result Search") + params[:limit] = 24 + end + + [{:name => 'software', :block => block, :common_profile_list_block => class_name_underscored}] + end + protected def software_info_transaction 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 e6a9dd7..2a22b0c 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 @@ -4,11 +4,13 @@

<%= _("Categories") %>

diff --git a/src/noosfero-spb/software_communities/views/search/software_infos.html.erb b/src/noosfero-spb/software_communities/views/search/software_infos.html.erb deleted file mode 100644 index c68f6fc..0000000 --- a/src/noosfero-spb/software_communities/views/search/software_infos.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -

Catálogo de Software Público

- -
- <%= search_page_title( @titles[@asset], @category ) %> - - <%= render :partial => 'software_search_form', :locals => { :hint => _("Type words about the %s you're looking for") % @asset.to_s.singularize } %> - - <% if @asset == :product %> - <%= javascript_tag do %> - jQuery('.search-product-price-details').altBeautify(); - <% end %> - <% end %> -
- -<%= render partial:"catalog_result_list" %> - -
- <% if params[:display] != 'map' %> - <%= pagination_links @searches[@asset][:results] %> - <% end %> -
diff --git a/src/noosfero-spb/software_communities/views/search/softwares.html.erb b/src/noosfero-spb/software_communities/views/search/softwares.html.erb new file mode 100644 index 0000000..c68f6fc --- /dev/null +++ b/src/noosfero-spb/software_communities/views/search/softwares.html.erb @@ -0,0 +1,21 @@ +

Catálogo de Software Público

+ +
+ <%= search_page_title( @titles[@asset], @category ) %> + + <%= render :partial => 'software_search_form', :locals => { :hint => _("Type words about the %s you're looking for") % @asset.to_s.singularize } %> + + <% if @asset == :product %> + <%= javascript_tag do %> + jQuery('.search-product-price-details').altBeautify(); + <% end %> + <% end %> +
+ +<%= render partial:"catalog_result_list" %> + +
+ <% if params[:display] != 'map' %> + <%= pagination_links @searches[@asset][:results] %> + <% end %> +
-- libgit2 0.21.2