. * */ namespace Vvveb\System; use function Vvveb\globBrace; class CacheManager { private static function clearFolder($folder, $root = DIR_PUBLIC) { $name = $root . $folder . DS; $glob = ['*', '*/*', '*/*/*']; $files = globBrace($name,$glob); if ($files) { foreach ($files as $file) { if ($file[0] === '.') { continue; } if (! @unlink($file)) { clearstatcache(false, $file); } } } return true; } public static function clearFrontend() { return self :: clearFolder('assets-cache'); } public static function clearModelCache() { return self :: clearFolder('model' . DS . 'app', DIR_STORAGE) && self :: clearFolder('model' . DS . 'admin', DIR_STORAGE); } public static function clearImageCache() { return self :: clearFolder('image-cache'); } public static function clearCompiledFiles($app = false, $site_id = false, $theme = false, $module = false) { $name = DIR_COMPILED_TEMPLATES; if ($app) { $name .= "{$app}_"; } if ($site_id) { $name .= "{$site_id}_"; } if ($theme) { $name .= "{$theme}_"; } if ($module) { $name .= $module; } $name .= '*'; $files = glob($name); if ($files) { foreach ($files as $file) { if ($file[0] === '.') { continue; } if (! @unlink($file)) { clearstatcache(false, $file); } } } return true; } public static function clearObjectCache($namespace = '', $key = '') { $cacheDriver = Cache::getInstance(); return $cacheDriver->delete($namespace, $key); } public static function clearPageCache($host = null, $path = '') { $pageCache = new PageCache($host); return $pageCache->purge($path); } public static function delete($namespace = '') { self :: clearModelCache($namespace); self :: clearObjectCache($namespace); self :: clearCompiledFiles($namespace); self :: clearPageCache(); if (function_exists('opcache_reset')) { @opcache_reset(); } return true; } }