watchers_helper.rb
75 lines
| 2.9 KiB
| text/x-ruby
|
RubyLexer
|
r8090 | # encoding: utf-8 | ||
# | ||||
|
r5200 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 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} | ||
|
r9854 | link_to((watched ? l(:button_unwatch) : l(:button_watch)), url, | ||
:remote => true, :method => 'post', :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) | ||
|
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, | ||
:remote => true, :method => 'post', :style => "vertical-align: middle", :class => "delete") | ||||
|
r2863 | end | ||
|
r9517 | content << content_tag('li', s) | ||
|
r3465 | end | ||
|
r9517 | content.present? ? content_tag('ul', content) : 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 | ||