* debug <- we just love it! * getAbsoluteURL <- get an absolute URL with the complete protocol and host stuff * getLink <- get a link with parameters in the backend * getWebLink <- get a link with parameters to frontend pages * getWebMediaLink <- get a link to a media file * getXHTMLString <- to make a string xhtml compatible * _gt <- get a translation for a string (phrases) * _gtf <- get a translation and fill in the vars (sprintf-like) * initializeParams <- loads params from _GET/_POST for this module (paramName) * initializeSessionParam <- registers a parameter to the session and resets others * get-/setSessionValue <- if you want to store data in the session or read it * make pretty sure the sessionParamName is not in use! * logMsg <- messages show up in the system protocol for info or error tracking * parseRequestURI <- in some cases you may need information about the URI, nicely prepared * * ...anything else? * * @copyright 2002-2007 by papaya Software GmbH - All rights reserved. * @link http://www.papaya-cms.com/ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License, version 2 * * You can redistribute and/or modify this script under the terms of the GNU General Public * License (GPL) version 2, provided that the copyright and license notes, including these * lines, remain unmodified. papaya is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. * * @package papaya_base * @author Thomas Weinert * @version $Id: sys_base_object.php 24106 2008-12-11 11:40:26Z weinert $ */ /** * log type for user messages (login/logout) */ define('PAPAYA_LOGTYPE_USER', 1); /** * log type for page messages (published) */ define('PAPAYA_LOGTYPE_PAGES', 2); /** * log type for database messages (errors) */ define('PAPAYA_LOGTYPE_DATABASE', 3); /** * log type for calendar messages */ define('PAPAYA_LOGTYPE_CALENDAR', 4); /** * log type for cronjob messages */ define('PAPAYA_LOGTYPE_CRONJOBS', 5); /** * log type for surfer/community messages */ define('PAPAYA_LOGTYPE_SURFER', 6); /** * log type for system messages */ define('PAPAYA_LOGTYPE_SYSTEM', 7); /** * log type for system messages */ define('PAPAYA_LOGTYPE_MODULES', 8); /** * line break string constant */ define('LF', "\n"); /** * Include string functions class library */ //require_once(PAPAYA_INCLUDE_PATH.'system/papaya_strings.php'); /** * Implementation super class * * Provides basic functionality for all other classes * * @package papaya_base * @author Thomas Weinert */ class basis { /** * Error message * @var base_errors $msgs */ var $errormsg; /** * Parameters * @var array $params */ var $params = array(); /** * Parameter name * @var string $paramName */ var $paramName = 'p'; /** * Request method * @var string $requestMethod */ var $requestMethod = 'get'; /** * Session parameter name * @var string $sessionParamName */ var $sessionParamName = NULL; /** * allowed url level separators * @access private * @var array */ var $urlLevelSeparators = array(',', ':', '*', '!', "'", "/"); /** * Constructor * * @access public */ function __construct($db_system='pgsql') { //empty implementation for all child classes } function getErrorMsg() { return $this->errormsg; } //include_once('pgsql.methods.php'); /** * PHP 4 constuctor redirect * * @access public */ function base_object() { $args = func_get_args(); call_user_func_array(array(&$this, '__construct'), $args); } /** * Get session value * * @param string $name * @access public * @return mixed session value or NULL */ function getSessionValue($name) { include_once(PAPAYA_INCLUDE_PATH.'system/sys_session.php'); $this->sessionObj = &rewrite_session::getInstance(); return $this->sessionObj->getValue($name); } /** * Set session value * * @param string $name * @param mixed $value session value * @access public */ function setSessionValue($name, $value) { include_once(PAPAYA_INCLUDE_PATH.'system/sys_session.php'); $this->sessionObj = &rewrite_session::getInstance(); return $this->sessionObj->setValue($name, $value); } /** * Phrasetranslator - Fetch translation for all phrase * * @param string $phrase Phrase * @param mixed $module Modul optional, default value NULL * @access public * @return string */ function _gt($phrase, $module = NULL) { if (@is_object($GLOBALS[PAPAYA_GLOBAL_PHRASEOBJECT]) && trim($phrase) != '') { return $GLOBALS[PAPAYA_GLOBAL_PHRASEOBJECT]->getText($phrase, $module); } return $phrase; } /** * Phrasetranslator - Fetch translation of one phrase and insert variable * * @param string $phrase Phrase * @param array $vals Parameter * @param mixed $module Modul * @access public * @return string */ function _gtf($phrase, $vals, $module = NULL) { if (@is_object($GLOBALS[PAPAYA_GLOBAL_PHRASEOBJECT]) && trim($phrase) != '') { return $GLOBALS[PAPAYA_GLOBAL_PHRASEOBJECT]->getTextFmt($phrase, $vals, $module); } return $phrase; } /** * Phrases - Locate files * * @param string $fileName filename * @access public * @return string file content */ function _gtfile($fileName) { if (isset($this->authUser)) { $lng = $this->authUser->options['PAPAYA_UI_LANGUAGE']; } else { $lng = PAPAYA_UI_LANGUAGE; } $fileName = $_SERVER['DOCUMENT_ROOT'].PAPAYA_PATH_WEB.PAPAYA_PATH_ADMIN. '/data/'.$lng.'/'.$fileName; $fileName = str_replace('//', '/', $fileName); if ($fileName) { if ($fh = @fopen($fileName, 'r')) { $data = fread($fh, filesize($fileName)); fclose($fh); return papaya_strings::ensureUTF8($data); } } return ''; } /** * Log events * * @param integer $level message priority, {@see sys_error.php} * @param integer $type message typ (groups) * @param string $short message short (for lists) * @param string $long message detailed * @access public */ function logMsg($level, $type, $short, $long = '', $addBacktrace = FALSE, $backtraceOffset = 2) { if (function_exists('is_a') && is_a($this, 'base_log')) { return 0; } if (defined('PAPAYA_GLOBAL_LOGOBJECT') && (trim(PAPAYA_GLOBAL_LOGOBJECT) != '')) { if (isset($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]) && is_object($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT])) { $GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]->logMessage($level, $type, $short, $long, $addBacktrace, $backtraceOffset); } } } function logVariable($level, $type, $title, $variable, $addBacktrace = FALSE, $backtraceOffset = 3) { if (function_exists('is_a') && is_a($this, 'base_log')) { return 0; } if (defined('PAPAYA_GLOBAL_LOGOBJECT') && (trim(PAPAYA_GLOBAL_LOGOBJECT) != '')) { if (isset($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]) && is_object($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT])) { $GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]->logVariable($level, $type, $title, $variable, $addBacktrace, $backtraceOffset); } } } /** * Adds a message in the message object. * All messages will be displayed in programm run * * @param integer $level message priority * @param string $text message * @access public */ function addMsg($level, $text, $log = FALSE, $type = PAPAYA_LOGTYPE_SYSTEM) { if (is_object($this->msgs)) { $this->msgs->add($level, $text); } if ($log) { $this->logMsg($level, $type, $text); } } /** * Parameter initialisation * * All global parameters for the object will be read out of the global * namespace and put in $this->params. The current will script filename * is stored in the $this->baseLink. * If here is a parameter $sessionParamName or a property $this->sessionParamName, * the value will be registered in the session object. * * @param mixed $sessionParamName optional, default value NULL * @access public */ function initializeParams($sessionParamName = NULL) { if (isset($this->paramName)) { if (!is_array($this->params = $this->getRequestParameters($this->paramName, 'GP'))) { $this->params = array(); } if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'post') { $this->requestMethod = 'post'; } } else { $this->params = array(); } if (isset($sessionParamName) && trim($sessionParamName) != '') { $this->sessionParamName = $sessionParamName; } $this->baseLink = $this->getBaseLink(); } /** * get a parameter array from superglobal arrays, * remove magic quotes from the parameter values * and make that they are all utf-8 * * the parameter $modes specifies the superglobals and the order * Examples: * GP = $_GET and $_POST, $_POST values override $_GET values * CGP = $_COOKIE, $_GET and $_POST, $_POST overrides both, $_GET overrides $_COOKIE * * @param string $paramName * @param string $modes optional, default value 'GP' * @access public * @return array | NULL */ function getRequestParameters($paramName, $modes = 'GP') { $sourceCount = strlen($modes); $result = NULL; for ($i = 0; $i < $sourceCount; ++$i) { $params = NULL; switch ($modes[$i]) { case 'S' : if (isset($_SESSION[$paramName])) { $params = $_SESSION[$paramName]; } break; case 'C' : if (isset($_COOKIE[$paramName])) { $params = $_COOKIE[$paramName]; } $params = $_COOKIE; break; case 'G' : if (isset($_GET[$paramName])) { $params = $_GET[$paramName]; } if (defined('PAPAYA_URL_LEVEL_SEPARATOR') && in_array(PAPAYA_URL_LEVEL_SEPARATOR, $this->urlLevelSeparators) && isset($_GET) && is_array($_GET)) { foreach ($_GET as $paramKey => $paramValue) { if (0 === strpos($paramKey, $paramName.PAPAYA_URL_LEVEL_SEPARATOR)) { $paramSubKeys = explode(PAPAYA_URL_LEVEL_SEPARATOR, $paramKey); if (is_array($paramSubKeys) && count($paramSubKeys) > 1) { if (!is_array($params)) { $params = array(); } $paramArray = &$params; for ($k = 1, $max = count($paramSubKeys) - 1; $k < $max && $k < 40; $k++) { if (!isset($paramArray[$paramSubKeys[$k]])) { $paramArray[$paramSubKeys[$k]] = array(); } $paramArray = &$paramArray[$paramSubKeys[$k]]; } $paramArray[end($paramSubKeys)] = $paramValue; } } } } break; case 'P' : if (isset($_POST[$paramName])) { $params = $_POST[$paramName]; } break; } if (get_magic_quotes_gpc() || get_magic_quotes_runtime()) { $params = $this->stripSlashes($params); } else { $params = $this->ensureParamsUTF8($params); } if (empty($params)) { continue; } elseif (is_array($params) && count($params) > 0) { if (!is_array($result)) { $result = $params; } else { foreach ($params as $key => $value) { $result[$key] = $value; } } } else { $result = $params; } } return $result; } /** * Ensure UTF8 in parameters * * @param mixed $var array or string * @access public * @return mixed string or array or NULL */ function ensureParamsUTF8($var, $recursionCount = 5) { if (isset($var)) { if (is_array($var)) { if ($recursionCount > 0) { $result = array(); foreach ($var as $key => $value) { $result[$key] = $this->ensureParamsUTF8($value, $recursionCount - 1); } return $result; } } else { return papaya_strings::decodeInputData($var); } } return NULL; } /** * Strip slashes * * @param mixed $var array or string * @access public * @return mixed string or array or NULL */ function stripSlashes($var, $recursionCount = 40) { if (isset($var)) { $result = array(); if (is_array($var)) { foreach ($var as $key => $value) { if ($recursionCount > 0) { $result[$key] = $this->stripSlashes($value, $recursionCount - 1); } } return $result; } else { return $this->ensureParamsUTF8(stripslashes($var)); } } return NULL; } /** * Initialisation of session-parameter * * If the parameter this->params[name] is set all variables within $resetParams get reset. * Otherwise if $this->sessionParams[$name] is set the parameter will replace * this->params[$name]. If there is no parameter set with name $name, this->params set to NULL * * @param string $name name of the parameter * @param array $resetParams array parameter optional, default NULL * @access public */ function initializeSessionParam($name, $resetParams = NULL) { if (isset($this->params[$name])) { if (isset($resetParams) && is_array($resetParams) && ((!isset($this->sessionParams[$name])) || ($this->params[$name] != $this->sessionParams[$name]))) { foreach ($resetParams as $paramName) { if (isset($this->params[$paramName])) { unset($this->params[$paramName]); } if (isset($this->sessionParams[$paramName])) { unset($this->sessionParams[$paramName]); } } } $this->sessionParams[$name] = $this->params[$name]; } elseif (isset($this->sessionParams[$name])) { $this->params[$name] = $this->sessionParams[$name]; } else { $this->params[$name] = NULL; } } /** * Get base link * * @param integer $pageId * @param integer $categId * @access public * @return string $baseLink URL */ function getBaseLink($pageId = 0, $categId = 0) { $data = $this->parseRequestURI(); if (isset($data['output']) && ($data['output'] == 'media' || $data['output'] == 'image')) { return $data['filename']; } elseif ($pageId > 0) { $pId = (int)$pageId; } elseif ($data['page_id'] > 0) { $pId = (int)$data['page_id']; } elseif (defined('PAPAYA_ADMIN_PAGE') && PAPAYA_ADMIN_PAGE) { $pId = 0; } elseif (isset($GLOBALS['PAPAYA_PAGE']) && is_object($GLOBALS['PAPAYA_PAGE']) && is_a($GLOBALS['PAPAYA_PAGE'], 'papaya_page')) { $pId = $GLOBALS['PAPAYA_PAGE']->topicId; } elseif (isset($_GET['p_id']) && $_GET['p_id'] > 0) { $pId = (int)$_GET['p_id']; } else { $pId = 0; } if ($categId > 0) { $cId = $categId; } elseif (isset($data['categ_id']) && $data['categ_id'] > 0) { $cId = (int)$data['categ_id']; } else { $cId = 0; } $baseLink = $data['filename']; if ($pId > 0 && $cId > 0) { $baseLink .= '.'.$cId; } if ($pId > 0) { $baseLink .= '.'.$pId; } if (isset($data['language']) && $data['language'] != '') { $baseLink .= '.'.$data['language']; } $baseLink .= '.'.$data['ext']; if ($data['preview']) { if ($data['datetime']) { $baseLink .= '.'.(int)$data['datetime']; } $baseLink .= '.preview'; } return $baseLink; } /** * get base path to current script * * @param boolean $withDocumentRoot optional, default value FALSE * @access public * @return string */ function getBasePath($withDocumentRoot = FALSE) { $path = dirname($_SERVER['SCRIPT_FILENAME']); if ($withDocumentRoot) { $result = $path; } else { if (preg_match('~^\w:~', $_SERVER['DOCUMENT_ROOT']) && (!preg_match('~^\w:~', $_SERVER['SCRIPT_FILENAME']))) { $result = substr($path, strlen($_SERVER['DOCUMENT_ROOT']) - 2); } else { $result = substr($path, strlen($_SERVER['DOCUMENT_ROOT'])); } } $result = str_replace('\\', '/', $result); if (substr($result, 0, 1) != '/' && substr($result, 1, 1) != ':') { $result = '/'.$result; } if (substr($result, -1) != '/') { $result .= '/'; } $result = strtr($result, array('////' => '/', '///' => '/', '//' => '/')); return $result; } /** * Parse request URI to filter data out of it * * @access public * @return array */ function parseRequestURI($URI = NULL) { if (empty($URI) && isset($_SERVER['REQUEST_URI'])) { $URI = $_SERVER['REQUEST_URI']; } if (defined('PAPAYA_PATH_WEB')) { $webPathQuoted = preg_quote(PAPAYA_PATH_WEB); } else { $webPathQuoted = '/'; } $pSid = '[a-zA-Z\d,-]{20,40}'; $pImage = '(/?(sid([a-z]*?('.$pSid.')))? ('.$webPathQuoted.') ([a-z\d_-]+)\.(image)(\.(gif|jpg|png)(\.preview)?)?)ix'; $pMedia = '~^/?(sid([a-z]*?('.$pSid.')))? ('.$webPathQuoted.') ([a-z\d_-]+\.(media|thumb|download|popup)(\.(preview))? (\.(([a-z\d_]+)(\.([a-z\d]+))?)))~ix'; $pPage = '~^/?(sid([a-z]*?('.$pSid.')))? #session id ('.$webPathQuoted.') # path (([a-z\d_-]+) #file title ((\.([\d]+))?\.([\d]+))? # category and page id ((\.([a-z]+))?\.(([a-oq-z]+|p(?!review))[a-z]*)) ((\.([\d]+))?\.(preview))?)~ix'; if (preg_match($pImage, $URI, $regs)) { $result = array( 'sid' => $regs[2], 'path' => $regs[5], 'filename' => '', 'ident' => $regs[5], 'language' => '', 'ext' => 'image', 'output' => 'image', 'preview' => ((@$regs[9] == '.preview') ? TRUE : FALSE), ); } elseif (preg_match($pMedia, $URI, $regs)) { $mediaTypes = array('media', 'thumb', 'download', 'popup'); $result = array( 'sid' => $regs[2], 'path' => $regs[4], 'filename' => $regs[5], 'media_id' => $regs[10], 'categ_id' => 0, 'page_id' => 0, 'language' => '', 'ext' => (in_array($regs[6], $mediaTypes) ? $regs[6] : 'media'), 'preview' => ((@$regs[8] == 'preview') ? TRUE : FALSE), 'datetime' => 0, 'output' => 'media' ); } elseif (preg_match($pPage, $URI, $regs)) { $result = array( 'sid' => $regs[2], 'path' => $regs[4], 'filename' => $regs[6], 'categ_id' => (int)$regs[9], 'page_id' => (int)$regs[10], 'language' => ($regs[13] != '') ? $regs[13] : '', 'ext' => $regs[14], 'preview' => ((@$regs[19] == 'preview') ? TRUE : FALSE), 'datetime' => ((@$regs[18] > 0) ? (int)$regs[18] : 0), 'output' => 'page' ); if ($pos = strpos($URI, 'catalog=')) { $result['categ_id'] = (int)substr($URI, $pos + strlen('catalog=')); } } else { $fileName = 'index'; $ext = 'php'; if (defined('PAPAYA_ADMIN_PAGE') && PAPAYA_ADMIN_PAGE) { if (preg_match('~([a-z_\.-]+)\.([a-z_-]+)(\?|$)~', $URI, $regs)) { $fileName = $regs[1]; $ext = $regs[2]; } elseif (preg_match('~([a-z_\.-]+)\.([a-z_-]+)(\?|$)~', $_SERVER['SCRIPT_FILENAME'], $regs)) { $fileName = $regs[1]; $ext = $regs[2]; } } elseif (defined('PAPAYA_URL_EXTENSION') && trim(PAPAYA_URL_EXTENSION) != '') { $ext = PAPAYA_URL_EXTENSION; } $result = array( 'sid' => NULL, 'path' => '', 'filename' => $fileName, 'page_id' => 0, 'categ_id' => 0, 'language' => '', 'ext' => $ext, 'preview' => FALSE, 'datetime' => 0, 'output' => 'page' ); } return $result; } /** * Get web link * * @param mixed $pageId optional, page id, default value NULL * @param integer $lng optional, language id, default value NULL * @param string $mode optional, default value 'page' * @param mixed $params optional, default value NULL * @param mixed $paramName optional, default value NULL * @param string $text optional, default value empty string * @param integer $categId optional, default value NULL * @access public * @return string Weblink */ function getWebLink($pageId = NULL, $lng = NULL, $mode = NULL, $params = NULL, $paramName = NULL, $text = '', $categId = NULL) { if (!isset($pageId)) { if (isset($GLOBALS['PAPAYA_PAGE']) && isset($GLOBALS['PAPAYA_PAGE']->requestData['page_id'])) { $pageId = (int)$GLOBALS['PAPAYA_PAGE']->requestData['page_id']; } else { $pageId = 0; } } if (!isset($categId)) { if (isset($GLOBALS['PAPAYA_PAGE']) && isset($GLOBALS['PAPAYA_PAGE']->requestData['categ_id'])) { $categId = (int)$GLOBALS['PAPAYA_PAGE']->requestData['categ_id']; } else { $categId = 0; } } if (isset($mode) && strpos($mode, '.preview') !== FALSE) { $mode = substr($mode, 0, -8); $preview = '.preview'; } elseif ((isset($GLOBALS['PAPAYA_PAGE']) && $GLOBALS['PAPAYA_PAGE']->public == FALSE) || $mode == 'preview' || $mode == 'xmlpreview') { if (isset($GLOBALS['PAPAYA_PAGE']) && $GLOBALS['PAPAYA_PAGE']->versionDateTime > 0) { $preview = '.'.((int)$GLOBALS['PAPAYA_PAGE']->versionDateTime).'.preview'; } else { $preview = '.preview'; } } else { $preview = ''; } $subCateg = ($categId > 0) ? '.'.(int)$categId : ''; $subPage = ($pageId > 0) ? '.'.(int)$pageId : ''; if (isset($lng) && trim($lng) != '') { $lngString = '.'.$lng; } elseif (isset($_REQUEST['language']) && preg_match('/^[a-z]{1,3}$/', $_REQUEST['language'])) { $lngString = '.'.$_REQUEST['language']; } else { $lngString = ''; } $pageModes = array( 'page' => '.'.PAPAYA_URL_EXTENSION, 'preview' => '.'.PAPAYA_URL_EXTENSION, 'xmlpreview' => '.xml' ); if (isset($mode) && isset($pageModes[$mode])) { $ext = $pageModes[$mode]; } elseif (isset($mode) && preg_match('~^[a-z]+$~', $mode)) { $ext = '.'.$mode; } elseif (isset($GLOBALS['PAPAYA_PAGE']) && is_object($GLOBALS['PAPAYA_PAGE']) && isset($GLOBALS['PAPAYA_PAGE']->mode)) { $ext = '.'.$GLOBALS['PAPAYA_PAGE']->mode; } elseif (defined('PAPAYA_URL_EXTENSION') && trim(PAPAYA_URL_EXTENSION) != '') { $ext = '.'.PAPAYA_URL_EXTENSION; } else { $ext = '.php'; } $path = (defined('PAPAYA_ADMIN_PAGE') && PAPAYA_ADMIN_PAGE) ? '../' : ''; $fileName = $this->escapeForFilename($text, 'index').$subCateg.$subPage. $lngString.$ext.$preview; return $path.$fileName.$this->encodeQueryString($params, $paramName); } /** * Encode query string * * @param array &$params array of params * @param string $paramName optional param name * @param integer $maxDepth optional default 5 * @access public * @return string */ function encodeQueryString($params, $paramName = NULL, $maxDepth = 5) { if (isset($params) && is_array($params)) { $ignore = array('p_id', 'p_pagemode', 'preview'); foreach ($ignore as $key) { if (isset($params[$key])) { unset($params[$key]); } } $ignoreEmpty = array('preview_date'); foreach ($ignoreEmpty as $key) { if (isset($params[$key]) && $params[$key] == '') { unset($params[$key]); } } $queryString = $this->encodeQueryStringRec($params, $paramName, NULL, $maxDepth); if (strlen($queryString) > 0) { return '?'.substr($queryString, 1); } } return ''; } /** * Encode/Create the QueryString params (rekursive function) * * @param array &$params array of params * @param mixed $paramName base param name * @param mixed $prefix paramname prefix * @param integer $maxDepth depth levels left * @access private * @return string */ function encodeQueryStringRec(&$params, $paramName, $prefix, $maxDepth) { if ($maxDepth < 1) { return ''; } if (isset($params) && is_array($params) && count($params) > 0) { $result = ''; if (isset($paramName)) { if (isset($prefix)) { if (defined('PAPAYA_URL_LEVEL_SEPARATOR') && in_array(PAPAYA_URL_LEVEL_SEPARATOR, $this->urlLevelSeparators)) { $namebase = $prefix.PAPAYA_URL_LEVEL_SEPARATOR.urlencode($paramName); } else { $namebase = $prefix.'['.urlencode($paramName).']'; } } else { $namebase = urlencode($paramName); } foreach ($params as $name=>$value) { if (is_array($value)) { $result .= $this->encodeQueryStringRec($value, $name, $namebase, $maxDepth - 1); } else { if (defined('PAPAYA_URL_LEVEL_SEPARATOR') && in_array(PAPAYA_URL_LEVEL_SEPARATOR, $this->urlLevelSeparators)) { $result .= '&'.$namebase.PAPAYA_URL_LEVEL_SEPARATOR. urlencode($name).'='.urlencode($value); } else { $result .= '&'.$namebase.'['.urlencode($name).']='.urlencode($value); } } } } else { foreach ($params as $name => $value) { if (is_array($value)) { $result .= $this->encodeQueryStringRec($value, $name, NULL, $maxDepth - 1); } else { $result .= '&'.urlencode($name).'='.urlencode($value); } } } return $result; } return ''; } /** * Recode query string * * @param string $queryString * @access public * @return string */ function recodeQueryString($queryString, $newQueryParams = array()) { $queryParams = array(); $queryString = urldecode($queryString); $listParamCounts = array(); if (preg_match_all('~(^|[?&])(([^=&?]+)=([^&]+))|([^&]+)~', $queryString, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { if (isset($match[3]) && $match[3] != '') { if (substr($match[3], -2) == '[]') { if (isset($listParamCounts[$match[3]])) { ++$listParamCounts[$match[3]]; } else { $listParamCounts[$match[3]] = 0; } $paramKey = substr($match[3], 0, -2).'['.$listParamCounts[$match[3]].']='; $queryParams[$paramKey] = $match[4]; } else { $queryParams[$match[3].'='] = $match[4]; } } elseif (isset($match[5])) { $queryParams[$match[5]] = TRUE; } } } $result = ''; if (count($queryParams) > 0) { foreach ($queryParams as $paramKey => $paramValue) { if (substr($paramKey, -1) == '=') { $paramName = substr($paramKey, 0, -1); if (array_key_exists($paramName, $newQueryParams)) { if ($newQueryParams[$paramName] !== NULL) { $result .= '&'.urlencode($paramName).'='. urlencode($newQueryParams[$paramName]); unset($newQueryParams[$paramName]); } } else { $result .= '&'.urlencode($paramName).'='. urlencode($paramValue); } } else { $result .= '&'.urlencode($paramKey); } } } if (count($newQueryParams) > 0) { foreach ($newQueryParams as $paramName => $paramValue) { if ($paramValue !== NULL) { $result .= '&'.urlencode($paramName).'='. urlencode($paramValue); } } } if (strlen($result) > 1) { return '?'.substr($result, 1); } else { return ''; } } /** * Escape chars in a string to use it in a filename * * @param string $str * @param string $default returned if str is empty * @access public * @return string */ function escapeForFilename($str, $default = 'index') { if (defined('PAPAYA_URL_NAMELENGTH') && PAPAYA_URL_NAMELENGTH > 0) { $str = papaya_strings::normalizeString($str, PAPAYA_URL_NAMELENGTH); } else { $str = papaya_strings::normalizeString($str, 50); } if ($str != '') { return strtolower($str); } else { return $default; } } /** * Get web media link * * @param string $mid GUID * @param string $mode optional, default value 'media' * @param string $text optional, default value '' * @param string $ext optional, default value '' * @return mixed */ function getWebMediaLink($mid, $mode = 'media', $text = '', $ext = '') { $pageModes = array( 'media' => '.media', 'download' => '.download', 'popup' => '.popup', 'thumb' => '.thumb' ); if (!empty($ext)) { if (substr($mid, (strlen($ext) + 1) * -1) == '.'.$ext) { $ext = ''; } else { $ext = '.'.$ext; } } $mode = (isset($pageModes[$mode])) ? $pageModes[$mode]: $pageModes['media']; $public = (isset($GLOBALS['PAPAYA_PAGE']) && $GLOBALS['PAPAYA_PAGE']->public) ? '' : '.preview'; $text = preg_replace('#\.[a-z]{1,4}$#', '', $text); $path = (defined('PAPAYA_ADMIN_PAGE') && PAPAYA_ADMIN_PAGE) ? '../' : ''; $result = $path.$this->escapeForFilename($text, 'index').$mode.$public. '.'.$mid.$ext; return $result; } /** * Return absolute URL * * @param string $url * @param string $text optional, default value '' * @param boolean $sid optional, default value TRUE * @access public * @return string URL */ function getAbsoluteURL($url, $text = '', $sid = TRUE) { $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; $baseHref = $protocol."://".$_SERVER['HTTP_HOST']; include_once(PAPAYA_INCLUDE_PATH.'system/sys_session.php'); $this->sessionObj = &rewrite_session::getInstance(); if ($this->sessionObj->started && $this->sessionObj->checkSIDPath() && $sid) { $sidStr = '/'.$this->sessionObj->sessionName.$this->sessionObj->sessionId; } else { $sidStr = ''; } if (FALSE !== ($pos = strpos($url, '?'))) { $urlAppend = substr($url, $pos); $url = substr($url, 0, $pos); } elseif (FALSE !== ($pos = strpos($url, '#'))) { $urlAppend = substr($url, $pos); $url = substr($url, 0, $pos); } else { $urlAppend = ''; } $pageId = (int)$url; include_once(PAPAYA_INCLUDE_PATH.'system/sys_checkit.php'); if ($url == '/') { $href = $baseHref.PAPAYA_PATH_WEB; } elseif (preg_match("#^(\d+)\.(\d+)$#", trim($url), $regs)) { $href = $baseHref.$sidStr.PAPAYA_PATH_WEB.$this->getWebLink( (int)$regs[2], NULL, NULL, NULL, NULL, $text, (int)$regs[1]); } elseif ($pageId > 0 && preg_match("#^\d+$#", trim($url))) { $href = $baseHref.$sidStr.PAPAYA_PATH_WEB.$this->getWebLink( $pageId, NULL, NULL, NULL, NULL, $text); } elseif (checkit::isHTTPX($url)) { $href = $url; } elseif (preg_match("#^/#", $url)) { $href = $baseHref.$sidStr.$url; } else { $iUrl = $_SERVER['REQUEST_URI']; if (FALSE === ($pos = strpos($iUrl, '?'))) { $pos = strpos($iUrl, '#'); } if (FALSE !== $pos) { $iUrl = substr($iUrl, 0, $pos); } $iUrl = preg_replace('([^/]+$)', '', $iUrl); $href = $baseHref.$iUrl.$url; } $href = preg_replace('~'.preg_quote(PAPAYA_PATH_ADMIN).'/../~', '/', $href); return $href.$urlAppend; } /** * Get link * * @param mixed $params optional, default value NULL (no Query String) * @param mixed $paramName optional, default value NULL ($this->paramName) * @param string $fileName * @param integer $pageId * @access public * @return string */ function getLink($params = NULL, $paramName = NULL, $fileName = '', $pageId = NULL) { if (isset($fileName) && trim($fileName) != '') { $link = $fileName; } else { $link = $this->getBaseLink(0); } if ((!isset($paramName)) && isset($this->paramName)) { $queryString = $this->encodeQueryString($params, $this->paramName); } elseif ($paramName == '') { $queryString = $this->encodeQueryString($params, NULL); } else { $queryString = $this->encodeQueryString($params, $paramName); } if (isset($pageId) && $pageId > 0) { if (trim($queryString) != '') { return $link.$queryString.'&p_id='.(int)$pageId; } else { return $link.'?p_id='.(int)$pageId; } } else { return $link.$queryString; } } /** * Show the debug of the variable &$var * * @param mixed $var auszugebende Variable * @access public */ function debug() { if ((!isset($this)) || is_a($this, 'base_log')) { return 0; } if (defined('PAPAYA_GLOBAL_LOGOBJECT') && (trim(PAPAYA_GLOBAL_LOGOBJECT) != '')) { if (isset($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]) && is_object($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT])) { $params = func_get_args(); call_user_func_array(array(&$GLOBALS[PAPAYA_GLOBAL_LOGOBJECT], 'debug'), $params); } } } function debugMsg($msg) { if ((!isset($this)) || is_a($this, 'base_log')) { return 0; } if (defined('PAPAYA_GLOBAL_LOGOBJECT') && (trim(PAPAYA_GLOBAL_LOGOBJECT) != '')) { if (isset($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]) && is_object($GLOBALS[PAPAYA_GLOBAL_LOGOBJECT])) { $GLOBALS[PAPAYA_GLOBAL_LOGOBJECT]->debugMsg($msg); } } } /** * prepends another directory to include path (if it doesn`t exist yet) * but leaves the current directory ('.') at position one * * @param string $newPath the new include directory to be added * @return boolean $wasModified whether the include path has been modified or not */ function addIncludePath($newPath) { if (is_string($newPath) && trim($newPath) != '') { $completePath = get_include_path(); if (substr(PHP_OS, 0, 3) == 'WIN') { $sep = ';'; } else { $sep = ':'; } $paths = explode($sep, $completePath); if (is_array($paths) && count($paths) > 0) { if (in_array($newPath, $paths)) { return FALSE; } else { if ($paths[0] == '.') { array_shift($paths); $paths = array_merge(array('.', $newPath), $paths); } else { $paths = array_merge($newPath, $paths); } } } else { $paths = $newPath; } if (set_include_path(implode($sep, $paths))) { return TRUE; } } return FALSE; } /** * Create XHTML-compliant string. * * @param string $str * @param boolean $nlToBr Convert line break in XHTML * @access public * @return string */ function getXHTMLString($str, $nlToBr = FALSE) { $iStr = papaya_strings::entityToXML($str); if ($nlToBr) { $iStr = preg_replace_callback("/((<[^>]*)|\r\n|\n|\r)/", array(&$this, 'htmlLinebreakToBr'), $iStr); } include_once(PAPAYA_INCLUDE_PATH.'system/papaya_strings.php'); include_once(PAPAYA_INCLUDE_PATH.'system/sys_simple_xmltree.php'); if (trim($iStr) == '') { return ''; } elseif (simple_xmltree::isXML("".$iStr."", $this)) { return $iStr; } elseif (defined('PAPAYA_DBG_XML_USERINPUT') && PAPAYA_DBG_XML_USERINPUT === '1') { include_once(PAPAYA_INCLUDE_PATH.'system/papaya_xsl.php'); $lineOut = (papaya_xsl::getFormattedLines( $iStr, $this->lastXMLError[1]['line'], FALSE)); return ''.$lineOut.''; } else { return papaya_strings::escapeHTMLChars($iStr); } } /** * Callback-function - transform \r\n in <br />. * * @param array $regs Trefferdaten * @return string $result */ function htmlLinebreakToBr($regs) { $result = @($regs[2] == $regs[1]) ? $regs[1] : '
'; return $result; } /** * wenn $var '' ist wird NULL zurueckgegeben * wenn $var !='' ist werden Datenbankkritische * Zeichen mit Backslash versehen und das Ergbnis * unter Hochkomma gesetzt. */ protected function addslashes($var) { return ($var!=''?"'".addslashes($var)."'":'null'); } } ?>