* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) */ namespace PrestaShop\Module\AutoUpgrade\UpgradeTools; use Exception; use PrestaShop\Module\AutoUpgrade\Log\LoggerInterface; use PrestaShop\Module\AutoUpgrade\UpgradeContainer; class CacheCleaner { /** * @var UpgradeContainer */ private $container; /** * @var LoggerInterface */ private $logger; public function __construct(UpgradeContainer $container, LoggerInterface $logger) { $this->container = $container; $this->logger = $logger; } /** * @throws Exception */ public function cleanFolders(): void { $dirsToClean = [ $this->container->getProperty(UpgradeContainer::PS_ROOT_PATH) . '/app/cache/', $this->container->getProperty(UpgradeContainer::PS_ROOT_PATH) . '/cache/smarty/cache/', $this->container->getProperty(UpgradeContainer::PS_ROOT_PATH) . '/cache/smarty/compile/', $this->container->getProperty(UpgradeContainer::PS_ROOT_PATH) . '/var/cache/', ]; $defaultThemeNames = [ 'default', 'prestashop', 'default-boostrap', 'classic', ]; if (defined('_THEME_NAME_') && $this->container->getUpgradeConfiguration()->shouldUpdateDefaultTheme() && in_array(_THEME_NAME_, $defaultThemeNames)) { $dirsToClean[] = $this->container->getProperty(UpgradeContainer::PS_ROOT_PATH) . '/themes/' . _THEME_NAME_ . '/cache/'; } foreach ($dirsToClean as $dir) { if (!file_exists($dir)) { $this->logger->debug($this->container->getTranslator()->trans('[SKIP] directory "%s" does not exist and cannot be emptied.', [str_replace($this->container->getProperty(UpgradeContainer::PS_ROOT_PATH), '', $dir)])); continue; } foreach (scandir($dir) as $file) { if ($file[0] === '.' || $file === 'index.php') { continue; } // ToDo: Use Filesystem instead ? if (is_file($dir . $file)) { unlink($dir . $file); } elseif (is_dir($dir . $file . DIRECTORY_SEPARATOR)) { FilesystemAdapter::deleteDirectory($dir . $file . DIRECTORY_SEPARATOR); } $this->logger->debug($this->container->getTranslator()->trans('[CLEANING CACHE] File %s removed', [$file])); } } } }