annotate core/modules/layout_builder/src/Routing/LayoutBuilderRoutesTrait.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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@17 6 use Drupal\layout_builder\DefaultsSectionStorageInterface;
Chris@14 7 use Drupal\layout_builder\OverridesSectionStorageInterface;
Chris@14 8 use Drupal\layout_builder\SectionStorage\SectionStorageDefinition;
Chris@14 9 use Symfony\Component\Routing\Route;
Chris@14 10 use Symfony\Component\Routing\RouteCollection;
Chris@14 11
Chris@14 12 /**
Chris@14 13 * Provides a trait for building routes for a Layout Builder UI.
Chris@14 14 */
Chris@14 15 trait LayoutBuilderRoutesTrait {
Chris@14 16
Chris@14 17 /**
Chris@14 18 * Builds the layout routes for the given values.
Chris@14 19 *
Chris@14 20 * @param \Symfony\Component\Routing\RouteCollection $collection
Chris@14 21 * The route collection.
Chris@14 22 * @param \Drupal\layout_builder\SectionStorage\SectionStorageDefinition $definition
Chris@14 23 * The definition of the section storage.
Chris@14 24 * @param string $path
Chris@14 25 * The path patten for the routes.
Chris@14 26 * @param array $defaults
Chris@14 27 * (optional) An array of default parameter values.
Chris@14 28 * @param array $requirements
Chris@14 29 * (optional) An array of requirements for parameters.
Chris@14 30 * @param array $options
Chris@14 31 * (optional) An array of options.
Chris@14 32 * @param string $route_name_prefix
Chris@14 33 * (optional) The prefix to use for the route name.
Chris@18 34 * @param string $entity_type_id
Chris@18 35 * (optional) The entity type ID, if available.
Chris@14 36 */
Chris@18 37 protected function buildLayoutRoutes(RouteCollection $collection, SectionStorageDefinition $definition, $path, array $defaults = [], array $requirements = [], array $options = [], $route_name_prefix = '', $entity_type_id = '') {
Chris@14 38 $type = $definition->id();
Chris@14 39 $defaults['section_storage_type'] = $type;
Chris@14 40 // Provide an empty value to allow the section storage to be upcast.
Chris@14 41 $defaults['section_storage'] = '';
Chris@14 42 // Trigger the layout builder access check.
Chris@17 43 $requirements['_layout_builder_access'] = 'view';
Chris@14 44 // Trigger the layout builder RouteEnhancer.
Chris@14 45 $options['_layout_builder'] = TRUE;
Chris@14 46 // Trigger the layout builder param converter.
Chris@14 47 $parameters['section_storage']['layout_builder_tempstore'] = TRUE;
Chris@14 48 // Merge the passed in options in after Layout Builder's parameters.
Chris@14 49 $options = NestedArray::mergeDeep(['parameters' => $parameters], $options);
Chris@14 50
Chris@14 51 if ($route_name_prefix) {
Chris@14 52 $route_name_prefix = "layout_builder.$type.$route_name_prefix";
Chris@14 53 }
Chris@14 54 else {
Chris@14 55 $route_name_prefix = "layout_builder.$type";
Chris@14 56 }
Chris@14 57
Chris@14 58 $main_defaults = $defaults;
Chris@18 59 $main_options = $options;
Chris@18 60 if ($entity_type_id) {
Chris@18 61 $main_defaults['_entity_form'] = "$entity_type_id.layout_builder";
Chris@18 62 }
Chris@18 63 else {
Chris@18 64 $main_defaults['_controller'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::layout';
Chris@18 65 }
Chris@14 66 $main_defaults['_title_callback'] = '\Drupal\layout_builder\Controller\LayoutBuilderController::title';
Chris@14 67 $route = (new Route($path))
Chris@14 68 ->setDefaults($main_defaults)
Chris@14 69 ->setRequirements($requirements)
Chris@18 70 ->setOptions($main_options);
Chris@14 71 $collection->add("$route_name_prefix.view", $route);
Chris@14 72
Chris@18 73 $discard_changes_defaults = $defaults;
Chris@18 74 $discard_changes_defaults['_form'] = '\Drupal\layout_builder\Form\DiscardLayoutChangesForm';
Chris@18 75 $route = (new Route("$path/discard-changes"))
Chris@18 76 ->setDefaults($discard_changes_defaults)
Chris@14 77 ->setRequirements($requirements)
Chris@14 78 ->setOptions($options);
Chris@18 79 $collection->add("$route_name_prefix.discard_changes", $route);
Chris@14 80
Chris@14 81 if (is_subclass_of($definition->getClass(), OverridesSectionStorageInterface::class)) {
Chris@14 82 $revert_defaults = $defaults;
Chris@14 83 $revert_defaults['_form'] = '\Drupal\layout_builder\Form\RevertOverridesForm';
Chris@14 84 $route = (new Route("$path/revert"))
Chris@14 85 ->setDefaults($revert_defaults)
Chris@14 86 ->setRequirements($requirements)
Chris@14 87 ->setOptions($options);
Chris@14 88 $collection->add("$route_name_prefix.revert", $route);
Chris@14 89 }
Chris@17 90 elseif (is_subclass_of($definition->getClass(), DefaultsSectionStorageInterface::class)) {
Chris@17 91 $disable_defaults = $defaults;
Chris@17 92 $disable_defaults['_form'] = '\Drupal\layout_builder\Form\LayoutBuilderDisableForm';
Chris@17 93 $disable_options = $options;
Chris@17 94 unset($disable_options['_admin_route'], $disable_options['_layout_builder']);
Chris@17 95 $route = (new Route("$path/disable"))
Chris@17 96 ->setDefaults($disable_defaults)
Chris@17 97 ->setRequirements($requirements)
Chris@17 98 ->setOptions($disable_options);
Chris@17 99 $collection->add("$route_name_prefix.disable", $route);
Chris@17 100 }
Chris@14 101 }
Chris@14 102
Chris@14 103 }