From fd4c6da9479c52916216a1b18fc8fa35e4256b08 Mon Sep 17 00:00:00 2001
From: webchick <drupal@webchick.net>
Date: Mon, 15 Dec 2014 09:28:38 -0800
Subject: [PATCH] Issue #2354469 by swentel, Vj, R. Volk: Can't create node, if
 preview is required

---
 core/modules/node/src/NodeForm.php              |  9 ++++++++-
 core/modules/node/src/Tests/PagePreviewTest.php | 10 ++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 16b1a01634ce..12a0c00865e5 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -29,6 +29,11 @@ class NodeForm extends ContentEntityForm {
    */
   protected $tempStoreFactory;
 
+  /**
+   * Whether this node has been previewed or not.
+   */
+  protected $hasBeenPreviewed = FALSE;
+
   /**
    * Constructs a ContentEntityForm object.
    *
@@ -87,6 +92,8 @@ public function form(array $form, FormStateInterface $form_state) {
       $form_state->setRebuild();
       $this->entity = $preview->getFormObject()->getEntity();
       unset($this->entity->in_preview);
+
+      $this->hasBeenPreviewed = TRUE;
     }
 
     /** @var \Drupal\node\NodeInterface $node */
@@ -219,7 +226,7 @@ protected function actions(array $form, FormStateInterface $form_state) {
     $node = $this->entity;
     $preview_mode = $node->type->entity->getPreviewMode();
 
-    $element['submit']['#access'] = $preview_mode != DRUPAL_REQUIRED || (!$form_state->getErrors() && $form_state->get('node_preview'));
+    $element['submit']['#access'] = $preview_mode != DRUPAL_REQUIRED || $this->hasBeenPreviewed;
 
     // If saving is an option, privileged users get dedicated form submit
     // buttons to adjust the publishing status while saving in one go.
diff --git a/core/modules/node/src/Tests/PagePreviewTest.php b/core/modules/node/src/Tests/PagePreviewTest.php
index 5fc64d306c20..4c40ae9eb4d2 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -194,6 +194,16 @@ function testPagePreview() {
     $this->assertLink($newterm1);
     $this->assertLink($newterm2);
     $this->assertNoLink($newterm3);
+
+    // Check with required preview.
+    $node_type = NodeType::load('page');
+    $node_type->setPreviewMode(DRUPAL_REQUIRED);
+    $node_type->save();
+    $this->drupalGet('node/add/page');
+    $this->assertNoRaw('edit-submit');
+    $this->drupalPostForm('node/add/page', array($title_key => 'Preview'), t('Preview'));
+    $this->clickLink(t('Back to content editing'));
+    $this->assertRaw('edit-submit');
   }
 
   /**
-- 
GitLab