diff options
author | David Rothstein <drothstein@gmail.com> | 2015-03-30 16:49:06 -0400 |
---|---|---|
committer | David Rothstein <drothstein@gmail.com> | 2015-03-30 16:49:06 -0400 |
commit | c0f687ed41e2bd171b422485ef2362eddb2ce918 (patch) | |
tree | 9c6403978a4ae94d70abe57ab3955274b679dbc4 /modules/node | |
parent | d67fd28f14c9a5e4e596a75749b4e6fb4c80da3d (diff) | |
download | brdo-c0f687ed41e2bd171b422485ef2362eddb2ce918.tar.gz brdo-c0f687ed41e2bd171b422485ef2362eddb2ce918.tar.bz2 |
Issue #2001308 by stefan.r, David_Rothstein, marthinal, helmo: Node preview removes file values from node edit form for non-displayed items
Diffstat (limited to 'modules/node')
-rw-r--r-- | modules/node/node.pages.inc | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/modules/node/node.pages.inc b/modules/node/node.pages.inc index 626746362..cc3908e3c 100644 --- a/modules/node/node.pages.inc +++ b/modules/node/node.pages.inc @@ -371,35 +371,38 @@ function node_form_build_preview($form, &$form_state) { * @see node_form_build_preview() */ function node_preview($node) { - if (node_access('create', $node) || node_access('update', $node)) { - _field_invoke_multiple('load', 'node', array($node->nid => $node)); + // Clone the node before previewing it to prevent the node itself from being + // modified. + $cloned_node = clone $node; + if (node_access('create', $cloned_node) || node_access('update', $cloned_node)) { + _field_invoke_multiple('load', 'node', array($cloned_node->nid => $cloned_node)); // Load the user's name when needed. - if (isset($node->name)) { + if (isset($cloned_node->name)) { // The use of isset() is mandatory in the context of user IDs, because // user ID 0 denotes the anonymous user. - if ($user = user_load_by_name($node->name)) { - $node->uid = $user->uid; - $node->picture = $user->picture; + if ($user = user_load_by_name($cloned_node->name)) { + $cloned_node->uid = $user->uid; + $cloned_node->picture = $user->picture; } else { - $node->uid = 0; // anonymous user + $cloned_node->uid = 0; // anonymous user } } - elseif ($node->uid) { - $user = user_load($node->uid); - $node->name = $user->name; - $node->picture = $user->picture; + elseif ($cloned_node->uid) { + $user = user_load($cloned_node->uid); + $cloned_node->name = $user->name; + $cloned_node->picture = $user->picture; } - $node->changed = REQUEST_TIME; - $nodes = array($node->nid => $node); + $cloned_node->changed = REQUEST_TIME; + $nodes = array($cloned_node->nid => $cloned_node); field_attach_prepare_view('node', $nodes, 'full'); // Display a preview of the node. if (!form_get_errors()) { - $node->in_preview = TRUE; - $output = theme('node_preview', array('node' => $node)); - unset($node->in_preview); + $cloned_node->in_preview = TRUE; + $output = theme('node_preview', array('node' => $cloned_node)); + unset($cloned_node->in_preview); } drupal_set_title(t('Preview'), PASS_THROUGH); |