diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-08-03 09:14:43 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2008-08-03 09:14:43 +0000 |
commit | a332e0a4febeb36aac41f8d5762d18f4cbbf115c (patch) | |
tree | 8e0883bbdbfd7bfca332880da6f1739362b8c579 /app/controllers/watchers_controller.rb | |
parent | 6034067d8623e87ef1391962b882fcc93196bf4b (diff) | |
download | redmine-a332e0a4febeb36aac41f8d5762d18f4cbbf115c.tar.gz redmine-a332e0a4febeb36aac41f8d5762d18f4cbbf115c.zip |
Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1712 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/controllers/watchers_controller.rb')
-rw-r--r-- | app/controllers/watchers_controller.rb | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb index 014779b7f..a44686d3f 100644 --- a/app/controllers/watchers_controller.rb +++ b/app/controllers/watchers_controller.rb @@ -17,30 +17,38 @@ class WatchersController < ApplicationController layout 'base' - before_filter :require_login, :find_project, :check_project_privacy + before_filter :find_project + before_filter :require_login, :check_project_privacy, :only => [:watch, :unwatch] + before_filter :authorize, :only => :new - def add - user = User.current - @watched.add_watcher(user) - respond_to do |format| - format.html { redirect_to :back } - format.js { render(:update) {|page| page.replace_html 'watcher', watcher_link(@watched, user)} } - end - rescue RedirectBackError - render :text => 'Watcher added.', :layout => true + verify :method => :post, + :only => [ :watch, :unwatch ], + :render => { :nothing => true, :status => :method_not_allowed } + + def watch + set_watcher(User.current, true) + end + + def unwatch + set_watcher(User.current, false) end - def remove - user = User.current - @watched.remove_watcher(user) + def new + @watcher = Watcher.new(params[:watcher]) + @watcher.watchable = @watched + @watcher.save if request.post? respond_to do |format| format.html { redirect_to :back } - format.js { render(:update) {|page| page.replace_html 'watcher', watcher_link(@watched, user)} } + format.js do + render :update do |page| + page.replace_html 'watchers', :partial => 'watchers/watchers', :locals => {:watched => @watched} + end + end end - rescue RedirectBackError - render :text => 'Watcher removed.', :layout => true + rescue ::ActionController::RedirectBackError + render :text => 'Watcher added.', :layout => true end - + private def find_project klass = Object.const_get(params[:object_type].camelcase) @@ -50,4 +58,14 @@ private rescue render_404 end + + def set_watcher(user, watching) + @watched.set_watcher(user, watching) + respond_to do |format| + format.html { redirect_to :back } + format.js { render(:update) {|page| page.replace_html 'watcher', watcher_link(@watched, user)} } + end + rescue ::ActionController::RedirectBackError + render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true + end end |