Commit ece9470c594d2bff7b1496c25e7ae98d2de536cb
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>
Showing
10 changed files
with
82 additions
and
175 deletions
Show diff stats
app/controllers/public/profile_controller.rb
... | ... | @@ -70,12 +70,12 @@ class ProfileController < 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 | ... | ... |
... | ... | @@ -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 | } | ... | ... |