*/
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) {
$field_layout = $display->getThirdPartySettings('field_layout');
if (isset($field_layout['id'])) {
$field_layout += ['settings' => []];
- $display->appendSection(new Section($field_layout['id'], $field_layout['settings']));
- }
-
- // Sort the components by weight.
- $components = $display->get('content');
- uasort($components, 'Drupal\Component\Utility\SortArray::sortByWeightElement');
- foreach ($components as $name => $component) {
- $display->setComponent($name, $component);
+ $display
+ ->enableLayoutBuilder()
+ ->appendSection(new Section($field_layout['id'], $field_layout['settings']))
+ ->save();
+ $display_changed = TRUE;
}
- $display->save();
}
// 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.
- Cache::invalidateTags(['rendered']);
+ 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);
}