class ModuleApp include Mongoid::Document include Mongoid::Timestamps include OrbitCoreLib::ObjectTokenUtility field :key field :title field :version field :organization field :author field :intro field :update_info field :create_date field :enable_frontend, type: Boolean, :default => true field :app_pages ,type: Array # field :widgets ,type: Array field :widgets ,type: Hash field :widget_fields ,type: Array field :widget_options,type:Hash field :widget_options_fields_i18n,type:Hash field :widget_fields_link_method,type:Hash field :get_default_widget,type:Hash has_many :managers,as: :managing_app ,:class_name => "AppManager" ,:dependent => :destroy#,:foreign_key => "managing_app_id",:inverse_of => :managing_app has_many :sub_managers,as: :sub_managing_app ,:class_name => "AppManager", :dependent => :destroy#,:foreign_key => "sub_managing_app_id",:inverse_of => :sub_managing_app # has_many :tags has_many :page_parts has_many :pages has_one :app_auth,dependent: :delete before_save :set_key def get_registration OrbitApp::Module::Registration.find_by_key(key) end %w{widget_styles }.each do |field| define_method(field){|var| get_registration.send("get_#{field}") } end def get_default_widget get_registration.get_default_widget end def enable_frontend? get_registration.get_enable_frontend end def label_i18n reg = get_registration reg.nil? ? 'Init is not defined completely' : get_registration.get_label_i18n end # def method_missing(m, *args, &block) # # get_registration.send("get_#{m}") # end def using_default_widget? !get_registration.get_default_widget.blank? end def get_widget_style widgets = get_registration.get_widgets end def get_widget_for_select widgets = get_registration.get_widgets ary = widgets.collect do |k,v| if k == 'default_widget' [I18n.t('widget.default_widget'),'default_widget'] else [I18n.t(v[:label]),k] end end end def is_manager?(user) if user.nil? return false else m_users = managing_users if m_users.blank? false else m_users.include?(user) end end end def is_sub_manager?(user) if user.nil? return false else # when user is guest s_m_users = sub_managing_users result = false if s_m_users.blank? result = false else result = s_m_users.include?(user) end result || is_manager?(user) end end def managing_users self.managers.collect{ |t| t.user } end def sub_managing_users self.sub_managers.collect{ |t| t.user } end def assign_manager(user,assigner) manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil if manager.nil? manager = self.managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil)) end manager end def assign_sub_manager(user,assigner) submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil if submanager.nil? && !self.managing_users.include?(user) submanager = self.sub_managers.create(:user_id => user.id,:rule_creator_id => (assigner.id rescue nil) ) end submanager end def remove_manager(user) manager = AppManager.first(conditions: {managing_app_id: self.id,user_id: user.id}) rescue nil if manager manager.destroy else false end end def remove_sub_manager(user) submanager = AppManager.first(conditions: {sub_managing_app_id: self.id,user_id: user.id}) rescue nil if submanager submanager.destroy else false end end def label I18n.t(label_i18n) end def needs_to_widget_option? if self.widget_options self.widget_options.has_key? widgets.first else false end end def has_default_widget? case self[:widgets] when Array false when Hash self[:widgets].has_key? 'default_widget' end end protected def set_key self.key = self.title.underscore.singularize if self.title end end