Project

General

Profile

Feature #4511 » 0004-Use-scope-assignable_watchers.patch

Marius BĂLTEANU, 2020-04-25 09:31

View differences:

app/controllers/watchers_controller.rb
43 43
      user_ids << params[:user_id]
44 44
    end
45 45
    user_ids = user_ids.flatten.compact.uniq
46
    users = Principal.active.visible.where(:id => user_ids).where(:users => {:type => ['User', 'Group']}).to_a
46
    users = Principal.assignable_watchers.where(:id => user_ids).to_a
47 47
    users.each do |user|
48 48
      @watchables.each do |watchable|
49 49
        Watcher.create(:watchable => watchable, :user => user)
......
59 59
  def append
60 60
    if params[:watcher]
61 61
      user_ids = params[:watcher][:user_ids] || [params[:watcher][:user_id]]
62
      @users = Principal.active.visible.where(:id => user_ids).where(:users => {:type => ['User', 'Group']}).to_a
62
      @users = Principal.assignable_watchers.where(:id => user_ids).to_a
63 63
    end
64 64
    if @users.blank?
65 65
      head 200
......
122 122
  def users_for_new_watcher
123 123
    scope = nil
124 124
    if params[:q].blank? && @project.present?
125
      scope = @project.principals.where(:users => {:type => ['User', 'Group']})
125
      scope = @project.principals.assignable_watchers
126 126
    else
127
      scope = Principal.where(:users => {:type => ['User', 'Group']}).limit(100)
127
      scope = Principal.assignable_watchers.limit(100)
128 128
    end
129
    users = scope.active.visible.sorted.like(params[:q]).to_a
129
    users = scope.sorted.like(params[:q]).to_a
130 130
    if @watchables && @watchables.size == 1
131 131
      users -= @watchables.first.watcher_users
132 132
    end
app/helpers/issues_helper.rb
364 364
  # on the new issue form
365 365
  def users_for_new_issue_watchers(issue)
366 366
    users = issue.watcher_users.select{|u| u.status == User::STATUS_ACTIVE}
367
    project_principals = issue.project.principals.where(:users => {:type => ['User', 'Group']}).limit(21)
368
    if project_principals.size <= 20
369
      users += project_principals.sort
367
    assignable_watchers = issue.project.principals.assignable_watchers.limit(21)
368
    if assignable_watchers.size <= 20
369
      users += assignable_watchers.sort
370 370
    end
371 371
    users.uniq
372 372
  end
app/models/principal.rb
114 114
  }
115 115
  scope :sorted, lambda { order(*Principal.fields_for_order_statement)}
116 116

  
117
  # Principals that can be added as watchers
118
  scope :assignable_watchers, lambda { active.visible.where(:type => ['User', 'Group']) }
119

  
117 120
  before_create :set_default_empty_values
118 121
  before_destroy :nullify_projects_default_assigned_to
119 122

  
lib/plugins/acts_as_watchable/lib/acts_as_watchable.rb
31 31

  
32 32
        # Returns an array of users that are proposed as watchers
33 33
        def addable_watcher_users
34
          users = self.project.principals.where(:users => {:type => ['User', 'Group']}).sort - self.watcher_users
34
          users = self.project.principals.assignable_watchers.sort - self.watcher_users
35 35
          if respond_to?(:visible?)
36 36
            users.reject! {|user| user.is_a?(User) && !visible?(user)}
37 37
          end
(8-8/10)