300 Zeilen
		
	
	
	
		
			8,5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			300 Zeilen
		
	
	
	
		
			8,5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * AMR test class
 | |
|  *
 | |
|  * @package     plugin
 | |
|  * @subpackage  Mod Rewrite
 | |
|  * @version     SVN Revision $Rev: 128 $
 | |
|  * @id          $Id: class.modrewritetest.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 test class.
 | |
|  *
 | |
|  * @author      Murat Purc <murat@purc.de>
 | |
|  * @package     plugin
 | |
|  * @subpackage  Mod Rewrite
 | |
|  */
 | |
| class ModRewriteTest {
 | |
| 
 | |
|     /**
 | |
|      * Global $cfg array
 | |
|      * @var  array
 | |
|      */
 | |
|     protected $_aCfg;
 | |
| 
 | |
|     /**
 | |
|      * Global $cfg['tab'] array
 | |
|      * @var  array
 | |
|      */
 | |
|     protected $_aCfgTab;
 | |
| 
 | |
|     /**
 | |
|      * Max items to process
 | |
|      * @var  int
 | |
|      */
 | |
|     protected $_iMaxItems;
 | |
| 
 | |
|     /**
 | |
|      * Actual resolved url
 | |
|      * @var  string
 | |
|      */
 | |
|     protected $_sResolvedUrl;
 | |
| 
 | |
|     /**
 | |
|      * Routing found flag
 | |
|      * @var  bool
 | |
|      */
 | |
|     protected $_bRoutingFound = false;
 | |
| 
 | |
|     /**
 | |
|      * Constuctor
 | |
|      * @param  int  $maxItems  Max items (urls to articles/categories) to process
 | |
|      */
 | |
|     public function __construct($maxItems) {
 | |
|         global $cfg;
 | |
|         $this->_aCfg = & $cfg;
 | |
|         $this->_aCfgTab = & $cfg['tab'];
 | |
|         $this->_iMaxItems = $maxItems;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns resolved URL
 | |
|      *
 | |
|      * @return  bool  Resolved URL
 | |
|      */
 | |
|     public function getResolvedUrl() {
 | |
|         return $this->_sResolvedUrl;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns flagz about found routing
 | |
|      *
 | |
|      * @return  bool
 | |
|      */
 | |
|     public function getRoutingFoundState() {
 | |
|         return $this->_bRoutingFound;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Fetchs full structure of the installation (categories and articles) and returns it back.
 | |
|      *
 | |
|      * @param   int    $idclient  Client id
 | |
|      * @param   int    $idlang    Language id
 | |
|      * @return  array  Full structure as follows
 | |
|      * <code>
 | |
|      *   $arr[idcat] = Category dataset
 | |
|      *   $arr[idcat]['articles'][idart] = Article dataset
 | |
|      * </code>
 | |
|      */
 | |
|     public function fetchFullStructure($idclient = null, $idlang = null) {
 | |
|         global $client, $lang;
 | |
| 
 | |
|         $db = new DB_Contenido();
 | |
|         $db2 = new DB_Contenido();
 | |
| 
 | |
|         if (!$idclient || (int) $idclient == 0) {
 | |
|             $idclient = $client;
 | |
|         }
 | |
|         if (!$idlang || (int) $idlang == 0) {
 | |
|             $idlang = $lang;
 | |
|         }
 | |
| 
 | |
|         $aTab = $this->_aCfgTab;
 | |
| 
 | |
|         $aStruct = array();
 | |
| 
 | |
|         $sql = "SELECT
 | |
|                     *
 | |
|                 FROM
 | |
|                     " . $aTab['cat_tree'] . " AS a,
 | |
|                     " . $aTab['cat_lang'] . " AS b,
 | |
|                     " . $aTab['cat'] . " AS c
 | |
|                 WHERE
 | |
|                     a.idcat = b.idcat AND
 | |
|                     c.idcat = a.idcat AND
 | |
|                     c.idclient = '" . $idclient . "' AND
 | |
|                     b.idlang = '" . $idlang . "'
 | |
|                 ORDER BY
 | |
|                     a.idtree";
 | |
| 
 | |
|         $db->query($sql);
 | |
| 
 | |
|         $counter = 0;
 | |
| 
 | |
|         while ($db->next_record()) {
 | |
| 
 | |
|             if (++$counter == $this->_iMaxItems) {
 | |
|                 break; // break this loop
 | |
|             }
 | |
| 
 | |
|             $idcat = $db->f('idcat');
 | |
|             $aStruct[$idcat] = $db->Record;
 | |
|             $aStruct[$idcat]['articles'] = array();
 | |
| 
 | |
|             $sql2 = "SELECT
 | |
|                          *
 | |
|                      FROM
 | |
|                          " . $aTab['cat_art'] . "  AS a,
 | |
|                          " . $aTab['art'] . "      AS b,
 | |
|                          " . $aTab['art_lang'] . " AS c
 | |
|                      WHERE
 | |
|                          a.idcat = '" . $idcat . "' AND
 | |
|                          b.idart = a.idart AND
 | |
|                          c.idart = a.idart AND
 | |
|                          c.idlang = '" . $idlang . "' AND
 | |
|                          b.idclient = '" . $idclient . "'
 | |
|                      ORDER BY
 | |
|                          c.title ASC";
 | |
| 
 | |
|             $db2->query($sql2);
 | |
| 
 | |
|             while ($db2->next_record()) {
 | |
|                 $idart = $db2->f('idart');
 | |
|                 $aStruct[$idcat]['articles'][$idart] = $db2->Record;
 | |
|                 if (++$counter == $this->_iMaxItems) {
 | |
|                     break 2; // break this and also superior loop
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $aStruct;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Creates an URL using passed data.
 | |
|      *
 | |
|      * The result is used to generate seo urls...
 | |
|      *
 | |
|      * @param  array  $arr  Assoziative array with some data as follows:
 | |
|      * <code>
 | |
|      * $arr['idcat']
 | |
|      * $arr['idart']
 | |
|      * $arr['idcatart']
 | |
|      * $arr['idartlang']
 | |
|      * </code>
 | |
|      * @param  string  $type  Either 'c' or 'a' (category or article). If set to
 | |
|      *                        'c' only the parameter idcat will be added to the URL
 | |
|      */
 | |
|     public function composeURL($arr, $type) {
 | |
|         $type = ($type == 'a') ? 'a' : 'c';
 | |
| 
 | |
|         $param = array();
 | |
| 
 | |
|         if ($type == 'c') {
 | |
|             $param[] = 'idcat=' . $arr['idcat'];
 | |
|         } else {
 | |
|             if (mr_getRequest('idart')) {
 | |
|                 $param[] = 'idart=' . $arr['idart'];
 | |
|             }
 | |
|             if (mr_getRequest('idcat')) {
 | |
|                 $param[] = 'idcat=' . $arr['idcat'];
 | |
|             }
 | |
|             if (mr_getRequest('idcatart')) {
 | |
|                 $param[] = 'idcatart=' . $arr['idcatart'];
 | |
|             }
 | |
|             if (mr_getRequest('idartlang')) {
 | |
|                 $param[] = 'idartlang=' . $arr['idartlang'];
 | |
|             }
 | |
|         }
 | |
|         $param[] = 'foo=bar';
 | |
|         return 'front_content.php?' . implode('&', $param);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Resolves variables of an page (idcat, idart, idclient, idlang, etc.) by
 | |
|      * processing passed url using ModRewriteController
 | |
|      *
 | |
|      * @param   string  $url  Url to resolve
 | |
|      * @return  array   Assoziative array with resolved data
 | |
|      */
 | |
|     public function resolveUrl($url) {
 | |
|         // some globals to reset
 | |
|         $aGlobs = array(
 | |
|             'mr_preprocessedPageError', 'idart', 'idcat'
 | |
|         );
 | |
|         foreach ($aGlobs as $p => $k) {
 | |
|             if (isset($GLOBALS[$k])) {
 | |
|                 unset($GLOBALS[$k]);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         $aReturn = array();
 | |
| 
 | |
|         // create an mod rewrite controller instance and execute processing
 | |
|         $oMRController = new ModRewriteController($url);
 | |
|         $oMRController->execute();
 | |
| 
 | |
|         if ($oMRController->errorOccured()) {
 | |
| 
 | |
|             // an error occured (idcat and or idart couldn't catched by controller)
 | |
|             $aReturn['mr_preprocessedPageError'] = 1;
 | |
|             $aReturn['error'] = $oMRController->getError();
 | |
| 
 | |
|             $this->_sResolvedUrl = '';
 | |
|             $this->_bRoutingFound = false;
 | |
|         } else {
 | |
| 
 | |
|             // set some global variables
 | |
| 
 | |
|             $this->_sResolvedUrl = $oMRController->getResolvedUrl();
 | |
|             $this->_bRoutingFound = $oMRController->getRoutingFoundState();
 | |
| 
 | |
|             if ($oMRController->getClient()) {
 | |
|                 $aReturn['client'] = $oMRController->getClient();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getChangeClient()) {
 | |
|                 $aReturn['changeclient'] = $oMRController->getChangeClient();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getLang()) {
 | |
|                 $aReturn['lang'] = $oMRController->getLang();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getChangeLang()) {
 | |
|                 $aReturn['changelang'] = $oMRController->getChangeLang();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getIdArt()) {
 | |
|                 $aReturn['idart'] = $oMRController->getIdArt();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getIdCat()) {
 | |
|                 $aReturn['idcat'] = $oMRController->getIdCat();
 | |
|             }
 | |
| 
 | |
|             if ($oMRController->getPath()) {
 | |
|                 $aReturn['path'] = $oMRController->getPath();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $aReturn;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Creates a readable string from passed resolved data array.
 | |
|      *
 | |
|      * @param   array   Assoziative array with resolved data
 | |
|      * @return  string  Readable resolved data
 | |
|      */
 | |
|     public function getReadableResolvedData(array $data) {
 | |
|         // compose resolved string
 | |
|         $ret = '';
 | |
|         foreach ($data as $k => $v) {
 | |
|             $ret .= $k . '=' . $v . '; ';
 | |
|         }
 | |
|         $ret = substr($ret, 0, strlen($ret) - 2);
 | |
|         return $ret;
 | |
|     }
 | |
| 
 | |
| }
 |