Commit ece9470c594d2bff7b1496c25e7ae98d2de536cb

Authored by Tallys Martins
1 parent fd65e2c1
Exists in 2_split_by_role

Profile members page now show members in tabs by role

Signed-off-by: Tallys Martins <tallysmartins@yahoo.com.br>
app/controllers/public/profile_controller.rb
... ... @@ -70,12 +70,12 @@ class ProfileController &lt; PublicController
70 70 else
71 71 profile.members.order("name asc")
72 72 end
73   -
74 73 @profile_admins = profile.admins
75   - @total_members = all_members.count
76   - @members_except_admins = all_members - @profile_admins
77   - @members_count = @members_except_admins.count
78   - @members_except_admins = @members_except_admins.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members_count)
  74 + @profile_members = all_members - @profile_admins
  75 + @profile_members = @profile_members.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @profile_members.size)
  76 + @profile_admins = @profile_admins.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @profile_admins.size)
  77 + @total_members = all_members.size
  78 + @profile_members_url = url_for(:controller => "profile", :action => "members")
79 79 end
80 80  
81 81 end
... ...
app/models/profile.rb
... ... @@ -898,7 +898,11 @@ private :generate_url, :url_options
898 898  
899 899 def members_cache_key(params = {})
900 900 page = params[:npage] || '1'
901   - cache_key + '-members-page-' + page
  901 + if params[:sort] and params[:sort].downcase == "desc"
  902 + cache_key + '-members-page-' + page + "desc"
  903 + else
  904 + cache_key + '-members-page-' + page + "asc"
  905 + end
902 906 end
903 907  
904 908 def more_recent_label
... ...
app/views/profile/_profile_members_list.html.erb 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 + <div id="profile-members-sort-options">
  2 + <%= label_tag("sort-#{role}", _("Sort by:")) %>
  3 + <%= select_tag("sort-#{role}",
  4 + options_for_select([
  5 + [_("Name A-Z"), 'asc'],
  6 + [_("Name Z-A"), 'desc'],
  7 + ], :selected=>params[:sort])
  8 + ) %>
  9 + </div>
  10 + <ul class="profile-list-<%= role %>" >
  11 + <% users.each do |u| %>
  12 + <%= profile_image_link(u) %>
  13 + <% end %>
  14 +</ul>
... ...
app/views/profile/members.html.erb
... ... @@ -4,43 +4,49 @@
4 4 <h3 class="community-name-members"><%= _("%s") % profile.name %></h3>
5 5  
6 6 <% cache_timeout(profile.members_cache_key(params), 4.hours) do %>
  7 +<div class="profile-members-tabs-container">
  8 + <% tabs = [] %>
  9 + <% div_admins = content_tag :div, :class => "profile-admins" do
  10 + render :partial => 'profile_members_list',
  11 + :locals => {
  12 + :users => @profile_admins,
  13 + :role => "admins"
  14 + }
  15 + end %>
  16 +
  17 + <% admins_pagination = content_tag :div, :class => "pagination-profile-admins" do
  18 + pagination_links @profile_admins, :param_name => 'npage'
  19 + end %>
  20 +
  21 + <% tabs << {:title => "#{@profile_admins.size} "+_("Administrators"),
  22 + :id => "admins-tab",
  23 + :content => (div_admins+admins_pagination)
  24 + } %>
  25 +
  26 +
  27 + <% div_members = content_tag :div, :class => "profile-members" do
  28 + render :partial => 'profile_members_list',
  29 + :locals => {
  30 + :users => @profile_members,
  31 + :role => "members"
  32 + }
  33 +
  34 + end %>
  35 +
  36 + <% members_pagination = content_tag :div, :class => "pagination-profile-members" do
  37 + pagination_links @profile_members, :param_name => 'npage'
  38 + end %>
  39 +
  40 +
  41 + <% tabs << {:title => "#{@profile_members.size} "+_("Members"),
  42 + :id => "members-tab",
  43 + :content => (div_members + members_pagination)
  44 + } %>
  45 +
  46 + <%= render_tabs(tabs) %>
  47 + <% end %>
  48 +</div>
