watchers_helper.rb
69 lines
| 2.8 KiB
| text/x-ruby
|
RubyLexer
|
r450 | # redMine - project management software | ||
# Copyright (C) 2006-2007 Jean-Philippe Lang | ||||
# | ||||
# This program is free software; you can redistribute it and/or | ||||
# modify it under the terms of the GNU General Public License | ||||
# as published by the Free Software Foundation; either version 2 | ||||
# of the License, or (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
module WatchersHelper | ||||
|
r3005 | |||
# Valid options | ||||
# * :id - the element id | ||||
# * :replace - a string or array of element ids that will be | ||||
# replaced | ||||
def watcher_tag(object, user, options={:replace => 'watcher'}) | ||||
id = options[:id] | ||||
id ||= options[:replace] if options[:replace].is_a? String | ||||
content_tag("span", watcher_link(object, user, options), :id => id) | ||||
|
r527 | end | ||
|
r3005 | # Valid options | ||
# * :replace - a string or array of element ids that will be | ||||
# replaced | ||||
def watcher_link(object, user, options={:replace => 'watcher'}) | ||||
|
r663 | return '' unless user && user.logged? && object.respond_to?('watched_by?') | ||
|
r527 | watched = object.watched_by?(user) | ||
url = {:controller => 'watchers', | ||||
|
r1711 | :action => (watched ? 'unwatch' : 'watch'), | ||
|
r527 | :object_type => object.class.to_s.underscore, | ||
|
r3005 | :object_id => object.id, | ||
:replace => options[:replace]} | ||||
|
r527 | link_to_remote((watched ? l(:button_unwatch) : l(:button_watch)), | ||
{:url => url}, | ||||
:href => url_for(url), | ||||
:class => (watched ? 'icon icon-fav' : 'icon icon-fav-off')) | ||||
end | ||||
|
r1711 | |||
# Returns a comma separated list of users watching the given object | ||||
def watchers_list(object) | ||||
|
r2863 | remove_allowed = User.current.allowed_to?("delete_#{object.class.name.underscore}_watchers".to_sym, object.project) | ||
|
r3465 | lis = object.watcher_users.collect do |user| | ||
s = avatar(user, :size => "16").to_s + link_to_user(user, :class => 'user').to_s | ||||
|
r2863 | if remove_allowed | ||
url = {:controller => 'watchers', | ||||
:action => 'destroy', | ||||
:object_type => object.class.to_s.underscore, | ||||
:object_id => object.id, | ||||
:user_id => user} | ||||
s += ' ' + link_to_remote(image_tag('delete.png'), | ||||
{:url => url}, | ||||
:href => url_for(url), | ||||
|
r3465 | :style => "vertical-align: middle", | ||
:class => "delete") | ||||
|
r2863 | end | ||
|
r3465 | "<li>#{ s }</li>" | ||
end | ||||
lis.empty? ? "" : "<ul>#{ lis.join("\n") }</ul>" | ||||
|
r1711 | end | ||
|
r450 | end | ||