watchers_helper.rb
82 lines
| 3.2 KiB
| text/x-ruby
|
RubyLexer
|
r8090 | # encoding: utf-8 | ||
# | ||||
|
r5200 | # Redmine - project management software | ||
|
r10939 | # Copyright (C) 2006-2013 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={}) | ||
|
r11104 | ActiveSupport::Deprecation.warn "#watcher_tag is deprecated and will be removed in Redmine 3.0. Use #watcher_link instead." | ||
watcher_link(object, user) | ||||
|
r527 | end | ||
|
r6800 | |||
|
r11109 | def watcher_link(objects, user) | ||
return '' unless user && user.logged? | ||||
objects = Array.wrap(objects) | ||||
watched = objects.any? {|object| object.watched_by?(user)} | ||||
css = [watcher_css(objects), watched ? 'icon icon-fav' : 'icon icon-fav-off'].join(' ') | ||||
text = watched ? l(:button_unwatch) : l(:button_watch) | ||||
|
r11113 | url = watch_path( | ||
|
r11109 | :object_type => objects.first.class.to_s.underscore, | ||
:object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort) | ||||
|
r11113 | ) | ||
method = watched ? 'delete' : 'post' | ||||
|
r11109 | |||
|
r11113 | link_to text, url, :remote => true, :method => method, :class => css | ||
|
r527 | end | ||
|
r6800 | |||
|
r5200 | # Returns the css class used to identify watch links for a given +object+ | ||
|
r11109 | def watcher_css(objects) | ||
objects = Array.wrap(objects) | ||||
id = (objects.size == 1 ? objects.first.id : 'bulk') | ||||
"#{objects.first.class.to_s.underscore}-#{id}-watcher" | ||||
|
r5200 | 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) | ||
|
r9517 | content = ''.html_safe | ||
|
r3465 | lis = object.watcher_users.collect do |user| | ||
|
r9517 | s = ''.html_safe | ||
s << avatar(user, :size => "16").to_s | ||||
s << link_to_user(user, :class => 'user') | ||||
|
r2863 | if remove_allowed | ||
url = {:controller => 'watchers', | ||||
:action => 'destroy', | ||||
:object_type => object.class.to_s.underscore, | ||||
:object_id => object.id, | ||||
:user_id => user} | ||||
|
r9517 | s << ' ' | ||
|
r9854 | s << link_to(image_tag('delete.png'), url, | ||
|
r11214 | :remote => true, :method => 'delete', :class => "delete") | ||
|
r2863 | end | ||
|
r11213 | content << content_tag('li', s, :class => "user-#{user.id}") | ||
|
r3465 | end | ||
|
r11213 | content.present? ? content_tag('ul', content, :class => 'watchers') : content | ||
|
r1711 | end | ||
|
r9134 | |||
def watchers_checkboxes(object, users, checked=nil) | ||||
users.map do |user| | ||||
c = checked.nil? ? object.watched_by?(user) : checked | ||||
tag = check_box_tag 'issue[watcher_user_ids][]', user.id, c, :id => nil | ||||
|
r9329 | content_tag 'label', "#{tag} #{h(user)}".html_safe, | ||
:id => "issue_watcher_user_ids_#{user.id}", | ||||
:class => "floating" | ||||
end.join.html_safe | ||||
|
r9134 | end | ||
|
r450 | end | ||