Mercurial > hg > soundsoftware-site
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)