Move creation of a message from an email into the message model and adjust the logic to treat messages received by email as plain text.
58 lines
1.5 KiB
Ruby
58 lines
1.5 KiB
Ruby
require 'validators'
|
|
|
|
class Message < ActiveRecord::Base
|
|
belongs_to :sender, :class_name => "User", :foreign_key => :from_user_id
|
|
belongs_to :recipient, :class_name => "User", :foreign_key => :to_user_id
|
|
|
|
validates_presence_of :title, :body, :sent_on, :sender, :recipient
|
|
validates_length_of :title, :within => 1..255
|
|
validates_inclusion_of :message_read, :in => [ true, false ]
|
|
validates_as_utf8 :title
|
|
|
|
attr_accessible :title, :body
|
|
|
|
after_initialize :set_defaults
|
|
|
|
def self.from_mail(mail, from, to)
|
|
if mail.multipart?
|
|
if mail.text_part
|
|
body = mail.text_part.decoded
|
|
elsif mail.html_part
|
|
body = HTMLEntities.new.decode(Sanitize.clean(mail.html_part.decoded))
|
|
end
|
|
elsif mail.text? and mail.sub_type == "html"
|
|
body = HTMLEntities.new.decode(Sanitize.clean(mail.decoded))
|
|
else
|
|
body = mail.decoded
|
|
end
|
|
|
|
message = Message.new({
|
|
:sender => from,
|
|
:recipient => to,
|
|
:sent_on => mail.date.new_offset(0),
|
|
:title => mail.subject.sub(/\[OpenStreetMap\] */, ""),
|
|
:body => body,
|
|
:body_format => "text"
|
|
}, :without_protection => true)
|
|
end
|
|
|
|
def body
|
|
RichText.new(read_attribute(:body_format), read_attribute(:body))
|
|
end
|
|
|
|
def digest
|
|
md5 = Digest::MD5.new
|
|
md5 << from_user_id.to_s
|
|
md5 << to_user_id.to_s
|
|
md5 << sent_on.xmlschema
|
|
md5 << title
|
|
md5 << body
|
|
md5.hexdigest
|
|
end
|
|
|
|
private
|
|
|
|
def set_defaults
|
|
self.body_format = "markdown" unless self.attribute_present?(:body_format)
|
|
end
|
|
end
|