diff --git a/core/modules/layout_builder/src/Controller/AddSectionController.php b/core/modules/layout_builder/src/Controller/AddSectionController.php index f4067fbe1b..d677108238 100644 --- a/core/modules/layout_builder/src/Controller/AddSectionController.php +++ b/core/modules/layout_builder/src/Controller/AddSectionController.php @@ -8,7 +8,6 @@ use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; -use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to add a new section. @@ -34,13 +33,10 @@ class AddSectionController implements ContainerInjectionInterface { * The layout tempstore repository. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver, RequestStack $request_stack) { + public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->classResolver = $class_resolver; - $this->requestStack = $request_stack; } /** @@ -49,8 +45,7 @@ public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore public static function create(ContainerInterface $container) { return new static( $container->get('layout_builder.tempstore_repository'), - $container->get('class_resolver'), - $container->get('request_stack') + $container->get('class_resolver') ); } diff --git a/core/modules/layout_builder/src/Controller/AjaxHelperTrait.php b/core/modules/layout_builder/src/Controller/AjaxHelperTrait.php index d0317570b9..072eccab35 100644 --- a/core/modules/layout_builder/src/Controller/AjaxHelperTrait.php +++ b/core/modules/layout_builder/src/Controller/AjaxHelperTrait.php @@ -20,7 +20,7 @@ * TRUE if the current request is via AJAX, FALSE otherwise. */ protected function isAjax() { - return in_array($this->getCurrentRequest()->get(MainContentViewSubscriber::WRAPPER_FORMAT), [ + return in_array($this->getRequestWrapperFormat(), [ 'drupal_ajax', 'drupal_dialog', 'drupal_dialog.off_canvas', @@ -29,13 +29,13 @@ protected function isAjax() { } /** - * Wraps the current request. + * Gets the wrapper format of the current request. * - * @return \Symfony\Component\HttpFoundation\Request - * The currently active request object. + * @string + * The wrapper format. */ - protected function getCurrentRequest() { - return \Drupal::request(); + protected function getRequestWrapperFormat() { + return \Drupal::request()->get(MainContentViewSubscriber::WRAPPER_FORMAT); } } diff --git a/core/modules/layout_builder/src/Controller/ChooseBlockController.php b/core/modules/layout_builder/src/Controller/ChooseBlockController.php index beaa5f6b29..b24f674956 100644 --- a/core/modules/layout_builder/src/Controller/ChooseBlockController.php +++ b/core/modules/layout_builder/src/Controller/ChooseBlockController.php @@ -7,7 +7,6 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to choose a new block. @@ -30,12 +29,9 @@ class ChooseBlockController implements ContainerInjectionInterface { * * @param \Drupal\Core\Block\BlockManagerInterface $block_manager * The block manager. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(BlockManagerInterface $block_manager, RequestStack $request_stack) { + public function __construct(BlockManagerInterface $block_manager) { $this->blockManager = $block_manager; - $this->requestStack = $request_stack; } /** @@ -43,8 +39,7 @@ public function __construct(BlockManagerInterface $block_manager, RequestStack $ */ public static function create(ContainerInterface $container) { return new static( - $container->get('plugin.manager.block'), - $container->get('request_stack') + $container->get('plugin.manager.block') ); } diff --git a/core/modules/layout_builder/src/Controller/ChooseSectionController.php b/core/modules/layout_builder/src/Controller/ChooseSectionController.php index 4907364dcb..0414d2abf1 100644 --- a/core/modules/layout_builder/src/Controller/ChooseSectionController.php +++ b/core/modules/layout_builder/src/Controller/ChooseSectionController.php @@ -9,7 +9,6 @@ use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to choose a new section. @@ -33,12 +32,9 @@ class ChooseSectionController implements ContainerInjectionInterface { * * @param \Drupal\Core\Layout\LayoutPluginManagerInterface $layout_manager * The layout manager. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(LayoutPluginManagerInterface $layout_manager, RequestStack $request_stack) { + public function __construct(LayoutPluginManagerInterface $layout_manager) { $this->layoutManager = $layout_manager; - $this->requestStack = $request_stack; } /** @@ -46,8 +42,7 @@ public function __construct(LayoutPluginManagerInterface $layout_manager, Reques */ public static function create(ContainerInterface $container) { return new static( - $container->get('plugin.manager.core.layout'), - $container->get('request_stack') + $container->get('plugin.manager.core.layout') ); } diff --git a/core/modules/layout_builder/src/Controller/MoveBlockController.php b/core/modules/layout_builder/src/Controller/MoveBlockController.php index e014fc5ab9..d648416d9e 100644 --- a/core/modules/layout_builder/src/Controller/MoveBlockController.php +++ b/core/modules/layout_builder/src/Controller/MoveBlockController.php @@ -7,7 +7,6 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Defines a controller to move a block. @@ -16,7 +15,6 @@ */ class MoveBlockController implements ContainerInjectionInterface { - use AjaxHelperTrait; use LayoutRebuildTrait; /** @@ -33,13 +31,10 @@ class MoveBlockController implements ContainerInjectionInterface { * The layout tempstore repository. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver, RequestStack $request_stack) { + public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->classResolver = $class_resolver; - $this->requestStack = $request_stack; } /** @@ -48,8 +43,7 @@ public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore public static function create(ContainerInterface $container) { return new static( $container->get('layout_builder.tempstore_repository'), - $container->get('class_resolver'), - $container->get('request_stack') + $container->get('class_resolver') ); } diff --git a/core/modules/layout_builder/src/Controller/LayoutRebuildFormTrait.php b/core/modules/layout_builder/src/Form/AjaxFormHelperTrait.php similarity index 55% rename from core/modules/layout_builder/src/Controller/LayoutRebuildFormTrait.php rename to core/modules/layout_builder/src/Form/AjaxFormHelperTrait.php index e6432d545e..a5a387020f 100644 --- a/core/modules/layout_builder/src/Controller/LayoutRebuildFormTrait.php +++ b/core/modules/layout_builder/src/Form/AjaxFormHelperTrait.php @@ -1,20 +1,22 @@ hasAnyErrors()) { @@ -38,9 +40,22 @@ public function ajaxSubmit(array &$form, FormStateInterface $form_state) { $response->addCommand(new ReplaceCommand('[data-drupal-selector="' . $form['#attributes']['data-drupal-selector'] . '"]', $form)); } else { - $response = $this->rebuildAndClose($this->entity); + $response = $this->successfulAjaxSubmit($form, $form_state); } return $response; } + /** + * Allows the form to respond to a successful AJAX submission. + * + * @param array $form + * An associative array containing the structure of the form. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The current state of the form. + * + * @return \Drupal\Core\Ajax\AjaxResponse + * An AJAX response. + */ + abstract protected function successfulAjaxSubmit(array $form, FormStateInterface $form_state); + } diff --git a/core/modules/layout_builder/src/Form/ConfigureBlockFormBase.php b/core/modules/layout_builder/src/Form/ConfigureBlockFormBase.php index de6b878328..7356ef4ccd 100644 --- a/core/modules/layout_builder/src/Form/ConfigureBlockFormBase.php +++ b/core/modules/layout_builder/src/Form/ConfigureBlockFormBase.php @@ -15,11 +15,10 @@ use Drupal\Core\Plugin\ContextAwarePluginInterface; use Drupal\Core\Plugin\PluginFormFactoryInterface; use Drupal\Core\Plugin\PluginWithFormsInterface; -use Drupal\layout_builder\Controller\LayoutRebuildFormTrait; +use Drupal\layout_builder\Controller\LayoutRebuildTrait; use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Drupal\layout_builder\Section; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Provides a base form for configuring a block. @@ -28,8 +27,9 @@ */ abstract class ConfigureBlockFormBase extends FormBase { + use AjaxFormHelperTrait; use ContextAwarePluginAssignmentTrait; - use LayoutRebuildFormTrait; + use LayoutRebuildTrait; /** * The plugin being configured. @@ -107,18 +107,15 @@ * The UUID generator. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. * @param \Drupal\Core\Plugin\PluginFormFactoryInterface $plugin_form_manager * The plugin form manager. */ - public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ContextRepositoryInterface $context_repository, BlockManagerInterface $block_manager, UuidInterface $uuid, ClassResolverInterface $class_resolver, RequestStack $request_stack, PluginFormFactoryInterface $plugin_form_manager) { + public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ContextRepositoryInterface $context_repository, BlockManagerInterface $block_manager, UuidInterface $uuid, ClassResolverInterface $class_resolver, PluginFormFactoryInterface $plugin_form_manager) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->contextRepository = $context_repository; $this->blockManager = $block_manager; $this->uuid = $uuid; $this->classResolver = $class_resolver; - $this->requestStack = $request_stack; $this->pluginFormFactory = $plugin_form_manager; } @@ -132,7 +129,6 @@ public static function create(ContainerInterface $container) { $container->get('plugin.manager.block'), $container->get('uuid'), $container->get('class_resolver'), - $container->get('request_stack'), $container->get('plugin_form.factory') ); } @@ -260,6 +256,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $form_state->setRedirectUrl($this->entity->toUrl('layout-builder')); } + /** + * {@inheritdoc} + */ + protected function successfulAjaxSubmit(array $form, FormStateInterface $form_state) { + return $this->rebuildAndClose($this->entity); + } + /** * Retrieves the plugin form for a given block. * diff --git a/core/modules/layout_builder/src/Form/ConfigureSectionForm.php b/core/modules/layout_builder/src/Form/ConfigureSectionForm.php index ddf1c96040..17913237d5 100644 --- a/core/modules/layout_builder/src/Form/ConfigureSectionForm.php +++ b/core/modules/layout_builder/src/Form/ConfigureSectionForm.php @@ -12,10 +12,9 @@ use Drupal\Core\Plugin\PluginFormFactoryInterface; use Drupal\Core\Plugin\PluginFormInterface; use Drupal\Core\Plugin\PluginWithFormsInterface; -use Drupal\layout_builder\Controller\LayoutRebuildFormTrait; +use Drupal\layout_builder\Controller\LayoutRebuildTrait; use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Provides a form for configuring a layout section. @@ -24,7 +23,8 @@ */ class ConfigureSectionForm extends FormBase { - use LayoutRebuildFormTrait; + use AjaxFormHelperTrait; + use LayoutRebuildTrait; /** * The layout tempstore repository. @@ -84,16 +84,13 @@ class ConfigureSectionForm extends FormBase { * The layout manager. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. * @param \Drupal\Core\Plugin\PluginFormFactoryInterface $plugin_form_manager * The plugin form manager. */ - public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, LayoutPluginManagerInterface $layout_manager, ClassResolverInterface $class_resolver, RequestStack $request_stack, PluginFormFactoryInterface $plugin_form_manager) { + public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, LayoutPluginManagerInterface $layout_manager, ClassResolverInterface $class_resolver, PluginFormFactoryInterface $plugin_form_manager) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->layoutManager = $layout_manager; $this->classResolver = $class_resolver; - $this->requestStack = $request_stack; $this->pluginFormFactory = $plugin_form_manager; } @@ -105,7 +102,6 @@ public static function create(ContainerInterface $container) { $container->get('layout_builder.tempstore_repository'), $container->get('plugin.manager.core.layout'), $container->get('class_resolver'), - $container->get('request_stack'), $container->get('plugin_form.factory') ); } @@ -189,6 +185,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $form_state->setRedirectUrl($this->entity->toUrl('layout-builder')); } + /** + * {@inheritdoc} + */ + protected function successfulAjaxSubmit(array $form, FormStateInterface $form_state) { + return $this->rebuildAndClose($this->entity); + } + /** * Retrieves the plugin form for a given layout. * diff --git a/core/modules/layout_builder/src/Form/LayoutRebuildConfirmFormBase.php b/core/modules/layout_builder/src/Form/LayoutRebuildConfirmFormBase.php index 76765edf44..9221941897 100644 --- a/core/modules/layout_builder/src/Form/LayoutRebuildConfirmFormBase.php +++ b/core/modules/layout_builder/src/Form/LayoutRebuildConfirmFormBase.php @@ -6,10 +6,9 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\ConfirmFormBase; use Drupal\Core\Form\FormStateInterface; -use Drupal\layout_builder\Controller\LayoutRebuildFormTrait; +use Drupal\layout_builder\Controller\LayoutRebuildTrait; use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\HttpFoundation\RequestStack; /** * Provides a base class for confirmation forms that rebuild the Layout Builder. @@ -18,7 +17,8 @@ */ abstract class LayoutRebuildConfirmFormBase extends ConfirmFormBase { - use LayoutRebuildFormTrait; + use AjaxFormHelperTrait; + use LayoutRebuildTrait; /** * The layout tempstore repository. @@ -48,13 +48,10 @@ * The layout tempstore repository. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. - * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack - * The request stack. */ - public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver, RequestStack $request_stack) { + public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->classResolver = $class_resolver; - $this->requestStack = $request_stack; } /** @@ -63,8 +60,7 @@ public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore public static function create(ContainerInterface $container) { return new static( $container->get('layout_builder.tempstore_repository'), - $container->get('class_resolver'), - $container->get('request_stack') + $container->get('class_resolver') ); } @@ -103,6 +99,13 @@ public function submitForm(array &$form, FormStateInterface $form_state) { $form_state->setRedirectUrl($this->getCancelUrl()); } + /** + * {@inheritdoc} + */ + protected function successfulAjaxSubmit(array $form, FormStateInterface $form_state) { + return $this->rebuildAndClose($this->entity); + } + /** * Performs any actions on the layout entity before saving. *