/** * Loose extension path function for include use originally from ezextension.php * * @deprecated Since 4.3 */ function extension_path($extension, $withWWWDir = false, $withHost = false, $withProtocol = false) { $base = eZExtension::baseDirectory(); $path = ''; if ($withProtocol) { if (is_string($withProtocol)) { $path .= $withProtocol; } else { $path .= eZSys::serverProtocol(); } $path .= ':'; } if ($withHost) { $path .= '//'; if (is_string($withHost)) { $path .= $withHost; } else { $path .= eZSys::hostname(); } } if ($withWWWDir) { $path .= eZSys::wwwDir(); } if ($withWWWDir) { $path .= '/' . $base . '/' . $extension; } else { $path .= $base . '/' . $extension; } return $path; }
/** * This is a hook which is called by the language switcher module on * implementation classes. * * In this implementation it is doing initialisation as an example. * * @return void */ public function process() { $saIni = $this->getSiteAccessIni(); $this->destinationLocale = $saIni->variable('RegionalSettings', 'ContentObjectLocale'); // Detect the type of siteaccess we are dealing with. Initially URI and Host are supported. // We don't want the siteaccess part here, since we are inserting our siteaccess name. $indexFile = trim(eZSys::indexFile(false), '/'); switch ($GLOBALS['eZCurrentAccess']['type']) { case eZSiteAccess::TYPE_URI: eZURI::transformURI($host, true, 'full'); break; default: $host = $saIni->variable('SiteSettings', 'SiteURL'); $host = eZSys::serverProtocol() . "://" . $host; break; } $this->baseDestinationUrl = "{$host}{$indexFile}"; }
public function testServerProtocol() { self::assertEquals('http', eZSys::serverProtocol()); $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; self::assertEquals('https', eZSys::serverProtocol()); unset($_SERVER['HTTP_X_FORWARDED_PROTO']); }
$limit = 10; } $offset = $Params['Offset']; if (!is_numeric($offset)) { $offset = 0; } $url = eZURL::fetch($urlID); if (!$url) { return $Module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel'); } $link = $url->attribute('url'); if (preg_match("/^(http:)/i", $link) or preg_match("/^(ftp:)/i", $link) or preg_match("/^(https:)/i", $link) or preg_match("/^(file:)/i", $link) or preg_match("/^(mailto:)/i", $link)) { // No changes } else { $domain = getenv('HTTP_HOST'); $protocol = eZSys::serverProtocol(); $preFix = $protocol . "://" . $domain; $preFix .= eZSys::wwwDir(); $link = preg_replace("/^\\//e", "", $link); $link = $preFix . "/" . $link; } $viewParameters = array('offset' => $offset, 'limit' => $limit); $http = eZHTTPTool::instance(); $objectList = eZURLObjectLink::fetchObjectVersionList($urlID, $viewParameters); $urlViewCount = eZURLObjectLink::fetchObjectVersionCount($urlID); if ($Module->isCurrentAction('EditObject')) { if ($http->hasPostVariable('ObjectList')) { $versionID = $http->postVariable('ObjectList'); $version = eZContentObjectVersion::fetch($versionID); $contentObjectID = $version->attribute('contentobject_id'); $versionNr = $version->attribute('version');
/** * Merges a collection of files togheter and returns array of paths to the files. * js /css content is returned as string if packlevel is 0 and you use a js/ css generator. * $fileArray can also be array of array of files, like array( 'file.js', 'file2.js', array( 'file5.js' ) ) * The name of the cached file is a md5 hash consistant of the file paths * of the valid files in $file_array and the packlevel. * The whole argument is used instead of file path on js/ css generators in the cache hash. * * @param array|string $fileArray Either array of file paths, or string with file path * @param string $subPath In witch sub path of design folder to look for files. * @param string $fileExtension File extension name (for use on cache file) * @param int $packLevel Level of packing, values: 0-3 * @param bool $indexDirInCacheHash To add index path in cache hash or not * @param string $filePostName Extra file name part, example "_screen" in case of medai use for css * * @return array List of css files */ static function packFiles($fileArray, $subPath = '', $fileExtension = '.js', $packLevel = 2, $indexDirInCacheHash = false, $filePostName = '') { if (!$fileArray) { return array(); } else { if (!is_array($fileArray)) { $fileArray = array($fileArray); } } $ezjscINI = eZINI::instance('ezjscore.ini'); $bases = eZTemplateDesignResource::allDesignBases(); $customHosts = $ezjscINI->variable('Packer', 'CustomHosts'); $data = array('http' => array(), 'www' => array(), 'locale' => array(), 'cache_name' => '', 'cache_hash' => '', 'cache_path' => '', 'last_modified' => 0, 'file_extension' => $fileExtension, 'file_post_name' => $filePostName, 'pack_level' => $packLevel, 'sub_path' => $subPath, 'cache_dir' => self::getCacheDir(), 'www_dir' => htmlspecialchars(self::getWwwDir(), ENT_COMPAT, 'UTF-8'), 'index_dir' => self::getIndexDir(), 'custom_host' => isset($customHosts[$fileExtension]) ? $customHosts[$fileExtension] : ''); // Only pack files if Packer is enabled and if not set DevelopmentMode is disabled if ($ezjscINI->hasVariable('eZJSCore', 'Packer')) { $packerIniValue = $ezjscINI->variable('eZJSCore', 'Packer'); if ($packerIniValue === 'disabled') { $data['pack_level'] = 0; } else { if (is_numeric($packerIniValue)) { $data['pack_level'] = (int) $packerIniValue; } } } else { if (eZINI::instance()->variable('TemplateSettings', 'DevelopmentMode') === 'enabled') { $data['pack_level'] = 0; } } // Needed for image includes to work on ezp installs with mixed access methods (virtualhost + url based setup) if ($indexDirInCacheHash) { $data['cache_name'] = $data['index_dir']; } $originalFileArray = $fileArray; while (!empty($fileArray)) { $file = array_shift($fileArray); // if $file is array, concat it to the file array and continue if ($file && is_array($file)) { $fileArray = array_merge($file, $fileArray); continue; } else { if (!$file) { continue; } else { if (strpos($file, '::') !== false) { $server = self::serverCallHelper(explode('::', $file)); if (!$server instanceof ezjscServerRouter) { continue; } $fileTime = $server->getCacheTime($data); // Generate content straight away if packing is disabled if ($data['pack_level'] === 0) { $data['www'][] = $server->call($fileArray); } else { if ($fileTime === -1) { $data['http'][] = $server->call($fileArray); } else { $data['locale'][] = $server; $data['cache_name'] .= $file . '_'; } } $data['last_modified'] = max($data['last_modified'], $fileTime); continue; } else { if (strpos($file, 'http://') === 0 || strpos($file, 'https://') === 0) { $data['http'][] = $file; continue; } else { if (strpos($file, '://') === 0) { if (!isset($protocol)) { $protocol = eZSys::serverProtocol(); } $data['http'][] = $protocol . $file; continue; } else { if (strpos($file, 'var/') === 0) { if (substr($file, 0, 2) === '//' || preg_match("#^[a-zA-Z0-9]+:#", $file)) { $file = '/'; } else { if (strlen($file) > 0 && $file[0] !== '/') { $file = '/' . $file; } } eZURI::transformURI($file, true, 'relative'); // Get file time and continue if it return false $file = str_replace('//' . $data['www_dir'], '', '//' . $file); $fileTime = file_exists($file) ? filemtime($file) : false; $wwwFile = $data['www_dir'] . $file; } else { // Allow path to be outside subpath if it starts with '/' if ($file[0] === '/') { $file = ltrim($file, '/'); } else { $file = $subPath . $file; } $triedFiles = array(); $match = eZTemplateDesignResource::fileMatch($bases, '', $file, $triedFiles); if ($match === false) { eZDebug::writeWarning("Could not find: {$file}", __METHOD__); continue; } $file = htmlspecialchars($match['path']); $fileTime = file_exists($file) ? filemtime($file) : false; $wwwFile = $data['www_dir'] . $file; } } } } } } if ($fileTime === false) { eZDebug::writeWarning("Could not get modified time of file: {$file}", __METHOD__); continue; } // Calculate last modified time and store in arrays $data['last_modified'] = max($data['last_modified'], $fileTime); $data['locale'][] = $file; $data['www'][] = $wwwFile; $data['cache_name'] .= $file . '_'; } if ($data['pack_level'] === 0) { self::$log[] = $data; // if packing is disabled, return the valid paths / content we have generated return array_merge($data['http'], $data['www']); } else { if (empty($data['locale']) && !empty($data['http'])) { self::$log[] = $data; // return if there are only external scripts and no local files to cache return array_merge($data['http'], $data['www']); } else { if (empty($data['locale'])) { eZDebug::writeWarning("Could not find any files: " . var_export($originalFileArray, true), __METHOD__); return array(); } } } // See if cahe file exists and if it has expired (only if time is not part of name) if ($ezjscINI->variable('Packer', 'AppendLastModifiedTime') === 'enabled') { $data['cache_hash'] = md5($data['cache_name'] . $data['pack_level']) . '_' . $data['last_modified'] . $data['file_post_name'] . $data['file_extension']; $data['cache_path'] = $data['cache_dir'] . $subPath . $data['cache_hash']; $clusterFileHandler = eZClusterFileHandler::instance($data['cache_path']); if ($clusterFileHandler->fileExists($data['cache_path'])) { $data['http'][] = $data['custom_host'] . $data['www_dir'] . $data['cache_path']; self::$log[] = $data; return $data['http']; } } else { $data['cache_hash'] = md5($data['cache_name'] . $data['pack_level']) . $data['file_post_name'] . $data['file_extension']; $data['cache_path'] = $data['cache_dir'] . $subPath . $data['cache_hash']; $clusterFileHandler = eZClusterFileHandler::instance($data['cache_path']); // Check last modified time and return path to cache file if valid if ($clusterFileHandler->fileExists($data['cache_path']) && $data['last_modified'] <= $clusterFileHandler->mtime($data['cache_path'])) { $data['http'][] = $data['custom_host'] . $data['www_dir'] . $data['cache_path']; self::$log[] = $data; return $data['http']; } } // Merge file content and create new cache file $content = ''; $isCSS = $data['file_extension'] === '.css'; foreach ($data['locale'] as $i => $file) { // if this is a js / css generator, call to get content if ($file instanceof ezjscServerRouter) { $content .= $file->call($data['locale']); continue; } else { if (!$file) { continue; } } // else, get content of normal file $fileContent = file_get_contents($file); if (!trim($fileContent)) { $content .= "/* empty: {$file} */\r\n"; continue; } if ($isCSS) { // We need to fix relative background image paths if this is a css file $fileContent = ezjscPacker::fixImgPaths($fileContent, $file); // Remove @charset if this is not the first file (some browsers will ignore css after a second occurance of this) if ($i) { $fileContent = preg_replace('/^@charset[^;]+;/i', '', $fileContent); } } $content .= "/* start: {$file} */\r\n"; $content .= $fileContent; $content .= "\r\n/* end: {$file} */\r\n\r\n"; } // Pack all files to save bandwidth if ($data['pack_level'] > 1) { foreach ($ezjscINI->variable('eZJSCore', $isCSS ? 'CssOptimizer' : 'JavaScriptOptimizer') as $optimizer) { if (is_callable(array($optimizer, 'optimize'))) { $content = call_user_func(array($optimizer, 'optimize'), $content, $data['pack_level']); } else { eZDebug::writeWarning("Could not call optimizer '{$optimizer}'", __METHOD__); } } } // Save cache file and return path $clusterFileHandler->fileStoreContents($data['cache_path'], $content, 'ezjscore', $isCSS ? 'text/css' : 'text/javascript'); $data['http'][] = $data['custom_host'] . $data['www_dir'] . $data['cache_path']; self::$log[] = $data; return $data['http']; }
public static function getServerURL() { if (self::$serverURL === null) { $oeini = eZINI::instance('ezoe.ini'); if ($oeini->hasVariable('SystemSettings', 'RelativeURL') && $oeini->variable('SystemSettings', 'RelativeURL') === 'enabled') { self::$serverURL = eZSys::wwwDir(); if (self::$serverURL === '/') { self::$serverURL = ''; } } else { $domain = eZSys::hostname(); $protocol = eZSys::serverProtocol(); self::$serverURL = $protocol . '://' . $domain . eZSys::wwwDir(); } } return self::$serverURL; }
static function createRedirectUrl($path, $parameters = array()) { $parameters = array_merge(array('host' => false, 'protocol' => false, 'port' => false, 'username' => false, 'password' => false, 'override_host' => false, 'override_protocol' => false, 'override_port' => false, 'override_username' => false, 'override_password' => false, 'pre_url' => true), $parameters); $host = $parameters['host']; $protocol = $parameters['protocol']; $port = $parameters['port']; $username = $parameters['username']; $password = $parameters['password']; if (preg_match('#^([a-zA-Z0-9]+):(.+)$#', $path, $matches)) { if ($matches[1]) { $protocol = $matches[1]; } $path = $matches[2]; } if (preg_match('#^//((([a-zA-Z0-9_.]+)(:([a-zA-Z0-9_.]+))?)@)?([^./:]+(\\.[^./:]+)*)(:([0-9]+))?(.*)$#', $path, $matches)) { if ($matches[6]) { $host = $matches[6]; } if ($matches[3]) { $username = $matches[3]; } if ($matches[5]) { $password = $matches[5]; } if ($matches[9]) { $port = $matches[9]; } $path = $matches[10]; } if ($parameters['pre_url']) { if (strlen($path) > 0 and $path[0] != '/') { $preURL = eZSys::serverVariable('SCRIPT_URL'); if (strlen($preURL) > 0 and $preURL[strlen($preURL) - 1] != '/') { $preURL .= '/'; } $path = $preURL . $path; } } if ($parameters['override_host']) { $host = $parameters['override_host']; } if ($parameters['override_port']) { $port = $parameters['override_port']; } if (!is_string($host)) { $host = eZSys::hostname(); } if (!is_string($protocol)) { $protocol = eZSys::serverProtocol(); // Default to https if SSL is enabled if (eZSys::isSSLNow()) { $port = false; } } if ($parameters['override_protocol']) { $protocol = $parameters['override_protocol']; } $uri = $protocol . '://'; if ($parameters['override_username']) { $username = $parameters['override_username']; } if ($parameters['override_password']) { $password = $parameters['override_password']; } if ($username) { $uri .= $username; if ($password) { $uri .= ':' . $password; } $uri .= '@'; } $uri .= $host; if ($port) { $uri .= ':' . $port; } $uri .= $path; return $uri; }