diff core/modules/comment/src/CommentBreadcrumbBuilder.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children 12f9dff5fda9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/comment/src/CommentBreadcrumbBuilder.php	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\comment;
+
+use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
+use Drupal\Core\Breadcrumb\Breadcrumb;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Link;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Class to define the comment breadcrumb builder.
+ */
+class CommentBreadcrumbBuilder implements BreadcrumbBuilderInterface {
+  use StringTranslationTrait;
+
+  /**
+   * The comment storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $storage;
+
+  /**
+   * Constructs the CommentBreadcrumbBuilder.
+   *
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(EntityManagerInterface $entity_manager) {
+    $this->storage = $entity_manager->getStorage('comment');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applies(RouteMatchInterface $route_match) {
+    return $route_match->getRouteName() == 'comment.reply' && $route_match->getParameter('entity');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(RouteMatchInterface $route_match) {
+    $breadcrumb = new Breadcrumb();
+    $breadcrumb->addCacheContexts(['route']);
+    $breadcrumb->addLink(Link::createFromRoute($this->t('Home'), '<front>'));
+
+    $entity = $route_match->getParameter('entity');
+    $breadcrumb->addLink(new Link($entity->label(), $entity->urlInfo()));
+    $breadcrumb->addCacheableDependency($entity);
+
+    if (($pid = $route_match->getParameter('pid')) && ($comment = $this->storage->load($pid))) {
+      /** @var \Drupal\comment\CommentInterface $comment */
+      $breadcrumb->addCacheableDependency($comment);
+      // Display link to parent comment.
+      // @todo Clean-up permalink in https://www.drupal.org/node/2198041
+      $breadcrumb->addLink(new Link($comment->getSubject(), $comment->urlInfo()));
+    }
+
+    return $breadcrumb;
+  }
+
+}