diff --git a/app/controllers/admin/members_controller.rb b/app/controllers/admin/members_controller.rb index d449a66..b620595 100644 --- a/app/controllers/admin/members_controller.rb +++ b/app/controllers/admin/members_controller.rb @@ -1,5 +1,8 @@ class Admin::MembersController < OrbitMemberController before_action :set_member_profile, only: [:show, :edit, :update] + + helper MemberHelper + helper OrbitBackendHelper def index @roles = Role.excludes(disabled: true) diff --git a/app/helpers/attribute_fields_helper.rb b/app/helpers/attribute_fields_helper.rb index c5fcf0b..0fc4f03 100644 --- a/app/helpers/attribute_fields_helper.rb +++ b/app/helpers/attribute_fields_helper.rb @@ -16,12 +16,10 @@ module AttributeFieldsHelper @markup_options = markup_options.merge(:disabled=>disable,:func=>"input_unit") @member = member @attribute_value = @member.get_value_from_field_id(id) - @new_attribute = @attribute_value.nil? + @new_attribute = @attribute_value.nil? @attribute_value = @attribute_value || @member.member_profile_field_values.build(member_profile_field: id) @prefiled_value = @attribute_value.value rescue nil - @panel_setting = self.get_data return instance_eval("render_#{markup}") #rescue "" - end end @@ -37,14 +35,14 @@ module AttributeFieldsHelper # result = text_area_tag(get_field_name_base + key_field, value,@markup_options.merge({:placeholder=>place_holder,:for=>key})) result = text_field_tag(get_field_name_base + key_field, value,@markup_options.merge({:placeholder=>place_holder,:for=>key})) - add_ext= @attribute_value.address_ext[key] rescue {} + add_ext= @attribute_value.address_key[key] rescue {} - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][county]",add_ext["county"],:class=>"county_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][street_address]",add_ext["street_address"],:class=>"street_address_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][city]",add_ext["city"],:class=>"city_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][zip]",add_ext["zip"],:class=>"zip_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][country]",add_ext["country"],:class=>"country_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_ext][#{key}][indicator]",add_ext["indicator"],:class=>"indicator_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][county]",add_ext["county"],:class=>"county_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][street_address]",add_ext["street_address"],:class=>"street_address_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][city]",add_ext["city"],:class=>"city_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][zip]",add_ext["zip"],:class=>"zip_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][country]",add_ext["country"],:class=>"country_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][indicator]",add_ext["indicator"],:class=>"indicator_#{key}") end end @@ -58,7 +56,6 @@ module AttributeFieldsHelper end def render_date - d = DateTime.now() if date_is_range? diff --git a/app/helpers/attribute_values_helper.rb b/app/helpers/attribute_values_helper.rb index c72a7b6..4bfa800 100644 --- a/app/helpers/attribute_values_helper.rb +++ b/app/helpers/attribute_values_helper.rb @@ -9,7 +9,7 @@ module AttributeValuesHelper date = get_date end - # case self.attribute_field["typeC"]["format"] + # case self.member_profile_field["typeC"]["format"] # when 'format1' # Y/M/D h:m # date.strftime("%Y/%m/%d %H:%M") # when 'format2' # Y/M/D @@ -80,7 +80,7 @@ module AttributeValuesHelper end @date = date.split('/') - case self.attribute_field["typeC"]["format"] + case self.member_profile_field["typeC"]["format"] when 'format1' # Y/M/D h:m "/#{@date[1]}/#{@date[2]}" when 'format2' # Y/M/D @@ -97,11 +97,11 @@ module AttributeValuesHelper case I18n.locale when :zh_tw case - when self.attribute_field["typeC"]["calendar"] == "west_calendar" + when self.member_profile_field["typeC"]["calendar"] == "west_calendar" show_west_calender(from_to) - when self.attribute_field["typeC"]["calendar"] == "tw_calendar" + when self.member_profile_field["typeC"]["calendar"] == "tw_calendar" show_minguo_calendar(from_to) - end #case self.attribute_field["typeC"]["calendar"] + end #case self.member_profile_field["typeC"]["calendar"] when :en show_west_calender(from_to) end diff --git a/app/models/member_profile.rb b/app/models/member_profile.rb index 878f605..b21a6b6 100644 --- a/app/models/member_profile.rb +++ b/app/models/member_profile.rb @@ -17,7 +17,7 @@ class MemberProfile field :position, type: Integer VALID_EMAIL_FORMAT = /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ - validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT } + validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT }, if: :email_present? validates :position, uniqueness: true has_one :user @@ -48,18 +48,42 @@ class MemberProfile end end + def get_attribute_value(attribute_field) + attribute_values.find_by(attribute_field_id: attribute_field.id) + end + def get_attribute_values @attribute_values ||= self.member_profile_field_values rescue nil end def get_value_from_field_id(field_id) values = get_attribute_values - value = values.detect {|value| value.attribute_field_id == field_id} rescue nil + value = values.detect {|value| value.member_profile_field_id == field_id} rescue nil value ? value : nil end + def self.get_member_list_attribute_field(field_key) + MemberProfileField.find_by(key: field_key) + end + + def self.get_member_list_attribute_value(member_profile_id,field_id) + MemberProfileFieldValue.find_by(member_profile_id: member_profile_id, member_profile_field_id: field_id) + end + + def self.get_role_member_data_by_sort(field_key, role_status_id) + a = Array.new + attribute_field_data = get_member_list_attribute_field(field_key) + self.where(role_status_ids: role_status_id).desc(:_id).collect{|t| a << [ get_member_list_attribute_value(t.id,attribute_field_data.id)['val'].to_i, t ] } + member_data = a.sort + member_data_tmp = member_data.collect {|v| v[1] } + end + def assign_default_position? self.position.nil? || self.parent_id_changed? end + def email_present? + self.email.present? + end + end diff --git a/app/models/member_profile_field_value.rb b/app/models/member_profile_field_value.rb index 6db36d3..205ad9a 100644 --- a/app/models/member_profile_field_value.rb +++ b/app/models/member_profile_field_value.rb @@ -9,4 +9,150 @@ class MemberProfileFieldValue belongs_to :member_profile_field belongs_to :member_profile + + before_save :check_key + before_save :data_proc + + def value(index = nil) + site = Site.first + result = case self.member_profile_field.markup + when 'text_field','text_area' + if self.member_profile_field.add_more and (self.member_profile_field.markup == "text_field") + index.nil? ? self["val"] : self["val"][index] + # self.member_profile_field.get_data[:cross_lang] ? Hash[VALID_LOCALES.collect{|lang| [lang,self[lang.to_sym]]}] : self["val"] #if !self.member_profile_field.get_data[:cross_lang] + else + self.member_profile_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.member_profile_field.markup + end + + def value=(value) + #save everything to temp_data waiting for futher process + self[:temp_data] = value + end + + + def get_value_by_locale(locale,add_more_index=nil) + + case self.member_profile_field.markup + when "text_field" + case self.member_profile_field.add_more + when true + if self.member_profile_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.member_profile_field.locale ? self[locale.to_s] : self.value + end + + when "select" + markup_values = self.member_profile_field.self_defined_markup_options? ? self.member_profile_field.markup_value : self.member_profile_field.markup_value + markup_values[self.value][locale.to_s] rescue 'NoData' + + when "text_area" + self.member_profile_field.locale ? self[locale.to_s] : self.value + + when "date" + if self.member_profile_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.member_profile_field.markup_value + markup_values[self.value][locale.to_s] + + when "checkbox" + markup_values = self.member_profile_field.markup_value + self.value.collect{|key| markup_values[key][locale.to_s]}.join(",") + + when "date_durnation" + self.value + + else + self.member_profile_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 + + +protected + +def unset_all_lang_values + VALID_LOCALES.each{|t| self.unset t} + end + + def data_proc + unless self[:temp_data].nil? + case self.member_profile_field.markup + when "address" + self["val"] = self["temp_data"] + when 'text_field','text_area' + if self.member_profile_field.add_more + self["val"] = self["temp_data"] + else # if not add_more + if self.member_profile_field.can_muti_lang_input? + self[:temp_data].each do |key,val| + self[key] = val + end if(!self.member_profile_field.get_data[:cross_lang]) + else + self["val"] = self[:temp_data] + end + end # of self.member_profile_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.member_profile_field.markup + end # of self[:temp_data].nil? + self.unset('temp_data') + self.unset('temp') + end #of data_proc + + def check_key + self.key = member_profile_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 diff --git a/app/views/admin/member_infos/_attributes.html.erb b/app/views/admin/member_infos/_attributes.html.erb deleted file mode 100644 index 0fd4043..0000000 --- a/app/views/admin/member_infos/_attributes.html.erb +++ /dev/null @@ -1,16 +0,0 @@ - - <% @attributes.each do |attribute| %> -