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