diff --git a/modules/blog/cms_node_storage_sql_blog_extension.e b/modules/blog/cms_node_storage_sql_blog_extension.e index 1793bd9..24d6844 100644 --- a/modules/blog/cms_node_storage_sql_blog_extension.e +++ b/modules/blog/cms_node_storage_sql_blog_extension.e @@ -108,6 +108,18 @@ feature -- Persistence end end + delete_node (a_node: CMS_BLOG) + -- + local + l_parameters: STRING_TABLE [ANY] + do + if a_node.has_id then + create l_parameters.make (1) + l_parameters.put (a_node.id, "nid") + sql_change (sql_delete_node_data, l_parameters) + end + end + feature {NONE} -- Implementation node_data (a_node: CMS_NODE): detachable TUPLE [revision: INTEGER_64; tags: READABLE_STRING_32] @@ -145,5 +157,6 @@ feature -- SQL sql_select_node_data: STRING = "SELECT nid, revision, tags FROM blog_post_nodes WHERE nid=:nid AND revision<=:revision ORDER BY revision DESC LIMIT 1;" sql_insert_node_data: STRING = "INSERT INTO blog_post_nodes (nid, revision, tags) VALUES (:nid, :revision, :tags);" sql_update_node_data: STRING = "UPDATE blog_post_nodes SET nid=:nid, revision=:revision, tags=:tags WHERE nid=:nid AND revision=:revision;" + sql_delete_node_data: STRING = "DELETE FROM blog_post_nodes WHERE nid=:nid;" end diff --git a/modules/node/handler/cms_page_node_type_webform_manager.e b/modules/node/handler/cms_page_node_type_webform_manager.e index 78a5686..9de71b3 100644 --- a/modules/node/handler/cms_page_node_type_webform_manager.e +++ b/modules/node/handler/cms_page_node_type_webform_manager.e @@ -30,7 +30,7 @@ feature -- Forms ... local ti: WSF_FORM_NUMBER_INPUT fs: WSF_FORM_FIELD_SET - l_parent_id, nid: INTEGER_64 + l_parent_id: INTEGER_64 do Precursor (response, f, a_node) @@ -102,7 +102,6 @@ feature -- Forms ... parent_validation (a_response: NODE_RESPONSE; fd: WSF_FORM_DATA) local - l_selected: BOOLEAN node_api: CMS_NODE_API l_parent_id: INTEGER_64 nid: INTEGER_64 diff --git a/modules/node/persistence/cms_node_storage_extension.e b/modules/node/persistence/cms_node_storage_extension.e index 5c73cac..4943ffa 100644 --- a/modules/node/persistence/cms_node_storage_extension.e +++ b/modules/node/persistence/cms_node_storage_extension.e @@ -49,6 +49,13 @@ feature -- Persistence end end + delete_node (a_node: CMS_NODE) + -- remove node extensions. + require + a_node_accepted: is_accepted (a_node) + deferred + end + feature {NONE} -- Persistence implementation store (a_node: G) diff --git a/modules/node/persistence/cms_node_storage_i.e b/modules/node/persistence/cms_node_storage_i.e index 688753e..ef97a66 100644 --- a/modules/node/persistence/cms_node_storage_i.e +++ b/modules/node/persistence/cms_node_storage_i.e @@ -44,7 +44,7 @@ feature {NONE} -- Implementation extended_store (a_node: CMS_NODE) -- Store extended data from `a_node'. require - not error_handler.has_error + not_has_error: not error_handler.has_error do if attached node_storage_extension (a_node) as ext then ext.store_node (a_node) @@ -54,13 +54,23 @@ feature {NONE} -- Implementation extended_load (a_node: CMS_NODE) -- Load extended data into `a_node'. require - not error_handler.has_error + not_has_error: not error_handler.has_error do if attached node_storage_extension (a_node) as ext then ext.load_node (a_node) end end + extended_delete (a_node: CMS_NODE) + -- Delete extended data related to node `a_node'. + require + not_has_error: not error_handler.has_error + do + if attached node_storage_extension (a_node) as ext then + ext.delete_node (a_node) + end + end + feature -- Access nodes_count: NATURAL_64 @@ -165,16 +175,19 @@ feature -- Change: Node delete_node (a_node: CMS_NODE) -- Delete `a_node'. + require + valid_node_id: a_node.has_id do - if a_node.has_id then - delete_node_by_id (a_node.id) - end + -- TODO + -- Check if we need to use a transaction + -- we delete a node + -- node_revisions + -- and extensions (PAGE, BLOG, etc). + delete_node_base (a_node) end - delete_node_by_id (a_id: INTEGER_64) - -- Remove node by id `a_id'. - require - valid_node_id: a_id > 0 + delete_node_base (a_node: CMS_NODE) + -- Remove node `a_node'. deferred end diff --git a/modules/node/persistence/cms_node_storage_null.e b/modules/node/persistence/cms_node_storage_null.e index 497c11a..34cf6a3 100644 --- a/modules/node/persistence/cms_node_storage_null.e +++ b/modules/node/persistence/cms_node_storage_null.e @@ -106,7 +106,7 @@ feature -- Node do end - delete_node_by_id (a_id: INTEGER_64) + delete_node_base (a_node: CMS_NODE) -- do end diff --git a/modules/node/persistence/cms_node_storage_sql.e b/modules/node/persistence/cms_node_storage_sql.e index f159e7c..6305ca1 100644 --- a/modules/node/persistence/cms_node_storage_sql.e +++ b/modules/node/persistence/cms_node_storage_sql.e @@ -53,11 +53,6 @@ feature -- Access end sql_forth end --- across --- Result as ic --- loop --- fill_node (ic.item) --- end end node_revisions (a_node: CMS_NODE): LIST [CMS_NODE] @@ -95,7 +90,7 @@ feature -- Access create {ARRAYED_LIST [CMS_NODE]} Result.make (0) error_handler.reset - write_information_log (generator + ".trash_nodes") + write_information_log (generator + ".trashed_nodes") from create l_parameters.make (1) @@ -124,7 +119,7 @@ feature -- Access create {ARRAYED_LIST [CMS_NODE]} Result.make (0) error_handler.reset - write_information_log (generator + ".nodes") + write_information_log (generator + ".recent_nodes") from create l_parameters.make (2) @@ -150,7 +145,7 @@ feature -- Access create {ARRAYED_LIST [CMS_NODE]} Result.make (0) error_handler.reset - write_information_log (generator + ".nodes") + write_information_log (generator + ".recent_node_changes_before") from create l_parameters.make (3) @@ -176,7 +171,7 @@ feature -- Access l_parameters: STRING_TABLE [ANY] do error_handler.reset - write_information_log (generator + ".node") + write_information_log (generator + ".node_by_id") create l_parameters.make (1) l_parameters.put (a_id, "nid") sql_query (sql_select_node_by_id, l_parameters) @@ -191,7 +186,7 @@ feature -- Access l_parameters: STRING_TABLE [ANY] do error_handler.reset - write_information_log (generator + ".node") + write_information_log (generator + ".node_by_id_and_revision") create l_parameters.make (1) l_parameters.put (a_node_id, "nid") l_parameters.put (a_revision, "revision") @@ -326,7 +321,7 @@ feature -- Change: Node local l_parameters: STRING_TABLE [ANY] do - write_information_log (generator + ".delete_node {" + a_id.out + "}") + write_information_log (generator + ".trash_node_by_id {" + a_id.out + "}") error_handler.reset create l_parameters.make (3) @@ -336,19 +331,27 @@ feature -- Change: Node sql_change (sql_trash_node, l_parameters) end - delete_node_by_id (a_id: INTEGER_64) + delete_node_base (a_node: CMS_NODE) -- local l_parameters: STRING_TABLE [ANY] l_time: DATE_TIME do create l_time.make_now_utc - write_information_log (generator + ".trash_node {" + a_id.out + "}") + write_information_log (generator + ".delete_node_base {" + a_node.id.out + "}") error_handler.reset create l_parameters.make (1) - l_parameters.put (a_id, "nid") + l_parameters.put (a_node.id, "nid") sql_change (sql_delete_node, l_parameters) + + -- we remove node_revisions and pages. + -- Check: maybe we need a transaction. + sql_change (sql_delete_node_revisions, l_parameters) + + if not error_handler.has_error then + extended_delete (a_node) + end end restore_node_by_id (a_id: INTEGER_64) @@ -358,7 +361,7 @@ feature -- Change: Node l_time: DATE_TIME do create l_time.make_now_utc - write_information_log (generator + ".restore_node {" + a_id.out + "}") + write_information_log (generator + ".restore_node_by_id {" + a_id.out + "}") error_handler.reset create l_parameters.make (1) @@ -520,6 +523,8 @@ feature {NONE} -- Queries WHERE pn.parent = :nid AND node.status != -1 GROUP BY node.nid, node.revision; ]" + sql_delete_node_revisions: STRING = "DELETE FROM node_revisions WHERE nid=:nid;" + 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;" diff --git a/modules/node/persistence/cms_node_storage_sql_page_extension.e b/modules/node/persistence/cms_node_storage_sql_page_extension.e index bc98357..cdffa57 100644 --- a/modules/node/persistence/cms_node_storage_sql_page_extension.e +++ b/modules/node/persistence/cms_node_storage_sql_page_extension.e @@ -112,6 +112,19 @@ feature -- Persistence end end + + delete_node (a_node: CMS_PAGE) + -- + local + l_parameters: STRING_TABLE [ANY] + do + if a_node.has_id then + create l_parameters.make (1) + l_parameters.put (a_node.id, "nid") + sql_change (sql_delete_node_data, l_parameters) + end + end + feature {NONE} -- Implementation node_data (a_node: CMS_NODE): detachable TUPLE [revision: INTEGER_64; parent_id: INTEGER_64] @@ -143,5 +156,6 @@ feature -- SQL sql_select_node_data: STRING = "SELECT nid, revision, parent FROM page_nodes WHERE nid=:nid AND revision<=:revision ORDER BY revision DESC LIMIT 1;" sql_insert_node_data: STRING = "INSERT INTO page_nodes (nid, revision, parent) VALUES (:nid, :revision, :parent);" sql_update_node_data: STRING = "UPDATE page_nodes SET nid=:nid, revision=:revision, parent=:parent WHERE nid=:nid AND revision=:revision;" + sql_delete_node_data: STRING = "DELETE FROM page_nodes WHERE nid=:nid;" end