@@ -136,7 +136,6 class MailHandler < ActionMailer::Base | |||||
136 | if issue.subject.blank? |
|
136 | if issue.subject.blank? | |
137 | issue.subject = '(no subject)' |
|
137 | issue.subject = '(no subject)' | |
138 | end |
|
138 | end | |
139 | issue.description = plain_text_body |
|
|||
140 | # custom fields |
|
139 | # custom fields | |
141 | issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c| |
|
140 | issue.custom_field_values = issue.available_custom_fields.inject({}) do |h, c| | |
142 | if value = get_keyword(c.name, :override => true) |
|
141 | if value = get_keyword(c.name, :override => true) | |
@@ -144,6 +143,7 class MailHandler < ActionMailer::Base | |||||
144 | end |
|
143 | end | |
145 | h |
|
144 | h | |
146 | end |
|
145 | end | |
|
146 | issue.description = cleaned_up_text_body | |||
147 | # add To and Cc as watchers before saving so the watchers can reply to Redmine |
|
147 | # add To and Cc as watchers before saving so the watchers can reply to Redmine | |
148 | add_watchers(issue) |
|
148 | add_watchers(issue) | |
149 | issue.save! |
|
149 | issue.save! | |
@@ -174,7 +174,7 class MailHandler < ActionMailer::Base | |||||
174 | end |
|
174 | end | |
175 |
|
175 | |||
176 | # add the note |
|
176 | # add the note | |
177 |
journal = issue.init_journal(user, |
|
177 | journal = issue.init_journal(user, cleaned_up_text_body) | |
178 | add_attachments(issue) |
|
178 | add_attachments(issue) | |
179 | # check workflow |
|
179 | # check workflow | |
180 | if status && issue.new_statuses_allowed_to(user).include?(status) |
|
180 | if status && issue.new_statuses_allowed_to(user).include?(status) | |
@@ -205,7 +205,7 class MailHandler < ActionMailer::Base | |||||
205 |
|
205 | |||
206 | if !message.locked? |
|
206 | if !message.locked? | |
207 | reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip, |
|
207 | reply = Message.new(:subject => email.subject.gsub(%r{^.*msg\d+\]}, '').strip, | |
208 |
:content => |
|
208 | :content => cleaned_up_text_body) | |
209 | reply.author = user |
|
209 | reply.author = user | |
210 | reply.board = message.board |
|
210 | reply.board = message.board | |
211 | message.children << reply |
|
211 | message.children << reply | |
@@ -276,6 +276,9 class MailHandler < ActionMailer::Base | |||||
276 | @plain_text_body |
|
276 | @plain_text_body | |
277 | end |
|
277 | end | |
278 |
|
278 | |||
|
279 | def cleaned_up_text_body | |||
|
280 | cleanup_body(plain_text_body) | |||
|
281 | end | |||
279 |
|
282 | |||
280 | def self.full_sanitizer |
|
283 | def self.full_sanitizer | |
281 | @full_sanitizer ||= HTML::FullSanitizer.new |
|
284 | @full_sanitizer ||= HTML::FullSanitizer.new | |
@@ -299,4 +302,16 class MailHandler < ActionMailer::Base | |||||
299 | user.save ? user : nil |
|
302 | user.save ? user : nil | |
300 | end |
|
303 | end | |
301 | end |
|
304 | end | |
|
305 | ||||
|
306 | private | |||
|
307 | ||||
|
308 | # Removes the email body of text after the truncation configurations. | |||
|
309 | def cleanup_body(body) | |||
|
310 | delimiters = Setting.mail_handler_body_delimiters.to_s.split(/[\r\n]+/).reject(&:blank?).map {|s| Regexp.escape(s)} | |||
|
311 | unless delimiters.empty? | |||
|
312 | regex = Regexp.new("^(#{ delimiters.join('|') })\s*$.*", Regexp::MULTILINE) | |||
|
313 | body = body.gsub(regex, '') | |||
|
314 | end | |||
|
315 | body.strip | |||
|
316 | end | |||
302 | end |
|
317 | end |
@@ -1,6 +1,13 | |||||
1 | <% form_tag({:action => 'edit', :tab => 'mail_handler'}) do %> |
|
1 | <% form_tag({:action => 'edit', :tab => 'mail_handler'}) do %> | |
2 |
|
2 | |||
3 | <div class="box tabular settings"> |
|
3 | <div class="box tabular settings"> | |
|
4 | <p> | |||
|
5 | <%= setting_text_area :mail_handler_body_delimiters, :rows => 5 %> | |||
|
6 | <br /><em><%= l(:text_line_separated) %></em> | |||
|
7 | </p> | |||
|
8 | </div> | |||
|
9 | ||||
|
10 | <div class="box tabular settings"> | |||
4 | <p><%= setting_check_box :mail_handler_api_enabled, |
|
11 | <p><%= setting_check_box :mail_handler_api_enabled, | |
5 | :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }"%></p> |
|
12 | :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }"%></p> | |
6 |
|
13 | |||
@@ -12,4 +19,5 | |||||
12 | </div> |
|
19 | </div> | |
13 |
|
20 | |||
14 | <%= submit_tag l(:button_save) %> |
|
21 | <%= submit_tag l(:button_save) %> | |
|
22 | ||||
15 | <% end %> |
|
23 | <% end %> |
@@ -865,3 +865,5 bg: | |||||
865 | label_missing_api_access_key: Missing an API access key |
|
865 | label_missing_api_access_key: Missing an API access key | |
866 | label_missing_feeds_access_key: Missing a RSS access key |
|
866 | label_missing_feeds_access_key: Missing a RSS access key | |
867 | button_show: Show |
|
867 | button_show: Show | |
|
868 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
869 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -889,3 +889,5 bs: | |||||
889 | label_missing_api_access_key: Missing an API access key |
|
889 | label_missing_api_access_key: Missing an API access key | |
890 | label_missing_feeds_access_key: Missing a RSS access key |
|
890 | label_missing_feeds_access_key: Missing a RSS access key | |
891 | button_show: Show |
|
891 | button_show: Show | |
|
892 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
893 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -868,3 +868,5 ca: | |||||
868 | label_missing_api_access_key: Missing an API access key |
|
868 | label_missing_api_access_key: Missing an API access key | |
869 | label_missing_feeds_access_key: Missing a RSS access key |
|
869 | label_missing_feeds_access_key: Missing a RSS access key | |
870 | button_show: Show |
|
870 | button_show: Show | |
|
871 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
872 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -871,3 +871,5 cs: | |||||
871 | label_missing_api_access_key: Missing an API access key |
|
871 | label_missing_api_access_key: Missing an API access key | |
872 | label_missing_feeds_access_key: Missing a RSS access key |
|
872 | label_missing_feeds_access_key: Missing a RSS access key | |
873 | button_show: Show |
|
873 | button_show: Show | |
|
874 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
875 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -891,3 +891,5 da: | |||||
891 | label_missing_api_access_key: Missing an API access key |
|
891 | label_missing_api_access_key: Missing an API access key | |
892 | label_missing_feeds_access_key: Missing a RSS access key |
|
892 | label_missing_feeds_access_key: Missing a RSS access key | |
893 | button_show: Show |
|
893 | button_show: Show | |
|
894 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
895 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -891,3 +891,5 de: | |||||
891 | label_missing_api_access_key: Missing an API access key |
|
891 | label_missing_api_access_key: Missing an API access key | |
892 | label_missing_feeds_access_key: Missing a RSS access key |
|
892 | label_missing_feeds_access_key: Missing a RSS access key | |
893 | button_show: Show |
|
893 | button_show: Show | |
|
894 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
895 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -871,3 +871,5 el: | |||||
871 | label_missing_api_access_key: Missing an API access key |
|
871 | label_missing_api_access_key: Missing an API access key | |
872 | label_missing_feeds_access_key: Missing a RSS access key |
|
872 | label_missing_feeds_access_key: Missing a RSS access key | |
873 | button_show: Show |
|
873 | button_show: Show | |
|
874 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
875 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -308,6 +308,7 en: | |||||
308 | setting_activity_days_default: Days displayed on project activity |
|
308 | setting_activity_days_default: Days displayed on project activity | |
309 | setting_display_subprojects_issues: Display subprojects issues on main projects by default |
|
309 | setting_display_subprojects_issues: Display subprojects issues on main projects by default | |
310 | setting_enabled_scm: Enabled SCM |
|
310 | setting_enabled_scm: Enabled SCM | |
|
311 | setting_mail_handler_body_delimiters: "Truncate emails after one of these lines" | |||
311 | setting_mail_handler_api_enabled: Enable WS for incoming emails |
|
312 | setting_mail_handler_api_enabled: Enable WS for incoming emails | |
312 | setting_mail_handler_api_key: API key |
|
313 | setting_mail_handler_api_key: API key | |
313 | setting_sequential_project_identifiers: Generate sequential project identifiers |
|
314 | setting_sequential_project_identifiers: Generate sequential project identifiers | |
@@ -812,6 +813,7 en: | |||||
812 | text_tracker_no_workflow: No workflow defined for this tracker |
|
813 | text_tracker_no_workflow: No workflow defined for this tracker | |
813 | text_unallowed_characters: Unallowed characters |
|
814 | text_unallowed_characters: Unallowed characters | |
814 | text_comma_separated: Multiple values allowed (comma separated). |
|
815 | text_comma_separated: Multiple values allowed (comma separated). | |
|
816 | text_line_separated: Multiple values allowed (one line for each value). | |||
815 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages |
|
817 | text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages | |
816 | text_issue_added: "Issue {{id}} has been reported by {{author}}." |
|
818 | text_issue_added: "Issue {{id}} has been reported by {{author}}." | |
817 | text_issue_updated: "Issue {{id}} has been updated by {{author}}." |
|
819 | text_issue_updated: "Issue {{id}} has been updated by {{author}}." |
@@ -912,3 +912,5 es: | |||||
912 | label_missing_api_access_key: Missing an API access key |
|
912 | label_missing_api_access_key: Missing an API access key | |
913 | label_missing_feeds_access_key: Missing a RSS access key |
|
913 | label_missing_feeds_access_key: Missing a RSS access key | |
914 | button_show: Show |
|
914 | button_show: Show | |
|
915 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
916 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -901,3 +901,5 fi: | |||||
901 | label_missing_api_access_key: Missing an API access key |
|
901 | label_missing_api_access_key: Missing an API access key | |
902 | label_missing_feeds_access_key: Missing a RSS access key |
|
902 | label_missing_feeds_access_key: Missing a RSS access key | |
903 | button_show: Show |
|
903 | button_show: Show | |
|
904 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
905 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -330,6 +330,7 fr: | |||||
330 | setting_activity_days_default: Nombre de jours affichés sur l'activité des projets |
|
330 | setting_activity_days_default: Nombre de jours affichés sur l'activité des projets | |
331 | setting_display_subprojects_issues: Afficher par défaut les demandes des sous-projets sur les projets principaux |
|
331 | setting_display_subprojects_issues: Afficher par défaut les demandes des sous-projets sur les projets principaux | |
332 | setting_enabled_scm: SCM activés |
|
332 | setting_enabled_scm: SCM activés | |
|
333 | setting_mail_handler_body_delimiters: "Tronquer les emails après l'une de ces lignes" | |||
333 | setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails" |
|
334 | setting_mail_handler_api_enabled: "Activer le WS pour la réception d'emails" | |
334 | setting_mail_handler_api_key: Clé de protection de l'API |
|
335 | setting_mail_handler_api_key: Clé de protection de l'API | |
335 | setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels |
|
336 | setting_sequential_project_identifiers: Générer des identifiants de projet séquentiels | |
@@ -820,6 +821,7 fr: | |||||
820 | text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker |
|
821 | text_tracker_no_workflow: Aucun worflow n'est défini pour ce tracker | |
821 | text_unallowed_characters: Caractères non autorisés |
|
822 | text_unallowed_characters: Caractères non autorisés | |
822 | text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules). |
|
823 | text_comma_separated: Plusieurs valeurs possibles (séparées par des virgules). | |
|
824 | text_line_separated: Plusieurs valeurs possibles (une valeur par ligne). | |||
823 | text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits |
|
825 | text_issues_ref_in_commit_messages: Référencement et résolution des demandes dans les commentaires de commits | |
824 | text_issue_added: "La demande {{id}} a été soumise par {{author}}." |
|
826 | text_issue_added: "La demande {{id}} a été soumise par {{author}}." | |
825 | text_issue_updated: "La demande {{id}} a été mise à jour par {{author}}." |
|
827 | text_issue_updated: "La demande {{id}} a été mise à jour par {{author}}." |
@@ -891,3 +891,5 gl: | |||||
891 | label_missing_api_access_key: Missing an API access key |
|
891 | label_missing_api_access_key: Missing an API access key | |
892 | label_missing_feeds_access_key: Missing a RSS access key |
|
892 | label_missing_feeds_access_key: Missing a RSS access key | |
893 | button_show: Show |
|
893 | button_show: Show | |
|
894 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
895 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -875,3 +875,5 he: | |||||
875 | label_missing_api_access_key: Missing an API access key |
|
875 | label_missing_api_access_key: Missing an API access key | |
876 | label_missing_feeds_access_key: Missing a RSS access key |
|
876 | label_missing_feeds_access_key: Missing a RSS access key | |
877 | button_show: Show |
|
877 | button_show: Show | |
|
878 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
879 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -896,3 +896,5 | |||||
896 | label_missing_api_access_key: Missing an API access key |
|
896 | label_missing_api_access_key: Missing an API access key | |
897 | label_missing_feeds_access_key: Missing a RSS access key |
|
897 | label_missing_feeds_access_key: Missing a RSS access key | |
898 | button_show: Show |
|
898 | button_show: Show | |
|
899 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
900 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -878,3 +878,5 it: | |||||
878 | label_missing_api_access_key: Missing an API access key |
|
878 | label_missing_api_access_key: Missing an API access key | |
879 | label_missing_feeds_access_key: Missing a RSS access key |
|
879 | label_missing_feeds_access_key: Missing a RSS access key | |
880 | button_show: Show |
|
880 | button_show: Show | |
|
881 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
882 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -900,3 +900,5 ja: | |||||
900 | label_missing_api_access_key: Missing an API access key |
|
900 | label_missing_api_access_key: Missing an API access key | |
901 | label_missing_feeds_access_key: Missing a RSS access key |
|
901 | label_missing_feeds_access_key: Missing a RSS access key | |
902 | button_show: Show |
|
902 | button_show: Show | |
|
903 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
904 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -931,3 +931,5 ko: | |||||
931 | label_missing_api_access_key: Missing an API access key |
|
931 | label_missing_api_access_key: Missing an API access key | |
932 | label_missing_feeds_access_key: Missing a RSS access key |
|
932 | label_missing_feeds_access_key: Missing a RSS access key | |
933 | button_show: Show |
|
933 | button_show: Show | |
|
934 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
935 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -939,3 +939,5 lt: | |||||
939 | label_missing_api_access_key: Missing an API access key |
|
939 | label_missing_api_access_key: Missing an API access key | |
940 | label_missing_feeds_access_key: Missing a RSS access key |
|
940 | label_missing_feeds_access_key: Missing a RSS access key | |
941 | button_show: Show |
|
941 | button_show: Show | |
|
942 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
943 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -853,3 +853,5 nl: | |||||
853 | label_missing_api_access_key: Missing an API access key |
|
853 | label_missing_api_access_key: Missing an API access key | |
854 | label_missing_feeds_access_key: Missing a RSS access key |
|
854 | label_missing_feeds_access_key: Missing a RSS access key | |
855 | button_show: Show |
|
855 | button_show: Show | |
|
856 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
857 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -866,3 +866,5 | |||||
866 | label_missing_api_access_key: Missing an API access key |
|
866 | label_missing_api_access_key: Missing an API access key | |
867 | label_missing_feeds_access_key: Missing a RSS access key |
|
867 | label_missing_feeds_access_key: Missing a RSS access key | |
868 | button_show: Show |
|
868 | button_show: Show | |
|
869 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
870 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -894,3 +894,5 pl: | |||||
894 | label_missing_api_access_key: Missing an API access key |
|
894 | label_missing_api_access_key: Missing an API access key | |
895 | label_missing_feeds_access_key: Missing a RSS access key |
|
895 | label_missing_feeds_access_key: Missing a RSS access key | |
896 | button_show: Show |
|
896 | button_show: Show | |
|
897 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
898 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -899,3 +899,5 pt-BR: | |||||
899 | label_missing_api_access_key: Missing an API access key |
|
899 | label_missing_api_access_key: Missing an API access key | |
900 | label_missing_feeds_access_key: Missing a RSS access key |
|
900 | label_missing_feeds_access_key: Missing a RSS access key | |
901 | button_show: Show |
|
901 | button_show: Show | |
|
902 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
903 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -883,3 +883,5 pt: | |||||
883 | label_missing_api_access_key: Missing an API access key |
|
883 | label_missing_api_access_key: Missing an API access key | |
884 | label_missing_feeds_access_key: Missing a RSS access key |
|
884 | label_missing_feeds_access_key: Missing a RSS access key | |
885 | button_show: Show |
|
885 | button_show: Show | |
|
886 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
887 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -868,3 +868,5 ro: | |||||
868 | label_missing_api_access_key: Missing an API access key |
|
868 | label_missing_api_access_key: Missing an API access key | |
869 | label_missing_feeds_access_key: Missing a RSS access key |
|
869 | label_missing_feeds_access_key: Missing a RSS access key | |
870 | button_show: Show |
|
870 | button_show: Show | |
|
871 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
872 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -979,3 +979,5 ru: | |||||
979 | label_missing_api_access_key: Missing an API access key |
|
979 | label_missing_api_access_key: Missing an API access key | |
980 | label_missing_feeds_access_key: Missing a RSS access key |
|
980 | label_missing_feeds_access_key: Missing a RSS access key | |
981 | button_show: Show |
|
981 | button_show: Show | |
|
982 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
983 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -870,3 +870,5 sk: | |||||
870 | label_missing_api_access_key: Missing an API access key |
|
870 | label_missing_api_access_key: Missing an API access key | |
871 | label_missing_feeds_access_key: Missing a RSS access key |
|
871 | label_missing_feeds_access_key: Missing a RSS access key | |
872 | button_show: Show |
|
872 | button_show: Show | |
|
873 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
874 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -867,3 +867,5 sl: | |||||
867 | label_missing_api_access_key: Missing an API access key |
|
867 | label_missing_api_access_key: Missing an API access key | |
868 | label_missing_feeds_access_key: Missing a RSS access key |
|
868 | label_missing_feeds_access_key: Missing a RSS access key | |
869 | button_show: Show |
|
869 | button_show: Show | |
|
870 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
871 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -886,3 +886,5 | |||||
886 | label_missing_api_access_key: Missing an API access key |
|
886 | label_missing_api_access_key: Missing an API access key | |
887 | label_missing_feeds_access_key: Missing a RSS access key |
|
887 | label_missing_feeds_access_key: Missing a RSS access key | |
888 | button_show: Show |
|
888 | button_show: Show | |
|
889 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
890 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -920,3 +920,5 sv: | |||||
920 | label_missing_api_access_key: Missing an API access key |
|
920 | label_missing_api_access_key: Missing an API access key | |
921 | label_missing_feeds_access_key: Missing a RSS access key |
|
921 | label_missing_feeds_access_key: Missing a RSS access key | |
922 | button_show: Show |
|
922 | button_show: Show | |
|
923 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
924 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -868,3 +868,5 th: | |||||
868 | label_missing_api_access_key: Missing an API access key |
|
868 | label_missing_api_access_key: Missing an API access key | |
869 | label_missing_feeds_access_key: Missing a RSS access key |
|
869 | label_missing_feeds_access_key: Missing a RSS access key | |
870 | button_show: Show |
|
870 | button_show: Show | |
|
871 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
872 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -898,3 +898,5 tr: | |||||
898 | label_missing_api_access_key: Missing an API access key |
|
898 | label_missing_api_access_key: Missing an API access key | |
899 | label_missing_feeds_access_key: Missing a RSS access key |
|
899 | label_missing_feeds_access_key: Missing a RSS access key | |
900 | button_show: Show |
|
900 | button_show: Show | |
|
901 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
902 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -867,3 +867,5 uk: | |||||
867 | label_missing_api_access_key: Missing an API access key |
|
867 | label_missing_api_access_key: Missing an API access key | |
868 | label_missing_feeds_access_key: Missing a RSS access key |
|
868 | label_missing_feeds_access_key: Missing a RSS access key | |
869 | button_show: Show |
|
869 | button_show: Show | |
|
870 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
871 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -930,3 +930,5 vi: | |||||
930 | label_missing_api_access_key: Missing an API access key |
|
930 | label_missing_api_access_key: Missing an API access key | |
931 | label_missing_feeds_access_key: Missing a RSS access key |
|
931 | label_missing_feeds_access_key: Missing a RSS access key | |
932 | button_show: Show |
|
932 | button_show: Show | |
|
933 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
934 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -964,3 +964,5 | |||||
964 | label_missing_api_access_key: Missing an API access key |
|
964 | label_missing_api_access_key: Missing an API access key | |
965 | label_missing_feeds_access_key: Missing a RSS access key |
|
965 | label_missing_feeds_access_key: Missing a RSS access key | |
966 | button_show: Show |
|
966 | button_show: Show | |
|
967 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
968 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -895,3 +895,5 zh: | |||||
895 | label_missing_api_access_key: Missing an API access key |
|
895 | label_missing_api_access_key: Missing an API access key | |
896 | label_missing_feeds_access_key: Missing a RSS access key |
|
896 | label_missing_feeds_access_key: Missing a RSS access key | |
897 | button_show: Show |
|
897 | button_show: Show | |
|
898 | text_line_separated: Multiple values allowed (one line for each value). | |||
|
899 | setting_mail_handler_body_delimiters: Truncate emails after one of these lines |
@@ -116,6 +116,8 notified_events: | |||||
116 | default: |
|
116 | default: | |
117 | - issue_added |
|
117 | - issue_added | |
118 | - issue_updated |
|
118 | - issue_updated | |
|
119 | mail_handler_body_delimiters: | |||
|
120 | default: '' | |||
119 | mail_handler_api_enabled: |
|
121 | mail_handler_api_enabled: | |
120 | default: 0 |
|
122 | default: 0 | |
121 | mail_handler_api_key: |
|
123 | mail_handler_api_key: |
@@ -370,6 +370,7 input#time_entry_comments { width: 90%;} | |||||
370 |
|
370 | |||
371 | .tabular.settings p{ padding-left: 300px; } |
|
371 | .tabular.settings p{ padding-left: 300px; } | |
372 | .tabular.settings label{ margin-left: -300px; width: 295px; } |
|
372 | .tabular.settings label{ margin-left: -300px; width: 295px; } | |
|
373 | .tabular.settings textarea { width: 99%; } | |||
373 |
|
374 | |||
374 | fieldset.settings label { display: block; } |
|
375 | fieldset.settings label { display: block; } | |
375 |
|
376 |
@@ -26,10 +26,22 in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras | |||||
26 | sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum |
|
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 |
|
27 | id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus | |
28 | eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique |
|
28 | eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique | |
29 |
sed, mauris |
|
29 | sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et | |
30 | malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse |
|
30 | malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse | |
31 | platea dictumst. |
|
31 | platea dictumst. | |
32 |
|
32 | |||
|
33 | --- This line starts with a delimiter and should not be stripped | |||
|
34 | ||||
|
35 | This paragraph is before delimiters. | |||
|
36 | ||||
|
37 | BREAK | |||
|
38 | ||||
|
39 | This paragraph is between delimiters. | |||
|
40 | ||||
|
41 | --- | |||
|
42 | ||||
|
43 | This paragraph is after the delimiter so it shouldn't appear. | |||
|
44 | ||||
33 | Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque |
|
45 | Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque | |
34 | sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. |
|
46 | sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem. | |
35 | Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, |
|
47 | Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et, |
@@ -279,10 +279,62 class MailHandlerTest < ActiveSupport::TestCase | |||||
279 | assert_equal 'This is a html-only email.', issue.description |
|
279 | assert_equal 'This is a html-only email.', issue.description | |
280 | end |
|
280 | end | |
281 |
|
281 | |||
|
282 | context "truncate emails based on the Setting" do | |||
|
283 | context "with no setting" do | |||
|
284 | setup do | |||
|
285 | Setting.mail_handler_body_delimiters = '' | |||
|
286 | end | |||
|
287 | ||||
|
288 | should "add the entire email into the issue" do | |||
|
289 | issue = submit_email('ticket_on_given_project.eml') | |||
|
290 | assert_issue_created(issue) | |||
|
291 | assert issue.description.include?('---') | |||
|
292 | assert issue.description.include?('This paragraph is after the delimiter') | |||
|
293 | end | |||
|
294 | end | |||
|
295 | ||||
|
296 | context "with a single string" do | |||
|
297 | setup do | |||
|
298 | Setting.mail_handler_body_delimiters = '---' | |||
|
299 | end | |||
|
300 | ||||
|
301 | should "truncate the email at the delimiter for the issue" do | |||
|
302 | issue = submit_email('ticket_on_given_project.eml') | |||
|
303 | assert_issue_created(issue) | |||
|
304 | assert issue.description.include?('This paragraph is before delimiters') | |||
|
305 | assert issue.description.include?('--- This line starts with a delimiter') | |||
|
306 | assert !issue.description.match(/^---$/) | |||
|
307 | assert !issue.description.include?('This paragraph is after the delimiter') | |||
|
308 | end | |||
|
309 | end | |||
|
310 | ||||
|
311 | context "with multiple strings" do | |||
|
312 | setup do | |||
|
313 | Setting.mail_handler_body_delimiters = "---\nBREAK" | |||
|
314 | end | |||
|
315 | ||||
|
316 | should "truncate the email at the first delimiter found (BREAK)" do | |||
|
317 | issue = submit_email('ticket_on_given_project.eml') | |||
|
318 | assert_issue_created(issue) | |||
|
319 | assert issue.description.include?('This paragraph is before delimiters') | |||
|
320 | assert !issue.description.include?('BREAK') | |||
|
321 | assert !issue.description.include?('This paragraph is between delimiters') | |||
|
322 | assert !issue.description.match(/^---$/) | |||
|
323 | assert !issue.description.include?('This paragraph is after the delimiter') | |||
|
324 | end | |||
|
325 | end | |||
|
326 | end | |||
|
327 | ||||
282 | private |
|
328 | private | |
283 |
|
329 | |||
284 | def submit_email(filename, options={}) |
|
330 | def submit_email(filename, options={}) | |
285 | raw = IO.read(File.join(FIXTURES_PATH, filename)) |
|
331 | raw = IO.read(File.join(FIXTURES_PATH, filename)) | |
286 | MailHandler.receive(raw, options) |
|
332 | MailHandler.receive(raw, options) | |
287 | end |
|
333 | end | |
|
334 | ||||
|
335 | def assert_issue_created(issue) | |||
|
336 | assert issue.is_a?(Issue) | |||
|
337 | assert !issue.new_record? | |||
|
338 | issue.reload | |||
|
339 | end | |||
288 | end |
|
340 | end |
General Comments 0
You need to be logged in to leave comments.
Login now