Project

General

Profile

Patch #31324 » 0001-allows-setting-the-private-flag-via-mail-keyword.patch

updated patch with fixed test - Jens Krämer, 2019-05-09 06:18

View differences:

app/models/mail_handler.rb
203 203
    end
204 204
    issue.description = cleaned_up_text_body
205 205
    issue.start_date ||= User.current.today if Setting.default_issue_start_date_to_creation_date?
206
    issue.is_private = (handler_options[:issue][:is_private] == '1')
206
    if handler_options[:issue][:is_private] == '1'
207
      issue.is_private = true
208
    end
207 209

  
208 210
    # add To and Cc as watchers before saving so the watchers can reply to Redmine
209 211
    add_watchers(issue)
......
415 417
      'due_date' => get_keyword(:due_date, :format => '\d{4}-\d{2}-\d{2}'),
416 418
      'estimated_hours' => get_keyword(:estimated_hours),
417 419
      'done_ratio' => get_keyword(:done_ratio, :format => '(\d|10)?0'),
420
      'is_private' => get_keyword_bool(:is_private),
418 421
      'parent_issue_id' => get_keyword(:parent_issue)
419 422
    }.delete_if {|k, v| v.blank? }
420 423

  
421 424
    attrs
422 425
  end
423 426

  
427
  def get_keyword_bool(attr)
428
    true_values = ["1"]
429
    false_values = ["0"]
430
    locales = [Setting.default_language]
431
    if user
432
      locales << user.language
433
    end
434
    locales.select(&:present?).each do |locale|
435
      true_values << l("general_text_yes", :default => '', :locale =>  locale)
436
      true_values << l("general_text_Yes", :default => '', :locale =>  locale)
437
      false_values << l("general_text_no", :default => '', :locale =>  locale)
438
      false_values << l("general_text_No", :default => '', :locale =>  locale)
439
    end
440
    values = (true_values + false_values).select(&:present?)
441
    format = Regexp.union values
442
    if value = get_keyword(attr, :format => format)
443
      if true_values.include?(value)
444
        return true
445
      elsif false_values.include?(value)
446
        return false
447
      end
448
    end
449
    nil
450
  end
451

  
424 452
  # Returns a Hash of issue custom field values extracted from keywords in the email body
425 453
  def custom_field_values_from_keywords(customized)
426 454
    customized.custom_field_values.inject({}) do |h, v|
test/fixtures/mail_handler/ticket_with_localized_private_flag.eml
1
Return-Path: <jsmith@somenet.foo>
2
Received: from osiris ([127.0.0.1])
3
	by OSIRIS
4
	with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
5
Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
6
From: "John Smith" <jsmith@somenet.foo>
7
To: <redmine@somenet.foo>
8
Subject: New ticket on a given project
9
Date: Sun, 22 Jun 2008 12:28:07 +0200
10
MIME-Version: 1.0
11
Content-Type: text/plain;
12
	format=flowed;
13
	charset="iso-8859-1";
14
	reply-type=original
15
Content-Transfer-Encoding: 7bit
16
X-Priority: 3
17
X-MSMail-Priority: Normal
18
X-Mailer: Microsoft Outlook Express 6.00.2900.2869
19
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
20

  
21
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas imperdiet 
22
turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus 
23
blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti 
24
sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In 
25
in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras 
26
sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum 
27
id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus 
28
eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique 
29
sed, mauris. Pellentesque habitant morbi tristique senectus et netus et 
30
malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
31
platea dictumst.
32

  
33
Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque 
34
sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. 
35
Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, 
36
dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed, 
37
massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
38
pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
39

  
40
Projet: onlinestore
41
Priv?e: oui
test/unit/mail_handler_test.rb
496 496
    assert_equal 'ecookbook', issue.project.identifier
497 497
  end
498 498

  
499
  def test_add_issue_with_private_keyword
500
    User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
501
    # give the user permission to set issues private:
502
    MemberRole.create! member_id: 3, role_id: 1
503
    issue = submit_email(
504
              'ticket_with_localized_private_flag.eml',
505
              :allow_override => 'is_private,tracker,category,priority'
506
            )
507
    assert issue.is_a?(Issue)
508
    refute issue.new_record?
509
    issue.reload
510
    assert_equal 'New ticket on a given project', issue.subject
511
    assert issue.is_private
512
  end
513

  
499 514
  def test_add_issue_with_localized_attributes
500 515
    User.find_by_mail('jsmith@somenet.foo').update_attribute 'language', 'fr'
501 516
    issue = submit_email(
(2-2/2)