306 Zeilen
9,8 KiB
PHP
306 Zeilen
9,8 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* AMR url utility class
|
||
|
*
|
||
|
* @package plugin
|
||
|
* @subpackage Mod Rewrite
|
||
|
* @version SVN Revision $Rev: 128 $
|
||
|
* @id $Id: class.modrewriteurlutil.php 128 2019-07-03 11:58:28Z oldperl $:
|
||
|
* @author Murat Purc <murat@purc.de>
|
||
|
* @copyright four for business AG <www.4fb.de>
|
||
|
* @license http://www.contenido.org/license/LIZENZ.txt
|
||
|
* @link http://www.4fb.de
|
||
|
* @link http://www.contenido.org
|
||
|
*/
|
||
|
|
||
|
if (!defined('CON_FRAMEWORK')) {
|
||
|
die('Illegal call');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Mod Rewrite url utility class. Handles convertion of Urls from CONTENIDO core
|
||
|
* based url composition pattern to AMR (Advanced Mod Rewrite) url composition
|
||
|
* pattern and vice versa.
|
||
|
*
|
||
|
* @author Murat Purc <murat@purc.de>
|
||
|
* @package plugin
|
||
|
* @subpackage Mod Rewrite
|
||
|
*/
|
||
|
class ModRewriteUrlUtil extends ModRewriteBase {
|
||
|
|
||
|
/**
|
||
|
* Self instance (singleton implementation)
|
||
|
* @var ModRewriteUrlUtil
|
||
|
*/
|
||
|
private static $_instance;
|
||
|
|
||
|
/**
|
||
|
* CONTENIDO category word separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_catWordSep = '-';
|
||
|
|
||
|
/**
|
||
|
* AMR category word separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_mrCatWordSep;
|
||
|
|
||
|
/**
|
||
|
* CONTENIDO category separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_catSep = '/';
|
||
|
|
||
|
/**
|
||
|
* AMR category separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_mrCatSep;
|
||
|
|
||
|
/**
|
||
|
* CONTENIDO article separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_artSep = '/';
|
||
|
|
||
|
/**
|
||
|
* AMR article separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_mrArtSep;
|
||
|
|
||
|
/**
|
||
|
* CONTENIDO article word separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_artWordSep = '-';
|
||
|
|
||
|
/**
|
||
|
* AMR article word separator
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_mrArtWordSep;
|
||
|
|
||
|
/**
|
||
|
* AMR extension used for articlenames (e. g. .html)
|
||
|
* @var string
|
||
|
*/
|
||
|
private $_mrExt;
|
||
|
|
||
|
/**
|
||
|
* Constructor, sets some AMR configuration related properties
|
||
|
*/
|
||
|
private function __construct() {
|
||
|
$aCfg = parent::getConfig();
|
||
|
$this->_mrCatWordSep = $aCfg['category_word_seperator'];
|
||
|
$this->_mrCatSep = $aCfg['category_seperator'];
|
||
|
$this->_mrArtSep = $aCfg['article_seperator'];
|
||
|
$this->_mrArtWordSep = $aCfg['article_word_seperator'];
|
||
|
$this->_mrExt = $aCfg['file_extension'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prevent cloning
|
||
|
*/
|
||
|
private function __clone() {
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns self instance (singleton pattern)
|
||
|
* @return ModRewriteUrlUtil
|
||
|
*/
|
||
|
public static function getInstance() {
|
||
|
if (self::$_instance == null) {
|
||
|
self::$_instance = new ModRewriteUrlUtil();
|
||
|
}
|
||
|
return self::$_instance;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed AMR url path to CONTENIDO url path.
|
||
|
*
|
||
|
* @param string $urlPath AMR url path
|
||
|
* @return string CONTENIDO url path
|
||
|
*/
|
||
|
public function toContenidoUrlPath($urlPath) {
|
||
|
$newUrlPath = $this->_toUrlPath(
|
||
|
$urlPath, $this->_mrCatSep, $this->_catSep, $this->_mrCatWordSep, $this->_catWordSep, $this->_mrArtSep, $this->_artSep
|
||
|
);
|
||
|
return $newUrlPath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed CONTENIDO url path to AMR url path.
|
||
|
*
|
||
|
* @param string $urlPath CONTENIDO url path
|
||
|
* @return string AMR url path
|
||
|
*/
|
||
|
public function toModRewriteUrlPath($urlPath) {
|
||
|
$newUrlPath = $this->_toUrlPath(
|
||
|
$urlPath, $this->_catSep, $this->_mrCatSep, $this->_catWordSep, $this->_mrCatWordSep, $this->_artSep, $this->_mrArtSep
|
||
|
);
|
||
|
return $newUrlPath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed url path to a another url path (CONTENIDO to AMR and vice versa).
|
||
|
*
|
||
|
* @param string $urlPath Source url path
|
||
|
* @param string $fromCatSep Source category seperator
|
||
|
* @param string $toCatSep Destination category seperator
|
||
|
* @param string $fromCatWordSep Source category word seperator
|
||
|
* @param string $toCatWordSep Destination category word seperator
|
||
|
* @param string $fromArtSep Source article seperator
|
||
|
* @param string $toArtSep Destination article seperator
|
||
|
* @return string Destination url path
|
||
|
*/
|
||
|
private function _toUrlPath($urlPath, $fromCatSep, $toCatSep, $fromCatWordSep, $toCatWordSep, $fromArtSep, $toArtSep) {
|
||
|
if ((string) $urlPath == '') {
|
||
|
return $urlPath;
|
||
|
}
|
||
|
|
||
|
if (substr($urlPath, -1) == $fromArtSep) {
|
||
|
$urlPath = substr($urlPath, 0, -1) . '{TAS}';
|
||
|
}
|
||
|
|
||
|
// pre replace category word seperator and category seperator
|
||
|
$urlPath = str_replace($fromCatWordSep, '{CWS}', $urlPath);
|
||
|
$urlPath = str_replace($fromCatSep, '{CS}', $urlPath);
|
||
|
|
||
|
// replace category word seperator
|
||
|
$urlPath = str_replace('{CWS}', $toCatWordSep, $urlPath);
|
||
|
$urlPath = str_replace('{CS}', $toCatSep, $urlPath);
|
||
|
|
||
|
$urlPath = str_replace('{TAS}', $toArtSep, $urlPath);
|
||
|
|
||
|
return $urlPath;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed AMR url name to CONTENIDO url name.
|
||
|
*
|
||
|
* @param string $urlName AMR url name
|
||
|
* @return string CONTENIDO url name
|
||
|
*/
|
||
|
public function toContenidoUrlName($urlName) {
|
||
|
$newUrlName = $this->_toUrlName($urlName, $this->_mrArtWordSep, $this->_artWordSep);
|
||
|
return $newUrlName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed CONTENIDO url name to AMR url name.
|
||
|
*
|
||
|
* @param string $urlName CONTENIDO url name
|
||
|
* @return string AMR url name
|
||
|
*/
|
||
|
public function toModRewriteUrlName($urlName) {
|
||
|
$newUrlName = $this->_toUrlName($urlName, $this->_artWordSep, $this->_mrArtWordSep);
|
||
|
return $newUrlName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed url name to a another url name (CONTENIDO to AMR and vice versa).
|
||
|
*
|
||
|
* @param string $urlName Source url name
|
||
|
* @param string $fromArtWordSep Source article word seperator
|
||
|
* @param string $toArtWordSep Destination article word seperator
|
||
|
* @return string Destination url name
|
||
|
*/
|
||
|
private function _toUrlName($urlName, $fromArtWordSep, $toArtWordSep) {
|
||
|
if ((string) $urlName == '') {
|
||
|
return $urlName;
|
||
|
}
|
||
|
|
||
|
$urlName = str_replace($this->_mrExt, '{EXT}', $urlName);
|
||
|
|
||
|
// replace article word seperator
|
||
|
$urlName = str_replace($fromArtWordSep, $toArtWordSep, $urlName);
|
||
|
|
||
|
$urlName = str_replace('{EXT}', $this->_mrExt, $urlName);
|
||
|
|
||
|
return $urlName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed AMR url to CONTENIDO url.
|
||
|
*
|
||
|
* @param string $url AMR url
|
||
|
* @return string CONTENIDO url
|
||
|
*/
|
||
|
public function toContenidoUrl($url) {
|
||
|
if (strpos($url, $this->_mrExt) === false) {
|
||
|
$newUrl = $this->toContenidoUrlPath($url);
|
||
|
} else {
|
||
|
// replace category word and article word seperator
|
||
|
$path = substr($url, 0, strrpos($url, $this->_mrArtSep) + 1);
|
||
|
$name = substr($url, strrpos($url, $this->_mrArtSep) + 1);
|
||
|
$newUrl = $this->toContenidoUrlPath($path) . $this->toContenidoUrlName($name);
|
||
|
}
|
||
|
return $newUrl;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed AMR url to CONTENIDO url.
|
||
|
*
|
||
|
* @param string $url AMR url
|
||
|
* @return string CONTENIDO url
|
||
|
*/
|
||
|
public function toModRewriteUrl($url) {
|
||
|
if (strpos($url, $this->_mrExt) === false) {
|
||
|
$newUrl = $this->toModRewriteUrlPath($url);
|
||
|
} else {
|
||
|
// replace category word and article word seperator
|
||
|
$path = substr($url, 0, strrpos($url, $this->_artSep) + 1);
|
||
|
$name = substr($url, strrpos($url, $this->_artSep) + 1);
|
||
|
$newUrl = $this->toModRewriteUrlPath($path) . $this->toModRewriteUrlName($name);
|
||
|
}
|
||
|
return $newUrl;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts passed url to a another url (CONTENIDO to AMR and vice versa).
|
||
|
*
|
||
|
* @param string $url Source url
|
||
|
* @param string $fromCatSep Source category seperator
|
||
|
* @param string $toCatSep Destination category seperator
|
||
|
* @param string $fromCatWordSep Source category word seperator
|
||
|
* @param string $toCatWordSep Destination category word seperator
|
||
|
* @param string $fromArtSep Source article seperator
|
||
|
* @param string $toArtSep Destination article seperator
|
||
|
* @param string $fromArtWordSep Source article word seperator
|
||
|
* @param string $toArtWordSep Destination article word seperator
|
||
|
* @return string Destination url
|
||
|
*
|
||
|
* @deprecated No more used, is to delete
|
||
|
*/
|
||
|
private function _toUrl($url, $fromCatSep, $toCatSep, $fromCatWordSep, $toCatWordSep, $fromArtSep, $toArtSep, $fromArtWordSep, $toArtWordSep) {
|
||
|
if ((string) $url == '') {
|
||
|
return $url;
|
||
|
}
|
||
|
|
||
|
$url = str_replace($this->_mrExt, '{EXT}', $url);
|
||
|
|
||
|
// replace category seperator
|
||
|
$url = str_replace($fromCatSep, $toCatSep, $url);
|
||
|
|
||
|
// replace article seperator
|
||
|
$url = str_replace($fromArtSep, $toArtSep, $url);
|
||
|
|
||
|
$url = str_replace('{EXT}', $this->_mrExt, $url);
|
||
|
|
||
|
if (strpos($url, $this->_mrExt) === false) {
|
||
|
// no articlename, replace category word seperator
|
||
|
$url = str_replace($fromCatWordSep, $toCatWordSep, $url);
|
||
|
} else {
|
||
|
// replace category word and article word seperator
|
||
|
$path = str_replace($fromCatWordSep, $toCatWordSep, substr($url, 0, strrpos($url, $toArtSep) + 1));
|
||
|
$file = str_replace($fromArtWordSep, $toArtWordSep, substr($url, strrpos($url, $toArtSep) + 1));
|
||
|
$url = $path . $file;
|
||
|
}
|
||
|
|
||
|
return $url;
|
||
|
}
|
||
|
|
||
|
}
|