diff --git a/app/controllers/public/profile_controller.rb b/app/controllers/public/profile_controller.rb
index a0abf98..611aee4 100644
--- a/app/controllers/public/profile_controller.rb
+++ b/app/controllers/public/profile_controller.rb
@@ -70,12 +70,12 @@ class ProfileController < PublicController
else
profile.members.order("name asc")
end
-
@profile_admins = profile.admins
- @total_members = all_members.count
- @members_except_admins = all_members - @profile_admins
- @members_count = @members_except_admins.count
- @members_except_admins = @members_except_admins.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members_count)
+ @profile_members = all_members - @profile_admins
+ @profile_members = @profile_members.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @profile_members.size)
+ @profile_admins = @profile_admins.paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @profile_admins.size)
+ @total_members = all_members.size
+ @profile_members_url = url_for(:controller => "profile", :action => "members")
end
end
diff --git a/app/models/profile.rb b/app/models/profile.rb
index 7c5a0e9..9d30d2c 100644
--- a/app/models/profile.rb
+++ b/app/models/profile.rb
@@ -898,7 +898,11 @@ private :generate_url, :url_options
def members_cache_key(params = {})
page = params[:npage] || '1'
- cache_key + '-members-page-' + page
+ if params[:sort] and params[:sort].downcase == "desc"
+ cache_key + '-members-page-' + page + "desc"
+ else
+ cache_key + '-members-page-' + page + "asc"
+ end
end
def more_recent_label
diff --git a/app/views/profile/_profile_members_list.html.erb b/app/views/profile/_profile_members_list.html.erb
new file mode 100644
index 0000000..0e6c700
--- /dev/null
+++ b/app/views/profile/_profile_members_list.html.erb
@@ -0,0 +1,14 @@
+
+ <%= label_tag("sort-#{role}", _("Sort by:")) %>
+ <%= select_tag("sort-#{role}",
+ options_for_select([
+ [_("Name A-Z"), 'asc'],
+ [_("Name Z-A"), 'desc'],
+ ], :selected=>params[:sort])
+ ) %>
+
+
+ <% users.each do |u| %>
+ <%= profile_image_link(u) %>
+ <% end %>
+
diff --git a/app/views/profile/members.html.erb b/app/views/profile/members.html.erb
index 4c4fab8..8fe5478 100644
--- a/app/views/profile/members.html.erb
+++ b/app/views/profile/members.html.erb
@@ -4,43 +4,49 @@
<% cache_timeout(profile.members_cache_key(params), 4.hours) do %>
+
+ <% tabs = [] %>
+ <% div_admins = content_tag :div, :class => "profile-admins" do
+ render :partial => 'profile_members_list',
+ :locals => {
+ :users => @profile_admins,
+ :role => "admins"
+ }
+ end %>
+
+ <% admins_pagination = content_tag :div, :class => "pagination-profile-admins" do
+ pagination_links @profile_admins, :param_name => 'npage'
+ end %>
+
+ <% tabs << {:title => "#{@profile_admins.size} "+_("Administrators"),
+ :id => "admins-tab",
+ :content => (div_admins+admins_pagination)
+ } %>
+
+
+ <% div_members = content_tag :div, :class => "profile-members" do
+ render :partial => 'profile_members_list',
+ :locals => {
+ :users => @profile_members,
+ :role => "members"
+ }
+
+ end %>
+
+ <% members_pagination = content_tag :div, :class => "pagination-profile-members" do
+ pagination_links @profile_members, :param_name => 'npage'
+ end %>
+
+
+ <% tabs << {:title => "#{@profile_members.size} "+_("Members"),
+ :id => "members-tab",
+ :content => (div_members + members_pagination)
+ } %>
+
+ <%= render_tabs(tabs) %>
+ <% end %>
+
-
-
<%= "#{@profile_admins.count} "+_("admins") %>
-
- <% @profile_admins.each do |admin| %>
- <%= profile_image_link(admin) %>
- <% end %>
-
-
-
-
-
<%= "#{@members_count} "+ _("members") %>
-
-
- <%= label_tag("sort", _("Sort by:")) %>
- <%= select_tag("sort",
- options_for_select(
- [
- [_("Name A-Z"), 'asc'],
- [_("Name Z-A"), 'desc'],
- ], :selected=>params[:sort])
- ) %>
-
-
-
-
-
- <% @members_except_admins.each do |member| %>
- <%= profile_image_link(member) %>
- <% end %>
-
-
-
-
-<% end %>
<% button_bar do %>
<%= button :back, _('Go back'), { :controller => 'profile' } %>
@@ -54,7 +60,8 @@
<% end %>
<% end %>
-<%= hidden_field_tag "current_profile", profile.identifier %>
+<%= hidden_field_tag "profile_url", @profile_members_url %>
+<%= hidden_field_tag "sort", "asc" %>
<%= javascript_include_tag "members_page.js" %>
diff --git a/plugins/people_block/controllers/people_block_plugin_profile_controller.rb b/plugins/people_block/controllers/people_block_plugin_profile_controller.rb
deleted file mode 100644
index 8f608c3..0000000
--- a/plugins/people_block/controllers/people_block_plugin_profile_controller.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class PeopleBlockPluginProfileController < ProfileController
-
- append_view_path File.join(File.dirname(__FILE__) + '/../views')
-
- def members
- if is_cache_expired?(profile.members_cache_key(params))
- unless params[:role_key].blank?
- role = Role.find_by_key_and_environment_id(params[:role_key], profile.environment)
- @members = profile.members.with_role(role.id)
- @members_title = role.name
- else
- @members = profile.members
- @members_title = 'members'
- end
- @members = @members.includes(relations_to_include).paginate(:per_page => members_per_page, :page => params[:npage], :total_entries => @members.count)
- end
- render "people_block_profile/members"
- end
-
-end
diff --git a/plugins/people_block/test/functional/people_block_plugin_profile_controller_test.rb b/plugins/people_block/test/functional/people_block_plugin_profile_controller_test.rb
deleted file mode 100644
index 4014672..0000000
--- a/plugins/people_block/test/functional/people_block_plugin_profile_controller_test.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require_relative '../test_helper'
-require_relative '../../controllers/people_block_plugin_profile_controller'
-
-
-# Re-raise errors caught by the controller.
-class PeopleBlockPluginProfileController; def rescue_action(e) raise e end; end
-
-class PeopleBlockPluginProfileControllerTest < ActionController::TestCase
-
- def setup
- @controller = PeopleBlockPluginProfileController.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
-
- @profile = fast_create(Community)
-
- @environment = @profile.environment
- @environment.enabled_plugins = ['PeopleBlockPlugin']
- @environment.save!
-
- MembersBlock.delete_all
- @block = MembersBlock.new
- @block.box = @profile.boxes.first
- @block.save!
-
- @admin = create_user('adminprofile').person
- @member = create_user('memberprofile').person
- @moderator = create_user('moderatorprofile').person
- @profile.add_moderator(@moderator)
- @profile.add_member(@member)
- @profile.add_admin(@admin)
- end
-
- attr_accessor :profile, :block, :admin, :member, :moderator
-
- should 'list members without role_key' do
- get :members, :profile => profile.identifier, :role_key => ""
- assert_response :success
- assert_template 'members'
- assert_equivalent [@admin, @member, @moderator], assigns(:members)
- assert_match /adminprofile/, @response.body
- assert_match /memberprofile/, @response.body
- assert_match /moderatorprofile/, @response.body
- end
-
- should 'list members with role_key=nil' do
- get :members, :profile => profile.identifier, :role_key => nil
- assert_response :success
- assert_template 'members'
- assert_equivalent [@admin, @member, @moderator], assigns(:members)
- assert_match /adminprofile/, @response.body
- assert_match /memberprofile/, @response.body
- assert_match /moderatorprofile/, @response.body
- end
-
- should 'list members only' do
- get :members, :profile => profile.identifier, :role_key => Profile::Roles.member(profile.environment.id).key
- assert_response :success
- assert_template 'members'
- assert_equal [@member], assigns(:members)
- assert_no_match /adminprofile/, @response.body
- assert_match /memberprofile/, @response.body
- assert_no_match /moderatorprofile/, @response.body
- end
-
- should 'list moderators only' do
- get :members, :profile => profile.identifier, :role_key => Profile::Roles.moderator(profile.environment.id).key
- assert_response :success
- assert_template 'members'
- assert_equal [@moderator], assigns(:members)
- assert_no_match /adminprofile/, @response.body
- assert_no_match /memberprofile/, @response.body
- assert_match /moderatorprofile/, @response.body
- end
-
-end
diff --git a/plugins/people_block/views/blocks/members.html.erb b/plugins/people_block/views/blocks/members.html.erb
index 5881147..89ed71b 100644
--- a/plugins/people_block/views/blocks/members.html.erb
+++ b/plugins/people_block/views/blocks/members.html.erb
@@ -1,4 +1,5 @@
-<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'people_block_plugin_profile', :action => 'members', :role_key => role_key}, :class => 'view-all' %>
+<% anchor = role_key == "profile_admin" ? "admins-tab" : "members-tab" %>
+<%= link_to c_('View all'), {:profile => profile.identifier, :controller => 'profile', :action => 'members', :anchor =>anchor }, :class => 'view-all' %>
<% if show_join_leave_button %>
<%= render :partial => 'blocks/profile_info_actions/join_leave_community' %>
diff --git a/plugins/people_block/views/people_block_profile/members.html.erb b/plugins/people_block/views/people_block_profile/members.html.erb
deleted file mode 100644
index fd0c390..0000000
--- a/plugins/people_block/views/people_block_profile/members.html.erb
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
<%= _("%s's members") % profile.name %>
-
-<% cache_timeout(profile.members_cache_key(params), 4.hours) do %>
-
- <% @members.each do |member| %>
- <%= profile_image_link(member) %>
- <% end %>
-
-
-
-<% end %>
-
-<% button_bar do %>
- <%= button :back, _('Go back'), { :controller => 'profile' } %>
- <% if profile.community? and user %>
- <% if user.has_permission?(:invite_members, profile) %>
- <%= button :person, _('Invite people to join'), :controller => 'invite', :action => 'invite_friends' %>
- <% end %>
- <% if user.has_permission?(:send_mail_to_members, profile) %>
- <%= button :send, _('Send e-mail to members'), :controller => 'profile', :action => 'send_mail' %>
- <% end %>
- <% end %>
-<% end %>
-
-
\ No newline at end of file
diff --git a/public/javascripts/members_page.js b/public/javascripts/members_page.js
index 2ea43ca..1fb87a6 100644
--- a/public/javascripts/members_page.js
+++ b/public/javascripts/members_page.js
@@ -2,17 +2,18 @@
"use strict";
function set_members_sort() {
- var page_profile = $("#current_profile").val();
- var members_url = noosfero_root() + "/profile/" + page_profile + "/members";
+ var profile_members_url = $("#profile_url").val();
- $("#sort").on("change", function() {
+ $("#sort-members, #sort-admins").on("change", function() {
var sort_value = this.value;
- var actual_page_content = $(".common-profile-list-block");
+ var role = this.id;
+ role = role.replace("sort-", '');
+ var actual_page_content = $(".profile-list-"+role);
- $.get(members_url, {sort: sort_value}, function(response) {
+ $.get(profile_members_url, {sort: sort_value}, function(response) {
var html_response = $(response);
- actual_page_content.html(html_response.html());
+ actual_page_content.html(html_response.find(".profile-list-"+role).html());
set_members_sort();
});
});
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 4c18991..98b28f6 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -4787,6 +4787,11 @@ h1#agenda-title {
background-image: url(../images/control-panel/role-management.gif)
}
/* ==> public/stylesheets/controller_profile_members.css <== */
+
+.profile-members-tabs-container .ui-corner-all {
+ overflow: auto;
+}
+
.controller-profile_members .no-boxes {
margin: 30px
}
--
libgit2 0.21.2