watchers_helper.rb
66 lines
| 2.7 KiB
| text/x-ruby
|
RubyLexer
|
r8090 | # encoding: utf-8 | ||
# | ||||
|
r5200 | # Redmine - project management software | ||
# Copyright (C) 2006-2011 Jean-Philippe Lang | ||||
|
r450 | # | ||
# 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. | ||||
|
r6800 | # | ||
|
r450 | # 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. | ||||
|
r6800 | # | ||
|
r450 | # 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 | ||||
|
r6800 | |||
|
r5200 | def watcher_tag(object, user, options={}) | ||
content_tag("span", watcher_link(object, user), :class => watcher_css(object)) | ||||
|
r527 | end | ||
|
r6800 | |||
|
r5200 | def watcher_link(object, user) | ||
|
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, | ||
|
r5200 | :object_id => object.id} | ||
|
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')) | ||||
|
r6800 | |||
|
r527 | end | ||
|
r6800 | |||
|
r5200 | # Returns the css class used to identify watch links for a given +object+ | ||
def watcher_css(object) | ||||
"#{object.class.to_s.underscore}-#{object.id}-watcher" | ||||
end | ||||
|
r6800 | |||
|
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 | ||
|
r8189 | content_tag :li, s.html_safe | ||
|
r3465 | end | ||
|
r8189 | (lis.empty? ? "" : "<ul>#{ lis.join("\n") }</ul>").html_safe | ||
|
r1711 | end | ||
|
r450 | end | ||