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