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