1
0
Fork 0
Dieser Commit ist enthalten in:
Ortwin Pinke 2019-11-04 16:57:28 +01:00 committet von GitHub
Ursprung d41e3b5158
Commit 16ad56ae48
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
41 geänderte Dateien mit 8754 neuen und 0 gelöschten Zeilen

1071
classes/class.modrewrite.php Normale Datei

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Datei anzeigen

@ -0,0 +1,87 @@
<?php
/**
* AMR base Mod Rewrite class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewritebase.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');
}
/**
* Abstract base mod rewrite class.
*
* Provides some common features such as common debugging, globals/configuration
* access for childs.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
abstract class ModRewriteBase {
/**
* Initialization, is to call at least once by an child.
* @deprecated
*/
protected static function initialize($clientId) {
}
/**
* Returns enabled state of mod rewrite plugin
*
* @return bool
*/
public static function isEnabled() {
return (self::getConfig('use', 0) == 1) ? true : false;
}
/**
* Sets the enabled state of mod rewrite plugin
*
* @param bool $bEnabled
*/
public static function setEnabled($bEnabled) {
self::setConfig('use', (bool) $bEnabled);
}
/**
* Returns configuration of mod rewrite, content of gobal $cfg['mod_rewrite']
*
* @param string $key Name of configuration key
* @param mixed $default Default value to return as a fallback
* @return mixed Desired value mr configuration, either the full configuration
* or one of the desired subpart
*/
public static function getConfig($key = null, $default = null) {
global $cfg;
if ($key == null) {
return $cfg['mod_rewrite'];
} elseif ((string) $key !== '') {
return (isset($cfg['mod_rewrite'][$key])) ? $cfg['mod_rewrite'][$key] : $default;
} else {
return $default;
}
}
/**
* Sets the configuration of mod rewrite, content of gobal $cfg['mod_rewrite']
*
* @param string $key Name of configuration key
* @param mixed $value The value to set
*/
public static function setConfig($key, $value) {
global $cfg;
$cfg['mod_rewrite'][$key] = $value;
}
}

Datei anzeigen

@ -0,0 +1,678 @@
<?php
/**
* AMR controller class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewritecontroller.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 controller class. Extracts url parts and sets some necessary globals like:
* - $idart
* - $idcat
* - $client
* - $changeclient
* - $lang
* - $changelang
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewriteController extends ModRewriteBase {
// Error constants
const ERROR_CLIENT = 1;
const ERROR_LANGUAGE = 2;
const ERROR_CATEGORY = 3;
const ERROR_ARTICLE = 4;
const ERROR_POST_VALIDATION = 5;
const FRONT_CONTENT = 'front_content.php';
/**
* Extracted request uri path parts by path separator '/'
*
* @var array
*/
private $_aParts;
/**
* Extracted article name from request uri
*
* @var string
*/
private $_sArtName;
/**
* Remaining path for path resolver (see $GLOBALS['path'])
*
* @var string
*/
private $_sPath;
/**
* Incomming URL
*
* @var string
*/
private $_sIncommingUrl;
/**
* Resolved URL
*
* @var string
*/
private $_sResolvedUrl;
/**
* Client id used by this class
*
* @var int
*/
private $_iClientMR;
/**
* Language id used by this class
*
* @var int
*/
private $_iLangMR;
/**
* Flag about occured errors
*
* @var bool
*/
private $_bError = false;
/**
* One of ERROR_* constants or 0
*
* @var int
*/
private $_iError = 0;
/**
* Flag about found routing definition
*
* @var bool
*/
private $_bRoutingFound = false;
/**
* Constructor, sets several properties.
*
* @param string $incommingUrl Incomming URL
*/
public function __construct($incommingUrl) {
// CON-1266 make incomming URL lowercase if option "URLS to
// lowercase" is set
if (1 == $this->getConfig('use_lowercase_uri')) {
$incommingUrl = strtolower($incommingUrl);
}
$this->_sIncommingUrl = $incommingUrl;
$this->_aParts = array();
$this->_sArtName = '';
}
/**
* Getter for overwritten client id (see $GLOBALS['client'])
*
* @return int Client id
*/
public function getClient() {
return $GLOBALS['client'];
}
/**
* Getter for overwritten change client id (see $GLOBALS['changeclient'])
*
* @return int Change client id
*/
public function getChangeClient() {
return $GLOBALS['changeclient'];
}
/**
* Getter for article id (see $GLOBALS['idart'])
*
* @return int Article id
*/
public function getIdArt() {
return $GLOBALS['idart'];
}
/**
* Getter for category id (see $GLOBALS['idcat'])
*
* @return int Category id
*/
public function getIdCat() {
return $GLOBALS['idcat'];
}
/**
* Getter for language id (see $GLOBALS['lang'])
*
* @return int Language id
*/
public function getLang() {
return $GLOBALS['lang'];
}
/**
* Getter for change language id (see $GLOBALS['changelang'])
*
* @return int Change language id
*/
public function getChangeLang() {
return $GLOBALS['changelang'];
}
/**
* Getter for path (see $GLOBALS['path'])
*
* @return string Path, used by path resolver
*/
public function getPath() {
return $this->_sPath;
}
/**
* Getter for resolved url
*
* @return string Resolved url
*/
public function getResolvedUrl() {
return $this->_sResolvedUrl;
}
/**
* Returns a flag about found routing definition
*
* return bool Flag about found routing
*/
public function getRoutingFoundState() {
return $this->_bRoutingFound;
}
/**
* Getter for occured error state
*
* @return bool Flag for occured error
*/
public function errorOccured() {
return $this->_bError;
}
/**
* Getter for occured error state
*
* @return int Numeric error code
*/
public function getError() {
return $this->_iError;
}
/**
* Main function to call for mod rewrite related preprocessing jobs.
*
* Executes some private functions to extract request URI and to set needed membervariables
* (client, language, article id, category id, etc.)
*/
public function execute() {
if (parent::isEnabled() == false) {
return;
}
$this->_extractRequestUri();
$this->_initializeClientId();
$this->_setClientId();
mr_loadConfiguration($this->_iClientMR);
$this->_setLanguageId();
// second call after setting client and language
$this->_extractRequestUri(true);
$this->_setPathresolverSetting();
$this->_setIdart();
ModRewriteDebugger::add($this->_aParts, 'ModRewriteController::execute() _setIdart');
$this->_postValidation();
}
/**
* Extracts request URI and sets member variables $this->_sArtName and $this->_aParts
*
* @param bool $secondCall Flag about second call of this function, is needed
* to re extract url if a routing definition was found
*/
private function _extractRequestUri($secondCall = false) {
global $client;
// get REQUEST_URI
$requestUri = $_SERVER['REQUEST_URI'];
// CON-1266 make request URL lowercase if option "URLS to
// lowercase" is set
if (1 == $this->getConfig('use_lowercase_uri')) {
$requestUri = strtolower($requestUri);
}
// check for defined rootdir
if (parent::getConfig('rootdir') !== '/' && strpos($requestUri, $this->_sIncommingUrl) === 0) {
$this->_sIncommingUrl = str_replace(parent::getConfig('rootdir'), '/', $this->_sIncommingUrl);
}
$aUrlComponents = $this->_parseUrl($this->_sIncommingUrl);
if (isset($aUrlComponents['path'])) {
if (parent::getConfig('rootdir') !== '/' && strpos($aUrlComponents['path'], parent::getConfig('rootdir')) === 0) {
$aUrlComponents['path'] = str_replace(parent::getConfig('rootdir'), '/', $aUrlComponents['path']);
}
if ($secondCall == true) {
// @todo: implement real redirect of old front_content.php style urls
// check for routing definition
$routings = parent::getConfig('routing');
if (is_array($routings) && isset($routings[$aUrlComponents['path']])) {
$aUrlComponents['path'] = $routings[$aUrlComponents['path']];
if (strpos($aUrlComponents['path'], self::FRONT_CONTENT) !== false) {
// routing destination contains front_content.php
$this->_bRoutingFound = true;
// set client language, if not set before
mr_setClientLanguageId($client);
//rebuild URL
$url = mr_buildNewUrl($aUrlComponents['path']);
$aUrlComponents = $this->_parseUrl($url);
// add query parameter to superglobal _GET
if (isset($aUrlComponents['query'])) {
$vars = null;
parse_str($aUrlComponents['query'], $vars);
$_GET = array_merge($_GET, $vars);
}
$this->_aParts = array();
}
} else {
return;
}
}
$aPaths = explode('/', $aUrlComponents['path']);
foreach ($aPaths as $p => $item) {
if (!empty($item)) {
// pathinfo would also work
$arr = explode('.', $item);
$count = count($arr);
if ($count > 0 && '.' . strtolower($arr[$count - 1]) == parent::getConfig('file_extension')) {
array_pop($arr);
$this->_sArtName = trim(implode('.', $arr));
} else {
$this->_aParts[] = $item;
}
}
}
if ($secondCall == true) {
// reprocess extracting client and language
$this->_setClientId();
mr_loadConfiguration($this->_iClientMR);
$this->_setLanguageId();
}
}
ModRewriteDebugger::add($this->_aParts, 'ModRewriteController::_extractRequestUri() $this->_aParts');
// loop parts array and remove existing 'front_content.php'
if ($this->_hasPartArrayItems()) {
foreach ($this->_aParts as $p => $item) {
if ($item == self::FRONT_CONTENT) {
unset($this->_aParts[$p]);
}
}
}
}
/**
* Tries to initialize the client id.
* This is required to load the proper plugin configuration for current client.
*/
private function _initializeClientId() {
global $client, $changeclient, $load_client;
$iClient = (isset($client) && (int) $client > 0) ? $client : 0;
$iChangeClient = (isset($changeclient) && (int) $changeclient > 0) ? $changeclient : 0;
$iLoadClient = (isset($load_client) && (int) $load_client > 0) ? $load_client : 0;
$this->_iClientMR = 0;
if ($iClient > 0 && $iChangeClient == 0) {
$this->_iClientMR = $iClient;
} elseif ($iChangeClient > 0) {
$this->_iClientMR = $iChangeClient;
} else {
$this->_iClientMR = $iLoadClient;
}
if ((int) $this->_iClientMR > 0) {
// set global client variable
$client = (int) $this->_iClientMR;
}
}
/**
* Tries to initialize the language id.
*/
private function _initializeLanguageId() {
global $lang, $changelang, $load_lang;
$iLang = (isset($lang) && (int) $lang > 0) ? $lang : 0;
$iChangeLang = (isset($changelang) && (int) $changelang > 0) ? $changelang : 0;
$iLoadLang = (isset($load_lang) && (int) $load_lang > 0) ? $load_lang : 0;
$this->_iLangMR = 0;
if ($iLang > 0 && $iChangeLang == 0) {
$this->_iLangMR = $iLang;
} elseif ($iChangeLang > 0) {
$this->_iLangMR = $iChangeLang;
} else {
$this->_iLangMR = $iLoadLang;
}
if ((int) $this->_iLangMR > 0) {
// set global lang variable
$lang = (int) $this->_iLangMR;
}
}
/**
* Detects client id from given url
*/
private function _setClientId() {
global $client;
if ($this->_bError) {
return;
} elseif ($this->_isRootRequest()) {
// request to root
return;
} elseif (parent::getConfig('use_client') !== 1) {
return;
}
if (parent::getConfig('use_client_name') == 1) {
$detectedClientId = (int) ModRewrite::getClientId(array_shift($this->_aParts));
} else {
$detectedClientId = (int) array_shift($this->_aParts);
if ($detectedClientId > 0 && !ModRewrite::languageIdExists($detectedClientId)) {
$detectedClientId = 0;
}
}
if ($detectedClientId > 0) {
// overwrite existing client variables
$this->_iClientMR = $detectedClientId;
$client = $detectedClientId;
} else {
$this->_setError(self::ERROR_CLIENT);
}
}
/**
* Sets language id
*/
private function _setLanguageId() {
global $lang;
if ($this->_bError) {
return;
} elseif ($this->_isRootRequest()) {
// request to root
return;
} elseif (parent::getConfig('use_language') !== 1) {
return;
}
if (parent::getConfig('use_language_name') == 1) {
// thanks to Nicolas Dickinson for multi Client/Language BugFix
$languageName = array_shift($this->_aParts);
$detectedLanguageId = (int) ModRewrite::getLanguageId($languageName, $this->_iClientMR);
} else {
$detectedLanguageId = (int) array_shift($this->_aParts);
if ($detectedLanguageId > 0 && !ModRewrite::clientIdExists($detectedLanguageId)) {
$detectedLanguageId = 0;
}
}
if ($detectedLanguageId > 0) {
// overwrite existing language variables
$this->_iLangMR = $detectedLanguageId;
$lang = $detectedLanguageId;
} else {
$this->_setError(self::ERROR_LANGUAGE);
}
}
/**
* Sets path resolver and category id
*/
private function _setPathresolverSetting() {
global $client, $lang, $load_lang, $idcat;
if ($this->_bError) {
return;
} elseif (!$this->_hasPartArrayItems()) {
return;
}
$this->_sPath = '/' . implode('/', $this->_aParts) . '/';
if (!isset($lang) || (int) $lang <= 0) {
if ((int) $load_lang > 0) {
// load_client is set in frontend/config.php
$lang = (int) $load_lang;
} else {
// get client id from table
cInclude('classes', 'contenido/class.clientslang.php');
$clCol = new cApiClientLanguageCollection();
$clCol->setWhere('idclient', $client);
$clCol->query();
if ($clItem = $clCol->next()) {
$lang = $clItem->get('idlang');
}
}
}
$idcat = (int) ModRewrite::getCatIdByUrlPath($this->_sPath);
if ($idcat == 0) {
// category couldn't resolved
$this->_setError(self::ERROR_CATEGORY);
$idcat = null;
} else {
// unset $this->_sPath if $idcat could set, otherwhise it would be resolved again.
unset($this->_sPath);
}
ModRewriteDebugger::add($idcat, 'ModRewriteController->_setPathresolverSetting $idcat');
ModRewriteDebugger::add($this->_sPath, 'ModRewriteController->_setPathresolverSetting $this->_sPath');
}
/**
* Sets article id
*/
private function _setIdart() {
global $idcat, $idart, $lang;
if ($this->_bError) {
return;
} else if ($this->_isRootRequest()) {
return;
}
$iIdCat = (isset($idcat) && (int) $idcat > 0) ? $idcat : 0;
$iIdArt = (isset($idart) && (int) $idart > 0) ? $idart : 0;
$detectedIdart = 0;
$defaultStartArtName = parent::getConfig('default_startart_name');
$currArtName = $this->_sArtName;
// startarticle name in url
if (parent::getConfig('add_startart_name_to_url') && !empty($currArtName)) {
if ($currArtName == $defaultStartArtName) {
// stored articlename is the default one, remove it ModRewrite::getArtIdByWebsafeName()
// will find the real article name
$currArtName = '';
}
}
// Last check, before detecting article id
if ($iIdCat == 0 && $iIdArt == 0 && empty($currArtName)) {
// no idcat, idart and article name
// must be a request to root or with language name and/or client name part!
return;
}
if ($iIdCat > 0 && $iIdArt == 0 && !empty($currArtName)) {
// existing idcat with no idart and with article name
$detectedIdart = (int) ModRewrite::getArtIdByWebsafeName($currArtName, $iIdCat, $lang);
} elseif ($iIdCat > 0 && $iIdArt == 0 && empty($currArtName)) {
if (parent::getConfig('add_startart_name_to_url') && ($currArtName == '' || $defaultStartArtName == '' || $defaultStartArtName == $this->_sArtName)) {
// existing idcat without idart and without article name or with default start article name
cInclude('classes', 'class.article.php');
$artColl = new ArticleCollection(array('idcat' => $idcat, 'start' => 1));
if ($artItem = $artColl->startArticle()) {
$detectedIdart = (int) $artItem->get('idart');
}
}
} elseif ($iIdCat == 0 && $iIdArt == 0 && !empty($currArtName)) {
// no idcat and idart but article name
$detectedIdart = (int) ModRewrite::getArtIdByWebsafeName($currArtName, $iIdCat, $lang);
}
if ($detectedIdart > 0) {
$idart = $detectedIdart;
} elseif (!empty($currArtName)) {
$this->_setError(self::ERROR_ARTICLE);
}
ModRewriteDebugger::add($detectedIdart, 'ModRewriteController->_setIdart $detectedIdart');
}
/**
* Does post validation of the extracted data.
*
* One main goal of this function is to prevent duplicated content, which could happen, if
* the configuration 'startfromroot' is activated.
*/
private function _postValidation() {
global $idcat, $idart, $client;
if ($this->_bError || $this->_bRoutingFound || !$this->_hasPartArrayItems()) {
return;
}
if (parent::getConfig('startfromroot') == 1 && parent::getConfig('prevent_duplicated_content') == 1) {
// prevention of duplicated content if '/firstcat/' is directly requested!
$idcat = (isset($idcat) && (int) $idcat > 0) ? $idcat : null;
$idart = (isset($idart) && (int) $idart > 0) ? $idart : null;
// compose new parameter
$param = '';
if ($idcat) {
$param .= 'idcat=' . (int) $idcat;
}
if ($idart) {
$param .= ($param !== '') ? '&idart=' . (int) $idart : 'idart=' . (int) $idart;
}
if ($param == '') {
return;
}
// set client language, if not set before
mr_setClientLanguageId($client);
//rebuild url
$url = mr_buildNewUrl(self::FRONT_CONTENT . '?' . $param);
$aUrlComponents = @parse_url($this->_sIncommingUrl);
$incommingUrl = (isset($aUrlComponents['path'])) ? $aUrlComponents['path'] : '';
ModRewriteDebugger::add($url, 'ModRewriteController->_postValidation validate url');
ModRewriteDebugger::add($incommingUrl, 'ModRewriteController->_postValidation incommingUrl');
// now the new generated uri should be identical with the request uri
if ($incommingUrl !== $url) {
$this->_setError(self::ERROR_POST_VALIDATION);
$idcat = null;
}
}
}
/**
* Parses the url using defined separators
*
* @param string $url Incoming url
* @return string Parsed url
*/
private function _parseUrl($url) {
$this->_sResolvedUrl = $url;
$oMrUrlUtil = ModRewriteUrlUtil::getInstance();
$url = $oMrUrlUtil->toContenidoUrl($url);
return @parse_url($url);
}
/**
* Returns state of parts property.
*
* @return bool True if $this->_aParts propery contains items
*/
private function _hasPartArrayItems() {
return (!empty($this->_aParts));
}
/**
* Checks if current request was a root request.
*
* @return bool
*/
private function _isRootRequest() {
return ($this->_sIncommingUrl == '/' || $this->_sIncommingUrl == '');
}
/**
* Sets error code and error flag (everything greater than 0 is an error)
* @param int $errCode
*/
private function _setError($errCode) {
$this->_iError = (int) $errCode;
$this->_bError = ((int) $errCode > 0);
}
}

Datei anzeigen

@ -0,0 +1,88 @@
<?php
/**
* AMR debugger class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewritedebugger.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 debugger class.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewriteDebugger {
/**
* Flag to enable debugger
* @var bool
*/
protected static $_bEnabled = false;
/**
* Enable debugger setter.
* @param bool $bEnabled
*/
public static function setEnabled($bEnabled) {
self::$_bEnabled = (bool) $bEnabled;
}
/**
* Adds variable to debugger.
* Wrapper for <code>DebuggerFactory::getDebugger('visible_adv')</code>.
*
* @param mixed $mVar The variable to dump
* @param string $sLabel Describtion for passed $mVar
*/
public static function add($mVar, $sLabel = '') {
if (!self::$_bEnabled) {
return;
}
DebuggerFactory::getDebugger('visible_adv')->add($mVar, $sLabel);
}
/**
* Returns output of all added variables to debug.
* @return string
*/
public static function getAll() {
if (!self::$_bEnabled) {
return '';
}
ob_start();
DebuggerFactory::getDebugger('visible_adv')->showAll();
$output = ob_get_contents();
ob_end_clean();
return $output;
}
/**
* Logs variable to debugger.
* Wrapper for <code>cDebug::getDebugger(cDebug::DEBUGGER_FILE)</code>.
*
* @param mixed $mVar The variable to log the contents
* @param string $sLabel Describtion for passed $mVar
*/
public static function log($mVar, $sLabel = '') {
if (!self::$_bEnabled) {
return;
}
DebuggerFactory::getDebugger('file')->show($mVar, $sLabel);
}
}

Datei anzeigen

@ -0,0 +1,300 @@
<?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('&amp;', $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;
}
}

Datei anzeigen

@ -0,0 +1,314 @@
<?php
/**
* AMR url stack class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewriteurlstack.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 stack class. Provides features to collect urls and to get the
* pretty path and names of categories/articles at one go.
*
* Main goal of this class is to collect urls and to get the urlpath and urlname
* of the related categories/articles at one go. This will reduce the queries
* against the database.
* Therefore the full advantage will be taken by rewriting the urls at codeoutput
* in front_content.php, where you will be able to collect all urls at once...
*
* Usage:
* <code>
* // get the instance
* $oMRUrlStack = ModRewriteUrlStack::getInstance();
*
* // add several urls to fill the stack
* $oMRUrlStack->add('front_content.php?idcat=123');
* $oMRUrlStack->add('front_content.php?idart=321');
* $oMRUrlStack->add('front_content.php?idcatart=213');
* $oMRUrlStack->add('front_content.php?idcatlang=213');
* $oMRUrlStack->add('front_content.php?idartlang=312');
*
* // now the first call will get the pretty path and names from database at one go
* $aPrettyParts = $oMRUrlStack->getPrettyUrlParts('front_content.php?idcat=123');
* echo $aPrettyParts['urlpath']; // something like 'Main-category-name/Category-name/Another-category-name/'
* echo $aPrettyParts['urlname']; // something like 'Name-of-an-article'
* </code>
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewriteUrlStack {
/**
* Self instance
*
* @var ModRewriteUrlStack
*/
private static $_instance;
/**
* Database object
*
* @var DB_Contenido
*/
private $_oDb;
/**
* Array for urls
*
* @var array
*/
private $_aUrls = array();
/**
* Url stack array
*
* @var array
*/
private $_aStack = array();
/**
* CONTENIDO related parameter array
*
* @var array
*/
private $_aConParams = array(
'idcat' => 1, 'idart' => 1, 'lang' => 1, 'idcatlang' => 1, 'idcatart' => 1, 'idartlang' => 1
);
/**
* Database tables array
*
* @var array
*/
private $_aTab;
/**
* Language id
*
* @var int
*/
private $_idLang;
/**
* Constructor, sets some properties.
*/
private function __construct() {
global $cfg, $lang;
$this->_oDb = new DB_Contenido();
$this->_aTab = $cfg['tab'];
$this->_idLang = $lang;
}
/**
* Returns a instance of ModRewriteUrlStack (singleton implementation)
*
* @return ModRewriteUrlStack
*/
public static function getInstance() {
if (self::$_instance == null) {
self::$_instance = new ModRewriteUrlStack();
}
return self::$_instance;
}
/**
* Adds an url to the stack
*
* @param string Url, like front_content.php?idcat=123...
*/
public function add($url) {
$url = ModRewrite::urlPreClean($url);
if (isset($this->_aUrls[$url])) {
return;
}
$aUrl = $this->_extractUrl($url);
// cleanup parameter
foreach ($aUrl['params'] as $p => $v) {
if (!isset($this->_aConParams[$p])) {
unset($aUrl['params'][$p]);
} else {
$aUrl['params'][$p] = (int) $v;
}
}
// add language id, if not available
if ((int) mr_arrayValue($aUrl['params'], 'lang') == 0) {
$aUrl['params']['lang'] = $this->_idLang;
}
$sStackId = $this->_makeStackId($aUrl['params']);
$this->_aUrls[$url] = $sStackId;
$this->_aStack[$sStackId] = array('params' => $aUrl['params']);
}
/**
* Returns the pretty urlparts (only category path an article name) of the
* desired url.
*
* @param string Url, like front_content.php?idcat=123...
* @return array Assoziative array like
* <code>
* $arr['urlpath']
* $arr['urlname']
* </code>
*/
public function getPrettyUrlParts($url) {
$url = ModRewrite::urlPreClean($url);
if (!isset($this->_aUrls[$url])) {
$this->add($url);
}
$sStackId = $this->_aUrls[$url];
if (!isset($this->_aStack[$sStackId]['urlpath'])) {
$this->_chunkSetPrettyUrlParts();
}
$aPretty = array(
'urlpath' => $this->_aStack[$sStackId]['urlpath'],
'urlname' => $this->_aStack[$sStackId]['urlname']
);
return $aPretty;
}
/**
* Extracts passed url using parse_urla and adds also the 'params' array to it
*
* @param string Url, like front_content.php?idcat=123...
* @return array Components containing result of parse_url with additional
* 'params' array
*/
private function _extractUrl($url) {
$aUrl = @parse_url($url);
if (isset($aUrl['query'])) {
$aUrl['query'] = str_replace('&amp;', '&', $aUrl['query']);
parse_str($aUrl['query'], $aUrl['params']);
}
if (!isset($aUrl['params']) && !is_array($aUrl['params'])) {
$aUrl['params'] = array();
}
return $aUrl;
}
/**
* Extracts article or category related parameter from passed params array
* and generates an identifier.
*
* @param array $aParams Parameter array
* @return string Composed stack id
*/
private function _makeStackId(array $aParams) {
# idcatart
if ((int) mr_arrayValue($aParams, 'idart') > 0) {
$sStackId = 'idart_' . $aParams['idart'] . '_lang_' . $aParams['lang'];
} elseif ((int) mr_arrayValue($aParams, 'idartlang') > 0) {
$sStackId = 'idartlang_' . $aParams['idartlang'];
} elseif ((int) mr_arrayValue($aParams, 'idcatart') > 0) {
$sStackId = 'idcatart_' . $aParams['idcatart'] . '_lang_' . $aParams['lang'];
} elseif ((int) mr_arrayValue($aParams, 'idcat') > 0) {
$sStackId = 'idcat_' . $aParams['idcat'] . '_lang_' . $aParams['lang'];
} elseif ((int) mr_arrayValue($aParams, 'idcatlang') > 0) {
$sStackId = 'idcatlang_' . $aParams['idcatlang'];
} else {
$sStackId = 'lang_' . $aParams['lang'];
}
return $sStackId;
}
/**
* Main function to get the urlparts of urls.
*
* Composes the query by looping thru stored but non processed urls, executes
* the query and adds the (urlpath and urlname) result to the stack.
*/
private function _chunkSetPrettyUrlParts() {
// collect stack parameter to get urlpath and urlname
$aStack = array();
foreach ($this->_aStack as $stackId => $item) {
if (!isset($item['urlpath'])) {
// pretty url is to create
$aStack[$stackId] = $item;
}
}
// now, it's time to compose the where clause of the query
$sWhere = '';
foreach ($aStack as $stackId => $item) {
$aP = $item['params'];
if ((int) mr_arrayValue($aP, 'idart') > 0) {
$sWhere .= '(al.idart = ' . $aP['idart'] . ' AND al.idlang = ' . $aP['lang'] . ') OR ';
} elseif ((int) mr_arrayValue($aP, 'idartlang') > 0) {
$sWhere .= '(al.idartlang = ' . $aP['idartlang'] . ') OR ';
} elseif ((int) mr_arrayValue($aP, 'idcat') > 0) {
$sWhere .= '(cl.idcat = ' . $aP['idcat'] . ' AND cl.idlang = ' . $aP['lang'] . ' AND cl.startidartlang = al.idartlang) OR ';
} elseif ((int) mr_arrayValue($aP, 'idcatart') > 0) {
$sWhere .= '(ca.idcatart = ' . $aP['idcatart'] . ' AND ca.idart = al.idart AND al.idlang = ' . $aP['lang'] . ') OR ';
} elseif ((int) mr_arrayValue($aP, 'idcatlang') > 0) {
$sWhere .= '(cl.idcatlang = ' . $aP['idcatlang'] . ' AND cl.startidartlang = al.idartlang) OR ';
}
}
if ($sWhere == '') {
return;
}
$sWhere = substr($sWhere, 0, -4);
$sWhere = str_replace(' OR ', " OR \n", $sWhere);
// compose query and execute it
$sql = <<<SQL
SELECT
al.idartlang, al.idart, al.idlang as lang, al.urlname, cl.idcatlang, cl.idcat,
cl.urlpath, ca.idcatart
FROM
{$this->_aTab['art_lang']} AS al, {$this->_aTab['cat_lang']} AS cl, {$this->_aTab['cat_art']} AS ca
WHERE
al.idart = ca.idart AND
ca.idcat = cl.idcat AND
al.idlang = cl.idlang AND
( $sWhere )
SQL;
ModRewriteDebugger::add($sql, 'ModRewriteUrlStack->_chunkSetPrettyUrlParts() $sql');
$aNewStack = array();
// create array of fields, which are to reduce step by step from record set below
$aFields = array('', 'idart', 'idartlang', 'idcatart', 'idcat');
$this->_oDb->query($sql);
while ($this->_oDb->next_record()) {
$aRS = $this->_oDb->Record;
// loop thru fields array
foreach ($aFields as $field) {
if (isset($aRS[$field])) {
// reduce existing field
unset($aRS[$field]);
}
$rsStackID = $this->_makeStackId($aRS);
if (isset($aStack[$rsStackID])) {
// matching stack entry found, add urlpath and urlname to the new stack
$aNewStack[$rsStackID]['urlpath'] = $aRS['urlpath'];
$aNewStack[$rsStackID]['urlname'] = $aRS['urlname'];
break;
}
}
}
ModRewriteDebugger::add($aNewStack, 'ModRewriteUrlStack->_chunkSetPrettyUrlParts() $aNewStack');
// merge stack data
$this->_aStack = array_merge($this->_aStack, $aNewStack);
}
}

Datei anzeigen

@ -0,0 +1,306 @@
<?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;
}
}

Datei anzeigen

