Commit 8f571a5e74cc2e9f92f57a7e44ac8bb2455a616c

Authored by Omar Junior
Committed by Daniela Feitosa
1 parent 86fab629

Split members page in admins and non-admins

  - Order members by name
  - Removed white spaces
  - Changed strings to be translated
  - Renamed div id and test
  - Adjust ul tag members
  - Fixed plugin dependency

Signed-off-by: Omar Junior <omarroinuj@gmail.com>
Signed-off-by: DylanGuedes <djmgguedes@gmail.com>
Signed-off-by: Vitor Barbosa <vitormga15@gmail.com>
Signed-off-by: Brenddon Gontijo <brenddongontijo@msn.com>
Signed-off-by: Tallys Martins <tallysmartins@yahoo.com.br>
Signed-off-by: Simiao Carvalho <simiaosimis@gmail.com>
app/controllers/public/profile_controller.rb
... ... @@ -66,7 +66,10 @@ class ProfileController &lt; PublicController
66 66  
67 67 def members
68 68 if is_cache_expired?(profile.members_cache_key(params))
69   - @members = profile.members_by_name.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => profile.members.count)
  69 + sort = (params[:sort] == 'desc') ? params[:sort] : 'asc'
  70 + @profile_admins = profile.admins.order("name #{sort}").paginate(:per_page => members_per_page, :page => params[:npage])
  71 + @profile_members = profile.members.order("name #{sort}").paginate(:per_page => members_per_page, :page => params[:npage])
  72 + @profile_members_url = url_for(:controller => 'profile', :action => 'members')
70 73 end
71 74 end
72 75  
... ...
app/models/profile.rb
... ... @@ -913,7 +913,8 @@ private :generate_url, :url_options
913 913  
914 914 def members_cache_key(params = {})
915 915 page = params[:npage] || '1'
916   - cache_key + '-members-page-' + page
  916 + sort = (params[:sort] == 'desc') ? params[:sort] : 'asc'
  917 + cache_key + '-members-page-' + page + '-' + sort
917 918 end
918 919  
919 920 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
1 1 <div class="common-profile-list-block">
2 2  
3   -<h1><%= _("%s's members") % profile.name %></h1>
  3 +<h1><%= _("Members (%d)") % @profile_members.total_entries %></h1>
  4 +<h2 class="community-name"><%= profile.name %></h2>
4 5  
5 6 <% 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>
  7 + <div class="profile-members-tabs-container">
  8 + <% tabs = [] %>
  9 +
  10 + <% div_members = content_tag :div, :class => "profile-members" do
  11 + render :partial => 'profile_members_list',
  12 + :locals => {
  13 + :users => @profile_members,
  14 + :role => "members"
  15 + }
  16 + end %>
  17 +
  18 + <% members_pagination = content_tag :div, :class => "pagination-profile-members" do
  19 + pagination_links @profile_members, :param_name => 'npage'
  20 + end %>
  21 +
  22 + <% tabs << {:title => _("%d Members") % @profile_members.size,
  23 + :id => "members-tab",
  24 + :content => (div_members + members_pagination)
  25 + } %>
11 26  
12   - <div id='pagination-profiles'>
13   - <%= pagination_links @members, :param_name => 'npage' %>
14   - </div>
  27 + <% div_admins = content_tag :div, :class => "profile-admins" do
  28 + render :partial => 'profile_members_list',
  29 + :locals => {
  30 + :users => @profile_admins,
  31 + :role => "admins"
  32 + }
  33 + end %>
  34 +
  35 + <% admins_pagination = content_tag :div, :class => "pagination-profile-admins" do
  36 + pagination_links @profile_admins, :param_name => 'npage'
  37 + end %>
  38 +
  39 + <% tabs << {:title => _("%d Administrators") % @profile_admins.size,
  40 + :id => "admins-tab",
  41 + :content => (div_admins+admins_pagination)
  42 + } %>
  43 +
  44 + <%= render_tabs(tabs) %>
  45 + </div><!-- end of class="profile-members-tabs-container" -->
