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; }); }