Commit a8cb8dcf2731adabde3ddbbfca842b36b9e43f1c
1 parent
d9020ffa
Exists in
manage_organization
Add type filter on manage organization page on admin panel
Signed-off-by: Arthur Del Esposte <arthurmde@gmail.com> Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Gabriela Navarro <navarro1703@gmail.com>
Showing
5 changed files
with
134 additions
and
13 deletions
Show diff stats
app/controllers/admin/admin_panel_controller.rb
@@ -73,10 +73,20 @@ class AdminPanelController < AdminController | @@ -73,10 +73,20 @@ class AdminPanelController < AdminController | ||
73 | end | 73 | end |
74 | 74 | ||
75 | def manage_organizations_status | 75 | def manage_organizations_status |
76 | - scope = environment.organizations | ||
77 | @filter = params[:filter] || 'any' | 76 | @filter = params[:filter] || 'any' |
78 | @title = "Organization profiles" | 77 | @title = "Organization profiles" |
79 | @title = @title+" - "+@filter if @filter != 'any' | 78 | @title = @title+" - "+@filter if @filter != 'any' |
79 | + @type = params[:type] || "any" | ||
80 | + @types_filter = [['All', 'any'], [_('Community'), 'communities'], [_('Enterprise'), 'enterprises']] | ||
81 | + @types_filter = @types_filter | @plugins.dispatch_without_flatten(:organization_types_filter_options).flatten(1) | ||
82 | + | ||
83 | + scope = if @type == "communities" | ||
84 | + environment.communities | ||
85 | + elsif @type == "enterprises" | ||
86 | + environment.enterprises | ||
87 | + else | ||
88 | + environment.organizations | ||
89 | + end | ||
80 | 90 | ||
81 | if @filter == 'enabled' | 91 | if @filter == 'enabled' |
82 | scope = scope.visible | 92 | scope = scope.visible |
@@ -85,8 +95,12 @@ class AdminPanelController < AdminController | @@ -85,8 +95,12 @@ class AdminPanelController < AdminController | ||
85 | end | 95 | end |
86 | 96 | ||
87 | scope = scope.order('name ASC') | 97 | scope = scope.order('name ASC') |
98 | + result_plugin = @plugins.dispatch(:filter_manage_organization_scope, scope, @type) | ||
99 | + scope = result_plugin if !result_plugin.blank? | ||
88 | 100 | ||
89 | @q = params[:q] | 101 | @q = params[:q] |
90 | @collection = find_by_contents(:organizations, environment, scope, @q, {:per_page => 10, :page => params[:npage]})[:results] | 102 | @collection = find_by_contents(:organizations, environment, scope, @q, {:per_page => 10, :page => params[:npage]})[:results] |
103 | + | ||
104 | + render :layout=>false if request.xhr? | ||
91 | end | 105 | end |
92 | end | 106 | end |
app/views/admin_panel/manage_organizations_status.html.erb
@@ -23,15 +23,22 @@ | @@ -23,15 +23,22 @@ | ||
23 | <div style="clear: both"></div> | 23 | <div style="clear: both"></div> |
24 | </div> | 24 | </div> |
25 | 25 | ||
26 | - <table> | 26 | + <table id='organizations-list'> |
27 | <colgroup> | 27 | <colgroup> |
28 | - <col width="80%"> | 28 | + <col width="60%"> |
29 | + <col width="20%"> | ||
29 | <col width="20%"> | 30 | <col width="20%"> |
30 | </colgroup> | 31 | </colgroup> |
31 | 32 | ||
32 | <tr> | 33 | <tr> |
33 | <th><%= _('Member') %></th> | 34 | <th><%= _('Member') %></th> |
34 | <th><%= _('Actions') %></th> | 35 | <th><%= _('Actions') %></th> |
36 | + <th><%= _('Type') %> | ||
37 | + | ||
38 | + <select id="profile_type_select"> | ||
39 | + <%= options_for_select(@types_filter, @type) %> | ||
40 | + </select> | ||
41 | + </th> | ||
35 | </tr> | 42 | </tr> |
36 | 43 | ||
37 | <% @collection.each do |p| %> | 44 | <% @collection.each do |p| %> |
@@ -48,22 +55,20 @@ | @@ -48,22 +55,20 @@ | ||
48 | <%= button_without_text :'delete', _('Remove'), {:controller => "profile_editor", :action => 'destroy_profile', :profile => p.identifier, :id => p.id, :return_to => "/admin/admin_panel/manage_organizations_status"}, :method => :post, :confirm => _("Do you want to deactivate this profile ?") %> | 55 | <%= button_without_text :'delete', _('Remove'), {:controller => "profile_editor", :action => 'destroy_profile', :profile => p.identifier, :id => p.id, :return_to => "/admin/admin_panel/manage_organizations_status"}, :method => :post, :confirm => _("Do you want to deactivate this profile ?") %> |
49 | </div> | 56 | </div> |
50 | </td> | 57 | </td> |
58 | + | ||
59 | + <td> <%= _("#{p.type}") %> </td> | ||
51 | </tr> | 60 | </tr> |
52 | <% end %> | 61 | <% end %> |
53 | </table> | 62 | </table> |
54 | 63 | ||
55 | <% end %> | 64 | <% end %> |
56 | 65 | ||
57 | -<%= pagination_links @collection, {:param_name => 'npage', :page_links => true} %> | 66 | +<div> |
67 | + <%= pagination_links @collection, {:param_name => 'npage', :page_links => true} %> | ||
68 | +</div> | ||
58 | 69 | ||
59 | <% button_bar do %> | 70 | <% button_bar do %> |
60 | <%= button :back, _('Back'), :controller => 'admin_panel' %> | 71 | <%= button :back, _('Back'), :controller => 'admin_panel' %> |
61 | <% end %> | 72 | <% end %> |
62 | 73 | ||
63 | -<script type="text/javascript"> | ||
64 | - jQuery(document).ready(function(){ | ||
65 | - jQuery("#profile_filter_select").change(function(){ | ||
66 | - document.location.href = '/admin/admin_panel/manage_organizations_status?filter='+this.value; | ||
67 | - }); | ||
68 | - }); | ||
69 | -</script> | ||
70 | \ No newline at end of file | 74 | \ No newline at end of file |
75 | +<%= javascript_include_tag 'manage-organizations-status' %> |
lib/noosfero/plugin.rb
@@ -277,6 +277,18 @@ class Noosfero::Plugin | @@ -277,6 +277,18 @@ class Noosfero::Plugin | ||
277 | nil | 277 | nil |
278 | end | 278 | end |
279 | 279 | ||
280 | + # -> Filters the types of organizations that are shown on manage organizations | ||
281 | + # returns a scope filtered by the specified type | ||
282 | + def filter_manage_organization_scope scope, type | ||
283 | + nil | ||
284 | + end | ||
285 | + | ||
286 | + # -> Add new options for manage organization filters | ||
287 | + # returns an array of new options | ||
288 | + # i.e [[_('Type'), 'type'], [_('Type2'), 'type2']] | ||
289 | + def organization_types_filter_options | ||
290 | + nil | ||
291 | + end | ||
280 | # -> Adds content to profile editor info and settings | 292 | # -> Adds content to profile editor info and settings |
281 | # returns = lambda block that creates html code or raw rhtml/html.erb | 293 | # returns = lambda block that creates html code or raw rhtml/html.erb |
282 | def profile_editor_extras | 294 | def profile_editor_extras |
@@ -0,0 +1,45 @@ | @@ -0,0 +1,45 @@ | ||
1 | +(function($) { | ||
2 | + function set_events() { | ||
3 | + $("#profile_filter_select").change(filter_page_loader); | ||
4 | + $("#profile_type_select").change(filter_page_loader); | ||
5 | + } | ||
6 | + | ||
7 | + function filter_page_loader() { | ||
8 | + var page_action = '/admin/admin_panel/manage_organizations_status'; | ||
9 | + var filter = $("#profile_filter_select").val(); | ||
10 | + var type = $("#profile_type_select").val(); | ||
11 | + | ||
12 | + $.ajax({ | ||
13 | + url: page_action, | ||
14 | + type: 'GET', | ||
15 | + data: { | ||
16 | + 'filter': filter, | ||
17 | + 'type': type, | ||
18 | + 'npage': 1 | ||
19 | + }, success: function(response) { | ||
20 | + var response_html = $(response); | ||
21 | + var table_data = response_html.find('#organizations-list tbody').html(); | ||
22 | + var pagination_data = response_html.find('.pagination').html(); | ||
23 | + var title_header = response_html.find('#environment-users-filter-title').html(); | ||
24 | + var has_pagination = response_html.find('.pagination').length === 1; | ||
25 | + | ||
26 | + $('#environment-users-filter-title').html(title_header); | ||
27 | + $('#organizations-list').html(table_data); | ||
28 | + | ||
29 | + if(has_pagination) { | ||
30 | + $('.pagination').html(pagination_data); | ||
31 | + } else { | ||
32 | + $('.pagination').html(''); | ||
33 | + } | ||
34 | + | ||
35 | + set_events(); | ||
36 | + } | ||
37 | + }); | ||
38 | + } | ||
39 | + | ||
40 | + | ||
41 | + $(document).ready(function(){ | ||
42 | + set_events(); | ||
43 | + filter_page_loader(); | ||
44 | + }); | ||
45 | +})(jQuery); |
test/functional/admin_panel_controller_test.rb
@@ -17,12 +17,12 @@ class AdminPanelControllerTest < ActionController::TestCase | @@ -17,12 +17,12 @@ class AdminPanelControllerTest < ActionController::TestCase | ||
17 | should 'manage the correct environment' do | 17 | should 'manage the correct environment' do |
18 | current = fast_create(Environment, :name => 'test environment', :is_default => false) | 18 | current = fast_create(Environment, :name => 'test environment', :is_default => false) |
19 | current.domains.create!(:name => 'example.com') | 19 | current.domains.create!(:name => 'example.com') |
20 | - | 20 | + |
21 | @request.expects(:host).returns('example.com').at_least_once | 21 | @request.expects(:host).returns('example.com').at_least_once |
22 | get :index | 22 | get :index |
23 | assert_equal current, assigns(:environment) | 23 | assert_equal current, assigns(:environment) |
24 | end | 24 | end |
25 | - | 25 | + |
26 | should 'link to site_info editing page' do | 26 | should 'link to site_info editing page' do |
27 | get :index | 27 | get :index |
28 | assert_tag :tag => 'a', :attributes => { :href => '/admin/admin_panel/site_info' } | 28 | assert_tag :tag => 'a', :attributes => { :href => '/admin/admin_panel/site_info' } |
@@ -411,4 +411,49 @@ class AdminPanelControllerTest < ActionController::TestCase | @@ -411,4 +411,49 @@ class AdminPanelControllerTest < ActionController::TestCase | ||
411 | assert_not_match(/enabled community/, @response.body) | 411 | assert_not_match(/enabled community/, @response.body) |
412 | assert_match(/disabled community/, @response.body) | 412 | assert_match(/disabled community/, @response.body) |
413 | end | 413 | end |
414 | + | ||
415 | + should 'show list only of enterprise' do | ||
416 | + community = fast_create(Community, :environment_id => Environment.default, :name=>"Community Test") | ||
417 | + enterprise = fast_create(Enterprise, :environment_id => Environment.default, :name=>"Enterprise Test") | ||
418 | + | ||
419 | + user = create_user('user') | ||
420 | + | ||
421 | + Environment.default.add_admin user.person | ||
422 | + login_as('user') | ||
423 | + | ||
424 | + get :manage_organizations_status, :type=>"enterprises" | ||
425 | + assert_match(/Organization profiles/, @response.body) | ||
426 | + assert_match(/Enterprise Test/, @response.body) | ||
427 | + assert_not_match(/Community Test/, @response.body) | ||
428 | + end | ||
429 | + | ||
430 | + should 'show list only of communities' do | ||
431 | + community = fast_create(Community, :environment_id => Environment.default, :name=>"Community Test") | ||
432 | + enterprise = fast_create(Enterprise, :environment_id => Environment.default, :name=>"Enterprise Test") | ||
433 | + | ||
434 | + user = create_user('user') | ||
435 | + | ||
436 | + Environment.default.add_admin user.person | ||
437 | + login_as('user') | ||
438 | + | ||
439 | + get :manage_organizations_status, :type=>"communities" | ||
440 | + assert_match(/Organization profiles/, @response.body) | ||
441 | + assert_not_match(/Enterprise Test/, @response.body) | ||
442 | + assert_match(/Community Test/, @response.body) | ||
443 | + end | ||
444 | + | ||
445 | + should 'show list all organizations' do | ||
446 | + community = fast_create(Community, :environment_id => Environment.default, :name=>"Community Test") | ||
447 | + enterprise = fast_create(Enterprise, :environment_id => Environment.default, :name=>"Enterprise Test") | ||
448 | + | ||
449 | + user = create_user('user') | ||
450 | + | ||
451 | + Environment.default.add_admin user.person | ||
452 | + login_as('user') | ||
453 | + | ||
454 | + get :manage_organizations_status, :type=>"any" | ||
455 | + assert_match(/Organization profiles/, @response.body) | ||
456 | + assert_match(/Enterprise Test/, @response.body) | ||
457 | + assert_match(/Community Test/, @response.body) | ||
458 | + end | ||
414 | end | 459 | end |