1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-03-10 19:23:06 +00:00

Merged r21661 to 5.0-stable (#37065).

git-svn-id: https://svn.redmine.org/redmine/branches/5.0-stable@21667 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Marius Balteanu 2022-06-20 15:18:57 +00:00
parent ff872c7e91
commit 69a8fe2f6d
2 changed files with 31 additions and 6 deletions

View File

@ -15,9 +15,13 @@ module Redmine
has_many :watchers, :as => :watchable, :dependent => :delete_all
has_many :watcher_users, :through => :watchers, :source => :user, :validate => false
scope :watched_by, lambda { |user_id|
scope :watched_by, lambda { |principal|
user_ids = Array(principal.id)
user_ids |= principal.group_ids if principal.is_a?(User)
user_ids.compact!
joins(:watchers).
where("#{Watcher.table_name}.user_id = ?", user_id)
where("#{Watcher.table_name}.user_id IN (?)", user_ids)
}
end
send :include, Redmine::Acts::Watchable::InstanceMethods
@ -66,9 +70,17 @@ module Redmine
super user_ids
end
# Returns true if object is watched by +user+
def watched_by?(user)
!!(user && self.watcher_user_ids.detect {|uid| uid == user.id })
# Returns true if object is watched by +principal+, that is
# either by a given group,
# or by a given user or any of their groups
def watched_by?(principal)
return false unless principal
user_ids = Array(principal.id)
user_ids |= principal.group_ids if principal.is_a?(User)
user_ids.compact!
(self.watcher_user_ids & user_ids).any?
end
def notified_watchers

View File

@ -20,7 +20,7 @@
require File.expand_path('../../test_helper', __FILE__)
class WatcherTest < ActiveSupport::TestCase
fixtures :projects, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules,
fixtures :projects, :groups_users, :users, :email_addresses, :members, :member_roles, :roles, :enabled_modules,
:issues, :issue_statuses, :enumerations, :trackers, :projects_trackers,
:boards, :messages,
:wikis, :wiki_pages,
@ -60,6 +60,19 @@ class WatcherTest < ActiveSupport::TestCase
assert Issue.watched_by(@user).include?(@issue)
end
def test_watched_by_group
group = Group.find(10)
user = User.find(8)
assert @issue.add_watcher(group)
@issue.reload
assert @issue.watched_by?(group)
assert Issue.watched_by(group).include?(@issue)
assert @issue.watched_by?(user)
assert Issue.watched_by(user).include?(@issue)
end
def test_watcher_users
watcher_users = Issue.find(2).watcher_users
assert_kind_of Array, watcher_users.collect{|w| w}