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,12 +70,12 @@ class ProfileController &lt; PublicController
70 else 70 else
71 profile.members.order("name asc") 71 profile.members.order("name asc")
72 end 72 end
73 -  
74 @profile_admins = profile.admins 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 end 79 end
80 80
81 end 81 end
app/models/profile.rb
@@ -898,7 +898,11 @@ private :generate_url, :url_options @@ -898,7 +898,11 @@ private :generate_url, :url_options
898 898
899 def members_cache_key(params = {}) 899 def members_cache_key(params = {})
900 page = params[:npage] || '1' 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 end 906 end
903 907
904 def more_recent_label 908 def more_recent_label
app/views/profile/_profile_members_list.html.erb 0 → 100644
@@ -0,0 +1,14 @@ @@ -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,43 +4,49 @@
4 <h3 class="community-name-members"><%= _("%s") % profile.name %></h3> 4 <h3 class="community-name-members"><%= _("%s") % profile.name %></h3>
5 5
6 <% cache_timeout(profile.members_cache_key(params), 4.hours) do %> 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 <% button_bar do %> 51 <% button_bar do %>
46 <%= button :back, _('Go back'), { :controller => 'profile' } %> 52 <%= button :back, _('Go back'), { :controller => 'profile' } %>
@@ -54,7 +60,8 @@ @@ -54,7 +60,8 @@
54 <% end %> 60 <% end %>
55 <% end %> 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 </div><!-- fim class="common-profile-list-block" --> 65 </div><!-- fim class="common-profile-list-block" -->
59 66
60 <%= javascript_include_tag "members_page.js" %> 67 <%= javascript_include_tag "members_page.js" %>
plugins/people_block/controllers/people_block_plugin_profile_controller.rb
@@ -1,20 +0,0 @@ @@ -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,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 <% if show_join_leave_button %> 4 <% if show_join_leave_button %>
4 <%= render :partial => 'blocks/profile_info_actions/join_leave_community' %> 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,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 \ No newline at end of file 0 \ No newline at end of file
public/javascripts/members_page.js
@@ -2,17 +2,18 @@ @@ -2,17 +2,18 @@
2 "use strict"; 2 "use strict";
3 3
4 function set_members_sort() { 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 var sort_value = this.value; 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 var html_response = $(response); 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 set_members_sort(); 17 set_members_sort();
17 }); 18 });
18 }); 19 });
public/stylesheets/application.css
@@ -4787,6 +4787,11 @@ h1#agenda-title { @@ -4787,6 +4787,11 @@ h1#agenda-title {
4787 background-image: url(../images/control-panel/role-management.gif) 4787 background-image: url(../images/control-panel/role-management.gif)
4788 } 4788 }
4789 /* ==> public/stylesheets/controller_profile_members.css <== */ 4789 /* ==> public/stylesheets/controller_profile_members.css <== */
  4790 +
  4791 +.profile-members-tabs-container .ui-corner-all {
  4792 + overflow: auto;
  4793 +}
  4794 +
4790 .controller-profile_members .no-boxes { 4795 .controller-profile_members .no-boxes {
4791 margin: 30px 4796 margin: 30px
4792 } 4797 }