Commit 8f571a5e74cc2e9f92f57a7e44ac8bb2455a616c
Committed by
Daniela Feitosa
1 parent
86fab629
Exists in
master
and in
29 other branches
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>
Showing
12 changed files
with
200 additions
and
113 deletions
Show diff stats
app/controllers/public/profile_controller.rb
@@ -66,7 +66,10 @@ class ProfileController < PublicController | @@ -66,7 +66,10 @@ class ProfileController < PublicController | ||
66 | 66 | ||
67 | def members | 67 | def members |
68 | if is_cache_expired?(profile.members_cache_key(params)) | 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 | end | 73 | end |
71 | end | 74 | end |
72 | 75 |
app/models/profile.rb
@@ -913,7 +913,8 @@ private :generate_url, :url_options | @@ -913,7 +913,8 @@ private :generate_url, :url_options | ||
913 | 913 | ||
914 | def members_cache_key(params = {}) | 914 | def members_cache_key(params = {}) |
915 | page = params[:npage] || '1' | 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 | end | 918 | end |
918 | 919 | ||
919 | def more_recent_label | 920 | def more_recent_label |
@@ -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
1 | <div class="common-profile-list-block"> | 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 | <% cache_timeout(profile.members_cache_key(params), 4.hours) do %> | 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 | <% end %> | 46 | <% end %> |
16 | 47 | ||
17 | <% button_bar do %> | 48 | <% button_bar do %> |
@@ -26,4 +57,8 @@ | @@ -26,4 +57,8 @@ | ||
26 | <% end %> | 57 | <% end %> |
27 | <% end %> | 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,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,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 < ActionView::TestCase | @@ -147,11 +147,11 @@ class MembersBlockTest < ActionView::TestCase | ||
147 | 147 | ||
148 | instance_eval(&block.footer) | 148 | instance_eval(&block.footer) |
149 | assert_select 'a.view-all' do |elements| | 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 | end | 151 | end |
152 | end | 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 | profile = create_user('mytestuser').person | 155 | profile = create_user('mytestuser').person |
156 | block = MembersBlock.new | 156 | block = MembersBlock.new |
157 | block.box = profile.boxes.first | 157 | block.box = profile.boxes.first |
@@ -160,7 +160,33 @@ class MembersBlockTest < ActionView::TestCase | @@ -160,7 +160,33 @@ class MembersBlockTest < ActionView::TestCase | ||
160 | 160 | ||
161 | instance_eval(&block.footer) | 161 | instance_eval(&block.footer) |
162 | assert_select 'a.view-all' do |elements| | 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 | end | 190 | end |
165 | end | 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 | <% 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' %> |
public/designs/themes/base/style.scss
@@ -231,6 +231,10 @@ body, th, td, input { | @@ -231,6 +231,10 @@ body, th, td, input { | ||
231 | border-left: 0px; | 231 | border-left: 0px; |
232 | } | 232 | } |
233 | 233 | ||
234 | +.menu-submenu-list>li{ | ||
235 | + width: 100%; | ||
236 | +} | ||
237 | + | ||
234 | #navigation .menu-submenu ul{ | 238 | #navigation .menu-submenu ul{ |
235 | border: 1px solid #888a85; | 239 | border: 1px solid #888a85; |
236 | border-top: 0px; | 240 | border-top: 0px; |
@@ -1534,3 +1538,7 @@ table#recaptcha_table tr:hover td { | @@ -1534,3 +1538,7 @@ table#recaptcha_table tr:hover td { | ||
1534 | width: 494px; | 1538 | width: 494px; |
1535 | padding-left: 2px; | 1539 | padding-left: 2px; |
1536 | } | 1540 | } |
1541 | + | ||
1542 | +.profile-members-title-sort { | ||
1543 | + clear: both; | ||
1544 | +} |
@@ -0,0 +1,24 @@ | @@ -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,6 +4775,11 @@ h1#agenda-title { | ||
4775 | background-image: url(../images/control-panel/role-management.gif) | 4775 | background-image: url(../images/control-panel/role-management.gif) |
4776 | } | 4776 | } |
4777 | /* ==> public/stylesheets/controller_profile_members.css <== */ | 4777 | /* ==> public/stylesheets/controller_profile_members.css <== */ |
4778 | + | ||
4779 | +.profile-members-tabs-container .ui-corner-all { | ||
4780 | + overflow: auto; | ||
4781 | +} | ||
4782 | + | ||
4778 | .controller-profile_members .no-boxes { | 4783 | .controller-profile_members .no-boxes { |
4779 | margin: 30px | 4784 | margin: 30px |
4780 | } | 4785 | } |
@@ -5430,6 +5435,7 @@ h1#agenda-title { | @@ -5430,6 +5435,7 @@ h1#agenda-title { | ||
5430 | margin: 0; | 5435 | margin: 0; |
5431 | padding: 0; | 5436 | padding: 0; |
5432 | width: 100%; | 5437 | width: 100%; |
5438 | + height: 92px; | ||
5433 | } | 5439 | } |
5434 | #content .menu-submenu-content ul { | 5440 | #content .menu-submenu-content ul { |
5435 | margin: 0; | 5441 | margin: 0; |
test/functional/profile_controller_test.rb
@@ -55,7 +55,8 @@ class ProfileControllerTest < ActionController::TestCase | @@ -55,7 +55,8 @@ class ProfileControllerTest < ActionController::TestCase | ||
55 | 55 | ||
56 | assert_response :success | 56 | assert_response :success |
57 | assert_template 'members' | 57 | assert_template 'members' |
58 | - assert assigns(:members) | 58 | + assert assigns(:profile_members) |
59 | + assert assigns(:profile_admins) | ||
59 | end | 60 | end |
60 | 61 | ||
61 | should 'list favorite enterprises' do | 62 | should 'list favorite enterprises' do |
@@ -1747,4 +1748,68 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1747,4 +1748,68 @@ class ProfileControllerTest < ActionController::TestCase | ||
1747 | assert_no_tag :tag => 'td', :descendant => { :tag => 'a', :content => /#{person.enterprises.count}/, :attributes => { :href => /profile\/#{person.identifier}\/enterprises$/ }} | 1748 | assert_no_tag :tag => 'td', :descendant => { :tag => 'a', :content => /#{person.enterprises.count}/, :attributes => { :href => /profile\/#{person.identifier}\/enterprises$/ }} |
1748 | end | 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 | end | 1815 | end |