| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-deploy/Service/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-deploy/Service/DeployStaticFile.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Deploy\Service;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\File\WriteInterface;
use Magento\Framework\View\Asset\Minification;
use Magento\Framework\View\Asset\Repository;
use Magento\Framework\App\View\Asset\Publisher;
use Magento\Framework\View\Asset\PreProcessor\FileNameResolver;
use Magento\Framework\Filesystem\Directory\ReadInterface;
/**
* Deploy static file service
*/
class DeployStaticFile
{
/**
* @var Filesystem
*/
private $filesystem;
/**
* @var \Magento\Framework\View\Asset\Repository
*/
private $assetRepo;
/**
* @var Publisher
*/
private $assetPublisher;
/**
* @var FileNameResolver
*/
private $fileNameResolver;
/**
* @var Minification
*/
private $minification;
/**
* Public static files directory read interface
*
* @var ReadInterface
*/
private $tmpDir;
/**
* @var Filesystem\Directory\WriteInterface
*/
private $pubStaticDir;
/**
* @param Filesystem $filesystem
* @param Repository $assetRepo
* @param Publisher $assetPublisher
* @param FileNameResolver $fileNameResolver
* @param Minification $minification
*/
public function __construct(
Filesystem $filesystem,
Repository $assetRepo,
Publisher $assetPublisher,
FileNameResolver $fileNameResolver,
Minification $minification
) {
$this->filesystem = $filesystem;
$this->assetRepo = $assetRepo;
$this->assetPublisher = $assetPublisher;
$this->fileNameResolver = $fileNameResolver;
$this->pubStaticDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
$this->minification = $minification;
$this->tmpDir = $filesystem->getDirectoryWrite(DirectoryList::TMP_MATERIALIZATION_DIR);
}
/**
* @param string $fileName
* @param array $params ['area' =>, 'theme' =>, 'locale' =>, 'module' =>]
* @return string
*/
public function deployFile($fileName, array $params = [])
{
$params['publish'] = true;
$asset = $this->assetRepo->createAsset($this->resolveFile($fileName), $params);
$this->assetPublisher->publish($asset);
return $asset->getPath();
}
/**
* @param string $path
* @return void
*/
public function deleteFile($path)
{
if ($this->pubStaticDir->isExist($path)) {
$absolutePath = $this->pubStaticDir->getAbsolutePath($path);
if (is_link($absolutePath)) {
$this->pubStaticDir->getDriver()->deleteFile($absolutePath);
} else {
if ($this->pubStaticDir->getDriver()->isFile($absolutePath)) {
$this->pubStaticDir->getDriver()->deleteFile($absolutePath);
} else {
$this->pubStaticDir->getDriver()->deleteDirectory($absolutePath);
}
}
}
}
/**
* Read resolved file from pub static directory
*
* @param string $fileName
* @param string $filePath
* @return string|false
*/
public function readFile($fileName, $filePath)
{
$fileName = $this->minification->addMinifiedSign($fileName);
$relativePath = $filePath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName);
if ($this->pubStaticDir->isFile($relativePath)) {
return $this->pubStaticDir->readFile($relativePath);
} else {
return false;
}
}
/**
* @param string $fileName
* @param string $filePath
* @return WriteInterface
*/
public function openFile($fileName, $filePath)
{
$relativePath = $filePath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName);
return $this->pubStaticDir->openFile($relativePath, 'w+');
}
/**
* Write resolved file to pub static directory
*
* @param string $fileName
* @param string $filePath
* @param string $content
* @return int The number of bytes that were written.
*/
public function writeFile($fileName, $filePath, $content)
{
$relativePath = $filePath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName);
return $this->pubStaticDir->writeFile($relativePath, $content);
}
/**
* Copy resolved $fileName from $targetPath to $destinationPath
*
* @param string $fileName
* @param string $sourcePath
* @param string $targetPath
* @return bool
*/
public function copyFile($fileName, $sourcePath, $targetPath)
{
$fileName = $this->minification->addMinifiedSign($fileName);
return $this->pubStaticDir->copyFile(
$sourcePath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName),
$targetPath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName)
);
}
/**
* Read file from tmp directory
*
* @param string $fileName
* @param string $filePath
* @return string
*/
public function readTmpFile($fileName, $filePath)
{
$relativePath = $filePath . DIRECTORY_SEPARATOR . $fileName;
return $this->tmpDir->isFile($relativePath) ? $this->tmpDir->readFile($relativePath) : false;
}
/**
* Write file to tmp directory
*
* @param string $fileName
* @param string $filePath
* @param string $content
* @return int The number of bytes that were written.
*/
public function writeTmpFile($fileName, $filePath, $content)
{
$relativePath = $filePath . DIRECTORY_SEPARATOR . $this->resolveFile($fileName);
return $this->tmpDir->writeFile($relativePath, $content);
}
/**
* Resolve filename
*
* @param string $fileName
* @return string
*/
private function resolveFile($fileName)
{
$compiledFile = str_replace(
Repository::FILE_ID_SEPARATOR,
'/',
$this->fileNameResolver->resolve($fileName)
);
return $compiledFile;
}
}