##// END OF EJS Templates
show "no data" label when there's nothing to display on changelog and roadmap...
show "no data" label when there's nothing to display on changelog and roadmap git-svn-id: http://redmine.rubyforge.org/svn/trunk@255 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r164:0b4d4db13130
r252:ddd0796e403d
Show More
application_helper.rb
193 lines | 7.9 KiB | text/x-ruby | RubyLexer
/ app / helpers / application_helper.rb
Jean-Philippe Lang
Initial commit...
r2 # redMine - project management software
Jean-Philippe Lang
settings are now stored in the database (config_custom.rb no more used) and editable through the application in: Admin -> Settings...
r164 # Copyright (C) 2006-2007 Jean-Philippe Lang
Jean-Philippe Lang
Initial commit...
r2 #
# 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.
#
# 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.
#
# 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 ApplicationHelper
Jean-Philippe Lang
custom field tags...
r18 # Return current logged in user or nil
Jean-Philippe Lang
0.3 unstable...
r10 def loggedin?
@logged_in_user
end
Jean-Philippe Lang
custom field tags...
r18 # Return true if user is logged in and is admin, otherwise false
Jean-Philippe Lang
0.3 unstable...
r10 def admin_loggedin?
@logged_in_user and @logged_in_user.admin?
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
custom field tags...
r18 # Return true if user is authorized for controller/action, otherwise false
Jean-Philippe Lang
0.3 unstable...
r10 def authorize_for(controller, action)
Jean-Philippe Lang
Initial commit...
r2 # check if action is allowed on public projects
Jean-Philippe Lang
v0.2.0...
r5 if @project.is_public? and Permission.allowed_to_public "%s/%s" % [ controller, action ]
Jean-Philippe Lang
Initial commit...
r2 return true
Jean-Philippe Lang
0.3 unstable...
r10 end
Jean-Philippe Lang
Initial commit...
r2 # check if user is authorized
Jean-Philippe Lang
0.3 unstable...
r10 if @logged_in_user and (@logged_in_user.admin? or Permission.allowed_to_role( "%s/%s" % [ controller, action ], @logged_in_user.role_for_project(@project.id) ) )
return true
end
return false
end
# Display a link if user is authorized
def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller], options[:action])
end
# Display a link to user's account page
def link_to_user(user)
link_to user.display_name, :controller => 'account', :action => 'show', :id => user
end
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35
Jean-Philippe Lang
* all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)...
r154 def image_to_function(name, function, html_options = {})
html_options.symbolize_keys!
tag(:input, html_options.merge({
:type => "image", :src => image_path(name),
:onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
}))
end
Jean-Philippe Lang
Initial commit...
r2 def format_date(date)
Jean-Philippe Lang
Localization plugin removed (replaced with GLoc)...
r12 l_date(date) if date
Jean-Philippe Lang
Initial commit...
r2 end
def format_time(time)
Jean-Philippe Lang
Localization plugin removed (replaced with GLoc)...
r12 l_datetime(time) if time
Jean-Philippe Lang
Initial commit...
r2 end
Jean-Philippe Lang
* new report: project activity...
r42
def day_name(day)
l(:general_day_names).split(',')[day-1]
end
Jean-Philippe Lang
calendar and activity views edited (previous/next links)...
r70
def month_name(month)
l(:actionview_datehelper_select_month_names).split(',')[month-1]
end
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35
Jean-Philippe Lang
Initial commit...
r2 def pagination_links_full(paginator, options={}, html_options={})
Jean-Philippe Lang
ajaxified paginators...
r31 html = ''
html << link_to_remote(('&#171; ' + l(:label_previous)),
{:update => "content", :url => { :page => paginator.current.previous }},
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 {:href => url_for(:action => 'list', :params => params.merge({:page => paginator.current.previous}))}) + ' ' if paginator.current.previous
Jean-Philippe Lang
ajaxified paginators...
r31
html << (pagination_links_each(paginator, options) do |n|
link_to_remote(n.to_s,
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 {:url => {:action => 'list', :params => params.merge({:page => n})}, :update => 'content'},
{:href => url_for(:action => 'list', :params => params.merge({:page => n}))})
Jean-Philippe Lang
ajaxified paginators...
r31 end || '')
html << ' ' + link_to_remote((l(:label_next) + ' &#187;'),
{:update => "content", :url => { :page => paginator.current.next }},
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 {:href => url_for(:action => 'list', :params => params.merge({:page => paginator.current.next}))}) if paginator.current.next
Jean-Philippe Lang
Initial commit...
r2 html
end
Jean-Philippe Lang
0.3 unstable...
r10
Jean-Philippe Lang
* new report: project activity...
r42 def textilizable(text)
Jean-Philippe Lang
settings are now stored in the database (config_custom.rb no more used) and editable through the application in: Admin -> Settings...
r164 (Setting.text_formatting == 'textile') && (ActionView::Helpers::TextHelper.method_defined? "textilize") ? RedCloth.new(h(text)).to_html : simple_format(auto_link(h(text)))
Jean-Philippe Lang
* new report: project activity...
r42 end
Jean-Philippe Lang
0.3 unstable...
r10 def error_messages_for(object_name, options = {})
options = options.symbolize_keys
object = instance_variable_get("@#{object_name}")
if object && !object.errors.empty?
# build full_messages here with controller current language
full_messages = []
object.errors.each do |attr, msg|
next if msg.nil?
if attr == "base"
full_messages << l(msg)
else
Jean-Philippe Lang
custom field tags...
r18 full_messages << "&#171; " + (l_has_string?("field_" + attr) ? l("field_" + attr) : object.class.human_attribute_name(attr)) + " &#187; " + l(msg) unless attr == "custom_values"
Jean-Philippe Lang
0.3 unstable...
r10 end
Jean-Philippe Lang
custom field tags...
r18 end
# retrieve custom values error messages
if object.errors[:custom_values]
object.custom_values.each do |v|
v.errors.each do |attr, msg|
next if msg.nil?
full_messages << "&#171; " + v.custom_field.name + " &#187; " + l(msg)
end
end
end
Jean-Philippe Lang
0.3 unstable...
r10 content_tag("div",
content_tag(
Jean-Philippe Lang
custom field tags...
r18 options[:header_tag] || "h2", lwr(:gui_validation_error, full_messages.length) + " :"
Jean-Philippe Lang
0.3 unstable...
r10 ) +
content_tag("ul", full_messages.collect { |msg| content_tag("li", msg) }),
"id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
)
else
""
end
end
Jean-Philippe Lang
Localization plugin removed (replaced with GLoc)...
r12
Jean-Philippe Lang
settings are now stored in the database (config_custom.rb no more used) and editable through the application in: Admin -> Settings...
r164 def lang_options_for_select(blank=true)
(blank ? [["(auto)", ""]] : []) +
(GLoc.valid_languages.sort {|x,y| x.to_s <=> y.to_s }).collect {|lang| [ l_lang_name(lang.to_s, lang), lang.to_s]}
Jean-Philippe Lang
Localization plugin removed (replaced with GLoc)...
r12 end
Jean-Philippe Lang
tables and forms redesign,...
r19
def label_tag_for(name, option_tags = nil, options = {})
label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
content_tag("label", label_text)
end
def labelled_tabular_form_for(name, object, options, &proc)
options[:html] ||= {}
options[:html].store :class, "tabular"
form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
end
Jean-Philippe Lang
views cleaning...
r20
def check_all_links(form_name)
link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
" | " +
link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
end
Jean-Philippe Lang
date picker...
r27
def calendar_for(field_id)
Jean-Philippe Lang
* all icons replaced (new icons are based on GPL icon set: "KDE Crystal Diamond 2.5" -by paolino- and "kNeu! Alpha v0.1" -by Pablo Fabregat-)...
r154 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
Jean-Philippe Lang
date picker...
r27 javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
end
Jean-Philippe Lang
Initial commit...
r2 end
Jean-Philippe Lang
tables and forms redesign,...
r19
class TabularFormBuilder < ActionView::Helpers::FormBuilder
include GLoc
def initialize(object_name, object, template, options, proc)
set_language_if_valid options.delete(:lang)
@object_name, @object, @template, @options, @proc = object_name, object, template, options, proc
end
Jean-Philippe Lang
date picker...
r27 (field_helpers - %w(radio_button hidden_field) + %w(date_select)).each do |selector|
Jean-Philippe Lang
tables and forms redesign,...
r19 src = <<-END_SRC
def #{selector}(field, options = {})
Jean-Philippe Lang
* code and views cleaning...
r97 return super if options.delete :no_label
Jean-Philippe Lang
tables and forms redesign,...
r19 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
label = @template.content_tag("label", label_text,
Jean-Philippe Lang
svn browser merged in trunk...
r103 :class => (@object && @object.errors[field] ? "error" : nil),
Jean-Philippe Lang
tables and forms redesign,...
r19 :for => (@object_name.to_s + "_" + field.to_s))
label + super
end
END_SRC
class_eval src, __FILE__, __LINE__
end
Jean-Philippe Lang
* code and views cleaning...
r97 def select(field, choices, options = {}, html_options = {})
Jean-Philippe Lang
tables and forms redesign,...
r19 label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
label = @template.content_tag("label", label_text,
Jean-Philippe Lang
svn browser merged in trunk...
r103 :class => (@object && @object.errors[field] ? "error" : nil),
Jean-Philippe Lang
tables and forms redesign,...
r19 :for => (@object_name.to_s + "_" + field.to_s))
label + super
end
end