public function onComponentAdded(Kwf_Component_Event_Component_Added $ev)
 {
     $page = $ev->component->getPage();
     if ($page) {
         $cacheId = 'reqHttps-' . $page->componentId;
         Kwf_Cache_Simple::delete($cacheId);
     }
 }
示例#2
0
 private function _deleteCache($dbId)
 {
     foreach (Kwf_Component_Data_Root::getInstance()->getComponentsByDbId($dbId) as $c) {
         foreach (array('intern', 'external') as $i) {
             $cacheId = 'articleCategoryCount' . $c->componentId . $i;
             Kwf_Cache_Simple::delete($cacheId);
         }
     }
 }
 public function onComponentAddedOrRemoved(Kwf_Component_Event_Component_Abstract $event)
 {
     $cacheId = 'procI-' . $event->component->getPageOrRoot()->componentId;
     Kwf_Cache_Simple::delete($cacheId);
     $log = Kwf_Events_Log::getInstance();
     if ($log) {
         $log->log("processInput cache clear componentId=" . $event->component->getPageOrRoot()->componentId, Zend_Log::INFO);
     }
 }
 public function onRowUpdatesFinished(Kwf_Events_Event_Row_UpdatesFinished $event)
 {
     if (count($this->_orExpr->getExpressions())) {
         $select = new Kwf_Model_Select();
         $select->where($this->_orExpr);
         $rows = Kwf_Component_Cache::getInstance()->getModel('url')->export(Kwf_Model_Abstract::FORMAT_ARRAY, $select);
         foreach ($rows as $row) {
             $cacheId = 'url-' . $row['url'];
             Kwf_Cache_Simple::delete($cacheId);
         }
     }
 }
示例#5
0
 private function _deleteCache($event)
 {
     $page = $event->component->getParentPageOrRoot()->getParentPageOrRoot();
     $d = $page;
     while ($d) {
         if (Kwc_Abstract::getFlag($d->componentClass, 'subroot') || $d->componentId == 'root') {
             Kwf_Cache_Simple::delete('kwcMenuMobile-root-' . $d->componentId);
             break;
         } else {
             if ($d->isPage) {
                 Kwf_Cache_Simple::delete('kwcMenuMobile-' . $d->componentId);
                 break;
             }
         }
         $d = $d->parent;
     }
 }
 public function clean()
 {
     $be = Kwf_Cache_Simple::getBackend();
     if ($be == 'memcache') {
         $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-';
         foreach ($this->_getSecondLevelCache()->getIds() as $id) {
             Kwf_Cache_Simple::getMemcache()->delete($prefix . $id);
         }
     } else {
         if ($be == 'file') {
             //use secondlevel cache only
         } else {
             foreach ($this->_getSecondLevelCache()->getIds() as $id) {
                 Kwf_Cache_Simple::delete('media-' . $id);
             }
         }
     }
     $this->_getSecondLevelCache()->clean();
 }
示例#7
0
 public function onFavouriteRemove(Kwf_Events_Event_Row_Abstract $event)
 {
     $favourite = $event->row;
     $cacheIdUser = '******' . $favourite->user_id;
     $cacheUser = Kwf_Cache_Simple::fetch($cacheIdUser, $success);
     if ($success) {
         Kwf_Cache_Simple::delete($cacheIdUser);
         $key = array_search($favourite->component_id, $cacheUser);
         unset($cacheUser[$key]);
         Kwf_Cache_Simple::add($cacheIdUser, $cacheUser);
     }
 }
示例#8
0
 public static function clearCache()
 {
     $cacheId = 'acl';
     Kwf_Cache_Simple::delete($cacheId);
 }
