View source
<?php
namespace Drupal\blocktabs\Plugin\Tab;
use Drupal\Core\Block\BlockManagerInterface;
use Psr\Log\LoggerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\blocktabs\ConfigurableTabBase;
use Drupal\blocktabs\BlocktabsInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class BlockTab extends ConfigurableTabBase {
protected $blockManager;
protected $blockPlugin;
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('logger.factory')
->get('blocktabs'), $container
->get('plugin.manager.block'));
}
public function __construct(array $configuration, $plugin_id, $plugin_definition, LoggerInterface $logger, BlockManagerInterface $block_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $logger);
$config = $this->configuration['config'];
$this->blockManager = $block_manager;
$this->blockPlugin = $this->blockManager
->createInstance($this->configuration['block_id'], $config);
}
public function addTab(BlocktabsInterface $blocktabs) {
return TRUE;
}
public function getSummary() {
$summary = [
'#markup' => '(' . $this
->t('Block plugin id:') . $this->configuration['block_id'] . ')',
];
return $summary;
}
public function defaultConfiguration() {
return [
'block_id' => NULL,
'config' => [],
];
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$definitions = $this->blockManager
->getGroupedDefinitions();
$options = [];
foreach ($definitions as $group => $blocks) {
$options[$group] = [];
foreach ($blocks as $id => $block) {
$options[$group][$id] = $block['admin_label'];
}
}
$form['block_id'] = [
'#type' => 'select',
'#title' => $this
->t('Block id'),
'#options' => $options,
'#default_value' => $this->configuration['block_id'],
'#required' => TRUE,
];
if ($this->configuration['block_id']) {
$form += $this->blockPlugin
->blockForm([], $form_state);
}
return $form;
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
$this->configuration['block_id'] = $form_state
->getValue('block_id');
$this->blockPlugin
->blockSubmit($form, $form_state);
$this->configuration['config'] = $this->blockPlugin
->getConfiguration();
}
public function getContent() {
return $this->blockPlugin
->build();
}
public function getCacheContexts() {
return $this->blockPlugin
->getCacheContexts();
}
public function getCacheTags() {
return $this->blockPlugin
->getCacheTags();
}
public function getCacheMaxAge() {
return $this->blockPlugin
->getCacheMaxAge();
}
}