diff app/models/watcher.rb @ 1464:261b3d9a4903 redmine-2.4

Update to Redmine 2.4 branch rev 12663
author Chris Cannam
date Tue, 14 Jan 2014 14:37:42 +0000
parents 433d4f72a19b
children e248c7af89ec
line wrap: on
line diff
--- a/app/models/watcher.rb	Fri Jun 14 09:05:06 2013 +0100
+++ b/app/models/watcher.rb	Tue Jan 14 14:37:42 2014 +0000
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2012  Jean-Philippe Lang
+# Copyright (C) 2006-2013  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -23,13 +23,26 @@
   validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id]
   validate :validate_user
 
+  # Returns true if at least one object among objects is watched by user
+  def self.any_watched?(objects, user)
+    objects = objects.reject(&:new_record?)
+    if objects.any?
+      objects.group_by {|object| object.class.base_class}.each do |base_class, objects|
+        if Watcher.where(:watchable_type => base_class.name, :watchable_id => objects.map(&:id), :user_id => user.id).exists?
+          return true
+        end
+      end
+    end
+    false
+  end
+
   # Unwatch things that users are no longer allowed to view
   def self.prune(options={})
     if options.has_key?(:user)
       prune_single_user(options[:user], options)
     else
       pruned = 0
-      User.find(:all, :conditions => "id IN (SELECT DISTINCT user_id FROM #{table_name})").each do |user|
+      User.where("id IN (SELECT DISTINCT user_id FROM #{table_name})").all.each do |user|
         pruned += prune_single_user(user, options)
       end
       pruned
@@ -47,7 +60,7 @@
   def self.prune_single_user(user, options={})
     return unless user.is_a?(User)
     pruned = 0
-    find(:all, :conditions => {:user_id => user.id}).each do |watcher|
+    where(:user_id => user.id).all.each do |watcher|
       next if watcher.watchable.nil?
 
       if options.has_key?(:project)