diff --git a/core/lib/Drupal/Core/Revision/RevisionControllerTrait.php b/core/lib/Drupal/Core/Revision/RevisionControllerTrait.php index edf59de..f3b6f45 100644 --- a/core/lib/Drupal/Core/Revision/RevisionControllerTrait.php +++ b/core/lib/Drupal/Core/Revision/RevisionControllerTrait.php @@ -9,6 +9,8 @@ use Drupal\Component\Utility\SafeMarkup; use Drupal\Component\Utility\Xss; use Drupal\Core\Entity\ContentEntityInterface; +use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Render\RendererInterface; use Drupal\Core\Url; use Drupal\user\EntityOwnerInterface; use Drupal\Core\Entity\EntityInterface; @@ -18,9 +20,6 @@ */ trait RevisionControllerTrait { - protected $revisionEntityType; - protected $viewControllerClass; - /** * Displays an entity revision. * @@ -31,11 +30,11 @@ * An array suitable for drupal_render(). */ public function revisionShow($revision_id) { - $entity = $this->entityManager()->getStorage($this->revisionEntityType)->loadRevision($revision_id); - $view_controller = new $this->viewControllerClass($this->entityManager, $this->renderer); + $entity = $this->entityManager()->getStorage($this->getRevisionEntityTypeId())->loadRevision($revision_id); + $view_controller = $this->getEntityViewBuilder($this->entityManager, $this->renderer); $page = $view_controller->view($entity); - if (isset($page[$this->revisionEntityType . 's'][$entity->id()]['#cache'])) { - unset($page[$this->revisionEntityType . 's'][$entity->id()]['#cache']); + if (isset($page[$this->getRevisionEntityTypeId() . 's'][$entity->id()]['#cache'])) { + unset($page[$this->getRevisionEntityTypeId() . 's'][$entity->id()]['#cache']); } return $page; } @@ -50,7 +49,7 @@ public function revisionShow($revision_id) { * The page title. */ public function revisionPageTitle($revision_id) { - $entity = $this->entityManager()->getStorage($this->revisionEntityType)->loadRevision($revision_id); + $entity = $this->entityManager()->getStorage($this->getRevisionEntityTypeId())->loadRevision($revision_id); if ($entity instanceof TimestampedRevisionInterface) { return $this->t('Revision of %title from %date', array( '%title' => $entity->label(), @@ -129,6 +128,27 @@ public function revisionPageTitle($revision_id) { abstract protected function getRevisionDetails(EntityInterface $revision, $is_current = FALSE); /** + * Gets the entity type ID for this revision controller. + * + * @return string + * Entity Type ID for this revision controller. + */ + abstract protected function getRevisionEntityTypeId(); + + /** + * Gets the entity's view controller. + * + * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager + * Entity manager. + * @param \Drupal\Core\Render\RendererInterface $renderer + * Renderer service. + * + * @return \Drupal\Core\Entity\EntityViewBuilderInterface + * A new entity view builder. + */ + abstract protected function getEntityViewBuilder(EntityManagerInterface $entity_manager, RendererInterface $renderer); + + /** * Generates an overview table of older revisions of an entity. * * @param \Drupal\Core\Entity\ContentEntityInterface $entity @@ -138,7 +158,7 @@ public function revisionPageTitle($revision_id) { * An array as expected by drupal_render(). */ public function revisionOverview(ContentEntityInterface $entity) { - $entity_storage = $this->entityManager()->getStorage($this->revisionEntityType); + $entity_storage = $this->entityManager()->getStorage($this->getRevisionEntityTypeId()); $build = array(); $build['#title'] = $this->t('Revisions for %title', array('%title' => $entity->label())); @@ -180,7 +200,7 @@ public function revisionOverview(ContentEntityInterface $entity) { } } - $build[$this->revisionEntityType . '_revisions_table'] = array( + $build[$this->getRevisionEntityTypeId() . '_revisions_table'] = array( '#theme' => 'table', '#rows' => $rows, '#header' => $header, diff --git a/core/modules/node/src/Controller/NodeController.php b/core/modules/node/src/Controller/NodeController.php index 1681d02..419126a 100644 --- a/core/modules/node/src/Controller/NodeController.php +++ b/core/modules/node/src/Controller/NodeController.php @@ -13,6 +13,7 @@ use Drupal\Core\Datetime\DateFormatter; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityManagerInterface; use Drupal\Core\Render\RendererInterface; use Drupal\Core\Revision\RevisionControllerTrait; use Drupal\Core\Url; @@ -32,16 +33,6 @@ class NodeController extends ControllerBase implements ContainerInjectionInterfa } /** - * {@inheritdoc} - */ - protected $revisionEntityType = 'node'; - - /** - * {@inheritdoc} - */ - protected $viewControllerClass = '\Drupal\node\Controller\NodeViewController'; - - /** * The date formatter service. * * @var \Drupal\Core\Datetime\DateFormatter @@ -263,4 +254,18 @@ protected function getRevisionDetails(EntityInterface $revision, $is_current = F } } + /** + * {@inheritdoc} + */ + protected function getRevisionEntityTypeId() { + return 'node'; + } + + /** + * {@inheritdoc} + */ + protected function getEntityViewBuilder(EntityManagerInterface $entity_manager, RendererInterface $renderer) { + return new NodeViewController($entity_manager, $renderer); + } + }