update amr to version from latest contenido 4.8
Dieser Commit ist enthalten in:
Ursprung
2fca0b43fa
Commit
0941e0b25d
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
|
@ -1,99 +1,87 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Includes base mod rewrite class.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-09-24
|
||||
*
|
||||
* $Id: class.modrewritebase.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or 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 Contenido Backend plugins
|
||||
* @subpackage ModRewrite
|
||||
*/
|
||||
abstract class ModRewriteBase
|
||||
{
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @pparam 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
|
||||
* @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;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR base Mod Rewrite class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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-Diff unterdrückt, da er zu groß ist
Diff laden
|
@ -1,74 +1,88 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Plugin mod rewrite debugger class
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: class.modrewritedebugger.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
class ModRewriteDebugger
|
||||
{
|
||||
protected static $_bEnabled = false;
|
||||
|
||||
|
||||
public static function setEnabled($bEnabled)
|
||||
{
|
||||
self::$_bEnabled = (bool) $bEnabled;
|
||||
}
|
||||
|
||||
public static function add($mVar, $sLabel = '')
|
||||
{
|
||||
if (!self::$_bEnabled) {
|
||||
return;
|
||||
}
|
||||
$oDebugger = DebuggerFactory::getDebugger('visible_adv');
|
||||
$oDebugger->add($mVar, $sLabel);
|
||||
}
|
||||
|
||||
public static function getAll()
|
||||
{
|
||||
if (!self::$_bEnabled) {
|
||||
return '';
|
||||
}
|
||||
$oDebugger = DebuggerFactory::getDebugger('visible_adv');
|
||||
ob_start();
|
||||
$oDebugger->showAll();
|
||||
$sOutput = ob_get_contents();
|
||||
ob_end_clean();
|
||||
return $sOutput;
|
||||
}
|
||||
|
||||
public static function log($mVar, $sLabel = '')
|
||||
{
|
||||
if (!self::$_bEnabled) {
|
||||
return;
|
||||
}
|
||||
$oDebugger = DebuggerFactory::getDebugger('file');
|
||||
$oDebugger->show($mVar, $sLabel);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR debugger class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,325 +1,300 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Advanced Mod Rewrite test class.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-05-xx
|
||||
*
|
||||
* $Id: class.modrewritetest.php 306 2014-03-13 23:03:26Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
class ModRewriteTest
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array Global $cfg array
|
||||
*/
|
||||
protected $_aCfg;
|
||||
|
||||
/**
|
||||
* @var array Global $cfg['tab'] array
|
||||
*/
|
||||
protected $_aCfgTab;
|
||||
|
||||
|
||||
/**
|
||||
* @var int Max items to process
|
||||
*/
|
||||
protected $_iMaxItems;
|
||||
|
||||
/**
|
||||
* @var string Actual resolved url
|
||||
*/
|
||||
protected $_sResolvedUrl;
|
||||
|
||||
|
||||
/**
|
||||
* @var bool Routing found flag
|
||||
*/
|
||||
protected $_bRoutingFound = false;
|
||||
|
||||
|
||||
/**
|
||||
* Constuctor
|
||||
*/
|
||||
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_ConLite();
|
||||
$db2 = new DB_ConLite();
|
||||
|
||||
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);
|
||||
|
||||
$loop = false;
|
||||
$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();
|
||||
|
||||
if ($this->_aCfg['is_start_compatible'] == true) {
|
||||
$compStatement = ' a.is_start DESC, ';
|
||||
} else {
|
||||
$compStatement = '';
|
||||
}
|
||||
|
||||
$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
|
||||
" . $compStatement . "
|
||||
c.title ASC";
|
||||
|
||||
$db2->query($sql2);
|
||||
|
||||
while ($db2->next_record()) {
|
||||
$idart = $db2->f('idart');
|
||||
$aStruct[$idcat]['articles'][$idart] = $db2->Record;
|
||||
if (++$counter == $this->_iMaxItems) {
|
||||
break 2; // break this and also superior loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $aStruct;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates an URL using passed data.
|
||||
*
|
||||
* The result is used to generate seo urls...
|
||||
*
|
||||
* @param array $arr Assoziative array with some data as follows:
|
||||
* <code>
|
||||
* $arr['idcat']
|
||||
* $arr['idart']
|
||||
* $arr['idcatart']
|
||||
* $arr['idartlang']
|
||||
* </code>
|
||||
* @param string $type Either 'c' or 'a' (category or article). If set to
|
||||
* 'c' only the parameter idcat will be added to the URL
|
||||
*/
|
||||
public function composeURL($arr, $type)
|
||||
{
|
||||
$type = ($type == 'a') ? 'a' : 'c';
|
||||
|
||||
$param = array();
|
||||
|
||||
if ($type == 'c') {
|
||||
$param[] = 'idcat=' . $arr['idcat'];
|
||||
} else {
|
||||
if (mr_getRequest('idart')) {
|
||||
$param[] = 'idart=' . $arr['idart'];
|
||||
}
|
||||
if (mr_getRequest('idcat')) {
|
||||
$param[] = 'idcat=' . $arr['idcat'];
|
||||
}
|
||||
if (mr_getRequest('idcatart')) {
|
||||
$param[] = 'idcatart=' . $arr['idcatart'];
|
||||
}
|
||||
if (mr_getRequest('idartlang')) {
|
||||
$param[] = 'idartlang=' . $arr['idartlang'];
|
||||
}
|
||||
}
|
||||
$param[] = 'foo=bar';
|
||||
return 'front_content.php?' . implode('&', $param);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Resolves variables of an page (idcat, idart, idclient, idlang, etc.) by
|
||||
* processing passed url using ModRewriteController
|
||||
*
|
||||
* @param string $url Url to resolve
|
||||
* @return array Assoziative array with resolved data
|
||||
*/
|
||||
public function resolveUrl($url)
|
||||
{
|
||||
// some globals to reset
|
||||
$aGlobs = array(
|
||||
'mr_preprocessedPageError', 'idart', 'idcat'
|
||||
);
|
||||
foreach ($aGlobs as $p => $k) {
|
||||
if (isset($GLOBALS[$k])) { unset($GLOBALS[$k]); }
|
||||
}
|
||||
|
||||
$aReturn = array();
|
||||
|
||||
// create an mod rewrite controller instance and execute processing
|
||||
$oMRController = new ModRewriteController($url);
|
||||
$oMRController->execute();
|
||||
|
||||
if ($oMRController->errorOccured()) {
|
||||
|
||||
// an error occured (idcat and or idart couldn't catched by controller)
|
||||
$aReturn['mr_preprocessedPageError'] = 1;
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR test class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @author Murat Purc <murat@purc.de>
|
||||
* @copyright four for business AG <www.4fb.de>
|
||||
* @license http://www.contenido.org/license/LIZENZ.txt
|
||||
* @link http://www.4fb.de
|
||||
* @link http://www.contenido.org
|
||||
*/
|
||||
|
||||
if (!defined('CON_FRAMEWORK')) {
|
||||
die('Illegal call');
|
||||
}
|
||||
|
||||
/**
|
||||
* Mod rewrite test class.
|
||||
*
|
||||
* @author Murat Purc <murat@purc.de>
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
*/
|
||||
class ModRewriteTest {
|
||||
|
||||
/**
|
||||
* Global $cfg array
|
||||
* @var array
|
||||
*/
|
||||
protected $_aCfg;
|
||||
|
||||
/**
|
||||
* Global $cfg['tab'] array
|
||||
* @var array
|
||||
*/
|
||||
protected $_aCfgTab;
|
||||
|
||||
/**
|
||||
* Max items to process
|
||||
* @var int
|
||||
*/
|
||||
protected $_iMaxItems;
|
||||
|
||||
/**
|
||||
* Actual resolved url
|
||||
* @var string
|
||||
*/
|
||||
protected $_sResolvedUrl;
|
||||
|
||||
/**
|
||||
* Routing found flag
|
||||
* @var bool
|
||||
*/
|
||||
protected $_bRoutingFound = false;
|
||||
|
||||
/**
|
||||
* Constuctor
|
||||
* @param int $maxItems Max items (urls to articles/categories) to process
|
||||
*/
|
||||
public function __construct($maxItems) {
|
||||
global $cfg;
|
||||
$this->_aCfg = & $cfg;
|
||||
$this->_aCfgTab = & $cfg['tab'];
|
||||
$this->_iMaxItems = $maxItems;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns resolved URL
|
||||
*
|
||||
* @return bool Resolved URL
|
||||
*/
|
||||
public function getResolvedUrl() {
|
||||
return $this->_sResolvedUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns flagz about found routing
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getRoutingFoundState() {
|
||||
return $this->_bRoutingFound;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetchs full structure of the installation (categories and articles) and returns it back.
|
||||
*
|
||||
* @param int $idclient Client id
|
||||
* @param int $idlang Language id
|
||||
* @return array Full structure as follows
|
||||
* <code>
|
||||
* $arr[idcat] = Category dataset
|
||||
* $arr[idcat]['articles'][idart] = Article dataset
|
||||
* </code>
|
||||
*/
|
||||
public function fetchFullStructure($idclient = null, $idlang = null) {
|
||||
global $client, $lang;
|
||||
|
||||
$db = new DB_Contenido();
|
||||
$db2 = new DB_Contenido();
|
||||
|
||||
if (!$idclient || (int) $idclient == 0) {
|
||||
$idclient = $client;
|
||||
}
|
||||
if (!$idlang || (int) $idlang == 0) {
|
||||
$idlang = $lang;
|
||||
}
|
||||
|
||||
$aTab = $this->_aCfgTab;
|
||||
|
||||
$aStruct = array();
|
||||
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
" . $aTab['cat_tree'] . " AS a,
|
||||
" . $aTab['cat_lang'] . " AS b,
|
||||
" . $aTab['cat'] . " AS c
|
||||
WHERE
|
||||
a.idcat = b.idcat AND
|
||||
c.idcat = a.idcat AND
|
||||
c.idclient = '" . $idclient . "' AND
|
||||
b.idlang = '" . $idlang . "'
|
||||
ORDER BY
|
||||
a.idtree";
|
||||
|
||||
$db->query($sql);
|
||||
|
||||
$counter = 0;
|
||||
|
||||
while ($db->next_record()) {
|
||||
|
||||
if (++$counter == $this->_iMaxItems) {
|
||||
break; // break this loop
|
||||
}
|
||||
|
||||
$idcat = $db->f('idcat');
|
||||
$aStruct[$idcat] = $db->Record;
|
||||
$aStruct[$idcat]['articles'] = array();
|
||||
|
||||
$sql2 = "SELECT
|
||||
*
|
||||
FROM
|
||||
" . $aTab['cat_art'] . " AS a,
|
||||
" . $aTab['art'] . " AS b,
|
||||
" . $aTab['art_lang'] . " AS c
|
||||
WHERE
|
||||
a.idcat = '" . $idcat . "' AND
|
||||
b.idart = a.idart AND
|
||||
c.idart = a.idart AND
|
||||
c.idlang = '" . $idlang . "' AND
|
||||
b.idclient = '" . $idclient . "'
|
||||
ORDER BY
|
||||
c.title ASC";
|
||||
|
||||
$db2->query($sql2);
|
||||
|
||||
while ($db2->next_record()) {
|
||||
$idart = $db2->f('idart');
|
||||
$aStruct[$idcat]['articles'][$idart] = $db2->Record;
|
||||
if (++$counter == $this->_iMaxItems) {
|
||||
break 2; // break this and also superior loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $aStruct;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an URL using passed data.
|
||||
*
|
||||
* The result is used to generate seo urls...
|
||||
*
|
||||
* @param array $arr Assoziative array with some data as follows:
|
||||
* <code>
|
||||
* $arr['idcat']
|
||||
* $arr['idart']
|
||||
* $arr['idcatart']
|
||||
* $arr['idartlang']
|
||||
* </code>
|
||||
* @param string $type Either 'c' or 'a' (category or article). If set to
|
||||
* 'c' only the parameter idcat will be added to the URL
|
||||
*/
|
||||
public function composeURL($arr, $type) {
|
||||
$type = ($type == 'a') ? 'a' : 'c';
|
||||
|
||||
$param = array();
|
||||
|
||||
if ($type == 'c') {
|
||||
$param[] = 'idcat=' . $arr['idcat'];
|
||||
} else {
|
||||
if (mr_getRequest('idart')) {
|
||||
$param[] = 'idart=' . $arr['idart'];
|
||||
}
|
||||
if (mr_getRequest('idcat')) {
|
||||
$param[] = 'idcat=' . $arr['idcat'];
|
||||
}
|
||||
if (mr_getRequest('idcatart')) {
|
||||
$param[] = 'idcatart=' . $arr['idcatart'];
|
||||
}
|
||||
if (mr_getRequest('idartlang')) {
|
||||
$param[] = 'idartlang=' . $arr['idartlang'];
|
||||
}
|
||||
}
|
||||
$param[] = 'foo=bar';
|
||||
return 'front_content.php?' . implode('&', $param);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves variables of an page (idcat, idart, idclient, idlang, etc.) by
|
||||
* processing passed url using ModRewriteController
|
||||
*
|
||||
* @param string $url Url to resolve
|
||||
* @return array Assoziative array with resolved data
|
||||
*/
|
||||
public function resolveUrl($url) {
|
||||
// some globals to reset
|
||||
$aGlobs = array(
|
||||
'mr_preprocessedPageError', 'idart', 'idcat'
|
||||
);
|
||||
foreach ($aGlobs as $p => $k) {
|
||||
if (isset($GLOBALS[$k])) {
|
||||
unset($GLOBALS[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
$aReturn = array();
|
||||
|
||||
// create an mod rewrite controller instance and execute processing
|
||||
$oMRController = new ModRewriteController($url);
|
||||
$oMRController->execute();
|
||||
|
||||
if ($oMRController->errorOccured()) {
|
||||
|
||||
// an error occured (idcat and or idart couldn't catched by controller)
|
||||
$aReturn['mr_preprocessedPageError'] = 1;
|
||||
$aReturn['error'] = $oMRController->getError();
|
||||
|
||||
$this->_sResolvedUrl = '';
|
||||
$this->_bRoutingFound = false;
|
||||
} else {
|
||||
|
||||
// set some global variables
|
||||
|
||||
$this->_sResolvedUrl = $oMRController->getResolvedUrl();
|
||||
$this->_bRoutingFound = $oMRController->getRoutingFoundState();
|
||||
|
||||
if ($oMRController->getClient()) {
|
||||
$aReturn['client'] = $oMRController->getClient();
|
||||
}
|
||||
|
||||
if ($oMRController->getChangeClient()) {
|
||||
$aReturn['changeclient'] = $oMRController->getChangeClient();
|
||||
}
|
||||
|
||||
if ($oMRController->getLang()) {
|
||||
$aReturn['lang'] = $oMRController->getLang();
|
||||
}
|
||||
|
||||
if ($oMRController->getChangeLang()) {
|
||||
$aReturn['changelang'] = $oMRController->getChangeLang();
|
||||
}
|
||||
|
||||
if ($oMRController->getIdArt()) {
|
||||
$aReturn['idart'] = $oMRController->getIdArt();
|
||||
}
|
||||
|
||||
if ($oMRController->getIdCat()) {
|
||||
$aReturn['idcat'] = $oMRController->getIdCat();
|
||||
}
|
||||
|
||||
if ($oMRController->getPath()) {
|
||||
$aReturn['path'] = $oMRController->getPath();
|
||||
}
|
||||
}
|
||||
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a readable string from passed resolved data array.
|
||||
*
|
||||
* @param array Assoziative array with resolved data
|
||||
* @return string Readable resolved data
|
||||
*/
|
||||
public function getReadableResolvedData(array $data) {
|
||||
// compose resolved string
|
||||
$ret = '';
|
||||
foreach ($data as $k => $v) {
|
||||
$ret .= $k . '=' . $v . '; ';
|
||||
}
|
||||
$ret = substr($ret, 0, strlen($ret) - 2);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,343 +1,314 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Includes mod rewrite url stack class.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-09-10
|
||||
*
|
||||
* $Id: class.modrewriteurlstack.php 306 2014-03-13 23:03:26Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or 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 Contenido Backend plugins
|
||||
* @subpackage ModRewrite
|
||||
*/
|
||||
class ModRewriteUrlStack
|
||||
{
|
||||
|
||||
/**
|
||||
* Self instance
|
||||
*
|
||||
* @var ModRewriteUrlStack
|
||||
*/
|
||||
private static $_instance;
|
||||
|
||||
/**
|
||||
* Database object
|
||||
*
|
||||
* @var DB_ConLite
|
||||
*/
|
||||
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_ConLite();
|
||||
$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('&', '&', $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);
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR url stack class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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('&', '&', $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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,342 +1,306 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Includes Mod Rewrite url utility class.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-05-xx
|
||||
*
|
||||
* $Id: class.modrewriteurlutil.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or 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 Contenido Backend plugins
|
||||
* @subpackage ModRewrite
|
||||
*/
|
||||
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'];
|
||||
}
|
||||
|
||||
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 $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
|
||||
* @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;
|
||||
}
|
||||
|
||||
<?php
|
||||
/**
|
||||
* AMR url utility class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,407 +1,426 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Content controller
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: class.modrewrite_content_controller.php 312 2014-06-18 11:01:08Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
plugin_include(
|
||||
'mod_rewrite', 'classes/controller/class.modrewrite_controller_abstract.php'
|
||||
);
|
||||
|
||||
|
||||
class ModRewrite_ContentController extends ModRewrite_ControllerAbstract
|
||||
{
|
||||
|
||||
public function indexAction()
|
||||
{
|
||||
// donut
|
||||
}
|
||||
|
||||
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 = clHtmlEntities($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 = clHtmlEntities($categorySeperator);
|
||||
$aMR['mod_rewrite']['category_seperator'] = $categorySeperator;
|
||||
$this->_oView->category_word_separator = clHtmlEntities($categoryWordSeperator);
|
||||
$aMR['mod_rewrite']['category_word_seperator'] = $categoryWordSeperator;
|
||||
$this->_oView->article_separator = clHtmlEntities($articleSeperator);
|
||||
$aMR['mod_rewrite']['article_seperator'] = $articleSeperator;
|
||||
$this->_oView->article_word_separator = clHtmlEntities($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 = clHtmlEntities($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 = clHtmlEntities($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 = clHtmlEntities($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 = 'Configuration has been saved';
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR Content controller class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,137 +1,143 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Content expert controller
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: class.modrewrite_contentexpert_controller.php 209 2013-01-24 12:31:00Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_controller_abstract.php');
|
||||
|
||||
|
||||
class ModRewrite_ContentExpertController extends ModRewrite_ControllerAbstract
|
||||
{
|
||||
protected $_htaccessRestrictive = '';
|
||||
protected $_htaccessSimple = '';
|
||||
|
||||
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';
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute index action
|
||||
*/
|
||||
public function indexAction()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
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(Contenido_Notification::LEVEL_WARNING, '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(Contenido_Notification::LEVEL_WARNING, '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(Contenido_Notification::LEVEL_INFO, $msg);
|
||||
}
|
||||
|
||||
|
||||
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}');
|
||||
}
|
||||
|
||||
|
||||
public function resetAction()
|
||||
{
|
||||
// recreate all aliases
|
||||
ModRewrite::recreateAliases(false);
|
||||
$this->_oView->content_before = $this->_notifyBox('info', 'Alle Aliase wurden zurückgesetzt');
|
||||
}
|
||||
|
||||
|
||||
public function resetEmptyAction()
|
||||
{
|
||||
// recreate only empty aliases
|
||||
ModRewrite::recreateAliases(true);
|
||||
$this->_oView->content_before = $this->_notifyBox('info', 'Nur leere Aliase wurden zurückgesetzt');
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR Content expert controller class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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ü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ückgesetzt');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,161 +1,176 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Content test controller
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: class.modrewrite_contenttest_controller.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
plugin_include('mod_rewrite', 'classes/class.modrewritetest.php');
|
||||
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_controller_abstract.php');
|
||||
|
||||
|
||||
class ModRewrite_ContentTestController extends ModRewrite_ControllerAbstract
|
||||
{
|
||||
protected $_iMaxItems = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute index action
|
||||
*/
|
||||
public function indexAction()
|
||||
{
|
||||
$this->_oView->content = '';
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute 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);
|
||||
$resUrl = $oMRTest->getResolvedUrl();
|
||||
$color = 'green';
|
||||
|
||||
if ($url !== $resUrl) {
|
||||
if ($oMRTest->getRoutingFoundState()) {
|
||||
$successCounter++;
|
||||
$resUrl = 'route to -> ' . $resUrl;
|
||||
} else {
|
||||
$color = 'red';
|
||||
$failCounter++;
|
||||
}
|
||||
} else {
|
||||
$successCounter++;
|
||||
}
|
||||
|
||||
$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('{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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR test controller
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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 -> ' . $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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,148 +1,226 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Abstract controller
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: class.modrewrite_controller_abstract.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
abstract class ModRewrite_ControllerAbstract
|
||||
{
|
||||
|
||||
protected $_oView;
|
||||
|
||||
protected $_cfg;
|
||||
|
||||
protected $_client;
|
||||
|
||||
protected $_area;
|
||||
|
||||
protected $_action;
|
||||
|
||||
protected $_frame;
|
||||
|
||||
protected $_contenido;
|
||||
|
||||
protected $_template = null;
|
||||
|
||||
protected $_properties = array();
|
||||
|
||||
protected $_debug = false;
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
public function setView($oView)
|
||||
{
|
||||
if (is_object($oView)) {
|
||||
$this->_oView = $oView;
|
||||
}
|
||||
}
|
||||
|
||||
public function getView()
|
||||
{
|
||||
return $this->_oView;
|
||||
}
|
||||
|
||||
public function setProperty($key, $value)
|
||||
{
|
||||
$this->_properties[$key] = $value;
|
||||
}
|
||||
|
||||
public function getProperty($key, $default = null)
|
||||
{
|
||||
return (isset($this->_properties[$key])) ? $this->_properties[$key] : $default;
|
||||
}
|
||||
|
||||
public function setTemplate($sTemplate)
|
||||
{
|
||||
$this->_template = $sTemplate;
|
||||
}
|
||||
|
||||
public function getTemplate()
|
||||
{
|
||||
return $this->_template;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
protected function _getParam($key, $default = null)
|
||||
{
|
||||
if (isset($_GET[$key])) {
|
||||
return $_GET[$key];
|
||||
} elseif (isset($_POST[$key])) {
|
||||
return $_POST[$key];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
|
||||
protected function _notifyBox($type, $msg)
|
||||
{
|
||||
global $notification;
|
||||
return $notification->returnNotification($type, $msg) . '<br>';
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* AMR abstract controller class
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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>';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,43 +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;
|
||||
}
|
||||
/*
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -1,174 +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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,81 +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 © 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>
|
||||
<!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 © 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>
|
|
@ -1,118 +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 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);
|
|
@ -1,2 +1,2 @@
|
|||
/*Plugin by: Ara Abcarians: http://ara-abcarians.com License: http://creativecommons.org/licenses/by/3.0/ */
|
||||
/*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,{}))
|
Dateidiff unterdrückt, weil mindestens eine Zeile zu lang ist
|
@ -1,71 +1,69 @@
|
|||
################################################################################
|
||||
# Contenido AMR plugin restrictive rewrite rules set.
|
||||
#
|
||||
# Contains strict rules, each rewrite exclusion must be set manually.
|
||||
# - Exclude requests to directories usage/, contenido/, setup/, cms/upload/
|
||||
# - Exclude requests to cms/front_content.php
|
||||
# - Pass thru requests to common ressources (pictures, movies, js, css, pdf)
|
||||
#
|
||||
# @version 0.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.8.15
|
||||
#
|
||||
# $Id: htaccess_restrictive.txt 447 2016-07-08 14:04:12Z oldperl $
|
||||
################################################################################
|
||||
|
||||
|
||||
# Enable following lines to run PHP5 on 1und1.de (1and1.com)
|
||||
#AddType x-mapp-php5 .php
|
||||
#AddHandler x-mapp-php5 .php
|
||||
|
||||
<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]
|
||||
|
||||
|
||||
# One RewriteRule to rule them all.
|
||||
# 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|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>
|
||||
################################################################################
|
||||
# CONTENIDO AMR plugin restrictive rewrite rules set.
|
||||
#
|
||||
# Contains strict rules, each rewrite exclusion must be set manually.
|
||||
# - Exclude requests to directories usage/, contenido/, setup/, cms/upload/
|
||||
# - Exclude requests to cms/front_content.php
|
||||
# - Pass thru requests to common ressources (pictures, movies, js, css, pdf)
|
||||
#
|
||||
# @version 0.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
|
||||
#
|
||||
# $Id: htaccess_restrictive.txt 3503 2012-10-19 19:49:39Z xmurrix $
|
||||
################################################################################
|
||||
|
||||
|
||||
# Enable following lines to run PHP5 on 1und1.de (1and1.com)
|
||||
#AddType x-mapp-php5 .php
|
||||
#AddHandler x-mapp-php5 .php
|
||||
|
||||
<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]
|
||||
|
||||
|
||||
# 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|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>
|
||||
|
|
|
@ -1,69 +1,69 @@
|
|||
################################################################################
|
||||
# Contenido AMR plugin simple rewrite rules set.
|
||||
#
|
||||
# Contains few easy to handle rewrite rules.
|
||||
#
|
||||
# @version 0.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.8.15
|
||||
#
|
||||
# $Id: htaccess_simple.txt 2 2011-07-20 12:00:48Z oldperl $
|
||||
################################################################################
|
||||
|
||||
|
||||
# Enable following lines to run PHP5 on 1und1.de (1and1.com)
|
||||
#AddType x-mapp-php5 .php
|
||||
#AddHandler x-mapp-php5 .php
|
||||
|
||||
<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 valid symlinks (-s), not empty files (-l) and folders (-d)
|
||||
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>
|
||||
################################################################################
|
||||
# CONTENIDO AMR plugin simple rewrite rules set.
|
||||
#
|
||||
# Contains few easy to handle rewrite rules.
|
||||
#
|
||||
# @version 0.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
|
||||
#
|
||||
# $Id: htaccess_simple.txt 3503 2012-10-19 19:49:39Z xmurrix $
|
||||
################################################################################
|
||||
|
||||
|
||||
# Enable following lines to run PHP5 on 1und1.de (1and1.com)
|
||||
#AddType x-mapp-php5 .php
|
||||
#AddHandler x-mapp-php5 .php
|
||||
|
||||
<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>
|
||||
|
|
|
@ -1,128 +1,114 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* 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.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-05-xx
|
||||
*
|
||||
* $Id: config.mod_rewrite_default.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or 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;
|
||||
|
||||
<?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:$
|
||||
* @id $Id$:
|
||||
* @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;
|
||||
|
||||
|
|
|
@ -1,178 +1,167 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* 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.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-05-xx
|
||||
*
|
||||
* $Id: config.plugin.php 275 2013-09-11 12:49:00Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
####################################################################################################
|
||||
/**
|
||||
* 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");
|
||||
####################################################################################################
|
||||
|
||||
|
||||
global $cfg, $contenido, $mr_statics;
|
||||
|
||||
// used for caching
|
||||
$mr_statics = array();
|
||||
|
||||
// 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
|
||||
plugin_include('mod_rewrite', 'classes/class.modrewritedebugger.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.modrewriteurlstack.php');
|
||||
plugin_include('mod_rewrite', 'classes/class.modrewriteurlutil.php');
|
||||
plugin_include('mod_rewrite', 'includes/functions.mod_rewrite.php');
|
||||
|
||||
|
||||
// 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();
|
||||
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);
|
||||
|
||||
// administration > users > area translations
|
||||
global $lngAct, $_cecRegistry;
|
||||
$lngAct['mod_rewrite']['mod_rewrite'] = i18n("MR-Options", "mod_rewrite");
|
||||
$lngAct['mod_rewrite']['mod_rewrite_expert'] = i18n("Expert Options", "mod_rewrite");
|
||||
$lngAct['mod_rewrite']['mod_rewrite_test'] = i18n("MR Test Area", "mod_rewrite");
|
||||
<?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:$
|
||||
* @id $Id$:
|
||||
* @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);
|
||||
|
|
|
@ -1,115 +1,102 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* 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
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-05-xx
|
||||
*
|
||||
* $Id: front_content_controller.php 220 2013-02-14 08:40:43Z Mansveld $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
global $client, $changeclient, $cfgClient, $lang, $changelang, $idart, $idcat, $path;
|
||||
|
||||
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);
|
||||
header("HTTP/1.0 404 Not found");
|
||||
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__);
|
||||
ModRewriteDebugger::add($idart, 'mr $idart', __FILE__);
|
||||
ModRewriteDebugger::add($idcat, 'mr $idcat', __FILE__);
|
||||
ModRewriteDebugger::add($lang, 'mr $lang', __FILE__);
|
||||
ModRewriteDebugger::add($client, 'mr $client', __FILE__);
|
||||
|
||||
<?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:$
|
||||
* @id $Id$:
|
||||
* @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-Diff unterdrückt, da er zu groß ist
Diff laden
|
@ -1,324 +1,312 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Plugin mod_rewrite backend include file to administer settings (in content frame)
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2008-04-22
|
||||
* modified 2011-05-17 Murat Purc, added check for available client id
|
||||
*
|
||||
* $Id: include.mod_rewrite_content.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
################################################################################
|
||||
##### Initialization
|
||||
|
||||
if ((int) $client <= 0) {
|
||||
// if there is no client selected, display empty page
|
||||
$oPage = new cPage();
|
||||
$sMsg = $notification->returnNotification(
|
||||
Contenido_Notification::LEVEL_ERROR, i18n("No Client selected")
|
||||
);
|
||||
$oPage->setContent($sMsg);
|
||||
$oPage->render();
|
||||
return;
|
||||
}
|
||||
|
||||
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_content_controller.php');
|
||||
|
||||
$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"' : '';
|
||||
|
||||
// mr copy .htaccess
|
||||
$aHtaccessInfo = ModRewrite::getHtaccessInfo();
|
||||
|
||||
if ($aHtaccessInfo['has_htaccess']) {
|
||||
$oView->htaccess_info_css = 'display:none;';
|
||||
} else {
|
||||
$oView->htaccess_info_css = 'display:table-row;';
|
||||
}
|
||||
|
||||
// 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');
|
||||
|
||||
$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>');
|
||||
|
||||
$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 -> 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 />A 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&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&lang=2&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 UrlBuilder\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&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&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'
|
||||
);
|
||||
|
||||
<?php
|
||||
/**
|
||||
* Plugin mod_rewrite backend include file to administer settings (in content frame)
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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 -> 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&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&lang=2&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&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&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'
|
||||
);
|
||||
|
||||
|
|
|
@ -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
|
||||
);
|
|
@ -1,169 +1,119 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Plugin mod_rewrite backend include file to administer expert (in content frame)
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
* modified 2011-05-17 Murat Purc, added check for available client id
|
||||
*
|
||||
* $Id: include.mod_rewrite_contentexpert.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
################################################################################
|
||||
##### Initialization
|
||||
|
||||
if ((int) $client <= 0) {
|
||||
// if there is no client selected, display empty page
|
||||
$oPage = new cPage();
|
||||
$sMsg = $notification->returnNotification(
|
||||
Contenido_Notification::LEVEL_ERROR, i18n("No Client selected")
|
||||
);
|
||||
$oPage->setContent($sMsg);
|
||||
$oPage->render();
|
||||
return;
|
||||
}
|
||||
|
||||
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_contentexpert_controller.php');
|
||||
|
||||
$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 sipmle 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 />
|
||||
{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 />
|
||||
{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'
|
||||
);
|
||||
|
||||
<?php
|
||||
/**
|
||||
* Plugin mod_rewrite backend include file to administer expert (in content frame)
|
||||
*
|
||||
* @package plugin
|
||||
* @subpackage Mod Rewrite
|
||||
* @version SVN Revision $Rev:$
|
||||
* @id $Id$:
|
||||
* @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> {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> {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'
|
||||
);
|
||||
|
||||
|
|
|
@ -1,108 +1,83 @@
|
|||
<?php
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* 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.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
* modified 2011-05-17 Murat Purc, added check for available client id
|
||||
*
|
||||
* $Id: include.mod_rewrite_contenttest.php 2 2011-07-20 12:00:48Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
defined('CON_FRAMEWORK') or die('Illegal call');
|
||||
|
||||
|
||||
################################################################################
|
||||
##### Initialization
|
||||
|
||||
if ((int) $client <= 0) {
|
||||
// if there is no client selected, display empty page
|
||||
$oPage = new cPage();
|
||||
$sMsg = $notification->returnNotification(
|
||||
Contenido_Notification::LEVEL_ERROR, i18n("No Client selected")
|
||||
);
|
||||
$oPage->setContent($sMsg);
|
||||
$oPage->render();
|
||||
return;
|
||||
}
|
||||
|
||||
plugin_include('mod_rewrite', 'classes/controller/class.modrewrite_contenttest_controller.php');
|
||||
|
||||
|
||||
################################################################################
|
||||
##### 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>
|
||||
{pref}Builder in: {url_in}
|
||||
{pref}Builder out: {url_out}
|
||||
{pref}<span style="color:{color}">Resolved URL: {url_res}</span>
|
||||
{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'
|
||||
);
|
||||
<?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:$
|
||||
* @id $Id$:
|
||||
* @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-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
|
@ -1,22 +1,24 @@
|
|||
./classes/class.modrewriteurlutil.php
|
||||
./classes/class.modrewriteurlstack.php
|
||||
./classes/class.modrewritecontroller.php
|
||||
./classes/class.modrewritedebugger.php
|
||||
./classes/class.modrewrite.php
|
||||
./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/controller/class.modrewrite_contentexpert_controller.php
|
||||
./classes/controller/class.modrewrite_contenttest_controller.php
|
||||
./classes/class.modrewritebase.php
|
||||
./classes/class.modrewritedebugger.php
|
||||
./classes/class.modrewritetest.php
|
||||
./external/aToolTip/demos.html
|
||||
./templates/contenttest.html
|
||||
./templates/contentexpert.html
|
||||
./templates/content.html
|
||||
./includes/functions.mod_rewrite.php
|
||||
./includes/include.mod_rewrite_content.php
|
||||
./includes/config.mod_rewrite_default.php
|
||||
./includes/include.mod_rewrite_contenttest.php
|
||||
./includes/config.plugin.php
|
||||
./includes/front_content_controller.php
|
||||
./includes/include.mod_rewrite_contentexpert.php
|
||||
./classes/class.modrewrite.php
|
||||
./classes/class.modrewriteurlstack.php
|
||||
./classes/class.modrewritebase.php
|
||||
./classes/class.modrewritecontroller.php
|
||||
./classes/class.modrewriteurlutil.php
|
||||
|
|
|
@ -1,294 +0,0 @@
|
|||
Advanced Mod Rewrite Plugin für Contenido >= 4.8.15
|
||||
|
||||
################################################################################
|
||||
TOC (Table of contents)
|
||||
|
||||
- BESCHREIBUNG
|
||||
- CHANGELOG
|
||||
- BEKANNTE BUGS
|
||||
- FEATURES
|
||||
- VORAUSSETZUNGEN
|
||||
- INSTALLATION
|
||||
- FAQ
|
||||
- ADVANCED MOD REWRITE THEMEN IM CONTENIDO FORUM
|
||||
- SCHLUSSBEMERKUNG
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
BESCHREIBUNG
|
||||
|
||||
Das Plugin Advanced Mod Rewrite ist eine Erweiterung für das Contenido-CMS zur Generierung von
|
||||
alternativen URLs.
|
||||
|
||||
Normalerweise werden die URLs zu Seiten einer auf ein CMS (z. B. Contenido) basierenden
|
||||
Webpräsenz nach dem Muster "/index.php?page=12&language=de" generiert, also in Form von
|
||||
dynamischen URLs. Eine Möglichkeit solche dynamische URLs zu Webseiten, deren Inhalt in der Regel
|
||||
aus Datenbanken kommen, gegen statische URLs wie z. B. "/de/page-name.html" umzustellen, gibt es in
|
||||
Kombination mit dem Apache mod_rewrite-Modul. Dabei werden die URLs zu den Seiten als sogenannte
|
||||
"Clean URLs" ausgegeben, Requests zur der gewünschten Ressource werden vom Webserver nach
|
||||
definierten Regeln verarbeitet und intern an die Webanwendung weitergeleitet.
|
||||
|
||||
Solche statische URLs können aufgrund der Keyworddichte (die Ressource beschreibende Wörter in der
|
||||
URL) vorteilhaft für Suchmaschinen sein und User können sich die URLs einfacher merken.
|
||||
|
||||
Bei einer Contenido-Installation lassen sich solche URLs mit dem Advanced Mod Rewrite Plugin
|
||||
generieren, URLs zu Frontendseiten, wie z. B. "/cms/front_content.php?idart=12&lang=1" werden
|
||||
vom Plugin als statische URLs wie "/de/page-name.html" ausgegeben. Diverse Einstellungen zum
|
||||
Ausgabeformat der URLs lassen sich im Contenido-Backend konfigurieren.
|
||||
|
||||
Das Plugin Advanced Mod Rewrite basiert auf die geniale Erweiterung Advanced Mod Rewrite für
|
||||
Contenido, welches als Bundle von stese bis zur Contenido Version 4.6.15 entwickelt und betreut
|
||||
wurde.
|
||||
|
||||
Wichtiger Aspekt bei der Umsetzung war die Implementierung als Plugin mit so wenig wie möglichen
|
||||
Eingriffen in den Contenido Core (trotzdem ging es nicht ohne einige Anpassungen an bestimmten
|
||||
Sourcen).
|
||||
|
||||
Daher enthält das Archiv einige überarbeitete Contenido Sourcen, die eventuell nicht auf dem
|
||||
neuesten Stand sein können.
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
CHANGELOG
|
||||
|
||||
2011-04-11 Advanced Mod Rewrite Plugin integration into the Contenido core
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
BEKANNTE BUGS
|
||||
|
||||
Urls sollten unbedingt eine Endung wie z. B. '.html' bekommen, da ansonsten die Erkennungsroutine den
|
||||
Artikel aus der ankommenden URL nicht ermitteln kann.
|
||||
|
||||
Wenn der Clean-URL die Sprache oder der Mandant vorangestellt wird, funktioniert die Fehlererkennung
|
||||
unter Unständen nicht richtig, d. h. es gibt keine Weiterleitung zur Fehlerseite, sofern dies im
|
||||
Plugin eingestellt wurde.
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
FEATURES
|
||||
|
||||
- Erstellung Suchmaschinenoptimierter URLs, Contenido interne URLs wie
|
||||
/front_content.php?idcat=12&idart=34 werden z. B. als /kategoriename/artikelname.html umschrieben
|
||||
- Unterstützung mehrerer Sprachen
|
||||
- Unterstützung mehrerer Mandanten im gleichen Verzeichnis
|
||||
- Umschreiben der URLs entweder bei der Ausgabe des HTML Codes oder beim Generieren des Codes der
|
||||
Seiten
|
||||
- Routing von URLs (Umleiten eingehender URLs auf andere Ziel-URLs)
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
VORAUSSETZUNGEN
|
||||
|
||||
- Alle Voraussetzungen von Contenido 4.8.x gelten auch für das Plugin
|
||||
- PHP ab Version 5.1 (Das Plugin war bis Version 0.3.3 PHP 4.4.x kompatibel)
|
||||
- Apache HTTP Server 2 mit Mod Rewrite
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
INSTALLATION
|
||||
|
||||
Das Plugin kann im Contenido Setupprocess installiert werden.
|
||||
|
||||
################################################################################
|
||||
WICHTIGES ZUM INHALT
|
||||
|
||||
ALLGEMEIN
|
||||
=========
|
||||
|
||||
.htaccess:
|
||||
----------
|
||||
Die Konfiguration des Apache, in der das mod_rewrite-Modul aktiviert und mit diversen Anweisungen
|
||||
konfiguriert wird. Die Einstellungen bewirken, dass ankommende Anfragen wie z. B.
|
||||
/kategorie/artikel.html an die front_content.php im Mandantenverzeichnis weitergeleitet werden.
|
||||
|
||||
Die .htaccess liegt nicht im Contenido Installationsverzeichnis vor, es muss entweder dorthin
|
||||
kopiert oder eine vorhanene .htaccess Datei angepasst werden.
|
||||
|
||||
Als Vorlage existieren folgende 2 Versionen der .htaccess:
|
||||
|
||||
htaccess_restrictive.txt:
|
||||
Enthält Regeln mit restriktiveren Einstellungen.
|
||||
Alle Anfragen, die auf die Dateienendung js, ico, gif, jpg, jpeg, png, css, pdf gehen, werden vom
|
||||
Umschreiben ausgeschlossen. Alle anderen Anfragen, werden an front_content.php umschrieben.
|
||||
Ausgeschlossen davon sind 'contenido/', 'setup/', 'cms/upload', 'cms/front_content.php', usw.
|
||||
Jede neue Ressource, die vom Umschreiben ausgeschlossen werden soll, muss explizit definiert werden.
|
||||
|
||||
htaccess_simple.txt:
|
||||
Enthält eine einfachere Sammlung an Regeln. Alle Anfragen, die auf gültige symlinks, Verzeichnisse oder
|
||||
Dateien gehen, werden vom Umschreiben ausgeschlossen. Restliche Anfragen werden an front_content.php
|
||||
umschrieben.
|
||||
|
||||
|
||||
contenido/plugins/mod_rewrite/*:
|
||||
--------------------------------
|
||||
Die Sourcen des Plugins.
|
||||
|
||||
contenido/classes/UrlBuilder/Contenido_UrlBuilder_MR.class.php:
|
||||
---------------------------------------------------------------
|
||||
UrlBuilder Klasse des Plugins (seit Version 0.4.0), zum Generieren der URLs anhand der Pluginkonfiguration.
|
||||
Verwendet die in den Contenido Core implementierte UrlBuilder-Funktionalität und erweitert diesen um die
|
||||
pluginspezifischen Features.
|
||||
|
||||
|
||||
################################################################################
|
||||
FAQ
|
||||
|
||||
Der Plugininstaller lässt sich nicht aufrufen, wie kann ich dennoch das Plugin installieren?
|
||||
--------------------------------------------------------------------------------------------
|
||||
Normalerweise wird der Plugininstaller mit folgender URL aufgerufen:
|
||||
http://localhost/contenido/plugins/mod_rewrite/install.php
|
||||
("http://localhost/" ist eventuell gegen anderen virtual Host oder Domainnamen ersetzen)
|
||||
|
||||
Es erscheint das Anmeldeformular zum Backend, über den man sich am System anmelden kann. Nach
|
||||
erfolgreicher Anmeldung wird man normalerweise zum Plugininstaller weitergeleitet.
|
||||
|
||||
Manchmal kann es vorkommen, dass die Weiterleitung nach der Anmeldung nicht klappt und man nicht den
|
||||
Plugininstaller aufrufen kann.
|
||||
Um dennoch den Installer aufzurufen, reicht es aus, der URL die aktuell gültige Contenido Session ID
|
||||
anzuhängen, z. B. /contenido/plugins/mod_rewrite/install.php?contenido={my_session_id}.
|
||||
|
||||
|
||||
Wie teste ich, ob mod_rewrite am Server richtig konfiguriert ist?
|
||||
-----------------------------------------------------------------
|
||||
Obwohl mod_rewrite am Server installiert ist, kommt es manchmal vor, dass es nicht funktioniert.
|
||||
|
||||
Das kann einfach getestet werden, erstelle eine .htaccess im Rootverzeichnis und schreibe folgendes
|
||||
rein:
|
||||
[code]
|
||||
RewriteEngine on
|
||||
RewriteRule ^ http://www.contenido.org [R,L]
|
||||
[/code]
|
||||
|
||||
Nach Eingabe der URL in die Adresszeile des Browsers, sollte auf www.contenido.org weitergeleitet
|
||||
werden.
|
||||
Wenn nicht, dann kann eines der folgenden Punkte der Grund dafür sein:
|
||||
Das mod_rewrite Modul ist nicht geladen, das ist in der httpd.conf zu setzen
|
||||
[code]
|
||||
LoadModule rewrite_module modules/mod_rewrite.so
|
||||
[/code]
|
||||
|
||||
Die Direktive "AllowOverride" ist nicht korrekt gesetzt. Damit die Angaben in der .htaccess auch
|
||||
benützt werden können, muss für das betreffende Verzeichnis die Direktive "AllowOverride" in der
|
||||
httpd.conf angegeben werden:
|
||||
[code]
|
||||
# Beispielkonfiguration
|
||||
<Directory "/var/www/mywebproject">
|
||||
AllowOverride FileInfo
|
||||
</Directory>
|
||||
[/code]
|
||||
|
||||
|
||||
Wie richte ich Advanced Mod Rewrite für eine Contenidoinstallation in einem Unterverzeichnis ein?
|
||||
-------------------------------------------------------------------------------------------------
|
||||
|
||||
Als Beispiel gehen wir davon aus, dass Contenido im Verzeichnis /mypage/ unterhalb vom Webroot
|
||||
installiert wurde und das Mandantenverzeichnis per default /mypage/cms/ ist.
|
||||
|
||||
In der Pluginkonfiguration (Backend) den Pfad zur .htaccess Datei (aus Sicht des Web-Browsers)
|
||||
folgendermaßen anpassen:
|
||||
[code]
|
||||
/mypage/
|
||||
[/code]
|
||||
|
||||
Die /mypage/.htaccess öffnen und die RewriteBase folgendermaßen anpassen:
|
||||
[code]
|
||||
RewriteBase /mypage/cms/
|
||||
[/code]
|
||||
|
||||
|
||||
Welche Einstellungen sind nötig, wenn das Mandantenverzeichnis das wwwroot ist?
|
||||
-------------------------------------------------------------------------------
|
||||
Normalerweise liegt das Mandantenverzeichnis innerhalb des wwwroot und ist über
|
||||
http://domain.tld/cms/front_content.php erreichbar.
|
||||
Manchmal ist es erwünscht, dass der Ordner /cms/ in der URL nicht sichbar sein soll, also
|
||||
erreichbar über http://domain.tld/front_content.php.
|
||||
|
||||
In diesem Fall sind zwei Anpassungen nötig, damit Mod Rewrite korrekt funktioniert:
|
||||
1. Die .htaccess Datei in das Verzeichnis /cms/ kopieren, da die Datei im wwwroot sein muss.
|
||||
2. In der .htaccess die RewriteBase Option anpassen
|
||||
|
||||
# von
|
||||
RewriteBase /cms
|
||||
|
||||
# auf
|
||||
RewriteBase /
|
||||
|
||||
|
||||
Wie kann ich das Verarbeiten bestimmter Seiten vom Plugin unterbinden?
|
||||
----------------------------------------------------------------------
|
||||
Wenn das Plugin so konfiguriert wurde, dass die URLs bei der Ausgabe des HTML Codes der Seite
|
||||
angepasst werden, kann dieses Verhalten bei manchen Seiten unerwünscht sein. Das kann bei einer
|
||||
Ausgabe der Fall sein, dessen Inhalt kein HTML ist (z. B. Dateidownload), dann macht es keinen Sinn,
|
||||
die Ausgabe anzupassen.
|
||||
|
||||
Ab Contenido 4.8.8 gibt es eine neue Einstellung, mit der man unterbinden kann, dass die Ausgabe im
|
||||
Frontend nicht in den Ausgabepuffer geschrieben wird. Ist dies für eine Seite definiert worden, wird
|
||||
auch die Funktion vom Plugin, die die URLs anpasst, nicht ausgeführt.
|
||||
|
||||
Einstellen lässt sich das über Mandanteneinstellungen wie folgt:
|
||||
[code]
|
||||
Typ Name Wert
|
||||
frontend.no_outputbuffer idart 12,14,40
|
||||
[/code]
|
||||
Inhalte der Artikel mit der id 12, 14 und 40 werden dann von der Ausgabepufferung ausgeschlossen.
|
||||
|
||||
|
||||
Warum werden URLs trotz richtiger Vorraussetzungen nicht umschrieben?
|
||||
---------------------------------------------------------------------
|
||||
Ist die .htaccess und die Konfiguration des Plugins als Fehlerquelle auszuschließen und das Plugin
|
||||
soll die URLs bei der Ausgabe der Seite umschreiben (Standardeinstellung), könnte ein vorzeitig
|
||||
geleerter Ausgabepuffer der Grund sein.
|
||||
|
||||
In der front_content.php wird der HTML-Code in den Ausgabepuffer geschrieben, damit der Code vor der
|
||||
endgültigen Ausgabe bearbeitet werden kann. Das Plugin fügt der Chain
|
||||
"Contenido.Frontend.HTMLCodeOutput" eine eigene Funktion, die den Code aus dem Ausgabepuffer erhält,
|
||||
um die darin URLs zu umschreiben.
|
||||
|
||||
Wird aber der Ausgabepuffer vorher geleert, z. B. durch Verwendung von ob_flush() in einem Modul,
|
||||
wird der Code direkt an den Client rausgeschickt. Das hat den Effekt, dass in der front_content.php
|
||||
kein Code mehr aus dem Ausgabepuffer zur Verfügung steht, der nicht weiterverarbeitet werden kann,
|
||||
auch das Plugin kann dann keine URLs umschreiben.
|
||||
|
||||
|
||||
Alle URLs zu Kategorien werden mit / oder /index.html umschrieben:
|
||||
------------------------------------------------------------------
|
||||
Ist Contenido mit der Konfiguration $cfg["is_start_compatible"] = true;
|
||||
(siehe contenidoincludes/config.php) eingestellt, um die Startartikeldefinition in Kategorien
|
||||
kompatibel zu älteren Contenido-Versionen halten, kann das Plugin die URLs zu Kategorien nicht
|
||||
generieren, weil es diese Konfiguration nicht unterstützt.
|
||||
|
||||
Die einfachste Lösung ist, die Konfiguration $cfg["is_start_compatible"] auf false zu setzen und im
|
||||
Backend in den vorhandenen Kategorien erneut die Startartikel zu setzen.
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
ADVANCED MOD REWRITE THEMEN IM CONTENIDO FORUM
|
||||
|
||||
Plugin Advanced Mod Rewrite für Contenido 4.8.x:
|
||||
http://www.contenido.de/forum/viewtopic.php?t=21578
|
||||
|
||||
Original Advanced Mod Rewrite 4.6.23:
|
||||
http://www.contenido.de/forum/viewtopic.php?t=18454
|
||||
|
||||
Original Advanced Mod Rewrite 4.6.15:
|
||||
http://www.contenido.de/forum/viewtopic.php?t=11162
|
||||
|
||||
Advanced Mod Rewriting Contenido 4.4.4:
|
||||
http://www.contenido.de/forum/viewtopic.php?t=6713
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
SCHLUSSBEMERKUNG
|
||||
|
||||
Benutzung des Plugins auf eigene Gefahr!
|
||||
|
||||
Murat Purc, murat@purc.de
|
|
@ -1,87 +1,96 @@
|
|||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Plugin Advanced Mod Rewrite JavaScript functions.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: mod_rewrite.js 2 2011-07-20 12:00:48Z 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").click(function() {
|
||||
$("#mr_use_language_name").attr("disabled", ($(this).attr("checked") ? "" : "disabled"));
|
||||
});
|
||||
|
||||
$("#mr_use_client").click(function() {
|
||||
$("#mr_use_client_name").attr("disabled", ($(this).attr("checked") ? "" : "disabled"));
|
||||
});
|
||||
|
||||
$("#mr_add_startart_name_to_url").click(function() {
|
||||
$("#mr_default_startart_name").attr("disabled", ($(this).attr("checked") ? "" : "disabled"));
|
||||
if ($(this).attr("checked")) {
|
||||
$("#mr_default_startart_name").removeClass("disabled");
|
||||
} else {
|
||||
$("#mr_default_startart_name").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()
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 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$:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
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()
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,100 +1,101 @@
|
|||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Plugin Advanced Mod Rewrite JavaScript functions.
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend 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.8.15
|
||||
*
|
||||
* {@internal
|
||||
* created 2011-04-11
|
||||
*
|
||||
* $Id: styles.css 2 2011-07-20 12:00:48Z 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;}
|
||||
|
||||
|
||||
/* 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;}
|
||||
/**
|
||||
* 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$:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* 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;}
|
||||
|
|
|
@ -1,366 +1,368 @@
|
|||
<!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</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 -->
|
||||
<tr style="{HTACCESS_INFO_CSS}" class="marked">
|
||||
<td colspan="2" class="text_medium col-I">
|
||||
<br />
|
||||
<strong>{LNG_NOTE}</strong><br />
|
||||
{LNG_MSG_NO_HTACCESS_FOUND}<br />
|
||||
<br />
|
||||
</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>
|
||||
|
||||
<!-- 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>
|
||||
|
||||
<!-- 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>
|
||||
|
||||
<!-- 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}&frame=4&idclient={IDCLIENT}&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>
|
||||
<!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}&frame=4&idclient={IDCLIENT}&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>
|
|
@ -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>
|
|
@ -1,153 +1,151 @@
|
|||
<!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_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}&frame=4&idclient={IDCLIENT}&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>
|
||||
<!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}&frame=4&idclient={IDCLIENT}&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>
|
|
@ -1,64 +1,63 @@
|
|||
<!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_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 style="margin:0.3em 0;">
|
||||
<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" style="padding-right:5px;">
|
||||
<input type="submit" name="test" value="{LNG_RUN_TEST}" />
|
||||
</div>
|
||||
<br class="clear" />
|
||||
</div>
|
||||
</form>
|
||||
<br class="clear" />
|
||||
</div>
|
||||
|
||||
{CONTENT}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!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>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!-- Contenido XML language file -->
|
||||
<language>
|
||||
<navigation>
|
||||
<content>
|
||||
<mod_rewrite>
|
||||
<main>AMR</main>
|
||||
<settings>Einstellungen</settings>
|
||||
<expert>Funktionen</expert>
|
||||
<test>Test</test>
|
||||
</mod_rewrite>
|
||||
</content>
|
||||
</navigation>
|
||||
</language>
|
||||
<?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>
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!-- Contenido XML language file -->
|
||||
<language>
|
||||
<navigation>
|
||||
<content>
|
||||
<mod_rewrite>
|
||||
<main>AMR</main>
|
||||
<settings>Settings</settings>
|
||||
<expert>Functions</expert>
|
||||
<test>Test</test>
|
||||
</mod_rewrite>
|
||||
</content>
|
||||
</navigation>
|
||||
</language>
|
||||
<?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>
|
Laden…
In neuem Issue referenzieren