15 46 <% end %>
16 47  
17 48 <% button_bar do %>
... ... @@ -26,4 +57,8 @@
26 57 <% end %>
27 58 <% end %>
28 59  
29   -</div><!-- fim class="common-profile-list-block" -->
  60 +<%= hidden_field_tag "profile_url", @profile_members_url %>
  61 +<%= hidden_field_tag "sort", "asc" %>
  62 +</div><!-- end of class="common-profile-list-block" -->
  63 +
  64 +<%= 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 "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/test/unit/members_block_test.rb
... ... @@ -147,11 +147,11 @@ class MembersBlockTest &lt; ActionView::TestCase
147 147  
148 148 instance_eval(&block.footer)
149 149 assert_select 'a.view-all' do |elements|
150   - assert_select '[href=/profile/mytestuser/plugin/people_block/members]'
  150 + assert_select "[href=/profile/mytestuser/members#members-tab]"
151 151 end
152 152 end
153 153  
154   - should 'provide link to members page with a selected role' do
  154 + should 'provide link to members page when visible_role is profile_member' do
155 155 profile = create_user('mytestuser').person
156 156 block = MembersBlock.new
157 157 block.box = profile.boxes.first
... ... @@ -160,7 +160,33 @@ class MembersBlockTest &lt; ActionView::TestCase
160 160  
161 161 instance_eval(&block.footer)
162 162 assert_select 'a.view-all' do |elements|
163   - assert_select '[href=/profile/mytestuser/plugin/people_block/members?role_key=profile_member]'
  163 + assert_select '[href=/profile/mytestuser/members#members-tab]'
  164 + end
  165 + end
  166 +
  167 + should 'provide link to members page when visible_role is profile_moderator' do
  168 + profile = create_user('mytestuser').person
  169 + block = MembersBlock.new
  170 + block.box = profile.boxes.first
  171 + block.visible_role = 'profile_moderator'
  172 + block.save!
  173 +
  174 + instance_eval(&block.footer)
  175 + assert_select 'a.view-all' do |elements|
  176 + assert_select '[href=/profile/mytestuser/members#members-tab]'
  177 + end
  178 + end
  179 +
  180 + should 'provide link to admins page when visible_role is profile_admin' do
  181 + profile = create_user('mytestuser').person
  182 + block = MembersBlock.new
  183 + block.box = profile.boxes.first
  184 + block.visible_role = 'profile_admin'
  185 + block.save!
  186 +
  187 + instance_eval(&block.footer)
  188 + assert_select 'a.view-all' do |elements|
  189 + assert_select '[href=/profile/mytestuser/members#admins-tab]'
164 190 end
165 191 end
166 192  
... ...
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' %>
... ...
public/designs/themes/base/style.scss
... ... @@ -231,6 +231,10 @@ body, th, td, input {
231 231 border-left: 0px;
232 232 }
233 233  
  234 +.menu-submenu-list>li{
  235 + width: 100%;
  236 +}
  237 +
234 238 #navigation .menu-submenu ul{
235 239 border: 1px solid #888a85;
236 240 border-top: 0px;
... ... @@ -1534,3 +1538,7 @@ table#recaptcha_table tr:hover td {
1534 1538 width: 494px;
1535 1539 padding-left: 2px;
1536 1540 }
  1541 +
  1542 +.profile-members-title-sort {
  1543 + clear: both;
  1544 +}
... ...
public/javascripts/members_page.js 0 → 100644
... ... @@ -0,0 +1,24 @@
  1 +(function($) {
  2 + "use strict";
  3 +
  4 + function set_members_sort() {
  5 + var profile_members_url = $("#profile_url").val();
  6 +
  7 + $("#sort-members, #sort-admins").on("change", function() {
  8 + var sort_value = this.value;
  9 + var role = this.id;
  10 + role = role.replace("sort-", '');
  11 + var actual_page_content = $(".profile-list-"+role);
  12 +
  13 + $.get(profile_members_url, {sort: sort_value}, function(response) {
  14 + var html_response = $(response);
  15 +
  16 + actual_page_content.html(html_response.find(".profile-list-"+role).html());
  17 + });
  18 + });
  19 + }
  20 +
  21 + $(document).ready(function() {
  22 + set_members_sort();
  23 + });
  24 +}) (jQuery);
