You are here

block_content.post_update.php in Drupal 8

Same filename and directory in other branches
  1. 9 core/modules/block_content/block_content.post_update.php

Post update functions for Custom Block.

File

core/modules/block_content/block_content.post_update.php
View source
<?php

/**
 * @file
 * Post update functions for Custom Block.
 */
use Drupal\Core\Config\Entity\ConfigEntityUpdater;
use Drupal\Core\Entity\Sql\SqlContentEntityStorage;

/**
 * Adds a 'reusable' filter to all Custom Block views.
 */
function block_content_post_update_add_views_reusable_filter(&$sandbox = NULL) {

  // If Views is not installed, there is nothing to do.
  if (!\Drupal::moduleHandler()
    ->moduleExists('views')) {
    return;
  }
  $entity_type = \Drupal::entityTypeManager()
    ->getDefinition('block_content');
  $storage = \Drupal::entityTypeManager()
    ->getStorage('block_content');

  // If the storage class is an instance SqlContentEntityStorage we can use it
  // to determine the table to use, otherwise we have to get the table from the
  // entity type.
  if ($storage instanceof SqlContentEntityStorage) {
    $table = $entity_type
      ->isTranslatable() ? $storage
      ->getDataTable() : $storage
      ->getBaseTable();
  }
  else {
    $table = $entity_type
      ->isTranslatable() ? $entity_type
      ->getDataTable() : $entity_type
      ->getBaseTable();
  }

  // If we were not able to get a table name we can not update the views.
  if (empty($table)) {
    return;
  }
  \Drupal::classResolver(ConfigEntityUpdater::class)
    ->update($sandbox, 'view', function ($view) use ($table) {

    /** @var \Drupal\views\ViewEntityInterface $view */
    if ($view
      ->get('base_table') !== $table) {
      return FALSE;
    }
    $save_view = FALSE;
    $displays = $view
      ->get('display');
    foreach ($displays as $display_name => &$display) {

      // Update the default display and displays that have overridden filters.
      if (!isset($display['display_options']['filters']['reusable']) && ($display_name === 'default' || isset($display['display_options']['filters']))) {
        $display['display_options']['filters']['reusable'] = [
          'id' => 'reusable',
          'table' => $table,
          'field' => 'reusable',
          'relationship' => 'none',
          'group_type' => 'group',
          'admin_label' => '',
          'operator' => '=',
          'value' => '1',
          'group' => 1,
          'exposed' => FALSE,
          'expose' => [
            'operator_id' => '',
            'label' => '',
            'description' => '',
            'use_operator' => FALSE,
            'operator' => '',
            'identifier' => '',
            'required' => FALSE,
            'remember' => FALSE,
            'multiple' => FALSE,
          ],
          'is_grouped' => FALSE,
          'group_info' => [
            'label' => '',
            'description' => '',
            'identifier' => '',
            'optional' => TRUE,
            'widget' => 'select',
            'multiple' => FALSE,
            'remember' => FALSE,
            'default_group' => 'All',
            'default_group_multiple' => [],
            'group_items' => [],
          ],
          'entity_type' => 'block_content',
          'entity_field' => 'reusable',
          'plugin_id' => 'boolean',
        ];
        $save_view = TRUE;
      }
    }
    if ($save_view) {
      $view
        ->set('display', $displays);
    }
    return $save_view;
  });
}

Functions

Namesort descending Description
block_content_post_update_add_views_reusable_filter Adds a 'reusable' filter to all Custom Block views.