You are here

public function WebformBreadcrumbBuilder::build in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Breadcrumb/WebformBreadcrumbBuilder.php \Drupal\webform\Breadcrumb\WebformBreadcrumbBuilder::build()

Builds the breadcrumb.

Parameters

\Drupal\Core\Routing\RouteMatchInterface $route_match: The current route match.

Return value

\Drupal\Core\Breadcrumb\Breadcrumb A breadcrumb.

Overrides BreadcrumbBuilderInterface::build

File

src/Breadcrumb/WebformBreadcrumbBuilder.php, line 154

Class

WebformBreadcrumbBuilder
Provides a webform breadcrumb builder.

Namespace

Drupal\webform\Breadcrumb

Code

public function build(RouteMatchInterface $route_match) {
  $route_name = $route_match
    ->getRouteName();
  if ($this->type === 'webform_source_entity') {
    $source_entity = $this->requestHandler
      ->getCurrentSourceEntity([
      'webform',
      'webform_submission',
    ]);
    $entity_type = $source_entity
      ->getEntityTypeId();
    $entity_id = $source_entity
      ->id();
    $breadcrumb = new Breadcrumb();
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Home'), '<front>'));
    $breadcrumb
      ->addLink($source_entity
      ->toLink());
    if ($webform_submission = $route_match
      ->getParameter('webform_submission')) {
      if (strpos($route_match
        ->getRouteName(), 'webform.user.submission') !== FALSE) {
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Submissions'), "entity.{$entity_type}.webform.user.submissions", [
          $entity_type => $entity_id,
        ]));
      }
      elseif ($source_entity
        ->access('webform_submission_view') || $webform_submission
        ->access('view_any')) {
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Results'), "entity.{$entity_type}.webform.results_submissions", [
          $entity_type => $entity_id,
        ]));
      }
      elseif ($webform_submission
        ->access('view_own')) {
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Results'), "entity.{$entity_type}.webform.user.submissions", [
          $entity_type => $entity_id,
        ]));
      }
    }
  }
  elseif ($this->type === 'webform_help') {
    $breadcrumb = new Breadcrumb();
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Home'), '<front>'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Administration'), 'system.admin'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Help'), 'help.main'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Webform'), 'help.page', [
      'name' => 'webform',
    ]));
  }
  elseif ($this->type === 'webform_plugins_elements') {
    $breadcrumb = new Breadcrumb();
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Home'), '<front>'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Administration'), 'system.admin'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Reports'), 'system.admin_reports'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Elements'), 'webform.reports_plugins.elements'));
  }
  else {
    $breadcrumb = new Breadcrumb();
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Home'), '<front>'));
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Administration'), 'system.admin'));
    if (!$this->configFactory
      ->get('webform.settings')
      ->get('ui.toolbar_item')) {
      $breadcrumb
        ->addLink(Link::createFromRoute($this
        ->t('Structure'), 'system.admin_structure'));
    }
    $breadcrumb
      ->addLink(Link::createFromRoute($this
      ->t('Webforms'), 'entity.webform.collection'));
    switch ($this->type) {
      case 'webform_config':
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Configuration'), 'webform.config'));
        if (strpos($route_name, 'config_translation.item.') === 0 && $route_name !== 'config_translation.item.overview.webform.config') {
          $breadcrumb
            ->addLink(Link::createFromRoute($this
            ->t('Translate'), 'config_translation.item.overview.webform.config'));
        }
        break;
      case 'webform_options':
        if ($route_name !== 'entity.webform_options.collection') {
          $breadcrumb
            ->addLink(Link::createFromRoute($this
            ->t('Options'), 'entity.webform_options.collection'));
        }
        if (strpos($route_name, 'entity.webform_image_select_images') === 0) {

          // @see webform_image_select.module.
          if ($route_name !== 'entity.webform_image_select_images.collection') {
            $breadcrumb
              ->addLink(Link::createFromRoute($this
              ->t('Images'), 'entity.webform_image_select_images.collection'));
          }
        }
        elseif (strpos($route_name, 'entity.webform_options_custom') === 0) {

          // @see webform_custom_options.module.
          if ($route_name !== 'entity.webform_options_custom.collection') {
            $breadcrumb
              ->addLink(Link::createFromRoute($this
              ->t('Custom'), 'entity.webform_options_custom.collection'));
          }
        }
        break;
      case 'webform_test':
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Testing'), 'webform_test.index'));
        break;
      case 'webform_template':
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Templates'), 'entity.webform.templates'));
        break;
      case 'webform_element':

        /** @var \Drupal\webform\WebformInterface $webform */
        $webform = $route_match
          ->getParameter('webform');
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Elements'), 'entity.webform.edit_form', [
          'webform' => $webform
            ->id(),
        ]));
        break;
      case 'webform_handler':

        /** @var \Drupal\webform\WebformInterface $webform */
        $webform = $route_match
          ->getParameter('webform');
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Emails / Handlers'), 'entity.webform.handlers', [
          'webform' => $webform
            ->id(),
        ]));
        break;
      case 'webform_variant':

        /** @var \Drupal\webform\WebformInterface $webform */
        $webform = $route_match
          ->getParameter('webform');
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Variants'), 'entity.webform.variants', [
          'webform' => $webform
            ->id(),
        ]));
        break;
      case 'webform_submission':

        /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
        $webform_submission = $route_match
          ->getParameter('webform_submission');
        $webform = $webform_submission
          ->getWebform();
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        $breadcrumb
          ->addLink(Link::createFromRoute($this
          ->t('Results'), 'entity.webform.results_submissions', [
          'webform' => $webform
            ->id(),
        ]));
        break;
      case 'webform_user_submissions':
      case 'webform_user_drafts':

        /** @var \Drupal\webform\WebformInterface $webform */
        $webform = $route_match
          ->getParameter('webform');
        $breadcrumb = new Breadcrumb();
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        break;
      case 'webform_user_submission':

        /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
        $webform_submission = $route_match
          ->getParameter('webform_submission');
        $webform = $webform_submission
          ->getWebform();
        $breadcrumb = new Breadcrumb();
        $breadcrumb
          ->addLink(Link::createFromRoute($webform
          ->label(), 'entity.webform.canonical', [
          'webform' => $webform
            ->id(),
        ]));
        if ($webform_submission
          ->access('view_own')) {
          $breadcrumb
            ->addLink(Link::createFromRoute($this
            ->t('Submissions'), 'entity.webform.user.submissions', [
            'webform' => $webform
              ->id(),
          ]));
        }
        break;
    }
  }

  // This breadcrumb builder is based on a route parameter, and hence it
  // depends on the 'route' cache context.
  $breadcrumb
    ->addCacheContexts([
    'route',
  ]);
  return $breadcrumb;
}