diff --git a/app/models/issue.rb b/app/models/issue.rb --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -59,7 +59,7 @@ class Issue < ActiveRecord::Base validates_inclusion_of :done_ratio, :in => 0..100 validates_numericality_of :estimated_hours, :allow_nil => true - named_scope :visible, lambda {|*args| { :include => :project, + named_scope :visible, lambda {|*args| { :include => [:project, :watchers], :conditions => Issue.visible_condition(args.shift || User.current, *args) } } named_scope :open, :conditions => ["#{IssueStatus.table_name}.is_closed = ?", false], :include => :status @@ -93,9 +93,9 @@ class Issue < ActiveRecord::Base when 'all' nil when 'default' - "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + "(#{table_name}.is_private = #{connection.quoted_false} OR #{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id} OR #{Watcher.table_name}.user_id = #{user.id})" when 'own' - "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id})" + "(#{table_name}.author_id = #{user.id} OR #{table_name}.assigned_to_id = #{user.id} OR #{Watcher.table_name}.user_id = #{user.id})" else '1=0' end @@ -109,15 +109,23 @@ class Issue < ActiveRecord::Base when 'all' true when 'default' - !self.is_private? || self.author == user || self.assigned_to == user + !self.is_private? || self.author == user || self.assigned_to == user || self.watched_by?(user) when 'own' - self.author == user || self.assigned_to == user + self.author == user || self.assigned_to == user || self.watched_by?(user) else false end end end + # Override the acts_as_watchble default to allow any user with view issues + # rights to watch/see this issue. + def addable_watcher_users + users = self.project.users.sort - self.watcher_users + users.reject! {|user| !user.allowed_to?(:view_issues, self.project)} + users + end + def after_initialize if new_record? # set default values for new records only diff --git a/app/models/journal.rb b/app/models/journal.rb --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -38,7 +38,7 @@ class Journal < ActiveRecord::Base " (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')"} named_scope :visible, lambda {|*args| { - :include => {:issue => :project}, + :include => {:issue => [:project, :watchers]}, :conditions => Issue.visible_condition(args.shift || User.current, *args) }}