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