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 end
def column_header(column) def column_header(column)
if column.sortable column.sortable ? sort_header_tag(column.sortable, :caption => column.caption) : content_tag('th', column.caption)
sort_header_tag(column.sortable, :caption => l("field_#{column.name}"))
else
content_tag('th', l("field_#{column.name}"))
end
end end
def column_content(column, issue) def column_content(column, issue)
value = issue.send(column.name) if column.is_a?(QueryCustomFieldColumn)
if value.is_a?(Date) cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
format_date(value) show_value(cv)
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 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 end
end end

View File

@ -17,13 +17,33 @@
class QueryColumn class QueryColumn
attr_accessor :name, :sortable attr_accessor :name, :sortable
include GLoc
def initialize(name, options={}) def initialize(name, options={})
self.name = name self.name = name
self.sortable = options[:sortable] self.sortable = options[:sortable]
end 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 end
class Query < ActiveRecord::Base class Query < ActiveRecord::Base
@ -203,7 +223,12 @@ class Query < ActiveRecord::Base
end end
def available_columns 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 end
def columns def columns

View File

@ -5,7 +5,7 @@
<table margin=0> <table margin=0>
<tr> <tr>
<td><%= select_tag 'available_columns', <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" %> :multiple => true, :size => 10, :style => "width:150px" %>
</td> </td>
<td align="center" valign="middle"> <td align="center" valign="middle">
@ -15,7 +15,7 @@
onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" /> onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" />
</td> </td>
<td><%= select_tag 'query[column_names][]', <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" %> :id => 'selected_columns', :multiple => true, :size => 10, :style => "width:150px" %>
</td> </td>
</tr> </tr>

View File

@ -61,9 +61,9 @@
<fieldset class="box"><legend><%= l(:setting_issue_list_default_columns) %></legend> <fieldset class="box"><legend><%= l(:setting_issue_list_default_columns) %></legend>
<%= hidden_field_tag 'settings[issue_list_default_columns][]', '' %> <%= 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) %> <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> <% end %></p>
</fieldset> </fieldset>