blob: d12fce9bacafa262e00ed22ca017280f4d0e3f03 [file] [log] [blame]
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
# TODO rails 3 copy van mine? in application controller
def session_user
User.find(session['user']) if session and session['user']
end
# TODO rails 3 copy van mine? in application controller
def mine?(obj)
if obj.class.name == User.name
obj.id == session_user.id
else
obj.user_id == session_user.id
end
end
# TODO rails 3 copy van mine? in application controller
def user?
if session and session['user']
#logger.debug("session['user']: #{session['user'].inspect}")
true
else
false
end
end
# TODO rails 3 copy van mine? in application controller
def admin?
if user? and session_user.admin?
true
else
false
end
end
# TODO rails 3 copy van mine? in application controller
def cadmin? # TODO Rails 3
if user? and session_user.cadmin?
true
else
false
end
end
# TODO a better name for this method
def menulink_to(*args)
logger.debug("Creating menulink #{args.inspect}, #{params[:action]}")
current = @current || params[:action].capitalize
s=' class="current"' if args[0].downcase == current.downcase
if current == 'Edit'
txt = "Are you sure? By navigating away from the editor any unsaved changes will be lost."
if args.size == 3
args.last[:confirm] = txt
else
args << {:confirm => txt}
end
end
args[0] = raw "<span>#{args[0]}</span>"
raw "<li#{s}>" + link_to(*args) + '</li>'
end
# Replacement error_messages_for, this was deprecated in Rails 3
def error_messages_for(obj)
if obj.errors.any?
raw("<div class=\"errorExplanation\" id=\"errorExplanation\">\n"+
"<h2>#{obj.errors.size} errors prohibited this #{obj.class.name.downcase} from being saved</h2>" +
"<ul><li>" + obj.errors.full_messages.join("</li>\n<li>") +
"</li>\n</ul></div>")
else
""
end
end
# Helper #tinymce in your view to render textarea's as TinyMCE textarea's
def tinymce(theme = 'simple')
@tinymce = theme
end
# Link To for a Page
def link_to_page(page)
link_to(raw(page.presentation_name + ' ' + image_tag("link.gif",:border => 0,:title => "Activate page \"#{page.presentation_name}\" in site \"#{page.site.title}\"")), page.url)
end
# Helper #link_to_notification_toggle
def link_to_notification_toggle(id, notification_type, user = session_user)
html = []
notification = Notification.find(:first, :conditions => ["user_id=? and page_id=? and notification_type=?", user.id, id, notification_type])
if session_user && (mine?(user) || cadmin?)
div_id = "notification_" + id.to_s + "_" + notification_type
html << raw("<span id=\"" + div_id + "\">")
txt = raw "<input type=checkbox>notify me of new comments and changes"
txt = raw "<input type=checkbox checked>notify me of new comments and changes" if notification
html << link_to(txt,
url_for(:div_id => div_id, :controller => "users", :action => "notification",
:id => id,:user_id => user.id, # , :site_id => page.site.id
:notification_type=> notification_type), :remote => true) # TODO Rails 3 was link_to_remote
html << raw("</span>")
else
html << raw("<input type=checkbox #{'checked' if notification} DISABLED>notify me of new comments and changes")
end
raw html.join("\n")
end
def link_to_done_toggle(record)
class_name = 'DaText'
class_name = record.class.name if ['Version','Upload', 'UserVersion', 'BaselineProcessVersion', 'Comment', 'Feedback'].include?(record.class.name)
version_txt = if record.class.name == 'UserVersion' or record.class.name == 'BaselineProcessVersion'
"#{record.version} "
else
''
end
html = []
html << "<span id=\"" + div_id(record, "done_toggle") + "\">"
if record.done == 'Y'
title = 'Click to mark this record \'todo\''
html4checkbox = raw "<input type=checkbox checked>"
else
title = 'Check to mark this record \'done\''
html4checkbox = raw "<input type=checkbox>"
end
if !session["user"] || !admin?
html << html4checkbox.gsub('type=checkbox', 'type=checkbox disabled=disabled')
else
html << link_to(html4checkbox, url_for(:controller => 'review',
:action => "toggle_done", :id => record.id, :class_name => class_name),
:remote => true, :title => "Mark #{class_name} #{version_txt}Todo/Done")
end
html << "</span>"
raw html.join("\n")
end
# Helper #link_to_reviewer to set the reviewer. See ReviewController.
def link_to_reviewer(record)
url = []
url << "<span id=\"" + div_id(record, "reviewer") + "\">"
if !session["user"]
if record.reviewer_id != nil
url << link_to_user(record.reviewer)
end
else
if record.reviewer_id == nil
if admin?
url << link_to("_______", url_for(:controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class, :div_id => div_id(record, "reviewer")), :remote => true ) # TODO rails3 was link_to_remote
else
url << ""
end
else
url << link_to(record.reviewer.name, url_for(:controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class, :div_id => div_id(record, "reviewer")), :remote => true ) # TODO rails3 was link_to_remote
end
url << "</span> "
end
raw url.join("\n")
end
# link_to helper method for a Version. Renders a link with a given prefix (often "version") with possibly a lot of clickable images displaying status
def link_to_version(version,urlprefix)
link = []
# TODO below incorrect
urlprefix = 'CHECKOUT' if version.version.nil?
link << link_to(urlprefix + " " + version.version.to_s,{:controller => 'versions',:action => 'show',:id => version.id}, :title => "Version #{version.version}")
if !version.version_id
else
source_version = version.source_version
if version.wiki_id != source_version.wiki_id
from_site = source_version.wiki
to_site = version.wiki
link << link_to(image_tag('site.gif', :border => 0, :title => 'Based on version ' + source_version.version.to_s + " from site " + from_site.title) ,:controller => 'versions',:action => 'show',:id => source_version.id)
else
if version.page_id != source_version.page_id
base_page = source_version.page
link << link_to(image_tag('new.png', :border => 0, :title => 'New page based on ' + source_version.page.presentation_name + " version " + source_version.version.to_s) ,:controller => 'versions',:action => 'show',:id => source_version.id)
else
if version.version != source_version.version + 1
link << " (based on "
link << link_to(" version " + source_version.version.to_s,:controller => 'versions',:action => 'show',:id => source_version.id)
link << ")"
end
end
end
end
if version.current
link << image_tag('harvest.gif', :title => 'This version is the current version')
end
checkout = version.checkout
if checkout
user = checkout.user
link << link_to(image_tag('checkout.gif', :border => 0, :title =>'Version is checked-out by ' + user.name ),:controller => 'versions',:action => 'show',:id => version.id)
link << " "
if user == session_user || cadmin? # TODO this will cause too much database request
link << link_to(image_tag('edit.gif', :border => 0, :title =>'Version is checked-out by you. Click to continue editing.' ),:controller => 'pages',:action => 'edit',:checkout_id => checkout.id)
end
end
link << link_to(image_tag('compare.gif', :border => 0, :title =>'Compare with previous version' ),{:controller => 'versions', :action => 'diff',:id => version.id}, :title => "Compare version #{version.version} with previous")
link << link_to(image_tag('txt.gif', :border => 0, :title =>'View as plain text' ), {:controller => 'versions',:action => 'text',:id => version.id})
raw link.join("\n")
end
# Helper for a Version
def link_to_version2(version)
link_to_page(version.page) + ' ' + link_to_version(version,'version')
end
# Helper for a Site
def link_to_site(site)
img = "link.gif"
img = "link_gs.gif" if !site.wiki?
ttl = site.title
ttl = site.title + ' (OBSOLETE)' unless site.obsolete_on.nil?
link = link_to(site.title,:controller => 'sites',:action => 'description',:id => site.id) #if !admin?
link += raw(' ' + link_to(image_tag(img,:border => 0,:title => "Activate site \"#{site.title}\""), site.url,
:title => "Activate site \"#{site.title}\"", :id => "#{site.class.name.downcase}-#{site.folder}", :class => 'activate-site', 'data-popup' => 'true'))
if site.type == 'BaselineProcess'
link += raw(' ' + link_to(image_tag("csv.gif", :border => 0, :title => "Download content information as CSV"),
{:controller => "sites", :action => "csv", :id => site.id}, :method => :post ))
end
link
end
# link_to helper method for a User
def link_to_user(user)
link_to(user.name,:controller => 'users',:action => 'show',:id => user.id) + image_tag("user" + user.admin + '.png', :border => 0, :title => "")
end
# link_to helper method for a Comment
def link_to_comment(comment)
link_to(truncate(strip_tags(comment.text)), :controller => 'pages', :action => 'discussion', :site_folder => comment.site.folder, :id => comment.page.id)
end
# TODO vervangen door div_for
# returns unique div id from a record in a page
def div_id(record, call_id)
return record.class.to_s + record.id.to_s + "_" + call_id
end
end