Upgrade framework
This commit is contained in:
634
vendor/league/flysystem/src/MountManager.php
vendored
634
vendor/league/flysystem/src/MountManager.php
vendored
@@ -1,306 +1,398 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace League\Flysystem;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use League\Flysystem\FilesystemNotFoundException;
|
||||
use League\Flysystem\Plugin\PluggableTrait;
|
||||
use League\Flysystem\Plugin\PluginNotFoundException;
|
||||
use DateTimeInterface;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* Class MountManager.
|
||||
*
|
||||
* Proxies methods to Filesystem (@see __call):
|
||||
*
|
||||
* @method AdapterInterface getAdapter($prefix)
|
||||
* @method Config getConfig($prefix)
|
||||
* @method bool has($path)
|
||||
* @method bool write($path, $contents, array $config = [])
|
||||
* @method bool writeStream($path, $resource, array $config = [])
|
||||
* @method bool put($path, $contents, $config = [])
|
||||
* @method bool putStream($path, $contents, $config = [])
|
||||
* @method string readAndDelete($path)
|
||||
* @method bool update($path, $contents, $config = [])
|
||||
* @method bool updateStream($path, $resource, $config = [])
|
||||
* @method string|false read($path)
|
||||
* @method resource|false readStream($path)
|
||||
* @method bool rename($path, $newpath)
|
||||
* @method bool delete($path)
|
||||
* @method bool deleteDir($dirname)
|
||||
* @method bool createDir($dirname, $config = [])
|
||||
* @method array listFiles($directory = '', $recursive = false)
|
||||
* @method array listPaths($directory = '', $recursive = false)
|
||||
* @method array getWithMetadata($path, array $metadata)
|
||||
* @method string|false getMimetype($path)
|
||||
* @method string|false getTimestamp($path)
|
||||
* @method string|false getVisibility($path)
|
||||
* @method int|false getSize($path);
|
||||
* @method bool setVisibility($path, $visibility)
|
||||
* @method array|false getMetadata($path)
|
||||
* @method Handler get($path, Handler $handler = null)
|
||||
* @method Filesystem flushCache()
|
||||
* @method void assertPresent($path)
|
||||
* @method void assertAbsent($path)
|
||||
* @method Filesystem addPlugin(PluginInterface $plugin)
|
||||
*/
|
||||
class MountManager
|
||||
use function method_exists;
|
||||
use function sprintf;
|
||||
|
||||
class MountManager implements FilesystemOperator
|
||||
{
|
||||
use PluggableTrait;
|
||||
|
||||
/**
|
||||
* @var FilesystemInterface[]
|
||||
* @var array<string, FilesystemOperator>
|
||||
*/
|
||||
protected $filesystems = [];
|
||||
private $filesystems = [];
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* MountManager constructor.
|
||||
*
|
||||
* @param FilesystemInterface[] $filesystems [:prefix => Filesystem,]
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @param array<string,FilesystemOperator> $filesystems
|
||||
*/
|
||||
public function __construct(array $filesystems = [])
|
||||
{
|
||||
$this->mountFilesystems($filesystems);
|
||||
}
|
||||
|
||||
/**
|
||||
* Mount filesystems.
|
||||
*
|
||||
* @param FilesystemInterface[] $filesystems [:prefix => Filesystem,]
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function mountFilesystems(array $filesystems)
|
||||
public function fileExists(string $location): bool
|
||||
{
|
||||
foreach ($filesystems as $prefix => $filesystem) {
|
||||
$this->mountFilesystem($prefix, $filesystem);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mount filesystems.
|
||||
*
|
||||
* @param string $prefix
|
||||
* @param FilesystemInterface $filesystem
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function mountFilesystem($prefix, FilesystemInterface $filesystem)
|
||||
{
|
||||
if ( ! is_string($prefix)) {
|
||||
throw new InvalidArgumentException(__METHOD__ . ' expects argument #1 to be a string.');
|
||||
}
|
||||
|
||||
$this->filesystems[$prefix] = $filesystem;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the filesystem with the corresponding prefix.
|
||||
*
|
||||
* @param string $prefix
|
||||
*
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return FilesystemInterface
|
||||
*/
|
||||
public function getFilesystem($prefix)
|
||||
{
|
||||
if ( ! isset($this->filesystems[$prefix])) {
|
||||
throw new FilesystemNotFoundException('No filesystem mounted with prefix ' . $prefix);
|
||||
}
|
||||
|
||||
return $this->filesystems[$prefix];
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the prefix from an arguments array.
|
||||
*
|
||||
* @param array $arguments
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return array [:prefix, :arguments]
|
||||
*/
|
||||
public function filterPrefix(array $arguments)
|
||||
{
|
||||
if (empty($arguments)) {
|
||||
throw new InvalidArgumentException('At least one argument needed');
|
||||
}
|
||||
|
||||
$path = array_shift($arguments);
|
||||
|
||||
if ( ! is_string($path)) {
|
||||
throw new InvalidArgumentException('First argument should be a string');
|
||||
}
|
||||
|
||||
list($prefix, $path) = $this->getPrefixAndPath($path);
|
||||
array_unshift($arguments, $path);
|
||||
|
||||
return [$prefix, $arguments];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $directory
|
||||
* @param bool $recursive
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listContents($directory = '', $recursive = false)
|
||||
{
|
||||
list($prefix, $directory) = $this->getPrefixAndPath($directory);
|
||||
$filesystem = $this->getFilesystem($prefix);
|
||||
$result = $filesystem->listContents($directory, $recursive);
|
||||
|
||||
foreach ($result as &$file) {
|
||||
$file['filesystem'] = $prefix;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call forwarder.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $arguments
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $arguments)
|
||||
{
|
||||
list($prefix, $arguments) = $this->filterPrefix($arguments);
|
||||
|
||||
return $this->invokePluginOnFilesystem($method, $arguments, $prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $from
|
||||
* @param string $to
|
||||
* @param array $config
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function copy($from, $to, array $config = [])
|
||||
{
|
||||
list($prefixFrom, $from) = $this->getPrefixAndPath($from);
|
||||
|
||||
$buffer = $this->getFilesystem($prefixFrom)->readStream($from);
|
||||
|
||||
if ($buffer === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
list($prefixTo, $to) = $this->getPrefixAndPath($to);
|
||||
|
||||
$result = $this->getFilesystem($prefixTo)->writeStream($to, $buffer, $config);
|
||||
|
||||
if (is_resource($buffer)) {
|
||||
fclose($buffer);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* List with plugin adapter.
|
||||
*
|
||||
* @param array $keys
|
||||
* @param string $directory
|
||||
* @param bool $recursive
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listWith(array $keys = [], $directory = '', $recursive = false)
|
||||
{
|
||||
list($prefix, $directory) = $this->getPrefixAndPath($directory);
|
||||
$arguments = [$keys, $directory, $recursive];
|
||||
|
||||
return $this->invokePluginOnFilesystem('listWith', $arguments, $prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Move a file.
|
||||
*
|
||||
* @param string $from
|
||||
* @param string $to
|
||||
* @param array $config
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function move($from, $to, array $config = [])
|
||||
{
|
||||
$copied = $this->copy($from, $to, $config);
|
||||
|
||||
if ($copied) {
|
||||
return $this->delete($from);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke a plugin on a filesystem mounted on a given prefix.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $arguments
|
||||
* @param string $prefix
|
||||
*
|
||||
* @throws FilesystemNotFoundException
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function invokePluginOnFilesystem($method, $arguments, $prefix)
|
||||
{
|
||||
$filesystem = $this->getFilesystem($prefix);
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $this->invokePlugin($method, $arguments, $filesystem);
|
||||
} catch (PluginNotFoundException $e) {
|
||||
// Let it pass, it's ok, don't panic.
|
||||
return $filesystem->fileExists($path);
|
||||
} catch (Throwable $exception) {
|
||||
throw UnableToCheckFileExistence::forLocation($location, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function has(string $location): bool
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->fileExists($path) || $filesystem->directoryExists($path);
|
||||
} catch (Throwable $exception) {
|
||||
throw UnableToCheckExistence::forLocation($location, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function directoryExists(string $location): bool
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->directoryExists($path);
|
||||
} catch (Throwable $exception) {
|
||||
throw UnableToCheckDirectoryExistence::forLocation($location, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function read(string $location): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->read($path);
|
||||
} catch (UnableToReadFile $exception) {
|
||||
throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function readStream(string $location)
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->readStream($path);
|
||||
} catch (UnableToReadFile $exception) {
|
||||
throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path, $mountIdentifier] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
return
|
||||
$filesystem
|
||||
->listContents($path, $deep)
|
||||
->map(
|
||||
function (StorageAttributes $attributes) use ($mountIdentifier) {
|
||||
return $attributes->withPath(sprintf('%s://%s', $mountIdentifier, $attributes->path()));
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public function lastModified(string $location): int
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->lastModified($path);
|
||||
} catch (UnableToRetrieveMetadata $exception) {
|
||||
throw UnableToRetrieveMetadata::lastModified($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function fileSize(string $location): int
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->fileSize($path);
|
||||
} catch (UnableToRetrieveMetadata $exception) {
|
||||
throw UnableToRetrieveMetadata::fileSize($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function mimeType(string $location): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->mimeType($path);
|
||||
} catch (UnableToRetrieveMetadata $exception) {
|
||||
throw UnableToRetrieveMetadata::mimeType($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function visibility(string $location): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
return $filesystem->visibility($path);
|
||||
} catch (UnableToRetrieveMetadata $exception) {
|
||||
throw UnableToRetrieveMetadata::visibility($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function write(string $location, string $contents, array $config = []): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
$filesystem->write($path, $contents, $config);
|
||||
} catch (UnableToWriteFile $exception) {
|
||||
throw UnableToWriteFile::atLocation($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function writeStream(string $location, $contents, array $config = []): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
$filesystem->writeStream($path, $contents, $config);
|
||||
}
|
||||
|
||||
public function setVisibility(string $path, string $visibility): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($path);
|
||||
$filesystem->setVisibility($path, $visibility);
|
||||
}
|
||||
|
||||
public function delete(string $location): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
$filesystem->delete($path);
|
||||
} catch (UnableToDeleteFile $exception) {
|
||||
throw UnableToDeleteFile::atLocation($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteDirectory(string $location): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
$filesystem->deleteDirectory($path);
|
||||
} catch (UnableToDeleteDirectory $exception) {
|
||||
throw UnableToDeleteDirectory::atLocation($location, $exception->reason(), $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function createDirectory(string $location, array $config = []): void
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($location);
|
||||
|
||||
try {
|
||||
$filesystem->createDirectory($path, $config);
|
||||
} catch (UnableToCreateDirectory $exception) {
|
||||
throw UnableToCreateDirectory::dueToFailure($location, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
public function move(string $source, string $destination, array $config = []): void
|
||||
{
|
||||
/** @var FilesystemOperator $sourceFilesystem */
|
||||
/* @var FilesystemOperator $destinationFilesystem */
|
||||
[$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source);
|
||||
[$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination);
|
||||
|
||||
$sourceFilesystem === $destinationFilesystem ? $this->moveInTheSameFilesystem(
|
||||
$sourceFilesystem,
|
||||
$sourcePath,
|
||||
$destinationPath,
|
||||
$source,
|
||||
$destination
|
||||
) : $this->moveAcrossFilesystems($source, $destination, $config);
|
||||
}
|
||||
|
||||
public function copy(string $source, string $destination, array $config = []): void
|
||||
{
|
||||
/** @var FilesystemOperator $sourceFilesystem */
|
||||
/* @var FilesystemOperator $destinationFilesystem */
|
||||
[$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source);
|
||||
[$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination);
|
||||
|
||||
$sourceFilesystem === $destinationFilesystem ? $this->copyInSameFilesystem(
|
||||
$sourceFilesystem,
|
||||
$sourcePath,
|
||||
$destinationPath,
|
||||
$source,
|
||||
$destination
|
||||
) : $this->copyAcrossFilesystem(
|
||||
$config['visibility'] ?? null,
|
||||
$sourceFilesystem,
|
||||
$sourcePath,
|
||||
$destinationFilesystem,
|
||||
$destinationPath,
|
||||
$source,
|
||||
$destination
|
||||
);
|
||||
}
|
||||
|
||||
public function publicUrl(string $path, array $config = []): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($path);
|
||||
|
||||
if ( ! method_exists($filesystem, 'publicUrl')) {
|
||||
throw new UnableToGeneratePublicUrl(sprintf('%s does not support generating public urls.', $filesystem::class), $path);
|
||||
}
|
||||
|
||||
$callback = [$filesystem, $method];
|
||||
return $filesystem->publicUrl($path, $config);
|
||||
}
|
||||
|
||||
return call_user_func_array($callback, $arguments);
|
||||
public function temporaryUrl(string $path, DateTimeInterface $expiresAt, array $config = []): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($path);
|
||||
|
||||
if ( ! method_exists($filesystem, 'temporaryUrl')) {
|
||||
throw new UnableToGenerateTemporaryUrl(sprintf('%s does not support generating public urls.', $filesystem::class), $path);
|
||||
}
|
||||
|
||||
return $filesystem->temporaryUrl($path, $expiresAt, $config);
|
||||
}
|
||||
|
||||
public function checksum(string $path, array $config = []): string
|
||||
{
|
||||
/** @var FilesystemOperator $filesystem */
|
||||
[$filesystem, $path] = $this->determineFilesystemAndPath($path);
|
||||
|
||||
if ( ! method_exists($filesystem, 'checksum')) {
|
||||
throw new UnableToProvideChecksum(sprintf('%s does not support providing checksums.', $filesystem::class), $path);
|
||||
}
|
||||
|
||||
return $filesystem->checksum($path, $config);
|
||||
}
|
||||
|
||||
private function mountFilesystems(array $filesystems): void
|
||||
{
|
||||
foreach ($filesystems as $key => $filesystem) {
|
||||
$this->guardAgainstInvalidMount($key, $filesystem);
|
||||
/* @var string $key */
|
||||
/* @var FilesystemOperator $filesystem */
|
||||
$this->mountFilesystem($key, $filesystem);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $key
|
||||
* @param mixed $filesystem
|
||||
*/
|
||||
private function guardAgainstInvalidMount($key, $filesystem): void
|
||||
{
|
||||
if ( ! is_string($key)) {
|
||||
throw UnableToMountFilesystem::becauseTheKeyIsNotValid($key);
|
||||
}
|
||||
|
||||
if ( ! $filesystem instanceof FilesystemOperator) {
|
||||
throw UnableToMountFilesystem::becauseTheFilesystemWasNotValid($filesystem);
|
||||
}
|
||||
}
|
||||
|
||||
private function mountFilesystem(string $key, FilesystemOperator $filesystem): void
|
||||
{
|
||||
$this->filesystems[$key] = $filesystem;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return string[] [:prefix, :path]
|
||||
* @return array{0:FilesystemOperator, 1:string}
|
||||
*/
|
||||
protected function getPrefixAndPath($path)
|
||||
private function determineFilesystemAndPath(string $path): array
|
||||
{
|
||||
if (strpos($path, '://') < 1) {
|
||||
throw new InvalidArgumentException('No prefix detected in path: ' . $path);
|
||||
throw UnableToResolveFilesystemMount::becauseTheSeparatorIsMissing($path);
|
||||
}
|
||||
|
||||
return explode('://', $path, 2);
|
||||
/** @var string $mountIdentifier */
|
||||
/** @var string $mountPath */
|
||||
[$mountIdentifier, $mountPath] = explode('://', $path, 2);
|
||||
|
||||
if ( ! array_key_exists($mountIdentifier, $this->filesystems)) {
|
||||
throw UnableToResolveFilesystemMount::becauseTheMountWasNotRegistered($mountIdentifier);
|
||||
}
|
||||
|
||||
return [$this->filesystems[$mountIdentifier], $mountPath, $mountIdentifier];
|
||||
}
|
||||
|
||||
private function copyInSameFilesystem(
|
||||
FilesystemOperator $sourceFilesystem,
|
||||
string $sourcePath,
|
||||
string $destinationPath,
|
||||
string $source,
|
||||
string $destination
|
||||
): void {
|
||||
try {
|
||||
$sourceFilesystem->copy($sourcePath, $destinationPath);
|
||||
} catch (UnableToCopyFile $exception) {
|
||||
throw UnableToCopyFile::fromLocationTo($source, $destination, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
private function copyAcrossFilesystem(
|
||||
?string $visibility,
|
||||
FilesystemOperator $sourceFilesystem,
|
||||
string $sourcePath,
|
||||
FilesystemOperator $destinationFilesystem,
|
||||
string $destinationPath,
|
||||
string $source,
|
||||
string $destination
|
||||
): void {
|
||||
try {
|
||||
$visibility = $visibility ?? $sourceFilesystem->visibility($sourcePath);
|
||||
$stream = $sourceFilesystem->readStream($sourcePath);
|
||||
$destinationFilesystem->writeStream($destinationPath, $stream, compact('visibility'));
|
||||
} catch (UnableToRetrieveMetadata | UnableToReadFile | UnableToWriteFile $exception) {
|
||||
throw UnableToCopyFile::fromLocationTo($source, $destination, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
private function moveInTheSameFilesystem(
|
||||
FilesystemOperator $sourceFilesystem,
|
||||
string $sourcePath,
|
||||
string $destinationPath,
|
||||
string $source,
|
||||
string $destination
|
||||
): void {
|
||||
try {
|
||||
$sourceFilesystem->move($sourcePath, $destinationPath);
|
||||
} catch (UnableToMoveFile $exception) {
|
||||
throw UnableToMoveFile::fromLocationTo($source, $destination, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
private function moveAcrossFilesystems(string $source, string $destination, array $config = []): void
|
||||
{
|
||||
try {
|
||||
$this->copy($source, $destination, $config);
|
||||
$this->delete($source);
|
||||
} catch (UnableToCopyFile | UnableToDeleteFile $exception) {
|
||||
throw UnableToMoveFile::fromLocationTo($source, $destination, $exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user