From 63ceea2e218367f4043580c15288c54ddc225114 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Wed, 7 Nov 2007 20:42:28 +0000 Subject: [PATCH] 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 --- app/helpers/queries_helper.rb | 29 +++++++++++++++-------------- app/models/query.rb | 29 +++++++++++++++++++++++++++-- app/views/queries/_columns.rhtml | 4 ++-- app/views/settings/edit.rhtml | 4 ++-- 4 files changed, 46 insertions(+), 20 deletions(-) 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" %>