]> source.dussan.org Git - redmine.git/commitdiff
Custom fields can now be displayed as columns on the issue list.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 7 Nov 2007 20:42:28 +0000 (20:42 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 7 Nov 2007 20:42:28 +0000 (20:42 +0000)
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
app/models/query.rb
app/views/queries/_columns.rhtml
app/views/settings/edit.rhtml

index 7869328551e5a99df33397aa57784ce34bd6b12a..6e5511f08ef968569b78523f313acaef31831f83 100644 (file)
@@ -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
index db890652583420ca36df56319a27a38be6c25584..6e8654567902509b07d68f1a09a66961d9f7c46e 100644 (file)
 
 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
index b03a3277d6b5ef8d7743f744273610b8e3725c05..8d3da7f6a4b2811ed28ecd4efddb933989854213 100644 (file)
@@ -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>
index d3f994d4f83ef5edc8aa32ee06a37e954769881b..b08b707bfe1878909f1333b193e06322dc791308 100644 (file)
@@ -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>