##// END OF EJS Templates
Speeds up rendering of the project list for users who belong to hundreds of projects....
Speeds up rendering of the project list for users who belong to hundreds of projects. git-svn-id: http://svn.redmine.org/redmine/trunk@16123 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r15308:cf22053dd583
r15741:f8df935dcada
Show More
custom_field_enumeration.rb
90 lines | 2.5 KiB | text/x-ruby | RubyLexer
/ app / models / custom_field_enumeration.rb
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 # Redmine - project management software
Jean-Philippe Lang
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 Jean-Philippe Lang
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 #
# 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.
class CustomFieldEnumeration < ActiveRecord::Base
Jean-Philippe Lang
Use safe_attributes for custom field enumerations....
r15308 include Redmine::SafeAttributes
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 belongs_to :custom_field
attr_accessible :name, :active, :position
validates_presence_of :name, :position, :custom_field_id
validates_length_of :name, :maximum => 60
validates_numericality_of :position, :only_integer => true
before_create :set_position
scope :active, lambda { where(:active => true) }
Jean-Philippe Lang
Use safe_attributes for custom field enumerations....
r15308 safe_attributes 'name',
'active',
'position'
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 def to_s
name.to_s
end
def objects_count
custom_values.count
end
def in_use?
objects_count > 0
end
alias :destroy_without_reassign :destroy
def destroy(reassign_to=nil)
if reassign_to
custom_values.update_all(:value => reassign_to.id.to_s)
end
destroy_without_reassign
end
def custom_values
custom_field.custom_values.where(:value => id.to_s)
end
def self.update_each(custom_field, attributes)
return unless attributes.is_a?(Hash)
transaction do
attributes.each do |enumeration_id, enumeration_attributes|
enumeration = custom_field.enumerations.find_by_id(enumeration_id)
if enumeration
Jean-Philippe Lang
Use safe_attributes for custom field enumerations....
r15308 if block_given?
yield enumeration, enumeration_attributes
else
enumeration.attributes = enumeration_attributes
end
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 unless enumeration.save
raise ActiveRecord::Rollback
end
end
end
end
end
Jean-Philippe Lang
Fixed that grouping issue by key/value custom field does not work (#22178)....
r14842 def self.fields_for_order_statement(table=nil)
table ||= table_name
columns = ['position']
columns.uniq.map {|field| "#{table}.#{field}"}
end
Jean-Philippe Lang
Adds Enumeration custom field format (#21060)....
r14363 private
def set_position
max = self.class.where(:custom_field_id => custom_field_id).maximum(:position) || 0
self.position = max + 1
end
end