@ -0,0 +1,426 @@
<?php
/**
* AMR Content controller class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewrite_content_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 for general settings.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewrite_ContentController extends ModRewrite_ControllerAbstract {
/**
* Index action
*/
public function indexAction() {
// donut
$this->_doChecks();
}
/**
* Save settings action
*/
public function saveAction() {
$bDebug = $this->getProperty('bDebug');
$aSeparator = $this->getProperty('aSeparator');
$aWordSeparator = $this->getProperty('aWordSeparator');
$routingSeparator = $this->getProperty('routingSeparator');
$bError = false;
$aMR = array();
$request = (count($_POST) > 0) ? $_POST : $_GET;
mr_requestCleanup($request);
// use mod_rewrite
if (mr_arrayValue($request, 'use') == 1) {
$this->_oView->use_chk = ' checked="checked"';
$aMR['mod_rewrite']['use'] = 1;
} else {
$this->_oView->use_chk = '';
$aMR['mod_rewrite']['use'] = 0;
}
// root dir
if (mr_arrayValue($request, 'rootdir', '') !== '') {
if (!preg_match('/^[a-zA-Z0-9\-_\/\.]*$/', $request['rootdir'])) {
$sMsg = i18n("The root directory has a invalid format, alowed are the chars [a-zA-Z0-9\-_\/\.]", "mod_rewrite");
$this->_oView->rootdir_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif (!is_dir($_SERVER['DOCUMENT_ROOT'] . $request['rootdir'])) {
if (mr_arrayValue($request, 'checkrootdir') == 1) {
// root dir check is enabled, this results in error
$sMsg = i18n("The specified directory '%s' does not exists", "mod_rewrite");
$sMsg = sprintf($sMsg, $_SERVER['DOCUMENT_ROOT'] . $request['rootdir']);
$this->_oView->rootdir_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} else {
// root dir check ist disabled, take over the setting and
// output a warning.
$sMsg = i18n("The specified directory '%s' does not exists in DOCUMENT_ROOT '%s'. This could happen, if clients DOCUMENT_ROOT differs from CONTENIDO backends DOCUMENT_ROOT. However, the setting will be taken over because of disabled check.", "mod_rewrite");
$sMsg = sprintf($sMsg, $request['rootdir'], $_SERVER['DOCUMENT_ROOT']);
$this->_oView->rootdir_error = $this->_notifyBox('warning', $sMsg);
}
}
$this->_oView->rootdir = conHtmlentities($request['rootdir']);
$aMR['mod_rewrite']['rootdir'] = $request['rootdir'];
}
// root dir check
if (mr_arrayValue($request, 'checkrootdir') == 1) {
$this->_oView->checkrootdir_chk = ' checked="checked"';
$aMR['mod_rewrite']['checkrootdir'] = 1;
} else {
$this->_oView->checkrootdir_chk = '';
$aMR['mod_rewrite']['checkrootdir'] = 0;
}
// start from root
if (mr_arrayValue($request, 'startfromroot') == 1) {
$this->_oView->startfromroot_chk = ' checked="checked"';
$aMR['mod_rewrite']['startfromroot'] = 1;
} else {
$this->_oView->startfromroot_chk = '';
$aMR['mod_rewrite']['startfromroot'] = 0;
}
// prevent duplicated content
if (mr_arrayValue($request, 'prevent_duplicated_content') == 1) {
$this->_oView->prevent_duplicated_content_chk = ' checked="checked"';
$aMR['mod_rewrite']['prevent_duplicated_content'] = 1;
} else {
$this->_oView->prevent_duplicated_content_chk = '';
$aMR['mod_rewrite']['prevent_duplicated_content'] = 0;
}
// language settings
if (mr_arrayValue($request, 'use_language') == 1) {
$this->_oView->use_language_chk = ' checked="checked"';
$this->_oView->use_language_name_disabled = '';
$aMR['mod_rewrite']['use_language'] = 1;
if (mr_arrayValue($request, 'use_language_name') == 1) {
$this->_oView->use_language_name_chk = ' checked="checked"';
$aMR['mod_rewrite']['use_language_name'] = 1;
} else {
$this->_oView->use_language_name_chk = '';
$aMR['mod_rewrite']['use_language_name'] = 0;
}
} else {
$this->_oView->use_language_chk = '';
$this->_oView->use_language_name_chk = '';
$this->_oView->use_language_name_disabled = ' disabled="disabled"';
$aMR['mod_rewrite']['use_language'] = 0;
$aMR['mod_rewrite']['use_language_name'] = 0;
}
// client settings
if (mr_arrayValue($request, 'use_client') == 1) {
$this->_oView->use_client_chk = ' checked="checked"';
$this->_oView->use_client_name_disabled = '';
$aMR['mod_rewrite']['use_client'] = 1;
if (mr_arrayValue($request, 'use_client_name') == 1) {
$this->_oView->use_client_name_chk = ' checked="checked"';
$aMR['mod_rewrite']['use_client_name'] = 1;
} else {
$this->_oView->use_client_name_chk = '';
$aMR['mod_rewrite']['use_client_name'] = 0;
}
} else {
$this->_oView->use_client_chk = '';
$this->_oView->use_client_name_chk = '';
$this->_oView->use_client_name_disabled = ' disabled="disabled"';
$aMR['mod_rewrite']['use_client'] = 0;
$aMR['mod_rewrite']['use_client_name'] = 0;
}
// use lowercase uri
if (mr_arrayValue($request, 'use_lowercase_uri') == 1) {
$this->_oView->use_lowercase_uri_chk = ' checked="checked"';
$aMR['mod_rewrite']['use_lowercase_uri'] = 1;
} else {
$this->_oView->use_lowercase_uri_chk = '';
$aMR['mod_rewrite']['use_lowercase_uri'] = 0;
}
$this->_oView->category_separator_attrib = '';
$this->_oView->category_word_separator_attrib = '';
$this->_oView->article_separator_attrib = '';
$this->_oView->article_word_separator_attrib = '';
$separatorPattern = $aSeparator['pattern'];
$separatorInfo = $aSeparator['info'];
$wordSeparatorPattern = $aSeparator['pattern'];
$wordSeparatorInfo = $aSeparator['info'];
$categorySeperator = mr_arrayValue($request, 'category_seperator', '');
$categoryWordSeperator = mr_arrayValue($request, 'category_word_seperator', '');
$articleSeperator = mr_arrayValue($request, 'article_seperator', '');
$articleWordSeperator = mr_arrayValue($request, 'article_word_seperator', '');
// category seperator
if ($categorySeperator == '') {
$sMsg = i18n("Please specify separator (%s) for category", "mod_rewrite");
$sMsg = sprintf($sMsg, $separatorInfo);
$this->_oView->category_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif (!preg_match($separatorPattern, $categorySeperator)) {
$sMsg = i18n("Invalid separator for category, allowed one of following characters: %s", "mod_rewrite");
$sMsg = sprintf($sMsg, $separatorInfo);
$this->_oView->category_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// category word seperator
} elseif ($categoryWordSeperator == '') {
$sMsg = i18n("Please specify separator (%s) for category words", "mod_rewrite");
$sMsg = sprintf($sMsg, $wordSeparatorInfo);
$this->_oView->category_word_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif (!preg_match($wordSeparatorPattern, $categoryWordSeperator)) {
$sMsg = i18n("Invalid separator for category words, allowed one of following characters: %s", "mod_rewrite");
$sMsg = sprintf($sMsg, $wordSeparatorInfo);
$this->_oView->category_word_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// article seperator
} elseif ($articleSeperator == '') {
$sMsg = i18n("Please specify separator (%s) for article", "mod_rewrite");
$sMsg = sprintf($sMsg, $separatorInfo);
$this->_oView->article_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif (!preg_match($separatorPattern, $articleSeperator)) {
$sMsg = i18n("Invalid separator for article, allowed is one of following characters: %s", "mod_rewrite");
$sMsg = sprintf($sMsg, $separatorInfo);
$this->_oView->article_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// article word seperator
} elseif ($articleWordSeperator == '') {
$sMsg = i18n("Please specify separator (%s) for article words", "mod_rewrite");
$sMsg = sprintf($sMsg, $wordSeparatorInfo);
$this->_oView->article_word_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif (!preg_match($wordSeparatorPattern, $articleWordSeperator)) {
$sMsg = i18n("Invalid separator for article words, allowed is one of following characters: %s", "mod_rewrite");
$sMsg = sprintf($sMsg, $wordSeparatorInfo);
$this->_oView->article_word_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// category_seperator - category_word_seperator
} elseif ($categorySeperator == $categoryWordSeperator) {
$sMsg = i18n("Separator for category and category words must not be identical", "mod_rewrite");
$this->_oView->category_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// category_seperator - article_word_seperator
} elseif ($categorySeperator == $articleWordSeperator) {
$sMsg = i18n("Separator for category and article words must not be identical", "mod_rewrite");
$this->_oView->category_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
// article_seperator - article_word_seperator
} elseif ($articleSeperator == $articleWordSeperator) {
$sMsg = i18n("Separator for category-article and article words must not be identical", "mod_rewrite");
$this->_oView->article_separator_error = $this->_notifyBox('error', $sMsg);
$bError = true;
}
$this->_oView->category_separator = conHtmlentities($categorySeperator);
$aMR['mod_rewrite']['category_seperator'] = $categorySeperator;
$this->_oView->category_word_separator = conHtmlentities($categoryWordSeperator);
$aMR['mod_rewrite']['category_word_seperator'] = $categoryWordSeperator;
$this->_oView->article_separator = conHtmlentities($articleSeperator);
$aMR['mod_rewrite']['article_seperator'] = $articleSeperator;
$this->_oView->article_word_separator = conHtmlentities($articleWordSeperator);
$aMR['mod_rewrite']['article_word_seperator'] = $articleWordSeperator;
// file extension
if (mr_arrayValue($request, 'file_extension', '') !== '') {
if (!preg_match('/^\.([a-zA-Z0-9\-_\/])*$/', $request['file_extension'])) {
$sMsg = i18n("The file extension has a invalid format, allowed are the chars \.([a-zA-Z0-9\-_\/])", "mod_rewrite");
$this->_oView->file_extension_error = $this->_notifyBox('error', $sMsg);
$bError = true;
}
$this->_oView->file_extension = conHtmlentities($request['file_extension']);
$aMR['mod_rewrite']['file_extension'] = $request['file_extension'];
} else {
$this->_oView->file_extension = '.html';
$aMR['mod_rewrite']['file_extension'] = '.html';
}
// category resolve min percentage
if (isset($request['category_resolve_min_percentage'])) {
if (!is_numeric($request['category_resolve_min_percentage'])) {
$sMsg = i18n("Value has to be numeric.", "mod_rewrite");
$this->_oView->category_resolve_min_percentage_error = $this->_notifyBox('error', $sMsg);
$bError = true;
} elseif ($request['category_resolve_min_percentage'] < 0 || $request['category_resolve_min_percentage'] > 100) {
$sMsg = i18n("Value has to be between 0 an 100.", "mod_rewrite");
$this->_oView->category_resolve_min_percentage_error = $this->_notifyBox('error', $sMsg);
$bError = true;
}
$this->_oView->category_resolve_min_percentage = $request['category_resolve_min_percentage'];
$aMR['mod_rewrite']['category_resolve_min_percentage'] = $request['category_resolve_min_percentage'];
} else {
$this->_oView->category_resolve_min_percentage = '75';
$aMR['mod_rewrite']['category_resolve_min_percentage'] = '75';
}
// add start article name to url
if (mr_arrayValue($request, 'add_startart_name_to_url') == 1) {
$this->_oView->add_startart_name_to_url_chk = ' checked="checked"';
$aMR['mod_rewrite']['add_startart_name_to_url'] = 1;
if (mr_arrayValue($request, 'add_startart_name_to_url', '') !== '') {
if (!preg_match('/^[a-zA-Z0-9\-_\/\.]*$/', $request['default_startart_name'])) {
$sMsg = i18n("The article name has a invalid format, allowed are the chars /^[a-zA-Z0-9\-_\/\.]*$/", "mod_rewrite");
$this->_oView->add_startart_name_to_url_error = $this->_notifyBox('error', $sMsg);
$bError = true;
}
$this->_oView->default_startart_name = conHtmlentities($request['default_startart_name']);
$aMR['mod_rewrite']['default_startart_name'] = $request['default_startart_name'];
} else {
$this->_oView->default_startart_name = '';
$aMR['mod_rewrite']['default_startart_name'] = '';
}
} else {
$this->_oView->add_startart_name_to_url_chk = '';
$aMR['mod_rewrite']['add_startart_name_to_url'] = 0;
$this->_oView->default_startart_name = '';
$aMR['mod_rewrite']['default_startart_name'] = '';
}
// rewrite urls at
if (mr_arrayValue($request, 'rewrite_urls_at') == 'congeneratecode') {
$this->_oView->rewrite_urls_at_congeneratecode_chk = ' checked="checked"';
$this->_oView->rewrite_urls_at_front_content_output_chk = '';
$aMR['mod_rewrite']['rewrite_urls_at_congeneratecode'] = 1;
$aMR['mod_rewrite']['rewrite_urls_at_front_content_output'] = 0;
} else {
$this->_oView->rewrite_urls_at_congeneratecode_chk = '';
$this->_oView->rewrite_urls_at_front_content_output_chk = ' checked="checked"';
$aMR['mod_rewrite']['rewrite_urls_at_congeneratecode'] = 0;
$aMR['mod_rewrite']['rewrite_urls_at_front_content_output'] = 1;
}
// routing
if (isset($request['rewrite_routing'])) {
$aRouting = array();
$items = explode("\n", $request['rewrite_routing']);
foreach ($items as $p => $v) {
$routingDef = explode($routingSeparator, $v);
if (count($routingDef) !== 2) {
continue;
}
$routingDef[0] = trim($routingDef[0]);
$routingDef[1] = trim($routingDef[1]);
if ($routingDef[0] == '') {
continue;
}
$aRouting[$routingDef[0]] = $routingDef[1];
}
$this->_oView->rewrite_routing = conHtmlentities($request['rewrite_routing']);
$aMR['mod_rewrite']['routing'] = $aRouting;
} else {
$this->_oView->rewrite_routing = '';
$aMR['mod_rewrite']['routing'] = array();
}
// redirect invalid article to errorsite
if (isset($request['redirect_invalid_article_to_errorsite'])) {
$this->_oView->redirect_invalid_article_to_errorsite_chk = ' checked="checked"';
$aMR['mod_rewrite']['redirect_invalid_article_to_errorsite'] = 1;
} else {
$this->_oView->redirect_invalid_article_to_errorsite_chk = '';
$aMR['mod_rewrite']['redirect_invalid_article_to_errorsite'] = 0;
}
if ($bError) {
$sMsg = i18n("Please check your input", "mod_rewrite");
$this->_oView->content_before .= $this->_notifyBox('error', $sMsg);
return;
}
if ($bDebug == true) {
echo $this->_notifyBox('info', 'Debug');
echo '<pre class="example">';
print_r($aMR['mod_rewrite']);
echo '</pre>';
$sMsg = i18n("Configuration has <b>not</b> been saved, because of enabled debugging", "mod_rewrite");
echo $this->_notifyBox('info', $sMsg);
return;
}
$bSeparatorModified = $this->_separatorModified($aMR['mod_rewrite']);
if (mr_setConfiguration($this->_client, $aMR)) {
$sMsg = i18n("Configuration has been saved", "mod_rewrite");
if ($bSeparatorModified) {
mr_loadConfiguration($this->_client, true);
}
$this->_oView->content_before .= $this->_notifyBox('info', $sMsg);
} else {
$sMsg = i18n("Configuration could not saved. Please check write permissions for %s ", "mod_rewrite");
$sMsg = sprintf($sMsg, $options['key']);
$this->_oView->content_before .= $this->_notifyBox('error', $sMsg);
}
}
/**
* Checks, if any sseparators setting is modified or not
* @param array $aNewCfg New configuration send by requests.
* @return bool
*/
protected function _separatorModified($aNewCfg) {
$aCfg = ModRewrite::getConfig();
if ($aCfg['category_seperator'] != $aNewCfg['category_seperator']) {
return true;
} elseif ($aCfg['category_word_seperator'] != $aNewCfg['category_word_seperator']) {
return true;
} elseif ($aCfg['article_seperator'] != $aNewCfg['article_seperator']) {
return true;
} elseif ($aCfg['article_word_seperator'] != $aNewCfg['article_word_seperator']) {
return true;
}
return false;
}
/**
* Does some checks like 'is_start_compatible' check.
* Adds notifications, if something will went wrong...
*/
protected function _doChecks() {
// Check for not supported '$cfg["is_start_compatible"] = true;' mode
if (!empty($this->_cfg['is_start_compatible']) && true === $this->_cfg['is_start_compatible']) {
$sMsg = i18n("Your Contenido installation runs with the setting 'is_start_compatible'. This plugin will not work properly in this mode.<br />Please check following topic in Contenido forum to change this:<br /><br /><a href='http://forum.contenido.org/viewtopic.php?t=32530' class='blue' target='_blank'>is_start_compatible auf neue Version umstellen</a>", "mod_rewrite");
$this->_oView->content_before .= $this->_notifyBox('warning', $sMsg);
}
// Check for empty urlpath entries in cat_lang table
$db = new DB_Contenido();
$sql = "SELECT idcatlang FROM " . $this->_cfg['tab']['cat_lang'] . " WHERE urlpath = ''";
if ($db->query($sql) && $db->next_record()) {
$sMsg = i18n("It seems as if some categories don't have a set 'urlpath' entry in the database. Please reset empty aliases in %sFunctions%s area.", "mod_rewrite");
$sMsg = sprintf($sMsg, '<a href="main.php?area=mod_rewrite_expert&frame=4&contenido=' . $this->_oView->sessid . '&idclient=' . $this->_client . '" onclick="parent.right_top.sub.clicked(parent.right_top.document.getElementById(\'c_1\').firstChild);">', '</a>');
$this->_oView->content_before .= $this->_notifyBox('warning', $sMsg);
}
}
}

Datei anzeigen

@ -0,0 +1,143 @@
<?php
/**
* AMR Content expert controller class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewrite_contentexpert_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 expert controller for expert settings/actions.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
class ModRewrite_ContentExpertController extends ModRewrite_ControllerAbstract {
/**
* Path to restrictive htaccess file
* @var string
*/
protected $_htaccessRestrictive = '';
/**
* Path to simple htaccess file
* @var string
*/
protected $_htaccessSimple = '';
/**
* Initializer method, sets the paths to htaccess files
*/
public function init() {
$this->_oView->content_before = '';
$pluginPath = $this->_cfg['path']['contenido'] . $this->_cfg['path']['plugins'] . 'mod_rewrite/';
$this->_htaccessRestrictive = $pluginPath . 'files/htaccess_restrictive.txt';
$this->_htaccessSimple = $pluginPath . 'files/htaccess_simple.txt';
}
/**
* Index action
*/
public function indexAction() {
}
/**
* Copy htaccess action
*/
public function copyHtaccessAction() {
$type = $this->_getParam('htaccesstype');
$copy = $this->_getParam('copy');
if ($type != 'restrictive' && $type != 'simple') {
return;
} elseif ($copy != 'contenido' && $copy != 'cms') {
return;
}
$aInfo = $this->getProperty('htaccessInfo');
if ($aInfo['has_htaccess']) {
$this->_oView->content_before = $this->_notifyBox('info', 'Die .htaccess existiert bereits im Contenido-/ oder Mandantenverzeichnis, daher wird es nicht kopiert');
return;
}
if ($type == 'restrictive') {
$source = $this->_htaccessRestrictive;
} else {
$source = $this->_htaccessSimple;
}
if ($copy == 'contenido') {
$dest = $aInfo['contenido_full_path'] . '.htaccess';
} else {
$dest = $aInfo['client_full_path'] . '.htaccess';
}
if (!$result = @copy($source, $dest)) {
$this->_oView->content_before = $this->_notifyBox('info', 'Die .htaccess konnte nicht von ' . $source . ' nach ' . $dest . ' kopiert werden!');
return;
}
$msg = 'Die .htaccess wurde erfolgreich nach ' . str_replace('.htaccess', '', $dest) . ' kopiert';
$this->_oView->content_before = $this->_notifyBox('info', $msg);
}
/**
* Download htaccess action
*/
public function downloadHtaccessAction() {
$type = $this->_getParam('htaccesstype');
if ($type != 'restrictive' && $type != 'simple') {
return;
}
if ($type == 'restrictive') {
$source = $this->_htaccessRestrictive;
} else {
$source = $this->_htaccessSimple;
}
$this->_oView->content = file_get_contents($source);
header('Content-Type: text/plain');
header('Etag: ' . md5(mt_rand()));
header('Content-Disposition: attachment; filename="' . $type . '.htaccess"');
$this->render('{CONTENT}');
}
/**
* Reset aliases action
*/
public function resetAction() {
// recreate all aliases
ModRewrite::recreateAliases(false);
$this->_oView->content_before = $this->_notifyBox('info', 'Alle Aliase wurden zur&uuml;ckgesetzt');
}
/**
* Reset only empty aliases action
*/
public function resetEmptyAction() {
// recreate only empty aliases
ModRewrite::recreateAliases(true);
$this->_oView->content_before = $this->_notifyBox('info', 'Nur leere Aliase wurden zur&uuml;ckgesetzt');
}
}

Datei anzeigen

@ -0,0 +1,176 @@
<?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, 'mr_test.php $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;
}
}

Datei anzeigen

@ -0,0 +1,226 @@
<?php
/**
* AMR abstract controller class
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: class.modrewrite_controller_abstract.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');
}
/**
* Abstract controller for all concrete mod_rewrite controller implementations.
*
* @author Murat Purc <murat@purc.de>
* @package plugin
* @subpackage Mod Rewrite
*/
abstract class ModRewrite_ControllerAbstract {
/**
* View object, holds all view variables
* @var stdClass
*/
protected $_oView;
/**
* Global CONTENIDO $cfg variable
* @var array
*/
protected $_cfg;
/**
* Global CONTENIDO $client variable (client id)
* @var int
*/
protected $_client;
/**
* Global CONTENIDO $area variable (area name/id)
* @var int|string
*/
protected $_area;
/**
* Global CONTENIDO $action variable (send by request)
* @var string
*/
protected $_action;
/**
* Global CONTENIDO $frame variable (current frame in backend)
* @var int
*/
protected $_frame;
/**
* Global CONTENIDO $contenido variable (session id)
* @var string
*/
protected $_contenido;
/**
* Template file or template string to render
* @var string
*/
protected $_template = null;
/**
* Additional properties list
* @var array
*/
protected $_properties = array();
/**
* Debug flag
* @var bool
*/
protected $_debug = false;
/**
* Constructor, sets some properties by assigning global variables to them.
*/
public function __construct() {
global $cfg, $client, $area, $action, $frame, $contenido, $sess;
$this->_oView = new stdClass();
$this->_cfg = $cfg;
$this->_area = $area;
$this->_action = $action;
$this->_frame = $frame;
$this->_client = $client;
$this->_contenido = $contenido;
$this->_oView->area = $this->_area;
$this->_oView->frame = $this->_frame;
$this->_oView->contenido = $this->_contenido;
$this->_oView->sessid = $sess->id;
$this->_oView->lng_more_informations = i18n("More informations", "mod_rewrite");
$this->init();
}
/**
* Initializer method, could be overwritten by childs.
* This method will be invoked in constructor of ModRewrite_ControllerAbstract.
*/
public function init() {
}
/**
* View property setter.
* @param object $oView
*/
public function setView($oView) {
if (is_object($oView)) {
$this->_oView = $oView;
}
}
/**
* View property getter.
* @return object
*/
public function getView() {
return $this->_oView;
}
/**
* Property setter.
* @param string $key
* @param mixed $value
*/
public function setProperty($key, $value) {
$this->_properties[$key] = $value;
}
/**
* Property getter.
* @param string $key
* @param mixed $default
* @return mixed
*/
public function getProperty($key, $default = null) {
return (isset($this->_properties[$key])) ? $this->_properties[$key] : $default;
}
/**
* Template setter.
* @param string $sTemplate Either full path and name of template file or a template string.
*/
public function setTemplate($sTemplate) {
$this->_template = $sTemplate;
}
/**
* Template getter.
* @return string
*/
public function getTemplate() {
return $this->_template;
}
/**
* Renders template by replacing all view variables in template.
* @param string Either full path and name of template file or a template string.
* If not passed, previous set template will be used.
* @throws Exception if no template is set
* @return string
*/
public function render($template = null) {
if ($template == null) {
$template = $this->_template;
}
if ($template == null) {
throw new Exception('Missing template to render.');
}
$oTpl = new Template();
foreach ($this->_oView as $k => $v) {
$oTpl->set('s', strtoupper($k), $v);
}
$oTpl->generate($template, 0, 0);
}
/**
* Returns parameter from request, the order is:
* - Return from $_GET, if found
* - Return from $_POST, if found
*
* @param string $key
* @param mixed $default The default value
* @return mixed
*/
protected function _getParam($key, $default = null) {
if (isset($_GET[$key])) {
return $_GET[$key];
} elseif (isset($_POST[$key])) {
return $_POST[$key];
} else {
return $default;
}
}
/**
* Returns rendered notification markup by using global $notification variable.
* @param string $type One of cGuiNotification::LEVEL_* constants
* @param string $msg The message to display
* @return string
*/
protected function _notifyBox($type, $msg) {
global $notification;
return $notification->returnNotification($type, $msg) . '<br>';
}
}

43
external/aToolTip/css/atooltip.css vendored Normale Datei
Datei anzeigen

@ -0,0 +1,43 @@
/*
Node structure
--------------
.aToolTip
.aToolTipInner
.aToolTipContent
.aToolTipCloseBtn
*/
.aToolTip { margin:2px 0 0 2px; }
.aToolTipInner {
border-left:1px solid #b3b3b3;
border-top:1px solid #666;
border-right:2px solid #b3b3b3;
border-bottom:2px solid #b3b3b3;
background:#f1f1f1;
color:#000;
margin:0;
padding:4px 12px 6px 24px;
margin:-2px 0 0 -2px;
}
.aToolTipInner .aToolTipContent {
position:relative;
margin:0;
padding:0;
}
a.aToolTipCloseBtn {
display:block;
height:16px;
width:16px;
background:url(../images/infoBtn.gif) no-repeat;
text-indent:-9999px;
outline:none;
position:absolute;
top:1px;
left:1px;
margin:1px 2px 2px 1px;
padding:0px;
}

174
external/aToolTip/css/style.css vendored Normale Datei
Datei anzeigen

@ -0,0 +1,174 @@
/* Eric Meyer's Reset Reloaded */
/* http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/ */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, a, abbr, acronym, address, big, cite, code,del, dfn, em,
font, img, ins, kbd, q, s, samp,small, strike, strong, sub,
sup, tt, var,b, u, i, center,dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,table, caption, tbody, tfoot,
thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-size: 100%;
vertical-align: baseline;
background: transparent;
}
ol, ul {list-style: none;}
blockquote, q {quotes: none;}
table {border-collapse: collapse;border-spacing: 0;}
.clearfix:after {content: ".";display: block;height: 0;clear: both;visibility: hidden;}
/* IE6 */
* html .clearfix {height: 1%;}
/* IE7 */
*:first-child+html .clearfix {min-height: 1px;}
body {
background: #282828 url(../images/bg.png) repeat-x;
color: #999999;
font-size: 12px;
line-height: 20px;
font-family: Arial, helvetica;
}
a,
a:link,
a:visited {
color: #FEC92C;
text-decoration: none;
}
a:hover,
a:active,
a:focus {
text-decoration: underline;
}
a.exampleTip {
color: #FEC92C;
}
a.exampleTip:hover{
text-decoration: underline;
}
.section {
text-align: left;
padding-bottom: 18px;
border-bottom: 1px solid #333;
margin-bottom: 18px;
}
p {
margin: 0 0 18px;
}
h2 {
color: #fff;
font-size: 22px;
line-height: 24px;
margin: 0 0 24px;
padding: 0;
font-weight: normal;
}
h3{
color: #ddd;
font-size: 14px;
line-height: 18px;
margin: 0 0 18px;
}
h1.logo {
display: block;
height: 80px;
width: 260px;
margin: 40px auto 0;
}
h1.logo a{
display: block;
height: 80px;
width: 260px;
text-indent: -9999px;
background: url(../images/logo.png) no-repeat;
}
ul.demos {
list-style-type: none;
}
ul.demos li{
margin: 0 0 10px 0;
}
.primaryWrapper {
margin: 0 auto;
width: 960px;
text-align: center;
}
.branding{
text-align: center;
display: block;
height: 120px;
}
.ctaBtns {border: none; text-align: center;}
.ctaBtns p {
width: 263px;
margin: 0 auto;
}
.ctaBtns a{
display: block;
height: 37px;
width: 122px;
text-indent: -9999px;
}
a.dloadBtn {
background: url(../images/dload-btn.png) no-repeat top left;
float: left;
margin-right: 18px;
}
a.demoBtn {
background: url(../images/demo-btn.png) no-repeat top left;
float: left;
}
a.dloadBtn:hover,
a.demoBtn:hover {
background-position: bottom left;
}
.usage p {
margin-bottom: 2px;
}
ul.quickFacts {
list-style-position: inside;
list-style-type: disc;
}
p.license,
p.copyright {
font-size: 11px;
}

81
external/aToolTip/demos.html vendored Normale Datei
Datei anzeigen

