Commit fcad091d97e7e03a9f7ea161d4e69389fdc25d21

Authored by Daniela Feitosa
1 parent 9701ad86

profile_suggestions: friends suggestions interface

Users can:
   * add a suggestion as friend
   * remove a suggestion from list

(ActionItem3234)
app/controllers/my_profile/friends_controller.rb
@@ -3,6 +3,7 @@ class FriendsController < MyProfileController @@ -3,6 +3,7 @@ class FriendsController < MyProfileController
3 protect 'manage_friends', :profile 3 protect 'manage_friends', :profile
4 4
5 def index 5 def index
  6 + @suggestions = profile.suggested_people.limit(per_page/2)
6 if is_cache_expired?(profile.manage_friends_cache_key(params)) 7 if is_cache_expired?(profile.manage_friends_cache_key(params))
7 @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage]) 8 @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage])
8 end 9 end
@@ -16,6 +17,21 @@ class FriendsController < MyProfileController @@ -16,6 +17,21 @@ class FriendsController < MyProfileController
16 end 17 end
17 end 18 end
18 19
  20 + def suggest
  21 + @suggestions = profile.suggested_people.paginate(:per_page => per_page, :page => params[:npage])
  22 + end
  23 +
  24 + def remove_suggestion
  25 + @person = profile.suggested_people.find_by_identifier(params[:id])
  26 + redirect_to :action => 'suggest' unless @person
  27 + if @person && request.post?
  28 + suggestion = profile.profile_suggestions.find_by_suggestion_id @person.id
  29 + suggestion.disable
  30 + session[:notice] = _('Suggestion removed')
  31 + redirect_to :action => 'suggest'
  32 + end
  33 + end
  34 +
19 protected 35 protected
20 36
21 class << self 37 class << self
app/views/friends/_profile_list.html.erb 0 → 100644
@@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
  1 +<ul class="profile-list">
  2 + <% profiles.each do |profile| %>
  3 + <li>
  4 + <%= link_to_profile profile_image(profile) + '<br/>' + profile.short_name,
  5 + profile.identifier, :class => 'profile-link' %>
  6 + <div class="controll">
  7 + <% if collection == :friends %>
  8 + <%= link_to content_tag('span',_('remove')),
  9 + { :action => 'remove', :id => profile.id },
  10 + :class => 'button icon-remove',
  11 + :title => _('remove') %>
  12 + <%= link_to content_tag('span',_('contact')),
  13 + profile.url.merge(:controller => 'contact', :action => 'new', :profile => profile.identifier),
  14 + :class => 'button icon-menu-mail',
  15 + :title => _('contact') %>
  16 + <% elsif collection == :suggestions %>
  17 + <%= link_to content_tag('span',_('add')),
  18 + profile.add_url,
  19 + :class => 'button icon-add add-friend',
  20 + :title => _('Add friend') %>
  21 + <%= link_to content_tag('span',_('remove')),
  22 + { :action => 'remove_suggestion', :id => profile.identifier },
  23 + :class => 'button icon-remove',
  24 + :title => _('Remove suggestion'),
  25 + :method => 'post',
  26 + :confirm => _('Are you sure you want to remove this suggestion?') %>
  27 + <% end %>
  28 + </div><!-- end class="controll" -->
  29 + </li>
  30 + <% end %>
  31 +</ul>
app/views/friends/index.html.erb
@@ -10,38 +10,8 @@ @@ -10,38 +10,8 @@
10 <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %> 10 <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %>
11 </em> 11 </em>
12 </p> 12 </p>
13 - <% else %>  
14 - <% button_bar do %>  
15 - <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>  
16 - <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>  
17 - <% unless @plugins.dispatch(:remove_invite_friends_button).include?(true) %>  
18 - <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>  
19 - <% end %>  
20 - <% end %>  
21 <% end %> 13 <% end %>
22 14
23 - <ul class="profile-list">  
24 - <% @friends.each do |friend| %>  
25 - <li>  
26 - <%= link_to_profile profile_image(friend) + '<br/>' + friend.short_name,  
27 - friend.identifier, :class => 'profile-link' %>  
28 - <div class="controll">  
29 - <%= link_to content_tag('span',_('remove')),  
30 - { :action => 'remove', :id => friend.id },  
31 - :class => 'button icon-remove',  
32 - :title => _('remove') %>  
33 - <%= link_to content_tag('span',_('contact')),  
34 - friend.url.merge(:controller => 'contact', :action => 'new', :profile => friend.identifier),  
35 - :class => 'button icon-menu-mail',  
36 - :title => _('contact') %>  
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>  
44 -  
45 <% button_bar do %> 15 <% button_bar do %>
46 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %> 16 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
47 <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %> 17 <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>
@@ -49,7 +19,23 @@ @@ -49,7 +19,23 @@
49 <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %> 19 <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
50 <% end %> 20 <% end %>
51 <% end %> 21 <% end %>
  22 +
  23 + <%= render :partial => 'profile_list', :locals => { :profiles => @friends, :collection => :friends } %>
  24 + <div id='pagination-friends'>
  25 + <%= pagination_links @friends, :param_name => 'npage' %>
  26 + </div>
  27 +
  28 +<% end %>
  29 +
  30 +<% unless @suggestions.empty? %>
  31 + <br style="clear:both" />
  32 + <h2><%= _("Friends suggestions") %></h2>
  33 +
  34 + <%= render :partial => 'profile_list', :locals => { :profiles => @suggestions, :collection => :suggestions } %>
  35 +
  36 + <% button_bar do %>
  37 + <%= link_to _('See more suggestions...'), :action => 'suggest' %>
  38 + <% end %>
