You are here

ModeBlock.php in Open Social 8.8

File

modules/social_features/social_activity/src/Plugin/views/display/ModeBlock.php
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;

/**
 * The plugin that handles a block.
 *
 * @ingroup views_display_plugins
 *
 * @ViewsDisplay(
 *   id = "mode_block",
 *   title = @Translation("Mode Block"),
 *   help = @Translation("Display the view as a mode block."),
 *   theme = "views_view",
 *   register_theme = FALSE,
 *   uses_hook_block = TRUE,
 *   contextual_links_locations = {"block"},
 *   admin = @Translation("Mode Block")
 * )
 *
 * @see \Drupal\views\Plugin\Block\ViewsBlock
 * @see \Drupal\views\Plugin\Derivative\ViewsBlock
 */
class ModeBlock extends Block {
  use DeprecatedServicePropertyTrait;

  /**
   * Configuration Factory.
   *
   * @var \Drupal\Core\Config\ConfigFactory
   */
  protected $configFactory;

  /**
   * Constructs a new Block instance.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity manager.
   * @param \Drupal\Core\Block\BlockManagerInterface $block_manager
   *   The block manager.
   * @param \Drupal\Core\Config\ConfigFactory $configFactory
   *   The config factory.
   */
  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;
  }

  /**
   * {@inheritdoc}
   */
  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'));
  }

  /**
   * {@inheritdoc}
   */
  protected function defineOptions() {
    $options = parent::defineOptions();
    $options['view_mode'] = [
      'contains' => [
        'type' => [
          'default' => 'type',
        ],
      ],
    ];
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function blockSettings(array $settings) {
    $settings = parent::blockSettings($settings);
    $settings['type'] = 'none';
    return $settings;
  }

  /**
   * {@inheritdoc}
   */
  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();

    // Override default view mode only for layout_builder.
    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;
  }

  /**
   * {@inheritdoc}
   */
  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',
    ]);
  }

  /**
   * {@inheritdoc}
   */
  public function preBlockBuild(ViewsBlock $block) {
    parent::preBlockBuild($block);

    // Prepare values to use it in the views filter.
    $block_configuration = $block
      ->getConfiguration();
    if (isset($block_configuration['type'])) {
      $this->view->filter_type = $block_configuration['type'];
    }
  }

}

Classes

Namesort descending Description
ModeBlock The plugin that handles a block.