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:
parent
ad68a82be1
commit
63ceea2e21
|
@ -22,14 +22,14 @@ 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)
|
||||
if column.is_a?(QueryCustomFieldColumn)
|
||||
cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
|
||||
show_value(cv)
|
||||
else
|
||||
value = issue.send(column.name)
|
||||
if value.is_a?(Date)
|
||||
format_date(value)
|
||||
|
@ -42,4 +42,5 @@ module QueriesHelper
|
|||
h(value)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in New Issue