Spaces:
No application file
No application file
namespace Mautic\CoreBundle\Helper; | |
use Symfony\Bundle\FrameworkBundle\Console\Application; | |
use Symfony\Component\Console\Input\ArrayInput; | |
use Symfony\Component\Console\Output\BufferedOutput; | |
use Symfony\Component\Filesystem\Filesystem; | |
use Symfony\Component\HttpFoundation\Session\Session; | |
use Symfony\Component\HttpKernel\KernelInterface; | |
class CacheHelper | |
{ | |
public function __construct( | |
private string $cacheDir, | |
private ?Session $session, | |
private PathsHelper $pathsHelper, | |
private KernelInterface $kernel | |
) { | |
} | |
/** | |
* Deletes the cache folder. | |
*/ | |
public function nukeCache(): void | |
{ | |
$this->clearSessionItems(); | |
$fs = new Filesystem(); | |
$fs->remove($this->cacheDir); | |
$this->clearOpcache(); | |
$this->clearApcuCache(); | |
} | |
public function refreshConfig(): void | |
{ | |
$this->clearSessionItems(); | |
$this->clearConfigOpcache(); | |
$this->clearApcuCache(); | |
} | |
/** | |
* Run the bin/console cache:clear command. | |
*/ | |
public function clearSymfonyCache(): int | |
{ | |
$env = $this->kernel->getEnvironment(); | |
$application = new Application($this->kernel); | |
$application->setAutoExit(false); | |
$input = new ArrayInput([ | |
'command' => 'cache:clear', | |
'--env' => $env, | |
]); | |
$output = new BufferedOutput(); | |
return $application->run($input, $output); | |
} | |
/** | |
* Clear cache related session items. | |
*/ | |
protected function clearSessionItems(): void | |
{ | |
if (!$this->session) { | |
return; | |
} | |
// Clear the menu items and icons so they can be rebuilt | |
$this->session->remove('mautic.menu.items'); | |
$this->session->remove('mautic.menu.icons'); | |
} | |
private function clearConfigOpcache(): void | |
{ | |
if (!function_exists('opcache_reset') || !function_exists('opcache_invalidate')) { | |
return; | |
} | |
opcache_invalidate($this->pathsHelper->getLocalConfigurationFile(), true); | |
} | |
private function clearOpcache(): void | |
{ | |
if (!function_exists('opcache_reset')) { | |
return; | |
} | |
opcache_reset(); | |
} | |
private function clearApcuCache(): void | |
{ | |
if (!function_exists('apcu_clear_cache')) { | |
return; | |
} | |
apcu_clear_cache(); | |
} | |
} | |