Mercurial > hg > isophonics-drupal-site
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()]); + } + +}