From c0f06fbe676d75267b140ce121da5903aabaf938 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Thu, 27 Jan 2005 14:45:42 +0000
Subject: [PATCH] - Patch #6025 by Jeremy: avoid data to get lost when two
 users are editing a node at the same time.

---
 modules/node.module      | 14 +++++++++++++-
 modules/node/node.module | 14 +++++++++++++-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/modules/node.module b/modules/node.module
index 836cb2a35747..557251781d0b 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -724,6 +724,11 @@ function node_menu($may_cache) {
   return $items;
 }
 
+function node_last_changed($nid) {
+  $node = db_fetch_object(db_query('SELECT changed FROM {node} WHERE nid = %d', $nid));
+  return ($node->changed);
+}
+
 /**
  * Generate the content administration overview.
  */
@@ -1083,6 +1088,10 @@ function node_validate($node) {
     $node->teaser = node_teaser($node->body);
   }
 
+  if (node_last_changed($node->nid) > $node->changed) {
+    form_set_error('changed', t('This content has been modified by another user, unable to save changes.'));
+  }
+
   // Create a new revision when required.
   $node = node_revision_create($node);
 
@@ -1221,6 +1230,10 @@ function node_form($edit) {
     $output .= form_hidden('created', $edit->created);
   }
 
+  if ($edit->changed) {
+    $output .= form_hidden('changed', $edit->changed);
+  }
+
   $output .= form_hidden('type', $edit->type);
 
   // Add the buttons.
@@ -1353,7 +1366,6 @@ function node_preview($node) {
     if (empty($node->created)) {
       $node->created = time();
     }
-    $node->changed = time();
 
     // Extract a teaser, if it hasn't been set (e.g. by a module-provided
     // 'teaser' form item).
diff --git a/modules/node/node.module b/modules/node/node.module
index 836cb2a35747..557251781d0b 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -724,6 +724,11 @@ function node_menu($may_cache) {
   return $items;
 }
 
+function node_last_changed($nid) {
+  $node = db_fetch_object(db_query('SELECT changed FROM {node} WHERE nid = %d', $nid));
+  return ($node->changed);
+}
+
 /**
  * Generate the content administration overview.
  */
@@ -1083,6 +1088,10 @@ function node_validate($node) {
     $node->teaser = node_teaser($node->body);
   }
 
+  if (node_last_changed($node->nid) > $node->changed) {
+    form_set_error('changed', t('This content has been modified by another user, unable to save changes.'));
+  }
+
   // Create a new revision when required.
   $node = node_revision_create($node);
 
@@ -1221,6 +1230,10 @@ function node_form($edit) {
     $output .= form_hidden('created', $edit->created);
   }
 
+  if ($edit->changed) {
+    $output .= form_hidden('changed', $edit->changed);
+  }
+
   $output .= form_hidden('type', $edit->type);
 
   // Add the buttons.
@@ -1353,7 +1366,6 @@ function node_preview($node) {
     if (empty($node->created)) {
       $node->created = time();
     }
-    $node->changed = time();
 
     // Extract a teaser, if it hasn't been set (e.g. by a module-provided
     // 'teaser' form item).
-- 
GitLab