Files
ROC/src/service/cms_module.e
Jocelyn Fiat 3496536751 Added CMS_API.request: WSF_REQUEST to ease dev of ROC CMS code.
- Removed CMS_REQUEST_UTIL
  - centralize a few request related code into CMS_API
Added CMS_API.user, CMS_API.set_user (CMS_USER), ... and user related routines.

Refactored Auth related code
  - added various abstractions to factorize implementation and harmonize solutions.
  - revisited the logout strategy.
  - updated the account info page, and remove info user should not care about.
  - simplified the process, and encourage auth module to follow same design.

Added CMS_LINK helper routines to modify the related query string.
Removed CMS_USER.profile (and related routines)
   - It was not used so far.
   - it will probably a specific module later, if needed.

Update various module to avoid fetching user from sql directly, and let this task to CMS_USER_API.

Removed CMS_NODE_API.node_author (a_node: CMS_NODE): detachable CMS_USER,
   - as the info is already in CMS_NODE.author

Added CMS_RESPONSE.redirection_delay, if ever one code want to redirect after a few seconds.
Added the request uri info to the not found cms response.
2016-01-29 21:58:49 +01:00

201 lines
4.5 KiB
Plaintext

note
description: "Describe module features that adds one or more features to your web site."
date: "$Date: 2014-11-13 16:23:47 +0100 (jeu., 13 nov. 2014) $"
revision: "$Revision: 96085 $"
deferred class
CMS_MODULE
inherit
REFACTORING_HELPER
CMS_ENCODERS
feature -- Access
is_enabled: BOOLEAN
-- Is the module enabled?
name: STRING
-- Name of the module.
deferred
end
description: STRING
-- Description of the module.
package: STRING
-- Associated package.
-- Mostly to group modules by package/category.
version: STRING
-- Version of the module?
dependencies: detachable LIST [TUPLE [module_type: TYPE [CMS_MODULE]; is_required: BOOLEAN]]
-- Optional declaration for dependencies.
permissions: LIST [READABLE_STRING_8]
-- List of permission ids, used by this module, and declared.
require
is_initialized: is_initialized
do
create {ARRAYED_LIST [READABLE_STRING_8]} Result.make (0)
end
feature {CMS_API} -- Module Initialization
initialize (api: CMS_API)
-- Initialize Current module with `api'.
require
is_enabled: is_enabled
is_not_initialized: not is_initialized
do
-- Redefine to process specific module initialization.
is_initialized := True
ensure
is_initialized: is_initialized
end
add_dependency (a_type: TYPE [CMS_MODULE])
-- Add required dependency using type of module `a_type'.
do
put_dependency (a_type, True)
end
put_dependency (a_type: TYPE [CMS_MODULE]; is_required: BOOLEAN)
-- Add required or optional dependency using type of module `a_type', based on `is_required' value.
local
lst: like dependencies
do
lst := dependencies
if lst = Void then
create {ARRAYED_LIST [TUPLE [module_type: TYPE [CMS_MODULE]; is_required: BOOLEAN]]} lst.make (1)
dependencies := lst
end
lst.force ([a_type, is_required])
end
feature -- Status
is_initialized: BOOLEAN
-- Is Current module initialized?
feature {CMS_API} -- Access: API
module_api: detachable CMS_MODULE_API
-- Eventual module api.
require
is_initialized: is_initialized
do
-- No API by default.
end
feature {CMS_API} -- Module management
is_installed (api: CMS_API): BOOLEAN
-- Is Current module installed?
do
if attached api.storage.custom_value ("is_initialized", "module-" + name) as v then
if v.is_case_insensitive_equal_general (version) then
Result := True
elseif v.is_case_insensitive_equal_general ("yes") then
-- Backward compatibility.
Result := True
elseif v.is_case_insensitive_equal_general ("no") then
-- Probably a module that was installed, but now uninstalled.
Result := False
else
-- Maybe a different version is installed.
-- For now, let's assume this is installed.
Result := True
end
end
end
install (api: CMS_API)
require
is_not_installed: not is_installed (api)
do
api.storage.set_custom_value ("is_initialized", version, "module-" + name)
end
uninstall (api: CMS_API)
require
is_installed: is_installed (api)
do
api.storage.set_custom_value ("is_initialized", "no", "module-" + name)
end
feature -- Router
setup_router (a_router: WSF_ROUTER; a_api: CMS_API)
-- Setup url dispatching for Current module.
require
is_initialized: is_initialized
deferred
end
feature -- Hooks configuration
register_hooks (a_response: CMS_RESPONSE)
obsolete
"!UNSAFE!: it is highly recommended to update this module and use setup_hooks [Dec/2015]."
require
is_enabled: is_enabled
do
setup_hooks (a_response.api.hooks)
end
setup_hooks (a_hooks: CMS_HOOK_CORE_MANAGER)
-- Module hooks configuration.
require
is_enabled: is_enabled
do
end
feature -- Filter
filters (a_api: CMS_API): detachable LIST [WSF_FILTER]
-- Optional list of filter for Current module.
require
is_enabled: is_enabled
do
end
feature -- Settings
enable
-- enable the module.
do
is_enabled := True
ensure
module_enabled: is_enabled
end
disable
-- disable the module.
do
is_enabled := False
ensure
module_disbaled: not is_enabled
end
feature -- Hooks
help_text (a_path: STRING): STRING
do
debug ("refactor_fixme")
to_implement ("Add the corresponing implementation.")
end
create Result.make_empty
end
invariant
name_set: not name.is_whitespace
version_set: not version.is_whitespace
note
copyright: "2011-2016, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
end