Commit e5dba6d0f2b73f34c1fd2332295c02084cbb812e
Committed by
Antonio Terceiro
1 parent
a03dc433
Exists in
master
and in
29 other branches
ActionItem989: added pagination and cache to manage_friends
Showing
7 changed files
with
61 additions
and
37 deletions
Show diff stats
app/controllers/my_profile/friends_controller.rb
... | ... | @@ -5,7 +5,9 @@ class FriendsController < MyProfileController |
5 | 5 | protect 'manage_friends', :profile |
6 | 6 | |
7 | 7 | def index |
8 | - @friends = profile.friends | |
8 | + if is_cache_expired?(profile.manage_friends_cache_key(params)) | |
9 | + @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage]) | |
10 | + end | |
9 | 11 | end |
10 | 12 | |
11 | 13 | def add |
... | ... | @@ -23,7 +25,6 @@ class FriendsController < MyProfileController |
23 | 25 | def remove |
24 | 26 | @friend = profile.friends.find(params[:id]) |
25 | 27 | if request.post? && params[:confirmation] |
26 | - expire_fragment(:action => 'friends', :controller => 'profile', :profile => profile.identifier) | |
27 | 28 | profile.remove_friend(@friend) |
28 | 29 | redirect_to :action => 'index' |
29 | 30 | end |
... | ... | @@ -106,4 +107,9 @@ class FriendsController < MyProfileController |
106 | 107 | end |
107 | 108 | end |
108 | 109 | |
110 | + protected | |
111 | + | |
112 | + def per_page | |
113 | + 10 | |
114 | + end | |
109 | 115 | end | ... | ... |
app/helpers/friends_helper.rb
... | ... | @@ -4,4 +4,10 @@ module FriendsHelper |
4 | 4 | options.merge!({:action => 'invite', :import => 1, :wizard => true}) |
5 | 5 | link_to text, options |
6 | 6 | end |
7 | + | |
8 | + def pagination_links(collection, options={}) | |
9 | + options = {:prev_label => '« ' + _('Previous'), :next_label => _('Next') + ' »'}.merge(options) | |
10 | + will_paginate(collection, options) | |
11 | + end | |
12 | + | |
7 | 13 | end | ... | ... |
app/views/friends/index.rhtml
... | ... | @@ -2,47 +2,52 @@ |
2 | 2 | |
3 | 3 | <h1><%= __("%s's friends") % profile.name %></h1> |
4 | 4 | |
5 | -<% if @friends.empty? %> | |
6 | -<p> | |
7 | -<em> | |
8 | - <%= __('You have no friends yet.') %> | |
9 | - <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %> | |
10 | -</em> | |
11 | -</p> | |
12 | -<% else %> | |
13 | - <% button_bar do %> | |
14 | - <%= button(:back, _('Go back'), :controller => 'profile_editor') %> | |
15 | - <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %> | |
16 | - <%= button(:search, _('Invite people from my e-mail contacts'), :action => 'invite') %> | |
5 | +<% cache_timeout(profile.manage_friends_cache_key(params), 4.hours.from_now) do %> | |
6 | + <% if @friends.empty? %> | |
7 | + <p> | |
8 | + <em> | |
9 | + <%= __('You have no friends yet.') %> | |
10 | + <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %> | |
11 | + </em> | |
12 | + </p> | |
13 | + <% else %> | |
14 | + <% button_bar do %> | |
15 | + <%= button(:back, _('Go back'), :controller => 'profile_editor') %> | |
16 | + <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %> | |
17 | + <%= button(:search, _('Invite people from my e-mail contacts'), :action => 'invite') %> | |
18 | + <% end %> | |
17 | 19 | <% end %> |
18 | -<% end %> | |
19 | 20 | |
20 | -<ul class="profile-list"> | |
21 | - <% @friends.each do |friend| %> | |
22 | - <li> | |
23 | - <%= link_to_profile profile_image(friend) + '<br/>' + friend.name, | |
24 | - friend.identifier, :class => 'profile-link' %> | |
25 | - <div class="controll"> | |
26 | - <%= link_to content_tag('span',_('remove')), | |
27 | - { :action => 'remove', :id => friend.id }, | |
28 | - :class => 'button icon-delete', | |
29 | - :title => _('remove'), | |
30 | - :help => __('Clicking on this button will remove your friend relation with %s.') % friend.name %> | |
31 | - <%= link_to content_tag('span',_('contact')), | |
32 | - friend.url.merge(:controller => 'contact', :action => 'new'), | |
33 | - :class => 'button icon-menu-mail', | |
34 | - :title => _('contact'), | |
35 | - :help => __('Clicking on this button will let you send a message to %s.') % friend.name %> | |
36 | - </div><!-- end class="controll" --> | |
37 | - </li> | |
38 | - <% end %> | |
39 | -</ul> | |
21 | + <ul class="profile-list"> | |
22 | + <% @friends.each do |friend| %> | |
23 | + <li> | |
24 | + <%= link_to_profile profile_image(friend) + '<br/>' + friend.short_name, | |
25 | + friend.identifier, :class => 'profile-link' %> | |
26 | + <div class="controll"> | |
27 | + <%= link_to content_tag('span',_('remove')), | |
28 | + { :action => 'remove', :id => friend.id }, | |
29 | + :class => 'button icon-delete', | |
30 | + :title => _('remove'), | |
31 | + :help => __('Clicking on this button will remove your friend relation with %s.') % friend.name %> | |
32 | + <%= link_to content_tag('span',_('contact')), | |
33 | + friend.url.merge(:controller => 'contact', :action => 'new'), | |
34 | + :class => 'button icon-menu-mail', | |
35 | + :title => _('contact'), | |
36 | + :help => __('Clicking on this button will let you send a message to %s.') % friend.name %> | |
37 | + </div><!-- end class="controll" --> | |
38 | + </li> | |
39 | + <% end %> | |
40 | + </ul> | |
41 | + <div id='pagination-friends'> | |
42 | + <%= pagination_links @friends, :param_name => 'npage' %> | |
43 | + </div> | |
40 | 44 | |
41 | 45 | <% button_bar do %> |
42 | 46 | <%= button(:back, _('Go back'), :controller => 'profile_editor') %> |
43 | 47 | <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %> |
44 | 48 | <%= button(:search, _('Invite people from my e-mail contacts'), :action => 'invite') %> |
45 | 49 | <% end %> |
50 | +<% end %> | |
46 | 51 | |
47 | 52 | </div><!-- end id="manage_friends" --> |
48 | 53 | ... | ... |
public/stylesheets/controller_friends.css
1 | 1 | |
2 | 2 | @import url(manage_contacts_list.css); |
3 | +@import url(pagination.css); | |
3 | 4 | |
4 | 5 | #remove_friend .friend_picture { |
5 | 6 | float: left; |
... | ... | @@ -17,3 +18,7 @@ |
17 | 18 | border: 1px solid #999; |
18 | 19 | margin: 5px 0px; |
19 | 20 | } |
21 | + | |
22 | +#pagination-friends .pagination span { | |
23 | + display: inline; | |
24 | +} | ... | ... |
public/stylesheets/manage_contacts_list.css
test/functional/friends_controller_test.rb
... | ... | @@ -67,6 +67,7 @@ class FriendsControllerTest < Test::Unit::TestCase |
67 | 67 | post :remove, :id => friend.id, :confirmation => '1' |
68 | 68 | assert_redirected_to :action => 'index' |
69 | 69 | end |
70 | + assert_equal friend, Profile.find(friend.id) | |
70 | 71 | end |
71 | 72 | |
72 | 73 | should 'display find people button' do | ... | ... |
test/unit/friendship_test.rb
... | ... | @@ -3,8 +3,8 @@ require File.dirname(__FILE__) + '/../test_helper' |
3 | 3 | class FriendshipTest < Test::Unit::TestCase |
4 | 4 | |
5 | 5 | should 'connect a person to another' do |
6 | - p1 = Person.new(:environment => Environment.default) | |
7 | - p2 = Person.new(:environment => Environment.default) | |
6 | + p1 = create_user('person_test').person | |
7 | + p2 = create_user('person_test_2').person | |
8 | 8 | |
9 | 9 | f = Friendship.new |
10 | 10 | assert_raise ActiveRecord::AssociationTypeMismatch do | ... | ... |