From 9da8b8a025ef087111269855627f2b1212c85e57 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Tue, 1 Dec 2015 19:20:16 -0300 Subject: [PATCH 1/3] Fixed: delete-trash a node. Added code to remove path_aliase when we delete a node. --- modules/node/handler/node_form_response.e | 29 ++++++++++--------- modules/node/handler/node_handler.e | 10 +++---- .../node/persistence/cms_node_storage_sql.e | 14 +++++++-- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/modules/node/handler/node_form_response.e b/modules/node/handler/node_form_response.e index 4b68eca..3135160 100644 --- a/modules/node/handler/node_form_response.e +++ b/modules/node/handler/node_form_response.e @@ -378,7 +378,21 @@ feature -- Form to_implement ("Refactor code to use the new wsf_html HTML5 support") f.extend_html_text("" ) end - + f.extend_html_text ("
") + f.extend_html_text ("Do you want to restore the current node?") + if + a_node /= Void and then + a_node.id > 0 + then + create ts.make ("op") + ts.set_default_value ("Restore") + ts.set_formaction ("/node/"+a_node.id.out+"/delete") + ts.set_formmethod ("POST") + fixme ("[ + ts.set_default_value (translation ("Restore")) + ]") + f.extend (ts) + end Result := f end @@ -404,19 +418,6 @@ feature -- Form ]") f.extend (ts) end - f.extend_html_text ("
") - f.extend_html_text ("Do you want to restore the current node?") - if - a_node /= Void and then - a_node.id > 0 - then - create ts.make ("op") - ts.set_default_value ("Restore") - fixme ("[ - ts.set_default_value (translation ("Restore")) - ]") - f.extend (ts) - end Result := f end diff --git a/modules/node/handler/node_handler.e b/modules/node/handler/node_handler.e index 734cda8..bab7995 100644 --- a/modules/node/handler/node_handler.e +++ b/modules/node/handler/node_handler.e @@ -173,6 +173,11 @@ feature -- HTTP Methods l_op.value.same_string ("Delete") then do_delete (req, res) + elseif + attached {WSF_STRING} req.form_parameter ("op") as l_op and then + l_op.value.same_string ("Restore") + then + do_restore (req, res) end elseif req.percent_encoded_path_info.ends_with ("/trash") then if @@ -180,11 +185,6 @@ feature -- HTTP Methods l_op.value.same_string ("Trash") then do_trash (req, res) - elseif - attached {WSF_STRING} req.form_parameter ("op") as l_op and then - l_op.value.same_string ("Restore") - then - do_restore (req, res) end elseif req.percent_encoded_path_info.starts_with ("/node/add/") then create edit_response.make (req, res, api, node_api) diff --git a/modules/node/persistence/cms_node_storage_sql.e b/modules/node/persistence/cms_node_storage_sql.e index 72ffff8..8df7dc2 100644 --- a/modules/node/persistence/cms_node_storage_sql.e +++ b/modules/node/persistence/cms_node_storage_sql.e @@ -383,6 +383,7 @@ feature -- Change: Node local l_parameters: STRING_TABLE [ANY] l_time: DATE_TIME + l_sql_delete_node_aliases: STRING do create l_time.make_now_utc write_information_log (generator + ".delete_node_base {" + a_node.id.out + "}") @@ -396,6 +397,13 @@ feature -- Change: Node -- we remove node_revisions and pages. -- Check: maybe we need a transaction. sql_modify (sql_delete_node_revisions, l_parameters) + sql_finalize + + -- we remove node_aliases + -- Check: maybe we need a transaction. + create l_sql_delete_node_aliases.make_from_string (sql_delete_node_aliases) + l_sql_delete_node_aliases.replace_substring_all ("$nodeid", "node/" + a_node.id.out) + sql_modify (l_sql_delete_node_aliases, void) sql_finalize if not error_handler.has_error then @@ -415,7 +423,7 @@ feature -- Change: Node error_handler.reset create l_parameters.make (1) l_parameters.put (l_time, "changed") - l_parameters.put ({CMS_NODE_API}.not_published, "status") + l_parameters.put ({CMS_NODE_API}.published, "status") l_parameters.put (a_id, "nid") sql_modify (sql_restore_node, l_parameters) sql_finalize @@ -561,7 +569,7 @@ feature {NONE} -- Queries -- Physical deletion with free metadata. sql_restore_node: STRING = "UPDATE nodes SET changed=:changed, status =:status WHERE nid=:nid" - -- Restore node to {CMS_NODE_API}.not_publised. + -- Restore node to {CMS_NODE_API}.published sql_last_insert_node_id: STRING = "SELECT MAX(nid) FROM nodes;" @@ -584,6 +592,8 @@ feature {NONE} -- Queries sql_delete_node_revisions: STRING = "DELETE FROM node_revisions WHERE nid=:nid;" + sql_delete_node_aliases: STRING = "DELETE FROM path_aliases WHERE source='$nodeid';" + feature {NONE} -- Sql Queries: USER_ROLES collaborators, author Select_user_author: STRING = "SELECT uid, name, password, salt, email, users.status, users.created, signed FROM nodes INNER JOIN users ON nodes.author=users.uid AND nodes.nid = :nid AND nodes.revision = :revision;" From fade19bbee860e00391a9a1aea6fa4d9b16079d5 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Wed, 2 Dec 2015 12:10:03 -0300 Subject: [PATCH 2/3] Added precondition to NODE_FORM_RESPONSE.new_delete_form Added transaction support to CMS_NODE_STORAGE_SQL.delete_node_base --- modules/node/handler/node_form_response.e | 47 +++++++++++-------- .../node/persistence/cms_node_storage_sql.e | 4 ++ 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/modules/node/handler/node_form_response.e b/modules/node/handler/node_form_response.e index 3135160..0ce6d63 100644 --- a/modules/node/handler/node_form_response.e +++ b/modules/node/handler/node_form_response.e @@ -173,25 +173,29 @@ feature {NONE} -- Create a new node f: like new_edit_form fd: detachable WSF_FORM_DATA do - f := new_delete_form (a_node, url (location, Void), "delete-" + a_type.name, a_type) - hooks.invoke_form_alter (f, fd, Current) - if request.is_post_request_method then - f.process (Current) - fd := f.last_data - end - if a_node.has_id then - add_to_menu (node_local_link (a_node, translation ("View", Void)), primary_tabs) - add_to_menu (create {CMS_LOCAL_LINK}.make (translation ("Edit", Void), node_api.node_path (a_node) + "/edit"), primary_tabs) - add_to_menu (create {CMS_LOCAL_LINK}.make ("Delete", node_api.node_path (a_node) + "/delete"), primary_tabs) - end + if a_node.is_trashed then + f := new_delete_form (a_node, url (location, Void), "delete-" + a_type.name, a_type) + hooks.invoke_form_alter (f, fd, Current) + if request.is_post_request_method then + f.process (Current) + fd := f.last_data + end + if a_node.has_id then + add_to_menu (node_local_link (a_node, translation ("View", Void)), primary_tabs) + add_to_menu (create {CMS_LOCAL_LINK}.make (translation ("Edit", Void), node_api.node_path (a_node) + "/edit"), primary_tabs) + add_to_menu (create {CMS_LOCAL_LINK}.make ("Delete", node_api.node_path (a_node) + "/delete"), primary_tabs) + end - if attached redirection as l_location then - -- FIXME: Hack for now - set_title (a_node.title) - b.append (html_encoded (a_type.title) + " deleted") + if attached redirection as l_location then + -- FIXME: Hack for now + set_title (a_node.title) + b.append (html_encoded (a_type.title) + " deleted") + else + set_title (formatted_string (translation ("Delete $1 #$2", Void), [a_type.title, a_node.id])) + f.append_to_html (wsf_theme, b) + end else - set_title (formatted_string (translation ("Delete $1 #$2", Void), [a_type.title, a_node.id])) - f.append_to_html (wsf_theme, b) + -- end end @@ -355,6 +359,8 @@ feature -- Form new_delete_form (a_node: detachable CMS_NODE; a_url: READABLE_STRING_8; a_name: STRING; a_node_type: CMS_NODE_TYPE [CMS_NODE]): CMS_FORM -- Create a web form named `a_name' for node `a_node' (if set), using form action url `a_url', and for type of node `a_node_type'. + require + is_trashed: attached a_node as l_node and then a_node.is_trashed local f: CMS_FORM ts: WSF_FORM_SUBMIT_INPUT @@ -375,8 +381,11 @@ feature -- Form ts.set_default_value (translation ("Delete")) ]") f.extend (ts) - to_implement ("Refactor code to use the new wsf_html HTML5 support") - f.extend_html_text("" ) + create ts.make ("op") + ts.set_default_value ("Cancel") + ts.set_formaction ("/node/"+a_node.id.out) + ts.set_formmethod ("GET") + f.extend (ts) end f.extend_html_text ("
") f.extend_html_text ("Do you want to restore the current node?") diff --git a/modules/node/persistence/cms_node_storage_sql.e b/modules/node/persistence/cms_node_storage_sql.e index 8df7dc2..56222d4 100644 --- a/modules/node/persistence/cms_node_storage_sql.e +++ b/modules/node/persistence/cms_node_storage_sql.e @@ -385,6 +385,7 @@ feature -- Change: Node l_time: DATE_TIME l_sql_delete_node_aliases: STRING do + sql_begin_transaction create l_time.make_now_utc write_information_log (generator + ".delete_node_base {" + a_node.id.out + "}") @@ -408,6 +409,9 @@ feature -- Change: Node if not error_handler.has_error then extended_delete (a_node) + sql_commit_transaction + else + sql_rollback_transaction end end From a11a93c285c641a4d3749f190b2bb316595b4dcb Mon Sep 17 00:00:00 2001 From: jvelilla Date: Wed, 2 Dec 2015 16:14:54 -0300 Subject: [PATCH 3/3] Update code to use CMS_API.unset_path_alias Updated CMS_NODE_STORAGE_SQL renamed sql_restore_node as sql_update_note_status, updated related code. --- modules/node/handler/node_handler.e | 6 +++++- modules/node/persistence/cms_node_storage_sql.e | 12 ++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/modules/node/handler/node_handler.e b/modules/node/handler/node_handler.e index bab7995..516aef2 100644 --- a/modules/node/handler/node_handler.e +++ b/modules/node/handler/node_handler.e @@ -242,15 +242,19 @@ feature {NONE} -- Trash:Restore do_delete (req: WSF_REQUEST; res: WSF_RESPONSE) -- Delete a node from the database. + local + l_source: STRING do if attached current_user (req) as l_user then if attached {WSF_STRING} req.path_parameter ("id") as l_id then if l_id.is_integer and then - attached node_api.node (l_id.integer_value) as l_node + attached {CMS_NODE} node_api.node (l_id.integer_value) as l_node then if node_api.has_permission_for_action_on_node ("delete", l_node, current_user (req)) then node_api.delete_node (l_node) + l_source := node_api.node_path (l_node) + api.unset_path_alias (l_source, api.location_alias (l_source)) res.send (create {CMS_REDIRECTION_RESPONSE_MESSAGE}.make (req.absolute_script_url (""))) else send_access_denied (req, res) diff --git a/modules/node/persistence/cms_node_storage_sql.e b/modules/node/persistence/cms_node_storage_sql.e index 56222d4..897d5e5 100644 --- a/modules/node/persistence/cms_node_storage_sql.e +++ b/modules/node/persistence/cms_node_storage_sql.e @@ -398,13 +398,6 @@ feature -- Change: Node -- we remove node_revisions and pages. -- Check: maybe we need a transaction. sql_modify (sql_delete_node_revisions, l_parameters) - sql_finalize - - -- we remove node_aliases - -- Check: maybe we need a transaction. - create l_sql_delete_node_aliases.make_from_string (sql_delete_node_aliases) - l_sql_delete_node_aliases.replace_substring_all ("$nodeid", "node/" + a_node.id.out) - sql_modify (l_sql_delete_node_aliases, void) sql_finalize if not error_handler.has_error then @@ -429,7 +422,7 @@ feature -- Change: Node l_parameters.put (l_time, "changed") l_parameters.put ({CMS_NODE_API}.published, "status") l_parameters.put (a_id, "nid") - sql_modify (sql_restore_node, l_parameters) + sql_modify (sql_update_node_status, l_parameters) sql_finalize end @@ -572,7 +565,7 @@ feature {NONE} -- Queries sql_delete_node: STRING = "DELETE FROM nodes WHERE nid=:nid" -- Physical deletion with free metadata. - sql_restore_node: STRING = "UPDATE nodes SET changed=:changed, status =:status WHERE nid=:nid" + sql_update_node_status: STRING = "UPDATE nodes SET changed=:changed, status =:status WHERE nid=:nid" -- Restore node to {CMS_NODE_API}.published sql_last_insert_node_id: STRING = "SELECT MAX(nid) FROM nodes;" @@ -596,7 +589,6 @@ feature {NONE} -- Queries sql_delete_node_revisions: STRING = "DELETE FROM node_revisions WHERE nid=:nid;" - sql_delete_node_aliases: STRING = "DELETE FROM path_aliases WHERE source='$nodeid';" feature {NONE} -- Sql Queries: USER_ROLES collaborators, author