rector/vendor/ssch/typo3-rector/src/FileProcessor/Resources/Icons/IconsFileProcessor.php
Tomas Votruba a3e534ff19 Updated Rector to commit db2e76b99c
db2e76b99c load stubs in config
2021-07-22 23:37:17 +00:00

81 lines
3.0 KiB
PHP

<?php
declare (strict_types=1);
namespace Ssch\TYPO3Rector\FileProcessor\Resources\Icons;
use Rector\Core\Contract\Processor\FileProcessorInterface;
use Rector\Core\ValueObject\Application\File;
use Rector\Core\ValueObject\Configuration;
use Rector\Testing\PHPUnit\StaticPHPUnitEnvironment;
use Ssch\TYPO3Rector\Contract\FileProcessor\Resources\IconRectorInterface;
use Ssch\TYPO3Rector\Helper\FilesFinder;
use RectorPrefix20210722\Symplify\SmartFileSystem\SmartFileSystem;
/**
* @changelog https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/8.3/Feature-77349-AdditionalLocationsForExtensionIcons.html
* @see \Ssch\TYPO3Rector\Tests\FileProcessor\Resources\Icons\IconsProcessor\IconsProcessorTest
*/
final class IconsFileProcessor implements \Rector\Core\Contract\Processor\FileProcessorInterface
{
/**
* @var \Ssch\TYPO3Rector\Helper\FilesFinder
*/
private $filesFinder;
/**
* @var \Symplify\SmartFileSystem\SmartFileSystem
*/
private $smartFileSystem;
/**
* @var mixed[]
*/
private $iconsRector;
/**
* @param IconRectorInterface[] $iconsRector
*/
public function __construct(\Ssch\TYPO3Rector\Helper\FilesFinder $filesFinder, \RectorPrefix20210722\Symplify\SmartFileSystem\SmartFileSystem $smartFileSystem, array $iconsRector)
{
$this->filesFinder = $filesFinder;
$this->smartFileSystem = $smartFileSystem;
$this->iconsRector = $iconsRector;
}
/**
* @param \Rector\Core\ValueObject\Application\File $file
* @param \Rector\Core\ValueObject\Configuration $configuration
*/
public function process($file, $configuration) : void
{
foreach ($this->iconsRector as $iconRector) {
$iconRector->refactorFile($file);
}
}
/**
* @param \Rector\Core\ValueObject\Application\File $file
* @param \Rector\Core\ValueObject\Configuration $configuration
*/
public function supports($file, $configuration) : bool
{
$smartFileInfo = $file->getSmartFileInfo();
if (\strpos($smartFileInfo->getFilename(), 'ext_icon') === \false) {
return \false;
}
$extEmConfSmartFileInfo = $this->filesFinder->findExtEmConfRelativeFromGivenFileInfo($smartFileInfo);
if (null === $extEmConfSmartFileInfo) {
return \false;
}
if (\Rector\Testing\PHPUnit\StaticPHPUnitEnvironment::isPHPUnitRun()) {
return \true;
}
return !$this->smartFileSystem->exists($this->createIconPath($file));
}
public function getSupportedFileExtensions() : array
{
return ['png', 'gif', 'svg'];
}
private function createIconPath(\Rector\Core\ValueObject\Application\File $file) : string
{
$smartFileInfo = $file->getSmartFileInfo();
$realPath = $smartFileInfo->getRealPathDirectory();
$relativeTargetFilePath = \sprintf('/Resources/Public/Icons/Extension.%s', $smartFileInfo->getExtension());
return $realPath . $relativeTargetFilePath;
}
}