Custom fields can now be displayed as columns on the issue list.

Custom fields marked as "for all projects" can be added to the default columns of the issue list (in application settings).
Project specific custom fields can be displayed on custom queries.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@889 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2007-11-07 20:42:28 +00:00
parent ad68a82be1
commit 63ceea2e21
4 changed files with 46 additions and 20 deletions

View File

@ -22,24 +22,25 @@ module QueriesHelper
end
def column_header(column)
if column.sortable
sort_header_tag(column.sortable, :caption => l("field_#{column.name}"))
else
content_tag('th', l("field_#{column.name}"))
end
column.sortable ? sort_header_tag(column.sortable, :caption => column.caption) : content_tag('th', column.caption)
end
def column_content(column, issue)
value = issue.send(column.name)
if value.is_a?(Date)
format_date(value)
elsif value.is_a?(Time)
format_time(value)
elsif column.name == :subject
((@project.nil? || @project != issue.project) ? "#{issue.project.name} - " : '') +
link_to(h(value), :controller => 'issues', :action => 'show', :id => issue)
if column.is_a?(QueryCustomFieldColumn)
cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
show_value(cv)
else
h(value)
value = issue.send(column.name)
if value.is_a?(Date)
format_date(value)
elsif value.is_a?(Time)
format_time(value)
elsif column.name == :subject
((@project.nil? || @project != issue.project) ? "#{issue.project.name} - " : '') +
link_to(h(value), :controller => 'issues', :action => 'show', :id => issue)
else
h(value)
end
end
end
end

View File

@ -17,13 +17,33 @@
class QueryColumn
attr_accessor :name, :sortable
include GLoc
def initialize(name, options={})
self.name = name
self.sortable = options[:sortable]
end
def default?; default end
def caption
l("field_#{name}")
end
end
class QueryCustomFieldColumn < QueryColumn
def initialize(custom_field)
self.name = "cf_#{custom_field.id}".to_sym
self.sortable = false
@cf = custom_field
end
def caption
@cf.name
end
def custom_field
@cf
end
end
class Query < ActiveRecord::Base
@ -203,7 +223,12 @@ class Query < ActiveRecord::Base
end
def available_columns
cols = Query.available_columns
return @available_columns if @available_columns
@available_columns = Query.available_columns
@available_columns += (project ?
project.custom_fields :
IssueCustomField.find(:all, :conditions => {:is_for_all => true})
).collect {|cf| QueryCustomFieldColumn.new(cf) }
end
def columns

View File

@ -5,7 +5,7 @@
<table margin=0>
<tr>
<td><%= select_tag 'available_columns',
options_for_select((query.available_columns - query.columns).collect {|column| [l("field_#{column.name}"), column.name]}),
options_for_select((query.available_columns - query.columns).collect {|column| [column.caption, column.name]}),
:multiple => true, :size => 10, :style => "width:150px" %>
</td>
<td align="center" valign="middle">
@ -15,7 +15,7 @@
onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" />
</td>
<td><%= select_tag 'query[column_names][]',
options_for_select(@query.columns.collect {|column| [l("field_#{column.name}"), column.name]}),
options_for_select(@query.columns.collect {|column| [column.caption, column.name]}),
:id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
</td>
</tr>

View File

@ -61,9 +61,9 @@
<fieldset class="box"><legend><%= l(:setting_issue_list_default_columns) %></legend>
<%= hidden_field_tag 'settings[issue_list_default_columns][]', '' %>
<p><% Query.available_columns.each do |column| %>
<p><% Query.new.available_columns.each do |column| %>
<label><%= check_box_tag 'settings[issue_list_default_columns][]', column.name, Setting.issue_list_default_columns.include?(column.name.to_s) %>
<%= l("field_#{column.name}") %></label>
<%= column.caption %></label>
<% end %></p>
</fieldset>