public function getBlockHtml() { $block = PSCache::NEWS()->getFromCache($this->blockDate); if (!$block) { $block = PSSmarty::template('news/date_news.tpl', array('block' => $this))->fetch(); PSCache::NEWS()->saveToCache($block, $this->blockDate); } return $block; }
public function getStructure() { $cacheId = AuthManager::isAuthorized() ? 'a' : 'na' . '_structure'; $structure = PSCache::POSTS()->getFromCache($cacheId); if (!is_array($structure)) { PsProfiler::inst(__CLASS__)->start('Build structure'); $structure = $this->getStructureImpl()->toArray(); PsProfiler::inst(__CLASS__)->stop(); PSCache::POSTS()->saveToCache($structure, $cacheId); } return $structure; }
protected function __construct() { //Извлекаем все изменённые сущности БД $CHANGED = DbBean::inst()->getChangedEntitys(); if (empty($CHANGED)) { return; //--- } $LOGGER = PsLogger::inst(__CLASS__); $LOGGER->info('Изменённые сущности БД: ' . print_r($CHANGED, true)); foreach ($CHANGED as $chEntity) { $type = $chEntity['v_type']; $entity = $chEntity['v_entity']; $TypeEntity = "{$type} {$entity}"; switch ($type) { /* * 1. Проверим изменённые сущности фолдинга */ case DbBean::CHANGE_FOLD_ENT: $fentity = Handlers::getInstance()->getFoldedEntityByUnique($entity, false); if ($fentity) { $LOGGER->info('[{}] -> Сущность фолдинга [{}]', $TypeEntity, $fentity->getUnique()); FoldedResourcesManager::onEntityAction(FoldedResourcesManager::ACTION_ENTITY_CHANGED_DB, $fentity->getFolding(), $fentity->getIdent()); $fentity->onEntityChanged(); } break; /* * 2. Проверим изменённые таблицы/представления */ /* * 2. Проверим изменённые таблицы/представления */ case DbBean::CHANGE_TABLE: case DbBean::CHANGE_VIEW: /* @var $folding FoldedResources */ foreach (FoldedResourcesManager::inst()->getTableOrViewFoldings($entity) as $folding) { $LOGGER->info('[{}] -> Фолдинг [{}]', $TypeEntity, $folding->getUnique()); $folding->onFoldingChanged(); } foreach (PSCache::inst()->onDbEntityChanged($entity) as $cacheGr) { $LOGGER->info('[{}] -> Группа кеширования [{}]', $TypeEntity, $cacheGr); } break; } } }
protected function executeImpl(ArrayAdapter $params) { $id = $params->str('id'); $type = $params->str('type'); $action = $params->str('action'); switch ($action) { case 'ccache': PSCache::inst()->clean(); break; case 'toggledev': PsGlobals::inst()->getProp('PS_PRODUCTION')->setValue(!PS_PRODUCTION); PsGlobals::inst()->save2file(); break; default: return 'Unknown action'; } return new AjaxSuccess(); }
public function __destruct() { parent::__destruct(); if (!$this->_isConnected) { return false; } $this->_memcacheObj->set('keysCached', $this->_keysCached, 0, 0); $this->_memcacheObj->set('tablesCached', $this->_tablesCached, 0, 0); $this->close(); }
/** * Подписью кеша служит кол-во ячеек, принадлежащих пользователям. */ private function getCachable($key) { $sign = $this->getOwnedCellsCnt(); $DATA = PSCache::MOSAIC()->getFromCache($this->id, PsUtil::getClassConsts(__CLASS__, 'CACHABLE_'), $sign); if (!is_array($DATA)) { $DATA = array(); $ownedCells = $this->BEAN->getOwnedCells($this->id); $sign = count($ownedCells); //Честно посчитаем подпись по кол-ву ячеек, с которым была построена карта $DATA[self::CACHABLE_AREAS] = MosaicImageCellsCompositor::area($ownedCells, $this->cellWidth, $this->cellHeight); $DATA[self::CACHABLE_STATISTIC] = $this->BEAN->getStatictic($this->id); PSCache::MOSAIC()->saveToCache($DATA, $this->id, $sign); } return array_get_value($key, $DATA); }
/** * Метод собирает всю необходимую информацию о галерее и кеширует её для быстрого доступа. */ private function getSnapshot() { $DATA = PSCache::GALLERY()->getFromCache($this->gallery, PsUtil::getClassConsts($this, 'PARAM_')); if (is_array($DATA)) { return $DATA; //--- } $DATA = array(); /* * Информация о галерее (из базы) */ $galleryInfo = GalleryBean::inst()->getGalleryInfo($this->gallery); //name $gallName = $galleryInfo ? trim($galleryInfo['v_name']) : ''; $gallName = $gallName ? $gallName : 'Галерея'; /* * Картинки, входящие в галерею (те, для которых есть запись в БД и b_show=1). * Мы также сразу отсеим те картинки, для которых нет файла на файловой системе, * чтобы потом клиент не делал лишний запрос на наш сервер. */ $galleryImages = GalleryBean::inst()->getGalleryItems($this->gallery, false, $this->getDirectoryImgNames()); //Проведём фетчинг необходимых представлений галереи $SmartyParams['id'] = $this->gallery; $SmartyParams['name'] = $gallName; $SmartyParams['images'] = $galleryImages; //.box_images - блок картинок, который будет преобразован в галерею с помощью js. $imagesHtml = PSSmarty::template('mmedia/gallery/box_images.tpl', $SmartyParams)->fetch(); $imagesHtml = normalize_string($imagesHtml); //.as_list - для отображения списка картинок в popup окне $asListHtml = PSSmarty::template('mmedia/gallery/as_list.tpl', $SmartyParams)->fetch(); $asListHtml = normalize_string($asListHtml); //Все сложим в файл и сохраним в кеш $DATA[self::PARAM_CNT] = count($galleryImages); $DATA[self::PARAM_NAME] = $gallName; $DATA[self::PARAM_ASLIST] = $asListHtml; $DATA[self::PARAM_BOXIMGS] = $imagesHtml; return PSCache::GALLERY()->saveToCache($DATA, $this->gallery); }
public function clean() { PSCache::inst()->cleanCache($this->group); }
protected function loadIdentsRight($mident, array $params, \MappingSource $srcLeft, $lident) { return PSCache::getCacheGroups(); }
public function __destruct() { parent::__destruct(); file_put_contents(_PS_CACHEFS_DIRECTORY_ . 'keysCached', serialize($this->_keysCached)); file_put_contents(_PS_CACHEFS_DIRECTORY_ . 'tablesCached', serialize($this->_tablesCached)); }
public final function onFoldingChanged() { if ($this->foldingChangeNotified) { return; //--- } $this->foldingChangeNotified = true; $this->LOGGER->info('Вызван метод onFoldingChanged.'); FoldedResourcesManager::onEntityAction(FoldedResourcesManager::ACTION_FOLDING_ONCE_CHENGED, $this); PSCache::inst()->onFoldingChanged($this); }
/** * Распечатывает текущее состояние дерева зависимости в лог. * При этом в дереве отмечаются всегда только полностью проверенные сущности. * Если, например, группа зависит от таблиц БД, которые были провалидированы, но при этом * сама группа отмечена, как валидная, то мы увидим подобную картину: * +GALLERY: | Сущности базы: | ps_gallery | ps_gallery_images */ private function logTrees($caption, $doLog = true) { if (!$doLog || !$this->LOGGER->isEnabled()) { return; //--- } $this->LOGGER->infoBox($caption); $GROUPS = PSCache::getCacheGroups(); $hasPrintedGroups = false; foreach ($GROUPS as $group) { $isGroupPrinted = false; foreach ($this->TREE_DEP as $type => $groups2entitys) { if (!array_key_exists($group, $groups2entitys)) { continue; } $valGr = !$this->isGroupValidatable($group); $valType = !$valGr && !$this->isTypeValidateble($type); if ($hasPrintedGroups && !$isGroupPrinted) { $this->LOGGER->info(); } if (!$isGroupPrinted) { $isGroupPrinted = true; $hasPrintedGroups = true; $this->LOGGER->info("\t" . ($valGr ? '+' : '|') . $group . ':'); } else { $this->LOGGER->info("\t|"); } $this->LOGGER->info("\t" . ($valType ? '+' : '|') . "\t{$type}:"); foreach ($groups2entitys[$group] as $child) { $varChild = !$valGr && !$valType && !in_array($child, $this->getChildsForValidate($type, $group)); $this->LOGGER->info("\t" . ($varChild ? '+' : '|') . "\t\t{$child}"); } } } $this->LOGGER->info(pad_left('', ps_strlen($caption) + 4, '+')); $this->LOGGER->info(); }
protected function cacheGroup() { return PSCache::POSTS(); }
/** * Плагины, использованные в постах */ public function getSnapshot() { $SNAPSOT = PSCache::POPUPS()->getFromCache('POPUP_PAGES_SNAPSOT', PsUtil::getClassConsts(__CLASS__, 'CACHABLE_')); if (!is_array($SNAPSOT)) { $this->LOGGER->info('Building plugins SNAPSHOT...'); //Сначала соберём все плагины, использованные в постах $USED = array(); /* @var $pp PostsProcessor */ foreach (Handlers::getInstance()->getPostsProcessors() as $pp) { $pp->preloadAllPostsContent(); /* @var $post Post */ foreach ($pp->getPosts() as $post) { $plugins = $pp->getPostContentProvider($post->getId())->getPostParams()->getUsedPlugins(); if (empty($plugins)) { //В посте не используются плагины continue; } $this->LOGGER->info('Plugins [{}] used in post [{}].', implode(',', $plugins), IdHelper::ident($post)); $USED = array_merge($USED, $plugins); } } $USED = array_unique($USED); $this->LOGGER->info('Full list of used plugins: [{}].', implode(',', $USED)); //Соберём все видимые попап-страницы и плагины $ENTITYS = array(); foreach (array($this->getVisibleClassInsts(), PluginsManager::inst()->getVisibleClassInsts()) as $popups) { foreach ($popups as $ident => $popup) { $visType = $popup->getPopupVisibility(); $take = PopupVis::isAllwaysVisible($visType) || $visType == PopupVis::BYPOST && in_array($ident, $USED); if ($take) { $ENTITYS[] = $popup; } } } //Отсортируем собранные сущности по названию usort($ENTITYS, function ($e1, $e2) { $str1 = $e1 instanceof BasePopupPage ? $e1->getTitle() : $e1->getName(); $str2 = $e2 instanceof BasePopupPage ? $e2->getTitle() : $e2->getName(); return strcasecmp($str1, $str2); }); $VISIBLE = array(); $DEFAULT = array(); foreach ($ENTITYS as $entity) { $visType = $entity->getPopupVisibility(); if ($entity instanceof BasePopupPage) { $type = self::TYPE_PAGE; $ident = $entity->getIdent(); } if ($entity instanceof BasePlugin) { $type = self::TYPE_PLUGIN; $ident = $entity->getIdent(); } $VISIBLE[$type . '_' . $ident] = array('type' => $type, 'ident' => $ident); if ($visType == PopupVis::TRUE_DEFAULT) { $DEFAULT[$type . '_' . $ident] = array('type' => $type, 'ident' => $ident); } } $SNAPSOT = array(self::CACHABLE_VISIBLE => $VISIBLE, self::CACHABLE_DEFAULT => $DEFAULT); $SNAPSOT = PSCache::POPUPS()->saveToCache($SNAPSOT, 'POPUP_PAGES_SNAPSOT'); } return $SNAPSOT; }
$a = array('a' => array('x' => 1, 'y' => 2)); $key = 'M'; $group = 'default'; $group2 = 'default2'; PSCache::inst()->saveToCache($a, $key, $group, 'xxx'); PSCache::inst()->saveToCache(array('a' => 1), '$key', '$group', 'xxx1'); die; echo TestUtils::testProductivity(function () { PSCache::inst()->getFromCache('$key', '$group', null, 'xxx1'); }); print_r(PSCache::inst()->getFromCache($key, $group, array('a'), 'xxx1')); die; print_r(PSCache::inst()->saveToCache($a, $key, $group)); print_r(PSCache::inst()->getFromCache($key, $group)); PSCache::inst()->removeFromCache($key, $group); print_r(PSCache::inst()->getFromCache($key, $group)); die; /* echo PsConnectionPool::params(); */ //print_r(PSDB::getRec('select * from blog_post where id_post=1')); //print_r(InflectsManager::inst()->getInflections('корыто')); //print_r(PsMathRebusSolver::solve('a+df=1aa')); //print_r(PsTable::inst('users')->getColumns()); //echo TexImager::inst()->getImgDi('\alpha'); //echo TexImager::inst()->getImgDi('\sqrt{4}=2'); //$sprite = CssSprite::inst(DirItem::inst('ps-content/sprites/ico')); //echo $sprite->getSpriteSpan('calendar'); //print_r(ConfigIni::cronProcesses()); //$tpl = PSSmarty::template(DirItem::inst(__DIR__, 'mytpl', PsConst::EXT_TPL));
/** * Очистка кеша */ private function cleanFoldedCache($ident) { if ($this->isCanUseCache($ident)) { PSCache::inst()->cleanCache($this->cacheGroup($ident)); } }
/** * Метод строит композицию временной шкалы. * Построенная композиция будет автоматически сохранена в кеш. * Методы были разделены осознанно, возможно нам нужно будет получить именно композицию. * * @return TimeLineItemsComposite */ public final function getTimeLineComposition(ArrayAdapter $params) { $cacheKey = $this->prepareBuildCompositionParamsAndGetCahceKey($params); $this->LOGGER->info('Строим хронологическую шкалу, данные: ' . $cacheKey); $this->profilerStart(__FUNCTION__); try { $composition = $this->buildComposition($params); check_condition($composition instanceof TimeLineItemsComposite, 'Некорректно построена хронологическая шкала'); $this->profilerStop(); $this->LOGGER->info('Шкала успешно построена'); PSCache::TIMELINES()->saveToCache($composition->getTimeLineJson(), $cacheKey); $this->LOGGER->info('Шкала сохранена в кеш под ключём: ' . $cacheKey); return $composition; } catch (Exception $ex) { $this->profilerStop(false); $this->LOGGER->info('Ошибка построения шкалы: ' . $ex->getMessage()); throw $ex; } }
protected function q($query, $use_cache = 1) { global $webservice_call; $this->_result = false; if ($this->_link) { $result = mysql_query($query, $this->_link); $this->_lastQuery = $query; if ($webservice_call) { $this->displayMySQLError($query); } if ($use_cache and _PS_CACHE_ENABLED_) { PSCache::getInstance()->deleteQuery($query); } return $result; } return false; }