blob: eed817de68b419c752a3211aab617d0a7ce040d3 [file] [log] [blame]
# Methods added to this helper will be available to all templates in the application.
#--######################################################################
# Copyright (c) 2006 Logica
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#
# Onno van der Straaten:: initial implementation
#++######################################################################
# {Copyright (c) 2006 Logica}[link:files/COPYRIGHT.html]
module ApplicationHelper
# Helper to simplify In-Place Editing
def editable_content(options)
options[:content] = { :element => 'span' }.merge(options[:content])
options[:url] = {}.merge(options[:url])
options[:ajax] = { :okText => 'Save', :cancelText => 'Cancel'}.merge(options[:ajax] || {})
script = Array.new
script << 'new Ajax.InPlaceEditor('
script << " '#{options[:content][:options][:id]}',"
script << " '#{url_for(options[:url])}',"
script << " {"
script << options[:ajax].map{ |key, value| "#{key.to_s}: #{value}" }.join(", ")
script << " }"
script << ")"
content_tag(
options[:content][:element],
options[:content][:text],
options[:content][:options]
) + javascript_tag( script.join)
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] = "<span>#{args[0]}</span>"
"<li#{s}>" + link_to(*args) + '</li>'
end
class TabularFormBuilder < ActionView::Helpers::FormBuilder
(field_helpers - %w(radio_button hidden_field)).each do |selector|
src = <<-END_SRC
def #{selector}(field, options = {})
@template.content_tag("tr",
@template.content_tag("th", field.to_s.humanize, :width => 200) +
@template.content_tag("td", super))
end
END_SRC
class_eval src, __FILE__, __LINE__
end
end
def tabular_form_for(name, object = nil, options = nil, &proc)
if @table_heading
concat("<div>#{@table_heading}</div>", proc.binding)
else
concat("<div>#{name.to_s.humanize}</div>", proc.binding)
end
concat("<div class=\"sectionContent\"><table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"sectionTable\"><tr valign=\"top\"><td class=\"sectionTableCell\"><table>",
proc.binding)
form_for(name,
object,
(options||{}).merge(:builder => TabularFormBuilder),
&proc)
concat("</table></td></tr></table></div>", proc.binding)
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(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(page, notification_type, user = session['user'])
returning html = [] do
notification = Notification.find(:first, :conditions => ["user_id=? and page_id=? and notification_type=?", user.id, page.id, notification_type])
if session['user'] && (mine?(user) || cadmin?)
div_id = "notification_" + page.id.to_s + "_" + notification_type
html << "<span id=\"" + div_id + "\">"
txt = "<input type=checkbox>notify me of new comments and changes"
txt = "<input type=checkbox checked>notify me of new comments and changes" if notification
html << link_to_remote(txt, :update => div_id, :url => {:controller => "users", :action => "notification", :page_id => page.id, :site_id => page.site.id,:user_id => user.id, :notification_type=> notification_type}, :method => 'post')
html << "</span>"
else
html << "<input type=checkbox #{'checked' if notification} DISABLED>notify me of new comments and changes"
end
end.join("\n")
end
def link_to_change_report_notification_toggle(type = 'D', user = session['user'])
returning html = [] do
if !user.nil? && (mine?(user) || cadmin?)
checked = ""
checked = "checked" if (type == 'D' && user.notify_daily == 1) || (type == 'M' && user.notify_monthly == 1) || (type == 'W' && user.notify_weekly == 1) || (type == 'I' && user.notify_immediate == 1)
txt = "<input type=checkbox #{checked} DISABLED> Daily" if type == 'D'
txt = "<input type=checkbox #{checked} DISABLED> Monthly" if type == 'M'
txt = "<input type=checkbox #{checked} DISABLED> Weekly" if type == 'W'
txt = "<input type=checkbox #{checked} DISABLED> Immediate" if type == 'I'
div_id = "change_report_" + user.id.to_s + "_" + type
#checked = "checked" if type == 'M' && user.notify_monthly == "1"
#checked = "checked" if type == 'D' && user.notify_weekly == "1"
if mine?(user) || cadmin?
html << "<span id=\"" + div_id + "\">"
html << link_to_remote(txt.gsub('DISABLED', ''), :update => div_id, :url => {:controller => "users", :action => "toggle_change_report_notification", :type => type, :user_id => user.id}, :method => 'post')
html << "</span>"
else
html << txt
end
else
html << "ERROR: No user specified"
end
end.join("\n")
end
def link_to_done_toggle(record)
class_name = 'DaText'
class_name = record.class.name if ['Version','Upload', 'UserVersion', 'BaselineProcessVersion'].include?(record.class.name)
returning html = [] do
html << "<span id=\"" + div_id(record, "done_toggle") + "\">"
if record.done == 'Y'
title = 'Click to mark this record \'todo\''
html4checkbox = "<input type=checkbox checked>"
else
title = 'Check to mark this record \'done\''
html4checkbox = "<input type=checkbox>"
end
if !session["user"] || !admin?
html << html4checkbox.gsub('type=checkbox', 'type=checkbox disabled=disabled')
else
html << link_to_remote(html4checkbox, :update => div_id(record, 'done_toggle'), :url => { :controller => 'review', :action => "toggle_done", :id => record.id, :class_name => class_name}, :title => title)
end
html << "</span>"
end.join("\n")
end
# Helper #link_to_reviewer to set the reviewer. See ReviewController.
def link_to_reviewer(record)
returning url = [] do
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_remote("_______", :update => div_id(record, "reviewer"), :url => { :controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class} )
else
url << ""
end
else
url << link_to_remote(record.reviewer.name, :update => div_id(record, "reviewer"), :url => { :controller => 'review', :action => 'assign', :id => record.id, :class_name => record.class} )
end
url << "</span> "
end
end.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)
returning link = [] do
# TODO below incorrect
urlprefix = 'CHECKOUT' if version.version.nil?
link << link_to(urlprefix + " " + version.version.to_s,:controller => 'versions',:action => 'show',:id => version.id)
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?
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)
link << link_to(image_tag('txt.gif', :border => 0, :title =>'View as plain text' ), {:controller => 'versions',:action => 'text',:id => version})
end.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(ttl,:controller => 'sites',:action => 'description',:id => site.id) #if !admin?
link += ' ' + link_to(image_tag(img,:border => 0,:title => "Activate site \"#{site.title}\""), site.url, :title => "Activate site \"#{site.title}\"", :popup => true)
if site.type == 'BaselineProcess'
link += ' ' + link_to(image_tag("csv.gif", :border => 0, :title => "Download content information as CSV"), {:controller => "sites", :action => "csv", :id => site.id}, :method => :post )
end
return 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
# 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
# helper method for a displaying navigation links to first, next, previous, last pages to use when displaying records in pages.
# See preserving parameters [http://64.233.183.104/search?q=cache:VZkWDCGLNBIJ:wiki.rubyonrails.com/rails/show/HowtoPagination+pagination+how+to+ruby+on+rails&hl=nl&gl=nl&ct=clnk&cd=4]
def links_to_pages(pages)
if pages.length > 1
returning link = [] do
link << '<p>'
link << link_to(image_tag('first_page.png', :border => 0, :align=>"middle", :title => "First Page"), {:params => params.merge(:page => 1)} ) if pages.current.previous
link << image_tag('first_page_disabled.png', :border => 0, :align=>"middle", :title => "First Page") if !pages.current.previous
link << link_to(image_tag('previous_page.png', :border => 0, :align=>"middle", :title => "Previous Page"), {:params => params.merge(:page => pages.current.previous)}) if pages.current.previous
link << image_tag('previous_page_disabled.png', :border => 0, :align=>"middle", :title => "Previous Page") if !pages.current.previous
link << "<small>[" + pages.current.number.to_s + "/" + pages.length.to_s + "]</small>"
link << link_to(image_tag('next_page.png', :border => 0, :align=>"middle", :title => "Next Page"), {:params => params.merge(:page => pages.current.next)}) if pages.current.next
link << image_tag('next_page_disabled.png', :border => 0, :align=>"middle", :title => "Next Page") if !pages.current.next
link << link_to(image_tag('last_page.png', :border => 0, :align=>"middle", :title => "Last Page"), {:params => params.merge( :page => pages.last)}) if pages.current.next
link << image_tag('last_page_disabled.png', :border => 0, :align=>"middle", :title => "Last Page") if !pages.current.next
link << '</p>'
end.join("\n")
end
end
end