From a8bf082e35b4182447c8737af71d35993c7ffb89 Mon Sep 17 00:00:00 2001 From: ilya <ilya@laptop.(none)> Date: Mon, 18 Oct 2010 14:35:41 -0700 Subject: [PATCH] The invitation now has an optional personal message --- app/controllers/invitations_controller.rb | 2 ++ app/models/user.rb | 8 +++++++- app/views/devise/mailer/invitation.html.haml | 7 +++++++ app/views/invitations/_new.haml | 2 ++ public/javascripts/view.js | 2 +- spec/models/user/invite_spec.rb | 6 ++++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index ab9939a112..8eae94aa52 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -10,6 +10,8 @@ class InvitationsController < Devise::InvitationsController def create begin params[:user][:aspect_id] = params[:user].delete(:aspects) + message = params[:user].delete(:invite_messages) + params[:user][:invite_message] = message unless message == "" self.resource = current_user.invite_user(params[resource_name]) flash[:notice] = I18n.t 'invitations.create.sent' rescue RuntimeError => e diff --git a/app/models/user.rb b/app/models/user.rb index fe03e20fc0..1ab3874517 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -38,6 +38,8 @@ class User key :visible_post_ids, Array key :visible_person_ids, Array + key :invite_messages, Hash + before_validation :strip_username, :on => :create validates_presence_of :username validates_uniqueness_of :username, :case_sensitive => false @@ -290,7 +292,7 @@ class User :into => aspect_id ) - invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self) + invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self, :invite_message => opts[:invite_message]) self.invites = self.invites - 1 self.pending_requests << request @@ -313,6 +315,10 @@ class User else invitable.pending_requests << request invitable.inviters << inviter + message = attributes.delete(:invite_message) + if message + invitable.invite_messages[inviter.id.to_s] = message + end end if invitable.new_record? diff --git a/app/views/devise/mailer/invitation.html.haml b/app/views/devise/mailer/invitation.html.haml index 86b01d97a5..c16b6fe833 100644 --- a/app/views/devise/mailer/invitation.html.haml +++ b/app/views/devise/mailer/invitation.html.haml @@ -2,6 +2,13 @@ Hello #{@resource.email}! %p #{(@resource.inviters.count == 1)? ( @resource.inviters.first.real_name + " has") : (@resource.inviters.map{|inv| inv.real_name}.join(",") + " have")} invited you to #{root_url}, you can accept it through the link below. +- @resource.inviters.each do |inv| + - if @resource.invite_messages[inv.id.to_s] + = "#{inv.real_name}:" + = @resource.invite_messages[inv.id.to_s] + %p + + %p= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @resource.invitation_token) %p If you don't want to accept the invitation, please ignore this email. diff --git a/app/views/invitations/_new.haml b/app/views/invitations/_new.haml index 9cd41f05f4..3c20992a0c 100644 --- a/app/views/invitations/_new.haml +++ b/app/views/invitations/_new.haml @@ -8,6 +8,8 @@ = invite.select(:aspects, @aspects_dropdown_array) - else = invite.select(:aspects, @aspects_dropdown_array, :selected => @aspect.id) + Message: + = invite.text_area :invite_messages %p= invite.submit "Send an invitation" diff --git a/public/javascripts/view.js b/public/javascripts/view.js index 0790d2776f..7d903d1e88 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -28,7 +28,7 @@ $(document).ready(function(){ //buttons////// $("#add_aspect_button").fancybox({ 'titleShow' : false , 'hideOnOverlayClick' : false }); $("#add_request_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false }); - $("#invite_user_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false }); + $(".invite_user_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false }); $(".add_request_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false }); $(".question_mark").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false }); diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb index 8b664905ba..eac6a0a05b 100644 --- a/spec/models/user/invite_spec.rb +++ b/spec/models/user/invite_spec.rb @@ -46,6 +46,12 @@ describe User do invited_user.inviters.include?(inviter).should be_true end + it 'adds an optional message' do + invited_user = inviter.invite_user(:email => "marcy@example.com", :invite_message => "How've you been?",:aspect_id => aspect.id) + invited_user.reload + invited_user.invite_messages[inviter.id.to_s].should == "How've you been?" + end + it 'adds a pending request to the invited user' do invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id) -- GitLab