Replace the hardcoded CustomField::FIELD_FORMATS with a class.
Custom Field Formats are now full objects and can be registered with Redmine::CustomFieldFormat to add new formats. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3672 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
0e1595ad56
commit
88db9d0bdc
|
@ -108,6 +108,6 @@ module CustomFieldsHelper
|
||||||
|
|
||||||
# Return an array of custom field formats which can be used in select_tag
|
# Return an array of custom field formats which can be used in select_tag
|
||||||
def custom_field_formats_for_select
|
def custom_field_formats_for_select
|
||||||
CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] }
|
Redmine::CustomFieldFormat.as_select
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,20 +20,11 @@ class CustomField < ActiveRecord::Base
|
||||||
acts_as_list :scope => 'type = \'#{self.class}\''
|
acts_as_list :scope => 'type = \'#{self.class}\''
|
||||||
serialize :possible_values
|
serialize :possible_values
|
||||||
|
|
||||||
FIELD_FORMATS = { "string" => { :name => :label_string, :order => 1 },
|
|
||||||
"text" => { :name => :label_text, :order => 2 },
|
|
||||||
"int" => { :name => :label_integer, :order => 3 },
|
|
||||||
"float" => { :name => :label_float, :order => 4 },
|
|
||||||
"list" => { :name => :label_list, :order => 5 },
|
|
||||||
"date" => { :name => :label_date, :order => 6 },
|
|
||||||
"bool" => { :name => :label_boolean, :order => 7 }
|
|
||||||
}.freeze
|
|
||||||
|
|
||||||
validates_presence_of :name, :field_format
|
validates_presence_of :name, :field_format
|
||||||
validates_uniqueness_of :name, :scope => :type
|
validates_uniqueness_of :name, :scope => :type
|
||||||
validates_length_of :name, :maximum => 30
|
validates_length_of :name, :maximum => 30
|
||||||
validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
|
validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
|
||||||
validates_inclusion_of :field_format, :in => FIELD_FORMATS.keys
|
validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats
|
||||||
|
|
||||||
def initialize(attributes = nil)
|
def initialize(attributes = nil)
|
||||||
super
|
super
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
|
<% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
|
||||||
<tr class="<%= cycle("odd", "even") %>">
|
<tr class="<%= cycle("odd", "even") %>">
|
||||||
<td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>
|
<td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>
|
||||||
<td align="center"><%= l(CustomField::FIELD_FORMATS[custom_field.field_format][:name]) %></td>
|
<td align="center"><%= l(Redmine::CustomFieldFormat.label_for(custom_field.field_format)) %></td>
|
||||||
<td align="center"><%= checked_image custom_field.is_required? %></td>
|
<td align="center"><%= checked_image custom_field.is_required? %></td>
|
||||||
<% if tab[:name] == 'IssueCustomField' %>
|
<% if tab[:name] == 'IssueCustomField' %>
|
||||||
<td align="center"><%= checked_image custom_field.is_for_all? %></td>
|
<td align="center"><%= checked_image custom_field.is_for_all? %></td>
|
||||||
|
|
|
@ -2,6 +2,7 @@ require 'redmine/access_control'
|
||||||
require 'redmine/menu_manager'
|
require 'redmine/menu_manager'
|
||||||
require 'redmine/activity'
|
require 'redmine/activity'
|
||||||
require 'redmine/search'
|
require 'redmine/search'
|
||||||
|
require 'redmine/custom_field_format'
|
||||||
require 'redmine/mime_type'
|
require 'redmine/mime_type'
|
||||||
require 'redmine/core_ext'
|
require 'redmine/core_ext'
|
||||||
require 'redmine/themes'
|
require 'redmine/themes'
|
||||||
|
@ -31,6 +32,16 @@ Redmine::Scm::Base.add "Bazaar"
|
||||||
Redmine::Scm::Base.add "Git"
|
Redmine::Scm::Base.add "Git"
|
||||||
Redmine::Scm::Base.add "Filesystem"
|
Redmine::Scm::Base.add "Filesystem"
|
||||||
|
|
||||||
|
Redmine::CustomFieldFormat.map do |fields|
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('string', :label => :label_string, :order => 1)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('text', :label => :label_text, :order => 2)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('int', :label => :label_integer, :order => 3)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('float', :label => :label_float, :order => 4)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
|
||||||
|
fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
|
||||||
|
end
|
||||||
|
|
||||||
# Permissions
|
# Permissions
|
||||||
Redmine::AccessControl.map do |map|
|
Redmine::AccessControl.map do |map|
|
||||||
map.permission :view_project, {:projects => [:show, :activity]}, :public => true
|
map.permission :view_project, {:projects => [:show, :activity]}, :public => true
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Redmine - project management software
|
||||||
|
# Copyright (C) 2006-2009 Jean-Philippe Lang
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
module Redmine
|
||||||
|
class CustomFieldFormat
|
||||||
|
include Redmine::I18n
|
||||||
|
|
||||||
|
cattr_accessor :available
|
||||||
|
@@available = {}
|
||||||
|
|
||||||
|
attr_accessor :name, :order, :label
|
||||||
|
|
||||||
|
def initialize(name, options={})
|
||||||
|
self.name = name
|
||||||
|
self.label = options[:label]
|
||||||
|
self.order = options[:order]
|
||||||
|
end
|
||||||
|
|
||||||
|
class << self
|
||||||
|
def map(&block)
|
||||||
|
yield self
|
||||||
|
end
|
||||||
|
|
||||||
|
# Registers a custom field format
|
||||||
|
def register(custom_field_format, options={})
|
||||||
|
@@available[custom_field_format.name] = custom_field_format unless @@available.keys.include?(custom_field_format.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def available_formats
|
||||||
|
@@available.keys
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_by_name(name)
|
||||||
|
@@available[name.to_s]
|
||||||
|
end
|
||||||
|
|
||||||
|
def label_for(name)
|
||||||
|
format = @@available[name.to_s]
|
||||||
|
format.label if format
|
||||||
|
end
|
||||||
|
|
||||||
|
# Return an array of custom field formats which can be used in select_tag
|
||||||
|
def as_select
|
||||||
|
@@available.values.sort {|a,b|
|
||||||
|
a.order <=> b.order
|
||||||
|
}.collect {|custom_field_format|
|
||||||
|
[ l(custom_field_format.label), custom_field_format.name ]
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue