##// END OF EJS Templates
Introduce virtual MenuNodes (#15880)....
Introduce virtual MenuNodes (#15880). They are characterized by having a blank url. they will only be rendered if the user is authorized to see at least one of its children. they render as links which do nothing when clicked. Patch by Jan Schulz-Hofen. git-svn-id: http://svn.redmine.org/redmine/trunk@15501 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r14856:cda9c63d9c21
r15119:53710d80fc88
Show More
watcher.rb
81 lines | 2.5 KiB | text/x-ruby | RubyLexer
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390 # Redmine - project management software
Jean-Philippe Lang
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 Jean-Philippe Lang
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390 #
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390 #
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Watcher < ActiveRecord::Base
belongs_to :watchable, :polymorphic => true
belongs_to :user
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 validates_presence_of :user
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id]
Toshi MARUYAMA
Rails3: model: replace deprecated validate method at watcher model...
r7952 validate :validate_user
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 attr_protected :id
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053
Jean-Philippe Lang
Adds Watcher.any_watched? to check if at least one object of a collection is watched....
r11729 # 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
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 # 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
Toshi MARUYAMA
remove unneeded Relation#all from Watcher#prune...
r12297 User.where("id IN (SELECT DISTINCT user_id FROM #{table_name})").each do |user|
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 pruned += prune_single_user(user, options)
end
pruned
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 protected
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390
Toshi MARUYAMA
Rails3: model: replace deprecated validate method at watcher model...
r7952 def validate_user
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 errors.add :user_id, :invalid unless user.nil? || user.active?
Jean-Philippe Lang
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398)....
r1711 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 private
Toshi MARUYAMA
remove trailing white-spaces from app/models/watcher.rb....
r6390
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 def self.prune_single_user(user, options={})
return unless user.is_a?(User)
pruned = 0
Toshi MARUYAMA
remove unneeded Relation#all from Watcher#prune_single_user...
r12294 where(:user_id => user.id).each do |watcher|
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 next if watcher.watchable.nil?
if options.has_key?(:project)
Toshi MARUYAMA
code format cleanup Watcher model...
r12293 unless watcher.watchable.respond_to?(:project) &&
watcher.watchable.project == options[:project]
next
end
Jean-Philippe Lang
Makes user unwatch what he can no longer view after its permissions have changed (#3589)....
r3053 end
if watcher.watchable.respond_to?(:visible?)
unless watcher.watchable.visible?(user)
watcher.destroy
pruned += 1
end
end
end
pruned
end
Jean-Philippe Lang
Added "Watch" functionality on issues. It allows users to receive mail notifications about issue changes....
r450 end