123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- /**
- * @file
- * Post update functions for Layout Builder.
- */
- use Drupal\Core\Config\Entity\ConfigEntityUpdater;
- use Drupal\layout_builder\Entity\LayoutEntityDisplayInterface;
- /**
- * Rebuild plugin dependencies for all entity view displays.
- */
- function layout_builder_post_update_rebuild_plugin_dependencies(&$sandbox = NULL) {
- $storage = \Drupal::entityTypeManager()->getStorage('entity_view_display');
- if (!isset($sandbox['ids'])) {
- $sandbox['ids'] = $storage->getQuery()->accessCheck(FALSE)->execute();
- $sandbox['count'] = count($sandbox['ids']);
- }
- for ($i = 0; $i < 10 && count($sandbox['ids']); $i++) {
- $id = array_shift($sandbox['ids']);
- if ($display = $storage->load($id)) {
- $display->save();
- }
- }
- $sandbox['#finished'] = empty($sandbox['ids']) ? 1 : ($sandbox['count'] - count($sandbox['ids'])) / $sandbox['count'];
- }
- /**
- * Ensure all extra fields are properly stored on entity view displays.
- *
- * Previously
- * \Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay::setComponent()
- * was not correctly setting the configuration for extra fields. This function
- * calls setComponent() for all extra field components to ensure the updated
- * logic is invoked on all extra fields to correct the settings.
- */
- function layout_builder_post_update_add_extra_fields(&$sandbox = NULL) {
- $entity_field_manager = \Drupal::service('entity_field.manager');
- \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'entity_view_display', function (LayoutEntityDisplayInterface $display) use ($entity_field_manager) {
- if (!$display->isLayoutBuilderEnabled()) {
- return FALSE;
- }
- $extra_fields = $entity_field_manager->getExtraFields($display->getTargetEntityTypeId(), $display->getTargetBundle());
- $components = $display->getComponents();
- // Sort the components to avoid them being reordered by setComponent().
- uasort($components, 'Drupal\Component\Utility\SortArray::sortByWeightElement');
- $result = FALSE;
- foreach ($components as $name => $component) {
- if (isset($extra_fields['display'][$name])) {
- $display->setComponent($name, $component);
- $result = TRUE;
- }
- }
- return $result;
- });
- }
|