126 |
126 |
MESSAGE_ID_RE = %r{^<?redmine\.([a-z0-9_]+)\-(\d+)\.\d+@}
|
127 |
127 |
ISSUE_REPLY_SUBJECT_RE = %r{\[[^\]]*#(\d+)\]}
|
128 |
128 |
MESSAGE_REPLY_SUBJECT_RE = %r{\[[^\]]*msg(\d+)\]}
|
|
129 |
MESSAGE_CREATE_SUBJECT = %r{^\[([^\]]+ - )?([^\]]+)\] ?(.*)}
|
129 |
130 |
|
130 |
131 |
def dispatch
|
131 |
132 |
headers = [email.in_reply_to, email.references].flatten.compact
|
... | ... | |
142 |
143 |
receive_issue_reply(m[1].to_i)
|
143 |
144 |
elsif m = subject.match(MESSAGE_REPLY_SUBJECT_RE)
|
144 |
145 |
receive_message_reply(m[1].to_i)
|
|
146 |
elsif m = subject.match(MESSAGE_CREATE_SUBJECT)
|
|
147 |
receive_message(m[1], m[2], m[3])
|
145 |
148 |
else
|
146 |
149 |
dispatch_to_default
|
147 |
150 |
end
|
... | ... | |
186 |
189 |
issue
|
187 |
190 |
end
|
188 |
191 |
|
|
192 |
# Creates a new forum message
|
|
193 |
def receive_message(project, board, subject)
|
|
194 |
project &&= Project.find_by_name(project[0..-4])
|
|
195 |
project ||= target_project
|
|
196 |
board = Board.find_by_name_and_project_id(board, project.id)
|
|
197 |
|
|
198 |
# check permission
|
|
199 |
unless @@handler_options[:no_permission_check]
|
|
200 |
raise UnauthorizedAction unless user.allowed_to?(:add_messages, project)
|
|
201 |
end
|
|
202 |
|
|
203 |
message = Message.new(:author => user, :board => board)
|
|
204 |
message.subject = subject
|
|
205 |
message.content = cleaned_up_text_body
|
|
206 |
add_watchers(message)
|
|
207 |
message.save!
|
|
208 |
add_attachments(message)
|
|
209 |
|
|
210 |
logger.info "MailHandler: message #{message.id} - \"#{message.subject}\" created by #{user}" if logger && logger.info
|
|
211 |
message
|
|
212 |
end
|
|
213 |
|
189 |
214 |
# Adds a note to an existing issue
|
190 |
215 |
def receive_issue_reply(issue_id, from_journal=nil)
|
191 |
216 |
issue = Issue.find_by_id(issue_id)
|
... | ... | |
266 |
291 |
# Adds To and Cc as watchers of the given object if the sender has the
|
267 |
292 |
# appropriate permission
|
268 |
293 |
def add_watchers(obj)
|
269 |
|
if user.allowed_to?("add_#{obj.class.name.underscore}_watchers".to_sym, obj.project)
|
|
294 |
if user.allowed_to?("add_#{obj.class.name.underscore}_watchers".to_sym, obj.project) \
|
|
295 |
|| obj.is_a?(Message)
|
270 |
296 |
addresses = [email.to, email.cc].flatten.compact.uniq.collect {|a| a.strip.downcase}
|
271 |
297 |
unless addresses.empty?
|
272 |
298 |
watchers = User.active.where('LOWER(mail) IN (?)', addresses).all
|