diff --git a/app/models/filefield.rb b/app/models/filefield.rb
index 869a75e..66f5ca1 100644
--- a/app/models/filefield.rb
+++ b/app/models/filefield.rb
@@ -36,7 +36,8 @@ class Filefield
"member"=>{:files=>{'member_profile@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@model_path},
'admin/members_controller@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@controller_path},
'members_controller@rb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@controller_path},
- '_user_basic_passwd@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/admin/', :dest=>@views_path+'admin/members/'}
+ '_user_basic_passwd@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/admin/', :dest=>@views_path+'admin/members/'},
+ 'attribute_value@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/', :dest=>@model_path}
},:status=>0} ,
"accessibility"=>{:files=>{'back_end@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>@views_path+'layouts/'},
'_form@html@erb'=>{:status=>0, :sc=>@app_path+'/updatefiles/accessibility/', :dest=>@views_path+'page_parts/'},
diff --git a/updatefiles/attribute_value.rb b/updatefiles/attribute_value.rb
new file mode 100644
index 0000000..dbe4f53
--- /dev/null
+++ b/updatefiles/attribute_value.rb
@@ -0,0 +1,213 @@
+class AttributeValue
+ include Mongoid::Document
+ include Mongoid::Timestamps
+ include Mongoid::Attributes::Dynamic
+ include AttributeValuesHelper
+
+ field :key, type: String
+
+ belongs_to :attribute_field
+ belongs_to :member_profile
+
+ before_save :check_key
+ before_save :data_proc
+
+ 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.attribute_field.markup
+ when 'text_field','text_area'
+ if self.attribute_field.add_more and (self.attribute_field.markup == "text_field")
+ index.nil? ? self["val"] : self["val"][index]
+ else
+ self.attribute_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'
+ 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.attribute_field.markup
+ end
+
+ def value=(value)
+ #save everything to temp_data waiting for futher process
+ self[:temp_data] = value
+ end
+
+ def get_field_value
+ if (self.attribute_field.markup.eql?("text_field") || self.attribute_field.markup.eql?("text_area"))
+ value_gsub = self.attribute_field.get_data["cross_lang"] =="true" ? self.value.gsub("
\r\n","
") : self.value[I18n.locale].gsub("
\r\n","
")
+ field_value = value_gsub.gsub("\r\n","
")
+ elsif (self.attribute_field.markup.eql?("select") || self.attribute_field.markup.eql?("radio_button"))
+ field_value = self.attribute_field.markup_value["#{self.value}"][I18n.locale] rescue nil
+ elsif self.attribute_field.markup.eql?("address")
+ field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
+ elsif self.attribute_field.markup.eql?("date")
+ case self.attribute_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 self.attribute_field.markup.eql?("checkbox")
+ field_value = self.value.map {|v| self.attribute_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" => self.attribute_field.key,
+ "title" => self.attribute_field.title,
+ "value" => field_value,
+ "val" => field_value = self.value
+ }
+ else
+ {
+ "key" => self.attribute_field.key,
+ "title" => self.attribute_field.title,
+ "value" => " ",
+ "val" => field_value = self.value
+ }
+ end
+ end
+
+ def get_value_by_locale(locale,add_more_index=nil)
+ case self.attribute_field.markup
+ when "text_field"
+ case self.attribute_field.add_more
+ when true
+ if self.attribute_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
+ self.attribute_field.locale ? self[locale.to_s] : self.value
+ end
+
+ when "select"
+ markup_values = self.attribute_field.self_defined_markup_options? ? self.attribute_field.markup_value : self.attribute_field.markup_value
+ markup_values[self.value][locale.to_s] rescue 'NoData'
+
+ when "text_area"
+ self.attribute_field.locale ? self[locale.to_s] : self.value
+
+ when "date"
+ if self.attribute_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 = self.attribute_field.markup_value
+ markup_values[self.value][locale.to_s]
+
+ when "checkbox"
+ markup_values = self.attribute_field.markup_value
+ self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",")
+ when "date_durnation"
+ self.value
+
+ else
+ self.attribute_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)
+ @attribute_field_value = self.find(field_value_id) rescue nil
+ @attribute_field_value.update(field_value_param) rescue nil
+ @attribute_field_value.save rescue nil
+ else
+ @attribute_field_value = member.attribute_values.build(field_value_param) rescue nil
+ @attribute_field_value.save
+ end
+ return @attribute_field_value
+ end
+
+
+protected
+
+def unset_all_lang_values
+ VALID_LOCALES.each{|t| self.unset t}
+ end
+
+ def data_proc
+ unless self[:temp_data].nil?
+ case self.attribute_field.markup
+ when "address"
+ self["val"] = self["temp_data"]
+ when 'text_field','text_area'
+ if self.attribute_field.add_more
+ self["val"] = self["temp_data"]
+ else # if not add_more
+ if self.attribute_field.can_muti_lang_input?
+ self[:temp_data].each do |key,val|
+ self[key] = val
+ end if(!self.attribute_field.get_data[:cross_lang])
+ else
+ self["val"] = self[:temp_data]
+ end
+ end # of self.attribute_field.add_more
+
+ when 'select','date','radio_button'
+ self["val"] = self[:temp_data]
+ when 'checkbox'
+ self["val"] = self[:temp_data].keys
+ end #end of case self.attribute_field.markup
+ end # of self[:temp_data].nil?
+ self.unset('temp_data')
+ self.unset('temp')
+ end #of data_proc
+
+ def check_key
+ self.key = self.attribute_field.key
+ end
+
+ def method_missing(*field)
+ if field.size < 1
+ self[field[0]]
+ else
+ self[(field[0].to_s.delete "=")] = field[1]
+ end
+ end
+end