class AskQuestion include Mongoid::Document include Mongoid::Timestamps # include ActiveModel::Validations include OrbitCategory::Categorizable # include OrbitTag::Taggable # 欄位定義 field :serial_number, type: Integer field :ip, type: String field :name, type: String field :identity, type: String field :mail, type: String field :phone, type: String field :fax, type: String field :title, type: String field :content, type: String field :appointment, type: DateTime field :sex field :reply, type: String field :comment, type: String field :send_email, type: Boolean, default: false field :situation, type: String, default: "is_email_not_confirmed" # 預設email未驗證 field :email_id field :verify_email_id field :custom_values, type: Hash, default: {} field :agree_show, type: Boolean, default: false field :agree_usage, type: Boolean, default: false field :review_time, type: DateTime belongs_to :reviewer, class_name: "MemberProfile", foreign_key: :reviewer_id before_create do last_serial_number = AskSetting.update_last_serial_number self.serial_number = last_serial_number end def email mail = Email.where(:id=>self.email_id).first end def verify_email verify_email = Email.where(:id=>self.verify_email_id).first end def reviewer_emails email_address = AskAdmin.or(:category_ids.in => [self.category_id, [], nil]).pluck(:email).select { |s| s.present? }.uniq rescue [] authorizes = Authorization.where(module_app_id: ModuleApp.where(key: 'ask').first.id).to_a rescue [] authorizes.each do |a| if a.category_id next if a.category_id != self.category_id end if a.user_id u = a.user email_address << u.email if u && u.email elsif a.role_id email_address = email_address + MemberProfile.where(role_ids: a.role_id).pluck(:email).select { |s| s.present? }.uniq else a.destroy end end email_address = email_address.flatten email_address.uniq end def get_serial_number(last_serial_number=nil, display_length=nil) if display_length.nil? && last_serial_number.nil? can_update_shared_hash = (defined?(OrbitHelper::SharedHash) && OrbitHelper::SharedHash) last_serial_number = (can_update_shared_hash ? OrbitHelper::SharedHash["ask"][:last_serial_number] : AskSetting.pluck(:last_serial_number)[0].to_i) end display_length = [last_serial_number.to_s.length + 1, 4].max if display_length.nil? display_format_string(self.serial_number, display_length) end def display_format_string(num, str_length) format("%0#{str_length}d", num) end end end