1
0
Fork 0
cl-mod-rewrite/classes/controller/class.modrewrite_contenttes...

177 Zeilen
6.0 KiB
PHP

<?php
/**
* AMR test controller
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewrite_contenttest_controller.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');
}
/**
* Content controller to run tests.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewrite_ContentTestController extends ModRewrite_ControllerAbstract {
/**
* Number of max items to process
* @var int
*/
protected $_iMaxItems = 0;
/**
* Initializer method, sets some view variables
*/
public function init() {
$this->_oView->content = '';
$this->_oView->form_idart_chk = ($this->_getParam('idart')) ? ' checked="checked"' : '';
$this->_oView->form_idcat_chk = ($this->_getParam('idcat')) ? ' checked="checked"' : '';
$this->_oView->form_idcatart_chk = ($this->_getParam('idcatart')) ? ' checked="checked"' : '';
$this->_oView->form_idartlang_chk = ($this->_getParam('idartlang')) ? ' checked="checked"' : '';
$this->_oView->form_maxitems = (int) $this->_getParam('maxitems', 200);
$this->_iMaxItems = $this->_oView->form_maxitems;
}
/**
* Index action
*/
public function indexAction() {
$this->_oView->content = '';
}
/**
* Test action
*/
public function testAction() {
$this->_oView->content = '';
// Array for testcases
$aTests = array();
// Instance of mr test
$oMRTest = new ModRewriteTest($this->_iMaxItems);
$startTime = getmicrotime();
// Fetch complete CONTENIDO page structure
$aStruct = $oMRTest->fetchFullStructure();
ModRewriteDebugger::add($aStruct, 'ModRewrite_ContentTestController::testAction() $aStruct');
// Loop through the structure and compose testcases
foreach ($aStruct as $idcat => $aCat) {
// category
$aTests[] = array(
'url' => $oMRTest->composeURL($aCat, 'c'),
'level' => $aCat['level'],
'name' => $aCat['name']
);
foreach ($aCat['articles'] as $idart => $aArt) {
// articles
$aTests[] = array(
'url' => $oMRTest->composeURL($aArt, 'a'),
'level' => $aCat['level'],
'name' => $aCat['name'] . ' :: ' . $aArt['title']
);
}
}
// compose content
$this->_oView->content = '<pre>';
$oMRUrlStack = ModRewriteUrlStack::getInstance();
// first loop to add urls to mr url stack
foreach ($aTests as $p => $v) {
$oMRUrlStack->add($v['url']);
}
$successCounter = 0;
$failCounter = 0;
// second loop to do the rest
foreach ($aTests as $p => $v) {
$url = mr_buildNewUrl($v['url']);
$arr = $oMRTest->resolveUrl($url);
$error = '';
$resUrl = $oMRTest->getResolvedUrl();
$color = 'green';
if ($url !== $resUrl) {
if ($oMRTest->getRoutingFoundState()) {
$successCounter++;
$resUrl = 'route to -&gt; ' . $resUrl;
} else {
$color = 'red';
$failCounter++;
}
} else {
$successCounter++;
}
// @todo: translate
if (isset($arr['error'])) {
switch ($arr['error']) {
case ModRewriteController::ERROR_CLIENT:
$error = 'client';
break;
case ModRewriteController::ERROR_LANGUAGE:
$error = 'language';
break;
case ModRewriteController::ERROR_CATEGORY:
$error = 'category';
break;
case ModRewriteController::ERROR_ARTICLE:
$error = 'article';
break;
case ModRewriteController::ERROR_POST_VALIDATION:
$error = 'validation';
break;
}
}
$pref = str_repeat(' ', $v['level']);
// render resolve information for current item
$itemTpl = $this->_oView->lng_result_item_tpl;
$itemTpl = str_replace('{pref}', $pref, $itemTpl);
$itemTpl = str_replace('{name}', $v['name'], $itemTpl);
$itemTpl = str_replace('{url_in}', $v['url'], $itemTpl);
$itemTpl = str_replace('{url_out}', $url, $itemTpl);
$itemTpl = str_replace('{color}', $color, $itemTpl);
$itemTpl = str_replace('{url_res}', $resUrl, $itemTpl);
$itemTpl = str_replace('{err}', $error, $itemTpl);
$itemTpl = str_replace('{data}', $oMRTest->getReadableResolvedData($arr), $itemTpl);
$this->_oView->content .= "\n" . $itemTpl . "\n";
}
$this->_oView->content .= '</pre>';
$totalTime = sprintf('%.4f', (getmicrotime() - $startTime));
// render information about current test
$msg = $this->_oView->lng_result_message_tpl;
$msg = str_replace('{time}', $totalTime, $msg);
$msg = str_replace('{num_urls}', ($successCounter + $failCounter), $msg);
$msg = str_replace('{num_success}', $successCounter, $msg);
$msg = str_replace('{num_fail}', $failCounter, $msg);
$this->_oView->content = $msg . $this->_oView->content;
}
}