Commit e5dba6d0f2b73f34c1fd2332295c02084cbb812e

Authored by Daniela Feitosa
Committed by Antonio Terceiro
1 parent a03dc433

ActionItem989: added pagination and cache to manage_friends

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
... ... @@ -29,6 +29,7 @@
29 29 text-decoration: none;
30 30 text-align: center;
31 31 display: block;
  32 + font-size: 11px;
32 33 }
33 34 .profile-list a.profile-link:hover {
34 35 color: #FFF;
... ...
test/functional/friends_controller_test.rb
... ... @@ -67,6 +67,7 @@ class FriendsControllerTest &lt; 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__) + &#39;/../test_helper&#39;
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
... ...