diff --git a/modules/blog/cms_node_storage_sql_blog_extension.e b/modules/blog/cms_node_storage_sql_blog_extension.e index 1793bd9..7dfc9d2 100644 --- a/modules/blog/cms_node_storage_sql_blog_extension.e +++ b/modules/blog/cms_node_storage_sql_blog_extension.e @@ -108,6 +108,16 @@ feature -- Persistence end end + delete_by_id (a_nid: INTEGER_64) + -- remove node extensions by id `a_nid'. + local + l_parameters: STRING_TABLE [ANY] + do + create l_parameters.make (1) + l_parameters.put (a_nid, "nid") + sql_change (sql_delete_node_data, l_parameters) + end + feature {NONE} -- Implementation node_data (a_node: CMS_NODE): detachable TUPLE [revision: INTEGER_64; tags: READABLE_STRING_32] @@ -145,5 +155,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..dac37d4 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_by_id (a_nid: INTEGER_64) + -- remove node extensions by id `a_nid'. + require + valid_id: a_nid > 0 + 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..140266a 100644 --- a/modules/node/persistence/cms_node_storage_i.e +++ b/modules/node/persistence/cms_node_storage_i.e @@ -61,6 +61,18 @@ feature {NONE} -- Implementation end end + + extended_delete (a_node: CMS_NODE) + -- Delete extended data related to node `a_id'. + require + not error_handler.has_error + do + if attached node_storage_extension (a_node) as ext then + ext.delete_by_id (a_node.id) + end + end + + feature -- Access nodes_count: NATURAL_64 @@ -166,8 +178,16 @@ feature -- Change: Node delete_node (a_node: CMS_NODE) -- Delete `a_node'. do + -- TODO + -- Check if we need to use a transaction + -- we delete a node + -- node_revisions + -- and extensions (PAGE, BLOG, etc) if a_node.has_id then delete_node_by_id (a_node.id) + if not error_handler.has_error then + extended_delete (a_node) + end end end diff --git a/modules/node/persistence/cms_node_storage_sql.e b/modules/node/persistence/cms_node_storage_sql.e index f159e7c..e92451f 100644 --- a/modules/node/persistence/cms_node_storage_sql.e +++ b/modules/node/persistence/cms_node_storage_sql.e @@ -349,6 +349,9 @@ feature -- Change: Node create l_parameters.make (1) l_parameters.put (a_id, "nid") sql_change (sql_delete_node, l_parameters) + + -- we remove node_revisions and pages. + sql_change (sql_delete_node_revisions, l_parameters) end restore_node_by_id (a_id: INTEGER_64) @@ -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..47b8a78 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,17 @@ feature -- Persistence end end + + delete_by_id (a_nid: INTEGER_64) + -- remove node extensions by id `a_nid'. + local + l_parameters: STRING_TABLE [ANY] + do + create l_parameters.make (1) + l_parameters.put (a_nid, "nid") + sql_change (sql_delete_node_data, l_parameters) + end + feature {NONE} -- Implementation node_data (a_node: CMS_NODE): detachable TUPLE [revision: INTEGER_64; parent_id: INTEGER_64] @@ -143,5 +154,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