diff --git a/core/modules/field/src/Tests/Update/NumberFieldUpdateTest.php b/core/modules/field/src/Tests/Update/NumberFieldUpdateTest.php new file mode 100644 index 0000000..97986f4 --- /dev/null +++ b/core/modules/field/src/Tests/Update/NumberFieldUpdateTest.php @@ -0,0 +1,76 @@ +databaseDumpFiles = [ + __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', + __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.numeric-field-data-2545730.php', + ]; + } + + /** + * Tests that numeric fields, widgets, and formatters are updated correctly. + */ + public function testUpdateHookN() { + // Run the updates. + $this->runUpdates(); + + // Load the updated configuration and verify it was updated correctly. + + // Field configuration - prefix/suffix should be updated to format_plural + // in settings. + $config = \Drupal::config('field.field.node.number_test.field_test_int')->get(); + $settings = $config['settings']; + $this->assertFalse(isset($settings['prefix']), 'Prefix setting has been removed from field settings'); + $this->assertFalse(isset($settings['suffix']), 'Suffix setting has been removed from field settings'); + $this->assertEqual($settings['format_plural_string'], 'Sprefix@countSsuffix' . PluralTranslatableMarkup::DELIMITER . 'Pprefix@countPsuffix'); + + // Form mode configuration - there should be a format_plural setting, + // and since this was not optional prior to this update, it should be + // set to TRUE. + $config = \Drupal::config('core.entity_form_display.node.number_test.default')->get(); + $this->assertTrue($config['content']['field_test_int']['format_plural']); + + // View mode configuration - should be migrated from prefix_suffix TRUE to + // format_plural 'field'. + $config = \Drupal::config('core.entity_view_display.node.number_test.default')->get(); + $this->assertFalse(isset($config['content']['field_test_int']['settings']['prefix_suffix']), 'prefix_suffix setting is removed from entity view display'); + $this->assertEqual($config['content']['field_test_int']['settings']['format_plural'], 'field'); + + // In the View, the first numeric field should be displaying and the second + // not displaying the prefix_suffix. These should now be using the + // format_plural setting as in the view mode, set to 'field' and 'none' + // respectively. + $config = \Drupal::config('views.view.number_test')->get(); + $fields = $config['display']['default']['display_options']['fields']; + $this->assertFalse(isset($fields['field_test_int']['settings']['prefix_suffix']), 'prefix_suffix setting has been removed from views field'); + $this->assertFalse(isset($fields['field_test_int_1']['settings']['prefix_suffix']), 'prefix_suffix setting has been removed from views field'); + $this->assertEqual($fields['field_test_int']['settings']['format_plural'], 'field'); + $this->assertEqual($fields['field_test_int_1']['settings']['format_plural'], 'none'); + } + +} diff --git a/core/modules/system/system.install b/core/modules/system/system.install index 618df41..aeb79fc 100644 --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -1878,8 +1878,8 @@ function system_update_8014($sandbox) { // Update the prefix/suffix settings on the field config to the new // format_plural_string setting. $settings = $field->get('settings'); - $prefix = isset($settings['prefix']) ?: ''; - $suffix = isset($settings['suffix']) ?: ''; + $prefix = isset($settings['prefix']) ? $settings['prefix'] : ''; + $suffix = isset($settings['suffix']) ? $settings['suffix'] : ''; if (($prefix || $suffix) && (!isset($settings['format_plural_string']) || !$settings['format_plural_string'])) { // In case they were using the previous system to separate // plural values by |, make this into a proper format_plural @@ -1925,6 +1925,17 @@ function system_update_8014($sandbox) { } } } + + // Locate widgets on entity form displays for each field. + if ($form_displays = \Drupal::entityManager()->getStorage('entity_form_display')->loadByProperties($properties)) { + foreach ($form_displays as $form_display) { + // Add a prefix_suffix setting, set to TRUE. + if ($component = $form_display->getComponent($field_name)) { + $component['settings']['format_plural'] = TRUE; + $form_display->setComponent($field_name, $component)->save(); + } + } + } } } } diff --git a/core/modules/system/tests/fixtures/update/drupal-8.core.entity_form_display.node.number_test.default-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.core.entity_form_display.node.number_test.default-2545730.yml new file mode 100644 index 0000000..ca5b52c --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.core.entity_form_display.node.number_test.default-2545730.yml @@ -0,0 +1,67 @@ +langcode: en +status: true +dependencies: + config: + - field.field.node.number_test.body + - field.field.node.number_test.field_test_int + - node.type.number_test + module: + - path + - text +id: node.number_test.default +targetEntityType: node +bundle: number_test +mode: default +content: + body: + type: text_textarea_with_summary + weight: 31 + settings: + rows: 9 + summary_rows: 3 + placeholder: '' + third_party_settings: { } + created: + type: datetime_timestamp + weight: 10 + settings: { } + third_party_settings: { } + field_test_int: + weight: 32 + settings: + placeholder: '' + third_party_settings: { } + type: number + path: + type: path + weight: 30 + settings: { } + third_party_settings: { } + promote: + type: boolean_checkbox + settings: + display_label: true + weight: 15 + third_party_settings: { } + sticky: + type: boolean_checkbox + settings: + display_label: true + weight: 16 + third_party_settings: { } + title: + type: string_textfield + weight: -5 + settings: + size: 60 + placeholder: '' + third_party_settings: { } + uid: + type: entity_reference_autocomplete + weight: 5 + settings: + match_operator: CONTAINS + size: 60 + placeholder: '' + third_party_settings: { } +hidden: { } diff --git a/core/modules/system/tests/fixtures/update/drupal-8.core.entity_view_display.node.number_test.default-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.core.entity_view_display.node.number_test.default-2545730.yml new file mode 100644 index 0000000..b017a38 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.core.entity_view_display.node.number_test.default-2545730.yml @@ -0,0 +1,34 @@ +langcode: en +status: true +dependencies: + config: + - field.field.node.number_test.body + - field.field.node.number_test.field_test_int + - node.type.number_test + module: + - text + - user +id: node.number_test.default +targetEntityType: node +bundle: number_test +mode: default +content: + body: + label: hidden + type: text_default + weight: 101 + settings: { } + third_party_settings: { } + field_test_int: + weight: 102 + label: above + settings: + thousand_separator: '' + prefix_suffix: true + third_party_settings: { } + type: number_integer + links: + weight: 100 + settings: { } + third_party_settings: { } +hidden: { } diff --git a/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.body-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.body-2545730.yml new file mode 100644 index 0000000..96b5a31 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.body-2545730.yml @@ -0,0 +1,21 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.node.body + - node.type.number_test + module: + - text +id: node.number_test.body +field_name: body +entity_type: node +bundle: number_test +label: Body +description: '' +required: false +translatable: true +default_value: { } +default_value_callback: '' +settings: + display_summary: true +field_type: text_with_summary diff --git a/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.field_test_int-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.field_test_int-2545730.yml new file mode 100644 index 0000000..9ba1609 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.field.field.node.number_test.field_test_int-2545730.yml @@ -0,0 +1,22 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_test_int + - node.type.number_test +id: node.number_test.field_test_int +field_name: field_test_int +entity_type: node +bundle: number_test +label: 'Test int' +description: '' +required: false +translatable: false +default_value: { } +default_value_callback: '' +settings: + min: null + max: null + prefix: Sprefix|Pprefix + suffix: Ssuffix|Psuffix +field_type: integer diff --git a/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.body-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.body-2545730.yml new file mode 100644 index 0000000..73edd16 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.body-2545730.yml @@ -0,0 +1,18 @@ +langcode: en +status: true +dependencies: + module: + - node + - text +id: node.body +field_name: body +entity_type: node +type: text_with_summary +settings: { } +module: text +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: true +custom_storage: false diff --git a/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.field_test_int-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.field_test_int-2545730.yml new file mode 100644 index 0000000..341b8a4 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.field.storage.node.field_test_int-2545730.yml @@ -0,0 +1,19 @@ +langcode: en +status: true +dependencies: + module: + - node +id: node.field_test_int +field_name: field_test_int +entity_type: node +type: integer +settings: + unsigned: false + size: normal +module: core +locked: false +cardinality: 1 +translatable: true +indexes: { } +persist_with_no_fields: false +custom_storage: false diff --git a/core/modules/system/tests/fixtures/update/drupal-8.node.type.number_test-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.node.type.number_test-2545730.yml new file mode 100644 index 0000000..6eadf70 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.node.type.number_test-2545730.yml @@ -0,0 +1,9 @@ +langcode: en +status: true +name: 'Number test' +type: number_test +description: 'Content type for testing update of numeric field prefix/suffix to format_plural setting.' +help: '' +new_revision: false +preview_mode: 1 +display_submitted: false diff --git a/core/modules/system/tests/fixtures/update/drupal-8.numeric-field-data-2545730.php b/core/modules/system/tests/fixtures/update/drupal-8.numeric-field-data-2545730.php new file mode 100644 index 0000000..818cc95 --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.numeric-field-data-2545730.php @@ -0,0 +1,40 @@ +insert('config') + ->fields(array( + 'collection', + 'name', + 'data', + )) + ->values(array( + 'collection' => '', + 'name' => $config, + 'data' => serialize($data), + )) + ->execute(); +} diff --git a/core/modules/system/tests/fixtures/update/drupal-8.views.view.number_test-2545730.yml b/core/modules/system/tests/fixtures/update/drupal-8.views.view.number_test-2545730.yml new file mode 100644 index 0000000..1ec3a6a --- /dev/null +++ b/core/modules/system/tests/fixtures/update/drupal-8.views.view.number_test-2545730.yml @@ -0,0 +1,266 @@ +langcode: en +status: true +dependencies: + config: + - field.storage.node.field_test_int + - node.type.number_test + module: + - node + - user +id: number_test +label: 'Number test' +module: views +description: '' +tag: '' +base_table: node_field_data +base_field: nid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + options: + perm: 'access content' + cache: + type: tag + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: full + options: + items_per_page: 10 + offset: 0 + id: 0 + total_pages: null + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + tags: + previous: '‹ Previous' + next: 'Next ›' + first: '« First' + last: 'Last »' + quantity: 9 + style: + type: default + options: + grouping: { } + row_class: '' + default_row_class: true + uses_fields: false + row: + type: fields + options: + inline: { } + separator: '' + hide_empty: false + default_field_elements: true + fields: + field_test_int: + id: field_test_int + table: node__field_test_int + field: field_test_int + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: true + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + plugin_id: field + field_test_int_1: + id: field_test_int_1 + table: node__field_test_int + field: field_test_int + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: number_integer + settings: + thousand_separator: '' + prefix_suffix: false + group_column: value + group_columns: { } + group_rows: true + delta_limit: 0 + delta_offset: 0 + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + plugin_id: field + filters: + status: + value: true + table: node_field_data + field: status + plugin_id: boolean + entity_type: node + entity_field: status + id: status + expose: + operator: '' + group: 1 + type: + id: type + table: node_field_data + field: type + value: + number_test: number_test + entity_type: node + entity_field: type + plugin_id: bundle + sorts: + created: + id: created + table: node_field_data + field: created + order: DESC + entity_type: node + entity_field: created + plugin_id: date + relationship: none + group_type: group + admin_label: '' + exposed: false + expose: + label: '' + granularity: second + header: { } + footer: { } + empty: { } + relationships: { } + arguments: { } + display_extenders: { } + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_content' + - 'languages:language_interface' + - url.query_args + - 'user.node_grants:view' + - user.permissions + tags: + - 'config:field.storage.node.field_test_int'