Skip to content

Commit 467da70

Browse files
authored
Merge pull request #42 from dof-dss/development
Unity release
2 parents 07d8263 + c8b9406 commit 467da70

File tree

5 files changed

+268
-0
lines changed

5 files changed

+268
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
namespace Drupal\unity_breadcrumbs;
4+
5+
/**
6+
* @file
7+
* Generates the breadcrumb trail for content including:
8+
* - Decision
9+
*
10+
* In the format:
11+
* > Home
12+
* > Decisions
13+
* > current-page-title
14+
*
15+
* > <front>
16+
* > /decisions
17+
* > /current-page-title
18+
*/
19+
use Drupal\Core\Breadcrumb\Breadcrumb;
20+
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
21+
use Drupal\Core\Controller\TitleResolverInterface;
22+
use Drupal\Core\Entity\EntityTypeManagerInterface;
23+
use Drupal\Core\Routing\RouteMatchInterface;
24+
use Drupal\Core\Link;
25+
use Drupal\Core\Url;
26+
use Drupal\node\NodeInterface;
27+
use Symfony\Component\DependencyInjection\ContainerInterface;
28+
use Symfony\Component\HttpFoundation\RequestStack;
29+
30+
/**
31+
* {@inheritdoc}
32+
*/
33+
class DecisionBreadcrumb implements BreadcrumbBuilderInterface {
34+
35+
/**
36+
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
37+
*/
38+
protected $entityTypeManager;
39+
40+
/**
41+
* Node object, or null if on a non-node page.
42+
*
43+
* @var \Drupal\node\Entity\Node
44+
*/
45+
protected $node;
46+
47+
/**
48+
* The title resolver.
49+
*
50+
* @var \Drupal\Core\Controller\TitleResolverInterface
51+
*/
52+
protected $titleResolver;
53+
54+
/**
55+
* RequestStack service object.
56+
*
57+
* @var \Symfony\Component\HttpFoundation\RequestStack
58+
*/
59+
protected $request;
60+
61+
/**
62+
* Class constructor.
63+
*/
64+
public function __construct(EntityTypeManagerInterface $entity_type_manager, TitleResolverInterface $title_resolver, RequestStack $request) {
65+
$this->entityTypeManager = $entity_type_manager;
66+
$this->titleResolver = $title_resolver;
67+
$this->request = $request;
68+
69+
}
70+
71+
/**
72+
* {@inheritdoc}
73+
*/
74+
public static function create(ContainerInterface $container) {
75+
return new static(
76+
$container->get('entity_type.manager'),
77+
$container->get('title_resolver'),
78+
$container->get('request_stack')
79+
);
80+
}
81+
82+
/**
83+
* {@inheritdoc}
84+
*/
85+
public function applies(RouteMatchInterface $route_match) {
86+
$match = FALSE;
87+
$route_name = $route_match->getRouteName();
88+
if ($route_name == 'entity.node.canonical') {
89+
$this->node = $route_match->getParameter('node');
90+
}
91+
92+
if ($route_name == 'entity.node.preview') {
93+
$this->node = $route_match->getParameter('node_preview');
94+
}
95+
96+
if (!empty($this->node)) {
97+
if ($this->node instanceof NodeInterface == FALSE) {
98+
$this->node = $this->entityTypeManager->getStorage('node');
99+
}
100+
101+
if ($this->node->bundle() == 'decision') {
102+
$match = TRUE;
103+
}
104+
}
105+
106+
return $match;
107+
}
108+
109+
/**
110+
* {@inheritdoc}
111+
*/
112+
public function build(RouteMatchInterface $route_match) {
113+
$breadcrumb = new Breadcrumb();
114+
$title_resolver = $this->titleResolver->getTitle($this->request->getCurrentRequest(), $route_match->getRouteObject());
115+
$links[] = Link::createFromRoute(t('Home'), '<front>');
116+
$links[] = Link::fromTextandUrl(t('Decisions'), Url::fromRoute('view.decision_search.decision_search_page'));
117+
$links[] = Link::createFromRoute($title_resolver, '<none>');
118+
$breadcrumb->setLinks($links);
119+
$breadcrumb->addCacheContexts(['url.path']);
120+
return $breadcrumb;
121+
}
122+
123+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
<?php
2+
3+
namespace Drupal\unity_breadcrumbs;
4+
5+
/**
6+
* @file
7+
* Generates the breadcrumb trail for content including:
8+
* - Decision
9+
*
10+
* In the format:
11+
* > Home
12+
* > Documents
13+
* > current-page-title
14+
*
15+
* > <front>
16+
* > /documents
17+
* > /current-page-title
18+
*/
19+
use Drupal\Core\Breadcrumb\Breadcrumb;
20+
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
21+
use Drupal\Core\Controller\TitleResolverInterface;
22+
use Drupal\Core\Entity\EntityTypeManagerInterface;
23+
use Drupal\Core\Routing\RouteMatchInterface;
24+
use Drupal\Core\Link;
25+
use Drupal\Core\Url;
26+
use Drupal\node\NodeInterface;
27+
use Symfony\Component\DependencyInjection\ContainerInterface;
28+
use Symfony\Component\HttpFoundation\RequestStack;
29+
30+
/**
31+
* {@inheritdoc}
32+
*/
33+
class DocumentBreadcrumb implements BreadcrumbBuilderInterface {
34+
35+
/**
36+
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
37+
*/
38+
protected $entityTypeManager;
39+
40+
/**
41+
* Node object, or null if on a non-node page.
42+
*
43+
* @var \Drupal\node\Entity\Node
44+
*/
45+
protected $node;
46+
47+
/**
48+
* The title resolver.
49+
*
50+
* @var \Drupal\Core\Controller\TitleResolverInterface
51+
*/
52+
protected $titleResolver;
53+
54+
/**
55+
* RequestStack service object.
56+
*
57+
* @var \Symfony\Component\HttpFoundation\RequestStack
58+
*/
59+
protected $request;
60+
61+
/**
62+
* Class constructor.
63+
*/
64+
public function __construct(EntityTypeManagerInterface $entity_type_manager, TitleResolverInterface $title_resolver, RequestStack $request) {
65+
$this->entityTypeManager = $entity_type_manager;
66+
$this->titleResolver = $title_resolver;
67+
$this->request = $request;
68+
69+
}
70+
71+
/**
72+
* {@inheritdoc}
73+
*/
74+
public static function create(ContainerInterface $container) {
75+
return new static(
76+
$container->get('entity_type.manager'),
77+
$container->get('title_resolver'),
78+
$container->get('request_stack')
79+
);
80+
}
81+
82+
/**
83+
* {@inheritdoc}
84+
*/
85+
public function applies(RouteMatchInterface $route_match) {
86+
$match = FALSE;
87+
$route_name = $route_match->getRouteName();
88+
if ($route_name == 'entity.node.canonical') {
89+
$this->node = $route_match->getParameter('node');
90+
}
91+
92+
if ($route_name == 'entity.node.preview') {
93+
$this->node = $route_match->getParameter('node_preview');
94+
}
95+
96+
if (!empty($this->node)) {
97+
if ($this->node instanceof NodeInterface == FALSE) {
98+
$this->node = $this->entityTypeManager->getStorage('node');
99+
}
100+
101+
if ($this->node->bundle() == 'document') {
102+
$match = TRUE;
103+
}
104+
}
105+
106+
return $match;
107+
}
108+
109+
/**
110+
* {@inheritdoc}
111+
*/
112+
public function build(RouteMatchInterface $route_match) {
113+
$breadcrumb = new Breadcrumb();
114+
$title_resolver = $this->titleResolver->getTitle($this->request->getCurrentRequest(), $route_match->getRouteObject());
115+
$links[] = Link::createFromRoute(t('Home'), '<front>');
116+
$links[] = Link::fromTextandUrl(t('Documents'), Url::fromRoute('view.documents_search.documents_search_page'));
117+
$links[] = Link::createFromRoute($title_resolver, '<none>');
118+
$breadcrumb->setLinks($links);
119+
$breadcrumb->addCacheContexts(['url.path']);
120+
return $breadcrumb;
121+
}
122+
123+
}

unity_breadcrumbs/src/ViewPageBreadcrumb.php

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public function applies(RouteMatchInterface $route_match) {
7070
'view.evidence_search.evidence_search_page',
7171
'view.consultations_search.consultations_search_page',
7272
'view.search.search_page',
73+
'view.documents_search.documents_search_page',
74+
'view.decision_search.decision_search_page',
7375
];
7476

7577
foreach ($view_names as $view_name) {

unity_breadcrumbs/unity_breadcrumbs.services.yml

+10
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,13 @@ services:
3434
arguments: [ '@entity_type.manager', '@title_resolver', '@request_stack' ]
3535
tags:
3636
- { name: breadcrumb_builder, priority: 100 }
37+
unity_breadcrumbs.breadcrumb.decision:
38+
class: Drupal\unity_breadcrumbs\DecisionBreadcrumb
39+
arguments: [ '@entity_type.manager', '@title_resolver', '@request_stack' ]
40+
tags:
41+
- { name: breadcrumb_builder, priority: 100 }
42+
unity_breadcrumbs.breadcrumb.document:
43+
class: Drupal\unity_breadcrumbs\DocumentBreadcrumb
44+
arguments: [ '@entity_type.manager', '@title_resolver', '@request_stack' ]
45+
tags:
46+
- { name: breadcrumb_builder, priority: 100 }

unity_search_pages/unity_search_pages.module

+10
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ function unity_search_pages_preprocess_views_view(array &$variables) {
2727
'evidence_search_page',
2828
'questions_search_page',
2929
'search_page',
30+
'decision_search_page',
31+
'documents_search_page',
3032
];
3133

3234
foreach ($display_ids as $display_id) {
@@ -85,6 +87,8 @@ function unity_search_pages_theme_suggestions_views_view_unformatted_alter(array
8587
'evidence_search_page',
8688
'questions_search_page',
8789
'search_page',
90+
'decision_search_page',
91+
'documents_search_page',
8892
];
8993

9094
foreach ($search_pages as $search_page) {
@@ -104,6 +108,8 @@ function unity_search_pages_preprocess_form(array &$variables) {
104108
case "views-exposed-form-consultations-search-consultations-search-page":
105109
case "views-exposed-form-questions-search-questions-search-page":
106110
case "views-exposed-form-evidence-search-evidence-search-page":
111+
case "views-exposed-form-decision-search-decision-search-page":
112+
case "views-exposed-form-documents-search-documents-search-page":
107113
$variables['attributes']['class'][] = Html::cleanCssIdentifier('search-form');
108114
$variables['attributes']['class'][] = Html::cleanCssIdentifier('search-form--page');
109115
break;
@@ -122,6 +128,8 @@ function unity_search_pages_preprocess_page(&$variables) {
122128
'Questions to the Chief Constable',
123129
'Evidence',
124130
'Search',
131+
'Decision',
132+
'Documents',
125133
];
126134

127135
$variables['search_page'] = in_array($variables['page']['#title'], $search_pages);
@@ -144,6 +152,8 @@ function unity_search_pages_preprocess_block(&$variables) {
144152
'consultations',
145153
'questions',
146154
'evidence',
155+
'decision',
156+
'documents',
147157
];
148158

149159
$plugin_id = $variables['plugin_id'];

0 commit comments

Comments
 (0)