scrap.rb
2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class Scrap < ActiveRecord::Base
SEARCHABLE_FIELDS = {
:content => 1,
}
validates_presence_of :content
validates_presence_of :sender_id, :receiver_id
belongs_to :receiver, :class_name => 'Profile', :foreign_key => 'receiver_id'
belongs_to :sender, :class_name => 'Person', :foreign_key => 'sender_id'
has_many :replies, :class_name => 'Scrap', :foreign_key => 'scrap_id', :dependent => :destroy
belongs_to :root, :class_name => 'Scrap', :foreign_key => 'scrap_id'
named_scope :all_scraps, lambda {|profile| {:conditions => ["receiver_id = ? OR sender_id = ?", profile, profile], :limit => 30}}
named_scope :not_replies, :conditions => {:scrap_id => nil}
track_actions :leave_scrap, :after_create, :keep_params => ['sender.name', 'content', 'receiver.name', 'receiver.url'], :if => Proc.new{|s| s.sender != s.receiver && s.sender != s.top_root.receiver}, :custom_target => :action_tracker_target
track_actions :leave_scrap_to_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.sender == s.receiver}
track_actions :reply_scrap_on_self, :after_create, :keep_params => ['sender.name', 'content'], :if => Proc.new{|s| s.sender != s.receiver && s.sender == s.top_root.receiver}
after_create do |scrap|
scrap.root.update_attribute('updated_at', DateTime.now) unless scrap.root.nil?
Scrap::Notifier.deliver_mail(scrap) if scrap.send_notification?
end
before_validation :strip_all_html_tags
def top_root
scrap = self
scrap = Scrap.find(scrap.scrap_id) while scrap.scrap_id
scrap
end
def strip_all_html_tags
sanitizer = HTML::WhiteListSanitizer.new
self.content = sanitizer.sanitize(self.content, :tags => [])
end
def action_tracker_target
self.receiver.is_a?(Community) ? self.receiver : self
end
def is_root?
!root.nil?
end
def scrap_wall_url
is_root? ? root.receiver.wall_url : receiver.wall_url
end
def send_notification?
sender != receiver && (is_root? ? root.receiver.receives_scrap_notification? : receiver.receives_scrap_notification?)
end
class Notifier < ActionMailer::Base
def mail(scrap)
sender, receiver = scrap.sender, scrap.receiver
recipients receiver.email
from "#{sender.environment.name} <#{sender.environment.noreply_email}>"
subject _("[%s] You received a scrap!") % [sender.environment.name]
body :recipient => receiver.name,
:sender => sender.name,
:sender_link => sender.url,
:scrap_content => scrap.content,
:wall_url => scrap.scrap_wall_url,
:environment => sender.environment.name,
:url => sender.environment.top_url
end
end
end