... ...
public/stylesheets/application.css
... ... @@ -4775,6 +4775,11 @@ h1#agenda-title {
4775 4775 background-image: url(../images/control-panel/role-management.gif)
4776 4776 }
4777 4777 /* ==> public/stylesheets/controller_profile_members.css <== */
  4778 +
  4779 +.profile-members-tabs-container .ui-corner-all {
  4780 + overflow: auto;
  4781 +}
  4782 +
4778 4783 .controller-profile_members .no-boxes {
4779 4784 margin: 30px
4780 4785 }
... ... @@ -5430,6 +5435,7 @@ h1#agenda-title {
5430 5435 margin: 0;
5431 5436 padding: 0;
5432 5437 width: 100%;
  5438 + height: 92px;
5433 5439 }
5434 5440 #content .menu-submenu-content ul {
5435 5441 margin: 0;
... ...
test/functional/profile_controller_test.rb
... ... @@ -55,7 +55,8 @@ class ProfileControllerTest &lt; ActionController::TestCase
55 55  
56 56 assert_response :success
57 57 assert_template 'members'
58   - assert assigns(:members)
  58 + assert assigns(:profile_members)
  59 + assert assigns(:profile_admins)
59 60 end
60 61  
61 62 should 'list favorite enterprises' do
... ... @@ -1747,4 +1748,68 @@ class ProfileControllerTest &lt; ActionController::TestCase
1747 1748 assert_no_tag :tag => 'td', :descendant => { :tag => 'a', :content => /#{person.enterprises.count}/, :attributes => { :href => /profile\/#{person.identifier}\/enterprises$/ }}
1748 1749 end
1749 1750  
  1751 + should 'admins from a community be present in admin users div and members div' do
  1752 + community = fast_create(Community)
  1753 + another_user = create_user('another_user').person
  1754 +
  1755 + login_as(@profile.identifier)
  1756 +
  1757 + community.add_admin(@profile)
  1758 +
  1759 + assert community.admins.include? @profile
  1760 + get :members, :profile => community.identifier
  1761 +
  1762 + assert_tag :tag => 'ul', :attributes => { :class => /profile-list-admins/},
  1763 + :descendant => { :tag => 'a', :attributes => { :title => "testuser" } }
  1764 +
  1765 + assert_tag :tag => 'ul', :attributes => { :class => /profile-list-members/},
  1766 + :descendant => { :tag => 'a', :attributes => { :title => "testuser" } }
  1767 + end
  1768 +
  1769 + should 'all members, except admins, be present in members div' do
  1770 + community = fast_create(Community)
  1771 + community.add_member(@profile)
  1772 +
  1773 + another_user = create_user('another_user').person
  1774 + community.add_member(another_user)
  1775 +
  1776 + assert_equal false, community.admins.include?(another_user)
  1777 +
  1778 + get :members, :profile => community.identifier
  1779 +
  1780 + assert_tag :tag => 'ul', :attributes => { :class => /profile-list-members/},
  1781 + :descendant => { :tag => 'a', :attributes => { :title => "another_user" } }
  1782 +
  1783 + assert_no_tag :tag => 'ul', :attributes => { :class => /profile-list-admins/},
  1784 + :descendant => { :tag => 'a', :attributes => { :title => "another_user" } }
  1785 + end
  1786 +
  1787 + should 'members be sorted by name in ascendant order' do
  1788 + community = fast_create(Community)
  1789 + another_user = create_user('another_user').person
  1790 + different_user = create_user('different_user').person
  1791 +
  1792 + community.add_member(@profile)
  1793 + community.add_member(another_user)
  1794 + community.add_member(different_user)
  1795 +
  1796 + get :members, :profile => community.identifier, :sort => "asc"
  1797 +
  1798 + assert @response.body.index("another_user") < @response.body.index("different_user")
  1799 + end
  1800 +
  1801 + should 'members be sorted by name in descendant order' do
  1802 + community = fast_create(Community)
  1803 + another_user = create_user('another_user').person
  1804 + different_user = create_user('different_user').person
  1805 +
  1806 + community.add_member(@profile)
  1807 + community.add_member(another_user)
  1808 + community.add_member(different_user)
  1809 +
  1810 + get :members, :profile => community.identifier, :sort => "desc"
  1811 +
  1812 + assert @response.body.index("another_user") > @response.body.index("different_user")
  1813 + end
  1814 +
1750 1815 end
... ...