296 lines
11 KiB
Ruby
296 lines
11 KiB
Ruby
|
class GreetingCardSetting
|
||
|
include Mongoid::Document
|
||
|
include Mongoid::Timestamps
|
||
|
|
||
|
require_relative'concerns/greeting_card_setting_concern'
|
||
|
include ::GreetingCardSettingConcern
|
||
|
|
||
|
All_default_fields = ['greeting_card_category_id','name','sender_mail','recipients','greetings','card','sending_time','recaptcha','usage_rule','agree_show','agree_usage']
|
||
|
No_prompt_word = ['greeting_card_category_id', 'recaptcha']
|
||
|
No_required = ['agree_show']
|
||
|
Required = ['sender_mail', 'recipients','card']
|
||
|
|
||
|
field :last_ticket_key, type: Integer, default: 0
|
||
|
field :last_serial_number, type: Integer, default: 0
|
||
|
|
||
|
before_save do
|
||
|
@email_regex_enable_changed = self.email_regex_enable_changed?
|
||
|
@email_regex_changed = self.email_regex_changed?
|
||
|
@default_setting_prompt_word_changed = self.default_setting_prompt_word_changed?
|
||
|
@default_setting_field_name_changed = self.default_setting_field_name_changed?
|
||
|
true
|
||
|
end
|
||
|
after_save do
|
||
|
update_all_hash = {}
|
||
|
if @email_regex_enable_changed || @email_regex_changed
|
||
|
update_all_hash[:email_regex_enable] = self.email_regex_enable
|
||
|
update_all_hash[:email_regex] = self.email_regex
|
||
|
end
|
||
|
if @default_setting_prompt_word_changed
|
||
|
update_all_hash[:default_setting_prompt_word] = self.default_setting_prompt_word
|
||
|
end
|
||
|
if @default_setting_field_name_changed
|
||
|
update_all_hash[:default_setting_field_name] = self.default_setting_field_name
|
||
|
end
|
||
|
if update_all_hash.present?
|
||
|
GreetingCardCategorySetting.all.update_all(update_all_hash)
|
||
|
end
|
||
|
if @custom_fields_changed
|
||
|
GreetingCardCategorySetting.all.each do |a|
|
||
|
a.delete_customs_func(@delete_custom_fields)
|
||
|
a.update_need_check_customs(self.custom_fields)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
def use_default
|
||
|
false
|
||
|
end
|
||
|
|
||
|
def category_id
|
||
|
nil
|
||
|
end
|
||
|
|
||
|
def get_attrs
|
||
|
attrs = self.attributes.clone
|
||
|
self.fields.each do |k, v|
|
||
|
if (v.options[:localize] rescue false)
|
||
|
attrs["#{k}_translations"] = attrs[k]
|
||
|
attrs.delete(k)
|
||
|
end
|
||
|
end
|
||
|
attrs.except("_type","_id","uid","updated_at", "created_at", "email_regex", "last_ticket_key", "default_setting_required", "last_serial_number")
|
||
|
end
|
||
|
def self.update_last_serial_number(last_serial_number=nil)
|
||
|
can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash)
|
||
|
if last_serial_number.nil?
|
||
|
last_serial_number = (can_update_shared_hash ? OrbitHelper::SharedHash["greeting_card"][:last_serial_number] : self.pluck(:last_serial_number)[0].to_i)
|
||
|
self.all.inc({'last_serial_number'=>1})
|
||
|
last_serial_number += 1
|
||
|
else
|
||
|
self.all.update_all(:last_serial_number=>last_serial_number)
|
||
|
end
|
||
|
if can_update_shared_hash
|
||
|
OrbitHelper::SharedHash["greeting_card"][:last_serial_number] = last_serial_number
|
||
|
end
|
||
|
last_serial_number
|
||
|
end
|
||
|
def self.get_sort_number_only(only_display=true, cat=nil, cat_is_record=false, override_sort_number=nil, use_cache=false)
|
||
|
greeting_card_setting = nil
|
||
|
if cat_is_record
|
||
|
greeting_card_setting = cat
|
||
|
is_cat_record = (cat.class == GreetingCardCategorySetting)
|
||
|
is_cat_record2 = is_cat_record || !(override_sort_number.nil?)
|
||
|
else
|
||
|
if cat.present?
|
||
|
greeting_card_setting = GreetingCardCategorySetting.enabled.where(:category_id=>cat).first
|
||
|
is_cat_record = true
|
||
|
end
|
||
|
greeting_card_setting = self.first if greeting_card_setting.nil?
|
||
|
greeting_card_setting = self.create() if greeting_card_setting.nil?
|
||
|
end
|
||
|
if only_display && use_cache
|
||
|
if override_sort_number
|
||
|
sort_number = override_sort_number
|
||
|
else
|
||
|
sort_number = greeting_card_setting.get_cache_sort_number
|
||
|
end
|
||
|
return sort_number
|
||
|
end
|
||
|
is_default_setting = (greeting_card_setting.class == self)
|
||
|
if override_sort_number.present?
|
||
|
sort_number = override_sort_number
|
||
|
else
|
||
|
sort_number = greeting_card_setting.sort_number
|
||
|
if greeting_card_setting.use_default
|
||
|
if greeting_card_setting.default_sort_number.blank?
|
||
|
sort_number = (is_default_setting ? sort_number : self.first.sort_number)
|
||
|
else
|
||
|
sort_number = greeting_card_setting.default_sort_number
|
||
|
end
|
||
|
override_sort_number = sort_number
|
||
|
greeting_card_setting = self.first
|
||
|
end
|
||
|
end
|
||
|
default_greeting_card_setting = is_default_setting ? greeting_card_setting : self.first
|
||
|
disp_fields = self::All_default_fields
|
||
|
disp_fields_infos = {}
|
||
|
locale = I18n.locale.to_s
|
||
|
if !only_display || greeting_card_setting.default_setting['title'] != false
|
||
|
disp_fields_infos['title'] = sort_number['title'].to_i
|
||
|
end
|
||
|
tmp = disp_fields[0...-4]
|
||
|
if only_display
|
||
|
tmp = tmp.select{|f| greeting_card_setting.default_setting[f]}
|
||
|
end
|
||
|
tmp.each do |f|
|
||
|
disp_fields_infos[f] = sort_number[f]
|
||
|
end
|
||
|
tmp_locales = I18n.available_locales.map{|l| l.to_s}
|
||
|
tmp_locales = [locale] + (tmp_locales - [locale])
|
||
|
greeting_card_setting.custom_fields.each do |k,v|
|
||
|
tmp_k = k
|
||
|
if !k.start_with?('default@')
|
||
|
prefix = is_cat_record ? "custom@#{cat.id}@" : 'default@'
|
||
|
tmp_k = "#{prefix}#{k}"
|
||
|
end
|
||
|
disp_fields_infos[tmp_k] = sort_number[tmp_k]
|
||
|
end
|
||
|
greeting_card_category_settings = []
|
||
|
if is_cat_record2
|
||
|
greeting_card_category_settings = []
|
||
|
else
|
||
|
greeting_card_category_settings = GreetingCardCategorySetting.custom_enabled.to_a
|
||
|
end
|
||
|
greeting_card_category_settings.each do |c|
|
||
|
category = Category.find(c.category_id) rescue nil
|
||
|
if category.nil?
|
||
|
c.destroy
|
||
|
next
|
||
|
end
|
||
|
c.custom_fields.each do |k,v|
|
||
|
next if k.start_with?('default@')
|
||
|
tmp_k = "custom@#{c.id}@#{k}"
|
||
|
cat_title = category.title rescue ""
|
||
|
disp_fields_infos[tmp_k] = sort_number[tmp_k]
|
||
|
end
|
||
|
end
|
||
|
tmp = disp_fields[-4..-1]
|
||
|
if only_display
|
||
|
tmp = tmp.select{|f| greeting_card_setting.default_setting[f] || f == 'usage_rule'}
|
||
|
end
|
||
|
tmp.each do |f|
|
||
|
disp_fields_infos[f] = sort_number[f]
|
||
|
end
|
||
|
max_sort_number = disp_fields_infos.values.map{|v| v}.compact.max
|
||
|
if max_sort_number
|
||
|
if !use_cache || (is_default_setting && override_sort_number.nil?)
|
||
|
max_sort_number = max_sort_number + 1
|
||
|
disp_fields_infos.each_with_index do |(k,v), i|
|
||
|
if v.blank?
|
||
|
disp_fields_infos[k] = max_sort_number + i
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
disp_fields_infos = disp_fields_infos.sort_by {|_key, value| value}.to_h
|
||
|
end
|
||
|
disp_fields_infos
|
||
|
end
|
||
|
def self.get_disp_fields_infos(only_display=true, cat=nil, cat_is_record=false, override_sort_number=nil, use_cache=false)
|
||
|
greeting_card_setting = nil
|
||
|
if cat_is_record
|
||
|
greeting_card_setting = cat
|
||
|
is_cat_record = (cat.class == GreetingCardCategorySetting)
|
||
|
is_cat_record2 = is_cat_record || !(override_sort_number.nil?)
|
||
|
else
|
||
|
if cat.present?
|
||
|
greeting_card_setting = GreetingCardCategorySetting.enabled.where(:category_id=>cat).first
|
||
|
is_cat_record = true
|
||
|
end
|
||
|
greeting_card_setting = self.first if greeting_card_setting.nil?
|
||
|
greeting_card_setting = self.create() if greeting_card_setting.nil?
|
||
|
end
|
||
|
is_default_setting = (greeting_card_setting.class == self)
|
||
|
sort_number = nil
|
||
|
if only_display && use_cache
|
||
|
if override_sort_number
|
||
|
sort_number = override_sort_number
|
||
|
else
|
||
|
sort_number = greeting_card_setting.get_cache_sort_number
|
||
|
end
|
||
|
else
|
||
|
use_cache = false
|
||
|
sort_number = greeting_card_setting.sort_number
|
||
|
if override_sort_number.present?
|
||
|
sort_number = override_sort_number
|
||
|
elsif greeting_card_setting.use_default
|
||
|
if greeting_card_setting.default_sort_number.blank?
|
||
|
sort_number = (is_default_setting ? sort_number : self.first.sort_number)
|
||
|
else
|
||
|
sort_number = greeting_card_setting.default_sort_number
|
||
|
end
|
||
|
override_sort_number = sort_number
|
||
|
greeting_card_setting = self.first
|
||
|
end
|
||
|
end
|
||
|
default_greeting_card_setting = is_default_setting ? greeting_card_setting : self.first
|
||
|
disp_fields = self::All_default_fields
|
||
|
disp_fields_infos = {}
|
||
|
locale = I18n.locale.to_s
|
||
|
if !only_display || greeting_card_setting.default_setting['title'] != false
|
||
|
disp_fields_infos['title'] = {"trans"=>greeting_card_setting.field_name('title'), "sort_number"=>sort_number['title'].to_i}
|
||
|
end
|
||
|
tmp = disp_fields[0...-4]
|
||
|
if only_display
|
||
|
tmp = tmp.select{|f| greeting_card_setting.default_setting[f]}
|
||
|
end
|
||
|
tmp.each do |f|
|
||
|
disp_fields_infos[f] = {"trans"=>default_greeting_card_setting.field_name(f,locale),"sort_number"=>sort_number[f]}
|
||
|
end
|
||
|
tmp_locales = I18n.available_locales.map{|l| l.to_s}
|
||
|
tmp_locales = [locale] + (tmp_locales - [locale])
|
||
|
greeting_card_setting.custom_fields.each do |k,v|
|
||
|
trans = v["field"]
|
||
|
tmp_locales.each do |l|
|
||
|
if trans[l].present?
|
||
|
trans = trans[l]
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
next if trans.class != String
|
||
|
tmp_k = k
|
||
|
if !k.start_with?('default@')
|
||
|
prefix = is_cat_record ? "custom@#{cat.id}@" : 'default@'
|
||
|
tmp_k = "#{prefix}#{k}"
|
||
|
end
|
||
|
disp_fields_infos[tmp_k] = {"trans"=>trans,"sort_number"=>sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
|
||
|
end
|
||
|
greeting_card_category_settings = []
|
||
|
if is_cat_record2
|
||
|
greeting_card_category_settings = []
|
||
|
else
|
||
|
greeting_card_category_settings = GreetingCardCategorySetting.custom_enabled.to_a
|
||
|
end
|
||
|
greeting_card_category_settings.each do |c|
|
||
|
category = Category.find(c.category_id) rescue nil
|
||
|
if category.nil?
|
||
|
c.destroy
|
||
|
next
|
||
|
end
|
||
|
c.custom_fields.each do |k,v|
|
||
|
trans = v["field"]
|
||
|
tmp_locales.each do |l|
|
||
|
if trans[l].present?
|
||
|
trans = trans[l]
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
next if trans.class != String
|
||
|
next if k.start_with?('default@')
|
||
|
tmp_k = "custom@#{c.id}@#{k}"
|
||
|
cat_title = category.title rescue ""
|
||
|
disp_fields_infos[tmp_k] = {"trans"=>"#{cat_title}-#{trans}","sort_number"=>sort_number[tmp_k],"key"=>k,"type"=>v["type"],"options"=>v["options"],"instructions"=>v["instructions"]}
|
||
|
end
|
||
|
end
|
||
|
tmp = disp_fields[-4..-1]
|
||
|
if only_display
|
||
|
tmp = tmp.select{|f| greeting_card_setting.default_setting[f] || f == 'usage_rule'}
|
||
|
end
|
||
|
tmp.each do |f|
|
||
|
disp_fields_infos[f] = {"trans"=>default_greeting_card_setting.field_name(f,locale),"sort_number"=>sort_number[f]}
|
||
|
end
|
||
|
max_sort_number = disp_fields_infos.values.map{|h| h["sort_number"]}.compact.max
|
||
|
if max_sort_number
|
||
|
if !use_cache || (is_default_setting && override_sort_number.nil?)
|
||
|
max_sort_number = max_sort_number + 1
|
||
|
disp_fields_infos.each_with_index do |(k,h), i|
|
||
|
if h["sort_number"].blank?
|
||
|
h["sort_number"] = max_sort_number + i
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
disp_fields_infos = disp_fields_infos.sort_by {|_key, value| value["sort_number"]}.to_h
|
||
|
end
|
||
|
disp_fields_infos
|
||
|
end
|
||
|
end
|