Version 1
[yaffs-website] / web / core / modules / file / src / Plugin / migrate / process / d6 / FileUri.php
diff --git a/web/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php b/web/core/modules/file/src/Plugin/migrate/process/d6/FileUri.php
new file mode 100644 (file)
index 0000000..c14b5ea
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\file\Plugin\migrate\process\d6;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * Process the file url into a D8 compatible URL.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "file_uri"
+ * )
+ */
+class FileUri extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    // If we're stubbing a file entity, return a uri of NULL so it will get
+    // stubbed by the general process.
+    if ($row->isStub()) {
+      return NULL;
+    }
+    list($filepath, $file_directory_path, $temp_directory_path, $is_public) = $value;
+
+    // Specific handling using $temp_directory_path for temporary files.
+    if (substr($filepath, 0, strlen($temp_directory_path)) === $temp_directory_path) {
+      $uri = preg_replace('/^' . preg_quote($temp_directory_path, '/') . '/', '', $filepath);
+      return 'temporary://' . ltrim($uri, '/');
+    }
+
+    // Strip the files path from the uri instead of using basename
+    // so any additional folders in the path are preserved.
+    $uri = preg_replace('/^' . preg_quote($file_directory_path, '/') . '/', '', $filepath);
+
+    return ($is_public ? 'public' : 'private') . '://' . ltrim($uri, '/');
+  }
+
+}