Feature #2096 » group-field.patch
app/helpers/issues_helper.rb (working copy) | ||
---|---|---|
43 | 43 |
n = 0 |
44 | 44 |
ordered_values.compact.each do |value| |
45 | 45 |
s << "</tr>\n<tr>\n" if n > 0 && (n % 2) == 0 |
46 |
s << "\t<th>#{ h(value.custom_field.name) }:</th><td>#{ simple_format_without_paragraph(h(show_value(value))) }</td>\n" |
|
46 |
s << "\t<th>#{ h(value.custom_field.name) }:</th><td>" |
|
47 |
s << value.custom_field.field_format == "group_list" ? show_value_on_view(value) : simple_format_without_paragraph(h(show_value(value))) |
|
48 |
s << "</td>\n" |
|
47 | 49 |
n += 1 |
48 | 50 |
end |
49 | 51 |
s << "</tr>\n" |
50 |
s |
|
52 | ||
53 |
return s |
|
51 | 54 |
end |
52 | 55 |
|
53 | 56 |
def sidebar_queries |
... | ... | |
115 | 118 |
|
116 | 119 |
unless no_html |
117 | 120 |
label = content_tag('strong', label) |
118 |
old_value = content_tag("i", h(old_value)) if detail.old_value |
|
121 | ||
122 |
if !custom_field.nil? && custom_field.field_format == 'group_list' |
|
123 |
old_value = content_tag("i", old_value) if detail.old_value |
|
124 |
else |
|
125 |
old_value = content_tag("i", h(old_value)) if detail.old_value |
|
126 |
end |
|
127 | ||
119 | 128 |
old_value = content_tag("strike", old_value) if detail.old_value and (!detail.value or detail.value.empty?) |
129 | ||
120 | 130 |
if detail.property == 'attachment' && !value.blank? && a = Attachment.find_by_id(detail.prop_key) |
121 | 131 |
# Link to the attachment if it has not been removed |
122 | 132 |
value = link_to_attachment(a) |
133 |
elsif !custom_field.nil? && custom_field.field_format == 'group_list' |
|
134 |
value = content_tag("i", value) if value |
|
123 | 135 |
else |
124 | 136 |
value = content_tag("i", h(value)) if value |
125 | 137 |
end |
app/helpers/custom_fields_helper.rb (working copy) | ||
---|---|---|
49 | 49 |
(custom_field.default_value.blank? ? "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" : '') : |
50 | 50 |
'<option></option>' |
51 | 51 |
select_tag(field_name, blank_option + options_for_select(custom_field.possible_values, custom_value.value), :id => field_id) |
52 | ||
53 |
when 'group_list' |
|
54 |
groups = @project.principals |
|
55 |
groups.delete_if { |group| group.type != 'Group' } |
|
56 | ||
57 |
custom_field.possible_values.clear() |
|
58 |
groups.each { |group| custom_field.possible_values << group if group.type == 'Group' } |
|
59 | ||
60 |
blank_option = custom_field.is_required? ? |
|
61 |
(custom_field.default_value.blank? ? "<option value=\"\">--- #{l(:actionview_instancetag_blank_option)} ---</option>" : '') : |
|
62 |
'<option></option>' |
|
63 | ||
64 |
select_tag(field_name, blank_option + options_for_select(groups.collect { |x| [x.lastname, x.id] }, custom_value.value), :id => field_id) |
|
65 | ||
52 | 66 |
else |
53 | 67 |
text_field_tag(field_name, custom_value.value, :id => field_id) |
54 | 68 |
end |
... | ... | |
101 | 115 |
begin; format_date(value.to_date); rescue; value end |
102 | 116 |
when "bool" |
103 | 117 |
l(value == "1" ? :general_text_Yes : :general_text_No) |
118 |
when 'group_list': |
|
119 |
link_to_group(Group.find(:first, :conditions => [ 'id = ?', value])) |
|
104 | 120 |
else |
105 | 121 |
value |
106 | 122 |
end |
... | ... | |
110 | 126 |
def custom_field_formats_for_select |
111 | 127 |
CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] } |
112 | 128 |
end |
129 | ||
130 |
# Return a string used to display a custom value on the issues view |
|
131 |
def format_value_for_view(value, field_format) |
|
132 |
return "-" unless value && !value.empty? |
|
133 | ||
134 |
case field_format |
|
135 |
when 'group_list' |
|
136 |
link_to_group(Group.find(:first, :conditions => [ 'id = ?', value])) |
|
137 |
else |
|
138 |
format_value(value, field_format) |
|
139 |
end |
|
140 |
end |
|
141 | ||
142 |
def show_value_on_view(custom_value) |
|
143 |
return "" unless custom_value |
|
144 |
format_value_for_view(custom_value.value, custom_value.custom_field.field_format) |
|
145 |
end |
|
146 | ||
113 | 147 |
end |
app/helpers/application_helper.rb (working copy) | ||
---|---|---|
58 | 58 |
end |
59 | 59 |
end |
60 | 60 | |
61 |
# Displays a link to the group |
|
62 |
def link_to_group(group, options={}) |
|
63 |
if group.is_a?(Group) |
|
64 |
link_to group.lastname, :controller => 'groups', :action => 'show', :id => group |
|
65 |
else |
|
66 |
h(group.to_s) |
|
67 |
end |
|
68 |
end |
|
69 | ||
61 | 70 |
# Displays a link to +issue+ with its subject. |
62 | 71 |
# Examples: |
63 | 72 |
# |
app/models/issue.rb (working copy) | ||
---|---|---|
328 | 328 |
# Author and assignee are always notified unless they have been locked |
329 | 329 |
notified << author if author && author.active? |
330 | 330 |
notified << assigned_to if assigned_to && assigned_to.active? |
331 | ||
332 |
## EEH: TODO: add Group-email addresses here at some point |
|
333 | ||
331 | 334 |
notified.uniq! |
332 | 335 |
# Remove users that can not view the issue |
333 | 336 |
notified.reject! {|user| !visible?(user)} |
app/models/custom_field.rb (working copy) | ||
---|---|---|
25 | 25 |
"int" => { :name => :label_integer, :order => 3 }, |
26 | 26 |
"float" => { :name => :label_float, :order => 4 }, |
27 | 27 |
"list" => { :name => :label_list, :order => 5 }, |
28 |
"date" => { :name => :label_date, :order => 6 }, |
|
29 |
"bool" => { :name => :label_boolean, :order => 7 } |
|
28 |
"date" => { :name => :label_date, :order => 6 }, |
|
29 |
"bool" => { :name => :label_boolean, :order => 7 }, |
|
30 |
"group_list" => { :name => :label_group_list, :order => 8 }, |
|
30 | 31 |
}.freeze |
31 | 32 | |
32 | 33 |
validates_presence_of :name, :field_format |
app/views/custom_fields/_form.rhtml (working copy) | ||
---|---|---|
20 | 20 |
if (p_searchable) Element.show(p_searchable.parentNode); |
21 | 21 |
Element.show(p_values); |
22 | 22 |
break; |
23 | ||
24 |
case 'group_list': |
|
25 |
p_default.setAttribute('type','combolist'); |
|
26 |
Element.hide(p_length.parentNode); |
|
27 |
Element.hide(p_regexp.parentNode); |
|
28 |
if (p_searchable) Element.show(p_searchable.parentNode); |
|
29 |
Element.hide(p_values); |
|
30 |
break; |
|
31 | ||
23 | 32 |
case "bool": |
24 | 33 |
p_default.setAttribute('type','checkbox'); |
25 | 34 |
Element.hide(p_length.parentNode); |
app/views/projects/show.rhtml (working copy) | ||
---|---|---|
16 | 16 |
<% end %> |
17 | 17 |
<% @project.custom_values.each do |custom_value| %> |
18 | 18 |
<% if !custom_value.value.blank? %> |
19 |
<li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
|
19 |
<li><%= custom_value.custom_field.name%>: <%= custom_value.custom_field.field_format == "group_list" ? h(show_value_on_view(custom_value)) : h(show_value(custom_value)) %></li>
|
|
20 | 20 |
<% end %> |
21 | 21 |
<% end %> |
22 | 22 |
</ul> |
config/locales/en.yml (working copy) | ||
---|---|---|
475 | 475 |
label_and_its_subprojects: "{{value}} and its subprojects" |
476 | 476 |
label_min_max_length: Min - Max length |
477 | 477 |
label_list: List |
478 | ||
479 |
## EEH: TODO: Translation |
|
480 |
label_group_list: Group List |
|
481 | ||
478 | 482 |
label_date: Date |
479 | 483 |
label_integer: Integer |
480 | 484 |
label_float: Float |