summaryrefslogtreecommitdiffstats
path: root/app/controllers/watchers_controller.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-08-03 09:14:43 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-08-03 09:14:43 +0000
commita332e0a4febeb36aac41f8d5762d18f4cbbf115c (patch)
tree8e0883bbdbfd7bfca332880da6f1739362b8c579 /app/controllers/watchers_controller.rb
parent6034067d8623e87ef1391962b882fcc93196bf4b (diff)
downloadredmine-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.rb52
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