228 lines
7.1 KiB
PHP
228 lines
7.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Contao Open Source CMS
|
|
* Copyright (C) 2005-2011 Leo Feyer
|
|
*
|
|
* Formerly known as TYPOlight Open Source CMS.
|
|
*
|
|
* This program is free software: you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation, either
|
|
* version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this program. If not, please visit the Free
|
|
* Software Foundation website at <http://www.gnu.org/licenses/>.
|
|
*
|
|
* PHP version 5
|
|
* @copyright cgo IT, 2012-2013
|
|
* @author Carsten Götzinger (info@cgo-it.de)
|
|
* @package aeo
|
|
* @license GNU/LGPL
|
|
* @filesource
|
|
*/
|
|
|
|
namespace cgoIT\aeo;
|
|
|
|
/**
|
|
* Class AeoRedirectUtil
|
|
*/
|
|
class AeoRedirectUtil extends \Frontend {
|
|
|
|
/**
|
|
* Initialize the object
|
|
* @param array
|
|
*/
|
|
public function __construct($arrAttributes=false) {
|
|
parent::__construct($arrAttributes);
|
|
$this->import('aeo\\AeoUtil', 'AeoUtil');
|
|
}
|
|
|
|
/**
|
|
* Sofern Aliase deaktiviert sind oder die RootPage aufgerufen wird,
|
|
* ermittelt diese Methode die passende ID der Seite.
|
|
*/
|
|
function redirectFromRootPage() {
|
|
$this->import('\\Environment', 'Environment');
|
|
$strRequest = preg_replace(array('/^index.php\/?/', '/\?.*$/'), '', $this->Environment->request);
|
|
$params = '';
|
|
if (strstr($strRequest, '?')) {
|
|
$arrRequest = explode('?', $strRequest);
|
|
$strRequest = $arrRequest[0];
|
|
$params = $arrRequest[1];
|
|
}
|
|
$strRequest = $this->removeUrlSuffix($strRequest);
|
|
|
|
$arrFragments = explode('/', $strRequest);
|
|
$arrFragments = $this->getRedirectPageAeo($arrFragments, true);
|
|
if (is_numeric($arrFragments[0])) {
|
|
// Add the fragments to the $_GET array
|
|
for ($i=1; $i<count($arrFragments); $i+=2) {
|
|
$this->Input->setGet($arrFragments[$i], $arrFragments[$i+1]);
|
|
}
|
|
return $arrFragments[0];
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/**
|
|
* Leitet den User ohne JavaScript auf die passende Formular-Seite weiter.
|
|
* @param $arrFragments
|
|
* @param $blnReturnId
|
|
*/
|
|
public function getRedirectPageAeo($arrFragments, $blnReturnId=false) {
|
|
if ($GLOBALS['TL_CONFIG']['aeo_replace_standard_obfuscation'] === true) {
|
|
if (in_array('folderurl', $this->Config->getActiveModules())) {
|
|
$arrFragments = preg_split('~/~i', $arrFragments[0]);
|
|
}
|
|
$i18nl10nLanguage = '';
|
|
if (in_array('i18nl10n', $this->Config->getActiveModules())) {
|
|
if ($GLOBALS['TL_CONFIG']['i18nl10n_urlParam'] == 'url') {
|
|
$i18nl10nLanguage = $arrFragments[count($arrFragments) - 1];
|
|
}
|
|
}
|
|
|
|
$indexAeo = 2;
|
|
if ($GLOBALS['TL_CONFIG']['useAutoItem']) {
|
|
// auto-item-paramenter beruecksichtigen
|
|
$indexAeo = 3;
|
|
}
|
|
|
|
if (is_array($arrFragments) && count($arrFragments) > 3
|
|
&& $arrFragments[0] == $GLOBALS['TL_CONFIG']['aeo_virtual_path']
|
|
&& $arrFragments[$indexAeo] == 'aeo') {
|
|
$arrJumpTo = deserialize($GLOBALS['TL_CONFIG']['aeo_jump_to_no_js']);
|
|
|
|
if ($GLOBALS['TL_CONFIG']['useAutoItem'] && $arrFragments[1] == 'auto_item') {
|
|
// auto-item-paramenter entfernen
|
|
unset($arrFragments[1]);
|
|
$arrFragments = array_values($arrFragments);
|
|
}
|
|
|
|
// Sprache ermitteln
|
|
$strLanguage = $arrFragments[1];
|
|
|
|
$arrFallbackValue = array();
|
|
foreach ($arrJumpTo as $key => $value) {
|
|
if ($value['aeo_language'] == $strLanguage) {
|
|
$url = $this->getUrl($value, $blnReturnId);
|
|
break;
|
|
}
|
|
if ($value['aeo_language_fallback']) {
|
|
$arrFallbackValue = $value;
|
|
}
|
|
}
|
|
|
|
if (!isset($url) || strlen($url) == 0) {
|
|
$url = $this->getUrl($arrFallbackValue, $blnReturnId);
|
|
}
|
|
|
|
$i = 0;
|
|
$arrFragments[$i++] = $url;
|
|
|
|
$strObfuscatedValues = $arrFragments[3];
|
|
if (in_array('i18nl10n', $this->Config->getActiveModules()) &&
|
|
$GLOBALS['TL_CONFIG']['i18nl10n_urlParam'] == 'alias') {
|
|
$this->AeoUtil->fixupCurrentLanguage();
|
|
$strObfuscatedValues = str_replace('.'.$GLOBALS['TL_LANGUAGE'], '', $strObfuscatedValues);
|
|
}
|
|
$arrObfuscatedValues = explode('+', $strObfuscatedValues, 5);
|
|
|
|
$arrFragments[$i++] = 'n';
|
|
$arrFragments[$i++] = $arrObfuscatedValues[0];
|
|
$arrFragments[$i++] = 'd';
|
|
$arrFragments[$i++] = $arrObfuscatedValues[1];
|
|
$arrFragments[$i++] = 't';
|
|
$arrFragments[$i++] = $arrObfuscatedValues[2];
|
|
$arrFragments[$i++] = 'p';
|
|
$arrFragments[$i++] = $arrObfuscatedValues[3];
|
|
$arrFragments[$i++] = 'param';
|
|
$arrFragments[$i++] = $arrObfuscatedValues[4];
|
|
if (strlen($params) > 0) {
|
|
$arrParams = explode('=', $params);
|
|
$addNext = true;
|
|
foreach ($arrParams as $param) {
|
|
if (!$addNext) {
|
|
continue;
|
|
}
|
|
if ($param == 'id') {
|
|
$addNext = false;
|
|
continue;
|
|
}
|
|
$arrFragments[$i++] = $param;
|
|
}
|
|
}
|
|
|
|
if (in_array('i18nl10n', $this->Config->getActiveModules()) &&
|
|
$GLOBALS['TL_CONFIG']['i18nl10n_urlParam'] == 'url' &&
|
|
strlen($i18nl10nLanguage)) {
|
|
$arrFragments[$i++] = 'language';
|
|
$arrFragments[$i++] = $i18nl10nLanguage;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $arrFragments;
|
|
}
|
|
|
|
private function getUrl($arrValue, $blnReturnId) {
|
|
if ($blnReturnId) {
|
|
$url = $arrValue['aeo_redirecturl'];
|
|
} else {
|
|
$objPage = \PageModel::findPublishedByIdOrAlias($arrValue['aeo_redirecturl']);
|
|
$objPage = $this->getPageDetails($objPage);
|
|
$url = $this->generateFrontendUrl($objPage->row());
|
|
$url = $this->removeUrlPrefix($url);
|
|
if ($GLOBALS['TL_CONFIG']['addLanguageToUrl'] ||
|
|
(in_array('i18nl10n', $this->Config->getActiveModules()) &&
|
|
$GLOBALS['TL_CONFIG']['i18nl10n_urlParam'] == 'url')) {
|
|
$arrUrlFragments = explode('/', $url);
|
|
$url = $arrUrlFragments[1];
|
|
}
|
|
$params = '';
|
|
if (strstr($url, '?')) {
|
|
$arrUrl = explode('?', $url);
|
|
$url = $arrUrl[0];
|
|
$params = $arrUrl[1];
|
|
}
|
|
$url = $this->removeUrlSuffix($url);
|
|
}
|
|
return $url;
|
|
}
|
|
|
|
private function removeUrlPrefix($strUrl) {
|
|
if (!$GLOBALS['TL_CONFIG']['rewriteURL']) {
|
|
$strUrl = str_replace('index.php/', '', $strUrl);
|
|
}
|
|
return $strUrl;
|
|
}
|
|
|
|
private function removeUrlSuffix($strUrl) {
|
|
// Remove the URL suffix if not just a language root (e.g. en/) is requested
|
|
if ($strUrl != '' && (!$GLOBALS['TL_CONFIG']['addLanguageToUrl'] || !preg_match('@^[a-z]{2}/$@', $strUrl))) {
|
|
$intSuffixLength = strlen($GLOBALS['TL_CONFIG']['urlSuffix']);
|
|
|
|
// Return false if the URL suffix does not match (see #2864)
|
|
if ($intSuffixLength > 0) {
|
|
if (substr($strUrl, -$intSuffixLength) != $GLOBALS['TL_CONFIG']['urlSuffix']) {
|
|
return -1;
|
|
}
|
|
|
|
$strUrl = substr($strUrl, 0, -$intSuffixLength);
|
|
}
|
|
}
|
|
if (in_array('i18nl10n', $this->Config->getActiveModules()) &&
|
|
$GLOBALS['TL_CONFIG']['i18nl10n_urlParam'] == 'alias') {
|
|
$this->AeoUtil->fixupCurrentLanguage();
|
|
$strUrl = str_replace('.'.$GLOBALS['TL_LANGUAGE'], '', $strUrl);
|
|
}
|
|
return $strUrl;
|
|
}
|
|
}
|
|
?>
|