##// END OF EJS Templates
Replace the hardcoded CustomField::FIELD_FORMATS with a class....
Eric Davis -
r3558:88db9d0bdc9b
parent child
Show More
@@ -0,0 +1,66
1 # Redmine - project management software
2 # Copyright (C) 2006-2009 Jean-Philippe Lang
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
18 module Redmine
19 class CustomFieldFormat
20 include Redmine::I18n
21
22 cattr_accessor :available
23 @@available = {}
24
25 attr_accessor :name, :order, :label
26
27 def initialize(name, options={})
28 self.name = name
29 self.label = options[:label]
30 self.order = options[:order]
31 end
32
33 class << self
34 def map(&block)
35 yield self
36 end
37
38 # Registers a custom field format
39 def register(custom_field_format, options={})
40 @@available[custom_field_format.name] = custom_field_format unless @@available.keys.include?(custom_field_format.name)
41 end
42
43 def available_formats
44 @@available.keys
45 end
46
47 def find_by_name(name)
48 @@available[name.to_s]
49 end
50
51 def label_for(name)
52 format = @@available[name.to_s]
53 format.label if format
54 end
55
56 # Return an array of custom field formats which can be used in select_tag
57 def as_select
58 @@available.values.sort {|a,b|
59 a.order <=> b.order
60 }.collect {|custom_field_format|
61 [ l(custom_field_format.label), custom_field_format.name ]
62 }
63 end
64 end
65 end
66 end
@@ -108,6 +108,6 module CustomFieldsHelper
108
108
109 # Return an array of custom field formats which can be used in select_tag
109 # Return an array of custom field formats which can be used in select_tag
110 def custom_field_formats_for_select
110 def custom_field_formats_for_select
111 CustomField::FIELD_FORMATS.sort {|a,b| a[1][:order]<=>b[1][:order]}.collect { |k| [ l(k[1][:name]), k[0] ] }
111 Redmine::CustomFieldFormat.as_select
112 end
112 end
113 end
113 end
@@ -20,20 +20,11 class CustomField < ActiveRecord::Base
20 acts_as_list :scope => 'type = \'#{self.class}\''
20 acts_as_list :scope => 'type = \'#{self.class}\''
21 serialize :possible_values
21 serialize :possible_values
22
22
23 FIELD_FORMATS = { "string" => { :name => :label_string, :order => 1 },
24 "text" => { :name => :label_text, :order => 2 },
25 "int" => { :name => :label_integer, :order => 3 },
26 "float" => { :name => :label_float, :order => 4 },
27 "list" => { :name => :label_list, :order => 5 },
28 "date" => { :name => :label_date, :order => 6 },
29 "bool" => { :name => :label_boolean, :order => 7 }
30 }.freeze
31
32 validates_presence_of :name, :field_format
23 validates_presence_of :name, :field_format
33 validates_uniqueness_of :name, :scope => :type
24 validates_uniqueness_of :name, :scope => :type
34 validates_length_of :name, :maximum => 30
25 validates_length_of :name, :maximum => 30
35 validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
26 validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
36 validates_inclusion_of :field_format, :in => FIELD_FORMATS.keys
27 validates_inclusion_of :field_format, :in => Redmine::CustomFieldFormat.available_formats
37
28
38 def initialize(attributes = nil)
29 def initialize(attributes = nil)
39 super
30 super
@@ -14,7 +14,7
14 <% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
14 <% (@custom_fields_by_type[tab[:name]] || []).sort.each do |custom_field| -%>
15 <tr class="<%= cycle("odd", "even") %>">
15 <tr class="<%= cycle("odd", "even") %>">
16 <td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>
16 <td><%= link_to custom_field.name, :action => 'edit', :id => custom_field %></td>
17 <td align="center"><%= l(CustomField::FIELD_FORMATS[custom_field.field_format][:name]) %></td>
17 <td align="center"><%= l(Redmine::CustomFieldFormat.label_for(custom_field.field_format)) %></td>
18 <td align="center"><%= checked_image custom_field.is_required? %></td>
18 <td align="center"><%= checked_image custom_field.is_required? %></td>
19 <% if tab[:name] == 'IssueCustomField' %>
19 <% if tab[:name] == 'IssueCustomField' %>
20 <td align="center"><%= checked_image custom_field.is_for_all? %></td>
20 <td align="center"><%= checked_image custom_field.is_for_all? %></td>
@@ -2,6 +2,7 require 'redmine/access_control'
2 require 'redmine/menu_manager'
2 require 'redmine/menu_manager'
3 require 'redmine/activity'
3 require 'redmine/activity'
4 require 'redmine/search'
4 require 'redmine/search'
5 require 'redmine/custom_field_format'
5 require 'redmine/mime_type'
6 require 'redmine/mime_type'
6 require 'redmine/core_ext'
7 require 'redmine/core_ext'
7 require 'redmine/themes'
8 require 'redmine/themes'
@@ -31,6 +32,16 Redmine::Scm::Base.add "Bazaar"
31 Redmine::Scm::Base.add "Git"
32 Redmine::Scm::Base.add "Git"
32 Redmine::Scm::Base.add "Filesystem"
33 Redmine::Scm::Base.add "Filesystem"
33
34
35 Redmine::CustomFieldFormat.map do |fields|
36 fields.register Redmine::CustomFieldFormat.new('string', :label => :label_string, :order => 1)
37 fields.register Redmine::CustomFieldFormat.new('text', :label => :label_text, :order => 2)
38 fields.register Redmine::CustomFieldFormat.new('int', :label => :label_integer, :order => 3)
39 fields.register Redmine::CustomFieldFormat.new('float', :label => :label_float, :order => 4)
40 fields.register Redmine::CustomFieldFormat.new('list', :label => :label_list, :order => 5)
41 fields.register Redmine::CustomFieldFormat.new('date', :label => :label_date, :order => 6)
42 fields.register Redmine::CustomFieldFormat.new('bool', :label => :label_boolean, :order => 7)
43 end
44
34 # Permissions
45 # Permissions
35 Redmine::AccessControl.map do |map|
46 Redmine::AccessControl.map do |map|
36 map.permission :view_project, {:projects => [:show, :activity]}, :public => true
47 map.permission :view_project, {:projects => [:show, :activity]}, :public => true
General Comments 0
You need to be logged in to leave comments. Login now