X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FEntity%2FEntityViewBuilder.php;h=da1a43bc16f700ebd1d12b0d897596c3a370ab6d;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=2c3340ec54f0478080fd956b6b53f6c3dbe22fbf;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php index 2c3340ec5..da1a43bc1 100644 --- a/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/web/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -11,7 +11,7 @@ use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Render\Element; use Drupal\Core\Theme\Registry; -use Drupal\Core\TypedData\TranslatableInterface; +use Drupal\Core\TypedData\TranslatableInterface as TranslatableDataInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -52,7 +52,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf /** * The language manager. * - * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * @var \Drupal\Core\Language\LanguageManagerInterface */ protected $languageManager; @@ -66,9 +66,9 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf /** * The EntityViewDisplay objects created for individual field rendering. * - * @see \Drupal\Core\Entity\EntityViewBuilder::getSingleFieldDisplay() + * @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface[] * - * @param \Drupal\Core\Entity\Display\EntityViewDisplayInterface[] + * @see \Drupal\Core\Entity\EntityViewBuilder::getSingleFieldDisplay() */ protected $singleFieldDisplays; @@ -189,7 +189,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf 'bin' => $this->cacheBin, ]; - if ($entity instanceof TranslatableInterface && count($entity->getTranslationLanguages()) > 1) { + if ($entity instanceof TranslatableDataInterface && count($entity->getTranslationLanguages()) > 1) { $build['#cache']['keys'][] = $entity->language()->getId(); } } @@ -213,7 +213,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf * @return array * The updated renderable array. * - * @see drupal_render() + * @see \Drupal\Core\Render\RendererInterface::render() */ public function build(array $build) { $build_list = [$build]; @@ -237,7 +237,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf * @return array * The updated renderable array. * - * @see drupal_render() + * @see \Drupal\Core\Render\RendererInterface::render() */ public function buildMultiple(array $build_list) { // Build the view modes and display objects. @@ -269,6 +269,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf $this->moduleHandler()->invokeAll($view_hook, [&$build_list[$key], $entity, $display, $view_mode]); $this->moduleHandler()->invokeAll('entity_view', [&$build_list[$key], $entity, $display, $view_mode]); + $this->addContextualLinks($build_list[$key], $entity); $this->alterBuild($build_list[$key], $entity, $display, $view_mode); // Assign the weights configured in the display. @@ -324,6 +325,36 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf } } + /** + * Add contextual links. + * + * @param array $build + * The render array that is being created. + * @param \Drupal\Core\Entity\EntityInterface $entity + * The entity to be prepared. + */ + protected function addContextualLinks(array &$build, EntityInterface $entity) { + if ($entity->isNew()) { + return; + } + $key = $entity->getEntityTypeId(); + $rel = 'canonical'; + if ($entity instanceof ContentEntityInterface && !$entity->isDefaultRevision()) { + $rel = 'revision'; + $key .= '_revision'; + } + if ($entity->hasLinkTemplate($rel)) { + $build['#contextual_links'][$key] = [ + 'route_parameters' => $entity->toUrl($rel)->getRouteParameters(), + ]; + if ($entity instanceof EntityChangedInterface) { + $build['#contextual_links'][$key]['metadata'] = [ + 'changed' => $entity->getChangedTime(), + ]; + } + } + } + /** * Specific per-entity building. * @@ -337,7 +368,7 @@ class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterf * @param string $view_mode * The view mode that should be used to prepare the entity. */ - protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { } + protected function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {} /** * {@inheritdoc}