Commit 89830abf959cf4a438054c95c79e22e5516c7bed
1 parent
72bf3be8
Exists in
gov-user-refactoring
gov-user: make search extensions through proper hotspots instead of hardcoded
Closes #399
Showing
5 changed files
with
33 additions
and
54 deletions
Show diff stats
src/noosfero-spb/gov_user/lib/ext/search_controller.rb
| @@ -1,44 +0,0 @@ | @@ -1,44 +0,0 @@ | ||
| 1 | -require_dependency 'search_controller' | ||
| 2 | - | ||
| 3 | -class SearchController | ||
| 4 | - | ||
| 5 | - def communities | ||
| 6 | - delete_communities = [] | ||
| 7 | - valid_communities_string = Community.get_valid_communities_string | ||
| 8 | - Community.all.each{|community| delete_communities << community.id unless eval(valid_communities_string)} | ||
| 9 | - | ||
| 10 | - @scope = visible_profiles(Community) | ||
| 11 | - @scope = @scope.where(["id NOT IN (?)", delete_communities]) unless delete_communities.empty? | ||
| 12 | - | ||
| 13 | - full_text_search | ||
| 14 | - end | ||
| 15 | - | ||
| 16 | - def institutions | ||
| 17 | - @asset = "gov_user_plugin/institutions" | ||
| 18 | - @assets = [@asset] | ||
| 19 | - @titles["gov_user_plugin/institutions"] = _("Institution Catalog") | ||
| 20 | - results = filter_communities_list{|community| community.institution?} | ||
| 21 | - results = results.paginate(:per_page => 24, :page => params[:page]) | ||
| 22 | - @searches[@asset] = {:results => results} | ||
| 23 | - @search = results | ||
| 24 | - end | ||
| 25 | - | ||
| 26 | - def filter_communities_list | ||
| 27 | - unfiltered_list = visible_profiles(Community) | ||
| 28 | - | ||
| 29 | - unless params[:query].nil? | ||
| 30 | - unfiltered_list = unfiltered_list.select do |com| | ||
| 31 | - com.name.downcase =~ /#{params[:query].downcase}/ | ||
| 32 | - end | ||
| 33 | - end | ||
| 34 | - | ||
| 35 | - communities_list = [] | ||
| 36 | - unfiltered_list.each do |profile| | ||
| 37 | - if profile.class == Community && !profile.is_template? && yield(profile) | ||
| 38 | - communities_list << profile | ||
| 39 | - end | ||
| 40 | - end | ||
| 41 | - | ||
| 42 | - communities_list | ||
| 43 | - end | ||
| 44 | -end |
src/noosfero-spb/gov_user/lib/ext/search_helper.rb
src/noosfero-spb/gov_user/lib/gov_user_plugin.rb
| @@ -251,6 +251,37 @@ class GovUserPlugin < Noosfero::Plugin | @@ -251,6 +251,37 @@ class GovUserPlugin < Noosfero::Plugin | ||
| 251 | } | 251 | } |
| 252 | end | 252 | end |
| 253 | 253 | ||
| 254 | + def filter_search_scope(scope, asset) | ||
| 255 | + # Select only communities that are not related to any institution. | ||
| 256 | + if asset.to_s == 'communities' | ||
| 257 | + scope = scope.joins('LEFT OUTER JOIN gov_user_plugin_institutions as institutions | ||
| 258 | + ON profiles.id = institutions.community_id'). | ||
| 259 | + where('institutions.community_id IS NULL') | ||
| 260 | + return [scope, asset] | ||
| 261 | + # Select only communities that are related to an institution. | ||
| 262 | + elsif asset.to_s == 'gov_user_plugin/institutions' | ||
| 263 | + scope = scope.joins('INNER JOIN gov_user_plugin_institutions as institutions | ||
| 264 | + ON profiles.id = institutions.community_id') | ||
| 265 | + return [scope, asset] | ||
| 266 | + # Go with the flow. | ||
| 267 | + else | ||
| 268 | + return [scope, asset] | ||
| 269 | + end | ||
| 270 | + end | ||
| 271 | + | ||
| 272 | + def new_search_assets | ||
| 273 | + class_name_underscored = "gov_user_plugin/institutions" | ||
| 274 | + block = proc do | ||
| 275 | + @scope = visible_profiles(Community) | ||
| 276 | + @asset = class_name_underscored | ||
| 277 | + @assets = [@asset] | ||
| 278 | + @titles[class_name_underscored] = _("Institution Catalog") | ||
| 279 | + params[:limit] = 24 | ||
| 280 | + end | ||
| 281 | + | ||
| 282 | + [{:name => 'institution', :block => block, :common_profile_list_block => class_name_underscored}] | ||
| 283 | + end | ||
| 284 | + | ||
| 254 | private | 285 | private |
| 255 | 286 | ||
| 256 | def call_model_transaction(model,name) | 287 | def call_model_transaction(model,name) |
src/noosfero-spb/gov_user/test/functional/search_controller_test.rb
| @@ -12,7 +12,7 @@ class SearchControllerTest < ActionController::TestCase | @@ -12,7 +12,7 @@ class SearchControllerTest < ActionController::TestCase | ||
| 12 | 12 | ||
| 13 | def setup | 13 | def setup |
| 14 | @environment = Environment.default | 14 | @environment = Environment.default |
| 15 | - @environment.enabled_plugins = ['SoftwareCommunitiesPlugin'] | 15 | + @environment.enabled_plugins = ['SoftwareCommunitiesPlugin', 'GovUserPlugin'] |
| 16 | @environment.save | 16 | @environment.save |
| 17 | 17 | ||
| 18 | @controller = SearchController.new | 18 | @controller = SearchController.new |
src/noosfero-spb/software_communities/lib/ext/search_controller.rb
| @@ -8,7 +8,7 @@ class SearchController | @@ -8,7 +8,7 @@ class SearchController | ||
| 8 | Community.all.each{|community| delete_communities << community.id unless eval(valid_communities_string)} | 8 | Community.all.each{|community| delete_communities << community.id unless eval(valid_communities_string)} |
| 9 | 9 | ||
| 10 | @scope = visible_profiles(Community) | 10 | @scope = visible_profiles(Community) |
| 11 | - @scope = @scope.where(["id NOT IN (?)", delete_communities]) unless delete_communities.empty? | 11 | + @scope = @scope.where(["profiles.id NOT IN (?)", delete_communities]) unless delete_communities.empty? |
| 12 | 12 | ||
| 13 | full_text_search | 13 | full_text_search |
| 14 | end | 14 | end |