From ffb56ab09f0c1011e96207405e669c8dd4b8e74d Mon Sep 17 00:00:00 2001 From: naomi Date: Tue, 7 Jun 2022 13:07:18 +0100 Subject: [PATCH] fixed breadcrumbs so they work for ciac --- modules/opencase_cases/src/Entity/OCCase.php | 11 +++++++++++ src/Breadcrumb/BreadcrumbBuilder.php | 10 +++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/modules/opencase_cases/src/Entity/OCCase.php b/modules/opencase_cases/src/Entity/OCCase.php index dd7d468..63bc590 100644 --- a/modules/opencase_cases/src/Entity/OCCase.php +++ b/modules/opencase_cases/src/Entity/OCCase.php @@ -2,6 +2,7 @@ namespace Drupal\opencase_cases\Entity; +use Drupal\Core\Entity\ContentEntityBase; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Entity\RevisionableContentEntityBase; @@ -116,6 +117,16 @@ class OCCase extends RevisionableContentEntityBase implements OCCaseInterface else return []; } + public function getTargetEntity(): ContentEntityBase { + if (!$this->oc_target->isEmpty()) { + return $this->oc_target->entity; + } elseif ($this->hasField('client') && !$this->client->isEmpty()) { + return $this->client->entity; + } else { + throw new \Exception('No target found on case'); + } + } + /** * {@inheritdoc} */ diff --git a/src/Breadcrumb/BreadcrumbBuilder.php b/src/Breadcrumb/BreadcrumbBuilder.php index 16594b2..908e899 100644 --- a/src/Breadcrumb/BreadcrumbBuilder.php +++ b/src/Breadcrumb/BreadcrumbBuilder.php @@ -7,6 +7,7 @@ use Drupal\Core\Breadcrumb\Breadcrumb; use Drupal\opencase_cases\Entity\OCCase; use Drupal\Core\Entity\ContentEntityBase; use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\opencase_entities\Entity\OCOrganisation; use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface; class BreadcrumbBuilder implements BreadcrumbBuilderInterface { @@ -29,13 +30,20 @@ class BreadcrumbBuilder implements BreadcrumbBuilderInterface { return \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject()); } + private function addLinksForCaseTarget(ContentEntityBase $entity) { + if ($entity instanceof OCOrganisation) { + $this->addLinksForOrganisation($entity); + } + } + private function addLinksForOrganisation(ContentEntityBase $entity) { $fields = ['field_umbrella_client']; $this->addLinks($entity, $fields); } + private function addLinksForCase(OCCase $case) { $fields = ['client', 'field_project']; - $this->addLinksForOrganisation($case->get('client')->entity); + $this->addLinksForCaseTarget($case->getTargetEntity()); $this->addLinks($case, $fields); }