52 <% end %> 39 <% end %>
53 40
54 </div><!-- end id="manage_friends" --> 41 </div><!-- end id="manage_friends" -->
55 -  
app/views/friends/remove_suggestion.html.erb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +<div id="remove_suggestion">
  2 + <h1><%= _('Removing suggestion for friend: %s') % @person.name %></h1>
  3 +
  4 + <%= render :partial => 'shared/remove_suggestion', :locals => { :suggestion => @person } %>
  5 +</div>
app/views/friends/suggest.html.erb 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +<h1><%= _("Friends suggestions for %s") % profile.name %></h1>
  2 +
  3 +<% button_bar do %>
  4 + <%= button(:back, _('Go to friends list'), :controller => 'friends') %>
  5 +<% end %>
  6 +
  7 +<% if @suggestions.empty? %>
  8 + <p>
  9 + <em>
  10 + <%= _('You have no suggestions yet.') %>
  11 + <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %>
  12 + </em>
  13 + </p>
  14 +<% else %>
  15 +
  16 + <%= render :partial => 'profile_list', :locals => { :profiles => @suggestions, :collection => :suggestions } %>
  17 +
  18 + <%= pagination_links @suggestions, :param_name => 'npage' %>
  19 +<% end %>
  20 +<br style="clear:both" />
app/views/shared/_remove_suggestion.html.erb 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +<%= profile_image suggestion, :thumb, :class => 'suggestion_picture' %>
  2 +
  3 +<p>
  4 +<%= _('Are you sure you want to remove %s from your suggestions list?') % suggestion.name %>
  5 +</p>
  6 +
  7 +<%= form_tag do %>
  8 + <%= submit_button(:ok, _("Yes, I want to remove %s") % suggestion.name) %>
  9 + <%= button(:cancel, _("No"), :action => 'suggest') %>
  10 +<% end %>
test/functional/friends_controller_test.rb
@@ -70,4 +70,41 @@ class FriendsControllerTest &lt; ActionController::TestCase @@ -70,4 +70,41 @@ class FriendsControllerTest &lt; ActionController::TestCase
70 assert_no_tag :tag => 'a', :attributes => { :href => "/profile/testuser/invite/friends" } 70 assert_no_tag :tag => 'a', :attributes => { :href => "/profile/testuser/invite/friends" }
71 end 71 end
72 72
  73 + should 'not display list suggestions button if there is no suggestion' do
  74 + get :index, :profile => 'testuser'
  75 + assert_no_tag :tag => 'a', :content => 'Suggest friends', :attributes => { :href => "/myprofile/testuser/friends/suggest" }
  76 + end
  77 +
  78 + should 'display link to list suggestions page' do
  79 + profile.profile_suggestions.create(:suggestion => friend)
  80 + get :index, :profile => 'testuser'
  81 + assert_tag :tag => 'a', :content => 'See more suggestions...', :attributes => { :href => "/myprofile/testuser/friends/suggest" }
  82 + end
  83 +
  84 + should 'display people suggestions' do
  85 + profile.profile_suggestions.create(:suggestion => friend)
  86 + get :suggest, :profile => 'testuser'
  87 + assert_tag :tag => 'a', :content => friend.name, :attributes => { :href => "/profile/#{friend.identifier}" }
  88 + end
  89 +
  90 + should 'display button to add friend suggestion' do
  91 + profile.profile_suggestions.create(:suggestion => friend)
  92 + get :suggest, :profile => 'testuser'
  93 + assert_tag :tag => 'a', :attributes => { :href => "/profile/#{friend.identifier}/add" }
  94 + end
  95 +
  96 + should 'display button to remove people suggestion' do
  97 + profile.profile_suggestions.create(:suggestion => friend)
  98 + get :suggest, :profile => 'testuser'
  99 + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/testuser/friends/remove_suggestion/#{friend.identifier}" }
  100 + end
  101 +
  102 + should 'remove suggestion of friend' do
  103 + suggestion = profile.profile_suggestions.create(:suggestion => friend)
  104 + post :remove_suggestion, :profile => 'testuser', :id => friend.identifier
  105 +
  106 + assert_redirected_to :action => 'suggest'
  107 + assert_equal false, ProfileSuggestion.find(suggestion.id).enabled
  108 + end
  109 +
73 end 110 end