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 3 protect 'manage_friends', :profile
4 4  
5 5 def index
  6 + @suggestions = profile.suggested_people.limit(per_page/2)
6 7 if is_cache_expired?(profile.manage_friends_cache_key(params))
7 8 @friends = profile.friends.paginate(:per_page => per_page, :page => params[:npage])
8 9 end
... ... @@ -16,6 +17,21 @@ class FriendsController < MyProfileController
16 17 end
17 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 35 protected
20 36  
21 37 class << self
... ...
app/views/friends/_profile_list.html.erb 0 → 100644
... ... @@ -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 10 <%= link_to _('Do you want to see other people in this environment?'), :controller => 'search', :action => 'assets', :asset => 'people' %>
11 11 </em>
12 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 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 15 <% button_bar do %>
46 16 <%= button(:back, _('Back to control panel'), :controller => 'profile_editor') %>
47 17 <%= button(:search, _('Find people'), :controller => 'search', :action => 'assets', :asset => 'people') %>
... ... @@ -49,7 +19,23 @@
49 19 <%= button(:search, _('Invite people from my e-mail contacts'), :controller => 'invite', :action => 'select_address_book') %>
50 20 <% end %>
51 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 39 <% end %>
53 40  
54 41 </div><!-- end id="manage_friends" -->
55   -
... ...
app/views/friends/remove_suggestion.html.erb 0 → 100644
... ... @@ -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 @@
  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 @@
  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 70 assert_no_tag :tag => 'a', :attributes => { :href => "/profile/testuser/invite/friends" }
71 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 110 end
... ...