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]) + ) %> +
+ 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 @@

<%= _("%s") % profile.name %>

<% 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") %>

- -
- -
-

<%= "#{@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]) - ) %> -
-
- -
- -
- -
- <%= pagination_links @members_except_admins, :param_name => 'npage' %> -
-<% 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 %> - - -
- <%= pagination_links @members, :param_name => 'npage' %> -
-<% 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