示例#9
0
 public static function dispatchUtils()
 {
     if ($_POST['password'] != self::_getHttpPassword()) {
         throw new Kwf_Exception_AccessDenied();
     }
     $uri = $_SERVER['REQUEST_URI'];
     $baseUrl = Kwf_Setup::getBaseUrl();
     if ($baseUrl && substr($uri, 0, strlen($baseUrl)) == $baseUrl) {
         $uri = substr($uri, strlen($baseUrl));
     }
     if (substr($uri, 0, 25) == '/kwf/util/apc/clear-cache') {
         $s = microtime(true);
         if (isset($_REQUEST['deleteCacheSimple'])) {
             foreach (explode(',', $_REQUEST['deleteCacheSimple']) as $id) {
                 Kwf_Cache_Simple::delete($id);
             }
         }
         if (isset($_REQUEST['clearCacheSimpleStatic'])) {
             foreach (explode(',', $_REQUEST['clearCacheSimpleStatic']) as $id) {
                 Kwf_Cache_SimpleStatic::clear($id);
             }
         }
         if (isset($_REQUEST['deleteCacheSimpleStatic'])) {
             foreach (explode(',', $_REQUEST['deleteCacheSimpleStatic']) as $id) {
                 Kwf_Cache_SimpleStatic::delete($id);
             }
         }
         if (isset($_REQUEST['cacheIds'])) {
             foreach (explode(',', $_REQUEST['cacheIds']) as $cacheId) {
                 apc_delete($cacheId);
             }
         }
         if (isset($_REQUEST['files']) && function_exists('apc_delete_file')) {
             foreach (explode(',', $_REQUEST['files']) as $file) {
                 @apc_delete_file($file);
             }
         } else {
             if (isset($_REQUEST['type']) && $_REQUEST['type'] == 'user') {
                 if (extension_loaded('apcu')) {
                     apc_clear_cache();
                 } else {
                     apc_clear_cache('user');
                 }
             } else {
                 if (!extension_loaded('apcu')) {
                     apc_clear_cache('file');
                 }
             }
         }
         echo 'OK ' . round((microtime(true) - $s) * 1000) . ' ms';
         exit;
     } else {
         if (substr($uri, 0, 24) == '/kwf/util/apc/save-cache') {
             $data = unserialize($_REQUEST['data']);
             if (apc_store($_REQUEST['id'], $data)) {
                 echo 'OK';
             } else {
                 echo 'ERROR';
             }
             exit;
         } else {
             if (substr($uri, 0, 31) == '/kwf/util/apc/get-counter-value') {
                 $prefix = Kwf_Cache::getUniquePrefix() . 'bench-';
                 echo apc_fetch($prefix . $_GET['name']);
                 exit;
             } else {
                 if ($uri == '/kwf/util/apc/stats') {
                     self::stats();
                 } else {
                     if ($uri == '/kwf/util/apc/iterate') {
                         self::iterate();
                     } else {
                         if ($uri == '/kwf/util/apc/is-loaded') {
                             if (extension_loaded('apc')) {
                                 echo 'OK1';
                             } else {
                                 echo 'OK0';
                             }
                             exit;
                         } else {
                             if ($uri == '/kwf/util/apc/get-hostname') {
                                 echo php_uname('n');
                                 exit;
                             }
                         }
                     }
                 }
             }
         }
     }
     throw new Kwf_Exception_NotFound();
 }
示例#10
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);
     }
 }
