diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb index e6c4d31..1eabf39 100644 --- a/app/controllers/watchers_controller.rb +++ b/app/controllers/watchers_controller.rb @@ -17,6 +17,8 @@ class WatchersController < ApplicationController before_filter :require_login, :find_watchables, :only => [:watch, :unwatch] + before_filter :find_project, :only => [:new, :create, :append, :destroy, :autocomplete_for_user, :watch, :unwatch] + before_filter :authorize, :only => [:new, :create, :append, :destroy, :autocomplete_for_user] def watch set_watcher(@watchables, User.current, true) @@ -26,7 +28,6 @@ class WatchersController < ApplicationController set_watcher(@watchables, User.current, false) end - before_filter :find_project, :authorize, :only => [:new, :create, :append, :destroy, :autocomplete_for_user] accept_api_auth :create, :destroy def new @@ -40,7 +41,8 @@ class WatchersController < ApplicationController else user_ids << params[:user_id] end - user_ids.flatten.compact.uniq.each do |user_id| + user_ids = user_ids.flatten.compact.uniq.map(&:to_i) & users_for_new_watcher.map(&:id) + user_ids.each do |user_id| Watcher.create(:watchable => @watched, :user_id => user_id) end respond_to do |format| @@ -116,10 +118,12 @@ class WatchersController < ApplicationController def users_for_new_watcher users = [] - if params[:q].blank? && @project.present? - users = @project.users.sorted - else - users = User.active.sorted.like(params[:q]).limit(100) + if @project.present? + if params[:q].blank? + users = @project.users.sorted + else + users = @project.users.sorted.like(params[:q]).limit(10) + end end if @watched users -= @watched.watcher_users diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 28f912b..b8fcc8a 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -52,6 +52,7 @@ module WatchersHelper def watchers_list(object) remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project) content = ''.html_safe + object.reload lis = object.watcher_users.collect do |user| s = ''.html_safe s << avatar(user, :size => "16").to_s diff --git a/app/views/watchers/_set_watcher.js.erb b/app/views/watchers/_set_watcher.js.erb index e5cdc4f..4090ef6 100644 --- a/app/views/watchers/_set_watcher.js.erb +++ b/app/views/watchers/_set_watcher.js.erb @@ -1,2 +1,3 @@ <% selector = ".#{watcher_css(watched)}" %> $("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")}); +$('#watchers').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => watched.first})) %>'); diff --git a/app/views/watchers/_watchers.html.erb b/app/views/watchers/_watchers.html.erb index 697d0bd..a94f3ad 100644 --- a/app/views/watchers/_watchers.html.erb +++ b/app/views/watchers/_watchers.html.erb @@ -1,3 +1,4 @@ +<% watched.reload %> <% if User.current.allowed_to?(:add_issue_watchers, @project) %>
<%= link_to l(:button_add), diff --git a/app/views/watchers/destroy.js.erb b/app/views/watchers/destroy.js.erb index e4d8565..9da20a3 100644 --- a/app/views/watchers/destroy.js.erb +++ b/app/views/watchers/destroy.js.erb @@ -1 +1,3 @@ $('#watchers').html('<%= escape_javascript(render(:partial => 'watchers/watchers', :locals => {:watched => @watched})) %>'); +<% selector = ".#{watcher_css(@watched)}" %> +$("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(@watched, User.current) %>")});