niobi-8.x-2.0-alpha4/modules/niobi_form/modules/niobi_app/src/Breadcrumb/NiobiAppBreadcrumbBuilder.php

modules/niobi_form/modules/niobi_app/src/Breadcrumb/NiobiAppBreadcrumbBuilder.php
<?php


namespace Drupal\niobi_app\Breadcrumb;


use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\group\Entity\GroupContent;
use Drupal\niobi_app\Entity\NiobiApplication;
use Symfony\Component\HttpFoundation\Request;


class NiobiAppBreadcrumbBuilder implements BreadcrumbBuilderInterface {
  /**
   * {@inheritdoc}
   */
  public function applies(RouteMatchInterface $route_match) {
    $params = $route_match->getParameters()->all();

    // If we are on an application workflow page, we are making a breadcrumb.
    if (isset($params['niobi_application_workflow']) && !empty($params['niobi_application_workflow'])) {
      $niobi_application_workflow = \Drupal::routeMatch()->getParameter('niobi_application_workflow');
      return is_object($niobi_application_workflow);
    }

    if (isset($params['niobi_application']) && !empty($params['niobi_application'])) {
      return is_object($params['niobi_application']);
    }

    if (isset($params['niobi_form']) && !empty($params['niobi_form'])) {
      $applicationUid =  \Drupal::request()->query->get('application_id');
      if (!empty($applicationUid)) {
        $application = current(\Drupal::entityTypeManager()
          ->getStorage('niobi_application')
          ->loadByProperties(['uuid' => $applicationUid]));
        return !empty($application);
      }
    }
  }


  /**
   * {@inheritdoc}
   */
  public function build(RouteMatchInterface $route_match) {
    $breadcrumb = new Breadcrumb();
    $url = Url::fromRoute('<front>');
    $breadcrumb->addLink(Link::fromTextAndUrl('Home', $url));

    $applicationUid =  \Drupal::request()->query->get('application_id');
    if (!empty($applicationUid)) {
      $niobi_application = current(\Drupal::entityTypeManager()
        ->getStorage('niobi_application')->loadByProperties(['uuid' => $applicationUid]));
    }

    if (empty($niobi_application)) {
      /* @var $niobi_application \Drupal\niobi_app\Entity\NiobiApplication */
      $niobi_application = \Drupal::routeMatch()
        ->getParameter('niobi_application');
    }

    if (!empty($niobi_application)) {
      $niobi_application_workflow = current($niobi_application->field_application_workflow->referencedEntities());
    }

    if (!isset($niobi_application_workflow)) {
      /* @var $niobi_application_workflow \Drupal\niobi_app\Entity\NiobiApplicationWorkflow */
      $niobi_application_workflow = \Drupal::routeMatch()
        ->getParameter('niobi_application_workflow');
    }

    if (!empty($niobi_application_workflow)) {
      $gcs = GroupContent::loadByEntity($niobi_application_workflow);
    }

    if (!empty($gcs)) {
      $gc = array_shift($gcs);
      /* @var $gc \Drupal\group\Entity\GroupContent */
      $group = $gc->getGroup();
      /* @var $group \Drupal\group\Entity\Group */
      // Group members see the group. Other users see the root application page.
      $current_user = \Drupal::currentUser();
      $membership = $group->getMember($current_user);
      if ($membership) {
        $link = $group->toLink($group->label(), 'canonical');
        $breadcrumb->addLink($link);
        // Add workflow if we are on a report page.
        if($route_match->getRouteName() !== 'entity.niobi_application_workflow.canonical') {
          $workflow_link = $niobi_application_workflow->toLink($niobi_application_workflow->label(), 'canonical');
          $breadcrumb->addLink($workflow_link);
        }
      }
      else {
        $app_link = Link::createFromRoute('Applications', 'view.niobi_application_open_applications.page_1');
        $breadcrumb->addLink($app_link);
        // Add workflow if we are on a report page.
        if($route_match->getRouteName() !== 'entity.niobi_application_workflow.canonical') {
          $workflow_link = $niobi_application_workflow->toLink($niobi_application_workflow->label(), 'canonical');
          $breadcrumb->addLink($workflow_link);
        }
      }

      $breadcrumb->addCacheContexts(['group_membership.audience', 'route']);
      return $breadcrumb;
    }
    else {
      $breadcrumb->addCacheContexts(['route']);
      return $breadcrumb;
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc