Chris@14
|
1 <?php
|
Chris@14
|
2
|
Chris@14
|
3 namespace Drupal\layout_builder\Routing;
|
Chris@14
|
4
|
Chris@14
|
5 use Drupal\Component\Utility\NestedArray;
|
Chris@14
|
6 use Drupal\layout_builder\OverridesSectionStorageInterface;
|
Chris@14
|
7 use Drupal\layout_builder\SectionStorage\SectionStorageDefinition;
|
Chris@14
|
8 use Symfony\Component\Routing\Route;
|
Chris@14
|
9 use Symfony\Component\Routing\RouteCollection;
|
Chris@14
|
10
|
Chris@14
|
11 /**
|
Chris@14
|
12 * Provides a trait for building routes for a Layout Builder UI.
|
Chris@14
|
13 *
|
Chris@14
|
14 * @internal
|
Chris@14
|
15 * Layout Builder is currently experimental and should only be leveraged by
|
Chris@14
|
16 * experimental modules and development releases of contributed modules.
|
Chris@14
|
17 * See https://www.drupal.org/core/experimental for more information.
|
Chris@14
|
18 */
|
Chris@14
|
19 trait LayoutBuilderRoutesTrait {
|
Chris@14
|
20
|
Chris@14
|
21 /**
|
Chris@14
|
22 * Builds the layout routes for the given values.
|
Chris@14
|
23 *
|
Chris@14
|
24 * @param \Symfony\Component\Routing\RouteCollection $collection
|
Chris@14
|
25 * The route collection.
|
Chris@14
|
26 * @param \Drupal\layout_builder\SectionStorage\SectionStorageDefinition $definition
|
Chris@14
|
27 * The definition of the section storage.
|
Chris@14
|
28 * @param string $path
|
Chris@14
|
29 * The path patten for the routes.
|
Chris@14
|
30 * @param array $defaults
|
Chris@14
|
31 * (optional) An array of default parameter values.
|
Chris@14
|
32 * @param array $requirements
|
Chris@14
|
33 * (optional) An array of requirements for parameters.
|
Chris@14
|
34 * @param array $options
|
Chris@14
|
35 * (optional) An array of options.
|
Chris@14
|
36 * @param string $route_name_prefix
|
Chris@14
|
37 * (optional) The prefix to use for the route name.
|
Chris@14
|
38 */
|
Chris@14
|
39 protected function buildLayoutRoutes(RouteCollection $collection, SectionStorageDefinition $definition, $path, array $defaults = [], array $requirements = [], array $options = [], $route_name_prefix = '') {
|
Chris@14
|
40 $type = $definition->id();
|
Chris@14
|
41 $defaults['section_storage_type'] = $type;
|
Chris@14
|
42 // Provide an empty value to allow the section storage to be upcast.
|
Chris@14
|
43 $defaults['section_storage'] = '';
|
Chris@14
|
44 // Trigger the layout builder access check.
|
Chris@14
|
45 $requirements['_has_layout_section'] = 'true';
|
Chris@14
|
46 // Trigger the layout builder RouteEnhancer.
|
Chris@14
|
47 $options['_layout_builder'] = TRUE;
|
Chris@14
|
48 // Trigger the layout builder param converter.
|
Chris@14
|
49 $parameters['section_storage']['layout_builder_tempstore'] = TRUE;
|
Chris@14
|
50 // Merge the passed in options in after Layout Builder's parameters.
|
Chris@14
|
51 $options = NestedArray::mergeDeep(['parameters' => $parameters], $options);
|
Chris@14
|
52
|
Chris@14
|
53 if ($route_name_prefix) {
|
Chris@14
|
54 $route_name_prefix = "layout_builder.$type.$route_name_prefix";
|
Chris@14
|
55 }
|
Chris@14
|
56 else {
|
Chris@14
|
57 $route_name_prefix = "layout_builder.$type";
|
Chris@14
|
58 }
|
Chris@14
|
59
|
Chris@14
|
60 $main_defaults = $defaults;
|
Chris@14
|
61 $main_defaults['is_rebuilding'] = FALSE;
|
Chris@14
|
62 $main_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::layout';
|
Chris@14
|
63 $main_defaults['_title_callback'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::title';
|
Chris@14
|
64 $route = (new Route($path))
|
Chris@14
|
65 ->setDefaults($main_defaults)
|
Chris@14
|
66 ->setRequirements($requirements)
|
Chris@14
|
67 ->setOptions($options);
|
Chris@14
|
68 $collection->add("$route_name_prefix.view", $route);
|
Chris@14
|
69
|
Chris@14
|
70 $save_defaults = $defaults;
|
Chris@14
|
71 $save_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::saveLayout';
|
Chris@14
|
72 $route = (new Route("$path/save"))
|
Chris@14
|
73 ->setDefaults($save_defaults)
|
Chris@14
|
74 ->setRequirements($requirements)
|
Chris@14
|
75 ->setOptions($options);
|
Chris@14
|
76 $collection->add("$route_name_prefix.save", $route);
|
Chris@14
|
77
|
Chris@14
|
78 $cancel_defaults = $defaults;
|
Chris@14
|
79 $cancel_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::cancelLayout';
|
Chris@14
|
80 $route = (new Route("$path/cancel"))
|
Chris@14
|
81 ->setDefaults($cancel_defaults)
|
Chris@14
|
82 ->setRequirements($requirements)
|
Chris@14
|
83 ->setOptions($options);
|
Chris@14
|
84 $collection->add("$route_name_prefix.cancel", $route);
|
Chris@14
|
85
|
Chris@14
|
86 if (is_subclass_of($definition->getClass(), OverridesSectionStorageInterface::class)) {
|
Chris@14
|
87 $revert_defaults = $defaults;
|
Chris@14
|
88 $revert_defaults['_form'] = '\Drupal\layout_builder\Form\RevertOverridesForm';
|
Chris@14
|
89 $route = (new Route("$path/revert"))
|
Chris@14
|
90 ->setDefaults($revert_defaults)
|
Chris@14
|
91 ->setRequirements($requirements)
|
Chris@14
|
92 ->setOptions($options);
|
Chris@14
|
93 $collection->add("$route_name_prefix.revert", $route);
|
Chris@14
|
94 }
|
Chris@14
|
95 }
|
Chris@14
|
96
|
Chris@14
|
97 }
|