protected function FileTransfer::copyDirectoryJailed

Copies a directory.

We need a separate method to make sure the $destination is in the jail.

Parameters

string $source: The source path.

string $destination: The destination path.

1 call to FileTransfer::copyDirectoryJailed()
FileTransfer::copyDirectory in drupal/core/lib/Drupal/Core/FileTransfer/FileTransfer.php
Copies a directory.
1 method overrides FileTransfer::copyDirectoryJailed()
SSH::copyDirectoryJailed in drupal/core/lib/Drupal/Core/FileTransfer/SSH.php
Implements Drupal\Core\FileTransfer\FileTransfer::copyDirectoryJailed().

File

drupal/core/lib/Drupal/Core/FileTransfer/FileTransfer.php, line 278
Definition of Drupal\Core\FileTransfer\FileTransfer.

Class

FileTransfer
Defines the base FileTransfer class.

Namespace

Drupal\Core\FileTransfer

Code

protected function copyDirectoryJailed($source, $destination) {
  if ($this
    ->isDirectory($destination)) {
    $destination = $destination . '/' . drupal_basename($source);
  }
  $this
    ->createDirectory($destination);
  foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST) as $filename => $file) {
    $relative_path = substr($filename, strlen($source));
    if ($file
      ->isDir()) {
      $this
        ->createDirectory($destination . $relative_path);
    }
    else {
      $this
        ->copyFile($file
        ->getPathName(), $destination . $relative_path);
    }
  }
}