Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 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;
 }