Version 1
[yaffs-website] / web / core / modules / field / src / Plugin / migrate / process / d6 / FieldFormatterSettingsDefaults.php
diff --git a/web/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php b/web/core/modules/field/src/Plugin/migrate/process/d6/FieldFormatterSettingsDefaults.php
new file mode 100644 (file)
index 0000000..9a8e86a
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+
+namespace Drupal\field\Plugin\migrate\process\d6;
+
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Row;
+
+/**
+ * Set the default field settings.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "field_formatter_settings_defaults"
+ * )
+ */
+class FieldFormatterSettingsDefaults extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   *
+   * Set field formatter settings when the map didn't map: for date
+   * formatters, the fallback format, for everything else, empty array.
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    // If the 1 index is set then the map missed.
+    if (isset($value[1])) {
+      $module = $row->getSourceProperty('module');
+      if ($module === 'date') {
+        $value = ['format_type' => 'fallback'];
+      }
+      elseif ($module === 'number') {
+        // We have to do the lookup here in the process plugin because for
+        // number we need to calculated the settings based on the type not just
+        // the module which works well for other field types.
+        return $this->numberSettings($row->getDestinationProperty('options/type'), $value[1]);
+      }
+      else {
+        $value = [];
+      }
+    }
+    return $value;
+  }
+
+  /**
+   * @param string $type
+   *   The field type.
+   * @param $format
+   *   The format selected for the field on the display.
+   *
+   * @return array
+   *   The correct default settings.
+   *
+   * @throws \Drupal\migrate\MigrateException
+   */
+  protected function numberSettings($type, $format) {
+    $map = [
+      'number_decimal' => [
+        'us_0' => [
+          'scale' => 0,
+          'decimal_separator' => '.',
+          'thousand_separator' => ',',
+          'prefix_suffix' => TRUE,
+        ],
+        'us_1' => [
+          'scale' => 1,
+          'decimal_separator' => '.',
+          'thousand_separator' => ',',
+          'prefix_suffix' => TRUE,
+        ],
+        'us_2' => [
+          'scale' => 2,
+          'decimal_separator' => '.',
+          'thousand_separator' => ',',
+          'prefix_suffix' => TRUE,
+        ],
+        'be_0' => [
+          'scale' => 0,
+          'decimal_separator' => ',',
+          'thousand_separator' => '.',
+          'prefix_suffix' => TRUE,
+        ],
+        'be_1' => [
+          'scale' => 1,
+          'decimal_separator' => ',',
+          'thousand_separator' => '.',
+          'prefix_suffix' => TRUE,
+        ],
+        'be_2' => [
+          'scale' => 2,
+          'decimal_separator' => ',',
+          'thousand_separator' => '.',
+          'prefix_suffix' => TRUE,
+        ],
+        'fr_0' => [
+          'scale' => 0,
+          'decimal_separator' => ',',
+          'thousand_separator' => ' ',
+          'prefix_suffix' => TRUE,
+        ],
+        'fr_1' => [
+          'scale' => 1,
+          'decimal_separator' => ',',
+          'thousand_separator' => ' ',
+          'prefix_suffix' => TRUE,
+        ],
+        'fr_2' => [
+          'scale' => 2,
+          'decimal_separator' => ',',
+          'thousand_separator' => ' ',
+          'prefix_suffix' => TRUE,
+        ],
+      ],
+      'number_integer' => [
+        'us_0' => [
+          'thousand_separator' => ',',
+          'prefix_suffix' => TRUE,
+        ],
+        'be_0' => [
+          'thousand_separator' => '.',
+          'prefix_suffix' => TRUE,
+        ],
+        'fr_0' => [
+          'thousand_separator' => ' ',
+          'prefix_suffix' => TRUE,
+        ],
+      ],
+    ];
+
+    return isset($map[$type][$format]) ? $map[$type][$format] : [];
+  }
+
+}