class SeminarSubmissionValue include Mongoid::Document include Mongoid::Timestamps include Mongoid::Attributes::Dynamic include ::AttributeValuesHelper include ::Admin::SeminarsValuesHelper field :key, type: String field :val belongs_to :seminar_submission_field belongs_to :seminar_signup_contribute before_save :check_key before_save :data_proc after_save do if (self.seminar_submission_field.markup == "seminar_preferred_session" rescue false) && self.seminar_signup_contribute val_change = self.val_change self.seminar_signup_contribute.update(:preferred_session=>val.to_i) self.seminar_signup_contribute.seminar_signup.set_preferred_sessions unless val_change.nil? old_val = val_change[0] new_val = val_change[1] seminar_signup_id = self.seminar_signup_contribute.seminar_signup_id.to_s seminar_sessions = self.seminar_submission_field.seminar_main.seminar_sessions.to_a old_seminar_session = seminar_sessions.select{|ss| ss.key.to_s == old_val}.first if old_seminar_session old_seminar_session.default_seminar_signup_ids.delete seminar_signup_id old_seminar_session.save end new_seminar_session = seminar_sessions.select{|ss| ss.key.to_s == new_val}.first if new_seminar_session new_seminar_session.default_seminar_signup_ids << seminar_signup_id new_seminar_session.save end end end end def add_more_counter index_max = self["val"].count rescue 0 index_max == 0 ? 1 : index_max end def value(index = nil) site = Site.first result = case self.seminar_submission_field.markup when 'text_field','text_area' if self.seminar_submission_field.add_more and (self.seminar_submission_field.markup == "text_field") index.nil? ? self["val"] : self["val"][index] else self.seminar_submission_field.get_data["cross_lang"] =="true" ? self["val"] : Hash[site.valid_locales.collect{|lang| [lang,self[lang.to_sym]]}] end when 'select','radio_button','address','seminar_preferred_session' self["val"] when 'date' if !self["val"].blank? and !self["val"]['(1i)'].blank? "#{self["val"]['(1i)']}/#{self["val"]['(2i)']}/#{self["val"]['(3i)']}" else self["val"] end when 'checkbox' self["val"] end #end of case self.seminar_submission_field.markup end def value=(value) #save everything to temp_data waiting for futher process self[:temp_data] = value end def get_field_value seminar_submission_field = self.seminar_submission_field if (seminar_submission_field.markup.eql?("text_field") || seminar_submission_field.markup.eql?("text_area")) if self.value.class == String field_value = self.value else field_value = self.value[I18n.locale] end elsif (seminar_submission_field.markup.eql?("select") || seminar_submission_field.markup.eql?("radio_button")) field_value = seminar_submission_field.markup_value["#{self.value}"][I18n.locale] rescue nil elsif seminar_submission_field.markup.eql?("seminar_preferred_session") field_value = seminar_submission_field.seminar_main.summary_chioices[self.value.to_i] rescue nil elsif seminar_submission_field.markup.eql?("address") field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ') elsif seminar_submission_field.markup.eql?("date") case seminar_submission_field.typeC['format'] when 'format1' field_value = self.value.to_date.strftime("%Y/%m/%d") when 'format2' field_value = self.value.to_date.strftime("%Y/%m/%d") when 'format3' field_value = self.value.to_date.strftime("%Y/%m") when 'format4' field_value = self.value.to_date.strftime("%Y") end elsif seminar_submission_field.markup.eql?("checkbox") field_value = self.value.map {|v| seminar_submission_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil end field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "#{field_value}" : field_value field_value = (field_value =~ /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) ? "#{field_value}" : field_value if !field_value.blank? { "key" => seminar_submission_field.key, "title" => seminar_submission_field.title, "value" => field_value, "val" => field_value = self.value } else { "key" => seminar_submission_field.key, "title" => seminar_submission_field.title, "value" => "", "val" => field_value = self.value } end end def get_value_by_locale(locale,add_more_index=nil) seminar_submission_field = self.seminar_submission_field case seminar_submission_field.markup when "text_field" case seminar_submission_field.add_more when true if seminar_submission_field.locale add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale] else add_more_index.nil? ? self.value.join(",") : self.value(add_more_index) end when false seminar_submission_field.locale ? self[locale.to_s] : self.value end when "select" markup_values = seminar_submission_field.self_defined_markup_options? ? seminar_submission_field.markup_value : self.seminar_submission_field.markup_value markup_values[self.value][locale.to_s] rescue 'NoData' when "text_area" seminar_submission_field.locale ? self[locale.to_s] : self.value when "date" if seminar_submission_field.date_is_range? get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to) # self.value["from"] + ' ~ ' + self.value["to"] else get_date_by_format # self.value end when "address" self.value[locale.to_s] when "radio_button" markup_values = seminar_submission_field.markup_value markup_values[self.value][locale.to_s] when "seminar_preferred_session" seminar_submission_field.seminar_main.summary_chioices[self.value.to_i] rescue nil when "checkbox" markup_values = seminar_submission_field.markup_value self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",") when "date_durnation" self.value else seminar_submission_field.locale ? self[locale.to_s] : self.value end end def get_date(item = nil) case item when :from # data = self[:val]["from"] data = self.value["from"] when :to # data = self[:val]["to"] data = self.value["to"] when nil # data = self[:val] data = self.value end # Date.new(data["(1i)"].to_i,data["(2i)"].to_i,data["(3i)"].to_i) rescue nil end def self.put_field_values(member, field_value_param, field_value_id=nil,field_value_status) if field_value_status.eql?(true) @seminar_submission_field_value = self.find(field_value_id) rescue nil @seminar_submission_field_value.update(field_value_param) rescue nil @seminar_submission_field_value.save rescue nil else @seminar_submission_field_value = member.seminar_submission_values.build(field_value_param) rescue nil @seminar_submission_field_value.save end return @seminar_submission_field_value end protected def unset_all_lang_values VALID_LOCALES.each{|t| self.unset t} end def data_proc seminar_submission_field = self.seminar_submission_field unless self[:temp_data].nil? case seminar_submission_field.markup when "address" self["val"] = self["temp_data"] when 'text_field','text_area' if seminar_submission_field.add_more self["val"] = self["temp_data"] else # if not add_more if seminar_submission_field.can_muti_lang_input? self[:temp_data].each do |key,val| self[key] = val end if(!seminar_submission_field.get_data[:cross_lang]) else self["val"] = self[:temp_data] end end # of self.seminar_submission_field.add_more when 'select','date','radio_button','seminar_preferred_session' self["val"] = self[:temp_data] when 'checkbox' self["val"] = self[:temp_data].keys end #end of case self.seminar_submission_field.markup end # of self[:temp_data].nil? self.unset('temp_data') self.unset('temp') end #of data_proc def check_key if self.seminar_submission_field_id.present? && self.seminar_submission_field.nil? begin self.seminar_submission_field = SeminarSubmissionField.find(self.seminar_submission_field_id) rescue nil end end self.key = self.seminar_submission_field.key rescue nil end def method_missing(*field) if field.size < 1 self[field[0]] else self[(field[0].to_s.delete "=")] = field[1] end end end