diff --git a/app/controllers/auto_completes_controller.rb b/app/controllers/auto_completes_controller.rb index fd6b58ac..27226ea8 100644 --- a/app/controllers/auto_completes_controller.rb +++ b/app/controllers/auto_completes_controller.rb @@ -37,9 +37,17 @@ class AutoCompletesController < ApplicationController if params[:remove_group_members].present? @group = Group.find(params[:remove_group_members]) @removed_users = @group.users - else - @removed_users = [] end + + if params[:remove_watchers].present? && params[:klass].present? + watcher_class = params[:klass].constantize + if watcher_class.included_modules.include?(Redmine::Acts::Watchable) # check class is a watching class + @object = watcher_class.find(params[:remove_watchers]) + @removed_users = @object.watcher_users + end + end + + @removed_users ||= [] @users = User.active.like(params[:q]).find(:all, :limit => 100) - @removed_users render :layout => false diff --git a/app/views/watchers/_watchers.rhtml b/app/views/watchers/_watchers.rhtml index f05e551d..741366cd 100644 --- a/app/views/watchers/_watchers.rhtml +++ b/app/views/watchers/_watchers.rhtml @@ -12,12 +12,12 @@ :object_id => watched}, :method => :post, :html => {:id => 'new-watcher-form', :style => 'display:none;'}) do |f| %> - <% users = User.active.find(:all, :limit => 10) %> + <% users = User.active.find(:all, :limit => 25) - watched.watcher_users %>

<%= label_tag "user_search", l(:label_user_search) %><%= text_field_tag 'user_search', nil, :style => "width:98%;" %>

<%= observe_field(:user_search, :frequency => 0.5, :update => :users, - :url => auto_complete_users_path, + :url => auto_complete_users_path(:remove_watchers => watched.id, :klass => watched.class), :with => 'q') %> diff --git a/test/functional/auto_completes_controller_test.rb b/test/functional/auto_completes_controller_test.rb index fb49e491..4ee6482d 100644 --- a/test/functional/auto_completes_controller_test.rb +++ b/test/functional/auto_completes_controller_test.rb @@ -109,5 +109,23 @@ class AutoCompletesControllerTest < ActionController::TestCase assert_select "input[type=checkbox][value=?]", @firstname.id, :count => 0 end end + + context "restrict by removing issue watchers" do + setup do + @issue = Issue.find(2) + @issue.add_watcher(@login) + @issue.add_watcher(@firstname) + get :users, :q => 'complete', :remove_watchers => @issue.id, :klass => 'Issue' + end + + should_respond_with :success + + should "not include existing watchers" do + assert_select "input[type=checkbox][value=?]", @lastname.id + + assert_select "input[type=checkbox][value=?]", @login.id, :count => 0 + assert_select "input[type=checkbox][value=?]", @firstname.id, :count => 0 + end + end end end