. * * 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; $iInput->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; } } ?>