diff core/modules/layout_builder/src/Controller/LayoutBuilderController.php @ 18:af1871eacc83

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:33:08 +0100
parents 129ea1e6d783
children
line wrap: on
line diff
--- a/core/modules/layout_builder/src/Controller/LayoutBuilderController.php	Thu Feb 28 13:21:36 2019 +0000
+++ b/core/modules/layout_builder/src/Controller/LayoutBuilderController.php	Thu May 09 15:33:08 2019 +0100
@@ -2,67 +2,18 @@
 
 namespace Drupal\layout_builder\Controller;
 
-use Drupal\Core\Ajax\AjaxHelperTrait;
-use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
-use Drupal\Core\Messenger\MessengerInterface;
-use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\Core\Url;
-use Drupal\layout_builder\Context\LayoutBuilderContextTrait;
-use Drupal\layout_builder\LayoutTempstoreRepositoryInterface;
-use Drupal\layout_builder\OverridesSectionStorageInterface;
-use Drupal\layout_builder\Section;
 use Drupal\layout_builder\SectionStorageInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\RedirectResponse;
 
 /**
  * Defines a controller to provide the Layout Builder admin UI.
  *
  * @internal
+ *   Controller classes are internal.
  */
-class LayoutBuilderController implements ContainerInjectionInterface {
+class LayoutBuilderController {
 
-  use LayoutBuilderContextTrait;
   use StringTranslationTrait;
-  use AjaxHelperTrait;
-
-  /**
-   * The layout tempstore repository.
-   *
-   * @var \Drupal\layout_builder\LayoutTempstoreRepositoryInterface
-   */
-  protected $layoutTempstoreRepository;
-
-  /**
-   * The messenger service.
-   *
-   * @var \Drupal\Core\Messenger\MessengerInterface
-   */
-  protected $messenger;
-
-  /**
-   * LayoutBuilderController constructor.
-   *
-   * @param \Drupal\layout_builder\LayoutTempstoreRepositoryInterface $layout_tempstore_repository
-   *   The layout tempstore repository.
-   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
-   *   The messenger service.
-   */
-  public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, MessengerInterface $messenger) {
-    $this->layoutTempstoreRepository = $layout_tempstore_repository;
-    $this->messenger = $messenger;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('layout_builder.tempstore_repository'),
-      $container->get('messenger')
-    );
-  }
 
   /**
    * Provides a title callback.
@@ -82,259 +33,15 @@
    *
    * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
    *   The section storage.
-   * @param bool $is_rebuilding
-   *   (optional) Indicates if the layout is rebuilding, defaults to FALSE.
    *
    * @return array
    *   A render array.
    */
