From ee23c1875a9da98cc578c5310ca5a3dc0e202259 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 28 Nov 2016 14:48:43 +0000
Subject: [PATCH] Revert "Issue #2789315 by amateescu, timmillwood,
 claudiu.cristea, sandervd, GroovyCarrot, catch, Wim Leers, pfrenssen, Berdir,
 twistor, xjm: Create EntityPublishedInterface and use for Node and Comment"

This reverts commit d2af11699a7defb704849da5fd3718b40d8bce07.
---
 .../Core/Entity/EntityPublishedInterface.php  | 41 -------------
 .../Core/Entity/EntityPublishedTrait.php      | 61 +++++++------------
 ...supportedEntityTypeDefinitionException.php |  8 ---
 core/modules/comment/comment.install          | 12 ----
 core/modules/comment/src/CommentInterface.php | 25 ++++++--
 core/modules/comment/src/Entity/Comment.php   | 11 +---
 .../src/Tests/Update/CommentUpdateTest.php    | 18 ------
 core/modules/node/node.install                | 21 -------
 core/modules/node/src/Entity/Node.php         |  1 -
 core/modules/node/src/NodeInterface.php       | 24 +++++++-
 .../node/src/Tests/Update/NodeUpdateTest.php  | 41 -------------
 core/modules/rest/src/Tests/UpdateTest.php    |  1 +
 12 files changed, 68 insertions(+), 196 deletions(-)
 delete mode 100644 core/lib/Drupal/Core/Entity/EntityPublishedInterface.php
 delete mode 100644 core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
 delete mode 100644 core/modules/node/src/Tests/Update/NodeUpdateTest.php

diff --git a/core/lib/Drupal/Core/Entity/EntityPublishedInterface.php b/core/lib/Drupal/Core/Entity/EntityPublishedInterface.php
deleted file mode 100644
index 4372008c19cd..000000000000
--- a/core/lib/Drupal/Core/Entity/EntityPublishedInterface.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace Drupal\Core\Entity;
-
-/**
- * Provides an interface for access to an entity's published state.
- */
-interface EntityPublishedInterface {
-
-  /**
-   * Returns whether or not the entity is published.
-   *
-   * @return bool
-   *   TRUE if the entity is published, FALSE otherwise.
-   */
-  public function isPublished();
-
-  /**
-   * Sets the entity as published.
-   *
-   * @param bool|null $published
-   *   (optional and deprecated) TRUE to set this entity to published, FALSE to
-   *   set it to unpublished. Defaults to NULL. This parameter is deprecated in
-   *   Drupal 8.3.0 and will be removed before Drupal 9.0.0. Use this method,
-   *   without any parameter, to set the entity as published and
-   *   setUnpublished() to set the entity as unpublished.
-   *
-   * @return $this
-   *
-   * @see \Drupal\Core\Entity\EntityPublishedInterface::setUnpublished()
-   */
-  public function setPublished($published = NULL);
-
-  /**
-   * Sets the entity as unpublished.
-   *
-   * @return $this
-   */
-  public function setUnpublished();
-
-}
diff --git a/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php b/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
index 871aceb365c3..2145f4a61e8a 100644
--- a/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
+++ b/core/lib/Drupal/Core/Entity/EntityPublishedTrait.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Core\Entity;
 
-use Drupal\Core\Entity\Exception\UnsupportedEntityTypeDefinitionException;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
 