7 49  
8   - <div class='profile-admins'>
9   - <h2><%= "#{@profile_admins.count} "+_("admins") %></h2>
10   - <ul class='profile-list'>
11   - <% @profile_admins.each do |admin| %>
12   - <%= profile_image_link(admin) %>
13   - <% end %>
14   - </ul>
15   - </div>
16   -
17   - <div class="profile-members-title-sort">
18   - <h2><%= "#{@members_count} "+ _("members") %></h2>
19   -
20   - <div id="members-display-options-sort">
21   - <%= label_tag("sort", _("Sort by:")) %>
22   - <%= select_tag("sort",
23   - options_for_select(
24   - [
25   - [_("Name A-Z"), 'asc'],
26   - [_("Name Z-A"), 'desc'],
27   - ], :selected=>params[:sort])
28   - ) %>
29   - </div>
30   - </div>
31   -
32   - <div class='profile-members'>
33   - <ul class='profile-list'>
34   - <% @members_except_admins.each do |member| %>
35   - <%= profile_image_link(member) %>
36   - <% end %>
37   - </ul>
38   - </div>
39   -
40   - <div id='pagination-profiles'>
41   - <%= pagination_links @members_except_admins, :param_name => 'npage' %>
42   - </div>
43   -<% end %>
44 50  
45 51 <% button_bar do %>
46 52 <%= button :back, _('Go back'), { :controller => 'profile' } %>
... ... @@ -54,7 +60,8 @@
54 60 <% end %>
55 61 <% end %>
56 62  
57   -<%= hidden_field_tag "current_profile", profile.identifier %>
  63 +<%= hidden_field_tag "profile_url", @profile_members_url %>
  64 +<%= hidden_field_tag "sort", "asc" %>
58 65 </div><!-- fim class="common-profile-list-block" -->
59 66  
60 67 <%= javascript_include_tag "members_page.js" %>
... ...
plugins/people_block/controllers/people_block_plugin_profile_controller.rb
... ... @@ -1,20 +0,0 @@
1   -class PeopleBlockPluginProfileController < ProfileController
2   -
3   - append_view_path File.join(File.dirname(__FILE__) + '/../views')
4   -
5   - def members
6   - if is_cache_expired?(profile.members_cache_key(params))
7   - unless params[:role_key].blank?
8   - role = Role.find_by_key_and_environment_id(params[:role_key], profile.environment)
9   - @members = profile.members.with_role(role.id)
10   - @members_title = role.name
11   - else
12   - @members = profile.members
13   - @members_title = 'members'
14   - end
15   - @members = @members.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members.count)
16   - end
17   - render "people_block_profile/members"
18   - end
19   -
20   -end
plugins/people_block/test/functional/people_block_plugin_profile_controller_test.rb
... ... @@ -1,76 +0,0 @@
1   -require_relative '../test_helper'
2   -require_relative '../../controllers/people_block_plugin_profile_controller'
3   -
4   -
5   -# Re-raise errors caught by the controller.
6   -class PeopleBlockPluginProfileController; def rescue_action(e) raise e end; end
7   -
8   -class PeopleBlockPluginProfileControllerTest < ActionController::TestCase
9   -
10   - def setup
11   - @controller = PeopleBlockPluginProfileController.new
12   - @request = ActionController::TestRequest.new
13   - @response = ActionController::TestResponse.new
14   -
15   - @profile = fast_create(Community)
16   -
17   - @environment = @profile.environment
18   - @environment.enabled_plugins = ['PeopleBlockPlugin']
19   - @environment.save!
20   -
21   - MembersBlock.delete_all
22   - @block = MembersBlock.new
23   - @block.box = @profile.boxes.first
24   - @block.save!
25   -
26   - @admin = create_user('adminprofile').person
27   - @member = create_user('memberprofile').person
28   - @moderator = create_user('moderatorprofile').person
29   - @profile.add_moderator(@moderator)
30   - @profile.add_member(@member)
31   - @profile.add_admin(@admin)
32   - end
33   -
34   - attr_accessor :profile, :block, :admin, :member, :moderator
35   -
36   - should 'list members without role_key' do
37   - get :members, :profile => profile.identifier, :role_key => ""
38   - assert_response :success
39   - assert_template 'members'
40   - assert_equivalent [@admin, @member, @moderator], assigns(:members)
41   - assert_match /adminprofile/, @response.body
42   - assert_match /memberprofile/, @response.body
43   - assert_match /moderatorprofile/, @response.body
44   - end
45   -
46   - should 'list members with role_key=nil' do
47   - get :members, :profile => profile.identifier, :role_key => nil
48   - assert_response :success
49   - assert_template 'members'
50   - assert_equivalent [@admin, @member, @moderator], assigns(:members)
51   - assert_match /adminprofile/, @response.body
52   - assert_match /memberprofile/, @response.body
53   - assert_match /moderatorprofile/, @response.body
54   - end
55   -
56   - should 'list members only' do
57   - get :members, :profile => profile.identifier, :role_key => Profile::Roles.member(profile.environment.id).key
58   - assert_response :success
59   - assert_template 'members'
60   - assert_equal [@member], assigns(:members)
61   - assert_no_match /adminprofile/, @response.body
62   - assert_match /memberprofile/, @response.body
63   - assert_no_match /moderatorprofile/, @response.body
64   - end
65   -
66   - should 'list moderators only' do
67   - get :members, :profile => profile.identifier, :role_key => Profile::Roles.moderator(profile.environment.id).key
68   - assert_response :success
69   - assert_template 'members'
70   - assert_equal [@moderator], assigns(:members)
71   - assert_no_match /adminprofile/, @response.body
72   - assert_no_match /memberprofile/, @response.body
73   - assert_match /moderatorprofile/, @response.body
74   - end
75   -
76   -end
plugins/people_block/views/blocks/members.html.erb
1   -<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'people_block_plugin_profile', :action => 'members', :role_key => role_key}, :class => 'view-all' %>
  1 +<% anchor = role_key == "profile_admin" ? "admins-tab" : "members-tab" %>
  2 +<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'members', :anchor =>anchor }, :class => 'view-all' %>
