Improved node management.

- List node by node types
- fixed the trash/restore/delete workflow
Added messaging module to send message to cms users (by email for now).
Added early protection for cache, export and import functionalities.
This commit is contained in:
2017-02-28 11:24:48 +01:00
parent dc84e79952
commit a341bd98eb
35 changed files with 1055 additions and 212 deletions

View File

@@ -11,7 +11,16 @@ inherit
WSF_URI_HANDLER
rename
new_mapping as new_uri_mapping
new_mapping as new_uri_mapping,
execute as execute_uri
end
WSF_URI_TEMPLATE_HANDLER
rename
new_mapping as new_uri_template_mapping,
execute as execute_uri_template
select
new_uri_template_mapping
end
WSF_RESOURCE_HANDLER_HELPER
@@ -26,6 +35,16 @@ create
feature -- execute
execute_uri (req: WSF_REQUEST; res: WSF_RESPONSE)
do
execute (req, res)
end
execute_uri_template (req: WSF_REQUEST; res: WSF_RESPONSE)
do
execute (req, res)
end
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute request handler
do
@@ -39,30 +58,57 @@ feature -- HTTP Methods
local
l_response: CMS_RESPONSE
s: STRING
l_content_type: detachable CMS_CONTENT_TYPE
n: CMS_NODE
lnk: CMS_LOCAL_LINK
l_page_helper: CMS_PAGINATION_GENERATOR
s_pager: STRING
l_count: NATURAL_64
inc: BOOLEAN
l_include_trashed: BOOLEAN
lst: detachable ITERABLE [CMS_NODE]
do
-- At the moment the template are hardcoded, but we can
-- get them from the configuration file and load them into
-- the setup class.
l_count := node_api.nodes_count
if attached {WSF_STRING} req.path_parameter ("type") as p_node_type and then attached api.content_type (p_node_type.value) as ct then
l_content_type := api.content_type (p_node_type.value)
end
create {GENERIC_VIEW_CMS_RESPONSE} l_response.make (req, res, api)
create s.make_empty
if l_count > 1 then
l_response.set_title ("Listing " + l_count.out + " nodes")
else
l_response.set_title ("Listing " + l_count.out + " node")
across
api.content_types as ic
loop
if attached {CMS_NODE_TYPE [CMS_NODE]} ic.item as l_note_type then
create lnk.make (l_note_type.name, "nodes/" + l_note_type.name)
if l_note_type = l_content_type then
lnk.set_is_active (True)
end
l_response.add_to_primary_tabs (lnk)
end
end
create s_pager.make_empty
create l_page_helper.make ("nodes/?page={page}&size={size}", node_api.nodes_count, 25) -- FIXME: Make this default page size a global CMS settings
if l_content_type /= Void then
l_count := node_api.nodes_of_type_count (l_content_type)
if l_count > 1 then
l_response.set_title ("Listing " + l_count.out + " " + l_content_type.name + " nodes")
else
l_response.set_title ("Listing " + l_count.out + " " + l_content_type.name + " node")
end
create l_page_helper.make ("nodes/" + l_content_type.name + "/?page={page}&size={size}", l_count, 25) -- FIXME: Make this default page size a global CMS settings
else
l_count := node_api.nodes_count
if l_count > 1 then
l_response.set_title ("Listing " + l_count.out + " nodes")
else
l_response.set_title ("Listing " + l_count.out + " node")
end
create l_page_helper.make ("nodes/?page={page}&size={size}", l_count, 25) -- FIXME: Make this default page size a global CMS settings
end
l_page_helper.get_setting_from_request (req)
if l_page_helper.has_upper_limit and then l_page_helper.pages_count > 1 then
l_page_helper.append_to_html (l_response, s_pager)
@@ -71,7 +117,12 @@ feature -- HTTP Methods
end
end
if attached node_api.recent_nodes (create {CMS_DATA_QUERY_PARAMETERS}.make (l_page_helper.current_page_offset, l_page_helper.page_size)) as lst then
if l_content_type /= Void then
lst := node_api.recent_nodes_of_type (l_content_type, create {CMS_DATA_QUERY_PARAMETERS}.make (l_page_helper.current_page_offset, l_page_helper.page_size))
else
lst := node_api.recent_nodes (create {CMS_DATA_QUERY_PARAMETERS}.make (l_page_helper.current_page_offset, l_page_helper.page_size))
end
if lst /= Void then
if attached {WSF_STRING} req.query_parameter ("include_trash") as v and then v.is_case_insensitive_equal ("yes") then
l_include_trashed := l_response.has_permissions (<<"view trash", "view any trash">>)
end
@@ -80,7 +131,14 @@ feature -- HTTP Methods
lst as ic
loop
n := ic.item
if not n.is_trashed or else l_include_trashed then
inc := True
if not n.is_published then
inc := view_unpublished_node_permitted (n)
end
if inc and n.is_trashed then
inc := l_include_trashed
end
if inc then
lnk := node_api.node_link (n)
s.append ("<li class=%"cms_type_"+ n.content_type)
if not n.is_published then
@@ -131,4 +189,15 @@ feature -- HTTP Methods
l_response.execute
end
feature -- Helper
view_unpublished_node_permitted (n: CMS_NODE): BOOLEAN
do
if api.has_permission ("view unpublished " + n.content_type) then
Result := True
elseif attached api.user as u then
Result := u.same_as (n.author)
end
end
end