From d8ac46f8b05113dbd002a1c5804d846ac4168929 Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Thu, 16 Jul 2015 17:16:35 +0200 Subject: [PATCH] Added CMS_NODE.is_published and is_trashed: BOOLEAN For now, whenever we save a node, it is marked as published. Display a node only if published. Updated /trash page. Updated /nodes/ page to take into account the node status. --- modules/node/cms_node_api.e | 6 +-- modules/node/content/cms_node.e | 18 +++++++ modules/node/handler/node_form_response.e | 5 +- modules/node/handler/node_handler.e | 4 +- modules/node/handler/nodes_handler.e | 47 +++++++++++++++---- modules/node/handler/trash_handler.e | 26 ++++++---- modules/node/persistence/cms_node_storage_i.e | 6 ++- .../node/persistence/cms_node_storage_null.e | 4 +- .../node/persistence/cms_node_storage_sql.e | 13 +++-- 9 files changed, 97 insertions(+), 32 deletions(-) diff --git a/modules/node/cms_node_api.e b/modules/node/cms_node_api.e index 14191a4..7b45350 100644 --- a/modules/node/cms_node_api.e +++ b/modules/node/cms_node_api.e @@ -220,11 +220,11 @@ feature -- Access: Node Result := node_storage.nodes end - trashed_nodes (a_user: CMS_USER): LIST [CMS_NODE] + trashed_nodes (a_user: detachable CMS_USER): LIST [CMS_NODE] -- List of nodes with status in {CMS_NODE_API}.trashed. - -- if the current user is admin, it will retrieve all the trashed nodes + -- if `a_user' is set, return nodes related to this user. do - Result := node_storage.trashed_nodes (a_user.id) + Result := node_storage.trashed_nodes (a_user) end recent_nodes (params: CMS_DATA_QUERY_PARAMETERS): ITERABLE [CMS_NODE] diff --git a/modules/node/content/cms_node.e b/modules/node/content/cms_node.e index e01a814..ab96c69 100644 --- a/modules/node/content/cms_node.e +++ b/modules/node/content/cms_node.e @@ -73,12 +73,30 @@ feature -- Access deferred end +feature -- Status reports + status: INTEGER -- Associated status for the current node. -- default: {CMS_NODE_API}.Not_Published} -- {CMS_NODE_API}.Published -- {CMS_NODE_API}.Trashed + is_published: BOOLEAN + -- Is Current published? + do + Result := status = {CMS_NODE_API}.published + ensure + Result implies not is_trashed + end + + is_trashed: BOOLEAN + -- Is Current trashed? + do + Result := status = {CMS_NODE_API}.trashed + ensure + Result implies not is_published + end + feature -- Access title: READABLE_STRING_32 diff --git a/modules/node/handler/node_form_response.e b/modules/node/handler/node_form_response.e index 92ac76b..1b31e4b 100644 --- a/modules/node/handler/node_form_response.e +++ b/modules/node/handler/node_form_response.e @@ -48,7 +48,7 @@ feature -- Execution attached node_api.node (nid) as l_node then if attached node_api.node_type_for (l_node) as l_type then - fixme ("refactor: process_edit, process_create porcess edit") + fixme ("refactor: process_edit, process_create process edit") if request.path_info.ends_with_general ("/edit") and then node_api.has_permission_for_action_on_node ("edit", l_node, current_user (request)) @@ -249,6 +249,9 @@ feature -- Form l_node.set_author (user) s := "created" end + + fixme ("for now, publishing is not implemented, so let's assume any node saved is published.") -- FIXME + l_node.mark_published node_api.save_node (l_node) if attached current_user (request) as u then api.log ("node", diff --git a/modules/node/handler/node_handler.e b/modules/node/handler/node_handler.e index 88fb687..39baec7 100644 --- a/modules/node/handler/node_handler.e +++ b/modules/node/handler/node_handler.e @@ -102,7 +102,9 @@ feature -- HTTP Methods l_nid := node_id_path_parameter (req) if l_nid > 0 then l_node := node_api.node (l_nid) - if l_node /= Void then + if + l_node /= Void and then l_node.is_published + then create view_response.make (req, res, api, node_api) view_response.set_node (l_node) view_response.execute diff --git a/modules/node/handler/nodes_handler.e b/modules/node/handler/nodes_handler.e index e6f317c..55d9be5 100644 --- a/modules/node/handler/nodes_handler.e +++ b/modules/node/handler/nodes_handler.e @@ -44,6 +44,7 @@ feature -- HTTP Methods l_page_helper: CMS_PAGINATION_GENERATOR s_pager: STRING l_count: NATURAL_64 + l_include_trashed: BOOLEAN do -- At the moment the template are hardcoded, but we can -- get them from the configuration file and load them into @@ -71,19 +72,35 @@ feature -- HTTP Methods 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 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 s.append ("