Skip to content
Snippets Groups Projects
Commit ee23c187 authored by Alex Pott's avatar Alex Pott
Browse files

Revert "Issue #2789315 by amateescu, timmillwood, claudiu.cristea, sandervd,...

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 d2af1169.
parent d2af1169
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
Showing
with 68 additions and 196 deletions
<?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();
}
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
namespace Drupal\Core\Entity; namespace Drupal\Core\Entity;
use Drupal\Core\Entity\Exception\UnsupportedEntityTypeDefinitionException;
use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\StringTranslation\TranslatableMarkup;
...@@ -18,21 +17,11 @@ trait EntityPublishedTrait { ...@@ -18,21 +17,11 @@ trait EntityPublishedTrait {
* The entity type to add the publishing status field to. * The entity type to add the publishing status field to.
* *
* @return \Drupal\Core\Field\BaseFieldDefinition[] * @return \Drupal\Core\Field\BaseFieldDefinition[]
* An array of base field definitions. * 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.
*/ */
public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity_type) { public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity_type) {
if (!is_subclass_of($entity_type->getClass(), EntityPublishedInterface::class)) { $key = $entity_type->hasKey('status') ? $entity_type->getKey('status') : 'status';
throw new UnsupportedEntityTypeDefinitionException('The entity type ' . $entity_type->id() . ' does not implement \Drupal\Core\Entity\EntityPublishedInterface.'); return [$key => BaseFieldDefinition::create('boolean')
}
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')
->setLabel(new TranslatableMarkup('Publishing status')) ->setLabel(new TranslatableMarkup('Publishing status'))
->setDescription(new TranslatableMarkup('A boolean indicating the published state.')) ->setDescription(new TranslatableMarkup('A boolean indicating the published state.'))
->setRevisionable(TRUE) ->setRevisionable(TRUE)
...@@ -41,37 +30,31 @@ public static function publishedBaseFieldDefinitions(EntityTypeInterface $entity ...@@ -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() { public function isPublished() {
$key = $this->getEntityType()->getKey('published'); $status = $this->getEntityKey('status');
return (bool) $this->get($key)->value; return (bool) (isset($status) ? $status : $this->get('status')->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;
} }
/** /**
* {@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() { public function setPublished($published) {
$key = $this->getEntityType()->getKey('published'); /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
$this->set($key, FALSE); $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; return $this;
} }
......
<?php
namespace Drupal\Core\Entity\Exception;
/**
* Defines an exception thrown when an entity type definition is invalid.
*/
class UnsupportedEntityTypeDefinitionException extends \Exception { }
...@@ -193,18 +193,6 @@ function comment_update_8300() { ...@@ -193,18 +193,6 @@ function comment_update_8300() {
\Drupal::service('entity.definition_update_manager')->updateFieldStorageDefinition($field_definitions['status']); \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". * @} End of "addtogroup updates-8.3.x".
*/ */
...@@ -3,14 +3,13 @@ ...@@ -3,14 +3,13 @@
namespace Drupal\comment; namespace Drupal\comment;
use Drupal\Core\Entity\ContentEntityInterface; use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityPublishedInterface;
use Drupal\user\EntityOwnerInterface; use Drupal\user\EntityOwnerInterface;
use Drupal\Core\Entity\EntityChangedInterface; use Drupal\Core\Entity\EntityChangedInterface;
/** /**
* Provides an interface defining a comment entity. * Provides an interface defining a comment entity.
*/ */
interface CommentInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface, EntityPublishedInterface { interface CommentInterface extends ContentEntityInterface, EntityChangedInterface, EntityOwnerInterface {
/** /**
* Comment is awaiting approval. * Comment is awaiting approval.
...@@ -192,17 +191,33 @@ public function getCreatedTime(); ...@@ -192,17 +191,33 @@ public function getCreatedTime();
*/ */
public function setCreatedTime($created); 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. * Returns the comment's status.
* *
* @return int * @return int
* One of CommentInterface::PUBLISHED or CommentInterface::NOT_PUBLISHED * 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(); 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. * Returns the alphadecimal representation of the comment's place in a thread.
* *
......
...@@ -50,8 +50,7 @@ ...@@ -50,8 +50,7 @@
* "bundle" = "comment_type", * "bundle" = "comment_type",
* "label" = "subject", * "label" = "subject",
* "langcode" = "langcode", * "langcode" = "langcode",
* "uuid" = "uuid", * "uuid" = "uuid"
* "published" = "status",
* }, * },
* links = { * links = {
* "canonical" = "/comment/{comment}", * "canonical" = "/comment/{comment}",
...@@ -82,12 +81,8 @@ public function preSave(EntityStorageInterface $storage) { ...@@ -82,12 +81,8 @@ public function preSave(EntityStorageInterface $storage) {
parent::preSave($storage); parent::preSave($storage);
if (is_null($this->get('status')->value)) { if (is_null($this->get('status')->value)) {
if (\Drupal::currentUser()->hasPermission('skip comment approval')) { $published = \Drupal::currentUser()->hasPermission('skip comment approval') ? CommentInterface::PUBLISHED : CommentInterface::NOT_PUBLISHED;
$this->setPublished(); $this->setPublished($published);
}
else {
$this->setUnpublished();
}
} }
if ($this->isNew()) { if ($this->isNew()) {
// Add the comment to database. This next section builds the thread field. // Add the comment to database. This next section builds the thread field.
......
...@@ -50,22 +50,4 @@ public function testCommentUpdate8101() { ...@@ -50,22 +50,4 @@ public function testCommentUpdate8101() {
$this->assertIdentical($config->get('content.comment_forum.settings.view_mode'), 'default'); $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'));
}
} }
...@@ -221,11 +221,6 @@ function node_update_8003() { ...@@ -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. * Change {node_access}.fallback from an int to a tinyint as it is a boolean.
*/ */
...@@ -239,19 +234,3 @@ function node_update_8300() { ...@@ -239,19 +234,3 @@ function node_update_8300() {
'size' => 'tiny', '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".
*/
...@@ -56,7 +56,6 @@ ...@@ -56,7 +56,6 @@
* "langcode" = "langcode", * "langcode" = "langcode",
* "uuid" = "uuid", * "uuid" = "uuid",
* "status" = "status", * "status" = "status",
* "published" = "status",
* "uid" = "uid", * "uid" = "uid",
* }, * },
* bundle_entity_type = "node_type", * bundle_entity_type = "node_type",
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
namespace Drupal\node; namespace Drupal\node;
use Drupal\Core\Entity\EntityPublishedInterface;
use Drupal\Core\Entity\RevisionLogInterface; use Drupal\Core\Entity\RevisionLogInterface;
use Drupal\user\EntityOwnerInterface; use Drupal\user\EntityOwnerInterface;
use Drupal\Core\Entity\EntityChangedInterface; use Drupal\Core\Entity\EntityChangedInterface;
...@@ -11,7 +10,7 @@ ...@@ -11,7 +10,7 @@
/** /**
* Provides an interface defining a node entity. * 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. * Gets the node type.
...@@ -97,6 +96,27 @@ public function isSticky(); ...@@ -97,6 +96,27 @@ public function isSticky();
*/ */
public function setSticky($sticky); 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. * Gets the node revision creation timestamp.
* *
......
<?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'));
}
}
...@@ -311,6 +311,7 @@ public function testUpdateComment() { ...@@ -311,6 +311,7 @@ public function testUpdateComment() {
$this->pass('Test case 1: PATCH comment using JSON.'); $this->pass('Test case 1: PATCH comment using JSON.');
$comment->setSubject('Initial subject')->save(); $comment->setSubject('Initial subject')->save();
$read_only_fields = [ $read_only_fields = [
'status',
'pid', // Extra compared to HAL+JSON. 'pid', // Extra compared to HAL+JSON.
'entity_id', 'entity_id',
'uid', 'uid',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment