Mercurial > hg > soundsoftware-site
comparison app/models/.svn/text-base/mail_handler.rb.svn-base @ 119:8661b858af72
* Update to Redmine trunk rev 4705
author | Chris Cannam |
---|---|
date | Thu, 13 Jan 2011 14:12:06 +0000 |
parents | 94944d00e43c |
children | cd2282d2aa55 051f544170fe |
comparison
equal
deleted
inserted
replaced
39:150ceac17a8d | 119:8661b858af72 |
---|---|
146 # check permission | 146 # check permission |
147 unless @@handler_options[:no_permission_check] | 147 unless @@handler_options[:no_permission_check] |
148 raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) | 148 raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) |
149 end | 149 end |
150 | 150 |
151 # ignore CLI-supplied defaults for new issues | |
152 @@handler_options[:issue].clear | |
153 | |
151 journal = issue.init_journal(user, cleaned_up_text_body) | 154 journal = issue.init_journal(user, cleaned_up_text_body) |
152 issue.safe_attributes = issue_attributes_from_keywords(issue) | 155 issue.safe_attributes = issue_attributes_from_keywords(issue) |
153 issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} | 156 issue.safe_attributes = {'custom_field_values' => custom_field_values_from_keywords(issue)} |
154 add_attachments(issue) | 157 add_attachments(issue) |
155 issue.save! | 158 issue.save! |
230 # Destructively extracts the value for +attr+ in +text+ | 233 # Destructively extracts the value for +attr+ in +text+ |
231 # Returns nil if no matching keyword found | 234 # Returns nil if no matching keyword found |
232 def extract_keyword!(text, attr, format=nil) | 235 def extract_keyword!(text, attr, format=nil) |
233 keys = [attr.to_s.humanize] | 236 keys = [attr.to_s.humanize] |
234 if attr.is_a?(Symbol) | 237 if attr.is_a?(Symbol) |
235 keys << l("field_#{attr}", :default => '', :locale => user.language) if user | 238 keys << l("field_#{attr}", :default => '', :locale => user.language) if user && user.language.present? |
236 keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) | 239 keys << l("field_#{attr}", :default => '', :locale => Setting.default_language) if Setting.default_language.present? |
237 end | 240 end |
238 keys.reject! {|k| k.blank?} | 241 keys.reject! {|k| k.blank?} |
239 keys.collect! {|k| Regexp.escape(k)} | 242 keys.collect! {|k| Regexp.escape(k)} |
240 format ||= '.+' | 243 format ||= '.+' |
241 text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '') | 244 text.gsub!(/^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i, '') |
254 # Returns a Hash of issue attributes extracted from keywords in the email body | 257 # Returns a Hash of issue attributes extracted from keywords in the email body |
255 def issue_attributes_from_keywords(issue) | 258 def issue_attributes_from_keywords(issue) |
256 assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) | 259 assigned_to = (k = get_keyword(:assigned_to, :override => true)) && find_user_from_keyword(k) |
257 assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) | 260 assigned_to = nil if assigned_to && !issue.assignable_users.include?(assigned_to) |
258 | 261 |
259 { | 262 attrs = { |
260 'tracker_id' => ((k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id)) || issue.project.trackers.find(:first).try(:id), | 263 'tracker_id' => (k = get_keyword(:tracker)) && issue.project.trackers.find_by_name(k).try(:id), |
261 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), | 264 'status_id' => (k = get_keyword(:status)) && IssueStatus.find_by_name(k).try(:id), |
262 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), | 265 'priority_id' => (k = get_keyword(:priority)) && IssuePriority.find_by_name(k).try(:id), |
263 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), | 266 'category_id' => (k = get_keyword(:category)) && issue.project.issue_categories.find_by_name(k).try(:id), |
264 'assigned_to_id' => assigned_to.try(:id), | 267 'assigned_to_id' => assigned_to.try(:id), |
265 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), | 268 'fixed_version_id' => (k = get_keyword(:fixed_version, :override => true)) && issue.project.shared_versions.find_by_name(k).try(:id), |
266 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), | 269 'start_date' => get_keyword(:start_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), |
267 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), | 270 'due_date' => get_keyword(:due_date, :override => true, :format => '\d{4}-\d{2}-\d{2}'), |
268 'estimated_hours' => get_keyword(:estimated_hours, :override => true), | 271 'estimated_hours' => get_keyword(:estimated_hours, :override => true), |
269 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') | 272 'done_ratio' => get_keyword(:done_ratio, :override => true, :format => '(\d|10)?0') |
270 }.delete_if {|k, v| v.blank? } | 273 }.delete_if {|k, v| v.blank? } |
274 | |
275 if issue.new_record? && attrs['tracker_id'].nil? | |
276 attrs['tracker_id'] = issue.project.trackers.find(:first).try(:id) | |
277 end | |
278 | |
279 attrs | |
271 end | 280 end |
272 | 281 |
273 # Returns a Hash of issue custom field values extracted from keywords in the email body | 282 # Returns a Hash of issue custom field values extracted from keywords in the email body |
274 def custom_field_values_from_keywords(customized) | 283 def custom_field_values_from_keywords(customized) |
275 customized.custom_field_values.inject({}) do |h, v| | 284 customized.custom_field_values.inject({}) do |h, v| |