summaryrefslogtreecommitdiff
path: root/modules/node
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2013-12-30 18:46:34 -0500
committerDavid Rothstein <drothstein@gmail.com>2013-12-30 18:46:34 -0500
commita4a72dc277fc89eb36964c1509ad1b30121a013a (patch)
treeb433075f02648add69b02d7c89b356ff8c61d557 /modules/node
parentcb7127c514aee7e66659da3f20348db4c013a40c (diff)
downloadbrdo-a4a72dc277fc89eb36964c1509ad1b30121a013a.tar.gz
brdo-a4a72dc277fc89eb36964c1509ad1b30121a013a.tar.bz2
Issue #1146244 by Dean Reilly, klausi, fago, firebird, David_Rothstein, aaronbauman, shenzhuxi, jaanhoinatski, themoep, citlacom: Node_access integrity constraint violation on module_invoke_all('node_' . $op, $node);.
Diffstat (limited to 'modules/node')
-rw-r--r--modules/node/node.module6
-rw-r--r--modules/node/node.test16
-rw-r--r--modules/node/tests/node_test.module18
3 files changed, 36 insertions, 4 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index 268076257..876d5ca49 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -1179,10 +1179,8 @@ function node_save($node) {
module_invoke_all('node_' . $op, $node);
module_invoke_all('entity_' . $op, $node, 'node');
- // Update the node access table for this node. There's no need to delete
- // existing records if the node is new.
- $delete = $op == 'update';
- node_access_acquire_grants($node, $delete);
+ // Update the node access table for this node.
+ node_access_acquire_grants($node);
// Clear internal properties.
unset($node->is_new);
diff --git a/modules/node/node.test b/modules/node/node.test
index 3cafefa1d..bfe371755 100644
--- a/modules/node/node.test
+++ b/modules/node/node.test
@@ -1363,6 +1363,22 @@ class NodeSaveTestCase extends DrupalWebTestCase {
$node = node_load($node->nid);
$this->assertEqual($node->title, 'updated_presave', 'Static cache has been cleared.');
}
+
+ /**
+ * Tests saving a node on node insert.
+ *
+ * This test ensures that a node has been fully saved when hook_node_insert()
+ * is invoked, so that the node can be saved again in a hook implementation
+ * without errors.
+ *
+ * @see node_test_node_insert()
+ */
+ function testNodeSaveOnInsert() {
+ // node_test_node_insert() tiggers a save on insert if the title equals
+ // 'new'.
+ $node = $this->drupalCreateNode(array('title' => 'new'));
+ $this->assertEqual($node->title, 'Node ' . $node->nid, 'Node saved on node insert.');
+ }
}
/**
diff --git a/modules/node/tests/node_test.module b/modules/node/tests/node_test.module
index fb6678521..edc175f19 100644
--- a/modules/node/tests/node_test.module
+++ b/modules/node/tests/node_test.module
@@ -161,3 +161,21 @@ function node_test_entity_view_mode_alter(&$view_mode, $context) {
$view_mode = $change_view_mode;
}
}
+
+/**
+ * Implements hook_node_insert().
+ *
+ * This tests saving a node on node insert.
+ *
+ * @see NodeSaveTest::testNodeSaveOnInsert()
+ */
+function node_test_node_insert($node) {
+ // Set the node title to the node ID and save.
+ if ($node->title == 'new') {
+ $node->title = 'Node '. $node->nid;
+ // Remove the is_new flag, so that the node is updated and not inserted
+ // again.
+ unset($node->is_new);
+ node_save($node);
+ }
+}