/vendor/neutron/temporary-filesystem/src/Neutron/TemporaryFilesystem/Manager.php |
@@ -0,0 +1,156 @@ |
<?php |
|
/* |
* This file is part of TemporaryFilesystem. |
* |
* (c) Romain Neutron <imprec@gmail.com> |
* |
* For the full copyright and license information, please view the LICENSE |
* file that was distributed with this source code. |
*/ |
|
namespace Neutron\TemporaryFilesystem; |
|
use Symfony\Component\Filesystem\Filesystem; |
use Symfony\Component\Filesystem\Exception\IOException as SfIOException; |
|
class Manager implements TemporaryFilesystemInterface |
{ |
/** @var Filesystem */ |
private $fs; |
/** @var TemporaryFilesystem */ |
private $tmpFs; |
/** @var array */ |
private $files = array(); |
|
const DEFAULT_SCOPE = '_tmp_fs_'; |
|
public function __construct(TemporaryFilesystemInterface $tmpFs, Filesystem $fs) |
{ |
$this->fs = $fs; |
$this->tmpFs = $tmpFs; |
|
register_shutdown_function(array($this, 'clean'), null, false); |
} |
|
/** |
* {@inheritdoc} |
*/ |
public function createEmptyFile($basePath, $prefix = self::DEFAULT_SCOPE, $suffix = null, $extension = null, $maxTry = 65536) |
{ |
$file = $this->tmpFs->createEmptyFile($basePath, $prefix, $suffix, $extension, $maxTry); |
$this->add($file, $prefix); |
|
return $file; |
} |
|
/** |
* {@inheritdoc} |
*/ |
public function createTemporaryDirectory($mode = 0777, $maxTry = 65536, $prefix = self::DEFAULT_SCOPE) |
{ |
$dir = $this->tmpFs->createTemporaryDirectory($mode, $maxTry, $prefix); |
$this->add($dir, $prefix); |
|
return $dir; |
} |
|
/** |
* {@inheritdoc} |
*/ |
public function createTemporaryFile($prefix = self::DEFAULT_SCOPE, $suffix = null, $extension = null, $maxTry = 65536) |
{ |
$file = $this->tmpFs->createTemporaryFile($prefix, $suffix, $extension, $maxTry); |
$this->add($file, $prefix); |
|
return $file; |
} |
|
/** |
* {@inheritdoc} |
*/ |
public function createTemporaryFiles($quantity = 1, $prefix = self::DEFAULT_SCOPE, $suffix = null, $extension = null, $maxTry = 65536) |
{ |
$files = $this->tmpFs->createTemporaryFiles($quantity, $prefix, $suffix, $extension, $maxTry); |
$this->add($files, $prefix); |
|
return $files; |
} |
|
/** |
* Adds file to be handled by the manager. |
* |
* @param string|array $files |
* @param string $scope |
* |
* @return Manager |
*/ |
public function add($files, $scope = self::DEFAULT_SCOPE) |
{ |
if (!is_array($files)) { |
$files = array($files); |
} |
if ('' === trim($scope)) { |
$scope = self::DEFAULT_SCOPE; |
} |
if (!isset($this->files[$scope])) { |
$this->files[$scope] = array(); |
} |
|
$this->files[$scope] = array_merge($this->files[$scope], $files); |
|
return $this; |
} |
|
/** |
* Removes all managed files in a scope. If no scope provided, all scopes |
* are cleared. |
* |
* @param string $scope |
* |
* @return Manager |
* |
* @throws IOException |
*/ |
public function clean($scope = null, $throwException = true) |
{ |
if (null !== $scope) { |
$this->cleanScope($scope, $throwException); |
} else { |
foreach ($this->files as $scope => $files) { |
$this->cleanScope($scope, $throwException); |
} |
} |
|
return $this; |
} |
|
/** |
* Factory for the Manager |
* |
* @return Manager |
*/ |
public static function create() |
{ |
$fs = new Filesystem(); |
|
return new static(new TemporaryFilesystem($fs), $fs); |
} |
|
private function cleanScope($scope, $throwException) |
{ |
if (!isset($this->files[$scope])) { |
return; |
} |
|
try { |
$this->fs->remove($this->files[$scope]); |
unset($this->files[$scope]); |
} catch (SfIOException $e) { |
unset($this->files[$scope]); |
if ($throwException) { |
throw new IOException('Unable to remove all the files', $e->getCode(), $e); |
} |
} |
} |
} |