/** * * http://maps.googleapis.com/maps/api/staticmap?zoom=13&size=600x300&maptype=roadmap&markers=color:blue|{first_set( $attribute.content.latitude, '0.0')},{first_set( $attribute.content.longitude, '0.0')} * @param array $parameters * @param eZContentObjectAttribute $attribute * @return string */ public static function gmapStaticImage(array $parameters, eZContentObjectAttribute $attribute, $extraCacheFileNameStrings = array()) { $cacheParameters = array(serialize($parameters)); $cacheFile = $attribute->attribute('id') . implode('-', $extraCacheFileNameStrings) . '-' . md5(implode('-', $cacheParameters)) . '.cache'; $extraPath = eZDir::filenamePath($attribute->attribute('id')); $cacheDir = eZDir::path(array(eZSys::cacheDirectory(), 'gmap_static', $extraPath)); // cacenllo altri file con il medesimo attributo $fileList = array(); $deleteItems = eZDir::recursiveList($cacheDir, $cacheDir, $fileList); foreach ($fileList as $file) { if ($file['type'] == 'file' && $file['name'] !== $cacheFile) { unlink($file['path'] . '/' . $file['name']); } } $cachePath = eZDir::path(array($cacheDir, $cacheFile)); $args = compact('parameters', 'attribute'); $cacheFile = eZClusterFileHandler::instance($cachePath); $result = $cacheFile->processCache(array('OCOperatorsCollectionsTools', 'gmapStaticImageRetrieve'), array('OCOperatorsCollectionsTools', 'gmapStaticImageGenerate'), null, null, $args); return $result; }
static function generateViewCacheFile($user, $nodeID, $offset, $layout, $language, $viewMode, $viewParameters = false, $cachedViewPreferences = false, $viewCacheTweak = '') { $cacheNameExtra = ''; $ini = eZINI::instance(); if (!$language) { $language = false; } if (!$viewCacheTweak && $ini->hasVariable('ContentSettings', 'ViewCacheTweaks')) { $viewCacheTweaks = $ini->variable('ContentSettings', 'ViewCacheTweaks'); if (isset($viewCacheTweaks[$nodeID])) { $viewCacheTweak = $viewCacheTweaks[$nodeID]; } else { if (isset($viewCacheTweaks['global'])) { $viewCacheTweak = $viewCacheTweaks['global']; } } } // should we use current siteaccess or let several siteaccesse share cache? if (strpos($viewCacheTweak, 'ignore_siteaccess_name') === false) { $currentSiteAccess = $GLOBALS['eZCurrentAccess']['name']; } else { $currentSiteAccess = $ini->variable('SiteSettings', 'DefaultAccess'); } $cacheHashArray = array($nodeID, $viewMode, $language, $offset, $layout); // several user related cache tweaks if (strpos($viewCacheTweak, 'ignore_userroles') === false) { $cacheHashArray[] = implode('.', $user->roleIDList()); } if (strpos($viewCacheTweak, 'ignore_userlimitedlist') === false) { $cacheHashArray[] = implode('.', $user->limitValueList()); } if (strpos($viewCacheTweak, 'ignore_discountlist') === false) { $cacheHashArray[] = implode('.', eZUserDiscountRule::fetchIDListByUserID($user->attribute('contentobject_id'))); } $cacheHashArray[] = eZSys::indexFile(); // Add access type to cache hash if current access is uri type (so uri and host doesn't share cache) if (strpos($viewCacheTweak, 'ignore_siteaccess_type') === false && $GLOBALS['eZCurrentAccess']['type'] === eZSiteAccess::TYPE_URI) { $cacheHashArray[] = eZSiteAccess::TYPE_URI; } // Make the cache unique for every logged in user if (strpos($viewCacheTweak, 'pr_user') !== false and !$user->isAnonymous()) { $cacheNameExtra = $user->attribute('contentobject_id') . '-'; } // Make the cache unique for every case of view parameters if (strpos($viewCacheTweak, 'ignore_viewparameters') === false && $viewParameters) { $vpString = ''; ksort($viewParameters); foreach ($viewParameters as $key => $value) { if (!$key || $key === '_custom') { continue; } $vpString .= 'vp:' . $key . '=' . $value; } $cacheHashArray[] = $vpString; } // Make the cache unique for every case of the preferences if ($cachedViewPreferences === false) { $depPreferences = $ini->variable('ContentSettings', 'CachedViewPreferences'); } else { $depPreferences = $cachedViewPreferences; } if (strpos($viewCacheTweak, 'ignore_userpreferences') === false && isset($depPreferences[$viewMode])) { $depPreferences = explode(';', $depPreferences[$viewMode]); $pString = ''; // Fetch preferences for the specified user $preferences = eZPreferences::values($user); foreach ($depPreferences as $pref) { $pref = explode('=', $pref); if (isset($pref[0])) { if (isset($preferences[$pref[0]])) { $pString .= 'p:' . $pref[0] . '=' . $preferences[$pref[0]] . ';'; } else { if (isset($pref[1])) { $pString .= 'p:' . $pref[0] . '=' . $pref[1] . ';'; } } } } $cacheHashArray[] = $pString; } $cacheFile = $nodeID . '-' . $cacheNameExtra . md5(implode('-', $cacheHashArray)) . '.cache'; $extraPath = eZDir::filenamePath($nodeID); $cacheDir = eZDir::path(array(eZSys::cacheDirectory(), $ini->variable('ContentSettings', 'CacheDir'), $currentSiteAccess, $extraPath)); $cachePath = eZDir::path(array($cacheDir, $cacheFile)); return array('cache_path' => $cachePath, 'cache_dir' => $cacheDir, 'cache_file' => $cacheFile); }
static function cleanup( $nodeList, $userId = false ) { // The view-cache has a different storage structure than before: // var/cache/content/<siteaccess>/<extra-path>/<nodeID>-<hash>.cache // Also it uses the cluster file handler to delete files using a wildcard (glob style). $ini = eZINI::instance(); $extraCacheName = ''; $cacheBaseDir = eZDir::path( array( eZSys::cacheDirectory(), $ini->variable( 'ContentSettings', 'CacheDir' ) ) ); $fileHandler = eZClusterFileHandler::instance(); if ( $userId !== false && is_numeric( $userId ) ) { $extraCacheName = $userId . '-'; } // Figure out the siteaccess which are related, first using the new // INI setting RelatedSiteAccessList then the old existing one // AvailableSiteAccessList if ( $ini->hasVariable( 'SiteAccessSettings', 'RelatedSiteAccessList' ) && $relatedSiteAccessList = $ini->variable( 'SiteAccessSettings', 'RelatedSiteAccessList' ) ) { if ( !is_array( $relatedSiteAccessList ) ) { $relatedSiteAccessList = array( $relatedSiteAccessList ); } $relatedSiteAccessList[] = $GLOBALS['eZCurrentAccess']['name']; $siteAccesses = array_unique( $relatedSiteAccessList ); } else { $siteAccesses = $ini->variable( 'SiteAccessSettings', 'AvailableSiteAccessList' ); } if ( !$siteAccesses ) { return; } foreach ( $nodeList as $nodeID ) { $extraPath = eZDir::filenamePath( $nodeID ); $fileHandler->fileDeleteByDirList( $siteAccesses, $cacheBaseDir, "$extraPath$nodeID-$extraCacheName" ); } }