Version 1
[yaffs-website] / web / core / modules / link / src / Plugin / migrate / process / d6 / FieldLink.php
diff --git a/web/core/modules/link/src/Plugin/migrate/process/d6/FieldLink.php b/web/core/modules/link/src/Plugin/migrate/process/d6/FieldLink.php
new file mode 100644 (file)
index 0000000..4badcb6
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+namespace Drupal\link\Plugin\migrate\process\d6;
+
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d6_field_link"
+ * )
+ */
+class FieldLink extends ProcessPluginBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->migration = $migration;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration
+    );
+  }
+
+  /**
+   * Turn a Drupal 6 URI into a Drupal 8-compatible format.
+   *
+   * @param string $uri
+   *   The 'url' value from Drupal 6.
+   *
+   * @return string
+   *   The Drupal 8-compatible URI.
+   *
+   * @see \Drupal\link\Plugin\Field\FieldWidget\LinkWidget::getUserEnteredStringAsUri()
+   */
+  protected function canonicalizeUri($uri) {
+    // If we already have a scheme, we're fine.
+    if (empty($uri) || !is_null(parse_url($uri, PHP_URL_SCHEME))) {
+      return $uri;
+    }
+
+    // Remove the <front> component of the URL.
+    if (strpos($uri, '<front>') === 0) {
+      $uri = substr($uri, strlen('<front>'));
+    }
+
+    // Add the internal: scheme and ensure a leading slash.
+    return 'internal:/' . ltrim($uri, '/');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    $attributes = unserialize($value['attributes']);
+    // Drupal 6 link attributes might be double serialized.
+    if (!is_array($attributes)) {
+      $attributes = unserialize($attributes);
+    }
+
+    if (!$attributes) {
+      $attributes = [];
+    }
+
+    // Massage the values into the correct form for the link.
+    $route['uri'] = $this->canonicalizeUri($value['url']);
+    $route['options']['attributes'] = $attributes;
+    $route['title'] = $value['title'];
+    return $route;
+  }
+
+}