Feature #1358 » linkable_custom_field_redmine_0.9.2_v1.0.patch
app/helpers/issues_helper.rb (revision 19866) | ||
---|---|---|
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>#{ simple_format_without_paragraph(show_value(value)) }</td>\n"
|
|
47 | 47 |
n += 1 |
48 | 48 |
end |
49 | 49 |
s << "</tr>\n" |
app/helpers/queries_helper.rb (revision 19866) | ||
---|---|---|
28 | 28 |
end |
29 | 29 |
|
30 | 30 |
def column_content(column, issue, query = nil) |
31 |
value = column.value(issue) |
|
32 |
|
|
33 |
case value.class.name |
|
34 |
when 'String' |
|
35 |
if column.name == :subject |
|
36 |
subject_in_tree( issue, issue.subject, query) |
|
31 |
case column.class.name |
|
32 |
when 'QueryColumn' |
|
33 |
value = column.value(issue) |
|
34 |
case value.class.name |
|
35 |
when 'String' |
|
36 |
if column.name == :subject |
|
37 |
subject_in_tree( issue, issue.subject, query) |
|
38 |
else |
|
39 |
h(value) |
|
40 |
end |
|
41 |
when 'Time' |
|
42 |
format_time(value) |
|
43 |
when 'Date' |
|
44 |
format_date(value) |
|
45 |
when 'Fixnum', 'Float' |
|
46 |
case column.name |
|
47 |
when :done_ratio |
|
48 |
progress_bar(value, :width => '80px') |
|
49 |
when :estimated_hours |
|
50 |
l_hours(value) |
|
51 |
else |
|
52 |
value.to_s |
|
53 |
end |
|
54 |
when 'User' |
|
55 |
link_to_user value |
|
56 |
when 'Project' |
|
57 |
link_to(h(value), :controller => 'projects', :action => 'show', :id => value) |
|
58 |
when 'Version' |
|
59 |
link_to(h(value), :controller => 'versions', :action => 'show', :id => value) |
|
60 |
when 'TrueClass' |
|
61 |
l(:general_text_Yes) |
|
62 |
when 'FalseClass' |
|
63 |
l(:general_text_No) |
|
37 | 64 |
else |
38 | 65 |
h(value) |
39 | 66 |
end |
40 |
when 'Time' |
|
41 |
format_time(value) |
|
42 |
when 'Date' |
|
43 |
format_date(value) |
|
44 |
when 'Fixnum', 'Float' |
|
45 |
case column.name |
|
46 |
when :done_ratio |
|
47 |
progress_bar(value, :width => '80px') |
|
48 |
when :estimated_hours |
|
49 |
l_hours(value) |
|
50 |
else |
|
51 |
value.to_s |
|
52 |
end |
|
53 |
when 'User' |
|
54 |
link_to_user value |
|
55 |
when 'Project' |
|
56 |
link_to(h(value), :controller => 'projects', :action => 'show', :id => value) |
|
57 |
when 'Version' |
|
58 |
link_to(h(value), :controller => 'versions', :action => 'show', :id => value) |
|
59 |
when 'TrueClass' |
|
60 |
l(:general_text_Yes) |
|
61 |
when 'FalseClass' |
|
62 |
l(:general_text_No) |
|
63 |
else |
|
64 |
h(value) |
|
67 | ||
68 |
when 'QueryCustomFieldColumn' |
|
69 |
cfv = issue.custom_field_values.detect {|v| v.custom_field_id == column.custom_field.id} |
|
70 |
show_value(cfv) |
|
65 | 71 |
end |
66 | 72 |
end |
67 | 73 |
app/helpers/custom_fields_helper.rb (revision 19866) | ||
---|---|---|
89 | 89 | |
90 | 90 |
# Return a string used to display a custom value |
91 | 91 |
def show_value(custom_value) |
92 |
return "" unless custom_value |
|
93 |
format_value(custom_value.value, custom_value.custom_field.field_format) |
|
92 |
return "" unless custom_value && !custom_value.value.empty? |
|
93 |
if custom_value.custom_field.url.empty? |
|
94 |
return h(format_value(custom_value.value, custom_value.custom_field.field_format)) |
|
95 |
else |
|
96 |
return url_format(custom_value) |
|
97 |
end |
|
94 | 98 |
end |
99 | ||
100 |
# Return an escaped string used to display a custom value |
|
101 |
def show_value_plain(custom_value) |
|
102 |
return "" unless custom_value && !custom_value.value.empty? |
|
103 |
return h(format_value(custom_value.value, custom_value.custom_field.field_format)) |
|
104 |
end |
|
95 | 105 |
|
96 | 106 |
# Return a string used to display a custom value |
97 | 107 |
def format_value(value, field_format) |
... | ... | |
106 | 116 |
end |
107 | 117 |
end |
108 | 118 | |
119 |
# Return a clean URL for a given custom field value |
|
120 |
def url_format(custom_value) |
|
121 |
url = custom_value.custom_field.url |
|
122 |
return if url.empty? |
|
123 |
|
|
124 |
formatted_value = format_value(custom_value.value, custom_value.custom_field.field_format) |
|
125 |
while (url.sub!(/__VALUE__/, h(custom_value.value))) |
|
126 |
end |
|
127 |
return link_to formatted_value, url, :target=>'_blank' |
|
128 |
end |
|
129 | ||
109 | 130 |
# Return an array of custom field formats which can be used in select_tag |
110 | 131 |
def custom_field_formats_for_select |
111 | 132 |
CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] } |
app/helpers/timelog_helper.rb (revision 19866) | ||
---|---|---|
115 | 115 |
entry.hours.to_s.gsub('.', decimal_separator), |
116 | 116 |
entry.comments |
117 | 117 |
] |
118 |
fields += custom_fields.collect {|f| show_value(entry.custom_value_for(f)) } |
|
118 |
fields += custom_fields.collect {|f| show_value_plain(entry.custom_value_for(f)) }
|
|
119 | 119 |
|
120 | 120 |
csv << fields.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end } |
121 | 121 |
end |
app/controllers/custom_fields_controller.rb (revision 19866) | ||
---|---|---|
33 | 33 |
rescue |
34 | 34 |
end |
35 | 35 |
(redirect_to(:action => 'index'); return) unless @custom_field.is_a?(CustomField) |
36 |
|
|
36 | ||
37 |
@custom_field.url.strip! |
|
37 | 38 |
if request.post? and @custom_field.save |
38 | 39 |
flash[:notice] = l(:notice_successful_create) |
39 | 40 |
call_hook(:controller_custom_fields_new_after_save, :params => params, :custom_field => @custom_field) |
app/views/custom_fields/_form.rhtml (revision 19866) | ||
---|---|---|
8 | 8 |
p_regexp = $("custom_field_regexp"); |
9 | 9 |
p_values = $("custom_field_possible_values"); |
10 | 10 |
p_searchable = $("custom_field_searchable"); |
11 |
p_url = $("custom_field_url"); |
|
11 | 12 |
p_default = $("custom_field_default_value"); |
12 | 13 |
|
13 | 14 |
p_default.setAttribute('type','text'); |
... | ... | |
65 | 66 |
:rows => 15 %> |
66 | 67 |
<br /><em><%= l(:text_custom_field_possible_values_info) %></em></p> |
67 | 68 |
<p><%= @custom_field.field_format == 'bool' ? f.check_box(:default_value) : f.text_field(:default_value) %></p> |
69 |
<p><%= f.text_field :url, :size => 60 %> |
|
70 |
<br /><%= l(:text_custom_field_url_info) %></p> |
|
68 | 71 |
<%= call_hook(:view_custom_fields_form_upper_box, :custom_field => @custom_field, :form => f) %> |
69 | 72 |
</div> |
70 | 73 |
app/views/users/show.rhtml (revision 19866) | ||
---|---|---|
12 | 12 |
<% end %> |
13 | 13 |
<% for custom_value in @custom_values %> |
14 | 14 |
<% if !custom_value.value.blank? %> |
15 |
<li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
|
|
15 |
<li><%=h custom_value.custom_field.name%>: <%= show_value(custom_value) %></li> |
|
16 | 16 |
<% end %> |
17 | 17 |
<% end %> |
18 | 18 |
<li><%=l(:label_registered_on)%>: <%= format_date(@user.created_on) %></li> |
app/views/versions/_overview.rhtml (revision 19866) | ||
---|---|---|
8 | 8 |
<ul> |
9 | 9 |
<% version.custom_values.each do |custom_value| %> |
10 | 10 |
<% if !custom_value.value.blank? %> |
11 |
<li><%=h custom_value.custom_field.name %>: <%=h show_value(custom_value) %></li>
|
|
11 |
<li><%=h custom_value.custom_field.name %>: <%= show_value(custom_value) %></li> |
|
12 | 12 |
<% end %> |
13 | 13 |
<% end %> |
14 | 14 |
</ul> |
app/views/mailer/_issue_text_plain.rhtml (revision 19866) | ||
---|---|---|
7 | 7 |
<%=l(:field_assigned_to)%>: <%= issue.assigned_to %> |
8 | 8 |
<%=l(:field_category)%>: <%= issue.category %> |
9 | 9 |
<%=l(:field_fixed_version)%>: <%= issue.fixed_version %> |
10 |
<% issue.custom_values.each do |c| %><%= c.custom_field.name %>: <%= show_value(c) %> |
|
10 |
<% issue.custom_values.each do |c| %><%= c.custom_field.name %>: <%= show_value_plain(c) %>
|
|
11 | 11 |
<% end %> |
12 | 12 | |
13 | 13 |
<%= issue.description %> |
app/views/projects/show.rhtml (revision 19866) | ||
---|---|---|
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%>: <%= show_value(custom_value) %></li> |
|
20 | 20 |
<% end %> |
21 | 21 |
<% end %> |
22 | 22 |
</ul> |
db/migrate/20100309115805_add_custom_fields_url.rb (revision 19866) | ||
---|---|---|
1 |
class AddCustomFieldsUrl < ActiveRecord::Migration |
|
2 |
def self.up |
|
3 |
add_column :custom_fields, :url, :string, :limit=>255, :default=>"", :null=>false |
|
4 |
end |
|
5 | ||
6 |
def self.down |
|
7 |
remove_column :custom_fields, :url |
|
8 |
end |
|
9 |
end |
config/locales/en.yml (revision 19866) | ||
---|---|---|
866 | 866 |
text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped." |
867 | 867 |
text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.' |
868 | 868 |
text_custom_field_possible_values_info: 'One line for each value' |
869 |
text_custom_field_url_info: '(__VALUE__ is a placeholder for each of the field values, eg. http://www.google.com/search?q=__VALUE__)' |
|
869 | 870 |
text_wiki_page_destroy_question: "This page has {{descendants}} child page(s) and descendant(s). What do you want to do?" |
870 | 871 |
text_wiki_page_nullify_children: "Keep child pages as root pages" |
871 | 872 |
text_wiki_page_destroy_children: "Delete child pages and all their descendants" |
config/locales/sk.yml (revision 19866) | ||
---|---|---|
789 | 789 |
label_display: Zobrazenie |
790 | 790 |
button_create_and_continue: Vytvoriť a pokračovať |
791 | 791 |
text_custom_field_possible_values_info: 'Jeden riadok pre každú hodnotu' |
792 |
text_custom_field_url_info: '(__VALUE__ sa nahradí hodnotou poľa, príklad: http://www.google.com/search?q=__VALUE__)' |
|
792 | 793 |
setting_repository_log_display_limit: Maximálne množstvo revizií zobrazené v logu |
793 | 794 |
setting_file_max_size_displayed: Maximálna veľkosť textových súborov zobrazených priamo na stránke |
794 | 795 |
field_watcher: Pozorovateľ |
- « Previous
- 1
- 2
- 3
- Next »