private static function _clearComponentSettingsCache($componentClasses, $setting = null) { Kwf_Component_Abstract::resetSettingsCache(); $settings = Kwf_Component_Settings::_getSettingsCached(); $dependenciesChanged = false; $generatorssChanged = false; $dimensionsChanged = false; $menuConfigChanged = false; foreach ($componentClasses as $c) { Kwf_Component_Settings::$_rebuildingSettings = true; if ($setting) { //a single setting changed $newSettings = $settings[$c]; $newSettings[$setting] = Kwc_Abstract::getSetting($c, $setting); } else { //all settings might have changed $newSettings = Kwf_Component_Settings::_getSettingsIncludingPreComputed($c); } Kwf_Component_Settings::$_rebuildingSettings = false; if ($newSettings['assets'] != $settings[$c]['assets'] || $newSettings['assetsAdmin'] != $settings[$c]['assetsAdmin']) { $dependenciesChanged = true; } if ($newSettings['generators'] != $settings[$c]['generators']) { $generatorssChanged = true; $oldChildComponentClasses = self::_getComponentClassesFromGeneratorsSetting($settings[$c]['generators']); $newChildComponentClasses = self::_getComponentClassesFromGeneratorsSetting($newSettings['generators']); } if (isset($newSettings['dimensions']) && $newSettings['dimensions'] != $settings[$c]['dimensions']) { $dimensionsChanged = true; } if (isset($newSettings['menuConfig']) && $newSettings['menuConfig'] != $settings[$c]['menuConfig']) { $menuConfigChanged = true; } $settings[$c] = $newSettings; } echo "refreshed component settings cache...\n"; if ($dependenciesChanged) { echo "assets changed...\n"; self::_clearAssetsDependencies(); self::_clearAssetsAll(); } $clearCacheSimpleStatic = array('has-', 'cs-', 'flag-', 'componentClasses-', 'recCCGen-', 'genInst-', 'childComponentClasses-'); if ($generatorssChanged) { echo "generators changed...\n"; echo count(Kwc_Abstract::getComponentClasses()) . " component classes (previously)\n"; $m = Kwf_Component_Cache::getInstance()->getModel('url'); foreach ($m->getRows() as $r) { Kwf_Cache_Simple::delete('url-' . $r->url); $r->delete(); } foreach ($newChildComponentClasses as $cmpClass) { if (!in_array($cmpClass, Kwc_Abstract::getComponentClasses())) { self::_loadSettingsRecursive($settings, $cmpClass); } } $removedComponentClasses = array_diff($oldChildComponentClasses, $newChildComponentClasses); foreach ($removedComponentClasses as $removedCls) { self::_removeSettingsRecursive($settings, $removedCls); } } file_put_contents('build/component/settings', serialize($settings)); echo "cleared component settings apc cache...\n"; if (Kwf_Util_Apc::isAvailable()) { self::_clearApcCache(array('clearCacheSimpleStatic' => $clearCacheSimpleStatic)); } else { foreach ($clearCacheSimpleStatic as $i) { Kwf_Cache_SimpleStatic::clear($i); } } echo "\n"; if ($dimensionsChanged) { echo "dimensions changed...\n"; $clearCacheSimple = array(); foreach ($componentClasses as $c) { $idPrefix = str_replace(array('.', '>'), array('___', '____'), $c) . '_'; $clearCacheSimple[] = 'media-output-' . $idPrefix; $clearCacheSimple[] = 'media-output-mtime-' . $idPrefix; foreach (glob('cache/media/' . $idPrefix . '*') as $f) { echo $f . " [DELETED]\n"; unlink($f); } } Kwf_Cache_Simple::delete($clearCacheSimple); echo "cleared media cache...\n"; } if ($menuConfigChanged) { echo "menu config changed...\n"; Kwf_Acl::clearCache(); echo "cleared acl cache...\n"; } $dependentComponentClasses = array(); foreach (Kwc_Abstract::getComponentClasses() as $c) { if (strpos($c, '.') !== false) { $params = substr($c, strpos($c, '.') + 1); foreach ($componentClasses as $i) { if (strpos($params, $i) !== false) { $dependentComponentClasses[] = $c; } } } } if ($dependentComponentClasses) { echo "dependent componentClasses: " . count($dependentComponentClasses) . " (Cc, Trl)\n"; echo implode(', ', $dependentComponentClasses) . "\n"; self::_clearComponentSettingsCache($dependentComponentClasses, $setting); } }
public function getTypes() { $types = array(); $simpleCacheBackend = Kwf_Cache_Simple::getBackend(); if ($simpleCacheBackend == 'memcache' || $simpleCacheBackend == 'elastiCache') { $types[] = new Kwf_Util_ClearCache_Types_SimpleCache(); } if (Kwf_Util_Apc::isAvailable()) { $types[] = new Kwf_Util_ClearCache_Types_ApcUser(); $types[] = new Kwf_Util_ClearCache_Types_ApcOptcode(); } foreach ($this->_getCacheDirs() as $d) { if ($d != 'config' && $d != 'assets' && $d != 'trl' && $d != 'view') { $types[] = new Kwf_Util_ClearCache_Types_Dir($d); } } foreach ($this->_getDbCacheTables() as $t) { if ($t == 'cache_component') { $types[] = new Kwf_Util_ClearCache_Types_TableComponentView(); } else { if ($t == 'cache_component_includes') { //never completely clear that table as it would break clearing fullPage cache } else { if ($t == 'cache_users') { //skip, needed during update } else { $types[] = new Kwf_Util_ClearCache_Types_Table($t); } } } } if (Kwf_Config::getValue('assetsCacheUrl')) { $types[] = new Kwf_Util_ClearCache_Types_AssetsServer(); } $types[] = new Kwf_Util_ClearCache_Types_Config(); $types[] = new Kwf_Util_ClearCache_Types_Setup(); $types[] = new Kwf_Util_ClearCache_Types_Assets(); if (!Kwf_Config::getValue('clearCacheSkipProcessControl') && VENDOR_PATH != '../vendor') { $types[] = new Kwf_Util_ClearCache_Types_ProcessControl(); } return $types; }
public function getTypes() { $types = array(); $simpleCacheBackend = Kwf_Cache_Simple::getBackend(); if ($simpleCacheBackend == 'memcache' || $simpleCacheBackend == 'redis') { $types[] = new Kwf_Util_ClearCache_Types_SimpleCache(); } if (Kwf_Util_Apc::isAvailable()) { $types[] = new Kwf_Util_ClearCache_Types_ApcUser(); $types[] = new Kwf_Util_ClearCache_Types_ApcOptcode(); } foreach ($this->_getCacheDirs() as $d) { if ($d != 'config' && $d != 'assets' && $d != 'trl' && $d != 'view') { $types[] = new Kwf_Util_ClearCache_Types_Dir($d); } } if (Kwf_Component_Data_Root::getInstance()) { $types[] = new Kwf_Util_ClearCache_Types_ComponentView(); $types[] = new Kwf_Util_ClearCache_Types_ComponentUrl(); } foreach ($this->_getDbCacheTables() as $t) { if ($t == 'cache_component' || $t == 'cache_component_includes' || $t == 'cache_component_url') { //never completely clear that table as it would break clearing fullPage cache } else { if ($t == 'cache_users') { //skip, needed during update } else { $types[] = new Kwf_Util_ClearCache_Types_Table($t); } } } $types[] = new Kwf_Util_ClearCache_Types_Config(); $types[] = new Kwf_Util_ClearCache_Types_Setup(); $types[] = new Kwf_Util_ClearCache_Types_Assets(); if (file_exists('symfony/bin/console')) { $types[] = new Kwf_Util_ClearCache_Types_Symfony(); } if (!Kwf_Config::getValue('clearCacheSkipProcessControl') && VENDOR_PATH != '../vendor') { $types[] = new Kwf_Util_ClearCache_Types_ProcessControl(); } $ev = new Kwf_Events_Event_FetchClearCacheTypes(get_class($this)); Kwf_Events_Dispatcher::fireEvent($ev); $types = array_merge($types, $ev->types); return $types; }