comparison core/modules/layout_builder/src/Routing/LayoutBuilderRoutesTrait.php @ 14:1fec387a4317

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