/home/techb158/immovalet.com/platform/core/media/src/Supports
Edit: /home/techb158/immovalet.com/platform/core/media/src/Supports/Zipper.php (5217B)
file = $fs ? $fs : new Filesystem;
}
/**
* Destructor
*/
public function __destruct()
{
if (is_object($this->repository)) {
$this->repository->close();
}
}
/**
* Create a new zip Archive if the file does not exists
* opens a zip archive if the file exists
*
* @param string $pathToFile The file to open
* @return $this Zipper instance
* @throws Exception
* @throws InvalidArgumentException
*
* @throws RuntimeException
*/
public function make($pathToFile)
{
$new = $this->createArchiveFile($pathToFile);
$this->repository = new ZipRepository($pathToFile, $new);
$this->filePath = $pathToFile;
return $this;
}
/**
* @param string $pathToZip
*
* @return bool
* @throws Exception
*/
protected function createArchiveFile($pathToZip)
{
if (!$this->file->exists($pathToZip)) {
$dirname = dirname($pathToZip);
if (!$this->file->exists($dirname) && !$this->file->makeDirectory($dirname, 0755, true)) {
throw new RuntimeException('Failed to create folder');
} elseif (!$this->file->isWritable($dirname)) {
throw new Exception(sprintf('The path "%s" is not writeable', $pathToZip));
}
return true;
}
return false;
}
/**
* Add one or multiple files to the zip.
*
* @param array|string $pathToAdd An array or string of files and folders to add
* @param null|mixed $fileName
*
* @return $this Zipper instance
*/
public function add($pathToAdd, $fileName = null)
{
if (is_array($pathToAdd)) {
foreach ($pathToAdd as $key => $dir) {
if (!is_int($key)) {
$this->add($dir, $key);
} else {
$this->add($dir);
}
}
} elseif ($this->file->isFile($pathToAdd)) {
if ($fileName) {
$this->addFile($pathToAdd, $fileName);
} else {
$this->addFile($pathToAdd);
}
} else {
$this->addDir($pathToAdd);
}
return $this;
}
/**
* Add the file to the zip
*
* @param string $pathToAdd
* @param string $fileName
*/
protected function addFile($pathToAdd, $fileName = null)
{
if (!$fileName) {
$info = pathinfo($pathToAdd);
$fileName = isset($info['extension']) ?
$info['filename'] . '.' . $info['extension'] :
$info['filename'];
}
$this->repository->addFile($pathToAdd, $this->getInternalPath() . $fileName);
}
/**
* Gets the path to the internal folder
*
* @return string
*/
public function getInternalPath()
{
return empty($this->currentFolder) ? '' : $this->currentFolder . '/';
}
/**
* @param string $pathToDir
*/
protected function addDir($pathToDir)
{
// First go over the files in this directory and add them to the repository.
foreach ($this->file->files($pathToDir) as $file) {
$this->addFile($pathToDir . '/' . basename($file));
}
// Now let's visit the subdirectories and add them, too.
foreach ($this->file->directories($pathToDir) as $dir) {
$oldFolder = $this->currentFolder;
$this->currentFolder = empty($this->currentFolder) ? basename($dir) : $this->currentFolder . '/' . basename($dir);
$this->addDir($pathToDir . '/' . basename($dir));
$this->currentFolder = $oldFolder;
}
}
/**
* Add a file to the zip using its contents
*
* @param string $filename The name of the file to create
* @param string $content The file contents
*
* @return $this Zipper instance
*/
public function addString($filename, $content)
{
$this->repository->addFromString($this->getInternalPath() . $filename, $content);
return $this;
}
/**
* Closes the zip file and frees all handles
*/
public function close()
{
if (null !== $this->repository) {
$this->repository->close();
}
$this->filePath = '';
}
}