Commit fcad091d97e7e03a9f7ea161d4e69389fdc25d21
1 parent
9701ad86
Exists in
staging
and in
42 other branches
profile_suggestions: friends suggestions interface
Users can: * add a suggestion as friend * remove a suggestion from list (ActionItem3234)
Showing
7 changed files
with
136 additions
and
31 deletions
Show diff stats
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 | ... | ... |
... | ... | @@ -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 | - | ... | ... |
... | ... | @@ -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" /> | ... | ... |
... | ... | @@ -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 < 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 | ... | ... |