@@ -25,6 +25,8 class BoardsController < ApplicationController | |||
|
25 | 25 | include MessagesHelper |
|
26 | 26 | helper :sort |
|
27 | 27 | include SortHelper |
|
28 | helper :watchers | |
|
29 | include WatchersHelper | |
|
28 | 30 | |
|
29 | 31 | def index |
|
30 | 32 | @boards = @project.boards |
@@ -27,6 +27,8 class IssuesController < ApplicationController | |||
|
27 | 27 | include IfpdfHelper |
|
28 | 28 | helper :issue_relations |
|
29 | 29 | include IssueRelationsHelper |
|
30 | helper :watchers | |
|
31 | include WatchersHelper | |
|
30 | 32 | |
|
31 | 33 | def show |
|
32 | 34 | @status_options = @issue.status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker) if logged_in_user |
@@ -20,19 +20,30 class WatchersController < ApplicationController | |||
|
20 | 20 | before_filter :require_login, :find_project, :check_project_privacy |
|
21 | 21 | |
|
22 | 22 | def add |
|
23 |
|
|
|
24 | redirect_to :controller => 'issues', :action => 'show', :id => @issue | |
|
23 | user = logged_in_user | |
|
24 | @watched.add_watcher(user) | |
|
25 | respond_to do |format| | |
|
26 | format.html { render :text => 'Watcher added.', :layout => true } | |
|
27 | format.js { render(:update) {|page| page.replace_html 'watcher', watcher_link(@watched, user)} } | |
|
28 | end | |
|
25 | 29 | end |
|
26 | 30 | |
|
27 | 31 | def remove |
|
28 |
|
|
|
29 | redirect_to :controller => 'issues', :action => 'show', :id => @issue | |
|
32 | user = logged_in_user | |
|
33 | @watched.remove_watcher(user) | |
|
34 | respond_to do |format| | |
|
35 | format.html { render :text => 'Watcher removed.', :layout => true } | |
|
36 | format.js { render(:update) {|page| page.replace_html 'watcher', watcher_link(@watched, user)} } | |
|
37 | end | |
|
30 | 38 | end |
|
31 | 39 | |
|
32 | 40 | private |
|
33 | ||
|
34 | 41 | def find_project |
|
35 | @issue = Issue.find(params[:issue_id]) | |
|
36 | @project = @issue.project | |
|
42 | klass = Object.const_get(params[:object_type].camelcase) | |
|
43 | return false unless klass.respond_to?('watched_by') | |
|
44 | @watched = klass.find(params[:object_id]) | |
|
45 | @project = @watched.project | |
|
46 | rescue | |
|
47 | render_404 | |
|
37 | 48 | end |
|
38 | 49 | end |
@@ -16,4 +16,21 | |||
|
16 | 16 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
17 | 17 | |
|
18 | 18 | module WatchersHelper |
|
19 | def watcher_tag(object, user) | |
|
20 | content_tag("span", watcher_link(object, user), :id => 'watcher') | |
|
21 | end | |
|
22 | ||
|
23 | def watcher_link(object, user) | |
|
24 | return '' unless user && object.respond_to?('watched_by?') | |
|
25 | watched = object.watched_by?(user) | |
|
26 | url = {:controller => 'watchers', | |
|
27 | :action => (watched ? 'remove' : 'add'), | |
|
28 | :object_type => object.class.to_s.underscore, | |
|
29 | :object_id => object.id} | |
|
30 | link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)), | |
|
31 | {:url => url}, | |
|
32 | :href => url_for(url), | |
|
33 | :class => (watched ? 'icon icon-fav' : 'icon icon-fav-off')) | |
|
34 | ||
|
35 | end | |
|
19 | 36 | end |
@@ -21,6 +21,7 class Board < ActiveRecord::Base | |||
|
21 | 21 | has_many :messages, :dependent => :delete_all, :order => "#{Message.table_name}.created_on DESC" |
|
22 | 22 | belongs_to :last_message, :class_name => 'Message', :foreign_key => :last_message_id |
|
23 | 23 | acts_as_list :scope => :project_id |
|
24 | acts_as_watchable | |
|
24 | 25 | |
|
25 | 26 | validates_presence_of :name, :description |
|
26 | 27 | validates_length_of :name, :maximum => 30 |
@@ -1,5 +1,6 | |||
|
1 | 1 | <div class="contextual"> |
|
2 | 2 | <%= link_to l(:label_message_new), {:controller => 'messages', :action => 'new', :board_id => @board}, :class => "icon icon-add" %> |
|
3 | <%= watcher_tag(@board, @logged_in_user) %> | |
|
3 | 4 | </div> |
|
4 | 5 | |
|
5 | 6 | <h2><%=h @board.name %></h2> |
@@ -58,13 +58,7 end %> | |||
|
58 | 58 | <div class="contextual"> |
|
59 | 59 | <%= link_to_if_authorized l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue}, :class => 'icon icon-edit' %> |
|
60 | 60 | <%= link_to_if_authorized l(:button_log_time), {:controller => 'timelog', :action => 'edit', :issue_id => @issue}, :class => 'icon icon-time' %> |
|
61 |
<% |
|
|
62 | <% if @issue.watched_by?(@logged_in_user) %> | |
|
63 | <%= link_to l(:button_unwatch), {:controller => 'watchers', :action => 'remove', :issue_id => @issue}, :class => 'icon icon-fav' %> | |
|
64 | <% else %> | |
|
65 | <%= link_to l(:button_watch), {:controller => 'watchers', :action => 'add', :issue_id => @issue}, :class => 'icon icon-fav-off' %> | |
|
66 | <% end %> | |
|
67 | <% end %> | |
|
61 | <%= watcher_tag(@issue, @logged_in_user) %> | |
|
68 | 62 | <%= link_to_if_authorized l(:button_move), {:controller => 'projects', :action => 'move_issues', :id => @project, "issue_ids[]" => @issue.id }, :class => 'icon icon-move' %> |
|
69 | 63 | <%= link_to_if_authorized l(:button_delete), {:controller => 'issues', :action => 'destroy', :id => @issue}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> |
|
70 | 64 | </div> |
General Comments 0
You need to be logged in to leave comments.
Login now