diff core/modules/block_content/src/Controller/BlockContentController.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children c2387f117808
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/block_content/src/Controller/BlockContentController.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,129 @@
+<?php
+
+namespace Drupal\block_content\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\block_content\BlockContentTypeInterface;
+use Drupal\Core\Extension\ThemeHandlerInterface;
+use Drupal\Core\Url;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
+
+class BlockContentController extends ControllerBase {
+
+  /**
+   * The custom block storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $blockContentStorage;
+
+  /**
+   * The custom block type storage.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $blockContentTypeStorage;
+
+  /**
+   * The theme handler.
+   *
+   * @var \Drupal\Core\Extension\ThemeHandlerInterface
+   */
+  protected $themeHandler;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    $entity_manager = $container->get('entity.manager');
+    return new static(
+      $entity_manager->getStorage('block_content'),
+      $entity_manager->getStorage('block_content_type'),
+      $container->get('theme_handler')
+    );
+  }
+
+  /**
+   * Constructs a BlockContent object.
+   *
+   * @param \Drupal\Core\Entity\EntityStorageInterface $block_content_storage
+   *   The custom block storage.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $block_content_type_storage
+   *   The custom block type storage.
+   * @param \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler
+   *   The theme handler.
+   */
+  public function __construct(EntityStorageInterface $block_content_storage, EntityStorageInterface $block_content_type_storage, ThemeHandlerInterface $theme_handler) {
+    $this->blockContentStorage = $block_content_storage;
+    $this->blockContentTypeStorage = $block_content_type_storage;
+    $this->themeHandler = $theme_handler;
+  }
+
+  /**
+   * Displays add custom block links for available types.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request object.
+   *
+   * @return array
+   *   A render array for a list of the custom block types that can be added or
+   *   if there is only one custom block type defined for the site, the function
+   *   returns the custom block add page for that custom block type.
+   */
+  public function add(Request $request) {
+    $types = $this->blockContentTypeStorage->loadMultiple();
+    if ($types && count($types) == 1) {
+      $type = reset($types);
+      return $this->addForm($type, $request);
+    }
+    if (count($types) === 0) {
+      return [
+        '#markup' => $this->t('You have not created any block types yet. Go to the <a href=":url">block type creation page</a> to add a new block type.', [
+          ':url' => Url::fromRoute('block_content.type_add')->toString(),
+        ]),
+      ];
+    }
+
+    return ['#theme' => 'block_content_add_list', '#content' => $types];
+  }
+
+  /**
+   * Presents the custom block creation form.
+   *
+   * @param \Drupal\block_content\BlockContentTypeInterface $block_content_type
+   *   The custom block type to add.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request object.
+   *
+   * @return array
+   *   A form array as expected by drupal_render().
+   */
+  public function addForm(BlockContentTypeInterface $block_content_type, Request $request) {
+    $block = $this->blockContentStorage->create([
+      'type' => $block_content_type->id()
+    ]);
+    if (($theme = $request->query->get('theme')) && in_array($theme, array_keys($this->themeHandler->listInfo()))) {
+      // We have navigated to this page from the block library and will keep track
+      // of the theme for redirecting the user to the configuration page for the
+      // newly created block in the given theme.
+      $block->setTheme($theme);
+    }
+    return $this->entityFormBuilder()->getForm($block);
+  }
+
+  /**
+   * Provides the page title for this controller.
+   *
+   * @param \Drupal\block_content\BlockContentTypeInterface $block_content_type
+   *   The custom block type being added.
+   *
+   * @return string
+   *   The page title.
+   */
+  public function getAddFormTitle(BlockContentTypeInterface $block_content_type) {
+    return $this->t('Add %type custom block', ['%type' => $block_content_type->label()]);
+  }
+
+}