Commit a8cb8dcf2731adabde3ddbbfca842b36b9e43f1c

Authored by Gabriela Navarro
1 parent d9020ffa

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>
app/controllers/admin/admin_panel_controller.rb
@@ -73,10 +73,20 @@ class AdminPanelController &lt; AdminController @@ -73,10 +73,20 @@ class AdminPanelController &lt; 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 &lt; AdminController @@ -85,8 +95,12 @@ class AdminPanelController &lt; 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
public/javascripts/manage-organizations-status.js 0 → 100644
@@ -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 &lt; ActionController::TestCase @@ -17,12 +17,12 @@ class AdminPanelControllerTest &lt; 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 &lt; ActionController::TestCase @@ -411,4 +411,49 @@ class AdminPanelControllerTest &lt; 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