作者:ascertai
项目:NGsho
/**
* Runs update index for all tenants
* - but does not run processPreparationQueue or processUpdateIndexQueue
*
* @param $objectListClass
* @param string $condition
* @param bool $updateIndexStructures
* @param string $loggername
*/
public static function updateIndex($objectListClass, $condition = "", $updateIndexStructures = false, $loggername = "indexupdater")
{
$updater = OnlineShop_Framework_Factory::getInstance()->getIndexService();
if ($updateIndexStructures) {
\Pimcore\Model\Cache::clearTag("ecommerceconfig");
$updater->createOrUpdateIndexStructures();
}
$page = 0;
$pageSize = 100;
$count = $pageSize;
while ($count > 0) {
self::log($loggername, "=========================");
self::log($loggername, "Update Index Page: " . $page);
self::log($loggername, "=========================");
$products = new $objectListClass();
$products->setUnpublished(true);
$products->setOffset($page * $pageSize);
$products->setLimit($pageSize);
$products->setObjectTypes(array("object", "folder", "variant"));
$products->setIgnoreLocalizedFields(true);
$products->setCondition($condition);
foreach ($products as $p) {
self::log($loggername, "Updating product " . $p->getId());
$updater->updateIndex($p);
}
$page++;
$count = count($products->getObjects());
Pimcore::collectGarbage();
}
}
作者:ascertai
项目:NGsho
public function __construct($config)
{
if (!(string) $config->disableDefaultTenant) {
$this->defaultWorker = new OnlineShop_Framework_IndexService_Tenant_Worker_DefaultMysql(new OnlineShop_Framework_IndexService_Tenant_Config_DefaultMysql("default", $config));
}
$this->tenantWorkers = array();
if ($config->tenants && $config->tenants instanceof Zend_Config) {
foreach ($config->tenants as $name => $tenant) {
$tenantConfigClass = (string) $tenant->class;
$tenantConfig = $tenant;
if ($tenant->file) {
if (!($tenantConfig = \Pimcore\Model\Cache::load("onlineshop_config_assortment_tenant_" . $tenantConfigClass))) {
$tenantConfig = new Zend_Config_Xml(PIMCORE_DOCUMENT_ROOT . (string) $tenant->file, null, true);
$tenantConfig = $tenantConfig->tenant;
\Pimcore\Model\Cache::save($tenantConfig, "onlineshop_config_assortment_tenant_" . $tenantConfigClass, array("ecommerceconfig"), 9999);
}
}
/**
* @var $tenantConfig OnlineShop_Framework_IndexService_Tenant_IConfig
*/
$tenantConfig = new $tenantConfigClass($name, $tenantConfig, $config);
$worker = $tenantConfig->getTenantWorker();
$this->tenantWorkers[$name] = $worker;
}
}
}
作者:pawansgi9
项目:pimcore
public function jobProceduralAction()
{
$status = array("success" => true);
if ($this->getParam("type") == "files") {
Update::installData($this->getParam("revision"));
} else {
if ($this->getParam("type") == "clearcache") {
\Pimcore\Model\Cache::clearAll();
} else {
if ($this->getParam("type") == "preupdate") {
$status = Update::executeScript($this->getParam("revision"), "preupdate");
} else {
if ($this->getParam("type") == "postupdate") {
$status = Update::executeScript($this->getParam("revision"), "postupdate");
} else {
if ($this->getParam("type") == "cleanup") {
Update::cleanup();
} else {
if ($this->getParam("type") == "languages") {
Update::downloadLanguage();
}
}
}
}
}
}
$this->_helper->json($status);
}
作者:ChristophWurs
项目:pimcor
public function jobProceduralAction()
{
$status = array("success" => true);
if ($this->getParam("type") == "files") {
Update::installData($this->getParam("revision"));
} else {
if ($this->getParam("type") == "clearcache") {
\Pimcore\Model\Cache::clearAll();
} else {
if ($this->getParam("type") == "preupdate") {
$status = Update::executeScript($this->getParam("revision"), "preupdate");
} else {
if ($this->getParam("type") == "postupdate") {
$status = Update::executeScript($this->getParam("revision"), "postupdate");
} else {
if ($this->getParam("type") == "cleanup") {
Update::cleanup();
}
}
}
}
}
// we use pure PHP here, otherwise this can cause issues with dependencies that changed during the update
header("Content-type: application/json");
echo json_encode($status);
exit;
}
作者:Gerhard1
项目:pimcor
/**
*
*/
public function dispatchLoopShutdown()
{
$code = (string) $this->getResponse()->getHttpResponseCode();
if ($code && ($code[0] == "4" || $code[0] == "5")) {
$this->writeLog();
// put the response into the cache, this is read in Pimcore_Controller_Action_Frontend::checkForErrors()
$responseData = $this->getResponse()->getBody();
if (strlen($responseData) > 20) {
$cacheKey = "error_page_response_" . \Pimcore\Tool\Frontend::getSiteKey();
\Pimcore\Model\Cache::save($responseData, $cacheKey, array("output"), 900, 9992);
}
}
}
作者:ascertai
项目:NGsho
/**
* gets mockup from cache and if not in cache, adds it to cache
*
* @param $objectId
* @return OnlineShop_Framework_ProductList_DefaultMockup
*/
public function getMockupFromCache($objectId)
{
$key = $this->createMockupCacheKey($objectId);
$cachedItem = \Pimcore\Model\Cache::load($key);
if ($cachedItem) {
$mockup = unserialize($cachedItem);
if ($mockup instanceof OnlineShop_Framework_ProductList_DefaultMockup) {
return $mockup;
}
}
Logger::info("Element with ID {$objectId} was not found in cache, trying to put it there.");
return $this->saveToMockupCache($objectId);
}
作者:ChristophWurs
项目:pimcor
/**
* @param $domain
*/
public function __construct($domain)
{
$this->_domain = $domain;
try {
$robotsUrl = $domain . '/robots.txt';
$cacheKey = "robots_" . crc32($robotsUrl);
if (!($robotsTxt = Cache::load($cacheKey))) {
$robotsTxt = \Pimcore\Tool::getHttpData($robotsUrl);
Cache::save($robotsTxt, $cacheKey, array("system"), 3600, 999, true);
}
$this->_rules = $this->_makeRules($robotsTxt);
} catch (\Exception $e) {
}
}
作者:ChristophWurs
项目:pimcor
/**
*
*/
public function load()
{
$client = Api::getSimpleClient();
$config = $this->getConfig();
$perPage = $this->getPerPage();
$offset = $this->getOffset();
$query = $this->getQuery();
if ($client) {
$search = new \Google_Service_Customsearch($client);
// determine language
$language = "";
if (\Zend_Registry::isRegistered("Zend_Locale")) {
$locale = \Zend_Registry::get("Zend_Locale");
$language = $locale->getLanguage();
}
if (!array_key_exists("hl", $config) && !empty($language)) {
$config["hl"] = $language;
}
if (!array_key_exists("lr", $config) && !empty($language)) {
$config["lr"] = "lang_" . $language;
}
if ($query) {
if ($offset) {
$config["start"] = $offset + 1;
}
if (empty($perPage)) {
$perPage = 10;
}
$config["num"] = $perPage;
$cacheKey = "google_cse_" . md5($query . serialize($config));
// this is just a protection so that no query get's sent twice in a request (loops, ...)
if (\Zend_Registry::isRegistered($cacheKey)) {
$result = \Zend_Registry::get($cacheKey);
} else {
if (!($result = Cache::load($cacheKey))) {
$result = $search->cse->listCse($query, $config);
Cache::save($result, $cacheKey, array("google_cse"), 3600, 999);
\Zend_Registry::set($cacheKey, $result);
}
}
$this->readGoogleResponse($result);
return $this->getResults(false);
}
return array();
} else {
throw new \Exception("Google Simple API Key is not configured in System-Settings.");
}
}
作者:ascertai
项目:NGsho
/**
* @param Zend_Config $config -> configuration to contain
* @param string $identifier -> cache identifier for caching sub files
*/
public function __construct(Zend_Config $config, $identifier)
{
$this->defaultConfig = $config;
foreach ((array) $config->tenants as $tenantName => $tenantConfig) {
if ($tenantConfig instanceof Zend_Config) {
if ($tenantConfig->file) {
$cacheKey = "onlineshop_config_" . $identifier . "_checkout_tenant_" . $tenantName;
if (!($tenantConfigFile = \Pimcore\Model\Cache::load($cacheKey))) {
$tenantConfigFile = new Zend_Config_Xml(PIMCORE_DOCUMENT_ROOT . (string) $tenantConfig->file, null, true);
$tenantConfigFile = $tenantConfigFile->tenant;
\Pimcore\Model\Cache::save($tenantConfigFile, $cacheKey, array("ecommerceconfig"), 9999);
}
$this->tenantConfigs[$tenantName] = $tenantConfigFile;
} else {
$this->tenantConfigs[$tenantName] = $tenantConfig;
}
}
}
}
作者:rolandstol
项目:pimcor
/**
* @return array|mixed
*/
public function getAllTranslations()
{
$cacheKey = static::getTableName() . "_data";
if (!($translations = Cache::load($cacheKey))) {
$itemClass = static::getItemClass();
$translations = array();
$translationsData = $this->db->fetchAll("SELECT * FROM " . static::getTableName());
foreach ($translationsData as $t) {
if (!$translations[$t["key"]]) {
$translations[$t["key"]] = new $itemClass();
$translations[$t["key"]]->setKey($t["key"]);
}
$translations[$t["key"]]->addTranslation($t["language"], $t["text"]);
//for legacy support
if ($translations[$t["key"]]->getDate() < $t["creationDate"]) {
$translations[$t["key"]]->setDate($t["creationDate"]);
}
$translations[$t["key"]]->setCreationDate($t["creationDate"]);
$translations[$t["key"]]->setModificationDate($t["modificationDate"]);
}
Cache::save($translations, $cacheKey, array("translator", "translate"), 999);
}
return $translations;
}
作者:pawansgi9
项目:pimcore
/**
* @param null $data
* @param $locale
* @param array $options
* @return array
*/
protected function _loadTranslationData($data, $locale, array $options = array())
{
$locale = (string) $locale;
$tmpKeyParts = explode("\\", self::getBackend());
$cacheKey = "Translate_" . array_pop($tmpKeyParts) . "_data_" . $locale;
if (!($data = Cache::load($cacheKey))) {
$data = array("__pimcore_dummy" => "only_a_dummy");
$listClass = self::getBackend() . "\\Listing";
$list = new $listClass();
if ($list->isCacheable()) {
$list->setCondition("language = ?", array($locale));
$translations = $list->loadRaw();
foreach ($translations as $translation) {
$data[mb_strtolower($translation["key"])] = Tool\Text::removeLineBreaks($translation["text"]);
}
Cache::save($data, $cacheKey, array("translator", "translator_website", "translate"), null, 999);
$this->isCacheable = true;
} else {
$this->isCacheable = false;
}
}
$this->_translate[$locale] = $data;
return $this->_translate;
}
作者:ChristophWurs
项目:pimcor
/**
* Checks for a suitable redirect
* @throws Exception
* @param bool $override
* @return void
*/
protected function checkForRedirect($override = false)
{
// not for admin requests
if (Tool::isFrontentRequestByAdmin()) {
return;
}
try {
$front = \Zend_Controller_Front::getInstance();
$config = Config::getSystemConfig();
// get current site if available
$sourceSite = null;
if (Site::isSiteRequest()) {
$sourceSite = Site::getCurrentSite();
}
$cacheKey = "system_route_redirect";
if (empty($this->redirects) && !($this->redirects = Cache::load($cacheKey))) {
$list = new Redirect\Listing();
$list->setOrder("DESC");
$list->setOrderKey("priority");
$this->redirects = $list->load();
Cache::save($this->redirects, $cacheKey, array("system", "redirect", "route"), null, 998);
}
$requestScheme = $_SERVER['HTTPS'] == 'on' ? \Zend_Controller_Request_Http::SCHEME_HTTPS : \Zend_Controller_Request_Http::SCHEME_HTTP;
$matchRequestUri = $_SERVER["REQUEST_URI"];
$matchUrl = $requestScheme . "://" . $_SERVER["HTTP_HOST"] . $matchRequestUri;
foreach ($this->redirects as $redirect) {
$matchAgainst = $matchRequestUri;
if ($redirect->getSourceEntireUrl()) {
$matchAgainst = $matchUrl;
}
// if override is true the priority has to be 99 which means that overriding is ok
if (!$override || $override && $redirect->getPriority() == 99) {
if (@preg_match($redirect->getSource(), $matchAgainst, $matches)) {
// check for a site
if ($sourceSite) {
if ($sourceSite->getId() != $redirect->getSourceSite()) {
continue;
}
}
array_shift($matches);
$target = $redirect->getTarget();
if (is_numeric($target)) {
$d = Document::getById($target);
if ($d instanceof Document\Page || $d instanceof Document\Link || $d instanceof Document\Hardlink) {
$target = $d->getFullPath();
} else {
\Logger::error("Target of redirect no found (Document-ID: " . $target . ")!");
continue;
}
}
// replace escaped % signs so that they didn't have effects to vsprintf (PIMCORE-1215)
$target = str_replace("\\%", "###URLENCODE_PLACEHOLDER###", $target);
$url = vsprintf($target, $matches);
$url = str_replace("###URLENCODE_PLACEHOLDER###", "%", $url);
// support for pcre backreferences
$url = replace_pcre_backreferences($url, $matches);
if ($redirect->getTargetSite() && !preg_match("@http(s)?://@i", $url)) {
try {
$targetSite = Site::getById($redirect->getTargetSite());
// if the target site is specified and and the target-path is starting at root (not absolute to site)
// the root-path will be replaced so that the page can be shown
$url = preg_replace("@^" . $targetSite->getRootPath() . "/@", "/", $url);
$url = $requestScheme . "://" . $targetSite->getMainDomain() . $url;
} catch (\Exception $e) {
\Logger::error("Site with ID " . $redirect->getTargetSite() . " not found.");
continue;
}
} else {
if (!preg_match("@http(s)?://@i", $url) && $config->general->domain && $redirect->getSourceEntireUrl()) {
// prepend the host and scheme to avoid infinite loops when using "domain" redirects
$url = ($front->getRequest()->isSecure() ? "https" : "http") . "://" . $config->general->domain . $url;
}
}
// pass-through parameters if specified
$queryString = $_SERVER["QUERY_STRING"];
if ($redirect->getPassThroughParameters() && !empty($queryString)) {
$glue = "?";
if (strpos($url, "?")) {
$glue = "&";
}
$url .= $glue;
$url .= $queryString;
}
header($redirect->getHttpStatus());
header("Location: " . $url, true, $redirect->getStatusCode());
// log all redirects to the redirect log
\Pimcore\Log\Simple::log("redirect", Tool::getAnonymizedClientIp() . " \t Custom-Redirect ID: " . $redirect->getId() . " , Source: " . $_SERVER["REQUEST_URI"] . " -> " . $url);
exit;
}
}
}
} catch (\Exception $e) {
// no suitable route found
}
//.........这里部分代码省略.........
作者:Gerhard1
项目:pimcor
public function getText($page = null)
{
if (\Pimcore\Document::isAvailable() && \Pimcore\Document::isFileTypeSupported($this->getFilename())) {
$cacheKey = "asset_document_text_" . $this->getId() . "_" . ($page ? $page : "all");
if (!($text = Cache::load($cacheKey))) {
$document = \Pimcore\Document::getInstance();
$text = $document->getText($page, $this->getFileSystemPath());
Cache::save($text, $cacheKey, $this->getCacheTags(), null, 99, true);
// force cache write
}
return $text;
} else {
\Logger::error("Couldn't get text out of document " . $this->getFullPath() . " no document adapter is available");
}
return null;
}
作者:pawansgi9
项目:pimcore
public function glossaryAction()
{
if ($this->getParam("data")) {
$this->checkPermission("glossary");
Cache::clearTag("glossary");
if ($this->getParam("xaction") == "destroy") {
$data = \Zend_Json::decode($this->getParam("data"));
if (\Pimcore\Tool\Admin::isExtJS5()) {
$id = $data["id"];
} else {
$id = $data;
}
$glossary = Glossary::getById($id);
$glossary->delete();
$this->_helper->json(array("success" => true, "data" => array()));
} else {
if ($this->getParam("xaction") == "update") {
$data = \Zend_Json::decode($this->getParam("data"));
// save glossary
$glossary = Glossary::getById($data["id"]);
if ($data["link"]) {
if ($doc = Document::getByPath($data["link"])) {
$tmpLink = $data["link"];
$data["link"] = $doc->getId();
}
}
$glossary->setValues($data);
$glossary->save();
if ($link = $glossary->getLink()) {
if (intval($link) > 0) {
if ($doc = Document::getById(intval($link))) {
$glossary->setLink($doc->getFullPath());
}
}
}
$this->_helper->json(array("data" => $glossary, "success" => true));
} else {
if ($this->getParam("xaction") == "create") {
$data = \Zend_Json::decode($this->getParam("data"));
unset($data["id"]);
// save glossary
$glossary = new Glossary();
if ($data["link"]) {
if ($doc = Document::getByPath($data["link"])) {
$tmpLink = $data["link"];
$data["link"] = $doc->getId();
}
}
$glossary->setValues($data);
$glossary->save();
if ($link = $glossary->getLink()) {
if (intval($link) > 0) {
if ($doc = Document::getById(intval($link))) {
$glossary->setLink($doc->getFullPath());
}
}
}
$this->_helper->json(array("data" => $glossary, "success" => true));
}
}
}
} else {
// get list of glossaries
$list = new Glossary\Listing();
$list->setLimit($this->getParam("limit"));
$list->setOffset($this->getParam("start"));
if ($this->getParam("sort")) {
$list->setOrderKey($this->getParam("sort"));
$list->setOrder($this->getParam("dir"));
}
if ($this->getParam("filter")) {
$list->setCondition("`text` LIKE " . $list->quote("%" . $this->getParam("filter") . "%"));
}
$list->load();
$glossaries = array();
foreach ($list->getGlossary() as $glossary) {
if ($link = $glossary->getLink()) {
if (intval($link) > 0) {
if ($doc = Document::getById(intval($link))) {
$glossary->setLink($doc->getFullPath());
}
}
}
$glossaries[] = $glossary;
}
$this->_helper->json(array("data" => $glossaries, "success" => true, "total" => $list->getTotalCount()));
}
$this->_helper->json(false);
}
作者:pdaniel-fr
项目:pimcor
/**
* this method is called with register_shutdown_function() and writes all data queued into the cache
* @static
* @return void
*/
public static function shutdown()
{
// set inShutdown to true so that the output-buffer knows that he is allowed to send the headers
self::$inShutdown = true;
// flush all custom output buffers
while (@ob_end_flush()) {
}
// flush everything
flush();
if (function_exists("fastcgi_finish_request")) {
fastcgi_finish_request();
}
// clear tags scheduled for the shutdown
Cache::clearTagsOnShutdown();
// write collected items to cache backend and remove the write lock
Cache::write();
Cache::removeWriteLock();
// release all open locks from this process
Model\Tool\Lock::releaseAll();
// disable logging - otherwise this will cause problems in the ongoing shutdown process (session write, __destruct(), ...)
\Logger::resetLoggers();
}
作者:krugerk
项目:pimcor
/**
* @param AbstractListing $list
*/
protected static function loadToCache(AbstractListing $list)
{
$totalCount = $list->getTotalCount();
$iterations = ceil($totalCount / self::getPerIteration());
\Logger::info("New list of elements queued for storing into the cache with " . $iterations . " iterations and " . $totalCount . " total items");
for ($i = 0; $i < $iterations; $i++) {
\Logger::info("Starting iteration " . $i . " with offset: " . self::getPerIteration() * $i);
$list->setLimit(self::getPerIteration());
$list->setOffset(self::getPerIteration() * $i);
$elements = $list->load();
foreach ($elements as $element) {
$cacheKey = Element\Service::getElementType($element) . "_" . $element->getId();
Cache::storeToCache($element, $cacheKey, [], null, null, true);
}
\Pimcore::collectGarbage();
sleep(self::getTimoutBetweenIteration());
}
}
作者:pawansgi9
项目:pimcore
/**
* @static
* @return mixed|\Zend_Config
*/
public static function getWebsiteConfig()
{
if (\Zend_Registry::isRegistered("pimcore_config_website")) {
$config = \Zend_Registry::get("pimcore_config_website");
} else {
$cacheKey = "website_config";
$siteId = null;
if (Model\Site::isSiteRequest()) {
$siteId = Model\Site::getCurrentSite()->getId();
$cacheKey = $cacheKey . "_site_" . $siteId;
}
if (!($config = Cache::load($cacheKey))) {
$settingsArray = array();
$cacheTags = array("website_config", "system", "config", "output");
$list = new Model\WebsiteSetting\Listing();
$list = $list->load();
foreach ($list as $item) {
$key = $item->getName();
$itemSiteId = $item->getSiteId();
if ($itemSiteId != 0 && $itemSiteId != $siteId) {
continue;
}
$s = null;
switch ($item->getType()) {
case "document":
case "asset":
case "object":
$s = Model\Element\Service::getElementById($item->getType(), $item->getData());
break;
case "bool":
$s = (bool) $item->getData();
break;
case "text":
$s = (string) $item->getData();
break;
}
if ($s instanceof Model\Element\ElementInterface) {
$cacheTags = $s->getCacheTags($cacheTags);
}
if (isset($s)) {
$settingsArray[$key] = $s;
}
}
$config = new \Zend_Config($settingsArray, true);
Cache::save($config, $cacheKey, $cacheTags, null, 998);
}
self::setWebsiteConfig($config);
}
return $config;
}
作者:rolandstol
项目:pimcor
/** Clears the column information for the given table.
* @param $table
*/
protected function resetValidTableColumnsCache($table)
{
$cacheKey = self::CACHEKEY . $table;
\Zend_Registry::getInstance()->offsetUnset($cacheKey);
Cache::clearTags(array("system", "resource"));
}
作者:krugerk
项目:pimcor
/**
* @return array|mixed
* @throws \Zend_Locale_Exception
*/
public static function getSupportedLocales()
{
// List of locales that are no longer part of CLDR
// this was also changed in the Zend Framework, but here we need to provide an appropriate alternative
// since this information isn't public in \Zend_Locale :-(
$aliases = ['az_AZ' => true, 'bs_BA' => true, 'ha_GH' => true, 'ha_NE' => true, 'ha_NG' => true, 'kk_KZ' => true, 'ks_IN' => true, 'mn_MN' => true, 'ms_BN' => true, 'ms_MY' => true, 'ms_SG' => true, 'pa_IN' => true, 'pa_PK' => true, 'shi_MA' => true, 'sr_BA' => true, 'sr_ME' => true, 'sr_RS' => true, 'sr_XK' => true, 'tg_TJ' => true, 'tzm_MA' => true, 'uz_AF' => true, 'uz_UZ' => true, 'vai_LR' => true, 'zh_CN' => true, 'zh_HK' => true, 'zh_MO' => true, 'zh_SG' => true, 'zh_TW' => true];
$locale = \Zend_Locale::findLocale();
$cacheKey = "system_supported_locales_" . strtolower((string) $locale);
if (!($languageOptions = Cache::load($cacheKey))) {
// we use the locale here, because \Zend_Translate only supports locales not "languages"
$languages = \Zend_Locale::getLocaleList();
$languages = array_merge($languages, $aliases);
$languageOptions = array();
foreach ($languages as $code => $active) {
if ($active) {
$translation = \Zend_Locale::getTranslation($code, "language");
if (!$translation) {
$tmpLocale = new \Zend_Locale($code);
$lt = \Zend_Locale::getTranslation($tmpLocale->getLanguage(), "language");
$tt = \Zend_Locale::getTranslation($tmpLocale->getRegion(), "territory");
if ($lt && $tt) {
$translation = $lt . " (" . $tt . ")";
}
}
if (!$translation) {
$translation = $code;
}
$languageOptions[$code] = $translation;
}
}
asort($languageOptions);
Cache::save($languageOptions, $cacheKey, ["system"]);
}
return $languageOptions;
}
作者:quora
项目:pimcor
public function cleanupAction()
{
$listClass = "\\Pimcore\\Model\\Translation\\" . ucfirst($this->getParam("type")) . "\\Listing";
if (Tool::classExists($listClass)) {
$list = new $listClass();
$list->cleanup();
\Pimcore\Model\Cache::clearTags(array("translator", "translate"));
$this->_helper->json(array("success" => true));
}
$this->_helper->json(array("success" => false));
}