BlockBase.php in Display Suite 8.2
File
src/Plugin/DsField/BlockBase.php
View source
<?php
namespace Drupal\ds\Plugin\DsField;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Plugin\Context\ContextHandlerInterface;
use Drupal\Core\Plugin\Context\ContextRepositoryInterface;
use Drupal\Core\Plugin\ContextAwarePluginInterface;
use Drupal\Core\Render\Element;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Block\BlockManagerInterface;
abstract class BlockBase extends DsFieldBase implements ContainerFactoryPluginInterface {
protected $block;
protected $blockManager;
protected $contextHandler;
protected $contextRepository;
public function __construct($configuration, $plugin_id, $plugin_definition, ContextHandlerInterface $contextHandler, ContextRepositoryInterface $contextRepository, BlockManagerInterface $block_manager) {
$this->blockManager = $block_manager;
$this->contextHandler = $contextHandler;
$this->contextRepository = $contextRepository;
parent::__construct($configuration, $plugin_id, $plugin_definition);
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('context.handler'), $container
->get('context.repository'), $container
->get('plugin.manager.block'));
}
public function build() {
$block = $this
->getBlock();
$block_config = $this
->blockConfig();
$block
->setConfiguration($block_config);
if ($block
->access(\Drupal::currentUser())) {
if ($block instanceof ContextAwarePluginInterface) {
$contexts = $this->contextRepository
->getRuntimeContexts(array_values($block
->getContextMapping()));
$this->contextHandler
->applyContextMapping($block, $contexts);
}
$block_elements = $block
->build();
if ($contexts = $block
->getCacheContexts()) {
$block_elements['#cache']['contexts'] = is_array($block_elements['#cache']['contexts']) ? $block_elements['#cache']['contexts'] : [];
$block_elements['#cache']['contexts'] = array_unique(array_merge($block_elements['#cache']['contexts'], $contexts));
}
if ($tags = $block
->getCacheTags()) {
$block_elements['#cache']['tags'] = is_array($block_elements['#cache']['tags']) ? $block_elements['#cache']['tags'] : [];
$block_elements['#cache']['tags'] = array_unique(array_merge($block_elements['#cache']['tags'], $tags));
}
$block_elements['#cache']['tags'][] = 'config:ds.block_base';
if ($max_age = $block
->getCacheMaxAge()) {
$block_elements['#cache']['max-age'] = $max_age;
}
return Element::isEmpty($block_elements) ? [] : $block_elements;
}
return [];
}
protected function blockPluginId() {
return '';
}
protected function blockConfig() {
return array();
}
protected function getBlock() {
if (!$this->block) {
$block_id = $this
->blockPluginId();
$block = $this->blockManager
->createInstance($block_id);
$this->block = $block;
}
return $this->block;
}
}
Classes
Name |
Description |
BlockBase |
The base plugin to create DS block fields. |