2 3  
3 4 <% if show_join_leave_button %>
4 5 <%= render :partial => 'blocks/profile_info_actions/join_leave_community' %>
... ...
plugins/people_block/views/people_block_profile/members.html.erb
... ... @@ -1,29 +0,0 @@
1   -<div class="common-profile-list-block">
2   -
3   -<h1><%= _("%s's members") % profile.name %></h1>
4   -
5   -<% cache_timeout(profile.members_cache_key(params), 4.hours) do %>
6   - <ul class='profile-list'>
7   - <% @members.each do |member| %>
8   - <%= profile_image_link(member) %>
9   - <% end %>
10   - </ul>
11   -
12   - <div id='pagination-profiles'>
13   - <%= pagination_links @members, :param_name => 'npage' %>
14   - </div>
15   -<% end %>
16   -
17   -<% button_bar do %>
18   - <%= button :back, _('Go back'), { :controller => 'profile' } %>
19   - <% if profile.community? and user %>
20   - <% if user.has_permission?(:invite_members, profile) %>
21   - <%= button :person, _('Invite people to join'), :controller => 'invite', :action => 'invite_friends' %>
22   - <% end %>
23   - <% if user.has_permission?(:send_mail_to_members, profile) %>
24   - <%= button :send, _('Send e-mail to members'), :controller => 'profile', :action => 'send_mail' %>
25   - <% end %>
26   - <% end %>
27   -<% end %>
28   -
29   -</div><!-- fim class="common-profile-list-block" -->
30 0 \ No newline at end of file
public/javascripts/members_page.js
... ... @@ -2,17 +2,18 @@
2 2 "use strict";
3 3  
4 4 function set_members_sort() {
5   - var page_profile = $("#current_profile").val();
6   - var members_url = noosfero_root() + "/profile/" + page_profile + "/members";
  5 + var profile_members_url = $("#profile_url").val();
7 6  
8   - $("#sort").on("change", function() {
  7 + $("#sort-members, #sort-admins").on("change", function() {
9 8 var sort_value = this.value;
10   - var actual_page_content = $(".common-profile-list-block");
  9 + var role = this.id;
  10 + role = role.replace("sort-", '');
  11 + var actual_page_content = $(".profile-list-"+role);
11 12  
12   - $.get(members_url, {sort: sort_value}, function(response) {
  13 + $.get(profile_members_url, {sort: sort_value}, function(response) {
13 14 var html_response = $(response);
14 15  
15   - actual_page_content.html(html_response.html());
  16 + actual_page_content.html(html_response.find(".profile-list-"+role).html());
16 17 set_members_sort();
17 18 });
18 19 });
... ...
public/stylesheets/application.css
... ... @@ -4787,6 +4787,11 @@ h1#agenda-title {
4787 4787 background-image: url(../images/control-panel/role-management.gif)
4788 4788 }
4789 4789 /* ==> public/stylesheets/controller_profile_members.css <== */
  4790 +
  4791 +.profile-members-tabs-container .ui-corner-all {
  4792 + overflow: auto;
  4793 +}
  4794 +
4790 4795 .controller-profile_members .no-boxes {
4791 4796 margin: 30px
4792 4797 }
... ...