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 d2af11699a.
8.3.x
Alex Pott 2016-11-28 14:48:43 +00:00
parent d2af11699a
commit ee23c1875a
12 changed files with 68 additions and 196 deletions

View File

@ -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();
}

View File

@ -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 @@ trait EntityPublishedTrait {
}
/**
* {@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;
$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 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;
}
/**
* {@inheritdoc}
*/
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;
}

View File

@ -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 { }

View File

@ -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".
*/

View File

@ -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 @@ interface CommentInterface extends ContentEntityInterface, EntityChangedInterfac
*/
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.
*

View File

@ -50,8 +50,7 @@ use Drupal\user\UserInterface;
* "bundle" = "comment_type",
* "label" = "subject",
* "langcode" = "langcode",
* "uuid" = "uuid",
* "published" = "status",
* "uuid" = "uuid"
* },
* links = {
* "canonical" = "/comment/{comment}",
@ -82,12 +81,8 @@ class Comment extends ContentEntityBase implements CommentInterface {
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.

View File

@ -50,22 +50,4 @@ class CommentUpdateTest extends UpdatePathTestBase {
$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'));
}
}

View File

@ -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".
*/

View File

@ -56,7 +56,6 @@ use Drupal\user\UserInterface;
* "langcode" = "langcode",
* "uuid" = "uuid",
* "status" = "status",
* "published" = "status",
* "uid" = "uid",
* },
* bundle_entity_type = "node_type",

View File

@ -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 @@ use Drupal\Core\Entity\ContentEntityInterface;
/**
* 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 @@ interface NodeInterface extends ContentEntityInterface, EntityChangedInterface,
*/
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.
*

View File

@ -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'));
}
}

View File

@ -311,6 +311,7 @@ class UpdateTest extends RESTTestBase {
$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',