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 »