class MemberProfile include Mongoid::Document include Mongoid::Timestamps include Mongoid::Tree include Mongoid::Tree::Ordering field :first_name, type: String, localize: true field :last_name, type: String, localize: true field :sex field :sid field :office_tel field :birthday, type: DateTime field :address field :personal_website field :autobiography, type: String, localize: true field :email, type: String field :position, type: Integer VALID_EMAIL_FORMAT = /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ validates :email, uniqueness: true, format: { with: VALID_EMAIL_FORMAT }, if: :email_present? validates :position, uniqueness: true has_one :user has_and_belongs_to_many :roles has_and_belongs_to_many :role_statuses has_many :member_profile_field_values accepts_nested_attributes_for :member_profile_field_values before_save :assign_default_position, :if => :assign_default_position? mount_uploader :avatar, AvatarUploader paginates_per 10 def name if self.first_name || self.last_name "#{self.first_name} #{self.last_name}" end end def disable_role=(var) var[:id].each do |id,val| if (val=="true") self.role_ids.reject!{|t| t.to_s == id} elsif(val=="false") self.role_ids += Array(id) end 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.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