public static function getInstanceMtime($section) { if (extension_loaded('apc')) { $cacheId = 'config_' . str_replace('-', '_', $section); $cacheId .= getcwd(); return apc_fetch($cacheId . 'mtime'); } else { $cache = Kwf_Config_Cache::getInstance(); return $cache->test('config_' . str_replace('-', '_', $section)); } }
public static function _handleEvent($event) { $eventStart = microtime(true); Kwf_Cache_Simple::resetZendCache(); //reset to re-fetch namespace if (substr($event->filename, -4) == '.css' || substr($event->filename, -3) == '.js' || substr($event->filename, -9) == '.printcss' || substr($event->filename, -5) == '.scss') { echo "asset modified\n"; if ($event instanceof Event\Modify) { //there is no cache for individual files, scss cache is handled in Kwf_Assets_Dependency_File_Scss using mtime $assetsType = substr($event->filename, strrpos($event->filename, '.') + 1); if ($assetsType == 'scss') { $assetsType = 'css'; } self::_clearAssetsAll($assetsType); if ($assetsType == 'js') { self::_clearAssetsAll('defer.js'); } } else { if ($event instanceof Event\Create || $event instanceof Event\Delete || $event instanceof Event\Move) { self::_clearAssetsDependencies(); $assetsType = substr($event->filename, strrpos($event->filename, '.') + 1); if ($assetsType == 'scss') { $assetsType = 'css'; } self::_clearAssetsAll($assetsType); if ($assetsType == 'js') { self::_clearAssetsAll('defer.js'); } } } } else { if (self::_endsWith($event->filename, '/dependencies.ini')) { if ($event instanceof Event\Modify) { self::_clearAssetsDependencies(); self::_clearAssetsAll(); } } else { if (preg_match('#/config([^/]*)?\\.ini$#', $event->filename)) { //config.ini, configPoi.ini, config.local.ini (in any directory) if ($event instanceof Event\Modify) { $section = call_user_func(array(Kwf_Setup::$configClass, 'getDefaultConfigSection')); $cacheId = 'config_' . str_replace('-', '_', $section); Kwf_Config_Cache::getInstance()->remove($cacheId); echo "removed config cache\n"; $apcCacheId = $cacheId . getcwd(); $cacheIds = array($apcCacheId, $apcCacheId . 'mtime'); $simpleCacheStaticPrefixes = array('config-', 'configAr-'); if (Kwf_Util_Apc::isAvailable()) { self::_clearApcCache(array('cacheIds' => $cacheIds, 'clearCacheSimpleStatic' => $simpleCacheStaticPrefixes)); echo "cleared apc config cache\n"; } else { foreach ($simpleCacheStaticPrefixes as $i) { Kwf_Cache_SimpleStatic::clear($i); } } $cmd = Kwf_Config::getValue('server.phpCli') . " bootstrap.php clear-cache --type=setup"; exec($cmd, $out, $ret); echo "cleared setup.php cache"; if ($ret) { echo " [FAILED]"; } echo "\n"; } } else { if (preg_match('#(Acl|MenuConfig)\\.php$#', $event->filename)) { if ($event instanceof Event\Modify) { Kwf_Acl::clearCache(); echo "cleared acl cache...\n"; } } else { if (self::_endsWith($event->filename, '.twig')) { $loader = new Twig_Loader_Filesystem('.'); $twig = new Twig_Environment($loader, array('cache' => 'cache/twig')); $cacheFile = $event->filename; $cacheFile = substr($cacheFile, strlen(getcwd()) + 1); $cacheFile = $twig->getCacheFilename($cacheFile); if (file_exists($cacheFile)) { unlink($cacheFile); echo "cleared twig cache file '{$cacheFile}' for template '{$event->filename}'\n"; } } } } } } if (self::_startsWith($event->filename, getcwd() . '/components') || self::_startsWith($event->filename, getcwd() . '/theme') || self::_startsWith($event->filename, KWF_PATH . '/Kwc') || defined('VKWF_PATH') && self::_startsWith($event->filename, VKWF_PATH . '/Vkwc')) { $cls = null; foreach (explode(PATH_SEPARATOR, get_include_path()) as $ip) { if (substr($ip, 0, 1) == '.') { $ip = getcwd() . substr($ip, 1); } if (substr($ip, 0, 1) != '/') { $ip = getcwd() . '/' . $ip; } if (self::_startsWith($event->filename, $ip)) { $cls = str_replace('/', '_', substr($event->filename, strlen($ip) + 1, -4)); } } if (!$cls) { echo "unknown component class?!\n"; return; } if (!self::_endsWith($event->filename, '/Component.php')) { //other component file $cls = substr($cls, 0, strrpos($cls, '_')) . '_Component'; } echo "component {$cls}\n"; if (!@class_exists($cls)) { echo "parse error: {$cls}\n"; return; } $matchingClasses = array(); try { foreach (Kwc_Abstract::getComponentClasses() as $c) { if (is_instance_of($c, $cls)) { $matchingClasses[] = $c; } } } catch (Exception $e) { } if (self::_endsWith($event->filename, '/Admin.php') || self::_endsWith($event->filename, '/Master.tpl') || self::_endsWith($event->filename, '/Component.tpl') || self::_endsWith($event->filename, '/Partial.tpl') || self::_endsWith($event->filename, '/Master.twig') || self::_endsWith($event->filename, '/Component.twig') || self::_endsWith($event->filename, '/Partial.twig') || self::_endsWith($event->filename, '/Controller.php') || self::_endsWith($event->filename, '/FrontendForm.php') || self::_endsWith($event->filename, '/Form.php') || self::_endsWith($event->filename, '/Component.css') || self::_endsWith($event->filename, '/Component.scss') || self::_endsWith($event->filename, '/Component.printcss')) { if ($event instanceof Event\Create || $event instanceof Event\Delete) { echo "recalculate 'componentFiles' setting because comopnent file got removed/added...\n"; self::_clearComponentSettingsCache($matchingClasses, 'componentFiles'); } } if (self::_endsWith($event->filename, '/Component.php') || self::_endsWith($event->filename, '/FrontendForm.php')) { if ($event instanceof Event\Modify) { self::_clearComponentSettingsCache($matchingClasses); //view cache can depend on settings $s = new Kwf_Model_Select(); $s->whereEquals('component_class', $matchingClasses); self::_deleteViewCache($s); } } else { if (self::_endsWith($event->filename, '/Component.css') || self::_endsWith($event->filename, '/Component.scss') || self::_endsWith($event->filename, '/Component.printcss')) { //MODIFY already handled above (assets) //CREATE/DELETE also handled above } else { if (self::_endsWith($event->filename, '/Master.tpl') || self::_endsWith($event->filename, '/Master.twig')) { if ($event instanceof Event\Modify) { $s = new Kwf_Model_Select(); //all component_classes $s->whereEquals('type', 'master'); self::_deleteViewCache($s); } } else { if (self::_endsWith($event->filename, '/Component.tpl') || self::_endsWith($event->filename, '/Component.twig')) { if ($event instanceof Event\Modify) { $s = new Kwf_Model_Select(); $s->whereEquals('component_class', $matchingClasses); $s->whereEquals('type', 'component'); $s->whereEquals('renderer', 'component'); self::_deleteViewCache($s); } } else { if (self::_endsWith($event->filename, '/Partial.tpl') || self::_endsWith($event->filename, '/Partial.twig')) { if ($event instanceof Event\Modify) { $s = new Kwf_Model_Select(); $s->whereEquals('component_class', $matchingClasses); $s->whereEquals('type', 'partial'); self::_deleteViewCache($s); } } else { if (self::_endsWith($event->filename, '/Mail.html.tpl') || self::_endsWith($event->filename, '/Mail.html.twig')) { if ($event instanceof Event\Modify) { $s = new Kwf_Model_Select(); $s->whereEquals('component_class', $matchingClasses); $s->whereEquals('type', 'component'); $s->whereEquals('renderer', 'mail_html'); self::_deleteViewCache($s); } } else { if (self::_endsWith($event->filename, '/Mail.txt.tpl') || self::_endsWith($event->filename, '/Mail.txt.twig')) { if ($event instanceof Event\Modify) { $s = new Kwf_Model_Select(); $s->whereEquals('component_class', $matchingClasses); $s->whereEquals('type', 'component'); $s->whereEquals('renderer', 'mail_txt'); self::_deleteViewCache($s); } } } } } } } } } echo "finished in " . round((microtime(true) - $eventStart) * 1000, 2) . "ms\n\n"; }