diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb index 78693285..6e5511f0 100644 --- a/app/helpers/queries_helper.rb +++ b/app/helpers/queries_helper.rb @@ -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 diff --git a/app/models/query.rb b/app/models/query.rb index db890652..6e865456 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -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 diff --git a/app/views/queries/_columns.rhtml b/app/views/queries/_columns.rhtml index b03a3277..8d3da7f6 100644 --- a/app/views/queries/_columns.rhtml +++ b/app/views/queries/_columns.rhtml @@ -5,7 +5,7 @@ diff --git a/app/views/settings/edit.rhtml b/app/views/settings/edit.rhtml index d3f994d4..b08b707b 100644 --- a/app/views/settings/edit.rhtml +++ b/app/views/settings/edit.rhtml @@ -61,9 +61,9 @@
<%= l(:setting_issue_list_default_columns) %> <%= hidden_field_tag 'settings[issue_list_default_columns][]', '' %> -

<% Query.available_columns.each do |column| %> +

<% Query.new.available_columns.each do |column| %> + <%= column.caption %> <% end %>

<%= 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" %> @@ -15,7 +15,7 @@ onclick="moveOptions(this.form.selected_columns, this.form.available_columns);" /> <%= 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" %>