Mercurial > hg > cmmr2012-drupal-site
diff core/modules/field/field.post_update.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/field/field.post_update.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,84 @@ +<?php + +/** + * @file + * Post update functions for Field module. + */ + +use Drupal\Core\Entity\Entity\EntityFormDisplay; +use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\field\Entity\FieldConfig; + +/** + * Re-save all field storage config objects to add 'custom_storage' property. + */ +function field_post_update_save_custom_storage_property() { + foreach (FieldStorageConfig::loadMultiple() as $field_storage_config) { + $field_storage_config->save(); + } + + return t('All field storage configuration objects re-saved.'); +} + +/** + * Fixes the 'handler' setting for entity reference fields. + */ +function field_post_update_entity_reference_handler_setting() { + foreach (FieldConfig::loadMultiple() as $field_config) { + $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); + $item_class = 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem'; + $class = $field_type_manager->getPluginClass($field_config->getType()); + if ($class === $item_class || is_subclass_of($class, $item_class)) { + // field_field_config_presave() will fix the 'handler' setting on save. + $field_config->save(); + } + } + + return t('Selection handler for entity reference fields have been adjusted.'); +} + +/** + * Adds the 'size' setting for email widgets. + */ +function field_post_update_email_widget_size_setting() { + foreach (EntityFormDisplay::loadMultiple() as $entity_form_display) { + $changed = FALSE; + foreach ($entity_form_display->getComponents() as $name => $options) { + if (isset($options['type']) && $options['type'] === 'email_default') { + $options['settings']['size'] = '60'; + $entity_form_display->setComponent($name, $options); + $changed = TRUE; + } + } + + if ($changed) { + $entity_form_display->save(); + } + } + + return t('The new size setting for email widgets has been added.'); +} + +/** + * Remove the stale 'handler_submit' setting for entity_reference fields. + */ +function field_post_update_remove_handler_submit_setting() { + $config = \Drupal::configFactory(); + /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */ + $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); + + // Iterate on all field configs. + foreach ($config->listAll('field.field.') as $field_id) { + $field = $config->getEditable($field_id); + $class = $field_type_manager->getPluginClass($field->get('field_type')); + + // Deal only with entity reference fields and descendants. + if ($class === EntityReferenceItem::class || is_subclass_of($class, EntityReferenceItem::class)) { + if ($field->get('settings.handler_submit')) { + // Remove 'handler_settings' from settings. + $field->clear('settings.handler_submit')->save(); + } + } + } +}