]> source.dussan.org Git - redmine.git/commitdiff
Add 'Start date' and 'End date' keywords for incoming email. #5595
authorEric Davis <edavis@littlestreamsoftware.com>
Fri, 28 May 2010 23:45:45 +0000 (23:45 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Fri, 28 May 2010 23:45:45 +0000 (23:45 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3763 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/fixtures/mail_handler/ticket_on_given_project.eml
test/fixtures/mail_handler/ticket_reply_with_status.eml
test/unit/mail_handler_test.rb

index ac05847466ba2f0965f3df6027e8eb38c6520cf1..1b30af63786fb01e94ba49691a5befd51ecdc0e2 100644 (file)
@@ -120,13 +120,15 @@ class MailHandler < ActionMailer::Base
     category = (get_keyword(:category) && project.issue_categories.find_by_name(get_keyword(:category)))
     priority = (get_keyword(:priority) && IssuePriority.find_by_name(get_keyword(:priority)))
     status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
+    due_date = get_keyword(:due_date, :override => true)
+    start_date = get_keyword(:start_date, :override => true)
 
     # check permission
     unless @@handler_options[:no_permission_check]
       raise UnauthorizedAction unless user.allowed_to?(:add_issues, project)
     end
-    
-    issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority)
+
+    issue = Issue.new(:author => user, :project => project, :tracker => tracker, :category => category, :priority => priority, :due_date => due_date, :start_date => start_date)
     # check workflow
     if status && issue.new_statuses_allowed_to(user).include?(status)
       issue.status = status
@@ -163,6 +165,8 @@ class MailHandler < ActionMailer::Base
   # Adds a note to an existing issue
   def receive_issue_reply(issue_id)
     status =  (get_keyword(:status) && IssueStatus.find_by_name(get_keyword(:status)))
+    due_date = get_keyword(:due_date, :override => true)
+    start_date = get_keyword(:start_date, :override => true)
     
     issue = Issue.find_by_id(issue_id)
     return unless issue
@@ -179,6 +183,9 @@ class MailHandler < ActionMailer::Base
     if status && issue.new_statuses_allowed_to(user).include?(status)
       issue.status = status
     end
+    issue.start_date = start_date if start_date
+    issue.due_date = due_date if due_date
+    
     issue.save!
     logger.info "MailHandler: issue ##{issue.id} updated by #{user}" if logger && logger.info
     journal
@@ -245,7 +252,7 @@ class MailHandler < ActionMailer::Base
       @keywords[attr]
     else
       @keywords[attr] = begin
-        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr}[ \t]*:[ \t]*(.+)\s*$/i, '')
+        if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) && plain_text_body.gsub!(/^#{attr.to_s.humanize}[ \t]*:[ \t]*(.+)\s*$/i, '')
           $1.strip
         elsif !@@handler_options[:issue][attr].blank?
           @@handler_options[:issue][attr]
index 372e7302ce31188bcb2327c16fe412ebe3933063..f62d9d63d355c0730a5431eafdfd00ce57a4afff 100644 (file)
@@ -51,4 +51,5 @@ pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
 \r
 Project: onlinestore\r
 Status: Resolved\r
-\r
+due date: 2010-12-31\r
+Start Date:2010-01-01\r
index ab799198bb08e122c7eeb25790c1dd72616a9d69..90ed6d7058a5f30543e1ff9bdf8bf29572969643 100644 (file)
@@ -26,6 +26,9 @@ Content-Transfer-Encoding: quoted-printable
 This is reply
 
 Status: Resolved
+due date: 2010-12-31
+Start Date:2010-01-01
+
 ------=_NextPart_000_0067_01C8D3CE.711F9CC0
 Content-Type: text/html;
        charset="utf-8"
index b8549a4047596b65fe598fc1703172085876fe6b..afc2029b8e088fa55048bab14897873b2fc13bb0 100644 (file)
@@ -55,6 +55,8 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal Project.find(2), issue.project
     assert_equal IssueStatus.find_by_name('Resolved'), issue.status
     assert issue.description.include?('Lorem ipsum dolor sit amet, consectetuer adipiscing elit.')
+    assert_equal '2010-01-01', issue.start_date.to_s
+    assert_equal '2010-12-31', issue.due_date.to_s
     # keywords should be removed from the email body
     assert !issue.description.match(/^Project:/i)
     assert !issue.description.match(/^Status:/i)
@@ -243,7 +245,7 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_match /This is reply/, journal.notes
   end
 
-  def test_add_issue_note_with_status_change
+  def test_add_issue_note_with_attribute_changes
     # This email contains: 'Status: Resolved'
     journal = submit_email('ticket_reply_with_status.eml')
     assert journal.is_a?(Journal)
@@ -252,6 +254,8 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal Issue.find(2), journal.journalized
     assert_match /This is reply/, journal.notes
     assert_equal IssueStatus.find_by_name("Resolved"), issue.status
+    assert_equal '2010-01-01', issue.start_date.to_s
+    assert_equal '2010-12-31', issue.due_date.to_s
   end
 
   def test_add_issue_note_should_send_email_notification