@ -0,0 +1,81 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>aToolTip Demos</title>
<!-- CSS -->
<link type="text/css" href="css/style.css" rel="stylesheet" media="screen">
<!-- aToolTip css -->
<link type="text/css" href="css/atooltip.css" rel="stylesheet" media="screen">
<!-- Scripts -->
<script type="text/javascript" src="js/jquery.min.js"></script>
<!-- aToolTip js -->
<script type="text/javascript" src="js/atooltip.min.jquery.js"></script>
<script type="text/javascript">
$(function(){
$('a.normalTip').aToolTip();
$('a.fixedTip').aToolTip({
fixed: true
});
$('a.clickTip').aToolTip({
clickIt: true,
tipContent: 'Hello I am aToolTip with content from the "tipContent" param'
});
});
</script>
</head>
<body>
<div class="primaryWrapper">
<div class="branding">
<h1 class="logo"><a href="#">aToolTip</a></h1>
</div>
<!-- DEMOS -->
<div class="section" id="demos">
<h2>Demos</h2>
<ul class="demos">
<li><a href="#" class="normalTip exampleTip" title="Hello, I am aToolTip">Normal Tooltip</a> - This is a normal tooltip with default settings.</li>
<li><a href="#" class="fixedTip exampleTip" title="Hello, I am aToolTip">Fixed Tooltip</a> - This is a fixed tooltip that doesnt follow the mouse.</li>
<li><a href="#" class="clickTip exampleTip" >On Click Tooltip</a> - This is a click activated tooltip with content passed in from 'tipContent' param</li>
</ul>
</div>
<!-- END DEMOS -->
<p class="copyright">
Copyright &copy; 2009 Ara Abcarians. aToolTip was built for use with <a href="http://jquery.com">jQuery</a> by <a href="http://ara-abcarians.com/"> Ara Abcarians.</a>
</p>
<p class="license">
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://creativecommons.org/images/public/somerights20.png"></a><br>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 Unported License</a>.
</p>
</div> <!-- /primaryWrapper -->
</body>
</html>

BIN
external/aToolTip/images/bg.png vendored Normale Datei

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 1.2 KiB

BIN
external/aToolTip/images/infoBtn.gif vendored Normale Datei

Binäre Datei nicht angezeigt.

Nachher

Breite:  |  Höhe:  |  Größe: 90 B

118
external/aToolTip/js/atooltip.jquery.js vendored Normale Datei
Datei anzeigen

@ -0,0 +1,118 @@
/*
jQuery Version: jQuery 1.3.2
Plugin Name: aToolTip V 1.0
Plugin by: Ara Abcarians: http://ara-abcarians.com
License: aToolTip is licensed under a Creative Commons Attribution 3.0 Unported License
Read more about this license at --> http://creativecommons.org/licenses/by/3.0/
Modified: Murat Purc <murat@purc>, 2010-01-28: Position clickable tooltip on right side,
remove previous opened tooltip
Creates following node:
-----------------------
<div class="aToolTip">
<div class="aToolTipInner">
<p class="aToolTipContent"></p>
Content
<a alt="close" href="#" class="aToolTipCloseBtn">close</a>
</div>
</div>
*/
(function($) {
$.fn.aToolTip = function(options) {
// setup default settings
var defaults = {
clickIt: false,
closeTipBtn: 'aToolTipCloseBtn',
fixed: false,
inSpeed: 400,
outSpeed: 100,
tipContent: '',
toolTipClass: 'aToolTip',
xOffset: 0,
yOffset: 0
},
// This makes it so the users custom options overrides the default ones
settings = $.extend({}, defaults, options);
return this.each(function() {
var obj = $(this);
// Decide weather to use a title attr as the tooltip content
if (obj.attr('title') && !settings.tipContent) {
// set the tooltip content/text to be the obj title attribute
var tipContent = obj.attr('title');
} else {
// if no title attribute set it to the tipContent option in settings
var tipContent = settings.tipContent;
}
// check if obj has a title attribute and if click feature is off
if(tipContent && !settings.clickIt){
// Activate on hover
obj.hover(function(el){
obj.attr({title: ''});
$('body').append("<div class='"+ settings.toolTipClass +"'><div class='"+ settings.toolTipClass +"Inner'><p class='aToolTipContent'>"+ tipContent +"</p></div></div>");
$('.' + settings.toolTipClass).css({
position: 'absolute',
display: 'none',
zIndex: '50000',
top: (obj.offset().top - $('.' + settings.toolTipClass).outerHeight() - settings.yOffset) + 'px',
left: (obj.offset().left + obj.outerWidth() + settings.xOffset) + 'px'
})
.stop().fadeIn(settings.inSpeed);
},
function(){
// Fade out
$('.' + settings.toolTipClass).stop().fadeOut(settings.outSpeed, function(){$(this).remove();});
});
}
// Follow mouse if fixed is false and click is false
if(!settings.fixed && !settings.clickIt){
obj.mousemove(function(el){
$('.' + settings.toolTipClass).css({
top: (el.pageY - $('.' + settings.toolTipClass).outerHeight() - settings.yOffset),
left: (el.pageX + settings.xOffset)
})
});
}
// check if click feature is enabled
if(tipContent && settings.clickIt){
// Activate on click
obj.click(function(el){
if (!settings.tipContent) {
obj.attr({title: ''});
}
// $('.' + settings.toolTipClass).remove();
$('.' + settings.toolTipClass).stop().fadeOut(settings.outSpeed, function(){$(this).remove();});
$('body').append("<div class='"+ settings.toolTipClass +"'><div class='"+ settings.toolTipClass +"Inner'><p class='aToolTipContent'>"+ tipContent +"</p><a class='"+ settings.closeTipBtn +"' href='#' alt='close'>close</a></div></div>");
$('.' + settings.toolTipClass).css({
position: 'absolute',
display: 'none',
zIndex: '50000',
// top: (obj.offset().top - $('.' + settings.toolTipClass).outerHeight() - settings.yOffset) + 'px',
// left: (obj.offset().left + obj.outerWidth() + settings.xOffset) + 'px'
top: (obj.offset().top - settings.yOffset) + 'px',
left: (obj.offset().left + obj.outerWidth() + settings.xOffset) + 'px'
})
.fadeIn(settings.inSpeed);
// Click to close tooltip
$('.' + settings.closeTipBtn).click(function(){
$('.' + settings.toolTipClass).fadeOut(settings.outSpeed, function(){$(this).remove();});
return false;
});
return false;
});
}
}); // END: return this
// returns the jQuery object to allow for chainability.
return this;
};
})(jQuery);

Datei anzeigen

@ -0,0 +1,2 @@
/*Plugin by: Ara Abcarians: http://ara-abcarians.com License: http://creativecommons.org/licenses/by/3.0/ */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(2($){$.O.w=2(d){8 e={9:f,q:\'P\',x:f,r:Q,s:R,y:\'\',1:\'w\',g:5,h:5},0=$.S({},e,d);i 3.T(2(){8 b=$(3);j(b.k(\'l\')){8 c=b.k(\'l\')}U{8 c=0.y}j(c&&!0.9){b.V(2(a){b.k({l:\'\'});$(\'z\').t("<m 4=\'"+0.1+"\'><p 4=\'A\'>"+c+"</p></m>");$(\'.\'+0.1).u({B:\'C\',D:\'E\',F:\'G\',6:(b.n().6-$(\'.\'+0.1).v()-0.h)+\'o\',7:(b.n().7+b.H()+0.g)+\'o\'}).I().J(0.r)},2(){$(\'.\'+0.1).I().K(0.s,2(){$(3).L()})})}j(!0.x&&!0.9){b.W(2(a){$(\'.\'+0.1).u({6:(a.X-$(\'.\'+0.1).v()-0.h),7:(a.Y+0.g)})})}j(c&&0.9){b.M(2(a){b.k({l:\'\'});$(\'z\').t("<m 4=\'"+0.1+"\'><p 4=\'A\'>"+c+"</p></m>");$(\'.\'+0.1).t("<a 4=\'"+0.q+"\' Z=\'#\' 10=\'N\'>N</a>");$(\'.\'+0.1).u({B:\'C\',D:\'E\',F:\'G\',6:(b.n().6-$(\'.\'+0.1).v()-0.h)+\'o\',7:(b.n().7+b.H()+0.g)+\'o\'}).J(0.r);$(\'.\'+0.q).M(2(){$(\'.\'+0.1).K(0.s,2(){$(3).L()});i f});i f})}});i 3}})(11);',62,64,'settings|toolTipClass|function|this|class||top|left|var|clickIt||||||false|xOffset|yOffset|return|if|attr|title|div|offset|px||closeTipBtn|inSpeed|outSpeed|append|css|outerHeight|aToolTip|fixed|tipContent|body|aToolTipContent|position|absolute|display|none|zIndex|50000|outerWidth|stop|fadeIn|fadeOut|remove|click|close|fn|aToolTipCloseBtn|400|100|extend|each|else|hover|mousemove|pageY|pageX|href|alt|jQuery'.split('|'),0,{}))

19
external/aToolTip/js/jquery.min.js vendored Normale Datei

Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist

Datei anzeigen

@ -0,0 +1,61 @@
################################################################################
# ConLite AMR plugin restrictive rewrite rules set.
#
# Contains strict rules, each rewrite exclusion must be set manually.
# - Exclude requests to directories usage/, conlite/, setup/, cms/upload/
# - Exclude requests to cms/front_content.php, cms/dbfs.php
# - Pass thru requests to common ressources (pictures, movies, js, css, pdf)
#
# @version 1.0.0
# @author Ortwin Pinke <ortwin.pinke@php-backoffice.de>
# @author Murat Purc <murat@purc.de>
# @copyright 2019 ConLite Team
# @link http://www.conlite.org
#
# Versions before 1.0 copyright 4fb, author Murat Purc
#
# $Id: htaccess_restrictive.txt 145 2019-10-25 16:00:47Z oldperl $
################################################################################
<IfModule mod_rewrite.c>
# Enable rewrite engine
RewriteEngine on
# Specify a base URL-path for the rules
RewriteBase /cms
# Catch some common exploits in query string to get rid of them.
# NOTE: Conditions to prevent protocols (ftp, http[s]) in query string could
# be a disadvantage in some cases.
RewriteCond %{QUERY_STRING} contenido_path=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} cfg\[path\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} _PHPLIB\[libdir\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ftp://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC]
RewriteRule ^.* - [F,L] # all matching conditions from above will end in nirvana
# Exclude some files and directories from rewriting
RewriteRule ^usage/.*$ - [L]
RewriteRule ^conlite/.*$ - [L]
RewriteRule ^setup/.*$ - [L]
RewriteRule ^cms/upload/.*$ - [L]
RewriteRule ^cms/test/.*$ - [L]
RewriteRule ^cms/front_content.php.*$ - [L]
RewriteRule ^cms/dbfs.php.*$ - [L]
# Exclude common extensions from rewriting and pass remaining requests to
# front_content.php.
RewriteRule !\.(avi|css|doc|flv|gif|gzip|ico|jpeg|jpg|js|mov|mp3|pdf|png|ppt|rar|svg|swf|txt|wav|wmv|xml|zip)$ front_content.php [NC,QSA,L]
</IfModule>
# Some rules to compress files.
# NOTE: Following settings are not mod rewrite specific, but enabling mod_deflate
# for some file types can help to reduce bandwith.
<IfModule mod_deflate.c>
<FilesMatch "\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

59
files/htaccess_simple.txt Normale Datei
Datei anzeigen

@ -0,0 +1,59 @@
################################################################################
# ConLite AMR plugin simple rewrite rules set.
#
# Contains few easy to handle rewrite rules.
#
# @version 1.0.0
# @author Ortwin Pinke <ortwin.pinke@php-backoffice.de>
# @author Murat Purc <murat@purc.de>
# @copyright 2019 ConLite Team
# @link http://www.conlite.org
#
# Versions before 1.0 copyright 4fb, author Murat Purc
#
# $Id: htaccess_simple.txt 145 2019-10-25 16:00:47Z oldperl $
################################################################################
<IfModule mod_rewrite.c>
# Enable rewrite engine
RewriteEngine on
# Specify a base URL-path for the rules
RewriteBase /cms
# Catch some common exploits in query string to get rid of them
# NOTE: Conditions to prevent protocols (ftp, http[s]) in query string could
# be a disadvantage in some cases
RewriteCond %{QUERY_STRING} contenido_path=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} cfg\[path\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} _PHPLIB\[libdir\]=.*$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} ftp://.*$ [NC,OR]
RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC]
RewriteRule ^.* - [F,L] # all matching conditions from above will end in nirvana
# Rewrite request to root to front_content.php
RewriteRule ^$ front_content.php [QSA,L]
# Exclude following request from rewriting
# tests for favicon.ico, valid symlinks (-s), not empty files (-l) and folders (-d)
RewriteCond %{REQUEST_URI} ^/favicon.ico$ [OR]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# Pass other requests to front_content.php
RewriteRule ^.*$ front_content.php [QSA,NC,L]
</IfModule>
# Some rules to compress files.
# NOTE: Following settings are not mod rewrite specific, but enabling mod_deflate
# for some file types can help to reduce bandwith.
<IfModule mod_deflate.c>
<FilesMatch "\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

Datei anzeigen

@ -0,0 +1,114 @@
<?php
/**
* Plugin Advanced Mod Rewrite default settings. This file will be included if
* mod rewrite settings of an client couldn't loaded.
*
* Containing settings are taken over from CONTENIDO-4.6.15mr setup installer
* template beeing made originally by stese.
*
* NOTE:
* Changes in these Advanced Mod Rewrite settings will affect all clients, as long
* as they don't have their own configuration.
* PHP needs write permissions to the folder, where this file resides. Mod Rewrite
* configuration files will be created in this folder.
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: config.mod_rewrite_default.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');
}
global $cfg;
// Use advanced mod_rewrites ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use'] = 0;
// Path to the htaccess file with trailling slash from domain-root!
$cfg['mod_rewrite']['rootdir'] = '/';
// Check path to the htaccess file ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['checkrootdir'] = 1;
// Start TreeLocation from Root Tree (set to 1) or get location from first category (set to 0)
$cfg['mod_rewrite']['startfromroot'] = 0;
// Prevent Duplicated Content, if startfromroot is enabled ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['prevent_duplicated_content'] = 0;
// is multilanguage? ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use_language'] = 0;
// use language name in url? ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use_language_name'] = 0;
// is multiclient in only one directory? ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use_client'] = 0;
// use client name in url? ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use_client_name'] = 0;
// use lowercase url? ( 1 = yes, 0 = none )
$cfg['mod_rewrite']['use_lowercase_uri'] = 1;
// file extension for article links
$cfg['mod_rewrite']['file_extension'] = '.html';
// The percentage if the category name have to match with database names.
$cfg['mod_rewrite']['category_resolve_min_percentage'] = '75';
// Add start article name to url (1 = yes, 0 = none)
$cfg['mod_rewrite']['add_startart_name_to_url'] = 1;
// Default start article name to use, depends on active add_startart_name_to_url
$cfg['mod_rewrite']['default_startart_name'] = 'index';
// Rewrite urls on generating the code for the page. If active, the responsibility will be
// outsourced to moduleoutputs and you have to adapt the moduleoutputs manually. Each output of
// internal article/category links must be processed by using $sess->url. (1 = yes, 0 = none)
$cfg['mod_rewrite']['rewrite_urls_at_congeneratecode'] = 0;
// Rewrite urls on output of htmlcode at front_content.php. Is the old way, and doesn't require
// adapting of moduleoutputs. On the other hand usage of this way will be slower than rewriting
// option above. (1 = yes, 0 = none)
$cfg['mod_rewrite']['rewrite_urls_at_front_content_output'] = 1;
// Following five settings write urls like this one:
// www.domain.de/category1-category2.articlename.html
// Changes of these settings causes a reset of all aliases, see Advanced Mod Rewrite settings in
// backend.
// NOTE: category_seperator and article_seperator must contain different character.
// Separator for categories
$cfg['mod_rewrite']['category_seperator'] = '/';
// Separator between category and article
$cfg['mod_rewrite']['article_seperator'] = '/';
// Word seperator in category names
$cfg['mod_rewrite']['category_word_seperator'] = '-';
// Word seperator in article names
$cfg['mod_rewrite']['article_word_seperator'] = '-';
// Routing settings for incomming urls. Here you can define routing rules as follows:
// $cfg['mod_rewrite']['routing'] = array(
// '/a_incomming/url/foobar.html' => '/new_url/foobar.html', # route /a_incomming/url/foobar.html to /new_url/foobar.html
// '/cms/' => '/' # route /cms/ to / (doc root of client)
// );
$cfg['mod_rewrite']['routing'] = array();
// Redirect invalid articles to errorpage (1 = yes, 0 = none)
$cfg['mod_rewrite']['redirect_invalid_article_to_errorsite'] = 0;

167
includes/config.plugin.php Normale Datei
Datei anzeigen

@ -0,0 +1,167 @@
<?php
/**
* Plugin Advanced Mod Rewrite initialization file.
*
* This file will be included by CONTENIDO plugin loader routine, and the content
* of this file ensures that the AMR Plugin will be initialized correctly.
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: config.plugin.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');
}
global $_cecRegistry, $cfg, $contenido, $area, $client, $load_client;
####################################################################################################
/**
* Chain Contenido.Frontend.CreateURL
* This chain is called inside some scripts (front_content.php) to create urls.
*
* @todo: Is added to provide downwards compatibility for the amr plugin.
* There is no need for this chain since CONTENIDO 4.8.9 contains its own Url building feature.
* @deprecated
*
* Parameters & order:
* string URL including parameter value pairs
*
* Returns:
* string Returns modified URL
*/
$_cecRegistry->registerChain("Contenido.Frontend.CreateURL", "string");
####################################################################################################
// initialize client id
if (isset($client) && (int) $client > 0) {
$clientId = (int) $client;
} elseif (isset($load_client) && (int) $load_client > 0) {
$clientId = (int) $load_client;
} else {
$clientId = '';
}
// include necessary sources
cInclude('classes', 'Debug/DebuggerFactory.class.php');
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_controller_abstract.php');
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_content_controller.php');
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_contentexpert_controller.php');
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_contenttest_controller.php');
plugin_include('mod_rewrite', 'classes/class.modrewritebase.php');
plugin_include('mod_rewrite', 'classes/class.modrewrite.php');
plugin_include('mod_rewrite', 'classes/class.modrewritecontroller.php');
plugin_include('mod_rewrite', 'classes/class.modrewritedebugger.php');
plugin_include('mod_rewrite', 'classes/class.modrewritetest.php');
plugin_include('mod_rewrite', 'classes/class.modrewriteurlstack.php');
plugin_include('mod_rewrite', 'classes/class.modrewriteurlutil.php');
plugin_include('mod_rewrite', 'includes/functions.mod_rewrite.php');
global $lngAct;
$lngAct['mod_rewrite']['mod_rewrite'] = i18n("Advanced Mod Rewrite", "mod_rewrite");
$lngAct['mod_rewrite']['mod_rewrite_expert'] = i18n("Advanced Mod Rewrite functions", "mod_rewrite");
$lngAct['mod_rewrite']['mod_rewrite_test'] = i18n("Advanced Mod Rewrite test", "mod_rewrite");
// set debug configuration
if (isset($contenido)) {
ModRewriteDebugger::setEnabled(true);
} else {
ModRewriteDebugger::setEnabled(false);
}
// initialize mr plugin
ModRewrite::initialize($clientId);
if (ModRewrite::isEnabled()) {
$aMrCfg = ModRewrite::getConfig();
$_cecRegistry = cApiCecRegistry::getInstance();
// Add new tree function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_newtree.AfterCall', 'mr_strNewTree');
// Add move subtree function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_movesubtree.AfterCall', 'mr_strMoveSubtree');
// Add new category function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_newcat.AfterCall', 'mr_strNewCategory');
// Add rename category function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_renamecat.AfterCall', 'mr_strRenameCategory');
// Add move up category function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_moveupcat.AfterCall', 'mr_strMoveUpCategory');
// Add move down category function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.str_movedowncat.AfterCall', 'mr_strMovedownCategory');
// Add copy category function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Category.strCopyCategory', 'mr_strCopyCategory');
// Add category sync function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Category.strSyncCategory_Loop', 'mr_strSyncCategory');
// Add save article (new and existing category) function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Action.con_saveart.AfterCall', 'mr_conSaveArticle');
// Add move article function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Article.conMoveArticles_Loop', 'mr_conMoveArticles');
// Add duplicate article function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Article.conCopyArtLang_AfterInsert', 'mr_conCopyArtLang');
// Add sync article function to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Article.conSyncArticle_AfterInsert', 'mr_conSyncArticle');
if (!isset($contenido)) {
// we are not in backend, add cec functions for rewriting
// Add mr related function for hook "after plugins loaded" to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Frontend.AfterLoadPlugins', 'mr_runFrontendController');
// Add url rewriting function to CONTENIDO Extension Chainer
// @todo: no more need since CONTENIDO 4.8.9 provides central Url building,
// but it is still available because of downwards compatibility
// @deprecated
$_cecRegistry->addChainFunction('Contenido.Frontend.CreateURL', 'mr_buildNewUrl');
// overwrite url builder configuration with own url builder
$cfg['url_builder']['name'] = 'MR';
$cfg['config'] = array();
cInclude('classes', 'Url/Contenido_Url.class.php');
cInclude('classes', 'UrlBuilder/Contenido_UrlBuilderConfig.class.php');
Contenido_UrlBuilderConfig::setConfig($cfg['url_builder']);
if ($aMrCfg['rewrite_urls_at_congeneratecode'] == 1) {
// Add url rewriting at code generation to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Content.conGenerateCode', 'mr_buildGeneratedCode');
} elseif ($aMrCfg['rewrite_urls_at_front_content_output'] == 1) {
// Add url rewriting at html output to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Frontend.HTMLCodeOutput', 'mr_buildGeneratedCode');
} else {
// Fallback solution: Add url rewriting at code generation to CONTENIDO Extension Chainer
$_cecRegistry->addChainFunction('Contenido.Content.conGenerateCode', 'mr_buildGeneratedCode');
}
}
}
if (isset($contenido) && isset($area) && $area == 'mod_rewrite_test') {
// configure url builder to enable it on test page
$cfg['url_builder']['name'] = 'MR';
$cfg['config'] = array();
Contenido_UrlBuilderConfig::setConfig($cfg['url_builder']);
ModRewrite::setEnabled(true);
}
unset($clientId, $options);

Datei anzeigen

