示例#1
0
 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));
     }
 }
示例#2
0
 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";
 }