示例#11
0
 private function _duplicatePageRecursive($parentSourceId, $parentTargetId, $childId, Zend_ProgressBar $progressBar = null)
 {
     $pd = $this->_getPageData($childId);
     if ($progressBar) {
         $progressBar->next(1, trlKwf("Pasting {0}", $pd['name']));
     }
     $data = array();
     $data['parent_id'] = Kwf_Component_Data_Root::getInstance()->getComponentById($parentTargetId, array('ignoreVisible' => true))->dbId;
     $sourceRow = $this->getModel()->getRow($childId);
     if ($sourceRow->is_home) {
         //copy is_home only if target has no home yet
         $t = Kwf_Component_Data_Root::getInstance()->getComponentById($parentTargetId, array('ignoreVisible' => true));
         while ($t && !Kwc_Abstract::getFlag($t->componentClass, 'hasHome')) {
             $t = $t->parent;
         }
         if (!$t || $t->getChildPage(array('home' => true, 'ignoreVisible' => true), array())) {
             $data['is_home'] = false;
         }
     }
     $newRow = $sourceRow->duplicate($data);
     //clear cache in here as while duplicating the modelobserver might be disabled
     Kwf_Cache_Simple::delete('pcIds-' . $newRow->parent_id);
     //ids are numeric, we don't have to use parentSource/parentTarget
     $source = Kwf_Component_Data_Root::getInstance()->getComponentById($childId, array('ignoreVisible' => true));
     $target = Kwf_Component_Data_Root::getInstance()->getComponentById($newRow->id, array('ignoreVisible' => true));
     if (!$target) {
         throw new Kwf_Exception("didn't find just duplicated component '{$newRow->id}' below '{$parentTarget->componentId}'");
     }
     Kwc_Admin::getInstance($source->componentClass)->duplicate($source, $target, $progressBar);
     $sourceId = $source->componentId;
     $targetId = $target->componentId;
     unset($source);
     unset($target);
     unset($sourceRow);
     unset($newRow);
     /*
     echo round(memory_get_usage()/1024/1024, 2)."MB";
     echo " gen: ".Kwf_Component_Generator_Abstract::$objectsCount.', ';
     echo " data: ".Kwf_Component_Data::$objectsCount.', ';
     echo " row: ".Kwf_Model_Row_Abstract::$objectsCount.'';
     $s = microtime(true);
     */
     Kwf_Component_Data_Root::getInstance()->freeMemory();
     /*
     echo ' / '.round((microtime(true)-$s)*1000, 2).' ms ';
     echo ' / '.round(memory_get_usage()/1024/1024, 2)."MB";
     echo " gen: ".Kwf_Component_Generator_Abstract::$objectsCount.', ';
     echo " data: ".Kwf_Component_Data::$objectsCount.', ';
     echo " row: ".Kwf_Model_Row_Abstract::$objectsCount.'';
     //var_dump(Kwf_Model_Row_Abstract::$objectsByModel);
     //var_dump(Kwf_Component_Data::$objectsById);
     echo "\n";
     */
     foreach ($this->_getChildPageIds($childId) as $i) {
         if ($i != $targetId) {
             //no endless recursion id page is pasted below itself
             $this->_duplicatePageRecursive($sourceId, $targetId, $i, $progressBar);
         }
     }
     return $targetId;
 }
 public function clean()
 {
     $be = Kwf_Cache_Simple::getBackend();
     if ($be == 'memcache') {
         $prefix = Kwf_Cache_Simple::getUniquePrefix() . '-media-';
         foreach ($this->_getSecondLevelCache()->getIds() as $id) {
             Kwf_Cache_Simple::getMemcache()->delete($prefix . $id);
         }
     } else {
         if ($be == 'redis') {
             $prefixLength = strlen(Kwf_Cache_Simple::getRedis()->_prefix(''));
             $it = null;
             while ($keys = Kwf_Cache_Simple::getRedis()->scan($it, Kwf_Cache_Simple::getRedis()->_prefix('media:*'))) {
                 foreach ($keys as $k => $i) {
                     $keys[$k] = substr($i, $prefixLength);
                 }
                 Kwf_Cache_Simple::getRedis()->delete($keys);
             }
         } else {
             if ($be == 'file') {
                 //use secondlevel cache only
             } else {
                 foreach ($this->_getSecondLevelCache()->getIds() as $id) {
                     Kwf_Cache_Simple::delete('media-' . $id);
                 }
             }
         }
     }
     $this->_getSecondLevelCache()->clean();
     $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(Kwf_Config::getValue('mediaCacheDir'), RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
     foreach ($files as $fileinfo) {
         if ($fileinfo->getFilename() == '.gitignore') {
             continue;
         }
         $todo = $fileinfo->isDir() ? 'rmdir' : 'unlink';
         $todo($fileinfo->getRealPath());
     }
 }
示例#13
0
 protected function _afterDeleteRows($where)
 {
     parent::_afterDeleteRows($where);
     $cacheIds = array();
     foreach ($this->getIds($where) as $id) {
         $cacheIds[] = $this->_getCacheId($id);
     }
     Kwf_Cache_Simple::delete($cacheIds);
 }
 public function onRowUpdatesFinished(Kwf_Events_Event_Row_UpdatesFinished $event)
 {
     Kwf_Cache_Simple::delete($this->_deferredDeleteCacheIds);
     $this->_deferredDeleteCacheIds = array();
 }
 private function _deleteChildPageIdsCache($parentId)
 {
     Kwf_Cache_Simple::delete('pcIds-' . $parentId);
     if (!is_numeric($parentId)) {
         //when parentId is non-numeric LIKE $parentId% is used in query so we need to delete more:
         // root-main (that's whats in parent_id column) and root (that's used eg. when resolving urls)
         $pid = substr($parentId, 0, max(strrpos($parentId, '-'), strrpos($parentId, '_')));
         Kwf_Cache_Simple::delete('pcIds-' . $pid);
     }
 }