Commit fd65e2c1473333575a743558654dc2061d5165d2

Authored by Omar Junior
Committed by André Guedes
1 parent a08b3fc4

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>
app/controllers/public/profile_controller.rb
@@ -65,8 +65,19 @@ class ProfileController &lt; PublicController @@ -65,8 +65,19 @@ class ProfileController &lt; PublicController
65 65
66 def members 66 def members
67 if is_cache_expired?(profile.members_cache_key(params)) 67 if is_cache_expired?(profile.members_cache_key(params))
68 - @members = profile.members_by_name.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => profile.members.count) 68 + all_members = if params[:sort] and params[:sort] == "desc"
  69 + profile.members.order("name desc")
  70 + else
  71 + profile.members.order("name asc")
  72 + end
  73 +
  74 + @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)
69 end 79 end
  80 +
70 end 81 end
71 82
72 def fans 83 def fans
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") + " (#{@total_members})" %></h1>
  4 +<h3 class="community-name-members"><%= _("%s") % profile.name %></h3>
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 +
  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>
11 39
12 <div id='pagination-profiles'> 40 <div id='pagination-profiles'>
13 - <%= pagination_links @members, :param_name => 'npage' %> 41 + <%= pagination_links @members_except_admins, :param_name => 'npage' %>
14 </div> 42 </div>
15 <% end %> 43 <% end %>
16 44
@@ -26,4 +54,7 @@ @@ -26,4 +54,7 @@
26 <% end %> 54 <% end %>
27 <% end %> 55 <% end %>
28 56
  57 +<%= hidden_field_tag "current_profile", profile.identifier %>
29 </div><!-- fim class="common-profile-list-block" --> 58 </div><!-- fim class="common-profile-list-block" -->
  59 +
  60 +<%= javascript_include_tag "members_page.js" %>
plugins/people_block/controllers/people_block_plugin_profile_controller.rb
@@ -14,7 +14,7 @@ class PeopleBlockPluginProfileController &lt; ProfileController @@ -14,7 +14,7 @@ class PeopleBlockPluginProfileController &lt; ProfileController
14 end 14 end
15 @members = @members.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members.count) 15 @members = @members.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members.count)
16 end 16 end
17 - render "profile/members" 17 + render "people_block_profile/members"
18 end 18 end
19 19
20 end 20 end
plugins/people_block/views/people_block_profile/members.html.erb 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  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" -->
0 \ No newline at end of file 30 \ No newline at end of file
public/designs/themes/base/style.css
@@ -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;
@@ -1530,3 +1534,7 @@ table#recaptcha_table tr:hover td { @@ -1530,3 +1534,7 @@ table#recaptcha_table tr:hover td {
1530 width: 494px; 1534 width: 494px;
1531 padding-left: 2px; 1535 padding-left: 2px;
1532 } 1536 }
  1537 +
  1538 +.profile-members-title-sort {
  1539 + clear: both;
  1540 +}
1533 \ No newline at end of file 1541 \ No newline at end of file
public/javascripts/members_page.js 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +(function($) {
  2 + "use strict";
  3 +
  4 + function set_members_sort() {
  5 + var page_profile = $("#current_profile").val();
  6 + var members_url = noosfero_root() + "/profile/" + page_profile + "/members";
  7 +
  8 + $("#sort").on("change", function() {
  9 + var sort_value = this.value;
  10 + var actual_page_content = $(".common-profile-list-block");
  11 +
  12 + $.get(members_url, {sort: sort_value}, function(response) {
  13 + var html_response = $(response);
  14 +
  15 + actual_page_content.html(html_response.html());
  16 + set_members_sort();
  17 + });
  18 + });
  19 + }
  20 +
  21 + $(document).ready(function() {
  22 + set_members_sort();
  23 + });
  24 +}) (jQuery);
public/stylesheets/application.css
@@ -5442,6 +5442,7 @@ h1#agenda-title { @@ -5442,6 +5442,7 @@ h1#agenda-title {
5442 margin: 0; 5442 margin: 0;
5443 padding: 0; 5443 padding: 0;
5444 width: 100%; 5444 width: 100%;
  5445 + height: 92px;
