Mercurial > hg > soundsoftware-site
comparison app/models/watcher.rb @ 909:cbb26bc654de redmine-1.3
Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author | Chris Cannam |
---|---|
date | Fri, 24 Feb 2012 19:09:32 +0000 |
parents | 513646585e45 |
children | 433d4f72a19b |
comparison
equal
deleted
inserted
replaced
908:c6c2cbd0afee | 909:cbb26bc654de |
---|---|
1 # redMine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2007 Jean-Philippe Lang | 2 # Copyright (C) 2006-2011 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
8 # | 8 # |
9 # This program is distributed in the hope that it will be useful, | 9 # This program is distributed in the hope that it will be useful, |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 # GNU General Public License for more details. | 12 # GNU General Public License for more details. |
13 # | 13 # |
14 # You should have received a copy of the GNU General Public License | 14 # You should have received a copy of the GNU General Public License |
15 # along with this program; if not, write to the Free Software | 15 # along with this program; if not, write to the Free Software |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 |
18 class Watcher < ActiveRecord::Base | 18 class Watcher < ActiveRecord::Base |
19 belongs_to :watchable, :polymorphic => true | 19 belongs_to :watchable, :polymorphic => true |
20 belongs_to :user | 20 belongs_to :user |
21 | 21 |
22 validates_presence_of :user | 22 validates_presence_of :user |
23 validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id] | 23 validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id] |
24 | 24 |
25 # Unwatch things that users are no longer allowed to view | 25 # Unwatch things that users are no longer allowed to view |
26 def self.prune(options={}) | 26 def self.prune(options={}) |
32 pruned += prune_single_user(user, options) | 32 pruned += prune_single_user(user, options) |
33 end | 33 end |
34 pruned | 34 pruned |
35 end | 35 end |
36 end | 36 end |
37 | 37 |
38 protected | 38 protected |
39 | 39 |
40 def validate | 40 def validate |
41 errors.add :user_id, :invalid unless user.nil? || user.active? | 41 errors.add :user_id, :invalid unless user.nil? || user.active? |
42 end | 42 end |
43 | 43 |
44 private | 44 private |
45 | 45 |
46 def self.prune_single_user(user, options={}) | 46 def self.prune_single_user(user, options={}) |
47 return unless user.is_a?(User) | 47 return unless user.is_a?(User) |
48 pruned = 0 | 48 pruned = 0 |
49 find(:all, :conditions => {:user_id => user.id}).each do |watcher| | 49 find(:all, :conditions => {:user_id => user.id}).each do |watcher| |
50 next if watcher.watchable.nil? | 50 next if watcher.watchable.nil? |
51 | 51 |
52 if options.has_key?(:project) | 52 if options.has_key?(:project) |
53 next unless watcher.watchable.respond_to?(:project) && watcher.watchable.project == options[:project] | 53 next unless watcher.watchable.respond_to?(:project) && watcher.watchable.project == options[:project] |
54 end | 54 end |
55 | 55 |
56 if watcher.watchable.respond_to?(:visible?) | 56 if watcher.watchable.respond_to?(:visible?) |
57 unless watcher.watchable.visible?(user) | 57 unless watcher.watchable.visible?(user) |
58 watcher.destroy | 58 watcher.destroy |
59 pruned += 1 | 59 pruned += 1 |
60 end | 60 end |