ConfigureSectionController.php in Layout Builder UX 8
File
src/Controller/ConfigureSectionController.php
View source
<?php
namespace Drupal\lb_ux\Controller;
use Drupal\Core\Ajax\AjaxHelperTrait;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Form\FormState;
use Drupal\Core\Layout\LayoutPluginManagerInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\layout_builder\Controller\LayoutRebuildTrait;
use Drupal\layout_builder\Form\ConfigureSectionForm;
use Drupal\layout_builder\LayoutTempstoreRepositoryInterface;
use Drupal\layout_builder\SectionStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
class ConfigureSectionController implements ContainerInjectionInterface {
use AjaxHelperTrait;
use LayoutRebuildTrait;
use StringTranslationTrait;
protected $layoutTempstoreRepository;
protected $layoutPluginManager;
protected $formBuilder;
protected $messenger;
public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, LayoutPluginManagerInterface $layout_plugin_manager, FormBuilderInterface $form_builder, MessengerInterface $messenger) {
$this->layoutTempstoreRepository = $layout_tempstore_repository;
$this->formBuilder = $form_builder;
$this->messenger = $messenger;
$this->layoutPluginManager = $layout_plugin_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('layout_builder.tempstore_repository'), $container
->get('plugin.manager.core.layout'), $container
->get('form_builder'), $container
->get('messenger'));
}
public function build(SectionStorageInterface $section_storage, $delta, $plugin_id) {
$old_messages_by_type = $this->messenger
->all();
$form_state = new FormState();
$form_state
->addBuildInfo('args', func_get_args());
$this->formBuilder
->submitForm(ConfigureSectionForm::class, $form_state);
$this->messenger
->deleteAll();
foreach ($old_messages_by_type as $type => $old_messages) {
foreach ($old_messages as $old_message) {
$this->messenger
->addMessage($old_message, $type);
}
}
if (FormState::hasAnyErrors()) {
$form_state
->clearErrors();
$form_state = new FormState();
$form_state
->addBuildInfo('args', func_get_args());
return $this->formBuilder
->buildForm(ConfigureSectionForm::class, $form_state);
}
if ($this
->isAjax()) {
return $this
->rebuildAndClose($section_storage);
}
else {
$url = $section_storage
->getLayoutBuilderUrl();
return new RedirectResponse($url
->setAbsolute()
->toString());
}
}
public function title(SectionStorageInterface $section_storage, $delta, $plugin_id) {
if (is_null($plugin_id)) {
$layout_definition = $section_storage
->getSection($delta)
->getLayout()
->getPluginDefinition();
}
else {
$layout_definition = $this->layoutPluginManager
->getDefinition($plugin_id);
}
return $this
->t('Configure @label section', [
'@label' => $layout_definition
->getLabel(),
]);
}
}