@@ -18,21 +17,11 @@ trait EntityPublishedTrait {
    *   The entity type to add the publishing status field to.
    *
    * @return \Drupal\Core\Field\BaseFieldDefinition[]
-   *   An array of base field definitions.
-   *
-   * @throws \Drupal\Core\Entity\Exception\UnsupportedEntityTypeDefinitionException
-   *   Thrown when the entity type does not implement EntityPublishedInterface
-   *   or if it does not have a "published" entity key.
+   *   Array of base field definitions.
    */
   public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity_type) {
-    if (!is_subclass_of($entity_type->getClass(), EntityPublishedInterface::class)) {
-      throw new UnsupportedEntityTypeDefinitionException('The entity type ' . $entity_type->id() . ' does not implement \Drupal\Core\Entity\EntityPublishedInterface.');
-    }
-    if (!$entity_type->hasKey('published')) {
-      throw new UnsupportedEntityTypeDefinitionException('The entity type ' . $entity_type->id() . ' does not have a "published" entity key.');
-    }
-
-    return [$entity_type->getKey('published') => BaseFieldDefinition::create('boolean')
+    $key = $entity_type->hasKey('status') ? $entity_type->getKey('status') : 'status';
+    return [$key => BaseFieldDefinition::create('boolean')
       ->setLabel(new TranslatableMarkup('Publishing status'))
       ->setDescription(new TranslatableMarkup('A boolean indicating the published state.'))
       ->setRevisionable(TRUE)
@@ -41,37 +30,31 @@ public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity
   }
 
   /**
-   * {@inheritdoc}
+   * Returns the published status of the entity.
+   *
+   * @return bool
+   *   The published status of the entity.
    */
   public function isPublished() {
-    $key = $this->getEntityType()->getKey('published');
-    return (bool) $this->get($key)->value;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setPublished($published = NULL) {
-    if ($published !== NULL) {
-      @trigger_error('The $published parameter is deprecated since version 8.3.x and will be removed in 9.0.0.', E_USER_DEPRECATED);
-      $value = (bool) $published;
-    }
-    else {
-      $value = TRUE;
-    }
-    $key = $this->getEntityType()->getKey('published');
-    $this->set($key, $value);
-
-    return $this;
+    $status = $this->getEntityKey('status');
+    return (bool) (isset($status) ? $status : $this->get('status')->value);
   }
 
   /**
-   * {@inheritdoc}
+   * Sets the entity as published or not published.
+   *
+   * @param bool $published
+   *   A boolean value denoting the published status.
+   *
+   * @return \Drupal\Core\Entity\ContentEntityInterface $this
+   *   The Content Entity object.
    */
-  public function setUnpublished() {
-    $key = $this->getEntityType()->getKey('published');
-    $this->set($key, FALSE);
-
+  public function setPublished($published) {
+    /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
+    $key = $this->getEntityType()->getKey('status') ?: 'status';
+    // @todo: Replace values with constants from EntityPublishedInterface or
+    // similar when introduced. https://www.drupal.org/node/2811667
+    $this->set($key, $published ? 1 : 0);
     return $this;
   }
 
diff --git a/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php b/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
deleted file mode 100644
index 079b42215a85..000000000000
--- a/core/lib/Drupal/Core/Entity/Exception/UnsupportedEntityTypeDefinitionException.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-namespace Drupal\Core\Entity\Exception;
-
-/**
- * Defines an exception thrown when an entity type definition is invalid.
- */
-class UnsupportedEntityTypeDefinitionException extends \Exception { }
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index 895c0397ab67..38958aa78801 100644
--- a/core/modules/comment/comment.install
+++ b/core/modules/comment/comment.install
@@ -193,18 +193,6 @@ function comment_update_8300() {
   \Drupal::service('entity.definition_update_manager')->updateFieldStorageDefinition($field_definitions['status']);
 }
 
-/**
- * Set the 'published' entity key.
- */
-function comment_update_8301() {
-  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
-  $entity_type = $definition_update_manager->getEntityType('comment');
-  $keys = $entity_type->getKeys();
-  $keys['published'] = 'status';
-  $entity_type->set('entity_keys', $keys);
-  $definition_update_manager->updateEntityType($entity_type);
-}
-
 /**
  * @} End of "addtogroup updates-8.3.x".
  */
diff --git a/core/modules/comment/src/CommentInterface.php b/core/modules/comment/src/CommentInterface.php
index 9f3360c1ed34..28318eea1530 100644
--- a/core/modules/comment/src/CommentInterface.php
+++ b/core/modules/comment/src/CommentInterface.php
@@ -3,14 +3,13 @@
 namespace Drupal\comment;
 
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Entity\EntityPublishedInterface;
 use Drupal\user\EntityOwnerInterface;
 use Drupal\Core\Entity\EntityChangedInterface;
 
 /**
  * Provides an interface defining a comment entity.
  */
-interface CommentInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface, EntityPublishedInterface {
+interface CommentInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface {
 
   /**
    * Comment is awaiting approval.
@@ -192,17 +191,33 @@ public function getCreatedTime();
    */
   public function setCreatedTime($created);
 
+  /**
+   * Checks if the comment is published.
+   *
+   * @return bool
+   *   TRUE if the comment is published.
+   */
+  public function isPublished();
+
   /**
    * Returns the comment's status.
    *
    * @return int
    *   One of CommentInterface::PUBLISHED or CommentInterface::NOT_PUBLISHED
-   *
-   * @deprecated in Drupal 8.3.0, will be removed before Drupal 9.0.0. Use
-   *   \Drupal\Core\Entity\EntityPublishedInterface::isPublished() instead.
    */
   public function getStatus();
 
+  /**
+   * Sets the published status of the comment entity.
+   *
+   * @param bool $status
+   *   Set to TRUE to publish the comment, FALSE to unpublish.
+   *
+   * @return \Drupal\comment\CommentInterface
+   *   The class instance that this method is called on.
+   */
+  public function setPublished($status);
+
   /**
    * Returns the alphadecimal representation of the comment's place in a thread.
    *
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index d52f04dcbb9a..a244163c59fb 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -50,8 +50,7 @@
  *     "bundle" = "comment_type",
  *     "label" = "subject",
  *     "langcode" = "langcode",
- *     "uuid" = "uuid",
- *     "published" = "status",
+ *     "uuid" = "uuid"
  *   },
  *   links = {
  *     "canonical" = "/comment/{comment}",
@@ -82,12 +81,8 @@ public function preSave(EntityStorageInterface $storage) {
     parent::preSave($storage);
 
     if (is_null($this->get('status')->value)) {
-      if (\Drupal::currentUser()->hasPermission('skip comment approval')) {
-        $this->setPublished();
-      }
-      else {
-        $this->setUnpublished();
-      }
+      $published = \Drupal::currentUser()->hasPermission('skip comment approval') ? CommentInterface::PUBLISHED : CommentInterface::NOT_PUBLISHED;
+      $this->setPublished($published);
     }
     if ($this->isNew()) {
       // Add the comment to database. This next section builds the thread field.
diff --git a/core/modules/comment/src/Tests/Update/CommentUpdateTest.php b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php
index 1bf3bdc34093..61d187d509cc 100644
--- a/core/modules/comment/src/Tests/Update/CommentUpdateTest.php
+++ b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php
@@ -50,22 +50,4 @@ public function testCommentUpdate8101() {
     $this->assertIdentical($config->get('content.comment_forum.settings.view_mode'), 'default');
   }
 
-  /**
-   * Tests that the comment entity type has a 'published' entity key.
-   *
-   * @see comment_update_8301()
-   */
-  public function testPublishedEntityKey() {
-    // Check that the 'published' entity key does not exist prior to the update.
-    $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
-    $this->assertFalse($entity_type->getKey('published'));
-
-    // Run updates.
-    $this->runUpdates();
-
-    // Check that the entity key exists and it has the correct value.
-    $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment');
-    $this->assertEqual('status', $entity_type->getKey('published'));
-  }
-
 }
diff --git a/core/modules/node/node.install b/core/modules/node/node.install
index 2751b2c14d18..720a7e039828 100644
--- a/core/modules/node/node.install
+++ b/core/modules/node/node.install
@@ -221,11 +221,6 @@ function node_update_8003() {
   }
 }
 
-/**
- * @addtogroup updates-8.3.x
- * @{
- */
-
 /**
  * Change {node_access}.fallback from an int to a tinyint as it is a boolean.
  */
@@ -239,19 +234,3 @@ function node_update_8300() {
     'size' => 'tiny',
   ]);
 }
-
-/**
- * Set the 'published' entity key.
- */
-function node_update_8301() {
-  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
-  $entity_type = $definition_update_manager->getEntityType('node');
-  $keys = $entity_type->getKeys();
-  $keys['published'] = 'status';
-  $entity_type->set('entity_keys', $keys);
-  $definition_update_manager->updateEntityType($entity_type);
-}
-
-/**
- * @} End of "addtogroup updates-8.3.x".
- */
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index f034957988ee..d4e47155e22a 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -56,7 +56,6 @@
  *     "langcode" = "langcode",
  *     "uuid" = "uuid",
  *     "status" = "status",
- *     "published" = "status",
  *     "uid" = "uid",
  *   },
  *   bundle_entity_type = "node_type",
diff --git a/core/modules/node/src/NodeInterface.php b/core/modules/node/src/NodeInterface.php
index f3bcaeada027..980dacd06fa5 100644
--- a/core/modules/node/src/NodeInterface.php
+++ b/core/modules/node/src/NodeInterface.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\node;
 
-use Drupal\Core\Entity\EntityPublishedInterface;
 use Drupal\Core\Entity\RevisionLogInterface;
 use Drupal\user\EntityOwnerInterface;
 use Drupal\Core\Entity\EntityChangedInterface;
@@ -11,7 +10,7 @@
 /**
  * Provides an interface defining a node entity.
  */
-interface NodeInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface, RevisionLogInterface, EntityPublishedInterface {
+interface NodeInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface, RevisionLogInterface {
 
   /**
    * Gets the node type.
@@ -97,6 +96,27 @@ public function isSticky();
    */
   public function setSticky($sticky);
 
+  /**
+   * Returns the node published status indicator.
+   *
+   * Unpublished nodes are only visible to their authors and to administrators.
+   *
+   * @return bool
+   *   TRUE if the node is published.
+   */
+  public function isPublished();
+
+  /**
+   * Sets the published status of a node..
+   *
+   * @param bool $published
+   *   TRUE to set this node to published, FALSE to set it to unpublished.
+   *
+   * @return \Drupal\node\NodeInterface
+   *   The called node entity.
+   */
+  public function setPublished($published);
+
   /**
    * Gets the node revision creation timestamp.
    *
diff --git a/core/modules/node/src/Tests/Update/NodeUpdateTest.php b/core/modules/node/src/Tests/Update/NodeUpdateTest.php
deleted file mode 100644
index b8b30be4f1e7..000000000000
--- a/core/modules/node/src/Tests/Update/NodeUpdateTest.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace Drupal\node\Tests\Update;
-
-use Drupal\system\Tests\Update\UpdatePathTestBase;
-
-/**
- * Tests that node settings are properly updated during database updates.
- *
- * @group node
- */
-class NodeUpdateTest extends UpdatePathTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function setDatabaseDumpFiles() {
-    $this->databaseDumpFiles = [
-      __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8-rc1.bare.standard.php.gz',
-    ];
-  }
-
-  /**
-   * Tests that the node entity type has a 'published' entity key.
-   *
-   * @see node_update_8301()
-   */
-  public function testPublishedEntityKey() {
-    // Check that the 'published' entity key does not exist prior to the update.
-    $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('node');
-    $this->assertFalse($entity_type->getKey('published'));
-
-    // Run updates.
-    $this->runUpdates();
-
-    // Check that the entity key exists and it has the correct value.
-    $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('node');
-    $this->assertEqual('status', $entity_type->getKey('published'));
-  }
-
-}
diff --git a/core/modules/rest/src/Tests/UpdateTest.php b/core/modules/rest/src/Tests/UpdateTest.php
index 4fb84b0f4904..287c2df089ed 100644
--- a/core/modules/rest/src/Tests/UpdateTest.php
+++ b/core/modules/rest/src/Tests/UpdateTest.php
@@ -311,6 +311,7 @@ public function testUpdateComment() {
     $this->pass('Test case 1: PATCH comment using JSON.');
     $comment->setSubject('Initial subject')->save();
     $read_only_fields = [
+      'status',
       'pid', // Extra compared to HAL+JSON.
       'entity_id',
       'uid',
-- 
GitLab