Feature #4511 » 0004-Use-scope-assignable_watchers.patch
| 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 |