From a61061805745f7dedaae3e015f307d0a74fb5497 Mon Sep 17 00:00:00 2001 From: zhitomirskiyi <ilya@joindiaspora.com> Date: Wed, 26 Jan 2011 16:53:03 -0800 Subject: [PATCH] display resend link if already sent invitation in friend finder --- app/controllers/services_controller.rb | 8 +++++++- app/models/services/facebook.rb | 2 +- app/views/services/finder.html.haml | 4 +++- config/locales/diaspora/en.yml | 2 ++ spec/controllers/services_controller_spec.rb | 20 ++++++++++++++------ spec/models/services/facebook_spec.rb | 4 ++-- 6 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb index 55838a21ba..8ed37a4820 100644 --- a/app/controllers/services_controller.rb +++ b/app/controllers/services_controller.rb @@ -52,8 +52,14 @@ class ServicesController < ApplicationController def inviter @uid = params[:uid] + + if i_id = params[:invitation_id] + invited_user = Invitation.find(i_id).recipient + else + invited_user = current_user.invite_user(params[:aspect_id], params[:provider], @uid) + end + @subject = t('.join_me_on_diaspora') - invited_user = current_user.invite_user(params[:aspect_id], params[:provider], params[:uid]) @message = <<MSG #{t('.click_link_to_accept_invitation')}: \n diff --git a/app/models/services/facebook.rb b/app/models/services/facebook.rb index 9fa6b31806..35960e0f5d 100644 --- a/app/models/services/facebook.rb +++ b/app/models/services/facebook.rb @@ -30,7 +30,7 @@ class Services::Facebook < Service :invitation_identifier => data_h.keys}) invitation_objects.each do |inv| - data_h[inv.recipient.invitation_identifier][:invitation] = true + data_h[inv.recipient.invitation_identifier][:invitation_id] = inv.id end service_objects = Services::Facebook.where(:uid => data_h.keys).includes(:user => :person) diff --git a/app/views/services/finder.html.haml b/app/views/services/finder.html.haml index e3ecfce12e..73fb80f073 100644 --- a/app/views/services/finder.html.haml +++ b/app/views/services/finder.html.haml @@ -28,8 +28,10 @@ :id => friend[:person].id}, :class => 'button', :rel => 'facebox' - - elsif friend[:invitation] + - elsif friend[:invitation_id] = t('invitations.new.already_invited') + %br + = link_to t('.resend'), service_inviter_path(:uid => uid, :provider => 'facebook', :invitation_id => friend[:invitation_id]) - else = form_tag service_inviter_path do = select_tag(:aspect_id, options_from_collection_for_select(@all_aspects, 'id', 'name')) diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index d927ba7213..18c777c735 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -427,6 +427,8 @@ en: inviter: join_me_on_diaspora: "Join me on DIASPORA*" click_link_to_accept_invitation: "Click this link to accept your invitation" + finder: + resend: "resend" notifier: hello: "Hello %{name}!" love: "love," diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb index c62feb4c0a..28c838471c 100644 --- a/spec/controllers/services_controller_spec.rb +++ b/spec/controllers/services_controller_spec.rb @@ -101,12 +101,6 @@ describe ServicesController do @invite_params = {:provider => @service1.provider, :uid => @uid, :aspect_id => @user.aspects.first.id} end - it 'creates an invitation' do - lambda { - put :inviter, @invite_params - }.should change(Invitation, :count).by(1) - end - it 'sets the subject' do put :inviter, @invite_params assigns[:subject].should_not be_nil @@ -122,6 +116,20 @@ describe ServicesController do response.location.should match(/https:\/\/www\.facebook\.com\/\?compose=1&id=.*&subject=.*&message=.*&sk=messages/) end + it 'creates an invitation' do + lambda { + put :inviter, @invite_params + }.should change(Invitation, :count).by(1) + end + + it 'does not create a duplicate invitation' do + inv = Invitation.create!(:sender_id => @user.id, :recipient_id => eve.id, :aspect_id => @user.aspects.first.id) + @invite_params[:invitation_id] = inv.id + + lambda { + put :inviter, @invite_params + }.should_not change(Invitation, :count) + end end end diff --git a/spec/models/services/facebook_spec.rb b/spec/models/services/facebook_spec.rb index 1e4e53ed2d..2cc8df8757 100644 --- a/spec/models/services/facebook_spec.rb +++ b/spec/models/services/facebook_spec.rb @@ -82,14 +82,14 @@ JSON end it 'contains an invitation if invited' do @inv = Invitation.create(:sender => @user, :recipient => @user2, :aspect => @user.aspects.first) - @service.finder.values.first[:invitation].should be_true + @service.finder.values.first[:invitation_id].should == @inv.id end it 'does not find the user with a wrong identifier' do @user2.invitation_identifier = 'dsaofhnadsoifnsdanf' @user2.save @inv = Invitation.create(:sender => @user, :recipient => @user2, :aspect => @user.aspects.first) - @service.finder.values.first[:invitation].should be_nil + @service.finder.values.first[:invitation_id].should be_nil end end end -- GitLab