Commit a03dc433dc0c45d84130ed108298b3e02dc8fd36

Authored by Daniela Feitosa
Committed by Antonio Terceiro
1 parent 27667670

ActionItem990: Added pagination and cache to friends

app/controllers/public/profile_controller.rb
@@ -28,7 +28,9 @@ class ProfileController < PublicController @@ -28,7 +28,9 @@ class ProfileController < PublicController
28 end 28 end
29 29
30 def friends 30 def friends
31 - @friends= profile.friends 31 + if is_cache_expired?(profile.friends_cache_key(params))
  32 + @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage])
  33 + end
32 end 34 end
33 35
34 def members 36 def members
@@ -82,4 +84,7 @@ class ProfileController < PublicController @@ -82,4 +84,7 @@ class ProfileController < PublicController
82 end 84 end
83 end 85 end
84 86
  87 + def per_page
  88 + 10
  89 + end
85 end 90 end
app/helpers/profile_helper.rb
@@ -12,4 +12,9 @@ module ProfileHelper @@ -12,4 +12,9 @@ module ProfileHelper
12 end 12 end
13 end 13 end
14 14
  15 + def pagination_links(collection, options={})
  16 + options = {:prev_label => '« ' + _('Previous'), :next_label => _('Next') + ' »'}.merge(options)
  17 + will_paginate(collection, options)
  18 + end
  19 +
15 end 20 end
app/models/person.rb
@@ -38,7 +38,7 @@ class Person < Profile @@ -38,7 +38,7 @@ class Person < Profile
38 end 38 end
39 39
40 def remove_friend(friend) 40 def remove_friend(friend)
41 - friends.delete(friend) 41 + Friendship.find(:first, :conditions => {:friend_id => friend, :person_id => id}).destroy
42 end 42 end
43 43
44 FIELDS = %w[ 44 FIELDS = %w[
@@ -238,4 +238,26 @@ class Person < Profile @@ -238,4 +238,26 @@ class Person < Profile
238 refused_communities << community 238 refused_communities << community
239 end 239 end
240 240
  241 + def blocks_to_expire_cache
  242 + [CommunitiesBlock]
  243 + end
  244 +
  245 + def cache_keys(params = {})
  246 + [communities_cache_key]
  247 + end
  248 +
  249 + def communities_cache_key(params = {})
  250 + page = params[:npage] || '1'
  251 + identifier + '-communities-page-' + page
  252 + end
  253 +
  254 + def friends_cache_key(params = {})
  255 + page = params[:npage] || '1'
  256 + identifier + '-friends-page-' + page
  257 + end
  258 +
  259 + def manage_friends_cache_key(params = {})
  260 + page = params[:npage] || '1'
  261 + identifier + '-manage-friends-page-' + page
  262 + end
241 end 263 end
app/models/profile.rb
@@ -606,4 +606,12 @@ class Profile &lt; ActiveRecord::Base @@ -606,4 +606,12 @@ class Profile &lt; ActiveRecord::Base
606 self.articles.find(:all, :conditions => ['type in (?)', ['Folder', 'Blog']]) 606 self.articles.find(:all, :conditions => ['type in (?)', ['Folder', 'Blog']])
607 end 607 end
608 608
  609 + def blocks_to_expire_cache
  610 + []
  611 + end
  612 +
  613 + def cache_keys(params = {})
  614 + []
  615 + end
  616 +
609 end 617 end
app/views/profile/friends.rhtml
@@ -3,12 +3,16 @@ @@ -3,12 +3,16 @@
3 3
4 <h1><%= __("%s's friends") % profile.name %></h1> 4 <h1><%= __("%s's friends") % profile.name %></h1>
5 5
6 -<% cache do%> 6 +<% cache_timeout(profile.friends_cache_key(params), 4.hours.from_now) do %>
7 <ul class='profile-list'> 7 <ul class='profile-list'>
8 <% @friends.each do |friend| %> 8 <% @friends.each do |friend| %>
9 <%= profile_image_link(friend) %> 9 <%= profile_image_link(friend) %>
10 <% end%> 10 <% end%>
11 </ul> 11 </ul>
  12 +
  13 + <div id='pagination-profiles'>
  14 + <%= pagination_links @friends, :param_name => 'npage' %>
  15 + </div>
12 <% end %> 16 <% end %>
13 17
14 <% button_bar do %> 18 <% button_bar do %>
config/environment.rb
@@ -67,7 +67,7 @@ Rails::Initializer.run do |config| @@ -67,7 +67,7 @@ Rails::Initializer.run do |config|
67 67
68 # don't load the sweepers while loading the database 68 # don't load the sweepers while loading the database
69 unless $PROGRAM_NAME =~ /rake$/ && ARGV.first == 'db:schema:load' 69 unless $PROGRAM_NAME =~ /rake$/ && ARGV.first == 'db:schema:load'
70 - config.active_record.observers = :article_sweeper 70 + config.active_record.observers = :article_sweeper, :role_assignment_sweeper, :friendship_sweeper
71 end 71 end
72 # Make Active Record use UTC-base instead of local time 72 # Make Active Record use UTC-base instead of local time
73 # config.active_record.default_timezone = :utc 73 # config.active_record.default_timezone = :utc
public/stylesheets/controller_profile.css
1 @import url(profile-list-block.css); 1 @import url(profile-list-block.css);
  2 +@import url(pagination.css);
2 3
3 .button-bar { 4 .button-bar {
4 padding-top: 40px; 5 padding-top: 40px;
5 clear: both; 6 clear: both;
6 } 7 }
  8 +
  9 +#pagination-profiles .pagination span {
  10 + display: inline;
  11 +}