forked from saurabh/orbit4-5
140 lines
3.5 KiB
Ruby
140 lines
3.5 KiB
Ruby
class ModuleApp
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
|
|
field :title, type: String
|
|
field :key, type: String
|
|
field :taggable, type: Boolean, default: false
|
|
field :categorizable, type: Boolean, default: false
|
|
field :authorizable, type: Boolean, default: false
|
|
field :frontend_enable, type: Boolean, default: false
|
|
field :sidebar_order,type: Integer,default: 0
|
|
field :authorizable_models, type: Array
|
|
field :widget_enable, type: Boolean, default: false
|
|
field :widget_methods
|
|
field :desktop_enabled, type: Boolean, default: false
|
|
field :widget_settings
|
|
field :store_permission_granted, type: Boolean, default: false
|
|
field :cache_models, type: Array, default: []
|
|
field :feeds_url
|
|
|
|
has_many :categories, dependent: :destroy, :autosave => true
|
|
has_and_belongs_to_many :tags, dependent: :destroy, :autosave => true
|
|
has_many :authorizations
|
|
|
|
scope :frontend_enabled, ->{ where(:frontend_enable => true)}
|
|
scope :desktop_enabled, ->{ where(:desktop_enabled => true)}
|
|
scope :widget_enabled, ->{ where(:widget_enable => true)}
|
|
|
|
def refetch_setting!(reg)
|
|
self[:taggable] = reg.is_taggable
|
|
self[:categorizable] = reg.is_categorizable
|
|
self[:authorizable] = reg.is_authorizable
|
|
self[:authorizable_models] = reg.get_authorizable_models
|
|
self[:frontend_enable] = reg.is_frontend_enabled
|
|
self[:widget_enable] = reg.is_widget_enabled
|
|
self[:widget_methods] = reg.get_widget_methods
|
|
self[:widget_settings] = reg.get_widget_settings
|
|
self[:desktop_enabled] = reg.is_desktop_enabled
|
|
self[:cache_models] = reg.get_models_to_cache
|
|
self[:feeds_url] = reg.get_feeds_url
|
|
end
|
|
|
|
def sub_managers
|
|
categories = self.categories
|
|
sub_managers = []
|
|
categories.each do |c|
|
|
c.authorizations.each do |a|
|
|
if !sub_managers.include?a.user
|
|
sub_managers << a.user
|
|
end
|
|
end
|
|
end
|
|
sub_managers
|
|
end
|
|
|
|
def get_registration
|
|
OrbitApp::Module::Registration.find_by_key(key)
|
|
end
|
|
|
|
def self.find_by_key(key)
|
|
self.find_by(:key => key)
|
|
end
|
|
|
|
def module_name
|
|
I18n.t(get_registration.get_label_i18n)
|
|
end
|
|
|
|
def label
|
|
I18n.t(label_i18n)
|
|
end
|
|
|
|
def label_i18n
|
|
reg = get_registration
|
|
reg.nil? ? 'Init is not defined completely' : get_registration.get_label_i18n
|
|
end
|
|
|
|
def taggable
|
|
get_registration.is_taggable
|
|
end
|
|
|
|
def taggable_model
|
|
get_registration.taggable_model
|
|
end
|
|
|
|
def categorizable
|
|
get_registration.is_categorizable
|
|
end
|
|
|
|
def user_can_manage?
|
|
self.workgroup.key.eql?("manager")
|
|
end
|
|
|
|
def authorizable
|
|
get_registration.is_authorizable
|
|
end
|
|
|
|
def user_module_managers
|
|
Authorization.module_authorized_users(self).pluck(:user_id)
|
|
end
|
|
|
|
def role_managers
|
|
Authorization.module_authorized_users(self).pluck(:role_id)
|
|
end
|
|
|
|
def role_sub_managers
|
|
roles = []
|
|
self.categories.each do |c|
|
|
auth = Authorization.find_by(:category_id => c.id) rescue nil
|
|
if !auth.nil?
|
|
roles << auth.role
|
|
end
|
|
end
|
|
roles
|
|
end
|
|
|
|
def role_status
|
|
RoleStatus.all
|
|
end
|
|
|
|
def module_managers
|
|
workgroup = Workgroup.find_by(key: 'sub_managers')
|
|
authorized_users = Authorization.module_authorized_users(self).where(:user_id.ne => nil, :workgroup_id.ne => workgroup.id).map {|u| u.user} rescue nil
|
|
authorized_users.inject(users_authorized_by_role, :<<) rescue []
|
|
end
|
|
|
|
|
|
def managers
|
|
Authorization.module_authorized_users(self).map{|a| a.user}
|
|
end
|
|
|
|
|
|
def data_count
|
|
get_registration.get_data_count
|
|
end
|
|
|
|
def icon_class_no_sidebar
|
|
get_registration.get_icon_class_no_sidebar
|
|
end
|
|
end
|