layout_builder.install

Same filename in other branches
  1. 9 core/modules/layout_builder/layout_builder.install
  2. 10 core/modules/layout_builder/layout_builder.install
  3. 11.x core/modules/layout_builder/layout_builder.install

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

Title Deprecated Summary
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.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.