* @copyright 2007-2019 Apollotheme
* @license http://apollotheme.com - prestashop template provider
*/
if (!defined('_PS_VERSION_')) {
# module validation
exit;
}
if (!class_exists("LeoFriendlyUrl")) {
class LeoFriendlyUrl {
/** @var string[] Adds excluded $_GET keys for redirection */
public $redirectionExtraExcludedKeys = array();
public static function getInstance() {
static $_instance;
if (!$_instance) {
$_instance = new LeoFriendlyUrl();
}
return $_instance;
}
/**
* REFERRENCE ROOT\classes\Link.php
* function getProductLink()
*/
// public function getApPagebuilderLink() {
//
// $link = Context::getContext()->link;
// $idLang = Context::getContext()->language->id;
// $idShop = null;
// $relativeProtocol = false;
//
// $url = $link->getBaseLink($idShop, null, $relativeProtocol).$this->getLangLink($idLang, null, $idShop).$profile_data['friendly_url'];
//
// return $url;
// }
/**
* REFERRENCE ROOT\classes\Link.php
* CORE function not PUBLIC
*/
public function getLangLink($idLang = null, Context $context = null, $idShop = null)
{
$this->allow = (int) Configuration::get('PS_REWRITING_SETTINGS');
static $psRewritingSettings = null;
if ($psRewritingSettings === null) {
$psRewritingSettings = (int) Configuration::get('PS_REWRITING_SETTINGS', null, null, $idShop);
}
if (!$context) {
$context = Context::getContext();
}
if ((!$this->allow && in_array($idShop, array($context->shop->id, null))) || !Language::isMultiLanguageActivated($idShop) || !$psRewritingSettings) {
return '';
}
if (!$idLang) {
$idLang = $context->language->id;
}
return Language::getIsoById($idLang).'/';
}
/**
* Redirects to canonical URL.
* REFERRENCE ROOT\classes\controller\FrontController.php
* @param string $canonical_url
*/
public function canonicalRedirection($canonical_url = '') {
if (!$canonical_url || !Configuration::get('PS_CANONICAL_REDIRECT') || strtoupper($_SERVER['REQUEST_METHOD']) != 'GET') {
return;
}
$canonical_url = preg_replace('/#.*$/', '', $canonical_url);
$match_url = rawurldecode(Tools::getCurrentUrlProtocolPrefix() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
if (!preg_match('/^' . Tools::pRegexp(rawurldecode($canonical_url), '/') . '([&?].*)?$/', $match_url)) {
$params = array();
$url_details = parse_url($canonical_url);
if (!empty($url_details['query'])) {
parse_str($url_details['query'], $query);
foreach ($query as $key => $value) {
$params[Tools::safeOutput($key)] = Tools::safeOutput($value);
}
}
$excluded_key = array('isolang', 'id_lang', 'controller', 'fc', 'id_product', 'id_category', 'id_manufacturer', 'id_supplier', 'id_cms', 'id_appagebuilder_profiles');
$excluded_key = array_merge($excluded_key, $this->redirectionExtraExcludedKeys);
foreach ($_GET as $key => $value) {
if (!in_array($key, $excluded_key) && Validate::isUrl($key) && Validate::isUrl($value)) {
$params[Tools::safeOutput($key)] = Tools::safeOutput($value);
}
}
$str_params = http_build_query($params, '', '&');
if (!empty($str_params)) {
$final_url = preg_replace('/^([^?]*)?.*$/', '$1', $canonical_url) . '?' . $str_params;
} else {
$final_url = preg_replace('/^([^?]*)?.*$/', '$1', $canonical_url);
}
// Don't send any cookie
Context::getContext()->cookie->disallowWriting();
if (defined('_PS_MODE_DEV_') && _PS_MODE_DEV_ && $_SERVER['REQUEST_URI'] != __PS_BASE_URI__) {
die('[Debug] This page has moved
Please use the following URL instead: ' . $final_url . '');
}
$redirect_type = Configuration::get('PS_CANONICAL_REDIRECT') == 2 ? '301' : '302';
header('HTTP/1.0 ' . $redirect_type . ' Moved');
header('Cache-Control: no-cache');
Tools::redirectLink($final_url);
}
}
}
}