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