@ -0,0 +1,102 @@
<?php
/**
* Mod Rewrite front_content.php controller. Does some preprocessing jobs, tries
* to set following variables, depending on mod rewrite configuration and if
* request part exists:
* - $client
* - $changeclient
* - $lang
* - $changelang
* - $idart
* - $idcat
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: front_content_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');
}
global $client, $changeclient, $cfgClient, $lang, $changelang, $idart, $idcat, $path, $mr_preprocessedPageError;
ModRewriteDebugger::add(ModRewrite::getConfig(), 'front_content_controller.php mod rewrite config');
// create an mod rewrite controller instance and execute processing
$oMRController = new ModRewriteController($_SERVER['REQUEST_URI']);
$oMRController->execute();
if ($oMRController->errorOccured()) {
// an error occured (idcat and or idart couldn't catched by controller)
$iRedirToErrPage = ModRewrite::getConfig('redirect_invalid_article_to_errorsite', 0);
// try to redirect to errorpage if desired
if ($iRedirToErrPage == 1 && (int) $client > 0 && (int) $lang > 0) {
global $errsite_idcat, $errsite_idart;
if ($cfgClient['set'] != 'set') {
rereadClients();
}
// errorpage
$aParams = array(
'client' => $client, 'idcat' => $errsite_idcat[$client], 'idart' => $errsite_idart[$client],
'lang' => $lang, 'error' => '1'
);
$errsite = 'Location: ' . Contenido_Url::getInstance()->buildRedirect($aParams);
mr_header($errsite);
exit();
}
} else {
// set some global variables
if ($oMRController->getClient()) {
$client = $oMRController->getClient();
}
if ($oMRController->getChangeClient()) {
$changeclient = $oMRController->getChangeClient();
}
if ($oMRController->getLang()) {
$lang = $oMRController->getLang();
}
if ($oMRController->getChangeLang()) {
$changelang = $oMRController->getChangeLang();
}
if ($oMRController->getIdArt()) {
$idart = $oMRController->getIdArt();
}
if ($oMRController->getIdCat()) {
$idcat = $oMRController->getIdCat();
}
if ($oMRController->getPath()) {
$path = $oMRController->getPath();
}
}
// some debugs
ModRewriteDebugger::add($mr_preprocessedPageError, 'mr $mr_preprocessedPageError', __FILE__);
if ($oMRController->getError()) {
ModRewriteDebugger::add($oMRController->getError(), 'mr error', __FILE__);
}
ModRewriteDebugger::add($idart, 'mr $idart', __FILE__);
ModRewriteDebugger::add($idcat, 'mr $idcat', __FILE__);
ModRewriteDebugger::add($lang, 'mr $lang', __FILE__);
ModRewriteDebugger::add($client, 'mr $client', __FILE__);

Datei anzeigen

@ -0,0 +1,912 @@
<?php
/**
* Mod Rewrite front_content.php controller. Does some preprocessing jobs, tries
* to set following variables, depending on mod rewrite configuration and if
* request part exists:
* - $client
* - $changeclient
* - $lang
* - $changelang
* - $idart
* - $idcat
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: functions.mod_rewrite.php 128 2019-07-03 11:58:28Z oldperl $:
* @author Stefan Seifarth / stese
* @author Murat Purc <murat@purc.de>
* @copyright www.polycoder.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');
}
cInclude('classes', 'contenido/class.articlelanguage.php');
/**
* Processes mod_rewrite related job for created new tree.
*
* Will be called by chain 'Contenido.Action.str_newtree.AfterCall'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strNewTree(array $data) {
global $lang;
ModRewriteDebugger::log($data, 'mr_strNewTree $data');
if ((int) $data['newcategoryid'] > 0) {
$mrCatAlias = (trim($data['categoryalias']) !== '') ? trim($data['categoryalias']) : trim($data['categoryname']);
// set new urlname - because original set urlname isn''t validated for double entries in same parent category
ModRewrite::setCatWebsafeName($mrCatAlias, $data['newcategoryid'], $lang);
ModRewrite::setCatUrlPath($data['newcategoryid'], $lang);
}
return $data;
}
/**
* Processes mod_rewrite related job for created new category.
*
* Will be called by chain 'Contenido.Action.str_newcat.AfterCall'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strNewCategory(array $data) {
global $lang;
ModRewriteDebugger::log($data, 'mr_strNewCategory $data');
if ((int) $data['newcategoryid'] > 0) {
$mrCatAlias = (trim($data['categoryalias']) !== '') ? trim($data['categoryalias']) : trim($data['categoryname']);
// set new urlname - because original set urlname isn''t validated for double entries in same parent category
ModRewrite::setCatWebsafeName($mrCatAlias, $data['newcategoryid'], $lang);
ModRewrite::setCatUrlPath($data['newcategoryid'], $lang);
}
return $data;
}
/**
* Processes mod_rewrite related job for renamed category
* 2010-02-01: and now all existing subcategories and modify their paths too...
* 2010-02-01: max 50 recursion level
*
* Will be called by chain 'Contenido.Action.str_renamecat.AfterCall'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strRenameCategory(array $data) {
ModRewriteDebugger::log($data, 'mr_strRenameCategory $data');
// hes 20100102
// maximal 50 recursion level
$recursion = (is_int($data['recursion'])) ? $data['recursion'] : 1;
if ($recursion > 50) {
exit("#20100201-1503: sorry - maximum function nesting level of " . $recursion . " reached");
}
$mrCatAlias = (trim($data['newcategoryalias']) !== '') ? trim($data['newcategoryalias']) : trim($data['newcategoryname']);
if ($mrCatAlias != '') {
// set new urlname - because original set urlname isn''t validated for double entries in same parent category
ModRewrite::setCatWebsafeName($mrCatAlias, $data['idcat'], $data['lang']);
ModRewrite::setCatUrlPath($data['idcat'], $data['lang']);
}
// hes 20100102
// now dive into all existing subcategories and modify their paths too...
$str = 'parentid=' . $data['idcat'];
$oCatColl = new cApiCategoryCollection($str);
while ($oCat = $oCatColl->next()) {
// hes 20100102
$str = 'idcat=' . $oCat->get('idcat') . ' AND idlang=' . (int) $data['lang'];
$oCatLanColl = new cApiCategoryLanguageCollection($str);
if ($oCatLan = $oCatLanColl->next()) {
// hes 20100102
$childData = array(
'idcat' => $oCat->get('idcat'),
'lang' => (int) $data['lang'],
'newcategoryname' => $oCatLan->get('name'),
'newcategoryalias' => $oCatLan->get('urlname'),
'recursion' => $recursion + 1
);
$resData = mr_strRenameCategory($childData);
}
}
return $data;
}
/**
* Processes mod_rewrite related job after moving a category up.
*
* Will be called by chain 'Contenido.Action.str_moveupcat.AfterCall'.
*
* @todo do we really need processing of the category? there is no mr relevant data
* changes while moving the category on same level, level and name won't change
*
* @param int $idcat Category id
* @return int Category id
*/
function mr_strMoveUpCategory($idcat) {
ModRewriteDebugger::log($idcat, 'mr_strMoveUpCategory $idcat');
// category check
$cat = new cApiCategory((int) $idcat);
if (!$cat->get('preid')) {
return;
}
// get all cat languages
$aIdLang = ModRewrite::getCatLanguages($idcat);
// update ...
foreach ($aIdLang as $iIdLang) {
// get urlname
$sCatname = ModRewrite::getCatName($idcat, $iIdLang);
// set new urlname - because original set urlname isn't validated for double entries in same parent category
ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
}
return $idcat;
}
/**
* Processes mod_rewrite related job after moving a category down.
*
* Will be called by chain 'Contenido.Action.str_movedowncat.AfterCall'.
*
* @todo do we really need processing of the category? there is no mr relevant data
* changes while moving the category on same level, level and name won't change
*
* @param int $idcat Id of category beeing moved down
* @return int Category id
*/
function mr_strMovedownCategory($idcat) {
ModRewriteDebugger::log($idcat, 'mr_strMovedownCategory $idcat');
// category check
$cat = new cApiCategory((int) $idcat);
if (!$cat->get('id')) {
return;
}
// get all cat languages
$aIdLang = ModRewrite::getCatLanguages($idcat);
// update ...
foreach ($aIdLang as $iIdLang) {
// get urlname
$sCatname = ModRewrite::getCatName($idcat, $iIdLang);
// set new urlname - because original set urlname isn't validated for double entries in same parent category
ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
}
return $idcat;
}
/**
* Processes mod_rewrite related job after moving a category subtree.
*
* Will be called by chain 'Contenido.Action.str_movesubtree.AfterCall'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strMoveSubtree(array $data) {
ModRewriteDebugger::log($data, 'mr_strMoveSubtree $data');
// category check
if ((int) $data['idcat'] <= 0) {
return;
}
// next category check
$cat = new cApiCategory($data['idcat']);
if (!$cat->get('idcat')) {
return;
}
// get all cat languages
$aIdLang = ModRewrite::getCatLanguages($data['idcat']);
// update all languages
foreach ($aIdLang as $iIdLang) {
// get urlname
$sCatname = ModRewrite::getCatName($data['idcat'], $iIdLang);
// set new urlname - because original set urlname isn't validated for double entries in same parent category
ModRewrite::setCatWebsafeName($sCatname, $data['idcat'], $iIdLang);
ModRewrite::setCatUrlPath($data['idcat'], $iIdLang);
}
// now dive into all existing subcategories and modify their paths too...
$oCatColl = new cApiCategoryCollection('parentid=' . $data['idcat']);
while ($oCat = $oCatColl->next()) {
mr_strMoveSubtree(array('idcat' => $oCat->get('idcat')));
}
return $data;
}
/**
* Processes mod_rewrite related job after copying a category subtree.
*
* Will be called by chain 'Contenido.Category.strCopyCategory'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strCopyCategory(array $data) {
ModRewriteDebugger::log($data, 'mr_strCopyCategory $data');
$idcat = (int) $data['newcat']->get('idcat');
if ($idcat <= 0) {
return $data;
}
// get all cat languages
$aIdLang = ModRewrite::getCatLanguages($idcat);
// update ...
foreach ($aIdLang as $iIdLang) {
// get urlname
$sCatname = ModRewrite::getCatName($idcat, $iIdLang);
// set new urlname - because original set urlname isn't validated for double entries in same parent category
ModRewrite::setCatWebsafeName($sCatname, $idcat, $iIdLang);
ModRewrite::setCatUrlPath($idcat, $iIdLang);
}
}
/**
* Processes mod_rewrite related job during structure synchronisation process,
* sets the urlpath of current category.
*
* Will be called by chain 'Contenido.Category.strSyncCategory_Loop'.
*
* @param array $data Assoziative array with some values
* @return array Passed parameter
*/
function mr_strSyncCategory(array $data) {
ModRewriteDebugger::log($data, 'mr_strSyncCategory $data');
ModRewrite::setCatUrlPath($data['idcat'], $data['idlang']);
return $data;
}
/**
* Processes mod_rewrite related job for saved articles (new or modified article).
*
* Will be called by chain 'Contenido.Action.con_saveart.AfterCall'.
*
* @param array $data Assoziative array with some article properties
* @return array Passed parameter
*/
function mr_conSaveArticle(array $data) {
global $tmp_firstedit, $client;
ModRewriteDebugger::log($data, 'mr_conSaveArticle $data');
if ((int) $data['idart'] == 0) {
return $data;
}
if (strlen(trim($data['urlname'])) == 0) {
$data['urlname'] = $data['title'];
}
if (1 == $tmp_firstedit) {
// new article
$aLanguages = getLanguagesByClient($client);
foreach ($aLanguages as $iLang) {
ModRewrite::setArtWebsafeName($data['urlname'], $data['idart'], $iLang, $data['idcat']);
}
} else {
// modified article
$aArticle = ModRewrite::getArtIdByArtlangId($data['idartlang']);
if (isset($aArticle['idart']) && isset($aArticle['idlang'])) {
ModRewrite::setArtWebsafeName($data['urlname'], $aArticle['idart'], $aArticle['idlang'], $data['idcat']);
}
}
return $data;
}
/**
* Processes mod_rewrite related job for articles beeing moved.
*
* Will be called by chain 'Contenido.Article.conMoveArticles_Loop'.
*
* @param array $data Assoziative array with record entries
* @return array Loop through of arguments
*/
function mr_conMoveArticles($data) {
ModRewriteDebugger::log($data, 'mr_conMoveArticles $data');
// too defensive but secure way
if (!is_array($data)) {
return $data;
} elseif (!isset($data['idartlang'])) {
return $data;
} elseif (!isset($data['idart'])) {
return $data;
}
$arr_art = ModRewrite::getArtIds($data['idartlang']);
if (count($arr_art) == 2) {
ModRewrite::setArtWebsafeName($arr_art["urlname"], $data['idart'], $arr_art["idlang"]);
}
return $data;
}
/**
* Processes mod_rewrite related job for duplicated articles.
*
* Will be called by chain 'Contenido.Article.conCopyArtLang_AfterInsert'.
*
* @param array $data Assoziative array with record entries
* @return array Loop through of arguments
*/
function mr_conCopyArtLang($data) {
ModRewriteDebugger::log($data, 'mr_conCopyArtLang $data');
// too defensive but secure way
if (!is_array($data)) {
return $data;
} elseif (!isset($data['title'])) {
return $data;
} elseif (!isset($data['idart'])) {
return $data;
} elseif (!isset($data['idlang'])) {
return $data;
}
ModRewrite::setArtWebsafeName($data['title'], $data['idart'], $data['idlang']);
return $data;
}
/**
* Processes mod_rewrite related job for synchronized articles.
*
* Will be called by chain 'Contenido.Article.conSyncArticle_AfterInsert'.
*
* @param array $data Assoziative array with record entries as follows:
* <code>
* array(
* 'src_art_lang' => Recordset (assoziative array) of source item from con_art_lang table
* 'dest_art_lang' => Recordset (assoziative array) of inserted destination item from con_art_lang table
* );
* </code>
*
* @return array Loop through of argument
*/
function mr_conSyncArticle($data) {
ModRewriteDebugger::log($data, 'mr_conSyncArticle $data');
// too defensive but secure way
if (!is_array($data)) {
return $data;
} elseif (!isset($data['src_art_lang']) || !is_array($data['src_art_lang'])) {
return $data;
} elseif (!isset($data['dest_art_lang']) || !is_array($data['dest_art_lang'])) {
return $data;
} elseif (!isset($data['dest_art_lang']['idart'])) {
return $data;
} elseif (!isset($data['dest_art_lang']['idlang'])) {
return $data;
}
if (!isset($data['src_art_lang']['urlname'])) {
$artLang = new cApiArticleLanguage($data['src_art_lang']['idartlang']);
$urlname = $artLang->get('urlname');
} else {
$urlname = $data['src_art_lang']['urlname'];
}
if ($urlname) {
ModRewrite::setArtWebsafeName($urlname, $data['dest_art_lang']['idart'], $data['dest_art_lang']['idlang']);
}
return $data;
}
/**
* Works as a wrapper for Contenido_Url.
*
* Will also be called by chain 'Contenido.Frontend.CreateURL'.
*
* @todo: Still exists bcause of downwards compatibility (some other modules/plugins are using it)
*
* @param string $url URL to rebuild
* @return string New URL
*/
function mr_buildNewUrl($url) {
global $lang;
ModRewriteDebugger::add($url, 'mr_buildNewUrl() in -> $url');
$oUrl = Contenido_Url::getInstance();
$aUrl = $oUrl->parse($url);
// add language, if not exists
if (!isset($aUrl['params']['lang'])) {
$aUrl['params']['lang'] = $lang;
}
// build url
$newUrl = $oUrl->build($aUrl['params']);
// add existing fragment
if (isset($aUrl['fragment'])) {
$newUrl .= '#' . $aUrl['fragment'];
}
$arr = array(
'in' => $url,
'out' => $newUrl,
);
ModRewriteDebugger::add($arr, 'mr_buildNewUrl() in -> out');
return $newUrl;
}
/**
* Replaces existing ancors inside passed code, while rebuilding the urls.
*
* Will be called by chain 'Contenido.Content.conGenerateCode' or
* 'Contenido.Frontend.HTMLCodeOutput' depening on mod_rewrite settings.
*
* @param string $code Code to prepare
* @return string New code
*/
function mr_buildGeneratedCode($code) {
global $client, $cfgClient;
ModRewriteDebugger::add($code, 'mr_buildGeneratedCode() in');
// mod rewrite is activated
if (ModRewrite::isEnabled()) {
$sseStarttime = getmicrotime();
// anchor hack
$code = preg_replace_callback(
"/<a([^>]*)href\s*=\s*[\"|\'][\/]#(.?|.+?)[\"|\']([^>]*)>/i",
create_function('$matches', 'return ModRewrite::rewriteHtmlAnchor($matches);'),
$code
);
// remove tinymce single quote entities:
$code = str_replace("&#39;", "'", $code);
// get base uri
$sBaseUri = $cfgClient[$client]['path']['htmlpath'];
$sBaseUri = CEC_Hook::execute("Contenido.Frontend.BaseHrefGeneration", $sBaseUri);
// IE hack with wrong base href interpretation
$code = preg_replace_callback(
"/([\"|\'|=])upload\/(.?|.+?)([\"|\'|>])/i",
create_function('$matches', 'return stripslashes($matches[1]' . $sBaseUri . ' . "upload/" . $matches[2] . $matches[3]);'),
$code
);
// define some preparations to replace /front_content.php & ./front_content.php
// against front_content.php, because urls should start with front_content.php
$aPattern = array(
'/([\"|\'|=])\/front_content\.php(.?|.+?)([\"|\'|>])/i',
'/([\"|\'|=])\.\/front_content\.php(.?|.+?)([\"|\'|>])/i'
);
$aReplace = array(
'\1front_content.php\2\3',
'\1front_content.php\2\3'
);
// perform the pre replacements
$code = preg_replace($aPattern, $aReplace, $code);
// create url stack object and fill it with found urls...
$oMRUrlStack = ModRewriteUrlStack::getInstance();
$oMRUrlStack->add('front_content.php');
$matches = null;
preg_match_all("/([\"|\'|=])front_content\.php(.?|.+?)([\"|\'|>])/i", $code, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
$oMRUrlStack->add('front_content.php' . $val[2]);
}
// ok let it beginn, build the clean urls
$code = str_replace('"front_content.php"', '"' . mr_buildNewUrl('front_content.php') . '"', $code);
$code = str_replace("'front_content.php'", "'" . mr_buildNewUrl('front_content.php') . "'", $code);
$code = preg_replace_callback(
"/([\"|\'|=])front_content\.php(.?|.+?)([\"|\'|>])/i",
create_function('$aMatches', 'return $aMatches[1] . mr_buildNewUrl("front_content.php" . $aMatches[2]) . $aMatches[3];'),
$code
);
ModRewriteDebugger::add($code, 'mr_buildGeneratedCode() out');
$sseEndtime = getmicrotime();
} else {
// anchor hack for non modrewrite websites
$code = preg_replace_callback(
"/<a([^>]*)href\s*=\s*[\"|\'][\/]#(.?|.+?)[\"|\']([^>]*)>/i",
create_function('$matches', 'return ModRewrite::contenidoHtmlAnchor($matches, $GLOBALS["is_XHTML"]);'),
$code
);
}
ModRewriteDebugger::add(($sseEndtime - $sseStarttime), 'mr_buildGeneratedCode() total spend time');
if ($debug = mr_debugOutput(false)) {
$code = cString::iReplaceOnce("</body>", $debug . "\n</body>", $code);
}
return $code;
// print "\n\n<!-- modrewrite generation time: " . ($sseEndtime - $sseStarttime) . " seconds -->";
}
/**
* Sets language of client, like done in front_content.php
*
* @param int $client Client id
*/
function mr_setClientLanguageId($client) {
global $lang, $load_lang, $cfg;
if ((int) $lang > 0) {
// there is nothing to do
return;
} elseif ($load_lang) {
// load_client is set in frontend/config.php
$lang = $load_lang;
return;
}
// try to get clients language from table
$sql = "SELECT B.idlang FROM "
. $cfg['tab']['clients_lang'] . " AS A, "
. $cfg['tab']['lang'] . " AS B "
. "WHERE "
. "A.idclient='" . ((int) $client) . "' AND A.idlang=B.idlang"
. "LIMIT 0,1";
if ($aData = mr_queryAndNextRecord($sql)) {
$lang = $aData['idlang'];
}
}
/**
* Loads Advanced Mod Rewrite configuration for passed client using serialized
* file containing the settings.
*
* File is placed in /contenido/mod_rewrite/includes/and is named like
* config.mod_rewrite_{client_id}.php.
*
* @param int $clientId Id of client
* @param bool $forceReload Flag to force to reload configuration, e. g. after
* done changes on it
*/
function mr_loadConfiguration($clientId, $forceReload = false) {
global $cfg;
static $aLoaded;
$clientId = (int) $clientId;
if (!isset($aLoaded)) {
$aLoaded = array();
} elseif (isset($aLoaded[$clientId]) && $forceReload == false) {
return;
}
$mrConfig = mr_getConfiguration($clientId);
if (is_array($mrConfig)) {
// merge mod rewrite configuration with global cfg array
$cfg = array_merge($cfg, $mrConfig);
} else {
// couldn't load configuration, set defaults
include_once($cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_default.php');
}
$aLoaded[$clientId] = true;
}
/**
* Returns the mod rewrite configuration array of an client.
*
* File is placed in /contenido/mod_rewrite/includes/and is named like
* config.mod_rewrite_{client_id}.php.
*
* @param int $clientId Id of client
* @return array|null
*/
function mr_getConfiguration($clientId) {
global $cfg;
$file = $cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_' . $clientId . '.php';
if (!is_file($file) || !is_readable($file)) {
return null;
}
if ($content = file_get_contents($file)) {
return unserialize($content);
} else {
return null;
}
}
/**
* Saves the mod rewrite configuration array of an client.
*
* File is placed in /contenido/mod_rewrite/includes/and is named like
* config.mod_rewrite_{client_id}.php.
*
* @param int $clientId Id of client
* @param array $config Configuration to save
* @return bool
*/
function mr_setConfiguration($clientId, array $config) {
global $cfg;
$file = $cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/includes/config.mod_rewrite_' . $clientId . '.php';
$result = file_put_contents($file, serialize($config));
return ($result) ? true : false;
}
/**
* Includes the frontend controller script which parses the url and extacts
* needed data like idcat, idart, lang and client from it.
*
* Will be called by chain 'Contenido.Frontend.AfterLoadPlugins' at front_content.php.
*
* @return bool Just a return value
*/
function mr_runFrontendController() {
$iStartTime = getmicrotime();
plugin_include('mod_rewrite', 'includes/config.plugin.php');
if (ModRewrite::isEnabled() == true) {
plugin_include('mod_rewrite', 'includes/front_content_controller.php');
$totalTime = sprintf('%.4f', (getmicrotime() - $iStartTime));
ModRewriteDebugger::add($totalTime, 'mr_runFrontendController() total time');
}
return true;
}
/**
* Cleanups passed string from characters beeing repeated two or more times
*
* @param string $char Character to remove
* @param string $string String to clean from character
* @return string Cleaned string
*/
function mr_removeMultipleChars($char, $string) {
while (strpos($string, $char . $char) !== false) {
$string = str_replace($char . $char, $char, $string);
}
return $string;
}
/**
* Returns amr related translation text
*
* @param string $key The message id as string
* @return string Related message
*/
function mr_i18n($key) {
global $lngAMR;
return (is_array($lngAMR) && isset($lngAMR[$key])) ? $lngAMR[$key] : 'n. a.';
}
################################################################################
### Some helper functions, which are not plugin specific
/**
* Database query helper. Used to execute a select statement and to return the
* result of first recordset.
*
* Minimizes following code:
* <code>
* // default way
* $db = new DB_Contenido();
* $sql = "SELECT * FROM foo WHERE bar='foobar'";
* $db->query($sql);
* $db->next_record();
* $data = $db->Record;
*
* // new way
* $sql = "SELECT * FROM foo WHERE bar='foobar'";
* $data = mr_queryAndNextRecord($sql);
* </code>
*
* @param string $query Query to execute
* @return mixed Assoziative array including recordset or null
*/
function mr_queryAndNextRecord($query) {
static $db;
if (!isset($db)) {
$db = new DB_Contenido();
}
if (!$db->query($query)) {
return null;
}
return ($db->next_record()) ? $db->Record : null;
}
/**
* Returns value of an array key (assoziative or indexed).
*
* Shortcut function for some ways to access to arrays:
* <code>
* // old way
* if (is_array($foo) && isset($foo['bar']) && $foo['bar'] == 'yieeha') {
* // do something
* }
*
* // new, more readable way:
* if (mr_arrayValue($foo, 'bar') == 'yieeha') {
* // do something
* }
*
* // old way
* if (is_array($foo) && isset($foo['bar'])) {
* $jep = $foo['bar'];
* } else {
* $jep = 'yummy';
* }
*
* // new way
* $jep = mr_arrayValue($foo, 'bar', 'yummy');
* </code>
*
* @param array $array The array
* @param mixed $key Position of an indexed array or key of an assoziative array
* @param mixed $default Default value to return
* @return mixed Either the found value or the default value
*/
function mr_arrayValue($array, $key, $default = null) {
if (!is_array($array)) {
return $default;
} elseif (!isset($array[$key])) {
return $default;
} else {
return $array[$key];
}
}
/**
* Request cleanup function. Request data is allways tainted and must be filtered.
* Pass the array to cleanup using several options.
* Emulates array_walk_recursive().
*
* @param mixed $data Data to cleanup
* @param array $options Default options array, provides only 'filter' key with several
* filter functions which are to execute as follows:
* <code>
* $options['filter'] = array('trim', 'myFilterFunc');
* </code>
* If no filter functions are set, 'trim', 'strip_tags' and 'stripslashes'
* will be used by default.
* A userdefined function must accept the value as a parameter and must return
* the filtered parameter, e. g.
* <code>
* function myFilter($data) {
* // do what you want with the data, e. g. cleanup of xss content
* return $data;
* }
* </code>
*
* @return mixed Cleaned data
*/
function mr_requestCleanup(&$data, $options = null) {
if (!mr_arrayValue($options, 'filter')) {
$options['filter'] = array('trim', 'strip_tags', 'stripslashes');
}
if (is_array($data)) {
foreach ($data as $p => $v) {
$data[$p] = mr_requestCleanup($v, $options);
}
} else {
foreach ($options['filter'] as $filter) {
if ($filter == 'trim') {
$data = trim($data);
} elseif ($filter == 'strip_tags') {
$data = strip_tags($data);
} elseif ($filter == 'stripslashes') {
$data = stripslashes($data);
} elseif (function_exists($filter)) {
$data = call_user_func($filter, $data);
}
}
}
return $data;
}
/**
* Minimalistic'n simple way to get request variables.
*
* Checks occurance in $_GET, then in $_POST. Uses trim() and strip_tags() to preclean data.
*
* @param string $key Name of var to get
* @param mixed $default Default value to return
* @return mixed The value
*/
function mr_getRequest($key, $default = null) {
static $cache;
if (!isset($cache)) {
$cache = array();
}
if (isset($cache[$key])) {
return $cache[$key];
}
if (isset($_GET[$key])) {
$val = $_GET[$key];
} elseif (isset($_POST[$key])) {
$val = $_POST[$key];
} else {
$val = $default;
}
$cache[$key] = strip_tags(trim($val));
return $cache[$key];
}
/**
* Replaces calling of header method for redirects in front_content.php,
* used during development.
*
* @param $header Header value for redirect
*/
function mr_header($header) {
header($header);
return;
$header = str_replace('Location: ', '', $header);
echo '<html>
<head></head>
<body>
<p><a href="' . $header . '">' . $header . '</a></p>';
mr_debugOutput();
echo '</body></html>';
exit();
}
/**
* Debug output only during development
*
* @param bool $print Flag to echo the debug data
* @return mixed Either the debug data, if parameter $print is set to true, or nothing
*/
function mr_debugOutput($print = true) {
global $DB_Contenido_QueryCache;
if (isset($DB_Contenido_QueryCache) && is_array($DB_Contenido_QueryCache) &&
count($DB_Contenido_QueryCache) > 0) {
ModRewriteDebugger::add($DB_Contenido_QueryCache, 'sql statements');
// calculate total time consumption of queries
$timeTotal = 0;
foreach ($DB_Contenido_QueryCache as $pos => $item) {
$timeTotal += $item['time'];
}
ModRewriteDebugger::add($timeTotal, 'sql total time');
}
$sOutput = ModRewriteDebugger::getAll();
if ($print == true) {
echo $sOutput;
} else {
return $sOutput;
}
}

Datei anzeigen

@ -0,0 +1,312 @@
<?php
/**
* Plugin mod_rewrite backend include file to administer settings (in content frame)
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: include.mod_rewrite_content.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');
}
global $client, $cfg;
################################################################################
##### Initialization
if ((int) $client <= 0) {
// if there is no client selected, display empty page
$oPage = new cPage;
$oPage->render();
return;
}
$action = (isset($_REQUEST['mr_action'])) ? $_REQUEST['mr_action'] : 'index';
$bDebug = false;
################################################################################
##### Some variables
$oMrController = new ModRewrite_ContentController();
$aMrCfg = ModRewrite::getConfig();
// downwards compatibility to previous plugin versions
if (mr_arrayValue($aMrCfg, 'category_seperator', '') == '') {
$aMrCfg['category_seperator'] = '/';
}
if (mr_arrayValue($aMrCfg, 'category_word_seperator', '') == '') {
$aMrCfg['category_word_seperator'] = '-';
}
if (mr_arrayValue($aMrCfg, 'article_seperator', '') == '') {
$aMrCfg['article_seperator'] = '/';
}
if (mr_arrayValue($aMrCfg, 'article_word_seperator', '') == '') {
$aMrCfg['article_word_seperator'] = '-';
}
// some settings
$aSeparator = array(
'pattern' => '/^[\/\-_\.\$~]{1}$/',
'info' => '<span style="font-family:courier;font-weight:bold;">/ - . _ ~</span>'
);
$aWordSeparator = array(
'pattern' => '/^[\-_\.\$~]{1}$/',
'info' => '<span style="font-family:courier;font-weight:bold;">- . _ ~</span>'
);
$routingSeparator = '>>>';
$oMrController->setProperty('bDebug', $bDebug);
$oMrController->setProperty('aSeparator', $aSeparator);
$oMrController->setProperty('aWordSeparator', $aWordSeparator);
$oMrController->setProperty('routingSeparator', $routingSeparator);
// define basic data contents (used for template)
$oView = $oMrController->getView();
$oView->content_before = '';
$oView->idclient = $client;
$oView->use_chk = (ModRewrite::isEnabled()) ? ' checked="checked"' : '';
$oView->header_notes_css = 'display:none;';
// mr copy .htaccess
// @todo copy htacccess check into ModRewrite_ContentController->_doChecks()
$aHtaccessInfo = ModRewrite::getHtaccessInfo();
if ($aHtaccessInfo['has_htaccess']) {
$oView->htaccess_info_css = 'display:none;';
} else {
$oView->header_notes_css = 'display:table-row;';
$oView->htaccess_info_css = 'display:block;';
}
// empty aliases
$iEmptyArticleAliases = ModRewrite::getEmptyArticlesAliases();
$iEmptyCategoryAliases = ModRewrite::getEmptyCategoriesAliases();
if ($iEmptyArticleAliases > 0 || $iEmptyCategoryAliases > 0) {
$oView->header_notes_css = 'display:table-row;';
$oView->emptyaliases_info_css = 'display:block;';
} else {
$oView->emptyaliases_info_css = 'display:none;';
}
// mr root dir
$oView->rootdir = $aMrCfg['rootdir'];
$oView->rootdir_error = '';
// mr check root dir
$oView->checkrootdir_chk = ($aMrCfg['checkrootdir'] == 1) ? ' checked="checked"' : '';
// mr start from root
$oView->startfromroot_chk = ($aMrCfg['startfromroot'] == 1) ? ' checked="checked"' : '';
// mr prevent duplicated content
$oView->prevent_duplicated_content_chk = ($aMrCfg['prevent_duplicated_content'] == 1) ? ' checked="checked"' : '';
// mr language usage
$oView->use_language_chk = ($aMrCfg['use_language'] == 1) ? ' checked="checked"' : '';
$oView->use_language_name_chk = ($aMrCfg['use_language_name'] == 1) ? ' checked="checked"' : '';
$oView->use_language_name_disabled = ($aMrCfg['use_language'] == 1) ? '' : ' disabled="disabled"';
// mr client usage
$oView->use_client_chk = ($aMrCfg['use_client'] == 1) ? ' checked="checked"' : '';
$oView->use_client_name_chk = ($aMrCfg['use_client_name'] == 1) ? ' checked="checked"' : '';
$oView->use_client_name_disabled = ($aMrCfg['use_client'] == 1) ? '' : ' disabled="disabled"';
// mr lowecase uri
$oView->use_lowercase_uri_chk = ($aMrCfg['use_lowercase_uri'] == 1) ? ' checked="checked"' : '';
// mr category/category word separator
$oView->category_separator = $aMrCfg['category_seperator'];
$oView->category_separator_attrib = '';
$oView->category_word_separator = $aMrCfg['category_word_seperator'];
$oView->category_word_separator_attrib = '';
$oView->category_separator_error = '';
$oView->category_word_separator_error = '';
// mr article/article word separator
$oView->article_separator = $aMrCfg['article_seperator'];
$oView->article_separator_attrib = '';
$oView->article_word_separator = $aMrCfg['article_word_seperator'];
$oView->article_word_separator_attrib = '';
$oView->article_separator_error = '';
$oView->article_word_separator_error = '';
// mr file extension
$oView->file_extension = $aMrCfg['file_extension'];
$oView->file_extension_error = '';
// mr category name resolve percentage
$oView->category_resolve_min_percentage = $aMrCfg['category_resolve_min_percentage'];
$oView->category_resolve_min_percentage_error = '';
// mr add start article name to url
$oView->add_startart_name_to_url_chk = ($aMrCfg['add_startart_name_to_url'] == 1) ? ' checked="checked"' : '';
$oView->add_startart_name_to_url_error = '';
$oView->default_startart_name = $aMrCfg['default_startart_name'];
// mr rewrite urls at
$oView->rewrite_urls_at_congeneratecode_chk = ($aMrCfg['rewrite_urls_at_congeneratecode'] == 1) ? ' checked="checked"' : '';
$oView->rewrite_urls_at_front_content_output_chk = ($aMrCfg['rewrite_urls_at_front_content_output'] == 1) ? ' checked="checked"' : '';
$oView->content_after = '';
// mr rewrite routing
$data = '';
if (is_array($aMrCfg['routing'])) {
foreach ($aMrCfg['routing'] as $uri => $route) {
$data .= $uri . $routingSeparator . $route . "\n";
}
}
$oView->rewrite_routing = $data;
// mr redirect invalid article
$oView->redirect_invalid_article_to_errorsite_chk = ($aMrCfg['redirect_invalid_article_to_errorsite'] == 1) ? ' checked="checked"' : '';
$oView->lng_version = i18n("Version", "mod_rewrite");
$oView->lng_author = i18n("Author", "mod_rewrite");
$oView->lng_mail_to_author = i18n("E-Mail to author", "mod_rewrite");
$oView->lng_pluginpage = i18n("Plugin page", "mod_rewrite");
$oView->lng_visit_pluginpage = i18n("Visit plugin page", "mod_rewrite");
$oView->lng_opens_in_new_window = i18n("opens page in new window", "mod_rewrite");
$oView->lng_contenido_forum = i18n("CONTENIDO forum", "mod_rewrite");
$oView->lng_pluginthread_in_contenido_forum = i18n("Plugin thread in CONTENIDO forum", "mod_rewrite");
$oView->lng_plugin_settings = i18n("Plugin settings", "mod_rewrite");
$oView->lng_note = i18n("Note", "mod_rewrite");
// @todo copy htacccess check into ModRewrite_ContentController->_doChecks()
$sMsg = i18n("The .htaccess file could not found either in CONTENIDO installation directory nor in client directory.<br>It should set up in %sFunctions%s area, if needed.", "mod_rewrite");
$oView->lng_msg_no_htaccess_found = sprintf($sMsg, '<a href="main.php?area=mod_rewrite_expert&frame=4&contenido=' . $oView->sessid . '&idclient=' . $client . '" onclick="parent.right_top.sub.clicked(parent.right_top.document.getElementById(\'c_1\').firstChild);">', '</a>');
$sMsg = i18n("Found", "mod_rewrite");
$oView->lng_msg_no_emptyaliases_found = sprintf($sMsg, '<a href="main.php?area=mod_rewrite_expert&frame=4&contenido=' . $oView->sessid . '&idclient=' . $client . '" onclick="parent.right_top.sub.clicked(parent.right_top.document.getElementById(\'c_1\').firstChild);">', '</a>');
$oView->lng_enable_amr = i18n("Enable Advanced Mod Rewrite", "mod_rewrite");
$oView->lng_msg_enable_amr_info = i18n("Disabling of plugin does not result in disabling mod rewrite module of the web server - This means,<br> all defined rules in the .htaccess are still active and could create unwanted side effects.<br><br>Apache mod rewrite could be enabled/disabled by setting the RewriteEngine directive.<br>Any defined rewrite rules could remain in the .htaccess and they will not processed,<br>if the mod rewrite module is disabled", "mod_rewrite");
$oView->lng_example = i18n("Example", "mod_rewrite");
$oView->lng_msg_enable_amr_info_example = i18n("# enable apache mod rewrite module\nRewriteEngine on\n\n# disable apache mod rewrite module\nRewriteEngine off", "mod_rewrite");
$oView->lng_rootdir = i18n("Path to .htaccess from DocumentRoot", "mod_rewrite");
$oView->lng_rootdir_info = i18n("Type '/' if the .htaccess file lies inside the wwwroot (DocumentRoot) folder.<br>Type the path to the subfolder fromm wwwroot, if CONTENIDO is installed in a subfolder within the wwwroot<br>(e. g. http://domain/mycontenido -&gt; path = '/mycontenido/')", "mod_rewrite");
$oView->lng_checkrootdir = i18n("Check path to .htaccess", "mod_rewrite");
$oView->lng_checkrootdir_info = i18n("The path will be checked, if this option is enabled.<br>But this could result in an error in some cases, even if the specified path is valid and<br>clients DocumentRoot differs from CONTENIDO backend DocumentRoot.", "mod_rewrite");
$oView->lng_startfromroot = i18n("Should the name of root category be displayed in the URL?", "mod_rewrite");
$oView->lng_startfromroot_lbl = i18n("Start from root category", "mod_rewrite");
$oView->lng_startfromroot_info = i18n("If enabled, the name of the root category (e. g. 'Mainnavigation' in a CONTENIDO default installation), will be preceded to the URL.", "mod_rewrite");
$oView->lng_use_client = i18n("Are several clients maintained in one directory?", "mod_rewrite");
$oView->lng_use_client_lbl = i18n("Prepend client to the URL", "mod_rewrite");
$oView->lng_use_client_name_lbl = i18n("Use client name instead of the id", "mod_rewrite");
$oView->lng_use_language = i18n("Should the language appear in the URL (required for multi language websites)?", "mod_rewrite");
$oView->lng_use_language_lbl = i18n("Prepend language to the URL", "mod_rewrite");
$oView->lng_use_language_name_lbl = i18n("Use language name instead of the id", "mod_rewrite");
$oView->lng_userdefined_separators_header = i18n("Configure your own separators with following 4 settings<br>to control generated URLs to your own taste", "mod_rewrite");
$oView->lng_userdefined_separators_example = i18n("www.domain.com/category1-category2.articlename.html\nwww.domain.com/category1/category2-articlename.html\nwww.domain.com/category.name1~category2~articlename.html\nwww.domain.com/category_name1-category2-articlename.foo", "mod_rewrite");
$oView->lng_userdefined_separators_example_a = i18n("Category separator has to be different from category-word separator", "mod_rewrite");
$oView->lng_userdefined_separators_example_a_example = i18n("# Example: Category separator (/) and category-word separator (_)\ncategory_one/category_two/articlename.html", "mod_rewrite");
$oView->lng_userdefined_separators_example_b = i18n("Category separator has to be different from article-word separator", "mod_rewrite");
$oView->lng_userdefined_separators_example_b_example = i18n("# Example: Category separator (/) and article-word separator (-)\ncategory_one/category_two/article-description.html", "mod_rewrite");
$oView->lng_userdefined_separators_example_c = i18n("Category-article separator has to be different from article-word separator", "mod_rewrite");
$oView->lng_userdefined_separators_example_c_example = i18n("# Example: Category-article separator (/) and article-word separator (-)\ncategory_one/category_two/article-description.html", "mod_rewrite");
$oView->lng_category_separator = i18n("Category separator (delemiter between single categories)", "mod_rewrite");
$oView->lng_catart_separator_info = sprintf(i18n("(possible values: %s)", "mod_rewrite"), $aSeparator['info']);
$oView->lng_word_separator_info = sprintf(i18n("(possible values: %s)", "mod_rewrite"), $aWordSeparator['info']);
$oView->lng_category_word_separator = i18n("Category-word separator (delemiter between category words)", "mod_rewrite");
$oView->lng_article_separator = i18n("Category-article separator (delemiter between category-block and article)", "mod_rewrite");
$oView->lng_article_word_separator = i18n("Article-word separator (delemiter between article words)", "mod_rewrite");
$oView->lng_add_startart_name_to_url = i18n("Append article name to URLs", "mod_rewrite");
$oView->lng_add_startart_name_to_url_lbl = i18n("Append article name always to URLs (even at URLs to categories)", "mod_rewrite");
$oView->lng_default_startart_name = i18n("Default article name without extension", "mod_rewrite");
$oView->lng_default_startart_name_info = i18n("e. g. 'index' for index.ext<br>In case of selected 'Append article name always to URLs' option and a empty field,<br>the name of the start article will be used", "mod_rewrite");
$oView->lng_file_extension = i18n("File extension at the end of the URL", "mod_rewrite");
$oView->lng_file_extension_info = i18n("Specification of file extension with a preceded dot<br>e.g. '.html' for http://host/foo/bar.html", "mod_rewrite");
$oView->lng_file_extension_info2 = i18n("It's strongly recommended to specify a extension here,<br>if the option 'Append article name always to URLs' was not selected.<br><br>Otherwise URLs to categories and articles would have the same format<br>which may result in unresolvable categories/articles in some cases.", "mod_rewrite");
$oView->lng_file_extension_info3 = i18n("It's necessary to specify a file extension at the moment, due do existing issues, which are not solved until yet. An not defined extension may result in invalid article detection in some cases.", "mod_rewrite");
$oView->lng_use_lowercase_uri = i18n("Should the URLs be written in lower case?", "mod_rewrite");
$oView->lng_use_lowercase_uri_lbl = i18n("URLs in lower case", "mod_rewrite");
$oView->lng_prevent_duplicated_content = i18n("Duplicated content", "mod_rewrite");
$oView->lng_prevent_duplicated_content_lbl = i18n("Prevent duplicated content", "mod_rewrite");
$oView->lng_prevent_duplicated_content_info = i18n("Depending on configuration, pages could be found thru different URLs.<br>Enabling of this option prevents this. Examples for duplicated content", "mod_rewrite");
$oView->lng_prevent_duplicated_content_info2 = i18n("Name of the root category in the URL: Feasible is /maincategory/subcategory/ and /subcategory/\nLanguage in the URL: Feasible is /german/category/ and /1/category/\nClient in the URL: Feasible is /client/category/ und /1/category/", "mod_rewrite");
$oView->lng_prevent_duplicated_content_info2 = '<li>' . str_replace("\n", '</li><li>', $oView->lng_prevent_duplicated_content_info2) . '</li>';
$oView->lng_category_resolve_min_percentage = i18n("Percentage for similar category paths in URLs", "mod_rewrite");
$oView->lng_category_resolve_min_percentage_info = i18n("This setting refers only to the category path of a URL. If AMR is configured<br>to prepend e. g. the root category, language and/or client to the URL,<br>the specified percentage will not applied to those parts of the URL.<br>An incoming URL will be cleaned from those values and the remaining path (urlpath of the category)<br>will be checked against similarities.", "mod_rewrite");
$oView->lng_category_resolve_min_percentage_example = i18n("100 = exact match with no tolerance\n85 = paths with little errors will match to similar ones\n0 = matching will work even for total wrong paths", "mod_rewrite");
$oView->lng_redirect_invalid_article_to_errorsite = i18n("Redirect in case of invalid articles", "mod_rewrite");
$oView->lng_redirect_invalid_article_to_errorsite_lbl = i18n("Redirect to error page in case of invaid articles", "mod_rewrite");
$oView->lng_redirect_invalid_article_to_errorsite_info = i18n("The start page will be displayed if this option is not enabled", "mod_rewrite");
$oView->lng_rewrite_urls_at = i18n("Moment of URL generation", "mod_rewrite");
$oView->lng_rewrite_urls_at_front_content_output_lbl = i18n("a.) During the output of HTML code of the page", "mod_rewrite");
$oView->lng_rewrite_urls_at_front_content_output_info = i18n("Clean-URLs will be generated during page output. Modules/Plugins are able to generate URLs to frontend<br>as usual as in previous CONTENIDO versions using a format like 'front_content.php?idcat=1&amp;idart=2'.<br>The URLs will be replaced by the plugin to Clean-URLs before sending the HTML output.", "mod_rewrite");
$oView->lng_rewrite_urls_at_front_content_output_info2 = i18n("Differences to variant b.)", "mod_rewrite");
$oView->lng_rewrite_urls_at_front_content_output_info3 = i18n("Still compatible to old modules/plugins, since no changes in codes are required\nAll occurring URLs in HTML code, even those set by wysiwyg, will be switched to Clean-URLs\nAll URLs will usually be collected and converted to Clean-URLs at once.<br>Doing it this way reduces the amount of executed database significantly.", "mod_rewrite");
$oView->lng_rewrite_urls_at_front_content_output_info3 = '<li>' . str_replace("\n", '</li><li>', $oView->rewrite_urls_at_front_content_output_info3) . '</li>';
$oView->lng_rewrite_urls_at_congeneratecode_lbl = i18n("b.) In modules or plugins", "mod_rewrite");
$oView->lng_rewrite_urls_at_congeneratecode_info = i18n("By using this option, all Clean-URLs will be generated directly in module or plugins.<br>This means, all areas in modules/plugins, who generate internal URLs to categories/articles, have to be adapted manually.<br>All Clean-URLs have to be generated by using following function:", "mod_rewrite");
$oView->lng_rewrite_urls_at_congeneratecode_example = i18n("# structure of a normal url\n\$url = 'front_content.php?idart=123&amp;lang=2&amp;client=1';\n\n# creation of a url by using the CONTENIDOs Url-Builder (since 4.8.9),\n# wich expects the parameter as a assoziative array\n\$params = array('idart'=>123, 'lang'=>2, 'client'=>1);\n\$newUrl = Contenido_Url::getInstance()->build(\$params);", "mod_rewrite");
$oView->lng_rewrite_urls_at_congeneratecode_info2 = i18n("Differences to variant a.)", "mod_rewrite");
$oView->lng_rewrite_urls_at_congeneratecode_info3 = i18n("The default way to generate URLs to fronend pages\nEach URL in modules/plugins has to be generated by UriBuilder\nEach generated Clean-Url requires a database query", "mod_rewrite");
$oView->lng_rewrite_urls_at_congeneratecode_info3 = '<li>' . str_replace("\n", '</li><li>', $oView->lng_rewrite_urls_at_congeneratecode_info3) . '</li>';
$oView->lng_rewrite_routing = i18n("Routing", "mod_rewrite");
$oView->lng_rewrite_routing_info = i18n("Routing definitions for incoming URLs", "mod_rewrite");
$oView->lng_rewrite_routing_info2 = i18n("Type one routing definition per line as follows:", "mod_rewrite");
$oView->lng_rewrite_routing_example = i18n("# {incoming_url}>>>{new_url}\n/incoming_url/name.html>>>new_url/new_name.html\n\n# route a specific incoming url to a new page\n/campaign/20_percent_on_everything_except_animal_food.html>>>front_content.php?idcat=23\n\n# route request to wwwroot to a specific page\n/>>>front_content.php?idart=16", "mod_rewrite");
$oView->lng_rewrite_routing_info3 = i18n("The routing does not sends a HTTP header redirection to the destination URL, the redirection will happen internally by<br>replacing the detected incoming URL against the new destination URL (overwriting of article- categoryid)\nIncoming URLs can point to non existing resources (category/article), but the desttination URLs should point<br>to valid CONTENIDO articles/categories\nDestination URLs should point to real URLs to categories/articles,<br>e. g.front_content.php?idcat=23 or front_content.php?idart=34\nThe language id should attached to the URL in multi language sites<br>e. g. front_content.php?idcat=23&amp;lang=1\nThe client id should attached to the URL in multi client sites sharing the same folder<br>e. g. front_content.php?idcat=23&amp;client=2\nThe destination URL should not start with '/' or './' (wrong: /front_content.php, correct: front_content.php)", "mod_rewrite");
$oView->lng_rewrite_routing_info3 = '<li>' . str_replace("\n", '</li><li>', $oView->lng_rewrite_routing_info3) . '</li>';
$oView->lng_discard_changes = i18n("Discard changes", "mod_rewrite");
$oView->lng_save_changes = i18n("Save changes", "mod_rewrite");
################################################################################
##### Action processing
if ($action == 'index') {
$oMrController->indexAction();
} elseif ($action == 'save') {
$oMrController->saveAction();
} elseif ($action == 'reset') {
$oMrController->resetAction();
} elseif ($action == 'resetempty') {
$oMrController->resetEmptyAction();
} else {
$oMrController->indexAction();
}
################################################################################
##### Output
$oMrController->render(
$cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/templates/content.html'
);

Datei anzeigen

@ -0,0 +1,18 @@
<?php
/**
* Plugin mod_rewrite backend include file (in content-top frame)
*
* @date 22.04.2008
* @author Murat Purc
* @copyright © Murat Purc 2008
* @package Contenido
* @subpackage ModRewrite
*/
defined('CON_FRAMEWORK') or die('Illegal call');
$tpl = new Template();
$tpl->generate(
$cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/templates/content_top.html', 0, 0
);

Datei anzeigen

@ -0,0 +1,119 @@
<?php
/**
* Plugin mod_rewrite backend include file to administer expert (in content frame)
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: include.mod_rewrite_contentexpert.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');
}
global $client, $cfg;
################################################################################
##### Initialization
if ((int) $client <= 0) {
// if there is no client selected, display empty page
$oPage = new cPage;
$oPage->render();
return;
}
$action = (isset($_REQUEST['mr_action'])) ? $_REQUEST['mr_action'] : 'index';
$debug = false;
################################################################################
##### Some variables
$oMrController = new ModRewrite_ContentExpertController();
$aMrCfg = ModRewrite::getConfig();
$aHtaccessInfo = ModRewrite::getHtaccessInfo();
// define basic data contents (used for template)
$oView = $oMrController->getView();
// view variables
$oView->copy_htaccess_css = 'display:table-row;';
$oView->copy_htaccess_error = '';
$oView->copy_htaccess_contenido_chk = ' checked="checked"';
$oView->copy_htaccess_cms_chk = '';
$oView->contenido_full_path = $aHtaccessInfo['contenido_full_path'];
$oView->client_full_path = $aHtaccessInfo['client_full_path'];
$oView->content_after = '';
$oMrController->setProperty('htaccessInfo', $aHtaccessInfo);
// view language variables
$oView->lng_plugin_functions = i18n("Plugin functions", "mod_rewrite");
$oView->lng_copy_htaccess_type = i18n("Copy/Download .htaccess template", "mod_rewrite");
$oView->lng_copy_htaccess_type_lbl = i18n("Select .htaccess template", "mod_rewrite");
$oView->lng_copy_htaccess_type1 = i18n("Restrictive .htaccess", "mod_rewrite");
$oView->lng_copy_htaccess_type2 = i18n("Simple .htaccess", "mod_rewrite");
$oView->lng_copy_htaccess_type_info1 = i18n("Contains rules with restrictive settings.<br>All requests pointing to extension avi, css, doc, flv, gif, gzip, ico, jpeg, jpg, js, mov, <br>mp3, pdf, png, ppt, rar, txt, wav, wmv, xml, zip, will be excluded vom rewriting.<br>Remaining requests will be rewritten to front_content.php,<br>except requests to 'contenido/', 'setup/', 'cms/upload', 'cms/front_content.php', etc.<br>Each resource, which has to be excluded from rewriting must be specified explicitly.", "mod_rewrite");
$oView->lng_copy_htaccess_type_info2 = i18n("Contains a simple collection of rules. Each requests pointing to valid symlinks, folders or<br>files, will be excluded from rewriting. Remaining requests will be rewritten to front_content.php", "mod_rewrite");
$oView->lng_copy_htaccess_to = i18n("and copy to", "mod_rewrite");
$oView->lng_copy_htaccess_to_contenido = i18n("CONTENIDO installation directory", "mod_rewrite");
$oView->lng_copy_htaccess_to_contenido_info = i18n("Copy the selected .htaccess template into CONTENIDO installation directory<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{CONTENIDO_FULL_PATH}.<br><br>This is the recommended option for a CONTENIDO installation with one or more clients<br>who are running on the same domain.", "mod_rewrite");
$oView->lng_copy_htaccess_to_contenido_info = str_replace('{CONTENIDO_FULL_PATH}', $oView->contenido_full_path, $oView->lng_copy_htaccess_to_contenido_info);
$oView->lng_copy_htaccess_to_client = i18n("client directory", "mod_rewrite");
$oView->lng_copy_htaccess_to_client_info = i18n("Copy the selected .htaccess template into client's directory<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{CLIENT_FULL_PATH}.<br><br>This is the recommended option for a multiple client system<br>where each client has it's own domain/subdomain", "mod_rewrite");
$oView->lng_copy_htaccess_to_client_info = str_replace('{CLIENT_FULL_PATH}', $oView->client_full_path, $oView->lng_copy_htaccess_to_client_info);
$oView->lng_or = i18n("or", "mod_rewrite");
$oView->lng_download = i18n("Download", "mod_rewrite");
$oView->lng_download_info = i18n("Download selected .htaccess template to copy it to the destination folder<br>or to take over the settings manually.", "mod_rewrite");
$oView->lng_resetaliases = i18n("Reset category-/ and article aliases", "mod_rewrite");
$oView->lng_resetempty_link = i18n("Reset only empty aliases", "mod_rewrite");
$oView->lng_resetempty_info = i18n("Only empty aliases will be reset, existing aliases, e. g. manually set aliases, will not be changed.", "mod_rewrite");
$oView->lng_resetall_link = i18n("Reset all aliases", "mod_rewrite");
$oView->lng_resetall_info = i18n("Reset all category-/article aliases. Existing aliases will be overwritten.", "mod_rewrite");
$oView->lng_note = i18n("Note", "mod_rewrite");
$oView->lng_resetaliases_note = i18n("This process could require some time depending on amount of categories/articles.<br>The aliases will not contain the configured plugin separators, but the CONTENIDO default separators '/' und '-', e. g. '/category-word/article-word'.<br>Execution of this function ma be helpful to prepare all or empty aliases for the usage by the plugin.", "mod_rewrite");
$oView->lng_discard_changes = i18n("Discard changes", "mod_rewrite");
$oView->lng_save_changes = i18n("Save changes", "mod_rewrite");
################################################################################
##### Action processing
if ($action == 'index') {
$oMrController->indexAction();
} elseif ($action == 'copyhtaccess') {
$oMrController->copyHtaccessAction();
} elseif ($action == 'downloadhtaccess') {
$oMrController->downloadHtaccessAction();
exit();
} elseif ($action == 'reset') {
$oMrController->resetAction();
} elseif ($action == 'resetempty') {
$oMrController->resetEmptyAction();
} else {
$oMrController->indexAction();
}
################################################################################
##### Output
$oMrController->render(
$cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/templates/contentexpert.html'
);

Datei anzeigen

@ -0,0 +1,83 @@
<?php
/**
* Testscript for Advanced Mod Rewrite Plugin.
*
* The goal of this testscript is to provide an easy way for a variance comparison
* of created SEO URLs against their resolved parts.
*
* This testscript fetches the full category and article structure of actual
* CONTENIDO installation, creates the SEO URLs for each existing category/article
* and resolves the generated URLs.
*
* @package plugin
* @subpackage Mod Rewrite
* @version SVN Revision $Rev: 128 $
* @id $Id: include.mod_rewrite_contenttest.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');
}
global $client, $cfg;
################################################################################
##### Initialization
if ((int) $client <= 0) {
// if there is no client selected, display empty page
$oPage = new cPage;
$oPage->render();
return;
}
################################################################################
##### Processing
$mrTestNoOptionSelected = false;
if (!mr_getRequest('idart') && !mr_getRequest('idcat') && !mr_getRequest('idcatart') && !mr_getRequest('idartlang')) {
$mrTestNoOptionSelected = true;
}
$oMrTestController = new ModRewrite_ContentTestController();
// view language variables
$oView = $oMrTestController->getView();
$oView->lng_form_info = i18n("Define options to genereate the URLs by using the form below and run the test.", "mod_rewrite");
$oView->lng_form_label = i18n("Parameter to use", "mod_rewrite");
$oView->lng_maxitems_lbl = i18n("Number of URLs to generate", "mod_rewrite");
$oView->lng_run_test = i18n("Run test", "mod_rewrite");
$oView->lng_result_item_tpl = i18n("{pref}<strong>{name}</strong><br>{pref}Builder in: {url_in}<br>{pref}Builder out: {url_out}<br>{pref}<span style='color:{color}'>Resolved URL: {url_res}</span><br>{pref}Resolver err: {err}<br>{pref}Resolved data: {data}", "mod_rewrite");
$oView->lng_result_message_tpl = i18n("Duration of test run: {time} seconds.<br>Number of processed URLs: {num_urls}<br><span style='color:green'>Successful resolved: {num_success}</span><br><span style='color:red'>Errors during resolving: {num_fail}</span></strong>", "mod_rewrite");
################################################################################
##### Action processing
if ($mrTestNoOptionSelected) {
$oMrTestController->indexAction();
} else {
$oMrTestController->testAction();
}
$oView = $oMrTestController->getView();
$oView->content .= mr_debugOutput(false);
################################################################################
##### Output
$oMrTestController->render(
$cfg['path']['contenido'] . $cfg['path']['plugins'] . 'mod_rewrite/templates/contenttest.html'
);

Binäre Datei nicht angezeigt.

Datei anzeigen

@ -0,0 +1,944 @@
msgid ""
msgstr ""
"Project-Id-Version: ConLite AMR\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-15 18:37+0200\n"
"PO-Revision-Date: 2017-07-16 13:36+0100\n"
"Last-Translator: Ortwin Pinke <o.pinke@php-backoffice.de>\n"
"Language-Team: Ortwin Pinke <translate@conlite.org>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-KeywordsList: i18n\n"
"X-Generator: Poedit 1.5.4\n"
"X-Poedit-SearchPath-0: mod_rewrite\n"
#: includes/include.mod_rewrite_content.php:177
msgid "Version"
msgstr "Version"
#: includes/include.mod_rewrite_content.php:178
msgid "Author"
msgstr "Autor"
#: includes/include.mod_rewrite_content.php:179
msgid "E-Mail to author"
msgstr "E-Mail an Autor"
#: includes/include.mod_rewrite_content.php:180
msgid "Plugin page"
msgstr "Pluginseite"
#: includes/include.mod_rewrite_content.php:181
msgid "Visit plugin page"
msgstr "Pluginseite besuchen"
#: includes/include.mod_rewrite_content.php:182
msgid "opens page in new window"
msgstr "öffnet Seite in einem neuen Fenster"
#: includes/include.mod_rewrite_content.php:183
msgid "CONTENIDO forum"
msgstr "CONTENIDO Forum"
#: includes/include.mod_rewrite_content.php:184
msgid "Plugin thread in CONTENIDO forum"
msgstr "Pluginbeitrag im CONTENIDO Forum"
#: includes/include.mod_rewrite_content.php:185
msgid "Plugin settings"
msgstr "Plugineinstellungen"
#: includes/include.mod_rewrite_content.php:186
#: includes/include.mod_rewrite_contentexpert.php:87
msgid "Note"
msgstr "Hinweis"
#: includes/include.mod_rewrite_content.php:189
#, php-format
msgid ""
"The .htaccess file could not found either in CONTENIDO installation "
"directory nor in client directory.<br>It should set up in %sFunctions%s "
"area, if needed."
msgstr ""
"Es wurde weder im CONTENIDO Installationsverzeichnis noch im "
"Mandantenverzeichnis eine .htaccess Datei gefunden.<br>Die .htaccess Datei "
"sollte gegebenenfalls im Bereich %sFunktionen%s eingerichtet werden."
#: includes/include.mod_rewrite_content.php:192
#, php-format
msgid ""
"Found some category and/or article aliases. It is recommended to run the "
"reset function in %sFunctions%s area, if needed."
msgstr ""
"Einige leere Kategorie- und/oder Artikelaliase wurden gefunden. Es wird "
"empfohlen, diese über den Bereich %sFunktionen%s zur&uuml;ckzusetzen."
#: includes/include.mod_rewrite_content.php:195
msgid "Enable Advanced Mod Rewrite"
msgstr "Advanced Mod Rewrite aktivieren"
#: includes/include.mod_rewrite_content.php:197
msgid ""
"Disabling of plugin does not result in disabling mod rewrite module of the "
"web server - This means,<br> all defined rules in the .htaccess are still "
"active and could create unwanted side effects.<br><br>Apache mod rewrite "
"could be enabled/disabled by setting the RewriteEngine directive.<br>Any "
"defined rewrite rules could remain in the .htaccess and they will not "
"processed,<br>if the mod rewrite module is disabled"
msgstr ""
"Beim Deaktivieren des Plugins wird das mod rewrite Modul des Webservers "
"nicht mit deaktiviert - Das bedeutet, <br>dass alle in der .htaccess "
"definerten Regeln weiterhin aktiv sind und einen unerwünschten Nebeneffekt "
"haben können.<br><br>Apache mod rewrite lässt sich in der .htaccess durch "
"das Setzen der RewriteEngine-Direktive aktivieren/deaktivieren.<br>Wird das "
"mod rewrite Modul deaktiviert, können die in der .htaccess definierten "
"Regeln weiterhin bleiben, sie werden <br>dann nicht verarbeitet."
#: includes/include.mod_rewrite_content.php:199
msgid "Example"
msgstr "Beispiel"
#: includes/include.mod_rewrite_content.php:201
msgid ""
"# enable apache mod rewrite module\n"
"RewriteEngine on\n"
"\n"
"# disable apache mod rewrite module\n"
"RewriteEngine off"
msgstr ""
"# aktivieren des apache mod rewrite moduls\n"
"RewriteEngine on\n"
"\n"
"# deaktivieren des apache mod rewrite moduls\n"
"RewriteEngine off"
#: includes/include.mod_rewrite_content.php:203
msgid "Path to .htaccess from DocumentRoot"
msgstr "Pfad zur .htaccess Datei vom DocumentRoot ausgehend"
#: includes/include.mod_rewrite_content.php:204
msgid ""
"Type '/' if the .htaccess file lies inside the wwwroot (DocumentRoot) folder."
"<br>Type the path to the subfolder fromm wwwroot, if CONTENIDO is installed "
"in a subfolder within the wwwroot<br>(e. g. http://domain/mycontenido -&gt; "
"path = '/mycontenido/')"
msgstr ""
"Liegt die .htaccess im wwwroot (DocumentRoot), ist '/' anzugeben, ist "
"CONTENIDO in einem <br>Unterverzeichnis von wwwroot installiert, ist der "
"Pfad vom wwwroot aus anzugeben <br>(z. B. http://domain/mycontenido -&gt; "
"Pfad = '/mycontenido/')."
#: includes/include.mod_rewrite_content.php:206
msgid "Check path to .htaccess"
msgstr "Pfad zur .htaccess Datei überprüfen"
#: includes/include.mod_rewrite_content.php:207
msgid ""
"The path will be checked, if this option is enabled.<br>But this could "
"result in an error in some cases, even if the specified path is valid "
"and<br>clients DocumentRoot differs from CONTENIDO backend DocumentRoot."
msgstr ""
"Ist diese Option aktiv, wird der eingegebene Pfad überprüft. Das kann unter "
"<br>Umständen einen Fehler verursachen, obwohl der Pfad zwar richtig ist, "
"aber der Mandant <br>einen anderen DocumentRoot als das CONTENIDO Backend "
"hat."
#: includes/include.mod_rewrite_content.php:209
msgid "Should the name of root category be displayed in the URL?"
msgstr "Soll der Name des Hauptbaumes mit in der URL erscheinen?"
#: includes/include.mod_rewrite_content.php:210
msgid "Start from root category"
msgstr "Start vom Hauptbaum aus"
#: includes/include.mod_rewrite_content.php:211
msgid ""
"If enabled, the name of the root category (e. g. 'Mainnavigation' in a "
"CONTENIDO default installation), will be preceded to the URL."
msgstr ""
"Ist diese Option gewählt, wird der Name des Hauptbaumes (Kategoriebaum, "
"<br>z. B. 'Hauptnavigation' bei CONTENIDO Standardinstallation) der URL "
"vorangestellt."
#: includes/include.mod_rewrite_content.php:213
msgid "Are several clients maintained in one directory?"
msgstr "Werden mehrere Mandanten in einem Verzeichnis gepflegt?"
#: includes/include.mod_rewrite_content.php:214
msgid "Prepend client to the URL"
msgstr "Mandant an die URL voranstellen"
#: includes/include.mod_rewrite_content.php:215
msgid "Use client name instead of the id"
msgstr "Name des Mandanten anstatt die Id verwenden"
#: includes/include.mod_rewrite_content.php:217
msgid ""
"Should the language appear in the URL (required for multi language websites)?"
msgstr ""
"Soll die Sprache mit in der URL erscheinen (für Mehrsprachsysteme "
"unabdingbar)?"
#: includes/include.mod_rewrite_content.php:218
msgid "Prepend language to the URL"
msgstr "Sprache an die URL voranstellen"
#: includes/include.mod_rewrite_content.php:219
msgid "Use language name instead of the id"
msgstr "Name der Sprache anstatt die Id verwenden"
#: includes/include.mod_rewrite_content.php:221
msgid ""
"Configure your own separators with following 4 settings<br>to control "
"generated URLs to your own taste"
msgstr ""
"Mit den nächsten 4 Einstellungen können die Trennzeichen in "
"den<br>generierten URLs nach den eigenen Wünschen gesetzt werden."
#: includes/include.mod_rewrite_content.php:222
msgid ""
"www.domain.com/category1-category2.articlename.html\n"
"www.domain.com/category1/category2-articlename.html\n"
"www.domain.com/category.name1~category2~articlename.html\n"
"www.domain.com/category_name1-category2-articlename.foo"
msgstr ""
"www.domain.de/kategorie1-kategorie2.artikelname.html\n"
"www.domain.de/kategorie1/kategorie2-artikelname.html\n"
"www.domain.de/kategorie.name1~kategorie2~artikelname.html\n"
"www.domain.de/kategorie_name1-kategorie2-artikelname.foo"
#: includes/include.mod_rewrite_content.php:223
msgid "Category separator has to be different from category-word separator"
msgstr ""
"Kategorie-Separator und Kategoriewort-Separator müssen unterschiedlich sein"
#: includes/include.mod_rewrite_content.php:224
msgid ""
"# Example: Category separator (/) and category-word separator (_)\n"
"category_one/category_two/articlename.html"
msgstr ""
"# Beispiel: Kategorie-Separator (/) und Kategoriewort-Separator (_)\n"
"kategorie_eins/kategorie_zwei/artikelname.html"
#: includes/include.mod_rewrite_content.php:225
msgid "Category separator has to be different from article-word separator"
msgstr ""
"Kategorie-Separator und Artikelwort-Separator müssen unterschiedlich sein"
#: includes/include.mod_rewrite_content.php:226
msgid ""
"# Example: Category separator (/) and article-word separator (-)\n"
"category_one/category_two/article-description.html"
msgstr ""
"# Beispiel: Kategorie-Separator (/) und Artikelwort-Separator (-)\n"
"kategorie_eins/kategorie_zwei/artikel-bezeichnung.html"
#: includes/include.mod_rewrite_content.php:227
msgid ""
"Category-article separator has to be different from article-word separator"
msgstr ""
"Kategorie-Artikel-Separator und Artikelwort-Separator müssen unterschiedlich "
"sein"
#: includes/include.mod_rewrite_content.php:228
msgid ""
"# Example: Category-article separator (/) and article-word separator (-)\n"
"category_one/category_two/article-description.html"
msgstr ""
"# Beispiel: Kategorie-Artikel-Separator (/) und Artikelwort-Separator (-)\n"
"kategorie_eins/kategorie_zwei/artikel-bezeichnung.html"
#: includes/include.mod_rewrite_content.php:230
msgid "Category separator (delemiter between single categories)"
msgstr "Kategorie-Separator (Trenner zwischen einzelnen Kategorien)"
#: includes/include.mod_rewrite_content.php:231
#: includes/include.mod_rewrite_content.php:232
#, php-format
msgid "(possible values: %s)"
msgstr "(mögliche Werte: %s)"
#: includes/include.mod_rewrite_content.php:233
msgid "Category-word separator (delemiter between category words)"
msgstr "Kategoriewort-Separator (Trenner zwischen einzelnen Kategoriewörtern)"
#: includes/include.mod_rewrite_content.php:234
msgid ""
"Category-article separator (delemiter between category-block and article)"
msgstr ""
"Kategorie-Artikel-Separator (Trenner zwischen Kategorieabschnitt und "
"Artikelname)"
#: includes/include.mod_rewrite_content.php:235
msgid "Article-word separator (delemiter between article words)"
msgstr "Artikelwort-Separator (Trenner zwischen einzelnen Artikelwörtern)"
#: includes/include.mod_rewrite_content.php:237
msgid "Append article name to URLs"
msgstr "Artikelname an URLs anhängen"
#: includes/include.mod_rewrite_content.php:238
msgid "Append article name always to URLs (even at URLs to categories)"
msgstr "Artikelname immer an die URLs anhängen (auch bei URLs zu Kategorien)"
#: includes/include.mod_rewrite_content.php:239
msgid "Default article name without extension"
msgstr "Standard-Artikelname ohne Dateiendung"
#: includes/include.mod_rewrite_content.php:240
msgid ""
"e. g. 'index' for index.ext<br>In case of selected 'Append article name "
"always to URLs' option and a empty field,<br>the name of the start article "
"will be used"
msgstr ""
"z. B. 'index' für index.ext.<br>Wenn die Option 'Artikelname immer an die "
"URLs anhängen' aktiviert und das Feld leer ist,<br>wird der Name des "
"Startartikels verwendet."
#: includes/include.mod_rewrite_content.php:242
msgid "File extension at the end of the URL"
msgstr "Dateiendung am Ende der URL"
#: includes/include.mod_rewrite_content.php:243
msgid ""
"Specification of file extension with a preceded dot<br>e.g. '.html' for "
"http://host/foo/bar.html"
msgstr ""
"Angabe der Dateiendung mit einem vorangestellten Punkt,<br>z. B. '.html' für "
"http://host/foo/bar.html"
#: includes/include.mod_rewrite_content.php:244
msgid ""
"It's strongly recommended to specify a extension here,<br>if the option "
"'Append article name always to URLs' was not selected.<br><br>Otherwise URLs "
"to categories and articles would have the same format<br>which may result in "
"unresolvable categories/articles in some cases."
msgstr ""
"Falls die Option 'Artikelname immer an die URLs anhängen' nicht gewählt "
"wurde, <br>ist es zwingend notwending, dass hier eine Dateiendung angegeben "
"wird.<br><br>Sonst haben URLs zu Kategorien und zu Seiten das gleiche "
"Format, und die korrekte<br>Auflösung der Kategorie und/oder des Artikels "
"kann nicht gewährleistet werden."
#: includes/include.mod_rewrite_content.php:245
msgid ""
"It's necessary to specify a file extension at the moment, due do existing "
"issues, which are not solved until yet. An not defined extension may result "
"in invalid article detection in some cases."
msgstr ""
"Aufgrund diverser Probleme, die noch nicht in dieser Version gel&ouml;st "
"wurden konnten, sollte unbedingt eine Endung angegeben werden. Ohne eine "
"angegebene Endung kann es zur fehlerhaften Erkennung der Artikel kommen."
#: includes/include.mod_rewrite_content.php:247
msgid "Should the URLs be written in lower case?"
msgstr "Sollen die URLs klein geschrieben werden?"
#: includes/include.mod_rewrite_content.php:248
msgid "URLs in lower case"
msgstr "URLs in Kleinbuchstaben"
#: includes/include.mod_rewrite_content.php:250
msgid "Duplicated content"
msgstr "Duplicated Content"
#: includes/include.mod_rewrite_content.php:251
msgid "Prevent duplicated content"
msgstr "Duplicated Content verhindern"
#: includes/include.mod_rewrite_content.php:253
msgid ""
"Depending on configuration, pages could be found thru different URLs."
"<br>Enabling of this option prevents this. Examples for duplicated content"
msgstr ""
"Seiten werden je nach Konfiguration unter verschiedenen URLs gefunden."
"<br>Das Aktivieren dieser Option unterbindet dies. Beispiele für duplicated "
"Content"
#: includes/include.mod_rewrite_content.php:254
msgid ""
"Name of the root category in the URL: Feasible is /maincategory/subcategory/ "
"and /subcategory/\n"
"Language in the URL: Feasible is /german/category/ and /1/category/\n"
"Client in the URL: Feasible is /client/category/ und /1/category/"
msgstr ""
"Name des Hauptbaumes in der URL: Möglich /hauptkategorie/unterkategorie/ "
"und /unterkategorie/\n"
"Sprache in der URL: Möglich /deutsch/kategorie/ und /1/kategorie/\n"
"Mandant in der URL: Möglich /mandant/kategorie/ und /1/kategorie/"
#: includes/include.mod_rewrite_content.php:257
msgid "Percentage for similar category paths in URLs"
msgstr "Prozentsatz für ähnliche Kategorie-Pfade in URLs"
#: includes/include.mod_rewrite_content.php:258
msgid ""
"This setting refers only to the category path of a URL. If AMR is "
"configured<br>to prepend e. g. the root category, language and/or client to "
"the URL,<br>the specified percentage will not applied to those parts of the "
"URL.<br>An incoming URL will be cleaned from those values and the remaining "
"path (urlpath of the category)<br>will be checked against similarities."
msgstr ""
"Diese Einstellung bezieht sich nur auf den Kategorieteil einer URL. Ist AMR "
"so konfiguriert, dass z. B. die<br>Hauptnavigation und/oder Sprache sowie "
"der Name des Mandanten an die URL vorangestellt wird, so wird der hier "
"<br>definierte Prozentsatz nicht auf diese Werte der URL angewendet.<br>Eine "
"ankommende URL wird von solchen Präfixen entfernt, der übrig gebliebene Pfad "
"(Urlpfad der Kategorie)<br>wird auf die Ähnlichkleit hin geprüft."
#: includes/include.mod_rewrite_content.php:259
msgid ""
"100 = exact match with no tolerance\n"
"85 = paths with little errors will match to similar ones\n"
"0 = matching will work even for total wrong paths"
msgstr ""
"100 = exakte überinstimmung, keine fehlertoleranz\n"
"85 = pfade mit kleineren fehlern ergeben auch treffern\n"
"0 = vollständig fehlerhafte pfade ergeben dennoch einen treffer"
#: includes/include.mod_rewrite_content.php:261
msgid "Redirect in case of invalid articles"
msgstr "Weiterleitung bei ungültigen Artikeln"
#: includes/include.mod_rewrite_content.php:262
msgid "Redirect to error page in case of invaid articles"
msgstr "Bei ungültigen Artikeln zur Fehlerseite weiterleiten"
#: includes/include.mod_rewrite_content.php:263
msgid "The start page will be displayed if this option is not enabled"
msgstr "Ist die Option nicht aktiv, wird die Startseite angezeigt"
#: includes/include.mod_rewrite_content.php:265
msgid "Moment of URL generation"
msgstr "Zeitpunkt zum Generieren der URLs"
#: includes/include.mod_rewrite_content.php:266
msgid "a.) During the output of HTML code of the page"
msgstr "a.) Bei der Ausgabe des HTML Codes der Seite"
#: includes/include.mod_rewrite_content.php:267
msgid ""
"Clean-URLs will be generated during page output. Modules/Plugins are able to "
"generate URLs to frontend<br>as usual as in previous CONTENIDO versions "
"using a format like 'front_content.php?idcat=1&amp;idart=2'.<br>The URLs "
"will be replaced by the plugin to Clean-URLs before sending the HTML output."
msgstr ""
"Clean-URLs werden bei der Ausgabe der Seite generiert. Module/Plugins können "
"URLs zum Frontend, <br>wie in früheren Versionen von CONTENIDO üblich, nach "
"dem Muster 'front_content.php?idcat=1&amp;idart=2' <br>ausgeben. Die URLs "
"werden vom Plugin vor der Ausgabe des HTML-Outputs Clean-URLs ersetzt."
#: includes/include.mod_rewrite_content.php:268
msgid "Differences to variant b.)"
msgstr "Unterschiede zur Variante b.)"
#: includes/include.mod_rewrite_content.php:269
msgid ""
"Still compatible to old modules/plugins, since no changes in codes are "
"required\n"
"All occurring URLs in HTML code, even those set by wysiwyg, will be switched "
"to Clean-URLs\n"
"All URLs will usually be collected and converted to Clean-URLs at once."
"<br>Doing it this way reduces the amount of executed database significantly."
msgstr ""
"Weiterhin Kompatibel zu älteren Modulen/Plugins, da keine Änderungen am Code "
"nötig sind\n"
"Sämtliche im HTML-Code vorkommende URLs, auch über wysiwyg gesetzte URLs, "
"<br>werden auf Clean-URLs umgestellt\n"
"Alle umzuschreibenden URLs werden in der Regel \"gesammelt\" und auf eimmal "
"umgeschreiben, <br>dadurch wird die Anzahl der DB-Abfragen sehr stark "
"minimiert"
#: includes/include.mod_rewrite_content.php:272
msgid "b.) In modules or plugins"
msgstr "b.) In Modulen oder Plugins"
#: includes/include.mod_rewrite_content.php:273
msgid ""
"By using this option, all Clean-URLs will be generated directly in module or "
"plugins.<br>This means, all areas in modules/plugins, who generate internal "
"URLs to categories/articles, have to be adapted manually.<br>All Clean-URLs "
"have to be generated by using following function:"
msgstr ""
"Bei dieser Option werden die Clean-URLs direkt in Modulen/Plugins generiert. "
"Das bedeutet,<br>dass alle internen URLs auf Kategorien/Artikel in den "
"Modulausgaben ggf. manuell angepasst werden müssen. <br>Clean-URLs müssen "
"dann stets mit folgender Funktion erstellt werden:"
#: includes/include.mod_rewrite_content.php:274
msgid ""
"# structure of a normal url\n"
"$url = 'front_content.php?idart=123&amp;lang=2&amp;client=1';\n"
"\n"
"# creation of a url by using the CONTENIDOs Url-Builder (since 4.8.9),\n"
"# wich expects the parameter as a assoziative array\n"
"$params = array('idart'=>123, 'lang'=>2, 'client'=>1);\n"
"$newUrl = Contenido_Url::getInstance()->build($params);"
msgstr ""
"# aufbau einer normalen url\n"
"$url = 'front_content.php?idart=123&amp;lang=2&amp;client=1';\n"
"\n"
"# erstellen der neuen Url über CONTENIDOs Url-Builder (seit 4.8.9),\n"
"# der die Parameter als assoziatives array erwartet\n"
"$params = array('idart'=>123, 'lang'=>2, 'client'=>1);\n"
"$newUrl = Contenido_Url::getInstance()->build($params);"
#: includes/include.mod_rewrite_content.php:275
msgid "Differences to variant a.)"
msgstr "Unterschiede zur Variante a.)"
#: includes/include.mod_rewrite_content.php:276
msgid ""
"The default way to generate URLs to fronend pages\n"
"Each URL in modules/plugins has to be generated by UriBuilder\n"
"Each generated Clean-Url requires a database query"
msgstr ""
"Der Standardweg um URLs zu Frontendseiten zu generieren\n"
"Jede URL in Modulen/Plugins ist vom UrlBuilder zu erstellen\n"
"Für jede umzuschreibende URL ist eine Datenbankabfrage nötig"
#: includes/include.mod_rewrite_content.php:279
msgid "Routing"
msgstr "Routing"
#: includes/include.mod_rewrite_content.php:280
msgid "Routing definitions for incoming URLs"
msgstr "Routing Definitionen für eingehende URLs"
#: includes/include.mod_rewrite_content.php:281
msgid "Type one routing definition per line as follows:"
msgstr "Pro Zeile eine Routing Definition wie folgt eingeben:"
#: includes/include.mod_rewrite_content.php:282
msgid ""
"# {incoming_url}>>>{new_url}\n"
"/incoming_url/name.html>>>new_url/new_name.html\n"
"\n"
"# route a specific incoming url to a new page\n"
"/campaign/20_percent_on_everything_except_animal_food.html>>>front_content."
"php?idcat=23\n"
"\n"
"# route request to wwwroot to a specific page\n"
"/>>>front_content.php?idart=16"
msgstr ""
"# {eingehende_url}>>>{neue_url}\n"
"/eingehende_url/name.html>>>neue_url/neuer_name.html\n"
"\n"
"# bestimmte eingehende url zur einer seite weiterleiten\n"
"/aktionen/20_prozent_auf_alles_ausser_tiernahrung.html>>>front_content.php?"
"idcat=23\n"
"\n"
"# request zum wwwroot auf eine bestimmte seite routen\n"
"/>>>front_content.php?idart=16"
#: includes/include.mod_rewrite_content.php:283
msgid ""
"The routing does not sends a HTTP header redirection to the destination URL, "
"the redirection will happen internally by<br>replacing the detected incoming "
"URL against the new destination URL (overwriting of article- categoryid)\n"
"Incoming URLs can point to non existing resources (category/article), but "
"the desttination URLs should point<br>to valid CONTENIDO articles/"
"categories\n"
"Destination URLs should point to real URLs to categories/articles,<br>e. g."
"front_content.php?idcat=23 or front_content.php?idart=34\n"
"The language id should attached to the URL in multi language sites<br>e. g. "
"front_content.php?idcat=23&amp;lang=1\n"
"The client id should attached to the URL in multi client sites sharing the "
"same folder<br>e. g. front_content.php?idcat=23&amp;client=2\n"
"The destination URL should not start with '/' or './' (wrong: /front_content."
"php, correct: front_content.php)"
msgstr ""
"Das Routing schickt keinen HTTP Header mit einer Weiterleitung zur Ziel-URL, "
"die Umleitung findet intern<br>durch das Ersetzen der erkannten "
"Eingangsseite gegen die neue Zielseite statt (Überschreiben der Artikel-/"
"Kategorieid)\n"
"Eingehende URLs können auch nicht vorhandene Ressourcen (Kategorie, Artikel) "
"sein, hinter der Ziel URL muss eine <br>gültige CONTENIDO-Seite (Kategorie/"
"Artikel) liegen\n"
"Als Ziel URL sollte eine reale URL zur Kategorie/Seite angegeben werden, "
"<br>z. B. front_content.php?idcat=23 oder front_content.php?idart=34.\n"
"Bei mehrsprachigen Auftritten sollte die Id der Sprache angehängt werden, "
"<br>z. B. front_content.php?idcat=23&amp;lang=1\n"
"Bei mehreren Mandanten im gleichen Verzeichnis sollte die Id des Mandanten "
"angehängt werden,<br>z. B. front_content.php?idcat=23&amp;client=2\n"
"Die Zielurl sollte nicht mit '/' oder './' beginnen (falsch: /front_content."
"php, richtig: front_content.php)"
#: includes/include.mod_rewrite_content.php:286
#: includes/include.mod_rewrite_contentexpert.php:90
msgid "Discard changes"
msgstr "Änderungen verwerfen"
#: includes/include.mod_rewrite_content.php:287
#: includes/include.mod_rewrite_contentexpert.php:91
msgid "Save changes"
msgstr "Änderungen speichern"
#: includes/include.mod_rewrite_contenttest.php:55
msgid ""
"Define options to genereate the URLs by using the form below and run the "
"test."
msgstr ""
"Optionen zum Generieren der URLs im folgenden Formular setzen und den Test "
"starten."
#: includes/include.mod_rewrite_contenttest.php:56
msgid "Parameter to use"
msgstr "Zu verwendende Parameter"
#: includes/include.mod_rewrite_contenttest.php:57
msgid "Number of URLs to generate"
msgstr "Anzahl der zu generierenden URLs"
#: includes/include.mod_rewrite_contenttest.php:58
msgid "Run test"
msgstr "Test starten"
#: includes/include.mod_rewrite_contenttest.php:60
msgid ""
"{pref}<strong>{name}</strong><br>{pref}Builder in: {url_in}<br>{pref}"
"Builder out: {url_out}<br>{pref}<span style='color:{color}'>Resolved URL: "
"{url_res}</span><br>{pref}Resolver err: {err}<br>{pref}Resolved data: {data}"
msgstr ""
"{pref}<strong>{name}</strong><br>{pref}Builder Eingang: {url_in}<br>{pref}"
"Builder Ausgang: {url_out}<br>{pref}<span style='color:{color}'>Aufgelöste "
"URL: {url_res}</span><br>{pref}Aufgelöse-Fehler: {err}<br>{pref}"
"Aufgelöste Daten: {data}"
#: includes/include.mod_rewrite_contenttest.php:62
msgid ""
"Duration of test run: {time} seconds.<br>Number of processed URLs: {num_urls}"
"<br><span style='color:green'>Successful resolved: {num_success}</"
"span><br><span style='color:red'>Errors during resolving: {num_fail}</span></"
"strong>"
msgstr ""
"Dauer des Testdurchlaufs: {time} Sekunden.<br>Anzahl verarbeiteter URLs: "
"{num_urls}<br><span style='color:green'>Erfolgreich aufgelöst: {num_success}"
"</span><br><span style='color:red'>Fehler beim Auflösen: {num_fail}</span></"
"strong>"
#: includes/include.mod_rewrite_contentexpert.php:61
msgid "Plugin functions"
msgstr "Plugin Funktionen"
#: includes/include.mod_rewrite_contentexpert.php:63
msgid "Copy/Download .htaccess template"
msgstr ".htaccess Vorlage kopieren/downloaden"
#: includes/include.mod_rewrite_contentexpert.php:64
msgid "Select .htaccess template"
msgstr ".htaccess Vorlage auswählen"
#: includes/include.mod_rewrite_contentexpert.php:65
msgid "Restrictive .htaccess"
msgstr "Restriktive .htaccess"
#: includes/include.mod_rewrite_contentexpert.php:66
msgid "Simple .htaccess"
msgstr "Einfache .htaccess"
#: includes/include.mod_rewrite_contentexpert.php:67
msgid ""
"Contains rules with restrictive settings.<br>All requests pointing to "
"extension avi, css, doc, flv, gif, gzip, ico, jpeg, jpg, js, mov, <br>mp3, "
"pdf, png, ppt, rar, txt, wav, wmv, xml, zip, will be excluded vom rewriting."
"<br>Remaining requests will be rewritten to front_content.php,<br>except "
"requests to 'contenido/', 'setup/', 'cms/upload', 'cms/front_content.php', "
"etc.<br>Each resource, which has to be excluded from rewriting must be "
"specified explicitly."
msgstr ""
"Enthält Regeln mit restriktiveren Einstellungen.<br>Alle Anfragen, die auf "
"die Dateienendung avi, css, doc, flv, gif, gzip, ico, jpeg, jpg, js, mov, "
"<br>mp3, pdf, png, ppt, rar, txt, wav, wmv, xml, zip gehen, werden vom "
"Umschreiben ausgeschlossen.<br>Alle anderen Anfragen, werden an "
"front_content.php umschrieben.<br>Ausgeschlossen davon sind 'contenido/', "
"'setup/', 'cms/upload', 'cms/front_content.php', usw.<br>Jede neue "
"Ressource, die vom Umschreiben ausgeschlossen werden soll, muss explizit "
"definiert werden."
#: includes/include.mod_rewrite_contentexpert.php:69
msgid ""
"Contains a simple collection of rules. Each requests pointing to valid "
"symlinks, folders or<br>files, will be excluded from rewriting. Remaining "
"requests will be rewritten to front_content.php"
msgstr ""
"Enthält eine einfachere Sammlung an Regeln. Alle Anfragen, die auf gültige "
"Symlinks, Verzeichnisse oder<br>Dateien gehen, werden vom Umschreiben "
"ausgeschlossen. Restliche Anfragen werden an front_content."
"php<br>umschrieben."
#: includes/include.mod_rewrite_contentexpert.php:71
msgid "and copy to"
msgstr "und kopieren in"
#: includes/include.mod_rewrite_contentexpert.php:72
msgid "CONTENIDO installation directory"
msgstr "das CONTENIDO Installationsverzeichnis"
#: includes/include.mod_rewrite_contentexpert.php:73
msgid ""
"Copy the selected .htaccess template into CONTENIDO installation "
"directory<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{CONTENIDO_FULL_PATH}.<br><br>This "
"is the recommended option for a CONTENIDO installation with one or more "
"clients<br>who are running on the same domain."
msgstr ""
"Die gewählte .htaccess Vorlage in das CONTENIDO "
"Installationsverzeichnis<br>\n"
"<br>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;{CONTENIDO_FULL_PATH}<br>\n"
"<br>\n"
"kopieren.<br>\n"
"Das ist die empfohlene Option für eine CONTENIDO-Installation mit einem "
"Mandanten oder<br>\n"
"mehreren Mandanten, die alle unter der gleichen Domain laufen."
#: includes/include.mod_rewrite_contentexpert.php:75
msgid "client directory"
msgstr "das Mandantenverzeichnis"
#: includes/include.mod_rewrite_contentexpert.php:76
msgid ""
"Copy the selected .htaccess template into client's directory<br><br>&nbsp;"
"&nbsp;&nbsp;&nbsp;{CLIENT_FULL_PATH}.<br><br>This is the recommended option "
"for a multiple client system<br>where each client has it's own domain/"
"subdomain"
msgstr ""
"Die gewählte .htaccess Vorlage in das Mandantenerzeichnis<br>\n"
"<br>\n"
"&nbsp;&nbsp;&nbsp;&nbsp;{CLIENT_FULL_PATH}<br>\n"
"<br>\n"
"kopieren.<br>\n"
"Diese Option ist z. B. bei einem Mehrmandantensystem empfohlen,<br>\n"
"wenn jeder Mandant unter einer eigenen Domain/Subdomain läuft."
#: includes/include.mod_rewrite_contentexpert.php:78
msgid "or"
msgstr "oder"
#: includes/include.mod_rewrite_contentexpert.php:79
msgid "Download"
msgstr "Downloaden"
#: includes/include.mod_rewrite_contentexpert.php:80
msgid ""
"Download selected .htaccess template to copy it to the destination "
"folder<br>or to take over the settings manually."
msgstr ""
"Die gewählte .htaccess Vorlage downloaden um z. B. die Datei manuell<br>\n"
"in das Verzeichnis zu kopieren oder Einstellungen zu übernehmen."
#: includes/include.mod_rewrite_contentexpert.php:82
msgid "Reset category-/ and article aliases"
msgstr "Kategorie-/ und Artikel-Aliase zurücksetzen"
#: includes/include.mod_rewrite_contentexpert.php:83
msgid "Reset only empty aliases"
msgstr "Nur leere Aliase zurücksetzen"
#: includes/include.mod_rewrite_contentexpert.php:84
msgid ""
"Only empty aliases will be reset, existing aliases, e. g. manually set "
"aliases, will not be changed."
msgstr ""
"Nur leere Kategorie-/Artikelaliase initial setzen<br>Vorhandene Aliase, z.B. "
"vorher manuell gesetze Aliase werden nicht geändert."
#: includes/include.mod_rewrite_contentexpert.php:85
msgid "Reset all aliases"
msgstr "Alle Aliase zurücksetzen"
#: includes/include.mod_rewrite_contentexpert.php:86
msgid ""
"Reset all category-/article aliases. Existing aliases will be overwritten."
msgstr ""
"Alle Kategorie-/Artikelaliase neu setzen.<br>Vorhandene Aliase werden "
"überschrieben."
#: includes/include.mod_rewrite_contentexpert.php:88
msgid ""
"This process could require some time depending on amount of categories/"
"articles.<br>The aliases will not contain the configured plugin separators, "
"but the CONTENIDO default separators '/' und '-', e. g. '/category-word/"
"article-word'.<br>Execution of this function ma be helpful to prepare all or "
"empty aliases for the usage by the plugin."
msgstr ""
"Dieser Prozess kann je nach Anzahl der Kategorien/Artikel etwas Zeit in "
"Anspruch nehmen.<br>\n"
"Die Aliase erhalten nicht die oben konfigurierten Separatoren, sondern die "
"CONTENIDO-Standardseparatoren '/' und '-', z. B. '/category-word/article-"
"word'.<br>\n"
"Das Ausführen dieser Funktion kann Hilfreich sein, um sämtliche oder nur "
"leere Aliase nachträglich auf die Verwendung mit dem Plugin anzupassen."
#: includes/config.plugin.php:71
msgid "Advanced Mod Rewrite"
msgstr "Advanced Mod Rewrite"
#: includes/config.plugin.php:72
msgid "Advanced Mod Rewrite functions"
msgstr "Advanced Mod Rewrite Funktionen"
#: includes/config.plugin.php:73
msgid "Advanced Mod Rewrite test"
msgstr "Advanced Mod Rewrite Test"
#: classes/controller/class.modrewrite_controller_abstract.php:107
msgid "More informations"
msgstr "Weitere Informationen"
#: classes/controller/class.modrewrite_content_controller.php:65
msgid ""
"The root directory has a invalid format, alowed are the chars [a-zA-Z0-9\\-_"
"\\/\\.]"
msgstr ""
"Das Rootverzeichnis hat ein ungültiges Format, erlaubt sind die Zeichen [a-"
"zA-Z0-9\\-_\\/\\.]"
#: classes/controller/class.modrewrite_content_controller.php:72
#, php-format
msgid "The specified directory '%s' does not exists"
msgstr "Das angegebene Verzeichnis '%s' existiert nicht"
#: classes/controller/class.modrewrite_content_controller.php:79
#, php-format
msgid ""
"The specified directory '%s' does not exists in DOCUMENT_ROOT '%s'. This "
"could happen, if clients DOCUMENT_ROOT differs from CONTENIDO backends "
"DOCUMENT_ROOT. However, the setting will be taken over because of disabled "
"check."
msgstr ""
"Das angegebene Verzeichnis '%s' existiert nicht im DOCUMENT_ROOT '%s'. Das "
"kann vorkommen, wenn das DOCUMENT_ROOT des Mandanten vom CONTENIDO Backend "
"DOCUMENT_ROOT abweicht. Die Einstellung wird dennoch übernommen, da die "
"Überprüfung abgeschaltet wurde."
#: classes/controller/class.modrewrite_content_controller.php:182
#, php-format
msgid "Please specify separator (%s) for category"
msgstr "Bitte Trenner (%s) für Kategoriewörter angeben"
#: classes/controller/class.modrewrite_content_controller.php:187
#, php-format
msgid "Invalid separator for category, allowed one of following characters: %s"
msgstr "Trenner für Kategorie ist ungültig, erlaubt ist eines der Zeichen: %s"
#: classes/controller/class.modrewrite_content_controller.php:194
#, php-format
msgid "Please specify separator (%s) for category words"
msgstr "Bitte Trenner (%s) für Kategorie angeben"
#: classes/controller/class.modrewrite_content_controller.php:199
#, php-format
msgid ""
"Invalid separator for category words, allowed one of following characters: %s"
msgstr "Trenner für Kategorie ist ungültig, erlaubt ist eines der Zeichen: %s"
#: classes/controller/class.modrewrite_content_controller.php:206
#, php-format
msgid "Please specify separator (%s) for article"
msgstr "Bitte Trenner (%s) für Kategoriewörter angeben"
#: classes/controller/class.modrewrite_content_controller.php:211
#, php-format
msgid ""
"Invalid separator for article, allowed is one of following characters: %s"
msgstr "Trenner für Kategorie ist ungültig, erlaubt ist eines der Zeichen: %s"
#: classes/controller/class.modrewrite_content_controller.php:218
#, php-format
msgid "Please specify separator (%s) for article words"
msgstr "Bitte Trenner (%s) für Kategorie angeben"
#: classes/controller/class.modrewrite_content_controller.php:223
#, php-format
msgid ""
"Invalid separator for article words, allowed is one of following characters: "
"%s"
msgstr "Trenner für Kategorie ist ungültig, erlaubt ist eines der Zeichen: %s"
#: classes/controller/class.modrewrite_content_controller.php:230
msgid "Separator for category and category words must not be identical"
msgstr "Trenner für Kategorie und Kategoriewörter dürfen nicht identisch sein"
#: classes/controller/class.modrewrite_content_controller.php:235
msgid "Separator for category and article words must not be identical"
msgstr "Separator for category and article words must not be identical"
#: classes/controller/class.modrewrite_content_controller.php:240
msgid "Separator for category-article and article words must not be identical"
msgstr ""
"Trenner für Kategorie-Artikel und Artikelwörter dürfen nicht identisch sein"
#: classes/controller/class.modrewrite_content_controller.php:257
msgid ""
"The file extension has a invalid format, allowed are the chars \\.([a-zA-"
"Z0-9\\-_\\/])"
msgstr ""
"Das Rootverzeichnis hat ein ungültiges Format, erlaubt sind die Zeichen [a-"
"zA-Z0-9\\-_\\/\\.]"
#: classes/controller/class.modrewrite_content_controller.php:271
msgid "Value has to be numeric."
msgstr "Wert muss numerisch sein."
#: classes/controller/class.modrewrite_content_controller.php:275
msgid "Value has to be between 0 an 100."
msgstr "Wert muss zwischen 0 und 100 sein."
#: classes/controller/class.modrewrite_content_controller.php:292
msgid ""
"The article name has a invalid format, allowed are the chars /^[a-zA-Z0-9\\-_"
"\\/\\.]*$/"
msgstr ""
"Das Rootverzeichnis hat ein ungültiges Format, erlaubt sind die Zeichen [a-"
"zA-Z0-9\\-_\\/\\.]"
#: classes/controller/class.modrewrite_content_controller.php:355
msgid "Please check your input"
msgstr "Bitte überprüfen Sie ihre Eingaben"
#: classes/controller/class.modrewrite_content_controller.php:365
msgid "Configuration has <b>not</b> been saved, because of enabled debugging"
msgstr "Konfiguration wurde <b>nicht</b> gespeichert, weil debugging aktiv ist"
#: classes/controller/class.modrewrite_content_controller.php:373
msgid "Configuration has been saved"
msgstr "Die Konfiguration wurde gespeichert"
#: classes/controller/class.modrewrite_content_controller.php:379
#, php-format
msgid "Configuration could not saved. Please check write permissions for %s "
msgstr ""
"Konfiguration konnte nicht gespeichert werden. Überprüfen Sie bitte die "
"Schreibrechte für %s"
#: classes/controller/class.modrewrite_content_controller.php:412
msgid ""
"Your Contenido installation runs with the setting 'is_start_compatible'. "
"This plugin will not work properly in this mode.<br />Please check following "
"topic in Contenido forum to change this:<br /><br /><a href='http://forum."
"contenido.org/viewtopic.php?t=32530' class='blue' "
"target='_blank'>is_start_compatible auf neue Version umstellen</a>"
msgstr ""
"Ihre Contenido-Installation läuft mit der Einstellung 'is_start_compatible'. "
"Dieses Plugin wird mit dieser Einstellung nicht wie gewünscht funktionieren."
"<br />Bitte überprüfen Sie folngenden Beitrag im Contenido Forum, um dies zu "
"ändern:<br /><br /><a href='http://forum.contenido.org/viewtopic.php?"
"t=32530' class='blue' target='_blank'>is_start_compatible auf neue Version "
"umstellen</a>"
#: classes/controller/class.modrewrite_content_controller.php:420
#, php-format
msgid ""
"It seems as if some categories don't have a set 'urlpath' entry in the "
"database. Please reset empty aliases in %sFunctions%s area."
msgstr ""
"Es scheint so zu sein, als ob zu einigen Kategorien die Datenbank-Einträge "
"für 'urlpath' fehlen. Bitte setzen Sie leere Aliase unter %sFunktionen%s "
"zurück."
#~ msgid "No Client selected"
#~ msgstr "Kein Mandant ausgewählt"

744
locale/mod_rewrite.pot Normale Datei
Datei anzeigen

@ -0,0 +1,744 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-15 18:37+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: includes/include.mod_rewrite_content.php:177
msgid "Version"
msgstr ""
#: includes/include.mod_rewrite_content.php:178
msgid "Author"
msgstr ""
#: includes/include.mod_rewrite_content.php:179
msgid "E-Mail to author"
msgstr ""
#: includes/include.mod_rewrite_content.php:180
msgid "Plugin page"
msgstr ""
#: includes/include.mod_rewrite_content.php:181
msgid "Visit plugin page"
msgstr ""
#: includes/include.mod_rewrite_content.php:182
msgid "opens page in new window"
msgstr ""
#: includes/include.mod_rewrite_content.php:183
msgid "CONTENIDO forum"
msgstr ""
#: includes/include.mod_rewrite_content.php:184
msgid "Plugin thread in CONTENIDO forum"
msgstr ""
#: includes/include.mod_rewrite_content.php:185
msgid "Plugin settings"
msgstr ""
#: includes/include.mod_rewrite_content.php:186
#: includes/include.mod_rewrite_contentexpert.php:87
msgid "Note"
msgstr ""
#: includes/include.mod_rewrite_content.php:189
#, php-format
msgid ""
"The .htaccess file could not found either in CONTENIDO installation "
"directory nor in client directory.<br>It should set up in %sFunctions%s "
"area, if needed."
msgstr ""
#: includes/include.mod_rewrite_content.php:192
#, php-format
msgid ""
"Found some category and/or article aliases. It is recommended to run the "
"reset function in %sFunctions%s area, if needed."
msgstr ""
#: includes/include.mod_rewrite_content.php:195
msgid "Enable Advanced Mod Rewrite"
msgstr ""
#: includes/include.mod_rewrite_content.php:197
msgid ""
"Disabling of plugin does not result in disabling mod rewrite module of the "
"web server - This means,<br> all defined rules in the .htaccess are still "
"active and could create unwanted side effects.<br><br>Apache mod rewrite "
"could be enabled/disabled by setting the RewriteEngine directive.<br>Any "
"defined rewrite rules could remain in the .htaccess and they will not "
"processed,<br>if the mod rewrite module is disabled"
msgstr ""
#: includes/include.mod_rewrite_content.php:199
msgid "Example"
msgstr ""
#: includes/include.mod_rewrite_content.php:201
msgid ""
"# enable apache mod rewrite module\n"
"RewriteEngine on\n"
"\n"
"# disable apache mod rewrite module\n"
"RewriteEngine off"
msgstr ""
#: includes/include.mod_rewrite_content.php:203
msgid "Path to .htaccess from DocumentRoot"
msgstr ""
#: includes/include.mod_rewrite_content.php:204
msgid ""
"Type '/' if the .htaccess file lies inside the wwwroot (DocumentRoot) folder."
"<br>Type the path to the subfolder fromm wwwroot, if CONTENIDO is installed "
"in a subfolder within the wwwroot<br>(e. g. http://domain/mycontenido -&gt; "
"path = '/mycontenido/')"
msgstr ""
#: includes/include.mod_rewrite_content.php:206
msgid "Check path to .htaccess"
msgstr ""
#: includes/include.mod_rewrite_content.php:207
msgid ""
"The path will be checked, if this option is enabled.<br>But this could "
"result in an error in some cases, even if the specified path is valid "
"and<br>clients DocumentRoot differs from CONTENIDO backend DocumentRoot."
msgstr ""
#: includes/include.mod_rewrite_content.php:209
msgid "Should the name of root category be displayed in the URL?"
msgstr ""
#: includes/include.mod_rewrite_content.php:210
msgid "Start from root category"
msgstr ""
#: includes/include.mod_rewrite_content.php:211
msgid ""
"If enabled, the name of the root category (e. g. 'Mainnavigation' in a "
"CONTENIDO default installation), will be preceded to the URL."
msgstr ""
#: includes/include.mod_rewrite_content.php:213
msgid "Are several clients maintained in one directory?"
msgstr ""
#: includes/include.mod_rewrite_content.php:214
msgid "Prepend client to the URL"
msgstr ""
#: includes/include.mod_rewrite_content.php:215
msgid "Use client name instead of the id"
msgstr ""
#: includes/include.mod_rewrite_content.php:217
msgid ""
"Should the language appear in the URL (required for multi language websites)?"
msgstr ""
#: includes/include.mod_rewrite_content.php:218
msgid "Prepend language to the URL"
msgstr ""
#: includes/include.mod_rewrite_content.php:219
msgid "Use language name instead of the id"
msgstr ""
#: includes/include.mod_rewrite_content.php:221
msgid ""
"Configure your own separators with following 4 settings<br>to control "
"generated URLs to your own taste"
msgstr ""
#: includes/include.mod_rewrite_content.php:222
msgid ""
"www.domain.com/category1-category2.articlename.html\n"
"www.domain.com/category1/category2-articlename.html\n"
"www.domain.com/category.name1~category2~articlename.html\n"
"www.domain.com/category_name1-category2-articlename.foo"
msgstr ""
#: includes/include.mod_rewrite_content.php:223
msgid "Category separator has to be different from category-word separator"
msgstr ""
#: includes/include.mod_rewrite_content.php:224
msgid ""
"# Example: Category separator (/) and category-word separator (_)\n"
"category_one/category_two/articlename.html"
msgstr ""
#: includes/include.mod_rewrite_content.php:225
msgid "Category separator has to be different from article-word separator"
msgstr ""
#: includes/include.mod_rewrite_content.php:226
msgid ""
"# Example: Category separator (/) and article-word separator (-)\n"
"category_one/category_two/article-description.html"
msgstr ""
#: includes/include.mod_rewrite_content.php:227
msgid ""
"Category-article separator has to be different from article-word separator"
msgstr ""
#: includes/include.mod_rewrite_content.php:228
msgid ""
"# Example: Category-article separator (/) and article-word separator (-)\n"
"category_one/category_two/article-description.html"
msgstr ""
#: includes/include.mod_rewrite_content.php:230
msgid "Category separator (delemiter between single categories)"
msgstr ""
#: includes/include.mod_rewrite_content.php:231
#: includes/include.mod_rewrite_content.php:232
#, php-format
msgid "(possible values: %s)"
msgstr ""
#: includes/include.mod_rewrite_content.php:233
msgid "Category-word separator (delemiter between category words)"
msgstr ""
#: includes/include.mod_rewrite_content.php:234
msgid ""
"Category-article separator (delemiter between category-block and article)"
msgstr ""
#: includes/include.mod_rewrite_content.php:235
msgid "Article-word separator (delemiter between article words)"
msgstr ""
#: includes/include.mod_rewrite_content.php:237
msgid "Append article name to URLs"
msgstr ""
#: includes/include.mod_rewrite_content.php:238
msgid "Append article name always to URLs (even at URLs to categories)"
msgstr ""
#: includes/include.mod_rewrite_content.php:239
msgid "Default article name without extension"
msgstr ""
#: includes/include.mod_rewrite_content.php:240
msgid ""
"e. g. 'index' for index.ext<br>In case of selected 'Append article name "
"always to URLs' option and a empty field,<br>the name of the start article "
"will be used"
msgstr ""
#: includes/include.mod_rewrite_content.php:242
msgid "File extension at the end of the URL"
msgstr ""
#: includes/include.mod_rewrite_content.php:243
msgid ""
"Specification of file extension with a preceded dot<br>e.g. '.html' for "
"http://host/foo/bar.html"
msgstr ""
#: includes/include.mod_rewrite_content.php:244
msgid ""
"It's strongly recommended to specify a extension here,<br>if the option "
"'Append article name always to URLs' was not selected.<br><br>Otherwise URLs "
"to categories and articles would have the same format<br>which may result in "
"unresolvable categories/articles in some cases."
msgstr ""
#: includes/include.mod_rewrite_content.php:245
msgid ""
"It's necessary to specify a file extension at the moment, due do existing "
"issues, which are not solved until yet. An not defined extension may result "
"in invalid article detection in some cases."
msgstr ""
#: includes/include.mod_rewrite_content.php:247
msgid "Should the URLs be written in lower case?"
msgstr ""
#: includes/include.mod_rewrite_content.php:248
msgid "URLs in lower case"
msgstr ""
#: includes/include.mod_rewrite_content.php:250
msgid "Duplicated content"
msgstr ""
#: includes/include.mod_rewrite_content.php:251
msgid "Prevent duplicated content"
msgstr ""
#: includes/include.mod_rewrite_content.php:253
msgid ""
"Depending on configuration, pages could be found thru different URLs."
"<br>Enabling of this option prevents this. Examples for duplicated content"
msgstr ""
#: includes/include.mod_rewrite_content.php:254
msgid ""
"Name of the root category in the URL: Feasible is /maincategory/subcategory/ "
"and /subcategory/\n"
"Language in the URL: Feasible is /german/category/ and /1/category/\n"
"Client in the URL: Feasible is /client/category/ und /1/category/"
msgstr ""
#: includes/include.mod_rewrite_content.php:257
msgid "Percentage for similar category paths in URLs"
msgstr ""
#: includes/include.mod_rewrite_content.php:258
msgid ""
"This setting refers only to the category path of a URL. If AMR is "
"configured<br>to prepend e. g. the root category, language and/or client to "
"the URL,<br>the specified percentage will not applied to those parts of the "
"URL.<br>An incoming URL will be cleaned from those values and the remaining "
"path (urlpath of the category)<br>will be checked against similarities."
msgstr ""
#: includes/include.mod_rewrite_content.php:259
msgid ""
"100 = exact match with no tolerance\n"
"85 = paths with little errors will match to similar ones\n"
"0 = matching will work even for total wrong paths"
msgstr ""
#: includes/include.mod_rewrite_content.php:261
msgid "Redirect in case of invalid articles"
msgstr ""
#: includes/include.mod_rewrite_content.php:262
msgid "Redirect to error page in case of invaid articles"
msgstr ""
#: includes/include.mod_rewrite_content.php:263
msgid "The start page will be displayed if this option is not enabled"
msgstr ""
#: includes/include.mod_rewrite_content.php:265
msgid "Moment of URL generation"
msgstr ""
#: includes/include.mod_rewrite_content.php:266
msgid "a.) During the output of HTML code of the page"
msgstr ""
#: includes/include.mod_rewrite_content.php:267
msgid ""
"Clean-URLs will be generated during page output. Modules/Plugins are able to "
"generate URLs to frontend<br>as usual as in previous CONTENIDO versions "
"using a format like 'front_content.php?idcat=1&amp;idart=2'.<br>The URLs "
"will be replaced by the plugin to Clean-URLs before sending the HTML output."
msgstr ""
#: includes/include.mod_rewrite_content.php:268
msgid "Differences to variant b.)"
msgstr ""
#: includes/include.mod_rewrite_content.php:269
msgid ""
"Still compatible to old modules/plugins, since no changes in codes are "
"required\n"
"All occurring URLs in HTML code, even those set by wysiwyg, will be switched "
"to Clean-URLs\n"
"All URLs will usually be collected and converted to Clean-URLs at once."
"<br>Doing it this way reduces the amount of executed database significantly."
msgstr ""
#: includes/include.mod_rewrite_content.php:272
msgid "b.) In modules or plugins"
msgstr ""
#: includes/include.mod_rewrite_content.php:273
msgid ""
"By using this option, all Clean-URLs will be generated directly in module or "
"plugins.<br>This means, all areas in modules/plugins, who generate internal "
"URLs to categories/articles, have to be adapted manually.<br>All Clean-URLs "
"have to be generated by using following function:"
msgstr ""
#: includes/include.mod_rewrite_content.php:274
msgid ""
"# structure of a normal url\n"
"$url = 'front_content.php?idart=123&amp;lang=2&amp;client=1';\n"
"\n"
"# creation of a url by using the CONTENIDOs Url-Builder (since 4.8.9),\n"
"# wich expects the parameter as a assoziative array\n"
"$params = array('idart'=>123, 'lang'=>2, 'client'=>1);\n"
"$newUrl = Contenido_Url::getInstance()->build($params);"
msgstr ""
#: includes/include.mod_rewrite_content.php:275
msgid "Differences to variant a.)"
msgstr ""
#: includes/include.mod_rewrite_content.php:276
msgid ""
"The default way to generate URLs to fronend pages\n"
"Each URL in modules/plugins has to be generated by UriBuilder\n"
"Each generated Clean-Url requires a database query"
msgstr ""
#: includes/include.mod_rewrite_content.php:279
msgid "Routing"
msgstr ""
#: includes/include.mod_rewrite_content.php:280
msgid "Routing definitions for incoming URLs"
msgstr ""
#: includes/include.mod_rewrite_content.php:281
msgid "Type one routing definition per line as follows:"
msgstr ""
#: includes/include.mod_rewrite_content.php:282
msgid ""
"# {incoming_url}>>>{new_url}\n"
"/incoming_url/name.html>>>new_url/new_name.html\n"
"\n"
"# route a specific incoming url to a new page\n"
"/campaign/20_percent_on_everything_except_animal_food.html>>>front_content."
"php?idcat=23\n"
"\n"
"# route request to wwwroot to a specific page\n"
"/>>>front_content.php?idart=16"
msgstr ""
#: includes/include.mod_rewrite_content.php:283
msgid ""
"The routing does not sends a HTTP header redirection to the destination URL, "
"the redirection will happen internally by<br>replacing the detected incoming "
"URL against the new destination URL (overwriting of article- categoryid)\n"
"Incoming URLs can point to non existing resources (category/article), but "
"the desttination URLs should point<br>to valid CONTENIDO articles/"
"categories\n"
"Destination URLs should point to real URLs to categories/articles,<br>e. g."
"front_content.php?idcat=23 or front_content.php?idart=34\n"
"The language id should attached to the URL in multi language sites<br>e. g. "
"front_content.php?idcat=23&amp;lang=1\n"
"The client id should attached to the URL in multi client sites sharing the "
"same folder<br>e. g. front_content.php?idcat=23&amp;client=2\n"
"The destination URL should not start with '/' or './' (wrong: /front_content."
"php, correct: front_content.php)"
msgstr ""
#: includes/include.mod_rewrite_content.php:286
#: includes/include.mod_rewrite_contentexpert.php:90
msgid "Discard changes"
msgstr ""
#: includes/include.mod_rewrite_content.php:287
#: includes/include.mod_rewrite_contentexpert.php:91
msgid "Save changes"
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:55
msgid ""
"Define options to genereate the URLs by using the form below and run the "
"test."
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:56
msgid "Parameter to use"
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:57
msgid "Number of URLs to generate"
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:58
msgid "Run test"
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:60
msgid ""
"{pref}<strong>{name}</strong><br>{pref}Builder in: {url_in}<br>{pref}"
"Builder out: {url_out}<br>{pref}<span style='color:{color}'>Resolved URL: "
"{url_res}</span><br>{pref}Resolver err: {err}<br>{pref}Resolved data: {data}"
msgstr ""
#: includes/include.mod_rewrite_contenttest.php:62
msgid ""
"Duration of test run: {time} seconds.<br>Number of processed URLs: {num_urls}"
"<br><span style='color:green'>Successful resolved: {num_success}</"
"span><br><span style='color:red'>Errors during resolving: {num_fail}</span></"
"strong>"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:61
msgid "Plugin functions"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:63
msgid "Copy/Download .htaccess template"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:64
msgid "Select .htaccess template"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:65
msgid "Restrictive .htaccess"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:66
msgid "Simple .htaccess"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:67
msgid ""
"Contains rules with restrictive settings.<br>All requests pointing to "
"extension avi, css, doc, flv, gif, gzip, ico, jpeg, jpg, js, mov, <br>mp3, "
"pdf, png, ppt, rar, txt, wav, wmv, xml, zip, will be excluded vom rewriting."
"<br>Remaining requests will be rewritten to front_content.php,<br>except "
"requests to 'contenido/', 'setup/', 'cms/upload', 'cms/front_content.php', "
"etc.<br>Each resource, which has to be excluded from rewriting must be "
"specified explicitly."
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:69
msgid ""
"Contains a simple collection of rules. Each requests pointing to valid "
"symlinks, folders or<br>files, will be excluded from rewriting. Remaining "
"requests will be rewritten to front_content.php"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:71
msgid "and copy to"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:72
msgid "CONTENIDO installation directory"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:73
msgid ""
"Copy the selected .htaccess template into CONTENIDO installation "
"directory<br><br>&nbsp;&nbsp;&nbsp;&nbsp;{CONTENIDO_FULL_PATH}.<br><br>This "
"is the recommended option for a CONTENIDO installation with one or more "
"clients<br>who are running on the same domain."
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:75
msgid "client directory"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:76
msgid ""
"Copy the selected .htaccess template into client's directory<br><br>&nbsp;"
"&nbsp;&nbsp;&nbsp;{CLIENT_FULL_PATH}.<br><br>This is the recommended option "
"for a multiple client system<br>where each client has it's own domain/"
"subdomain"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:78
msgid "or"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:79
msgid "Download"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:80
msgid ""
"Download selected .htaccess template to copy it to the destination "
"folder<br>or to take over the settings manually."
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:82
msgid "Reset category-/ and article aliases"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:83
msgid "Reset only empty aliases"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:84
msgid ""
"Only empty aliases will be reset, existing aliases, e. g. manually set "
"aliases, will not be changed."
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:85
msgid "Reset all aliases"
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:86
msgid ""
"Reset all category-/article aliases. Existing aliases will be overwritten."
msgstr ""
#: includes/include.mod_rewrite_contentexpert.php:88
msgid ""
"This process could require some time depending on amount of categories/"
"articles.<br>The aliases will not contain the configured plugin separators, "
"but the CONTENIDO default separators '/' und '-', e. g. '/category-word/"
"article-word'.<br>Execution of this function ma be helpful to prepare all or "
"empty aliases for the usage by the plugin."
msgstr ""
#: includes/config.plugin.php:71
msgid "Advanced Mod Rewrite"
msgstr ""
#: includes/config.plugin.php:72
msgid "Advanced Mod Rewrite functions"
msgstr ""
#: includes/config.plugin.php:73
msgid "Advanced Mod Rewrite test"
msgstr ""
#: classes/controller/class.modrewrite_controller_abstract.php:107
msgid "More informations"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:65
msgid ""
"The root directory has a invalid format, alowed are the chars [a-zA-Z0-9\\-_"
"\\/\\.]"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:72
#, php-format
msgid "The specified directory '%s' does not exists"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:79
#, php-format
msgid ""
"The specified directory '%s' does not exists in DOCUMENT_ROOT '%s'. This "
"could happen, if clients DOCUMENT_ROOT differs from CONTENIDO backends "
"DOCUMENT_ROOT. However, the setting will be taken over because of disabled "
"check."
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:182
#, php-format
msgid "Please specify separator (%s) for category"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:187
#, php-format
msgid "Invalid separator for category, allowed one of following characters: %s"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:194
#, php-format
msgid "Please specify separator (%s) for category words"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:199
#, php-format
msgid ""
"Invalid separator for category words, allowed one of following characters: %s"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:206
#, php-format
msgid "Please specify separator (%s) for article"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:211
#, php-format
msgid ""
"Invalid separator for article, allowed is one of following characters: %s"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:218
#, php-format
msgid "Please specify separator (%s) for article words"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:223
#, php-format
msgid ""
"Invalid separator for article words, allowed is one of following characters: "
"%s"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:230
msgid "Separator for category and category words must not be identical"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:235
msgid "Separator for category and article words must not be identical"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:240
msgid "Separator for category-article and article words must not be identical"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:257
msgid ""
"The file extension has a invalid format, allowed are the chars \\.([a-zA-"
"Z0-9\\-_\\/])"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:271
msgid "Value has to be numeric."
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:275
msgid "Value has to be between 0 an 100."
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:292
msgid ""
"The article name has a invalid format, allowed are the chars /^[a-zA-Z0-9\\-_"
"\\/\\.]*$/"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:355
msgid "Please check your input"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:365
msgid "Configuration has <b>not</b> been saved, because of enabled debugging"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:373
msgid "Configuration has been saved"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:379
#, php-format
msgid "Configuration could not saved. Please check write permissions for %s "
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:412
msgid ""
"Your Contenido installation runs with the setting 'is_start_compatible'. "
"This plugin will not work properly in this mode.<br />Please check following "
"topic in Contenido forum to change this:<br /><br /><a href='http://forum."
"contenido.org/viewtopic.php?t=32530' class='blue' "
"target='_blank'>is_start_compatible auf neue Version umstellen</a>"
msgstr ""
#: classes/controller/class.modrewrite_content_controller.php:420
#, php-format
msgid ""
"It seems as if some categories don't have a set 'urlpath' entry in the "
"database. Please reset empty aliases in %sFunctions%s area."
msgstr ""

24
locale/potfiles.txt Normale Datei
Datei anzeigen

@ -0,0 +1,24 @@
./includes/include.mod_rewrite_content.php
./includes/include.mod_rewrite_contenttest.php
./includes/functions.mod_rewrite.php
./includes/include.mod_rewrite_contentexpert.php
./includes/front_content_controller.php
./includes/config.mod_rewrite_default.php
./includes/include.mod_rewrite_content_top.php
./includes/config.plugin.php
./external/aToolTip/demos.html
./templates/content.html
./templates/contenttest.html
./templates/content_top.html
./templates/contentexpert.html
./classes/controller/class.modrewrite_contenttest_controller.php
./classes/controller/class.modrewrite_contentexpert_controller.php
./classes/controller/class.modrewrite_controller_abstract.php
./classes/controller/class.modrewrite_content_controller.php
./classes/class.modrewritedebugger.php
./classes/class.modrewritetest.php
./classes/class.modrewrite.php
./classes/class.modrewriteurlstack.php
./classes/class.modrewritebase.php
./classes/class.modrewritecontroller.php
./classes/class.modrewriteurlutil.php

96
scripts/mod_rewrite.js Normale Datei
Datei anzeigen

@ -0,0 +1,96 @@
/**
* Project:
* CONTENIDO Content Management System
*
* Description:
* Plugin Advanced Mod Rewrite JavaScript functions.
*
* Requirements:
* @con_php_req 5.0
*
*
* @package CONTENIDO Plugins
* @version 0.1
* @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
* @since file available since CONTENIDO release 4.9.0
*
* {@internal
* created 2011-04-11
*
* $Id: mod_rewrite.js 128 2019-07-03 11:58:28Z oldperl $:
* }}
*
*/
var mrPlugin = {
lng: {
more_informations: "More informations"
},
toggle: function(id) {
// do some animation ;-)
$('#' + id).slideToggle("slow");
},
showReadme: function() {
},
initializeSettingsPage: function() {
$(document).ready(function() {
$("#mr_use_language").change(function() {
if (true == $(this).attr("checked")) {
$("#mr_use_language_name").removeAttr("disabled");
} else {
$("#mr_use_language_name").attr("disabled", "disabled");
}
});
$("#mr_use_client").change(function() {
if (true == $(this).attr("checked")) {
$("#mr_use_client_name").removeAttr("disabled");
} else {
$("#mr_use_client_name").attr("disabled", "disabled");
}
});
$("#mr_add_startart_name_to_url").change(function() {
if (true == $(this).attr("checked")) {
$("#mr_default_startart_name").removeAttr("disabled")
.removeClass("disabled");
} else {
$("#mr_default_startart_name").attr("disabled", "disabled")
.addClass("disabled");
}
});
mrPlugin._initializeTooltip();
});
},
initializeExterpPage: function() {
$(document).ready(function() {
mrPlugin._initializeTooltip();
});
},
_initializeTooltip: function() {
$(".mrPlugin a.i-link").each(function () {
$(this).attr("href", "javascript:void(0);");
$(this).attr("title", mrPlugin.lng.more_informations);
var id = $(this).attr("id").substring(0, $(this).attr("id").indexOf("-link"));
$(this).aToolTip({
clickIt: true,
xOffset: -20,
yOffset: 4,
outSpeed: 250,
tipContent: $("#" + id).html()
});
});
}
};

101
styles/styles.css Normale Datei
Datei anzeigen

@ -0,0 +1,101 @@
/**
* Project:
* CONTENIDO Content Management System
*
* Description:
* Plugin Advanced Mod Rewrite JavaScript functions.
*
* Requirements:
* @con_php_req 5.0
*
*
* @package CONTENIDO Plugins
* @version 0.1
* @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
* @since file available since CONTENIDO release 4.9.0
*
* {@internal
* created 2011-04-11
*
* $Id: styles.css 128 2019-07-03 11:58:28Z oldperl $:
* }}
*
*/
/**
* mrPlugin main page
* @section mrPlugin
*/
body.mrPlugin {margin:10px;}
.mrPlugin a {color:#0060b1;}
.mrPlugin strong {font-weight:bold;}
.mrPlugin img {border:none;}
.mrPlugin pre.example {padding:3px 5px; border:1px #000 dashed; width:60%; min-width:650px;}
.mrPlugin li {padding-bottom:0.4em;}
.mrPlugin span.note {color:red;}
.mrPlugin input.disabled {background-color:#dadada;}
.mrPlugin .altBg {background-color:#f1f1f1;}
.mrPlugin .aToolTip ul {padding-left:1em;}
.mrPlugin .clear {clear:both; font-size:0pt !important; height:0pt !important; line-height:0pt !important;}
.mrPlugin .blockLeft {display:block; float:left;}
.mrPlugin .blockRight {display:block; float:right;}
.mrPlugin .nodisplay {display:none;}
/* Header box */
.mrPlugin .headerBox {background-color:#e2e2e2; border:1px solid #b5b5b5; padding:6px; margin-bottom:10px;}
.mrPlugin .headerBox p {margin:0; padding:0;}
.mrPlugin .headerBox ul {margin-bottom:0;}
/* Content table */
.mrPlugin table#contenttable {border:0; border-top:1px; border-left:1px; border-bottom:1px; border-color:#b3b3b3; border-style:solid;}
.mrPlugin table#contenttable th {font-weight:bold; text-align:left;}
.mrPlugin table#contenttable tr {background-color:#fff;}
.mrPlugin th, .mrPlugin td {vertical-align:top;}
.mrPlugin td.col-I {border:0; border-bottom:1px; border-right:1px; border-color:#b3b3b3; border-style:solid;}
.mrPlugin td.col-II {border:0; border-bottom:1px; border-right:1px; border-color:#b3b3b3; border-style:solid;}
.mrPlugin tr.marked td {background-color:#f2b7a1;}
/* Info button */
.mrPlugin a.infoButton,
.mrPlugin a.infoButton:hover {display:block; float:left; width:16px; height:16px; background:transparent url(../../../images/info.gif) no-repeat; margin:0 0 0 5px;}
.mrPlugin a.infoButton.v2,
.mrPlugin a.infoButton:hover.v2 {margin-top:2px;}
/* Plugininfo layer */
.mrPlugin .pluginInfo {}
.mrPlugin .pluginInfo p {font-weight:bold; margin:0; padding:0;}
.mrPlugin .pluginInfo ul {margin:0; padding:0; list-style-type:none;}
.mrPlugin .pluginInfo li {margin:0; padding:0;}
.mrPlugin .pluginInfo li.first {margin-top:0.6em;}
/**
* mrPlugin test page
* @section mrPluginTest
*/
/** @extends body.mrPlugin */
body.mrPluginTest {}
.mrPluginTest .headerBox form {float:left; width:35%; background:#e2e2e2; margin:0; padding-top:10px;}
.mrPluginTest .headerBox fieldset {margin-bottom:10px;}
.mrPluginTest .headerBox fieldset p {margin:0;}
.mrPluginTest .headerBox form .chk {width:24%; float:left;}
.mrPluginTest a {font-family:monospace;}

368
templates/content.html Normale Datei
Datei anzeigen

@ -0,0 +1,368 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>mod_rewrite_content</title>
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<script type="text/javascript" src="scripts/jquery/jquery.js"></script>
<script type="text/javascript" src="plugins/mod_rewrite/external/aToolTip/js/atooltip.jquery.js"></script>
<script type="text/javascript" src="plugins/mod_rewrite/scripts/mod_rewrite.js"></script>
<link rel="stylesheet" type="text/css" href="styles/contenido.css">
<link rel="stylesheet" type="text/css" href="plugins/mod_rewrite/external/aToolTip/css/atooltip.css">
<link rel="stylesheet" type="text/css" href="plugins/mod_rewrite/styles/styles.css">
<script type="text/javascript"><!--
// session-id
var sid = "{SESSID}";
// setup translation
mrPlugin.lng.more_informations = "{LNG_MORE_INFORMATIONS}";
// initialize page
mrPlugin.initializeSettingsPage();
// --></script>
</head>
<body class="mrPlugin">
<div class="headerBox">
<div class="pluginInfo">
<div><span class="blockLeft">Plugin Advanced Mod Rewrite</span>
<a href="#" id="pluginInfoDetails-link" class="main i-link infoButton" title=""></a><div class="clear"></div></div>
<div id="pluginInfoDetails" style="display:none;">
<ul class="list">
<li class="first"><strong>{LNG_AUTHOR}:</strong> Murat Purc, <a href="mailto:murat@purc.de" title="{LNG_MAIL_TO_AUTHOR}">murat@purc.de</a></li>
<li><strong>{LNG_PLUGINPAGE}:</strong> <a href="http://www.purc.de/playground-coding-contenido_plugin_-_advanced_mod_rewrite-a.109.html" onclick="window.open(this.href); return false;" title="{LNG_VISIT_PLUGINPAGE} ({LNG_OPENS_IN_NEW_WINDOW})">{LNG_VISIT_PLUGINPAGE}</a></li>
<li><strong>{LNG_CONTENIDO_FORUM}:</strong> <a href="http://forum.contenido.org/viewtopic.php?t=21578" onclick="window.open(this.href); return false;" title="{LNG_PLUGINTHREAD_IN_CONTENIDO_FORUM} ({LNG_OPENS_IN_NEW_WINDOW})">{LNG_PLUGINTHREAD_IN_CONTENIDO_FORUM}</a></li>
</ul>
</div>
</div>
</div>
{CONTENT_BEFORE}
<form name="mr_configuration" id="mr_configuration" method="post" action="main.php">
<input type="hidden" name="contenido" value="{SESSID}">
<input type="hidden" name="area" value="{AREA}">
<input type="hidden" name="mr_action" value="save">
<input type="hidden" name="frame" value="4">
<input type="hidden" name="idclient" value="{IDCLIENT}">
<table id="contenttable" cellspacing="0" cellpadding="3" border="0">
<colgroup>
<col width="30%">
<col width="70%">
</colgroup>
<tr style="background-color:#e2e2e2;">
<th colspan="2" class="text_medium col-I" style="border-top:1px;">{LNG_PLUGIN_SETTINGS}</th>
</tr>
<!-- htaccess info / empty aliases -->
<tr style="{HEADER_NOTES_CSS}" class="marked">
<td colspan="2" class="text_medium col-I" style="padding:13px 3px;">
<strong>{LNG_NOTE}</strong><br>
<p style="{HTACCESS_INFO_CSS}">
{LNG_MSG_NO_HTACCESS_FOUND}<br>
</p>
<p style="{EMPTYALIASES_INFO_CSS}">
{LNG_MSG_NO_EMPTYALIASES_FOUND}<br>
</p>
</td>
</tr>
<!-- enable/disable mod rewrite -->
<tr>
<td colspan="2" class="text_medium col-I">
<div class="blockLeft">
<input type="checkbox" id="mr_use" name="use" value="1"{USE_CHK}>
<label for="mr_use">{LNG_ENABLE_AMR}</label>
</div>
<a href="#" id="enableInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="enableInfo1" style="display:none;">
<strong>{LNG_NOTE}</strong><br>
{LNG_MSG_ENABLE_AMR_INFO}<br>
<br>
<strong>{LNG_EXAMPLE}:</strong>
<pre class="example">{LNG_MSG_ENABLE_AMR_INFO_EXAMPLE}</pre>
</div>
</td>
</tr>
<!-- root dir -->
<tr>
<td class="text_medium col-I">{LNG_ROOTDIR}</td>
<td class="text_medium col-II" align="left">
{ROOTDIR_ERROR}
<input class="text_medium blockLeft" type="text" name="rootdir" size="50" maxlength="64" value="{ROOTDIR}">
<a href="#" id="rootdirInfo1-link" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="rootdirInfo1" style="display:none;">{LNG_ROOTDIR_INFO}</div>
<br>
<div class="blockLeft">
<input type="checkbox" id="mr_checkrootdir" name="checkrootdir" value="1"{CHECKROOTDIR_CHK}>
<label for="mr_checkrootdir">{LNG_CHECKROOTDIR}</label>
</div>
<a href="#" id="rootdirInfo2-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="rootdirInfo2" style="display:none;">{LNG_CHECKROOTDIR_INFO}</div>
</td>
</tr>
<!-- use client/use client name -->
<tr>
<td class="text_medium col-I">{LNG_USE_CLIENT}</td>
<td class="text_medium col-II" align="left">
<input type="checkbox" id="mr_use_client" name="use_client" value="1"{USE_CLIENT_CHK}>
<label for="mr_use_client">{LNG_USE_CLIENT_LBL}</label><br>
<br>
<input type="checkbox" id="mr_use_client_name" name="use_client_name" value="1"{USE_CLIENT_NAME_CHK}{USE_CLIENT_NAME_DISABLED}>
<label for="mr_use_client_name">{LNG_USE_CLIENT_NAME_LBL}</label><br>
</td>
</tr>
<!-- use language/use language name -->
<tr>
<td class="text_medium col-I">{LNG_USE_LANGUAGE}</td>
<td class="text_medium col-II" align="left">
<input type="checkbox" id="mr_use_language" name="use_language" value="1"{USE_LANGUAGE_CHK}>
<label for="mr_use_language">{LNG_USE_LANGUAGE_LBL}</label><br>
<br>
<input type="checkbox" id="mr_use_language_name" name="use_language_name" value="1"{USE_LANGUAGE_NAME_CHK}{USE_LANGUAGE_NAME_DISABLED}>
<label for="mr_use_language_name">{LNG_USE_LANGUAGE_NAME_LBL}</label><br>
</td>
</tr>
<!-- start from root -->
<tr>
<td class="text_medium col-I">{LNG_STARTFROMROOT}</td>
<td class="text_medium col-II" align="left">
<div class="blockLeft">
<input type="checkbox" id="mr_startfromroot" name="startfromroot" value="1"{STARTFROMROOT_CHK}>
<label for="mr_startfromroot">{LNG_STARTFROMROOT_LBL}</label>
</div>
<a href="#" id="startFromRootInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="startFromRootInfo1" style="display:none;">{LNG_STARTFROMROOT_INFO}</div>
</td>
</tr>
<!-- activate userdefined separator settings -->
<tr>
<td colspan="2" class="text_medium col-I altBg">
<strong class="blockLeft">{LNG_USERDEFINED_SEPARATORS_HEADER}</strong>
<a href="#" id="userdefSeparatorInfo1-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="userdefSeparatorInfo1" style="display:none;">
<strong>{LNG_EXAMPLE}:</strong>
<pre class="example">{LNG_USERDEFINED_SEPARATORS_EXAMPLE}</pre>
<strong>{LNG_NOTE}:</strong>
<ul>
<li>{LNG_USERDEFINED_SEPARATORS_EXAMPLE_A}
<pre class="example">{LNG_USERDEFINED_SEPARATORS_EXAMPLE_A_EXAMPLE}</pre>
</li>
<li>{LNG_USERDEFINED_SEPARATORS_EXAMPLE_B}
<pre class="example">{LNG_USERDEFINED_SEPARATORS_EXAMPLE_B_EXAMPLE}</pre>
</li>
<li>{LNG_USERDEFINED_SEPARATORS_EXAMPLE_C}
<pre class="example">{LNG_USERDEFINED_SEPARATORS_EXAMPLE_C_EXAMPLE}</pre>
</li>
</ul>
</div>
</td>
</tr>
<tr>
<td class="text_medium col-I altBg">{LNG_CATEGORY_SEPARATOR}</td>
<td class="text_medium col-II" align="left">
{CATEGORY_SEPARATOR_ERROR}
<input class="text_medium" type="text" id="mr_category_seperator" name="category_seperator" size="5" maxlength="1" value="{CATEGORY_SEPARATOR}"{CATEGORY_SEPARATOR_ATTRIB}>
<small>{LNG_CATART_SEPARATOR_INFO}</small>
</td>
</tr>
<tr>
<td class="text_medium col-I altBg">{LNG_CATEGORY_WORD_SEPARATOR}</td>
<td class="text_medium col-II" align="left">
{CATEGORY_WORD_SEPARATOR_ERROR}
<input class="text_medium" type="text" id="mr_category_word_seperator" name="category_word_seperator" size="5" maxlength="1" value="{CATEGORY_WORD_SEPARATOR}"{CATEGORY_WORD_SEPARATOR_ATTRIB}>
<small>{LNG_WORD_SEPARATOR_INFO}</small>
</td>
</tr>
<tr>
<td class="text_medium col-I altBg">{LNG_ARTICLE_SEPARATOR}</td>
<td class="text_medium col-II" align="left">
{ARTICLE_SEPARATOR_ERROR}
<input class="text_medium" type="text" id="mr_article_seperator" name="article_seperator" size="5" maxlength="1" value="{ARTICLE_SEPARATOR}"{ARTICLE_SEPARATOR_ATTRIB}>
<small>{LNG_CATART_SEPARATOR_INFO}</small>
</td>
</tr>
<tr>
<td class="text_medium col-I altBg">{LNG_ARTICLE_WORD_SEPARATOR}</td>
<td class="text_medium col-II" align="left">
{ARTICLE_WORD_SEPARATOR_ERROR}
<input class="text_medium" type="text" id="mr_article_word_seperator" name="article_word_seperator" size="5" maxlength="1" value="{ARTICLE_WORD_SEPARATOR}"{ARTICLE_WORD_SEPARATOR_ATTRIB}>
<small>{LNG_WORD_SEPARATOR_INFO}</small>
</td>
</tr>
<!-- add start article name to url -->
<tr>
<td class="text_medium col-I">{LNG_ADD_STARTART_NAME_TO_URL}</td>
<td class="text_medium col-II" align="left">
{ADD_STARTART_NAME_TO_URL_ERROR}
<input type="checkbox" id="mr_add_startart_name_to_url" name="add_startart_name_to_url" value="1"{ADD_STARTART_NAME_TO_URL_CHK}>
<label for="mr_add_startart_name_to_url">{LNG_ADD_STARTART_NAME_TO_URL_LBL}</label><br>
<br>
<div class="blockLeft">
<label for="mr_default_startart_name">{LNG_DEFAULT_STARTART_NAME}</label><br>
<input class="text_medium" type="text" id="mr_default_startart_name" name="default_startart_name" size="50" maxlength="64" value="{DEFAULT_STARTART_NAME}">
</div>
<a href="#" id="defaultStartArtNameInfo1-link" title="" class="main i-link infoButton v2" style="margin-top:1.2em;"></a><div class="clear"></div>
<div id="defaultStartArtNameInfo1" style="display:none">{LNG_DEFAULT_STARTART_NAME_INFO}</div>
</td>
</tr>
<!-- file extension -->
<tr>
<td class="text_medium col-I">{LNG_FILE_EXTENSION}</td>
<td class="text_medium col-II" align="left">
{FILE_EXTENSION_ERROR}
<div class="blockLeft">
<input class="text_medium" type="text" name="file_extension" size="10" maxlength="10" value="{FILE_EXTENSION}"><br>
</div>
<a href="#" id="fileExtensionInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="fileExtensionInfo1" style="display:none;">
{LNG_FILE_EXTENSION_INFO}<br><br>
<strong>{LNG_NOTE}:</strong><br>
{LNG_FILE_EXTENSION_INFO2}
</div>
<p style="color:red">{LNG_FILE_EXTENSION_INFO3}</p>
</td>
</tr>
<!-- use lowercase url -->
<tr>
<td class="text_medium col-I">{LNG_USE_LOWERCASE_URI}</td>
<td class="text_medium col-II" align="left">
<input type="checkbox" id="mr_use_lowercase_uri" name="use_lowercase_uri" value="1"{USE_LOWERCASE_URI_CHK}>
<label for="mr_use_lowercase_uri">{LNG_USE_LOWERCASE_URI_LBL}</label>
</td>
</tr>
<!-- prevent duplicated content -->
<tr>
<td class="text_medium col-I">{LNG_PREVENT_DUPLICATED_CONTENT}</td>
<td class="text_medium col-II" align="left">
<div class="blockLeft">
<input type="checkbox" id="mr_prevent_duplicated_content" name="prevent_duplicated_content" value="1"{PREVENT_DUPLICATED_CONTENT_CHK}> <label for="mr_prevent_duplicated_content">{LNG_PREVENT_DUPLICATED_CONTENT_LBL}</label><br>
</div>
<a href="#" id="preventDuplicatedContentInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="preventDuplicatedContentInfo1" style="display:none;">
{LNG_PREVENT_DUPLICATED_CONTENT_INFO}:<br>
<ul>
{LNG_PREVENT_DUPLICATED_CONTENT_INFO2}
</ul>
</div>
</td>
</tr>
<!-- category resolve min percentage -->
<tr>
<td class="text_medium col-I">{LNG_CATEGORY_RESOLVE_MIN_PERCENTAGE}</td>
<td class="text_medium col-II" align="left">
{CATEGORY_RESOLVE_MIN_PERCENTAGE_ERROR}
<div class="blockLeft">
<input class="text_medium" type="text" name="category_resolve_min_percentage" size="5" maxlength="3" value="{CATEGORY_RESOLVE_MIN_PERCENTAGE}"> (0 - 100)
</div>
<a href="#" id="categoryResolveMinPercentageInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="categoryResolveMinPercentageInfo1" style="display:none;">
<p>{LNG_CATEGORY_RESOLVE_MIN_PERCENTAGE_INFO}</p>
<strong>{LNG_EXAMPLE}:</strong>
<pre class="example">{LNG_CATEGORY_RESOLVE_MIN_PERCENTAGE_EXAMPLE}</pre>
</div>
</td>
</tr>
<!-- redirect invalid article to errorsite -->
<tr>
<td class="text_medium col-I">{LNG_REDIRECT_INVALID_ARTICLE_TO_ERRORSITE}</td>
<td class="text_medium col-II" align="left">
<div class="blockLeft">
<input type="checkbox" id="mr_redirect_invalid_article_to_errorsite" name="redirect_invalid_article_to_errorsite" value="1"{REDIRECT_INVALID_ARTICLE_TO_ERRORSITE_CHK}>
<label for="mr_redirect_invalid_article_to_errorsite">{LNG_REDIRECT_INVALID_ARTICLE_TO_ERRORSITE_LBL}</label><br>
</div>
<a href="#" id="redirectInvalidArticleToErrorsiteInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="redirectInvalidArticleToErrorsiteInfo1" style="display:none;">
{LNG_REDIRECT_INVALID_ARTICLE_TO_ERRORSITE_INFO}
</div>
</td>
</tr>
<!-- rewrite urls at -->
<tr>
<td class="text_medium col-I">{LNG_REWRITE_URLS_AT}</td>
<td class="text_medium col-II" align="left">
<div class="blockLeft">
<input type="radio" id="rewrite_urls_at_front_content_output" name="rewrite_urls_at" value="front_content_output"{REWRITE_URLS_AT_FRONT_CONTENT_OUTPUT_CHK}>
<label for="rewrite_urls_at_front_content_output">{LNG_REWRITE_URLS_AT_FRONT_CONTENT_OUTPUT_LBL}</label>
</div>
<a href="#" id="rewriteUrlsAtInfo1-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="rewriteUrlsAtInfo1" style="display:none;">
{LNG_REWRITE_URLS_AT_FRONT_CONTENT_OUTPUT_INFO}<br>
<br>
<strong>{LNG_REWRITE_URLS_AT_FRONT_CONTENT_OUTPUT_INFO2}:</strong>
<ul>
{LNG_REWRITE_URLS_AT_FRONT_CONTENT_OUTPUT_INFO3}
</ul>
</div>
<br>
<div class="blockLeft">
<input type="radio" id="rewrite_urls_at_congeneratecode" name="rewrite_urls_at" value="congeneratecode"{REWRITE_URLS_AT_CONGENERATECODE_CHK}>
<label for="rewrite_urls_at_congeneratecode">{LNG_REWRITE_URLS_AT_CONGENERATECODE_LBL}</label><br>
</div>
<a href="#" id="rewriteUrlsAtInfo2-link" title="" class="main i-link infoButton v2"></a><div class="clear"></div>
<div id="rewriteUrlsAtInfo2" style="display:none;">
{LNG_REWRITE_URLS_AT_CONGENERATECODE_INFO}<br>
<pre class="example">{LNG_REWRITE_URLS_AT_CONGENERATECODE_EXAMPLE}</pre>
<strong>{LNG_REWRITE_URLS_AT_CONGENERATECODE_INFO2}:</strong>
<ul>
{LNG_REWRITE_URLS_AT_CONGENERATECODE_INFO3}
</ul>
</div>
</td>
</tr>
<!-- routing -->
<tr>
<td class="text_medium col-I">{LNG_REWRITE_ROUTING}</td>
<td class="text_medium col-II" align="left">
<div class="blockLeft">{LNG_REWRITE_ROUTING_INFO}</div>
<a href="#" id="routingInfo1-link" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="routingInfo1" style="display:none;">
{LNG_REWRITE_ROUTING_INFO2}
<pre class="example">{LNG_REWRITE_ROUTING_EXAMPLE}</pre>
<br>
<ul>
{LNG_REWRITE_ROUTING_INFO3}
</ul>
</div>
<textarea class="txt" id="rewrite_routing" name="rewrite_routing" rows="5" cols="80" style="width:100%;height:100px;">{REWRITE_ROUTING}</textarea>
</td>
</tr>
<tr>
<td colspan="2" class="text_medium col-I" style="text-align:right">
<a accesskey="c" href="main.php?area={AREA}&amp;frame=4&amp;idclient={IDCLIENT}&amp;contenido={SESSID}">
<img src="images/but_cancel.gif" alt="" title="{LNG_DISCARD_CHANGES}" /></a>
<input style="margin-left:20px;" accesskey="s" type="image" src="images/but_ok.gif" alt="" title="{LNG_SAVE_CHANGES}" />
</td>
</tr>
</table>
</form>
{CONTENT_AFTER}
</body>
</html>

36
templates/content_top.html Normale Datei
Datei anzeigen

@ -0,0 +1,36 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>mod_rewrite_content_menu_top</title>
<meta http-equiv="expires" content="0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<link rel="stylesheet" type="text/css" href="styles/contenido.css" />
<script type="text/javascript"><!--
// session-id
var sid = "{SESSID}";
// --></script>
<style type="text/css"><!--
img {border:none;}
// --></style>
</head>
<body>
<div id="navcontainer">
<div style="float:left;">
<img src="images/frame_handle_re.gif" style="border:0px;float:left;" alt="" />
<img style="margin:7px 0 0 7px;" id="toggleimage" onclick="parent.parent.frameResize.toggle()" src="images/spacer.gif" alt="" />
</div>
</div>
<script type="text/javascript"><!--
if (parent.parent.frames[0].name != "header") {
parent.parent.frameResize.init();
parent.parent.frameResize.toggle();
}
// --></script>
</body>
</html>

151
templates/contentexpert.html Normale Datei
Datei anzeigen

@ -0,0 +1,151 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>mod_rewrite_content_expert</title>
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<script type="text/javascript" src="scripts/jquery/jquery.js"></script>
<script type="text/javascript" src="plugins/mod_rewrite/scripts/mod_rewrite.js"></script>
<script type="text/javascript" src="plugins/mod_rewrite/external/aToolTip/js/atooltip.jquery.js"></script>
<link rel="stylesheet" type="text/css" href="styles/contenido.css">
<link rel="stylesheet" type="text/css" href="plugins/mod_rewrite/external/aToolTip/css/atooltip.css">
<link rel="stylesheet" type="text/css" href="plugins/mod_rewrite/styles/styles.css">
<script type="text/javascript"><!--
// session-id
var sid = "{SESSID}";
// setup translation
mrPlugin.lng.more_informations = "{LNG_MORE_INFORMATIONS}";
// initialize page
mrPlugin.initializeSettingsPage();
function mrPlugin_sendForm(action, params) {
$('#mr_expert_action').val(action);
var frm = $('#mr_expert');
frm.attr('action', frm.attr('action') + '?' + params).submit();
}
// --></script>
</head>
<body class="mrPlugin">
<div class="headerBox">
{LNG_PLUGIN_FUNCTIONS}
</div>
{CONTENT_BEFORE}
<form name="mr_expert" id="mr_expert" method="post" action="main.php">
<input type="hidden" name="contenido" value="{SESSID}">
<input type="hidden" name="area" value="{AREA}">
<input type="hidden" name="mr_action" id="mr_expert_action" value="">
<input type="hidden" name="frame" value="4">
<input type="hidden" name="idclient" value="{IDCLIENT}">
<table id="contenttable" cellspacing="0" cellpadding="3" border="0">
<colgroup>
<col width="30%">
<col width="70%">
</colgroup>
<!-- copy .htaccess -->
<tr style="{COPY_HTACCESS_CSS}">
<td class="text_medium col-I">{LNG_COPY_HTACCESS_TYPE}</td>
<td class="text_medium col-II" align="left">
{COPY_HTACCESS_ERROR}
<label for="mr_copy_htaccess_type">{LNG_COPY_HTACCESS_TYPE_LBL}</label><br>
<select class="blockLeft" name="htaccesstype" id="mr_copy_htaccess_type">
<option value="restrictive">{LNG_COPY_HTACCESS_TYPE1}</option>
<option value="simple">{LNG_COPY_HTACCESS_TYPE2}</option>
</select>
<a href="#" id="copyHtaccessInfo1-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="copyHtaccessInfo1" style="display:none;">
<strong>{LNG_COPY_HTACCESS_TYPE1}:</strong><br>
{LNG_COPY_HTACCESS_TYPE_INFO1}<br>
<br>
<strong>{LNG_COPY_HTACCESS_TYPE2}:</strong><br>
{LNG_COPY_HTACCESS_TYPE_INFO2}<br>
</div>
<div class="clear"></div>
<br>
{LNG_COPY_HTACCESS_TO}<br>
<br>
<a class="blockLeft" style="margin-right:15px;" href="javascript:mrPlugin_sendForm('copyhtaccess', 'copy=contenido');">
<img src="images/collapsed.gif" width="10" height="9" alt=""> {LNG_COPY_HTACCESS_TO_CONTENIDO}</a>
<a href="#" id="copyHtaccessInfo2-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="copyHtaccessInfo2" style="display:none;">
{LNG_COPY_HTACCESS_TO_CONTENIDO_INFO}
</div>
<br>
<a class="blockLeft" style="margin-right:15px;" href="javascript:mrPlugin_sendForm('copyhtaccess', 'copy=cms');">
<img src="images/collapsed.gif" width="10" height="9" alt=""> {LNG_COPY_HTACCESS_TO_CLIENT}</a>
<a href="#" id="copyHtaccessInfo3-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="copyHtaccessInfo3" style="display:none;">
{LNG_COPY_HTACCESS_TO_CLIENT_INFO}
</div>
<br>
{LNG_OR}<br>
<br>
<a class="blockLeft" style="margin-right:15px;" href="javascript:mrPlugin_sendForm('downloadhtaccess', '');">
<img src="images/collapsed.gif" width="10" height="9" alt=""> {LNG_DOWNLOAD}</a>
<a href="#" id="showHtaccessInfo-link1" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="showHtaccessInfo" style="display:none;">
{LNG_DOWNLOAD_INFO}
</div>
<br>
<div class="clear"></div>
</td>
</tr>
<!-- reset -->
<tr>
<td class="text_medium col-I">
{LNG_RESETALIASES}
</td>
<td class="text_medium col-II">
<a class="blockLeft" style="margin-right:15px;" href="javascript:mrPlugin_sendForm('resetempty', '');">
<img src="images/collapsed.gif" width="10" height="9" alt=""> {LNG_RESETEMPTY_LINK}</a>
<a href="#" id="resetAliasesInfo1-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="resetAliasesInfo1" style="display:none;">
{LNG_RESETEMPTY_INFO}
</div>
<br>
<a class="blockLeft" style="margin-right:15px;" href="javascript:mrPlugin_sendForm('reset', '');">
<img src="images/collapsed.gif" width="10" height="9" alt=""> {LNG_RESETALL_LINK}</a>
<a href="#" id="resetAliasesInfo2-link2" title="" class="main i-link infoButton"></a><div class="clear"></div>
<div id="resetAliasesInfo2" style="display:none;">
{LNG_RESETALL_INFO}
</div>
<br>
<strong>{LNG_NOTE}:</strong><br>
{LNG_RESETALIASES_NOTE}
</td>
</tr>
<tr>
<td colspan="2" class="text_medium col-I" style="text-align:right">
<a accesskey="c" href="main.php?area={AREA}&amp;frame=4&amp;idclient={IDCLIENT}&amp;contenido={SESSID}">
<img src="images/but_cancel.gif" alt="" title="{LNG_DISCARD_CHANGES}"></a>
<input style="margin-left:20px;" accesskey="s" type="image" src="images/but_ok.gif" alt="" title="{LNG_SAVE_CHANGES}">
</td>
</tr>
</table>
</form>
{CONTENT_AFTER}
</body>
</html>

63
templates/contenttest.html Normale Datei
Datei anzeigen

@ -0,0 +1,63 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>mod_rewrite_content_test</title>
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
<script type="text/javascript" src="scripts/jquery/jquery.js"></script>
<script type="text/javascript" src="plugins/mod_rewrite/scripts/mod_rewrite.js"></script>
<link rel="stylesheet" type="text/css" href="styles/contenido.css">
<link rel="stylesheet" type="text/css" href="plugins/mod_rewrite/styles/styles.css">
<script type="text/javascript"><!--
// session-id
var sid = "{SESSID}";
// setup translation
mrPlugin.lng.more_informations = "{LNG_MORE_INFORMATIONS}";
// --></script>
</head>
<body class="mrPlugin mrPluginTest">
<div class="headerBox">
<p>{LNG_FORM_INFO}<p>
<form name="mr_test" id="mr_test" action="main.php">
<input type="hidden" name="area" value="{AREA}">
<input type="hidden" name="frame" value="{FRAME}">
<input type="hidden" name="contenido" value="{CONTENIDO}">
<fieldset>
<legend>{LNG_FORM_LABEL}</legend>
<p></p>
<div class="chk">
<input type="checkbox" id="idart" name="idart" value="1"{FORM_IDART_CHK}><label for="idart">idart</label>
</div>
<div class="chk">
<input type="checkbox" id="idcat" name="idcat" value="1"{FORM_IDCAT_CHK}><label for="idcat">idcat</label>
</div>
<div class="chk">
<input type="checkbox" id="idcatart" name="idcatart" value="1"{FORM_IDCATART_CHK}><label for="idcatart">idcatart</label>
</div>
<div class="chk">
<input type="checkbox" id="idartlang" name="idartlang" value="1"{FORM_IDARTLANG_CHK}><label for="idartlang">idartlang</label>
</div>
<br class="clear">
</fieldset>
<div class="contenttest">
<div class="blockLeft">
<label for="maxitems">{LNG_MAXITEMS_LBL}: </label><input type="text" id="maxitems" maxlength="4" name="maxitems" value="{FORM_MAXITEMS}">
</div>
<div class="blockRight pdr5">
<input type="submit" name="test" value="{LNG_RUN_TEST}">
</div>
<br class="clear">
</div>
</form>
<br class="clear">
</div>
{CONTENT}
</body>
</html>

14
xml/lang_de_DE.xml Normale Datei
Datei anzeigen

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- CONTENIDO XML language file -->
<language>
<navigation>
<extras>
<mod_rewrite>
<main>AMR</main>
<settings>Einstellungen</settings>
<expert>Funktionen</expert>
<test>Test</test>
</mod_rewrite>
</extras>
</navigation>
</language>

14
xml/lang_en_US.xml Normale Datei
Datei anzeigen

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- CONTENIDO XML language file -->
<language>
<navigation>
<extras>
<mod_rewrite>
<main>AMR</main>
<settings>Settings</settings>
<expert>Functions</expert>
<test>Test</test>
</mod_rewrite>
</extras>
</navigation>
</language>