annotate core/modules/field/field.post_update.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /**
Chris@0 4 * @file
Chris@0 5 * Post update functions for Field module.
Chris@0 6 */
Chris@0 7
Chris@0 8 use Drupal\Core\Entity\Entity\EntityFormDisplay;
Chris@0 9 use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem;
Chris@0 10 use Drupal\field\Entity\FieldStorageConfig;
Chris@0 11 use Drupal\field\Entity\FieldConfig;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Re-save all field storage config objects to add 'custom_storage' property.
Chris@0 15 */
Chris@0 16 function field_post_update_save_custom_storage_property() {
Chris@0 17 foreach (FieldStorageConfig::loadMultiple() as $field_storage_config) {
Chris@0 18 $field_storage_config->save();
Chris@0 19 }
Chris@0 20
Chris@0 21 return t('All field storage configuration objects re-saved.');
Chris@0 22 }
Chris@0 23
Chris@0 24 /**
Chris@0 25 * Fixes the 'handler' setting for entity reference fields.
Chris@0 26 */
Chris@0 27 function field_post_update_entity_reference_handler_setting() {
Chris@0 28 foreach (FieldConfig::loadMultiple() as $field_config) {
Chris@0 29 $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
Chris@0 30 $item_class = 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem';
Chris@0 31 $class = $field_type_manager->getPluginClass($field_config->getType());
Chris@0 32 if ($class === $item_class || is_subclass_of($class, $item_class)) {
Chris@0 33 // field_field_config_presave() will fix the 'handler' setting on save.
Chris@0 34 $field_config->save();
Chris@0 35 }
Chris@0 36 }
Chris@0 37
Chris@0 38 return t('Selection handler for entity reference fields have been adjusted.');
Chris@0 39 }
Chris@0 40
Chris@0 41 /**
Chris@0 42 * Adds the 'size' setting for email widgets.
Chris@0 43 */
Chris@0 44 function field_post_update_email_widget_size_setting() {
Chris@0 45 foreach (EntityFormDisplay::loadMultiple() as $entity_form_display) {
Chris@0 46 $changed = FALSE;
Chris@0 47 foreach ($entity_form_display->getComponents() as $name => $options) {
Chris@0 48 if (isset($options['type']) && $options['type'] === 'email_default') {
Chris@0 49 $options['settings']['size'] = '60';
Chris@0 50 $entity_form_display->setComponent($name, $options);
Chris@0 51 $changed = TRUE;
Chris@0 52 }
Chris@0 53 }
Chris@0 54
Chris@0 55 if ($changed) {
Chris@0 56 $entity_form_display->save();
Chris@0 57 }
Chris@0 58 }
Chris@0 59
Chris@0 60 return t('The new size setting for email widgets has been added.');
Chris@0 61 }
Chris@0 62
Chris@0 63 /**
Chris@0 64 * Remove the stale 'handler_submit' setting for entity_reference fields.
Chris@0 65 */
Chris@0 66 function field_post_update_remove_handler_submit_setting() {
Chris@0 67 $config = \Drupal::configFactory();
Chris@0 68 /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
Chris@0 69 $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
Chris@0 70
Chris@0 71 // Iterate on all field configs.
Chris@0 72 foreach ($config->listAll('field.field.') as $field_id) {
Chris@0 73 $field = $config->getEditable($field_id);
Chris@0 74 $class = $field_type_manager->getPluginClass($field->get('field_type'));
Chris@0 75
Chris@0 76 // Deal only with entity reference fields and descendants.
Chris@0 77 if ($class === EntityReferenceItem::class || is_subclass_of($class, EntityReferenceItem::class)) {
Chris@0 78 if ($field->get('settings.handler_submit')) {
Chris@0 79 // Remove 'handler_settings' from settings.
Chris@0 80 $field->clear('settings.handler_submit')->save();
Chris@0 81 }
Chris@0 82 }
Chris@0 83 }
Chris@0 84 }