public function __construct(Kwf_Component_Renderer_Abstract $renderer) { parent::__construct(); $this->addGlobal('renderer', new Kwf_Component_Renderer_Twig_Helper($renderer)); $this->addFilter(new Twig_SimpleFilter('bemClass', array('Kwf_Component_Renderer_Twig_Environment', 'bemClass'), array('needs_context' => true))); $this->addFunction('includeCode', new Twig_SimpleFunction('includeCode', array($this, 'includeCode'), array('needs_context' => true))); $this->_renderer = $renderer; }
public function __construct(Kwf_Component_Renderer_Abstract $renderer) { parent::__construct(); $this->addGlobal('renderer', new Kwf_Component_Renderer_Twig_Helper($renderer)); }
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, -4) == '.jsx' || substr($event->filename, -5) == '.scss' || substr($event->filename, -15) == '.underscore.tpl') { 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'; } if ($assetsType == 'tpl') { $assetsType = 'js'; } if ($assetsType == 'jsx') { $assetsType = 'js'; } self::_clearAssetsAll($assetsType); } 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'; } if ($assetsType == 'tpl') { $assetsType = 'js'; } self::_clearAssetsAll($assetsType); } } } 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')) { $twig = new Kwf_View_Twig_Environment(); $cacheFile = $event->filename; $cacheFile = substr($cacheFile, strlen(getcwd()) + 1); $cacheFile = $twig->getCache(false)->generateKey(null, $twig->getTemplateClass($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')) { 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 self::_deleteViewCache(array(array('component_class' => $matchingClasses))); } } else { if (self::_endsWith($event->filename, '/Component.css') || self::_endsWith($event->filename, '/Component.scss')) { //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) { //all component_classes self::_deleteViewCache(array(array('type' => 'master'))); } } else { if (self::_endsWith($event->filename, '/Component.tpl') || self::_endsWith($event->filename, '/Component.twig')) { if ($event instanceof Event\Modify) { self::_deleteViewCache(array(array('component_class' => $matchingClasses, 'type' => 'component', 'renderer' => 'component'))); } } 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(array(array('component_class' => $matchingClasses, 'type' => 'partial'))); } } else { if (self::_endsWith($event->filename, '/Mail.html.tpl') || self::_endsWith($event->filename, '/Mail.html.twig')) { if ($event instanceof Event\Modify) { self::_deleteViewCache(array(array('component_class' => $matchingClasses, 'type' => 'component', 'renderer' => 'mail_html'))); } } else { if (self::_endsWith($event->filename, '/Mail.txt.tpl') || self::_endsWith($event->filename, '/Mail.txt.twig')) { if ($event instanceof Event\Modify) { self::_deleteViewCache(array(array('component_class' => $matchingClasses, 'type' => 'component', 'renderer' => 'mail_txt'))); } } } } } } } } } echo "finished in " . round((microtime(true) - $eventStart) * 1000, 2) . "ms\n\n"; }