139 lines
4.1 KiB
Plaintext
139 lines
4.1 KiB
Plaintext
<?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);
|
|
}
|