function FileCopy::transform

Same name and namespace in other branches
  1. 9 core/modules/migrate/src/Plugin/migrate/process/FileCopy.php \Drupal\migrate\Plugin\migrate\process\FileCopy::transform()
  2. 8.9.x core/modules/migrate/src/Plugin/migrate/process/FileCopy.php \Drupal\migrate\Plugin\migrate\process\FileCopy::transform()
  3. 10 core/modules/migrate/src/Plugin/migrate/process/FileCopy.php \Drupal\migrate\Plugin\migrate\process\FileCopy::transform()

Overrides ProcessPluginBase::transform

File

core/modules/migrate/src/Plugin/migrate/process/FileCopy.php, line 119

Class

FileCopy
Copies or moves a local file from one place into another.

Namespace

Drupal\migrate\Plugin\migrate\process

Code

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;
  }
  [
    $source,
    $destination,
  ] = $value;
  // If the source path or URI represents a remote resource, delegate to the
  // download plugin.
  if (!$this->isLocalUri($source)) {
    return $this->downloadPlugin
      ->transform($value, $migrate_executable, $row, $destination_property);
  }
  // Ensure the source file exists, if it's a local URI or path.
  if (!file_exists($source)) {
    throw new MigrateException("File '{$source}' does not exist");
  }
  // If the start and end file is exactly the same, there is nothing to do.
  if ($this->isLocationUnchanged($source, $destination)) {
    return $destination;
  }
  // Check if a writable directory exists, and if not try to create it.
  $dir = $this->getDirectory($destination);
  // If the directory exists and is writable, avoid
  // \Drupal\Core\File\FileSystemInterface::prepareDirectory() call and write
  // the file to destination.
  if (!is_dir($dir) || !is_writable($dir)) {
    if (!$this->fileSystem
      ->prepareDirectory($dir, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) {
      throw new MigrateException("Could not create or write to directory '{$dir}'");
    }
  }
  $final_destination = $this->writeFile($source, $destination, $this->configuration['file_exists']);
  if ($final_destination) {
    return $final_destination;
  }
  throw new MigrateException("File {$source} could not be copied to {$destination}");
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.