From 84e70634fbd0a3c8cf2ee40bfdfc04d64f8fdcca Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 30 Nov 2008 16:00:45 +0000 Subject: [PATCH] Adds To and Cc as watchers when submitting an issue by email (#2245). Only works if the sender has the 'Add issue watchers' permission. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2077 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mail_handler.rb | 16 ++++++++ test/fixtures/mail_handler/ticket_with_cc.eml | 40 +++++++++++++++++++ test/unit/mail_handler_test.rb | 11 +++++ 3 files changed, 67 insertions(+) create mode 100644 test/fixtures/mail_handler/ticket_with_cc.eml diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 855498211..fcb469c60 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -92,7 +92,11 @@ class MailHandler < ActionMailer::Base issue.save! add_attachments(issue) logger.info "MailHandler: issue ##{issue.id} created by #{user}" if logger && logger.info + # send notification before adding watchers since they were cc'ed Mailer.deliver_issue_add(issue) if Setting.notified_events.include?('issue_added') + # add To and Cc as watchers + add_watchers(issue) + issue end @@ -139,6 +143,18 @@ class MailHandler < ActionMailer::Base end end + # Adds To and Cc as watchers of the given object if the sender has the + # appropriate permission + def add_watchers(obj) + if user.allowed_to?("add_#{obj.class.name.underscore}_watchers".to_sym, obj.project) + addresses = [email.to, email.cc].flatten.compact.uniq.collect {|a| a.strip.downcase} + unless addresses.empty? + watchers = User.find_active(:all, :conditions => ['LOWER(mail) IN (?)', addresses]) + watchers.each {|w| obj.add_watcher(w)} + end + end + end + def get_keyword(attr) if @@handler_options[:allow_override].include?(attr.to_s) && email.plain_text_body =~ /^#{attr}:[ \t]*(.+)$/i $1.strip diff --git a/test/fixtures/mail_handler/ticket_with_cc.eml b/test/fixtures/mail_handler/ticket_with_cc.eml new file mode 100644 index 000000000..f809fed77 --- /dev/null +++ b/test/fixtures/mail_handler/ticket_with_cc.eml @@ -0,0 +1,40 @@ +Return-Path: +Received: from osiris ([127.0.0.1]) + by OSIRIS + with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200 +Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris> +From: "John Smith" +To: +Cc: +Subject: New ticket on a given project +Date: Sun, 22 Jun 2008 12:28:07 +0200 +MIME-Version: 1.0 +Content-Type: text/plain; + format=flowed; + charset="iso-8859-1"; + reply-type=original +Content-Transfer-Encoding: 7bit +X-Priority: 3 +X-MSMail-Priority: Normal +X-Mailer: Microsoft Outlook Express 6.00.2900.2869 +X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 + +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet +turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus +blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti +sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In +in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras +sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum +id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus +eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique +sed, mauris. Pellentesque habitant morbi tristique senectus et netus et +malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse +platea dictumst. + +Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque +sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. +Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, +dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, +massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo +pulvinar dui, a gravida orci mi eget odio. Nunc a lacus. + diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index b3628e0d5..ed7334b3e 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -23,6 +23,8 @@ class MailHandlerTest < Test::Unit::TestCase :roles, :members, :issues, + :issue_statuses, + :workflows, :trackers, :projects_trackers, :enumerations, @@ -100,6 +102,15 @@ class MailHandlerTest < Test::Unit::TestCase assert_equal 10790, issue.attachments.first.filesize end + def test_add_issue_with_cc + issue = submit_email('ticket_with_cc.eml', :issue => {:project => 'ecookbook'}) + assert issue.is_a?(Issue) + assert !issue.new_record? + issue.reload + assert issue.watched_by?(User.find_by_mail('dlopper@somenet.foo')) + assert_equal 1, issue.watchers.size + end + def test_add_issue_note journal = submit_email('ticket_reply.eml') assert journal.is_a?(Journal)