Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
173 / 173 |
|
100.00% |
7 / 7 |
CRAP | n/a |
0 / 0 |
|
| name_post_update_create_name_list_format | |
100.00% |
22 / 22 |
|
100.00% |
1 / 1 |
3 | |||
| name_post_update_formatter_settings | |
100.00% |
27 / 27 |
|
100.00% |
1 / 1 |
7 | |||
| name_post_update_formatter_settings_link_and_external_sources | |
100.00% |
31 / 31 |
|
100.00% |
1 / 1 |
9 | |||
| name_post_update_field_settings_merge | |
100.00% |
16 / 16 |
|
100.00% |
1 / 1 |
3 | |||
| name_post_update_field_settings_remove_inline_css | |
100.00% |
20 / 20 |
|
100.00% |
1 / 1 |
4 | |||
| name_post_update_add_wrapper_type_to_name_widget | |
100.00% |
24 / 24 |
|
100.00% |
1 / 1 |
7 | |||
| name_post_update_add_autocomplete_match_settings | |
100.00% |
33 / 33 |
|
100.00% |
1 / 1 |
8 | |||
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * @file |
| 5 | * Post update functions for Name. |
| 6 | */ |
| 7 | |
| 8 | declare(strict_types=1); |
| 9 | |
| 10 | /** |
| 11 | * Adds the default list format. |
| 12 | */ |
| 13 | function name_post_update_create_name_list_format() { |
| 14 | /** @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface $name_list_format_storage */ |
| 15 | $name_list_format_storage = \Drupal::entityTypeManager()->getStorage('name_list_format'); |
| 16 | |
| 17 | $default_list = $name_list_format_storage->load('default'); |
| 18 | if ($default_list) { |
| 19 | if (!$default_list->locked) { |
| 20 | $default_list->locked = TRUE; |
| 21 | $default_list->save(); |
| 22 | $message = t('Default name list format was set to locked.'); |
| 23 | } |
| 24 | else { |
| 25 | $message = t('Nothing required to action.'); |
| 26 | } |
| 27 | } |
| 28 | else { |
| 29 | $name_list_format = $name_list_format_storage->create([ |
| 30 | 'id' => 'default', |
| 31 | 'label' => 'Default', |
| 32 | 'locked' => TRUE, |
| 33 | 'status' => TRUE, |
| 34 | 'delimiter' => ', ', |
| 35 | 'and' => 'text', |
| 36 | 'delimiter_precedes_last' => 'never', |
| 37 | 'el_al_min' => 3, |
| 38 | 'el_al_first' => 1, |
| 39 | ]); |
| 40 | $name_list_format->save(); |
| 41 | $message = t('Default name list format was added.'); |
| 42 | } |
| 43 | |
| 44 | return $message; |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * Corrects the field formatter settings for new name list type settings. |
| 49 | */ |
| 50 | function name_post_update_formatter_settings() { |
| 51 | $field_storage_configs = \Drupal::entityTypeManager() |
| 52 | ->getStorage('field_storage_config') |
| 53 | ->loadByProperties(['type' => 'name']); |
| 54 | $default_settings = [ |
| 55 | "format" => "default", |
| 56 | "markup" => FALSE, |
| 57 | "output" => "default", |
| 58 | "list_format" => "default", |
| 59 | ]; |
| 60 | |
| 61 | foreach ($field_storage_configs as $field_storage) { |
| 62 | $field_name = $field_storage->getName(); |
| 63 | $fields = \Drupal::entityTypeManager() |
| 64 | ->getStorage('field_config') |
| 65 | ->loadByProperties(['field_name' => $field_name]); |
| 66 | foreach ($fields as $field) { |
| 67 | $properties = [ |
| 68 | 'targetEntityType' => $field->getTargetEntityTypeId(), |
| 69 | 'bundle' => $field->getTargetBundle(), |
| 70 | ]; |
| 71 | $view_displays = \Drupal::entityTypeManager() |
| 72 | ->getStorage('entity_view_display') |
| 73 | ->loadByProperties($properties); |
| 74 | foreach ($view_displays as $view_display) { |
| 75 | if ($component = $view_display->getComponent($field_name)) { |
| 76 | $settings = (array) $component['settings']; |
| 77 | $settings['list_format'] = isset($settings['multiple']) && $settings['multiple'] == 'default' ? '' : 'default'; |
| 78 | $settings = array_intersect_key($settings, $default_settings); |
| 79 | $settings += $default_settings; |
| 80 | $view_display->setComponent($field_name, [ |
| 81 | 'type' => 'name_default', |
| 82 | 'settings' => $settings, |
| 83 | ] + $component)->save(); |
| 84 | } |
| 85 | } |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | return t('New name list formatter settings are implemented. Please review any name display settings that used inline lists.'); |
| 90 | } |
| 91 | |
| 92 | /** |
| 93 | * Updates the field formatter settings. |
| 94 | * |
| 95 | * Adds new link and alternative data sources settings. |
| 96 | */ |
| 97 | function name_post_update_formatter_settings_link_and_external_sources() { |
| 98 | $new_settings = [ |
| 99 | "format" => "default", |
| 100 | "markup" => "none", |
| 101 | "list_format" => "", |
| 102 | "link_target" => "", |
| 103 | "preferred_field_reference" => "", |
| 104 | "preferred_field_reference_separator" => ", ", |
| 105 | "alternative_field_reference" => "", |
| 106 | "alternative_field_reference_separator" => ", ", |
| 107 | ]; |
| 108 | $field_storage_configs = \Drupal::entityTypeManager() |
| 109 | ->getStorage('field_storage_config') |
| 110 | ->loadByProperties(['type' => 'name']); |
| 111 | foreach ($field_storage_configs as $field_storage) { |
| 112 | $field_name = $field_storage->getName(); |
| 113 | $fields = \Drupal::entityTypeManager() |
| 114 | ->getStorage('field_config') |
| 115 | ->loadByProperties(['field_name' => $field_name]); |
| 116 | foreach ($fields as $field) { |
| 117 | $properties = [ |
| 118 | 'targetEntityType' => $field->getTargetEntityTypeId(), |
| 119 | 'bundle' => $field->getTargetBundle(), |
| 120 | ]; |
| 121 | $view_displays = \Drupal::entityTypeManager() |
| 122 | ->getStorage('entity_view_display') |
| 123 | ->loadByProperties($properties); |
| 124 | foreach ($view_displays as $view_display) { |
| 125 | /** @var \Drupal\Core\Entity\Entity\EntityViewDisplay $view_display */ |
| 126 | if ($component = $view_display->getComponent($field_name)) { |
| 127 | $settings = (array) $component['settings']; |
| 128 | $markup_needs_migration = ( |
| 129 | empty($settings['markup']) || $settings['markup'] == '1' |
| 130 | ); |
| 131 | if ($markup_needs_migration) { |
| 132 | $settings['markup'] = empty($settings['markup']) ? 'none' : 'simple'; |
| 133 | } |
| 134 | if (isset($settings['output'])) { |
| 135 | unset($settings['output']); |
| 136 | } |
| 137 | $settings += $new_settings; |
| 138 | $view_display->setComponent($field_name, [ |
| 139 | 'type' => 'name_default', |
| 140 | 'settings' => $settings, |
| 141 | ] + $component)->save(); |
| 142 | } |
| 143 | } |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | /** |
| 149 | * Merges the custom field and storage settings together. |
| 150 | */ |
| 151 | function name_post_update_field_settings_merge() { |
| 152 | $merged_fields = [ |
| 153 | 'components', |
| 154 | 'minimum_components', |
| 155 | 'max_length', |
| 156 | 'labels', |
| 157 | 'allow_family_or_given', |
| 158 | 'autocomplete_source', |
| 159 | 'autocomplete_separator', |
| 160 | 'title_options', |
| 161 | 'generational_options', |
| 162 | 'sort_options', |
| 163 | ]; |
| 164 | $merged_fields = array_combine($merged_fields, $merged_fields); |
| 165 | |
| 166 | $field_storage_configs = \Drupal::entityTypeManager() |
| 167 | ->getStorage('field_storage_config') |
| 168 | ->loadByProperties(['type' => 'name']); |
| 169 | foreach ($field_storage_configs as $field_storage) { |
| 170 | /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ |
| 171 | $storage_settings = $field_storage->getSettings(); |
| 172 | $merged_settings = array_intersect_key($storage_settings, $merged_fields); |
| 173 | $field_name = $field_storage->getName(); |
| 174 | $fields = \Drupal::entityTypeManager() |
| 175 | ->getStorage('field_config') |
| 176 | ->loadByProperties(['field_name' => $field_name]); |
| 177 | foreach ($fields as $field) { |
| 178 | /** @var \Drupal\field\Entity\FieldConfig $field */ |
| 179 | $field_settings = $field->getSettings(); |
| 180 | $field_settings += $merged_settings; |
| 181 | $field->setSettings($field_settings)->save(); |
| 182 | } |
| 183 | $storage_settings = array_diff_key($storage_settings, $merged_fields); |
| 184 | $field_storage->setSettings($storage_settings)->save(); |
| 185 | } |
| 186 | } |
| 187 | |
| 188 | /** |
| 189 | * Removes the inline CSS settings and sets the widget layout. |
| 190 | */ |
| 191 | function name_post_update_field_settings_remove_inline_css() { |
| 192 | $field_storage_configs = \Drupal::entityTypeManager() |
| 193 | ->getStorage('field_storage_config') |
| 194 | ->loadByProperties(['type' => 'name']); |
| 195 | foreach ($field_storage_configs as $field_storage) { |
| 196 | /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ |
| 197 | $field_name = $field_storage->getName(); |
| 198 | $fields = \Drupal::entityTypeManager() |
| 199 | ->getStorage('field_config') |
| 200 | ->loadByProperties(['field_name' => $field_name]); |
| 201 | foreach ($fields as $field) { |
| 202 | /** @var \Drupal\field\Entity\FieldConfig $field */ |
| 203 | $field_settings = $field->getSettings(); |
| 204 | unset($field_settings['inline_css']); |
| 205 | unset($field_settings['component_css']); |
| 206 | if (empty($field_settings['widget_layout'])) { |
| 207 | $field_settings['widget_layout'] = 'stacked'; |
| 208 | } |
| 209 | $field->setSettings($field_settings)->save(); |
| 210 | } |
| 211 | } |
| 212 | |
| 213 | \Drupal::service('config.factory')->getEditable('name.settings') |
| 214 | ->clear('element_wrapper') |
| 215 | ->clear('inline_styles') |
| 216 | ->clear('inline_styles_rtl') |
| 217 | ->save(); |
| 218 | } |
| 219 | |
| 220 | /** |
| 221 | * Sets missing Name widget wrapper settings to container. |
| 222 | */ |
| 223 | function name_post_update_add_wrapper_type_to_name_widget() { |
| 224 | $config_storage = \Drupal::service('config.storage'); |
| 225 | $config_factory = \Drupal::service('config.factory'); |
| 226 | $updated_count = 0; |
| 227 | |
| 228 | foreach ($config_storage->listAll('core.entity_form_display.') as $config_name) { |
| 229 | $display_config = $config_factory->getEditable($config_name); |
| 230 | $content = (array) $display_config->get('content'); |
| 231 | $changed = FALSE; |
| 232 | foreach ($content as $field_name => $component) { |
| 233 | if (($component['type'] ?? '') !== 'name_default') { |
| 234 | continue; |
| 235 | } |
| 236 | $settings = (array) ($component['settings'] ?? []); |
| 237 | $wrapper_type_is_missing = ( |
| 238 | !isset($settings['wrapper_type']) || $settings['wrapper_type'] === '' |
| 239 | ); |
| 240 | if ($wrapper_type_is_missing) { |
| 241 | $settings['wrapper_type'] = 'container'; |
| 242 | $component['settings'] = $settings; |
| 243 | $content[$field_name] = $component; |
| 244 | $changed = TRUE; |
| 245 | } |
| 246 | } |
| 247 | if ($changed) { |
| 248 | $display_config->set('content', $content)->save(); |
| 249 | $updated_count += 1; |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | return t('Updated @count form displays with name wrapper settings.', [ |
| 254 | '@count' => $updated_count, |
| 255 | ]); |
| 256 | } |
| 257 | |
| 258 | /** |
| 259 | * Adds autocomplete match settings to legacy Name field configurations. |
| 260 | */ |
| 261 | function name_post_update_add_autocomplete_match_settings() { |
| 262 | $components = [ |
| 263 | 'title', |
| 264 | 'given', |
| 265 | 'middle', |
| 266 | 'family', |
| 267 | 'generational', |
| 268 | 'credentials', |
| 269 | ]; |
| 270 | $default_overrides = array_fill_keys($components, ''); |
| 271 | $updated_count = 0; |
| 272 | |
| 273 | $field_storage_configs = \Drupal::entityTypeManager() |
| 274 | ->getStorage('field_storage_config') |
| 275 | ->loadByProperties(['type' => 'name']); |
| 276 | |
| 277 | foreach ($field_storage_configs as $field_storage) { |
| 278 | /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */ |
| 279 | $field_name = $field_storage->getName(); |
| 280 | $fields = \Drupal::entityTypeManager() |
| 281 | ->getStorage('field_config') |
| 282 | ->loadByProperties(['field_name' => $field_name]); |
| 283 | |
| 284 | foreach ($fields as $field) { |
| 285 | /** @var \Drupal\field\Entity\FieldConfig $field */ |
| 286 | $settings = $field->getSettings(); |
| 287 | $changed = FALSE; |
| 288 | |
| 289 | if (!array_key_exists('autocomplete_match', $settings)) { |
| 290 | $settings['autocomplete_match'] = 'starts_with'; |
| 291 | $changed = TRUE; |
| 292 | } |
| 293 | |
| 294 | $overrides = $settings['autocomplete_match_overrides'] ?? []; |
| 295 | if (!is_array($overrides)) { |
| 296 | $overrides = []; |
| 297 | } |
| 298 | $merged_overrides = $overrides + $default_overrides; |
| 299 | $overrides_need_update = ( |
| 300 | !array_key_exists('autocomplete_match_overrides', $settings) |
| 301 | || $merged_overrides !== $overrides |
| 302 | ); |
| 303 | if ($overrides_need_update) { |
| 304 | $settings['autocomplete_match_overrides'] = $merged_overrides; |
| 305 | $changed = TRUE; |
| 306 | } |
| 307 | |
| 308 | if ($changed) { |
| 309 | $field->setSettings($settings)->save(); |
| 310 | $updated_count += 1; |
| 311 | } |
| 312 | } |
| 313 | } |
| 314 | |
| 315 | return t('Updated @count name fields with autocomplete match settings.', [ |
| 316 | '@count' => $updated_count, |
| 317 | ]); |
| 318 | } |