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