306 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			9,8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			306 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			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;
 | |
|     }
 | |
| 
 | |
| } |