summaryrefslogtreecommitdiffstats
path: root/app/helpers
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2013-12-14 08:22:43 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2013-12-14 08:22:43 +0000
commit2e2e2cfe425c2664517fb59836fbd3eff5e35861 (patch)
treee3daa66ee8b36d2f1a1468ec9501fba5bc37d71c /app/helpers
parentc74f6d9f9bcf02ccc480a2028802b83ec5d91aca (diff)
downloadredmine-2e2e2cfe425c2664517fb59836fbd3eff5e35861.tar.gz
redmine-2e2e2cfe425c2664517fb59836fbd3eff5e35861.zip
Merged custom fields format refactoring.
git-svn-id: http://svn.redmine.org/redmine/trunk@12400 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/application_helper.rb15
-rw-r--r--app/helpers/custom_fields_helper.rb131
-rw-r--r--app/helpers/issues_helper.rb9
-rw-r--r--app/helpers/timelog_helper.rb4
4 files changed, 66 insertions, 93 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 357a7e04c..b83691c08 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -158,6 +158,8 @@ module ApplicationHelper
# Helper that formats object for html or text rendering
def format_object(object, html=true)
case object.class.name
+ when 'Array'
+ object.map {|o| format_object(o, html)}.join(', ').html_safe
when 'Time'
format_time(object)
when 'Date'
@@ -171,13 +173,24 @@ module ApplicationHelper
when 'Project'
html ? link_to_project(object) : object.to_s
when 'Version'
- html ? link_to(object.name, version_path(object)) : version.to_s
+ html ? link_to(object.name, version_path(object)) : object.to_s
when 'TrueClass'
l(:general_text_Yes)
when 'FalseClass'
l(:general_text_No)
when 'Issue'
object.visible? && html ? link_to_issue(object) : "##{object.id}"
+ when 'CustomValue', 'CustomFieldValue'
+ if object.custom_field
+ f = object.custom_field.format.formatted_custom_value(self, object, html)
+ if f.nil? || f.is_a?(String)
+ f
+ else
+ format_object(f, html)
+ end
+ else
+ object.value.to_s
+ end
else
html ? h(object) : object.to_s
end
diff --git a/app/helpers/custom_fields_helper.rb b/app/helpers/custom_fields_helper.rb
index fd549f5ab..f62c36f68 100644
--- a/app/helpers/custom_fields_helper.rb
+++ b/app/helpers/custom_fields_helper.rb
@@ -44,51 +44,39 @@ module CustomFieldsHelper
CUSTOM_FIELDS_TABS
end
- # Return custom field html tag corresponding to its format
- def custom_field_tag(name, custom_value)
- custom_field = custom_value.custom_field
- field_name = "#{name}[custom_field_values][#{custom_field.id}]"
- field_name << "[]" if custom_field.multiple?
- field_id = "#{name}_custom_field_values_#{custom_field.id}"
-
- tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
-
- field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
- case field_format.try(:edit_as)
- when "date"
- text_field_tag(field_name, custom_value.value, tag_options.merge(:size => 10)) +
- calendar_for(field_id)
- when "text"
- text_area_tag(field_name, custom_value.value, tag_options.merge(:rows => 3))
- when "bool"
- hidden_field_tag(field_name, '0') + check_box_tag(field_name, '1', custom_value.true?, tag_options)
- when "list"
- blank_option = ''.html_safe
- unless custom_field.multiple?
- if custom_field.is_required?
- unless custom_field.default_value.present?
- blank_option = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---", :value => '')
- end
- else
- blank_option = content_tag('option')
- end
- end
- s = select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value),
- tag_options.merge(:multiple => custom_field.multiple?))
- if custom_field.multiple?
- s << hidden_field_tag(field_name, '')
- end
- s
- else
- text_field_tag(field_name, custom_value.value, tag_options)
+ def render_custom_field_format_partial(form, custom_field)
+ partial = custom_field.format.form_partial
+ if partial
+ render :partial => custom_field.format.form_partial, :locals => {:f => form, :custom_field => custom_field}
end
end
+ def custom_field_tag_name(prefix, custom_field)
+ name = "#{prefix}[custom_field_values][#{custom_field.id}]"
+ name << "[]" if custom_field.multiple?
+ name
+ end
+
+ def custom_field_tag_id(prefix, custom_field)
+ "#{prefix}_custom_field_values_#{custom_field.id}"
+ end
+
+ # Return custom field html tag corresponding to its format
+ def custom_field_tag(prefix, custom_value)
+ custom_value.custom_field.format.edit_tag self,
+ custom_field_tag_id(prefix, custom_value.custom_field),
+ custom_field_tag_name(prefix, custom_value.custom_field),
+ custom_value,
+ :class => "#{custom_value.custom_field.field_format}_cf"
+ end
+
# Return custom field label tag
def custom_field_label_tag(name, custom_value, options={})
required = options[:required] || custom_value.custom_field.is_required?
+ title = custom_value.custom_field.description.presence
+ content = content_tag 'span', custom_value.custom_field.name, :title => title
- content_tag "label", h(custom_value.custom_field.name) +
+ content_tag "label", content +
(required ? " <span class=\"required\">*</span>".html_safe : ""),
:for => "#{name}_custom_field_values_#{custom_value.custom_field.id}"
end
@@ -98,65 +86,30 @@ module CustomFieldsHelper
custom_field_label_tag(name, custom_value, options) + custom_field_tag(name, custom_value)
end
- def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil, value='')
- field_name = "#{name}[custom_field_values][#{custom_field.id}]"
- field_name << "[]" if custom_field.multiple?
- field_id = "#{name}_custom_field_values_#{custom_field.id}"
-
- tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
-
- unset_tag = ''
- unless custom_field.is_required?
- unset_tag = content_tag('label',
- check_box_tag(field_name, '__none__', (value == '__none__'), :id => nil, :data => {:disables => "##{field_id}"}) + l(:button_clear),
- :class => 'inline'
- )
- end
-
- field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
- case field_format.try(:edit_as)
- when "date"
- text_field_tag(field_name, value, tag_options.merge(:size => 10)) +
- calendar_for(field_id) +
- unset_tag
- when "text"
- text_area_tag(field_name, value, tag_options.merge(:rows => 3)) +
- '<br />'.html_safe +
- unset_tag
- when "bool"
- select_tag(field_name, options_for_select([[l(:label_no_change_option), ''],
- [l(:general_text_yes), '1'],
- [l(:general_text_no), '0']], value), tag_options)
- when "list"
- options = []
- options << [l(:label_no_change_option), ''] unless custom_field.multiple?
- options << [l(:label_none), '__none__'] unless custom_field.is_required?
- options += custom_field.possible_values_options(projects)
- select_tag(field_name, options_for_select(options, value), tag_options.merge(:multiple => custom_field.multiple?))
- else
- text_field_tag(field_name, value, tag_options) +
- unset_tag
- end
+ # Returns the custom field tag for when bulk editing objects
+ def custom_field_tag_for_bulk_edit(prefix, custom_field, objects=nil, value='')
+ custom_field.format.bulk_edit_tag self,
+ custom_field_tag_id(prefix, custom_field),
+ custom_field_tag_name(prefix, custom_field),
+ custom_field,
+ objects,
+ value,
+ :class => "#{custom_field.field_format}_cf"
end
# Return a string used to display a custom value
- def show_value(custom_value)
- return "" unless custom_value
- format_value(custom_value.value, custom_value.custom_field.field_format)
+ def show_value(custom_value, html=true)
+ format_object(custom_value, html)
end
# Return a string used to display a custom value
- def format_value(value, field_format)
- if value.is_a?(Array)
- value.collect {|v| format_value(v, field_format)}.compact.sort.join(', ')
- else
- Redmine::CustomFieldFormat.format_value(value, field_format)
- end
+ def format_value(value, custom_field)
+ format_object(custom_field.format.formatted_value(self, custom_field, value, false), false)
end
# Return an array of custom field formats which can be used in select_tag
def custom_field_formats_for_select(custom_field)
- Redmine::CustomFieldFormat.as_select(custom_field.class.customized_class.name)
+ Redmine::FieldFormat.as_select(custom_field.class.customized_class.name)
end
# Renders the custom_values in api views
@@ -179,4 +132,8 @@ module CustomFieldsHelper
end
end unless custom_values.empty?
end
+
+ def edit_tag_style_tag(form)
+ form.select :edit_tag_style, [[l(:label_drop_down_list), ''], [l(:label_checkboxes), 'check_box']], :label => :label_display
+ end
end
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 614c2f90d..9e70f5119 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -171,8 +171,9 @@ module IssuesHelper
s = "<tr>\n"
n = 0
ordered_values.compact.each do |value|
+ css = "cf_#{value.custom_field.id}"
s << "</tr>\n<tr>\n" if n > 0 && (n % 2) == 0
- s << "\t<th>#{ h(value.custom_field.name) }:</th><td>#{ simple_format_without_paragraph(h(show_value(value))) }</td>\n"
+ s << "\t<th class=\"#{css}\">#{ h(value.custom_field.name) }:</th><td class=\"#{css}\">#{ h(show_value(value)) }</td>\n"
n += 1
end
s << "</tr>\n"
@@ -239,7 +240,7 @@ module IssuesHelper
end
end
issue.visible_custom_field_values(user).each do |value|
- items << "#{value.custom_field.name}: #{show_value(value)}"
+ items << "#{value.custom_field.name}: #{show_value(value, false)}"
end
items
end
@@ -324,8 +325,8 @@ module IssuesHelper
if custom_field
multiple = custom_field.multiple?
label = custom_field.name
- value = format_value(detail.value, custom_field.field_format) if detail.value
- old_value = format_value(detail.old_value, custom_field.field_format) if detail.old_value
+ value = format_value(detail.value, custom_field) if detail.value
+ old_value = format_value(detail.old_value, custom_field) if detail.old_value
end
when 'attachment'
label = l(:label_attachment)
diff --git a/app/helpers/timelog_helper.rb b/app/helpers/timelog_helper.rb
index cf5629f52..8ea09d8d5 100644
--- a/app/helpers/timelog_helper.rb
+++ b/app/helpers/timelog_helper.rb
@@ -96,8 +96,10 @@ module TimelogHelper
else
obj
end
+ elsif cf = criteria_options[:custom_field]
+ format_value(value, cf)
else
- format_value(value, criteria_options[:format])
+ value.to_s
end
end