Source for file Contenido_UrlBuilder_MR.class.php
Documentation is available at Contenido_UrlBuilder_MR.class.php
* Contenido Content Management System
* Implementation of Contenido_UrlBuilder to build front_content.php URL
* @copyright © Murat Purc 2008
* @license http://www.contenido.org/license/LIZENZ.txt
* @link http://www.4fb.de
* @link http://www.contenido.org
cInclude('classes', 'UrlBuilder/Contenido_UrlBuilder.class.php');
cInclude('classes', 'UrlBuilder/Contenido_UrlBuilderFactory.class.php');
* Class to build urls frontend urls for Advandced Mod Rewrite plugin.
* Extends abstract Contenido_UrlBuilder class and implements singleton pattern.
* $url = 'front_content.php?idart=123';
* cInclude('plugins', 'mod_rewrite/classes/Contenido_UrlBuilder_MR.class.php');
* $mrUrlBuilder = Contenido_UrlBuilder_MR::getInstance();
* $mrUrlBuilder->buildUrl(array($url));
* $newUrl = $mrUrlBuilder->getUrl();
* @author Murat Purc <murat@purc.de>
* @copyright © Murat Purc 2008
* @var Contenido_UrlBuilder_MR Self instance
* @var string Ampersant used for composong several parameter
* @var bool Is XHTML output?
* @var bool Is mod rewrite enabled?
* @var array Mod Rewrite configuration
* Constructor, tries to set some member variables.
$this->sHttpBasePath =
'';
if ($GLOBALS['cfg']['mod_rewrite']['use'] ==
1) {
$this->_aMrCfg =
$GLOBALS['cfg']['mod_rewrite'];
$this->_bIsXHTML =
(getEffectiveSetting('generator', 'xhtml', 'false') ==
'false') ?
false :
true;
* Returns a instance of Contenido_UrlBuilder_MR
* @return Contenido_UrlBuilder_MR
if (self::$_instance ==
null) {
self::$_instance =
new Contenido_UrlBuilder_MR();
* Builds a URL in front_content.php style.
* @param array $params Parameter array, provides only following parameters:
* $params[0] = 'front_content.php?idart=123...'
* @param boolean $bUseAbsolutePath Flag to use absolute path, not used at the moment
* @return string new build url
public function buildUrl(array $params, $bUseAbsolutePath=
false) {
$url =
(isset
($params[0])) ?
$params[0] :
'';
// cleanup any existing & entities
$url =
str_replace('&', '&', $url);
// now a little hack to replace occuring index_controller.php against
// front_content.php. This happens using $auth->url()/$auth->purl()
// which composes the URL using $PHP_SELF
if (strpos($url, 'index_controller.php') !==
false) {
$url =
str_replace('index_controller.php', 'front_content.php', $url);
// self_url returns url including absoute path from root (/cms/foobar.php)
$path =
$GLOBALS['cfgClient'][$GLOBALS['client']]['path']['htmlpath'];
$comp =
@parse_url($path);
if (isset
($comp['path']) &&
(strpos($url, $comp['path']) ===
0)) {
$url =
substr($url, strlen($comp['path']));
$aUrl =
ModRewrite::get_client_full_url_parts($url);
if (preg_match("/^front_content\.php(.*|.+?)/i", $aUrl['url'], $arr_hits) ==
1) {
$url =
$aUrl['htmlpath'] .
self::_buildUrl($arr_hits[1]);
$GLOBALS['mpDebug']->addDebug($url, 'Contenido_UrlBuilder_MR::buildUrl() nomatch');
// replace & against entity, if xhtml is to use
$GLOBALS['mpDebug']->addDebug($urlDebug, 'Contenido_UrlBuilder_MR::buildUrl() in -> out');
* Private function to build the url by analyzing passed arguments (parameter value pairs)
* TODO: Too much code in one function -> is to redesign...
* @param string $args Arguments
* @return string New build url
$sJoinParameter =
$this->_aMrCfg['category_seperator'];
$sFileExtension =
$this->_aMrCfg['file_extension'];
// check arguments ... and split
// extract arguments into current scope
// some preparations to avoid too much checks in further code blocks
$idcat =
(isset
($idcat)) ? (int)
$idcat :
0;
$idart =
(isset
($idart)) ? (int)
$idart :
0;
$idcatart =
(isset
($idcatart)) ? (int)
$idcatart :
0;
$idartlang =
(isset
($idartlang)) ? (int)
$idartlang :
0;
$changelang =
(isset
($changelang)) ? (int)
$changelang :
0;
$changeclient =
(isset
($changeclient)) ? (int)
$changeclient :
0;
// get additional non contenido parameters
$aAdditionalParams =
array();
$aParamPairs =
split('&', $args);
'idcat', 'idart', 'lang', 'client', 'idcatart', 'changelang', 'changeclient', 'idartlang'
foreach ($aParamPairs as $sPair) {
foreach ($aIgnoredParams as $sKey) {
if ($bFoundBad ==
false) {
if (count($aAdditionalParams) >
0) {
$sAdditionalParams =
'?' .
implode($this->_sAmp, $aAdditionalParams);
$idlang =
($changelang >
0) ?
$changelang :
$GLOBALS['lang'];
$idclient =
($changeclient >
0) ?
$changeclient :
$GLOBALS['client'];
if ($this->_aMrCfg['use_client'] ==
1) {
if ($this->_aMrCfg['use_client_name'] ==
1) {
if ($this->_aMrCfg['use_language'] ==
1) {
if ($this->_aMrCfg['use_language_name'] ==
1) {
$sNewUrl =
$this->_aMrCfg['rootdir'];
if ($idcatart >
0 &&
$idcat ==
0 &&
$idart ==
0 &&
$idartlang ==
0) {
$sql =
"SELECT idcat, idart FROM " .
$GLOBALS['cfg']['tab']['cat_art'] .
" WHERE idcatart='$idcatart'";
$idcat =
$aData['idcat'];
$idart =
$aData['idart'];
// check if article id is given and set article url
if ($idart >
0 &&
$idartlang ==
0) {
} elseif ($idartlang >
0 &&
$idart ==
0) {
// check if only article id is given, cat id have to rebuild
if ($idart >
0 &&
$idcat ==
0 &&
$idartlang ==
0) {
$sql =
"SELECT idcat FROM " .
$GLOBALS['cfg']['tab']['cat_art'] .
" WHERE idart='$idart'";
$idcat =
$aData['idcat'];
if ($idartlang >
0 &&
$idcat ==
0 &&
$idart ==
0) {
FROM " .
$GLOBALS['cfg']['tab']['art_lang'] .
" al
LEFT JOIN " .
$GLOBALS['cfg']['tab']['cat_art'] .
" ca ON al.idart = ca.idart
WHERE al.idartlang='$idartlang'";
$idcat =
$aData['idcat'];
// we have category but no article name and start article name should be added to url
if ($idcat >
0 &&
$sArticle ==
'' &&
$this->_aMrCfg['add_startart_name_to_url']) {
if ($this->_aMrCfg['default_startart_name'] ==
'') {
// no default article name is configured get startarticle
cInclude('classes', 'class.article.php');
$artColl =
new ArticleCollection(array('idcat' =>
$idcat, 'start' =>
1));
if ($artItem =
$artColl->startArticle()) {
// use default start article name
$sArticle =
$this->_aMrCfg['default_startart_name'];
$sFileExtension =
$this->_aMrCfg['file_extension'];
// ok build dir list, if idcat found ...
// check start directory settings
if ($this->_aMrCfg['startfromroot'] ==
0) {
// splitt string in array
$aCategories =
explode($sJoinParameter, $sCategories);
// implode array with categories to new string
$sCategories =
implode($sJoinParameter, $aCategories);
if (strlen($sCategories) >
0) {
$aParts[] =
$sCategories;
$sParts =
implode($sJoinParameter, $aParts);
$sParts .=
$this->_aMrCfg['article_seperator'];
} elseif ((int)
$this->_aMrCfg['use_categories_as_html_file'] !=
1 &&
strlen($sParts) >
0) {
$sParts .=
$sJoinParameter;
if ($this->_aMrCfg['use_lowercase_uri'] ==
1) {
$sFullUrl =
$sNewUrl .
strtolower($sParts .
$sArticle .
$sFileExtension) .
$sAdditionalParams .
$sAnchor;
$sFullUrl =
$sNewUrl .
$sParts .
$sArticle .
$sFileExtension .
$sAdditionalParams .
$sAnchor;
while (eregi($sJoinParameter.
$sJoinParameter, $sFullUrl)) {
$sFullUrl =
eregi_replace($sJoinParameter .
$sJoinParameter, $sJoinParameter, $sFullUrl);
if (substr($sFullUrl, -
2) ==
'?=') {
Documentation generated on Sun, 03 Aug 2008 22:21:58 +0200 by phpDocumentor 1.4.0