diff --git modules/node/node.module modules/node/node.module index 39a1d3b..7535632 100644 --- modules/node/node.module +++ modules/node/node.module @@ -938,36 +938,43 @@ function node_save($node) { module_invoke_all('node_presave', $node); global $user; + // Determine if we are inserting a new node. if (!isset($node->is_new)) { $node->is_new = empty($node->nid); } - // Apply filters to some default node fields: - if ($node->is_new) { - // Insert a new node. - $node->is_new = TRUE; - - // When inserting a node, $node->log must be set because - // {node_revision}.log does not (and cannot) have a default - // value. If the user does not have permission to create - // revisions, however, the form will not contain an element for - // log so $node->log will be unset at this point. + if ($node->is_new || !empty($node->revision)) { + // When inserting a node revision, $node->log must be set because + // {node_revision}.log cannot have a default value because it is a text + // column. However, $node->log may not be set at this point, such as if the + // user submitting a node form does not have permission to create revisions. if (!isset($node->log)) { $node->log = ''; } } - elseif (!empty($node->revision)) { + elseif (empty($node->log)) { + // When updating, avoid clobbering an existing log entry with an empty one. + unset($node->log); + } + + // $node->teaser and $node->body are also text columns and have no default, + // but are not allowed to be NULL. + // @todo: make these columns nullable since node types are not required to + // use them. + if (!isset($node->teaser)) { + $node->teaser = ''; + } + if (!isset($node->body)) { + $node->body = ''; + } + + // Save the old revision ID for use by node hook implementations. + if (!$node->is_new && !empty($node->revision) && $node->vid) { $node->old_vid = $node->vid; unset($node->vid); } - else { - // When updating a node, avoid clobbering an existing log entry with an empty one. - if (empty($node->log)) { - unset($node->log); - } - } - // Set some required fields: + // Set the timestamp fields: if (empty($node->created)) { $node->created = REQUEST_TIME; } @@ -985,7 +992,7 @@ function node_save($node) { $langcode = FIELD_LANGUAGE_NONE; $node->title = $title_field[$langcode][0]['value']; - // Generate the node table query and the node_revisions table query. + // Write to the the {node} and {node_revisions} tables. if ($node->is_new) { drupal_write_record('node', $node); _node_save_revision($node, $user->uid);