Initialer Commit in GIT
This commit is contained in:
228
util/AeoRedirectUtil.php
Normal file
228
util/AeoRedirectUtil.php
Normal file
@ -0,0 +1,228 @@
|
||||
<?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_addLanguageToUrl']) {
|
||||
$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_alias_suffix']) {
|
||||
$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_addLanguageToUrl'] &&
|
||||
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_addLanguageToUrl'])) {
|
||||
$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_alias_suffix']) {
|
||||
$this->AeoUtil->fixupCurrentLanguage();
|
||||
$strUrl = str_replace('.'.$GLOBALS['TL_LANGUAGE'], '', $strUrl);
|
||||
}
|
||||
return $strUrl;
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user