Mercurial > hg > isophonics-drupal-site
view core/modules/layout_builder/src/Controller/AddSectionController.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 1fec387a4317 |
children | af1871eacc83 |
line wrap: on
line source
<?php namespace Drupal\layout_builder\Controller; use Drupal\Core\Ajax\AjaxHelperTrait; use Drupal\Core\DependencyInjection\ClassResolverInterface; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; use Drupal\layout_builder\Section; use Drupal\layout_builder\SectionStorageInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; /** * Defines a controller to add a new section. * * @internal */ class AddSectionController implements ContainerInjectionInterface { use AjaxHelperTrait; use LayoutRebuildTrait; /** * The layout tempstore repository. * * @var \Drupal\layout_builder\LayoutTempstoreRepositoryInterface */ protected $layoutTempstoreRepository; /** * AddSectionController constructor. * * @param \Drupal\layout_builder\LayoutTempstoreRepositoryInterface $layout_tempstore_repository * The layout tempstore repository. * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver * The class resolver. */ public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver) { $this->layoutTempstoreRepository = $layout_tempstore_repository; $this->classResolver = $class_resolver; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('layout_builder.tempstore_repository'), $container->get('class_resolver') ); } /** * Adds the new section. * * @param \Drupal\layout_builder\SectionStorageInterface $section_storage * The section storage. * @param int $delta * The delta of the section to splice. * @param string $plugin_id * The plugin ID of the layout to add. * * @return \Symfony\Component\HttpFoundation\Response * The controller response. */ public function build(SectionStorageInterface $section_storage, $delta, $plugin_id) { $section_storage->insertSection($delta, new Section($plugin_id)); $this->layoutTempstoreRepository->set($section_storage); if ($this->isAjax()) { return $this->rebuildAndClose($section_storage); } else { $url = $section_storage->getLayoutBuilderUrl(); return new RedirectResponse($url->setAbsolute()->toString()); } } }