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
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
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
<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">
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>
<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>