You are here

layout_builder.install in Drupal 8

Contains install and update functions for Layout Builder.

File

core/modules/layout_builder/layout_builder.install
View source
<?php

/**
 * @file
 * Contains install and update functions for Layout Builder.
 */
use Drupal\Core\Cache\Cache;
use Drupal\Core\Database\Database;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\layout_builder\Section;

/**
 * Implements hook_install().
 */
function layout_builder_install() {
  $display_changed = FALSE;
  $displays = LayoutBuilderEntityViewDisplay::loadMultiple();

  /** @var \Drupal\layout_builder\Entity\LayoutEntityDisplayInterface[] $displays */
  foreach ($displays as $display) {

    // Create the first section from any existing Field Layout settings.
    $field_layout = $display
      ->getThirdPartySettings('field_layout');
    if (isset($field_layout['id'])) {
      $field_layout += [
        'settings' => [],
      ];
      $display
        ->enableLayoutBuilder()
        ->appendSection(new Section($field_layout['id'], $field_layout['settings']))
        ->save();
      $display_changed = TRUE;
    }
  }

  // Clear the rendered cache to ensure the new layout builder flow is used.
  // While in many cases the above change will not affect the rendered output,
  // the cacheability metadata will have changed and should be processed to
  // prepare for future changes.
  if ($display_changed) {
    Cache::invalidateTags([
      'rendered',
    ]);
  }
}

/**
 * Enable Layout Builder for existing entity displays.
 */
function layout_builder_update_8601(&$sandbox) {
  $config_factory = \Drupal::configFactory();
  if (!isset($sandbox['count'])) {
    $sandbox['ids'] = $config_factory
      ->listAll('core.entity_view_display.');
    $sandbox['count'] = count($sandbox['ids']);
  }
  $ids = array_splice($sandbox['ids'], 0, 50);
  foreach ($ids as $id) {
    $display = $config_factory
      ->getEditable($id);
    if ($display
      ->get('third_party_settings.layout_builder')) {
      $display
        ->set('third_party_settings.layout_builder.enabled', TRUE)
        ->save();
    }
  }
  $sandbox['#finished'] = empty($sandbox['ids']) ? 1 : ($sandbox['count'] - count($sandbox['ids'])) / $sandbox['count'];
}

/**
 * Implements hook_schema().
 */
function layout_builder_schema() {
  $schema['inline_block_usage'] = [
    'description' => 'Track where a block_content entity is used.',
    'fields' => [
      'block_content_id' => [
        'description' => 'The block_content entity ID.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
      'layout_entity_type' => [
        'description' => 'The entity type of the parent entity.',
        'type' => 'varchar_ascii',
        'length' => EntityTypeInterface::ID_MAX_LENGTH,
        'not null' => FALSE,
        'default' => '',
      ],
      'layout_entity_id' => [
        'description' => 'The ID of the parent entity.',
        'type' => 'varchar_ascii',
        'length' => 128,
        'not null' => FALSE,
        'default' => 0,
      ],
    ],
    'primary key' => [
      'block_content_id',
    ],
    'indexes' => [
      'type_id' => [
        'layout_entity_type',
        'layout_entity_id',
      ],
    ],
  ];
  return $schema;
}

/**
 * Create the 'inline_block_usage' table.
 */
function layout_builder_update_8602() {
  $inline_block_usage = [
    'description' => 'Track where a block_content entity is used.',
    'fields' => [
      'block_content_id' => [
        'description' => 'The block_content entity ID.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ],
      'layout_entity_type' => [
        'description' => 'The entity type of the parent entity.',
        'type' => 'varchar_ascii',
        'length' => EntityTypeInterface::ID_MAX_LENGTH,
        'not null' => FALSE,
        'default' => '',
      ],
      'layout_entity_id' => [
        'description' => 'The ID of the parent entity.',
        'type' => 'varchar_ascii',
        'length' => 128,
        'not null' => FALSE,
        'default' => 0,
      ],
    ],
    'primary key' => [
      'block_content_id',
    ],
    'indexes' => [
      'type_id' => [
        'layout_entity_type',
        'layout_entity_id',
      ],
    ],
  ];
  Database::getConnection()
    ->schema()
    ->createTable('inline_block_usage', $inline_block_usage);
}

Functions

Namesort descending Description
layout_builder_install Implements hook_install().
layout_builder_schema Implements hook_schema().
layout_builder_update_8601 Enable Layout Builder for existing entity displays.
layout_builder_update_8602 Create the 'inline_block_usage' table.