Implemented Module enable/disable setting from configuration.

Implemented dependencies checking to set CMS_MODULE.is_enabled.
Implemented the persistence of CMS_USER.roles
This commit is contained in:
2015-07-10 18:46:16 +02:00
parent 779064a505
commit 7f4a7b3ab9
13 changed files with 258 additions and 56 deletions

View File

@@ -33,16 +33,74 @@ feature -- Access
modules as ic
loop
l_module := ic.item
update_module_status_from_configuration (l_module)
if l_module.is_enabled then
Result.extend (l_module)
end
end
across
Result as ic
loop
l_module := ic.item
update_module_status_within (l_module, Result)
if not l_module.is_enabled then
Result.remove (l_module)
end
end
ensure
only_enabled_modules: across Result as ic all ic.item.is_enabled end
end
feature {CMS_MODULE, CMS_API} -- Restricted access
update_module_status_within (a_module: CMS_MODULE; a_collection: CMS_MODULE_COLLECTION)
-- Is `a_module' enabled, and also its dependencies within the collection `a_collection'?
require
a_module_is_enabled: a_module.is_enabled
do
if attached a_module.dependencies as deps then
across
deps as ic
until
not a_module.is_enabled
loop
if
attached a_collection.item (ic.item) as mod and then
mod.is_enabled
then
update_module_status_within (mod, a_collection)
else
--| dependency not found or disabled
a_module.disable
end
end
end
end
update_module_status_from_configuration (m: CMS_MODULE)
-- Is module `m' enabled?
local
b: BOOLEAN
dft: BOOLEAN
do
-- By default enabled.
if false and attached text_item ("modules.*") as l_mod_status then
dft := l_mod_status.is_case_insensitive_equal_general ("on")
else
dft := True
end
if attached text_item ("modules." + m.name) as l_mod_status then
b := l_mod_status.is_case_insensitive_equal_general ("on")
else
b := dft
end
if b then
m.enable
else
m.disable
end
end
modules: CMS_MODULE_COLLECTION
-- List of available modules.
deferred