diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php index 442d6de..2095037 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php @@ -75,9 +75,9 @@ public function viewElements(FieldItemListInterface $items) { // Account for prefix and suffix. if ($this->getSetting('prefix_suffix')) { - $prefixes = isset($settings['prefix']) ? array_map(array($this, 'fieldFilterXss'), explode('|', $settings['prefix'])) : array(''); - $suffixes = isset($settings['suffix']) ? array_map(array($this, 'fieldFilterXss'), explode('|', $settings['suffix'])) : array(''); - $output = $prefixes[0] . $output . $suffixes[0]; + $prefix = isset($settings['prefix']) ? $this->fieldFilterXss($settings['prefix']) : ''; + $suffix = isset($settings['suffix']) ? $this->fieldFilterXss($settings['suffix']) : ''; + $output = $prefix . $output . $suffix; } // Output the raw value in a content attribute if the text of the HTML // element differs from the raw value (for example when a prefix is used). diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php index d094984..86db983 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/NumberWidget.php @@ -100,12 +100,10 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen // Add prefix and suffix. if ($field_settings['prefix']) { - $prefixes = explode('|', $field_settings['prefix']); - $element['#field_prefix'] = $this->fieldFilterXss($prefixes[0]); + $element['#field_prefix'] = $this->fieldFilterXss($field_settings['prefix']); } if ($field_settings['suffix']) { - $suffixes = explode('|', $field_settings['suffix']); - $element['#field_suffix'] = $this->fieldFilterXss($suffixes[0]); + $element['#field_suffix'] = $this->fieldFilterXss($field_settings['suffix']); } return array('value' => $element); diff --git a/core/modules/field/field.install b/core/modules/field/field.install new file mode 100644 index 0000000..0bb6d4a --- /dev/null +++ b/core/modules/field/field.install @@ -0,0 +1,65 @@ +listAll('field.field.'); + foreach ($list as $field_config_name) { + $field = $config_factory->getEditable($field_config_name); + if($field_settings = $field->get('settings')) { + if(isset($field_settings['prefix']) && strstr($field_settings['prefix'], '|')) { + $prefixes = explode('|', $field_settings['prefix']); + $field_settings['prefix'] = array_pop($prefixes); + $field->set('settings', $field_settings); + $field->save(); + $adjusted_prefix[] = $field->getName(); + } + if(isset($field_settings['suffix']) && strstr($field_settings['suffix'], '|')) { + $suffixes = explode('|', $field_settings['suffix']); + $field_settings['suffix'] = array_pop($suffixes); + $field->set('settings', $field_settings); + $field->save(); + $adjusted_suffix[] = $field->getName(); + } + } + } + + // Give the user the name of the prefix/suffix fields that where adjusted. + if (!empty($adjusted_prefix) || !empty($adjusted_suffix)) { + $args = [ + '@prefixes' => implode(', ', $adjusted_prefix) ?: 'none', + '@suffixes' => implode(', ', $adjusted_suffix) ?: 'none', + ]; + $msg = 'Some of your prefix/suffix fields configured pipe symbols to format singular/plural form. This is no longer supported, so the fields where adjusted. See the change record https://www.drupal.org/node/2552871 for more information.'; + $msg .= 'Prefix fields adjusted: @prefixes'; + $msg .= 'Suffix fields adjusted: @suffixes'; + $message = \Drupal::translation()->translate($msg, $args); + return $message; + } + +} + +/** + * @} End of "addtogroup updates-8.0.0-beta". + */ diff --git a/core/modules/field/src/Tests/Update/FieldConfigUpdateTest.php b/core/modules/field/src/Tests/Update/FieldConfigUpdateTest.php new file mode 100644 index 0000000..79a3ff9 --- /dev/null +++ b/core/modules/field/src/Tests/Update/FieldConfigUpdateTest.php @@ -0,0 +1,41 @@ +databaseDumpFiles = [ + __DIR__ . '/../../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', + ]; + + parent::setUp(); + } + + /** + * Tests that field configurations are updated properly. + */ + public function testUpdateHookN() { + $this->runUpdates(); + + // @TODO implement + } + +}