##// END OF EJS Templates
Fixes custom_field_tag helper broken by r9682....
Jean-Philippe Lang -
r9503:4f0aa2432c2c
parent child
Show More
@@ -1,156 +1,156
1 1 # encoding: utf-8
2 2 #
3 3 # Redmine - project management software
4 4 # Copyright (C) 2006-2012 Jean-Philippe Lang
5 5 #
6 6 # This program is free software; you can redistribute it and/or
7 7 # modify it under the terms of the GNU General Public License
8 8 # as published by the Free Software Foundation; either version 2
9 9 # of the License, or (at your option) any later version.
10 10 #
11 11 # This program is distributed in the hope that it will be useful,
12 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 14 # GNU General Public License for more details.
15 15 #
16 16 # You should have received a copy of the GNU General Public License
17 17 # along with this program; if not, write to the Free Software
18 18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 19
20 20 module CustomFieldsHelper
21 21
22 22 def custom_fields_tabs
23 23 tabs = [{:name => 'IssueCustomField', :partial => 'custom_fields/index', :label => :label_issue_plural},
24 24 {:name => 'TimeEntryCustomField', :partial => 'custom_fields/index', :label => :label_spent_time},
25 25 {:name => 'ProjectCustomField', :partial => 'custom_fields/index', :label => :label_project_plural},
26 26 {:name => 'VersionCustomField', :partial => 'custom_fields/index', :label => :label_version_plural},
27 27 {:name => 'UserCustomField', :partial => 'custom_fields/index', :label => :label_user_plural},
28 28 {:name => 'GroupCustomField', :partial => 'custom_fields/index', :label => :label_group_plural},
29 29 {:name => 'TimeEntryActivityCustomField', :partial => 'custom_fields/index', :label => TimeEntryActivity::OptionName},
30 30 {:name => 'IssuePriorityCustomField', :partial => 'custom_fields/index', :label => IssuePriority::OptionName},
31 31 {:name => 'DocumentCategoryCustomField', :partial => 'custom_fields/index', :label => DocumentCategory::OptionName}
32 32 ]
33 33 end
34 34
35 35 # Return custom field html tag corresponding to its format
36 36 def custom_field_tag(name, custom_value)
37 37 custom_field = custom_value.custom_field
38 38 field_name = "#{name}[custom_field_values][#{custom_field.id}]"
39 39 field_name << "[]" if custom_field.multiple?
40 40 field_id = "#{name}_custom_field_values_#{custom_field.id}"
41 41
42 42 tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
43 43
44 44 field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
45 45 case field_format.try(:edit_as)
46 46 when "date"
47 47 text_field_tag(field_name, custom_value.value, tag_options.merge(:size => 10)) +
48 48 calendar_for(field_id)
49 49 when "text"
50 50 text_area_tag(field_name, custom_value.value, tag_options.merge(:rows => 3))
51 51 when "bool"
52 52 hidden_field_tag(field_name, '0') + check_box_tag(field_name, '1', custom_value.true?, tag_options)
53 53 when "list"
54 blank_option = ''
54 blank_option = ''.html_safe
55 55 unless custom_field.multiple?
56 56 if custom_field.is_required?
57 57 unless custom_field.default_value.present?
58 58 blank_option = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---", :value => '')
59 59 end
60 60 else
61 61 blank_option = content_tag('option')
62 62 end
63 63 end
64 64 s = select_tag(field_name, blank_option + options_for_select(custom_field.possible_values_options(custom_value.customized), custom_value.value),
65 65 tag_options.merge(:multiple => custom_field.multiple?))
66 66 if custom_field.multiple?
67 67 s << hidden_field_tag(field_name, '')
68 68 end
69 69 s
70 70 else
71 71 text_field_tag(field_name, custom_value.value, tag_options)
72 72 end
73 73 end
74 74
75 75 # Return custom field label tag
76 76 def custom_field_label_tag(name, custom_value)
77 77 content_tag "label", h(custom_value.custom_field.name) +
78 78 (custom_value.custom_field.is_required? ? " <span class=\"required\">*</span>".html_safe : ""),
79 79 :for => "#{name}_custom_field_values_#{custom_value.custom_field.id}"
80 80 end
81 81
82 82 # Return custom field tag with its label tag
83 83 def custom_field_tag_with_label(name, custom_value)
84 84 custom_field_label_tag(name, custom_value) + custom_field_tag(name, custom_value)
85 85 end
86 86
87 87 def custom_field_tag_for_bulk_edit(name, custom_field, projects=nil)
88 88 field_name = "#{name}[custom_field_values][#{custom_field.id}]"
89 89 field_name << "[]" if custom_field.multiple?
90 90 field_id = "#{name}_custom_field_values_#{custom_field.id}"
91 91
92 92 tag_options = {:id => field_id, :class => "#{custom_field.field_format}_cf"}
93 93
94 94 field_format = Redmine::CustomFieldFormat.find_by_name(custom_field.field_format)
95 95 case field_format.try(:edit_as)
96 96 when "date"
97 97 text_field_tag(field_name, '', tag_options.merge(:size => 10)) +
98 98 calendar_for(field_id)
99 99 when "text"
100 100 text_area_tag(field_name, '', tag_options.merge(:rows => 3))
101 101 when "bool"
102 102 select_tag(field_name, options_for_select([[l(:label_no_change_option), ''],
103 103 [l(:general_text_yes), '1'],
104 104 [l(:general_text_no), '0']]), tag_options)
105 105 when "list"
106 106 options = []
107 107 options << [l(:label_no_change_option), ''] unless custom_field.multiple?
108 108 options << [l(:label_none), '__none__'] unless custom_field.is_required?
109 109 options += custom_field.possible_values_options(projects)
110 110 select_tag(field_name, options_for_select(options), tag_options.merge(:multiple => custom_field.multiple?))
111 111 else
112 112 text_field_tag(field_name, '', tag_options)
113 113 end
114 114 end
115 115
116 116 # Return a string used to display a custom value
117 117 def show_value(custom_value)
118 118 return "" unless custom_value
119 119 format_value(custom_value.value, custom_value.custom_field.field_format)
120 120 end
121 121
122 122 # Return a string used to display a custom value
123 123 def format_value(value, field_format)
124 124 if value.is_a?(Array)
125 125 value.collect {|v| format_value(v, field_format)}.compact.sort.join(', ')
126 126 else
127 127 Redmine::CustomFieldFormat.format_value(value, field_format)
128 128 end
129 129 end
130 130
131 131 # Return an array of custom field formats which can be used in select_tag
132 132 def custom_field_formats_for_select(custom_field)
133 133 Redmine::CustomFieldFormat.as_select(custom_field.class.customized_class.name)
134 134 end
135 135
136 136 # Renders the custom_values in api views
137 137 def render_api_custom_values(custom_values, api)
138 138 api.array :custom_fields do
139 139 custom_values.each do |custom_value|
140 140 attrs = {:id => custom_value.custom_field_id, :name => custom_value.custom_field.name}
141 141 attrs.merge!(:multiple => true) if custom_value.custom_field.multiple?
142 142 api.custom_field attrs do
143 143 if custom_value.value.is_a?(Array)
144 144 api.array :value do
145 145 custom_value.value.each do |value|
146 146 api.value value unless value.blank?
147 147 end
148 148 end
149 149 else
150 150 api.value custom_value.value
151 151 end
152 152 end
153 153 end
154 154 end unless custom_values.empty?
155 155 end
156 156 end
General Comments 0
You need to be logged in to leave comments. Login now