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 | 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 | ... | ... |
... | ... | @@ -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 < 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 < 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 | +} | ... | ... |
... | ... | @@ -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 < 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 < 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 | ... | ... |