Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\search\Routing;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
|
Chris@0
|
6 use Drupal\search\SearchPageRepositoryInterface;
|
Chris@0
|
7 use Symfony\Component\DependencyInjection\ContainerInterface;
|
Chris@0
|
8 use Symfony\Component\Routing\Route;
|
Chris@0
|
9
|
Chris@0
|
10 /**
|
Chris@0
|
11 * Provides dynamic routes for search.
|
Chris@0
|
12 */
|
Chris@0
|
13 class SearchPageRoutes implements ContainerInjectionInterface {
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * The search page repository.
|
Chris@0
|
17 *
|
Chris@0
|
18 * @var \Drupal\search\SearchPageRepositoryInterface
|
Chris@0
|
19 */
|
Chris@0
|
20 protected $searchPageRepository;
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * Constructs a new search route subscriber.
|
Chris@0
|
24 *
|
Chris@0
|
25 * @param \Drupal\search\SearchPageRepositoryInterface $search_page_repository
|
Chris@0
|
26 * The search page repository.
|
Chris@0
|
27 */
|
Chris@0
|
28 public function __construct(SearchPageRepositoryInterface $search_page_repository) {
|
Chris@0
|
29 $this->searchPageRepository = $search_page_repository;
|
Chris@0
|
30 }
|
Chris@0
|
31
|
Chris@0
|
32 /**
|
Chris@0
|
33 * {@inheritdoc}
|
Chris@0
|
34 */
|
Chris@0
|
35 public static function create(ContainerInterface $container) {
|
Chris@0
|
36 return new static(
|
Chris@0
|
37 $container->get('search.search_page_repository')
|
Chris@0
|
38 );
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * Returns an array of route objects.
|
Chris@0
|
43 *
|
Chris@0
|
44 * @return \Symfony\Component\Routing\Route[]
|
Chris@0
|
45 * An array of route objects.
|
Chris@0
|
46 */
|
Chris@0
|
47 public function routes() {
|
Chris@0
|
48 $routes = [];
|
Chris@0
|
49 // @todo Decide if /search should continue to redirect to /search/$default,
|
Chris@0
|
50 // or just perform the appropriate search.
|
Chris@0
|
51 if ($default_page = $this->searchPageRepository->getDefaultSearchPage()) {
|
Chris@0
|
52 $routes['search.view'] = new Route(
|
Chris@0
|
53 '/search',
|
Chris@0
|
54 [
|
Chris@0
|
55 '_controller' => 'Drupal\search\Controller\SearchController::redirectSearchPage',
|
Chris@0
|
56 '_title' => 'Search',
|
Chris@0
|
57 'entity' => $default_page,
|
Chris@0
|
58 ],
|
Chris@0
|
59 [
|
Chris@0
|
60 '_entity_access' => 'entity.view',
|
Chris@0
|
61 '_permission' => 'search content',
|
Chris@0
|
62 ],
|
Chris@0
|
63 [
|
Chris@0
|
64 'parameters' => [
|
Chris@0
|
65 'entity' => [
|
Chris@0
|
66 'type' => 'entity:search_page',
|
Chris@0
|
67 ],
|
Chris@0
|
68 ],
|
Chris@0
|
69 ]
|
Chris@0
|
70 );
|
Chris@0
|
71 }
|
Chris@0
|
72 $active_pages = $this->searchPageRepository->getActiveSearchPages();
|
Chris@0
|
73 foreach ($active_pages as $entity_id => $entity) {
|
Chris@0
|
74 $routes["search.view_$entity_id"] = new Route(
|
Chris@0
|
75 '/search/' . $entity->getPath(),
|
Chris@0
|
76 [
|
Chris@0
|
77 '_controller' => 'Drupal\search\Controller\SearchController::view',
|
Chris@0
|
78 '_title' => 'Search',
|
Chris@0
|
79 'entity' => $entity_id,
|
Chris@0
|
80 ],
|
Chris@0
|
81 [
|
Chris@0
|
82 '_entity_access' => 'entity.view',
|
Chris@0
|
83 '_permission' => 'search content',
|
Chris@0
|
84 ],
|
Chris@0
|
85 [
|
Chris@0
|
86 'parameters' => [
|
Chris@0
|
87 'entity' => [
|
Chris@0
|
88 'type' => 'entity:search_page',
|
Chris@0
|
89 ],
|
Chris@0
|
90 ],
|
Chris@0
|
91 ]
|
Chris@0
|
92 );
|
Chris@0
|
93
|
Chris@0
|
94 $routes["search.help_$entity_id"] = new Route(
|
Chris@0
|
95 '/search/' . $entity->getPath() . '/help',
|
Chris@0
|
96 [
|
Chris@0
|
97 '_controller' => 'Drupal\search\Controller\SearchController::searchHelp',
|
Chris@0
|
98 '_title' => 'Search help',
|
Chris@0
|
99 'entity' => $entity_id,
|
Chris@0
|
100 ],
|
Chris@0
|
101 [
|
Chris@0
|
102 '_entity_access' => 'entity.view',
|
Chris@0
|
103 '_permission' => 'search content',
|
Chris@0
|
104 ],
|
Chris@0
|
105 [
|
Chris@0
|
106 'parameters' => [
|
Chris@0
|
107 'entity' => [
|
Chris@0
|
108 'type' => 'entity:search_page',
|
Chris@0
|
109 ],
|
Chris@0
|
110 ],
|
Chris@0
|
111 ]
|
Chris@0
|
112 );
|
Chris@0
|
113 }
|
Chris@0
|
114 return $routes;
|
Chris@0
|
115 }
|
Chris@0
|
116
|
Chris@0
|
117 }
|