summaryrefslogtreecommitdiff
path: root/modules/node/node.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/node/node.module')
-rw-r--r--modules/node/node.module46
1 files changed, 23 insertions, 23 deletions
diff --git a/modules/node/node.module b/modules/node/node.module
index eb8f6c513..14cddb13a 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -621,9 +621,6 @@ function node_save(&$node) {
if (empty($node->nid)) {
// Insert a new node.
$node->is_new = TRUE;
-
- $node->nid = db_next_id('{node}_nid');
- $node->vid = db_next_id('{node_revisions}_vid');
}
else {
// We need to ensure that all node fields are filled.
@@ -635,7 +632,6 @@ function node_save(&$node) {
if (!empty($node->revision)) {
$node->old_vid = $node->vid;
- $node->vid = db_next_id('{node_revisions}_vid');
}
}
@@ -647,11 +643,11 @@ function node_save(&$node) {
$node->changed = time();
// Split off revisions data to another structure
- $revisions_table_values = array('nid' => $node->nid, 'vid' => $node->vid,
+ $revisions_table_values = array('nid' => &$node->nid,
'title' => $node->title, 'body' => $node->body,
'teaser' => $node->teaser, 'timestamp' => $node->changed,
'uid' => $user->uid, 'format' => $node->format);
- $revisions_table_types = array('nid' => '%d', 'vid' => '%d',
+ $revisions_table_types = array('nid' => '%d',
'title' => "'%s'", 'body' => "'%s'",
'teaser' => "'%s'", 'timestamp' => '%d',
'uid' => '%d', 'format' => '%d');
@@ -662,22 +658,27 @@ function node_save(&$node) {
$revisions_table_values['log'] = $node->log;
$revisions_table_types['log'] = "'%s'";
}
- $node_table_values = array('nid' => $node->nid, 'vid' => $node->vid,
+ $node_table_values = array(
'title' => $node->title, 'type' => $node->type, 'uid' => $node->uid,
'status' => $node->status, 'language' => $node->language, 'created' => $node->created,
'changed' => $node->changed, 'comment' => $node->comment,
'promote' => $node->promote, 'sticky' => $node->sticky);
- $node_table_types = array('nid' => '%d', 'vid' => '%d',
+ $node_table_types = array(
'title' => "'%s'", 'type' => "'%s'", 'uid' => '%d',
'status' => '%d', 'language' => "'%s'",'created' => '%d',
'changed' => '%d', 'comment' => '%d',
'promote' => '%d', 'sticky' => '%d');
-
+ $update_node = TRUE;
//Generate the node table query and the
//the node_revisions table query
if ($node->is_new) {
- $node_query = 'INSERT INTO {node} ('. implode(', ', array_keys($node_table_types)) .') VALUES ('. implode(', ', $node_table_types) .')';
+ $node_query = 'INSERT INTO {node} (vid, '. implode(', ', array_keys($node_table_types)) .') VALUES (NULL, '. implode(', ', $node_table_types) .')';
+ db_query($node_query, $node_table_values);
+ $node->nid = db_last_insert_id('node', 'nid');
$revisions_query = 'INSERT INTO {node_revisions} ('. implode(', ', array_keys($revisions_table_types)) .') VALUES ('. implode(', ', $revisions_table_types) .')';
+ db_query($revisions_query, $revisions_table_values);
+ $node->vid = db_last_insert_id('node_revisions', 'vid');
+ $op = 'insert';
}
else {
$arr = array();
@@ -686,8 +687,11 @@ function node_save(&$node) {
}
$node_table_values[] = $node->nid;
$node_query = 'UPDATE {node} SET '. implode(', ', $arr) .' WHERE nid = %d';
+ db_query($node_query, $node_table_values);
if (!empty($node->revision)) {
$revisions_query = 'INSERT INTO {node_revisions} ('. implode(', ', array_keys($revisions_table_types)) .') VALUES ('. implode(', ', $revisions_table_types) .')';
+ db_query($revisions_query, $revisions_table_values);
+ $node->vid = db_last_insert_id('node_revisions', 'vid');
}
else {
$arr = array();
@@ -696,23 +700,19 @@ function node_save(&$node) {
}
$revisions_table_values[] = $node->vid;
$revisions_query = 'UPDATE {node_revisions} SET '. implode(', ', $arr) .' WHERE vid = %d';
+ db_query($revisions_query, $revisions_table_values);
+ $update_node = FALSE;
}
+ $op = 'update';
}
-
- // Insert the node into the database:
- db_query($node_query, $node_table_values);
- db_query($revisions_query, $revisions_table_values);
-
- // Call the node specific callback (if any):
- if ($node->is_new) {
- node_invoke($node, 'insert');
- node_invoke_nodeapi($node, 'insert');
- }
- else {
- node_invoke($node, 'update');
- node_invoke_nodeapi($node, 'update');
+ if ($update_node) {
+ db_query('UPDATE node SET vid = %d WHERE nid = %d', $node->vid, $node->nid);
}
+ // Call the node specific callback (if any):
+ node_invoke($node, $op);
+ node_invoke_nodeapi($node, $op);
+
// Update the node access table for this node.
node_access_acquire_grants($node);