-  public function layout(SectionStorageInterface $section_storage, $is_rebuilding = FALSE) {
-    $this->prepareLayout($section_storage, $is_rebuilding);
-
-    $output = [];
-    if ($this->isAjax()) {
-      $output['status_messages'] = [
-        '#type' => 'status_messages',
-      ];
-    }
-    $count = 0;
-    for ($i = 0; $i < $section_storage->count(); $i++) {
-      $output[] = $this->buildAddSectionLink($section_storage, $count);
-      $output[] = $this->buildAdministrativeSection($section_storage, $count);
-      $count++;
-    }
-    $output[] = $this->buildAddSectionLink($section_storage, $count);
-    $output['#attached']['library'][] = 'layout_builder/drupal.layout_builder';
-    $output['#type'] = 'container';
-    $output['#attributes']['id'] = 'layout-builder';
-    // Mark this UI as uncacheable.
-    $output['#cache']['max-age'] = 0;
-    return $output;
-  }
-
-  /**
-   * Prepares a layout for use in the UI.
-   *
-   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
-   *   The section storage.
-   * @param bool $is_rebuilding
-   *   Indicates if the layout is rebuilding.
-   */
-  protected function prepareLayout(SectionStorageInterface $section_storage, $is_rebuilding) {
-    // If the layout has pending changes, add a warning.
-    if ($this->layoutTempstoreRepository->has($section_storage)) {
-      $this->messenger->addWarning($this->t('You have unsaved changes.'));
-    }
-
-    // Only add sections if the layout is new and empty.
-    if (!$is_rebuilding && $section_storage->count() === 0) {
-      $sections = [];
-      // If this is an empty override, copy the sections from the corresponding
-      // default.
-      if ($section_storage instanceof OverridesSectionStorageInterface) {
-        $sections = $section_storage->getDefaultSectionStorage()->getSections();
-      }
-
-      // For an empty layout, begin with a single section of one column.
-      if (!$sections) {
-        $sections[] = new Section('layout_onecol');
-      }
-
-      foreach ($sections as $section) {
-        $section_storage->appendSection($section);
-      }
-      $this->layoutTempstoreRepository->set($section_storage);
-    }
-  }
-
-  /**
-   * Builds a link to add a new section at a given delta.
-   *
-   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
-   *   The section storage.
-   * @param int $delta
-   *   The delta of the section to splice.
-   *
-   * @return array
-   *   A render array for a link.
-   */
-  protected function buildAddSectionLink(SectionStorageInterface $section_storage, $delta) {
-    $storage_type = $section_storage->getStorageType();
-    $storage_id = $section_storage->getStorageId();
+  public function layout(SectionStorageInterface $section_storage) {
     return [
-      'link' => [
-        '#type' => 'link',
-        '#title' => $this->t('Add Section'),
-        '#url' => Url::fromRoute('layout_builder.choose_section',
-          [
-            'section_storage_type' => $storage_type,
-            'section_storage' => $storage_id,
-            'delta' => $delta,
-          ],
-          [
-            'attributes' => [
-              'class' => ['use-ajax', 'new-section__link'],
-              'data-dialog-type' => 'dialog',
-              'data-dialog-renderer' => 'off_canvas',
-            ],
-          ]
-        ),
-      ],
-      '#type' => 'container',
-      '#attributes' => [
-        'class' => ['new-section'],
-      ],
+      '#type' => 'layout_builder',
+      '#section_storage' => $section_storage,
     ];
   }
 
-  /**
-   * Builds the render array for the layout section while editing.
-   *
-   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
-   *   The section storage.
-   * @param int $delta
-   *   The delta of the section.
-   *
-   * @return array
-   *   The render array for a given section.
-   */
-  protected function buildAdministrativeSection(SectionStorageInterface $section_storage, $delta) {
-    $storage_type = $section_storage->getStorageType();
-    $storage_id = $section_storage->getStorageId();
-    $section = $section_storage->getSection($delta);
-
-    $layout = $section->getLayout();
-    $build = $section->toRenderArray($this->getAvailableContexts($section_storage), TRUE);
-    $layout_definition = $layout->getPluginDefinition();
-
-    foreach ($layout_definition->getRegions() as $region => $info) {
-      if (!empty($build[$region])) {
-        foreach ($build[$region] as $uuid => $block) {
-          $build[$region][$uuid]['#attributes']['class'][] = 'draggable';
-          $build[$region][$uuid]['#attributes']['data-layout-block-uuid'] = $uuid;
-          $build[$region][$uuid]['#contextual_links'] = [
-            'layout_builder_block' => [
-              'route_parameters' => [
-                'section_storage_type' => $storage_type,
-                'section_storage' => $storage_id,
-                'delta' => $delta,
-                'region' => $region,
-                'uuid' => $uuid,
-              ],
-            ],
-          ];
-        }
-      }
-
-      $build[$region]['layout_builder_add_block']['link'] = [
-        '#type' => 'link',
-        '#title' => $this->t('Add Block'),
-        '#url' => Url::fromRoute('layout_builder.choose_block',
-          [
-            'section_storage_type' => $storage_type,
-            'section_storage' => $storage_id,
-            'delta' => $delta,
-            'region' => $region,
-          ],
-          [
-            'attributes' => [
-              'class' => ['use-ajax', 'new-block__link'],
-              'data-dialog-type' => 'dialog',
-              'data-dialog-renderer' => 'off_canvas',
-            ],
-          ]
-        ),
-      ];
-      $build[$region]['layout_builder_add_block']['#type'] = 'container';
-      $build[$region]['layout_builder_add_block']['#attributes'] = ['class' => ['new-block']];
-      $build[$region]['layout_builder_add_block']['#weight'] = 1000;
-      $build[$region]['#attributes']['data-region'] = $region;
-      $build[$region]['#attributes']['class'][] = 'layout-builder--layout__region';
-    }
-
-    $build['#attributes']['data-layout-update-url'] = Url::fromRoute('layout_builder.move_block', [
-      'section_storage_type' => $storage_type,
-      'section_storage' => $storage_id,
-    ])->toString();
-    $build['#attributes']['data-layout-delta'] = $delta;
-    $build['#attributes']['class'][] = 'layout-builder--layout';
-
-    return [
-      '#type' => 'container',
-      '#attributes' => [
-        'class' => ['layout-section'],
-      ],
-      'configure' => [
-        '#type' => 'link',
-        '#title' => $this->t('Configure section'),
-        '#access' => $layout instanceof PluginFormInterface,
-        '#url' => Url::fromRoute('layout_builder.configure_section', [
-          'section_storage_type' => $storage_type,
-          'section_storage' => $storage_id,
-          'delta' => $delta,
-        ]),
-        '#attributes' => [
-          'class' => ['use-ajax', 'configure-section'],
-          'data-dialog-type' => 'dialog',
-          'data-dialog-renderer' => 'off_canvas',
-        ],
-      ],
-      'remove' => [
-        '#type' => 'link',
-        '#title' => $this->t('Remove section <span class="visually-hidden">@section</span>', ['@section' => $delta + 1]),
-        '#url' => Url::fromRoute('layout_builder.remove_section', [
-          'section_storage_type' => $storage_type,
-          'section_storage' => $storage_id,
-          'delta' => $delta,
-        ]),
-        '#attributes' => [
-          'class' => ['use-ajax', 'remove-section'],
-          'data-dialog-type' => 'dialog',
-          'data-dialog-renderer' => 'off_canvas',
-        ],
-      ],
-      'layout-section' => $build,
-    ];
-  }
-
-  /**
-   * Saves the layout.
-   *
-   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
-   *   The section storage.
-   *
-   * @return \Symfony\Component\HttpFoundation\RedirectResponse
-   *   A redirect response.
-   */
-  public function saveLayout(SectionStorageInterface $section_storage) {
-    $section_storage->save();
-    $this->layoutTempstoreRepository->delete($section_storage);
-
-    if ($section_storage instanceof OverridesSectionStorageInterface) {
-      $this->messenger->addMessage($this->t('The layout override has been saved.'));
-    }
-    else {
-      $this->messenger->addMessage($this->t('The layout has been saved.'));
-    }
-
-    return new RedirectResponse($section_storage->getRedirectUrl()->setAbsolute()->toString());
-  }
-
-  /**
-   * Cancels the layout.
-   *
-   * @param \Drupal\layout_builder\SectionStorageInterface $section_storage
-   *   The section storage.
-   *
-   * @return \Symfony\Component\HttpFoundation\RedirectResponse
-   *   A redirect response.
-   */
-  public function cancelLayout(SectionStorageInterface $section_storage) {
-    $this->layoutTempstoreRepository->delete($section_storage);
-
-    $this->messenger->addMessage($this->t('The changes to the layout have been discarded.'));
-
-    return new RedirectResponse($section_storage->getRedirectUrl()->setAbsolute()->toString());
-  }
-
 }