View source
<?php
namespace Drupal\social_activity\Plugin\views\display;
use Drupal\Core\Block\BlockManagerInterface;
use Drupal\Core\Config\ConfigFactory;
use Drupal\Core\DependencyInjection\DeprecatedServicePropertyTrait;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\Block\ViewsBlock;
use Drupal\views\Plugin\views\display\Block;
use Symfony\Component\DependencyInjection\ContainerInterface;
class ModeBlock extends Block {
use DeprecatedServicePropertyTrait;
protected $configFactory;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, BlockManagerInterface $block_manager, ConfigFactory $configFactory) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $block_manager);
$this->configFactory = $configFactory;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('plugin.manager.block'), $container
->get('config.factory'));
}
protected function defineOptions() {
$options = parent::defineOptions();
$options['view_mode'] = [
'contains' => [
'type' => [
'default' => 'type',
],
],
];
return $options;
}
public function blockSettings(array $settings) {
$settings = parent::blockSettings($settings);
$settings['type'] = 'none';
return $settings;
}
public function blockForm(ViewsBlock $block, array &$form, FormStateInterface $form_state) {
parent::blockForm($block, $form, $form_state);
$info = $form_state
->getBuildInfo();
$allow_settings = $this
->getOption('view_mode');
$block_configuration = $block
->getConfiguration();
if (in_array($info['form_id'], [
'layout_builder_add_block',
'layout_builder_update_block',
])) {
$block_configuration['type'] = 'dashboard';
}
foreach ($allow_settings as $type => $enabled) {
if (empty($enabled)) {
continue;
}
switch ($type) {
case 'type':
$form['override']['type'] = [
'#type' => 'hidden',
'#value' => $block_configuration['type'],
];
break;
}
}
return $form;
}
public function blockSubmit(ViewsBlock $block, $form, FormStateInterface $form_state) {
parent::blockSubmit($block, $form, $form_state);
if ($value = $form_state
->getValue([
'override',
'type',
])) {
$block
->setConfigurationValue('type', $value);
}
$form_state
->unsetValue([
'override',
'type',
]);
}
public function preBlockBuild(ViewsBlock $block) {
parent::preBlockBuild($block);
$block_configuration = $block
->getConfiguration();
if (isset($block_configuration['type'])) {
$this->view->filter_type = $block_configuration['type'];
}
}
}