250 lines
6.4 KiB
Ruby
250 lines
6.4 KiB
Ruby
class ModuleApp
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
# include OrbitCoreLib::ObjectTokenUtility
|
|
# include OrbitApp::ModuleAppMembershipTools
|
|
|
|
field :auth_approval_users, type: Array, default: nil
|
|
field :auth_manager_users, type: Array, default: nil
|
|
field :auth_sub_manager_users, type: Array, default: nil
|
|
field :key
|
|
field :title
|
|
field :sidebar_order,type: Integer,default: 0
|
|
|
|
has_one :auth_manager, dependent: :destroy
|
|
has_many :auth_approvals, dependent: :destroy
|
|
has_many :auth_sub_managers, dependent: :destroy
|
|
has_many :categories, dependent: :destroy
|
|
has_many :module_tags, dependent: :destroy
|
|
|
|
has_many :approvals #to remove
|
|
|
|
delegate :authorized_users, to: :auth_manager, prefix: true, allow_nil: true
|
|
|
|
def refetch_setting!(reg)
|
|
# %w{module_label category base_url version organization author intro update_info create_date}.each do |field|
|
|
# self[field.to_sym] = reg.send field
|
|
# end
|
|
self[:app_pages] = reg.get_app_pages
|
|
self[:enable_frontend] = reg.get_enable_frontend
|
|
self[:get_widget_style] = reg.get_widgets
|
|
self[:using_default_widget] = !reg.get_default_widget.blank?
|
|
self[:widgets] = reg.get_widgets
|
|
self[:has_tag] = reg.get_has_tags
|
|
self[:has_category] = reg.get_has_category
|
|
self[:is_approvable] = reg.get_is_approvable
|
|
self[:is_authorizable] = reg.get_is_authorizable
|
|
self[:approvable_models] = reg.get_approvable_models
|
|
self[:authorizable_models] = reg.get_authorizable_models
|
|
end
|
|
|
|
|
|
# scope :for_frontend_select,
|
|
scope :standard_sorting ,order_by(:title, :asc)
|
|
|
|
def self.for_widget_select
|
|
where(:key.in=>OrbitApp::Module::WidgetUtility.all.keys).order_by(:title, :asc)
|
|
end
|
|
|
|
def self.for_frontend_select
|
|
where(:key.in => OrbitApp::Module::FrontendUtility.all.keys).excludes(widgets: nil).where(enable_frontend: true).order_by(:title, :asc)
|
|
end
|
|
|
|
def enable_frontend?
|
|
self[:enable_frontend]
|
|
end
|
|
|
|
def get_default_widget
|
|
get_registration.get_default_widget
|
|
end
|
|
|
|
|
|
def get_widget_for_select
|
|
widgets = get_widget_style
|
|
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 get_widget_style
|
|
# get_registration.get_widgets
|
|
# end
|
|
|
|
def has_default_widget?
|
|
self[:widgets].has_key? 'default_widget'
|
|
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 needs_to_widget_option?
|
|
# if self.widget_options
|
|
# self.widget_options.has_key? widgets.first
|
|
# else
|
|
# false
|
|
# end
|
|
# end
|
|
|
|
def using_default_widget?
|
|
# !get_registration.get_default_widget.blank?
|
|
self[:get_default_widget]
|
|
end
|
|
|
|
def widget_fields
|
|
# binding.pry
|
|
# raise 'Need to link with OrbitApp [type: Array]'
|
|
get_registration.get_default_widget_fields
|
|
end
|
|
|
|
# def widgets
|
|
# # get_registration.get_widgets
|
|
# # get_registration.get_default_widget
|
|
# end
|
|
|
|
def widget_options(widget_path=nil)
|
|
get_registration.get_widget_by_path(widget_path)
|
|
# raise 'Need to link with OrbitApp [type: Hash]'
|
|
end
|
|
|
|
def widget_options_fields_i18n
|
|
raise 'Need to link with OrbitApp [type: Hash]'
|
|
end
|
|
|
|
def widget_fields_link_method
|
|
get_registration.get_link_methods
|
|
# raise 'Need to link with OrbitApp [type: Hash]'
|
|
end
|
|
|
|
|
|
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
|
|
|
|
def get_categories
|
|
get_registration.get_categories
|
|
end
|
|
|
|
def module_name
|
|
I18n.t(get_registration.get_label_i18n)
|
|
end
|
|
|
|
def get_registration
|
|
OrbitApp::Module::Registration.find_by_key(key)
|
|
end
|
|
|
|
def self.find_by_key(key)
|
|
self.where(key: key)[0] rescue nil
|
|
end
|
|
|
|
def sorted_tags_for_cloud
|
|
temp_tags = {}
|
|
self.tags.each{ |tag|
|
|
temp_tags.merge!({tag => Tag.get_impressionist(tag)})
|
|
}
|
|
if !temp_tags.blank?
|
|
sorted_tags = temp_tags.sort{|a,b| a[1]<=>b[1]}.reverse
|
|
sorted_tags[0][1] = :hot1
|
|
offset = (sorted_tags.size - 1) / 3
|
|
i = 1
|
|
class_i = 2
|
|
sorted_tags[1..-1].collect!{ |x|
|
|
x[1] = "hot#{class_i}"
|
|
i == offset ? i = 1 : i += 1 if class_i < 4
|
|
class_i += 1 if i == offset && class_i < 4
|
|
}
|
|
sorted_tags
|
|
else
|
|
[]
|
|
end
|
|
end
|
|
|
|
def tags
|
|
self.module_tags.map{|t| t.tag }
|
|
end
|
|
|
|
|
|
# authorization
|
|
def update_auth_approval_users
|
|
user_ids = self.auth_approvals.inject([]) do |users, auth|
|
|
users += auth.authorized_users.map{|user| user.id}
|
|
end
|
|
update_attribute(:auth_approval_users, user_ids.uniq)
|
|
end
|
|
|
|
def update_auth_manager_users
|
|
update_attribute(:auth_manager_users, self.auth_manager_authorized_users.map{|user| user.id})
|
|
end
|
|
|
|
def update_auth_sub_manager_users
|
|
user_ids = self.auth_sub_managers.inject([]) do |users, auth|
|
|
users += auth.authorized_users.map{|user| user.id}
|
|
end
|
|
update_attribute(:auth_sub_manager_users, user_ids.uniq)
|
|
end
|
|
|
|
def managers
|
|
auth_manager_authorized_users || []
|
|
end
|
|
|
|
def user_can_manage?(user)
|
|
managers.include?(user)
|
|
end
|
|
|
|
def add_managers(users)
|
|
users = Array(users)
|
|
if auth_manager = self.auth_manager
|
|
auth_manager.update_attribute(:authorized_users, (auth_manager.authorized_users + users).uniq)
|
|
else
|
|
self.create_auth_manager(authorized_users: users)
|
|
end
|
|
end
|
|
|
|
def remove_managers(users)
|
|
users = Array(users)
|
|
users = users.delete_if{|user| user == current_user || is_admin?}
|
|
self.auth_manager.update_attribute(:authorized_users, auth_manager.authorized_users - users)
|
|
end
|
|
|
|
def is_manager?(user)
|
|
if user && !auth_manager_users.blank?
|
|
auth_manager_users.include?(user.id)
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
def is_sub_manager?(user)
|
|
if user && !auth_sub_manager_users.blank?
|
|
auth_sub_manager_users.include?(user.id)
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
def can_approve?(user)
|
|
if user && !auth_approval_users.blank?
|
|
auth_approval_users.include?(user.id)
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
end
|