Mercurial > hg > isophonics-drupal-site
view core/modules/layout_builder/layout_builder.post_update.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 1fec387a4317 |
children | af1871eacc83 |
line wrap: on
line source
<?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; }); }