##// END OF EJS Templates
replace Rails2 "named_scope" to Rails3 "scope" at lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb...
Toshi MARUYAMA -
r9356:bf4d779ea209
parent child
Show More
@@ -1,85 +1,85
1 1 # ActsAsWatchable
2 2 module Redmine
3 3 module Acts
4 4 module Watchable
5 5 def self.included(base)
6 6 base.extend ClassMethods
7 7 end
8 8
9 9 module ClassMethods
10 10 def acts_as_watchable(options = {})
11 11 return if self.included_modules.include?(Redmine::Acts::Watchable::InstanceMethods)
12 12 class_eval do
13 13 has_many :watchers, :as => :watchable, :dependent => :delete_all
14 14 has_many :watcher_users, :through => :watchers, :source => :user, :validate => false
15 15
16 named_scope :watched_by, lambda { |user_id|
16 scope :watched_by, lambda { |user_id|
17 17 { :include => :watchers,
18 18 :conditions => ["#{Watcher.table_name}.user_id = ?", user_id] }
19 19 }
20 20 attr_protected :watcher_ids, :watcher_user_ids
21 21 end
22 22 send :include, Redmine::Acts::Watchable::InstanceMethods
23 23 alias_method_chain :watcher_user_ids=, :uniq_ids
24 24 end
25 25 end
26 26
27 27 module InstanceMethods
28 28 def self.included(base)
29 29 base.extend ClassMethods
30 30 end
31 31
32 32 # Returns an array of users that are proposed as watchers
33 33 def addable_watcher_users
34 34 users = self.project.users.sort - self.watcher_users
35 35 if respond_to?(:visible?)
36 36 users.reject! {|user| !visible?(user)}
37 37 end
38 38 users
39 39 end
40 40
41 41 # Adds user as a watcher
42 42 def add_watcher(user)
43 43 self.watchers << Watcher.new(:user => user)
44 44 end
45 45
46 46 # Removes user from the watchers list
47 47 def remove_watcher(user)
48 48 return nil unless user && user.is_a?(User)
49 49 Watcher.delete_all "watchable_type = '#{self.class}' AND watchable_id = #{self.id} AND user_id = #{user.id}"
50 50 end
51 51
52 52 # Adds/removes watcher
53 53 def set_watcher(user, watching=true)
54 54 watching ? add_watcher(user) : remove_watcher(user)
55 55 end
56 56
57 57 # Overrides watcher_user_ids= to make user_ids uniq
58 58 def watcher_user_ids_with_uniq_ids=(user_ids)
59 59 if user_ids.is_a?(Array)
60 60 user_ids = user_ids.uniq
61 61 end
62 62 send :watcher_user_ids_without_uniq_ids=, user_ids
63 63 end
64 64
65 65 # Returns true if object is watched by +user+
66 66 def watched_by?(user)
67 67 !!(user && self.watcher_user_ids.detect {|uid| uid == user.id })
68 68 end
69 69
70 70 # Returns an array of watchers' email addresses
71 71 def watcher_recipients
72 72 notified = watcher_users.active
73 73 notified.reject! {|user| user.mail_notification == 'none'}
74 74
75 75 if respond_to?(:visible?)
76 76 notified.reject! {|user| !visible?(user)}
77 77 end
78 78 notified.collect(&:mail).compact
79 79 end
80 80
81 81 module ClassMethods; end
82 82 end
83 83 end
84 84 end
85 85 end
General Comments 0
You need to be logged in to leave comments. Login now