From 0c8eb61cf2cecee598637ef2fd3907712bc92a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Nadaud?= Date: Fri, 17 Jul 2015 10:16:58 +0200 Subject: [PATCH] [-] BO : FixBug #PSCSX-6208 - Profiling redirection error --- tools/profiling/Tools.php | 133 +++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/tools/profiling/Tools.php b/tools/profiling/Tools.php index 18e6ec0446b37..4aeb428c9698e 100644 --- a/tools/profiling/Tools.php +++ b/tools/profiling/Tools.php @@ -26,63 +26,94 @@ class Tools extends ToolsCore { - public static function redirect($url, $base_uri = __PS_BASE_URI__, Link $link = null, $headers = null) - { - if (!$link) - $link = Context::getContext()->link; + public static function redirect($url, $base_uri = __PS_BASE_URI__, Link $link = null, $headers = null) + { + if (!$link) + $link = Context::getContext()->link; - if (strpos($url, 'http://') === false && strpos($url, 'https://') === false && $link) - { - if (strpos($url, $base_uri) === 0) - $url = substr($url, strlen($base_uri)); - if (strpos($url, 'index.php?controller=') !== false && strpos($url, 'index.php/') == 0) - { - $url = substr($url, strlen('index.php?controller=')); - if (Configuration::get('PS_REWRITING_SETTINGS')) - $url = Tools::strReplaceFirst('&', '?', $url); - } + if (strpos($url, 'http://') === false && strpos($url, 'https://') === false && $link) + { + if (strpos($url, $base_uri) === 0) + $url = substr($url, strlen($base_uri)); + if (strpos($url, 'index.php?controller=') !== false && strpos($url, 'index.php/') == 0) + { + $url = substr($url, strlen('index.php?controller=')); + if (Configuration::get('PS_REWRITING_SETTINGS')) + $url = Tools::strReplaceFirst('&', '?', $url); + } - $explode = explode('?', $url); - // don't use ssl if url is home page - // used when logout for example - $use_ssl = !empty($url); - $url = $link->getPageLink($explode[0], $use_ssl); - if (isset($explode[1])) - $url .= '?'.$explode[1]; - } + $explode = explode('?', $url); + // don't use ssl if url is home page + // used when logout for example + $use_ssl = !empty($url); + $url = $link->getPageLink($explode[0], $use_ssl); + if (isset($explode[1])) + $url .= '?'.$explode[1]; + } - // Send additional headers - if ($headers) - { - if (!is_array($headers)) - $headers = array($headers); + // Send additional headers + if ($headers) + { + if (!is_array($headers)) + $headers = array($headers); - foreach ($headers as $header) - header($header); - } + foreach ($headers as $header) + header($header); + } - Context::getContext()->controller->setRedirectAfter($url); - } + Context::getContext()->controller->setRedirectAfter($url); + } - public static function redirectLink($url) - { - if (!preg_match('@^https?://@i', $url)) - { - if (strpos($url, __PS_BASE_URI__) !== false && strpos($url, __PS_BASE_URI__) == 0) - $url = substr($url, strlen(__PS_BASE_URI__)); - $explode = explode('?', $url); - $url = Context::getContext()->link->getPageLink($explode[0]); - if (isset($explode[1])) - $url .= '?'.$explode[1]; - } + public static function getDefaultControllerClass() + { + if (isset(Context::getContext()->employee) && Validate::isLoadedObject(Context::getContext()->employee) && isset(Context::getContext()->employee->default_tab)) { + $default_controller = Tab::getClassNameById((int)Context::getContext()->employee->default_tab); + } - Context::getContext()->controller->setRedirectAfter($url); - } + if (empty($default_controller)) { + $default_controller = 'AdminDashboard'; + } - public static function redirectAdmin($url) - { - if (!is_object(Context::getContext()->controller)) - Context::getContext()->controller = new StdClass(); - Context::getContext()->controller->setRedirectAfter($url); - } + $controllers = Dispatcher::getControllers(array(_PS_ADMIN_DIR_.'/tabs/', _PS_ADMIN_CONTROLLER_DIR_, _PS_OVERRIDE_DIR_.'controllers/admin/')); + + if (!isset($controllers[strtolower($default_controller)])) { + $default_controller = 'adminnotfound'; + } + + $controller_class = $controllers[strtolower($default_controller)]; + + return $controller_class; + } + + public static function redirectLink($url) + { + if (!preg_match('@^https?://@i', $url)) + { + if (strpos($url, __PS_BASE_URI__) !== false && strpos($url, __PS_BASE_URI__) == 0) + $url = substr($url, strlen(__PS_BASE_URI__)); + $explode = explode('?', $url); + $url = Context::getContext()->link->getPageLink($explode[0]); + if (isset($explode[1])) + $url .= '?'.$explode[1]; + } + + Context::getContext()->controller->setRedirectAfter($url); + } + + public static function redirectAdmin($url) + { + if (!is_object(Context::getContext()->controller)) { + try { + $controller = Controller::getController(Tools::getDefaultControllerClass()); + $controller->setRedirectAfter($url); + $controller->run(); + Context::getContext()->controller = $controller; + die(); + } catch (PrestaShopException $e) { + $e->displayMessage(); + } + } else { + Context::getContext()->controller->setRedirectAfter($url); + } + } }