5445 } 5446 }
5446 #content .menu-submenu-content ul { 5447 #content .menu-submenu-content ul {
5447 margin: 0; 5448 margin: 0;
test/functional/profile_controller_test.rb
@@ -55,7 +55,8 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -55,7 +55,8 @@ class ProfileControllerTest &lt; 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(:members_except_admins)
  59 + assert assigns(:profile_admins)
59 end 60 end
60 61
61 should 'list favorite enterprises' do 62 should 'list favorite enterprises' do
@@ -1748,4 +1749,68 @@ class ProfileControllerTest &lt; ActionController::TestCase @@ -1748,4 +1749,68 @@ class ProfileControllerTest &lt; ActionController::TestCase
1748 assert_no_tag :tag => 'td', :descendant => { :tag => 'a', :content => /#{person.enterprises.count}/, :attributes => { :href => /profile\/#{person.identifier}\/enterprises$/ }} 1749 assert_no_tag :tag => 'td', :descendant => { :tag => 'a', :content => /#{person.enterprises.count}/, :attributes => { :href => /profile\/#{person.identifier}\/enterprises$/ }}
1749 end 1750 end
1750 1751
  1752 + should 'only admins from a community be present in admin users div' do
  1753 + community = fast_create(Community)
  1754 + another_user = create_user('another_user').person
  1755 +
  1756 + login_as(@profile.identifier)
  1757 +
  1758 + community.add_admin(@profile)
  1759 + community.add_member(another_user)
  1760 +
  1761 + get :members, :profile => community.identifier
  1762 +
  1763 + assert_tag :tag => 'div', :attributes => { :class => /profile-admins/},
  1764 + :descendant => { :tag => 'a', :attributes => { :title => "testuser" } }
  1765 +
  1766 + assert_no_tag :tag => 'div', :attributes => { :class => /profile-admins/},
  1767 + :descendant => { :tag => 'a', :attributes => { :title => "another_user" } }
  1768 + end
  1769 +
  1770 + should 'only normal users from a community be present in normal users div' do
  1771 + community = fast_create(Community)
  1772 + another_user = create_user('another_user').person
  1773 +
  1774 + login_as(@profile.identifier)
  1775 +
  1776 + community.add_admin(@profile)
  1777 + community.add_member(another_user)
  1778 +
  1779 + get :members, :profile => community.identifier
  1780 +
  1781 + assert_no_tag :tag => 'div', :attributes => { :class => /profile-members/},
  1782 + :descendant => { :tag => 'a', :attributes => { :title => "testuser" } }
  1783 +
  1784 + assert_tag :tag => 'div', :attributes => { :class => /profile-members/},
  1785 + :descendant => { :tag => 'a', :attributes => { :title => "another_user" } }
  1786 + end
  1787 +
  1788 + should 'members be sorted by name in ascendant order' do
  1789 + community = fast_create(Community)
  1790 + another_user = create_user('another_user').person
  1791 + different_user = create_user('different_user').person
  1792 +
  1793 + community.add_member(@profile)
  1794 + community.add_member(another_user)
  1795 + community.add_member(different_user)
  1796 +
  1797 + get :members, :profile => community.identifier, :sort => "asc"
  1798 +
  1799 + assert @response.body.index("another_user") < @response.body.index("different_user")
  1800 + end
  1801 +
  1802 + should 'members be sorted by name in descendant order' do
  1803 + community = fast_create(Community)
  1804 + another_user = create_user('another_user').person
  1805 + different_user = create_user('different_user').person
  1806 +
  1807 + community.add_member(@profile)
  1808 + community.add_member(another_user)
  1809 + community.add_member(different_user)
  1810 +
  1811 + get :members, :profile => community.identifier, :sort => "desc"
  1812 +
  1813 + assert @response.body.index("another_user") > @response.body.index("different_user")
  1814 + end
  1815 +
1751 end 1816 end