| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/boutiques/app/code/core/Mage/Core/Model/ |
Upload File : |
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Core
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* URL
*
* Properties:
*
* - request
*
* - relative_url: true, false
* - type: 'link', 'skin', 'js', 'media'
* - store: instanceof Mage_Core_Model_Store
* - secure: true, false
*
* - scheme: 'http', 'https'
* - user: 'user'
* - password: 'password'
* - host: 'localhost'
* - port: 80, 443
* - base_path: '/dev/magento/'
* - base_script: 'index.php'
*
* - storeview_path: 'storeview/'
* - route_path: 'module/controller/action/param1/value1/param2/value2'
* - route_name: 'module'
* - controller_name: 'controller'
* - action_name: 'action'
* - route_params: array('param1'=>'value1', 'param2'=>'value2')
*
* - query: (?)'param1=value1¶m2=value2'
* - query_array: array('param1'=>'value1', 'param2'=>'value2')
* - fragment: (#)'fragment-anchor'
*
* URL structure:
*
* https://user:password@host:443/base_path/[base_script][storeview_path]route_name/controller_name/action_name/param1/value1?query_param=query_value#fragment
* \__________A___________/\____________________________________B_____________________________________/
* \__________________C___________________/ \__________________D_________________/ \_____E_____/
* \_____________F______________/ \___________________________G______________________/
* \___________________________________________________H____________________________________________________/
*
* - A: authority
* - B: path
* - C: absolute_base_url
* - D: action_path
* - E: route_params
* - F: host_url
* - G: route_path
* - H: route_url
*
* @category Mage
* @package Mage_Core
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Core_Model_Url extends Varien_Object
{
const DEFAULT_CONTROLLER_NAME = 'index';
const DEFAULT_ACTION_NAME = 'index';
const XML_PATH_UNSECURE_URL = 'web/unsecure/base_url';
const XML_PATH_SECURE_URL = 'web/secure/base_url';
const XML_PATH_SECURE_IN_ADMIN = 'web/secure/use_in_adminhtml';
const XML_PATH_SECURE_IN_FRONT = 'web/secure/use_in_frontend';
static protected $_configDataCache;
static protected $_encryptedSessionId;
/**
* Reserved Route parametr keys
*
* @var array
*/
protected $_reservedRouteParams = array(
'_store', '_type', '_secure', '_forced_secure', '_use_rewrite', '_nosid',
'_absolute', '_current', '_direct', '_fragment', '_escape', '_query',
'_store_to_url'
);
/**
* Controller request object
*
* @var Zend_Controller_Request_Http
*/
protected $_request;
/**
* Use Session ID for generate URL
*
* @var bool
*/
protected $_useSession;
protected function _construct()
{
$this->setStore(null);
}
/**
* Initialize object data from retrieved url
*
* @param string $url
* @return Mage_Core_Model_Url
*/
public function parseUrl($url)
{
$data = parse_url($url);
$parts = array(
'scheme'=>'setScheme',
'host' =>'setHost',
'port' =>'setPort',
'user' =>'setUser',
'pass' =>'setPassword',
'path' =>'setPath',
'query' =>'setQuery',
'fragment'=>'setFragment');
foreach ($parts as $component=>$method) {
if (isset($data[$component])) {
$this->$method($data[$component]);
}
}
return $this;
}
/**
* Retrieve default controller name
*
* @return string
*/
public function getDefaultControllerName()
{
return self::DEFAULT_CONTROLLER_NAME;
}
public function setUseUrlCache($flag)
{
$this->setData('use_url_cache', $flag);
return $this;
}
/**
* Set use session rule
*
* @param bool $useSession
* @return Mage_Core_Model_Url
*/
public function setUseSession($useSession)
{
$this->_useSession = (bool)$useSession;
return $this;
}
public function setRouteFrontName($name)
{
$this->setData('route_front_name', $name);
return $this;
}
/**
* Retrieve use session rule
*
* @return bool
*/
public function getUseSession()
{
if (is_null($this->_useSession)) {
$this->_useSession = Mage::app()->getUseSessionInUrl();
}
return $this->_useSession;
}
/**
* Retrieve default action name
*
* @return string
*/
public function getDefaultActionName()
{
return self::DEFAULT_ACTION_NAME;
}
public function getConfigData($key, $prefix=null)
{
if (is_null($prefix)) {
$prefix = 'web/'.($this->getSecure() ? 'secure' : 'unsecure').'/';
}
$path = $prefix.$key;
$cacheId = $this->getStore()->getCode().'/'.$path;
if (!isset(self::$_configDataCache[$cacheId])) {
$data = $this->getStore()->getConfig($path);
self::$_configDataCache[$cacheId] = $data;
}
return self::$_configDataCache[$cacheId];
}
public function setRequest(Zend_Controller_Request_Http $request)
{
$this->_request = $request;
return $this;
}
/**
* Zend request object
*
* @return Zend_Controller_Request_Http
*/
public function getRequest()
{
if (!$this->_request) {
$this->_request = Mage::app()->getRequest();
}
return $this->_request;
}
public function getType()
{
if (!$this->hasData('type')) {
$this->setData('type', Mage_Core_Model_Store::URL_TYPE_LINK);
}
return $this->_getData('type');
}
/**
* Retrieve is secure mode URL
*
* @return bool
*/
public function getSecure()
{
if ($this->hasData('secure_is_forced')) {
return $this->getData('secure');
}
$store = $this->getStore();
if ($store->isAdmin() && !$store->isAdminUrlSecure()) { //!Mage::getStoreConfigFlag(self::XML_PATH_SECURE_IN_ADMIN, $this->getStore()->getId())
return false;
}
if (!$store->isAdmin() && !$store->isFrontUrlSecure()) {//!Mage::getStoreConfigFlag(self::XML_PATH_SECURE_IN_FRONT
return false;
}
if (!$this->hasData('secure')) {
if ($this->getType() == Mage_Core_Model_Store::URL_TYPE_LINK) {
$pathSecure = Mage::getConfig()->shouldUrlBeSecure('/'.$this->getActionPath());
$this->setData('secure', $pathSecure);
} else {
$this->setData('secure', $store->isCurrentlySecure());
}
}
return $this->getData('secure');
}
public function setStore($data)
{
$this->setData('store', Mage::app()->getStore($data));
return $this;
}
/**
* Get current store for the url instance
*
* @return Mage_Core_Model_Store
*/
public function getStore()
{
if (!$this->hasData('store')) {
$this->setStore(null);
}
return $this->_getData('store');
}
/**
* Retrieve Base URL
*
* @param array $params
* @return string
*/
public function getBaseUrl($params = array())
{
if (isset($params['_store'])) {
$this->setStore($params['_store']);
}
if (isset($params['_type'])) {
$this->setType($params['_type']);
}
if (isset($params['_secure'])) {
$this->setSecure($params['_secure']);
}
/**
* Add availability support urls without store code
*/
if ($this->getType() == Mage_Core_Model_Store::URL_TYPE_LINK
&& Mage::app()->getRequest()->isDirectAccessFrontendName($this->getRouteFrontName())) {
$this->setType(Mage_Core_Model_Store::URL_TYPE_DIRECT_LINK);
}
return $this->getStore()->getBaseUrl($this->getType(), $this->getSecure());
}
/**
* Set Route Parameters
*
* @param array $data
* @return Mage_Core_Model_Url
*/
public function setRoutePath($data)
{
if ($this->_getData('route_path')==$data) {
return $this;
}
$a = explode('/', $data);
$route = array_shift($a);
if ('*'===$route) {
$route = $this->getRequest()->getRequestedRouteName();
}
$this->setRouteName($route);
$routePath = $route.'/';
if (!empty($a)) {
$controller = array_shift($a);
if ('*'===$controller) {
$controller = $this->getRequest()->getRequestedControllerName();
}
$this->setControllerName($controller);
$routePath .= $controller.'/';
}
if (!empty($a)) {
$action = array_shift($a);
if ('*'===$action) {
$action = $this->getRequest()->getRequestedActionName();
}
$this->setActionName($action);
$routePath .= $action.'/';
}
if (!empty($a)) {
$this->unsetData('route_params');
while (!empty($a)) {
$key = array_shift($a);
if (!empty($a)) {
$value = array_shift($a);
$this->setRouteParam($key, $value);
#$routePath .= $key.'/'.urlencode($value).'/';
$routePath .= $key.'/'.$value.'/';
}
}
}
#$this->setData('route_path', $routePath);
return $this;
}
public function getActionPath()
{
if (!$this->getRouteName()) {
return '';
}
$hasParams = (bool)$this->getRouteParams();
$path = $this->getRouteFrontName() . '/';
if ($this->getControllerName()) {
$path .= $this->getControllerName() . '/';
} elseif ($hasParams) {
$path .= $this->getDefaultControllerName() . '/';
}
if ($this->getActionName()) {
$path .= $this->getActionName() . '/';
} elseif ($hasParams) {
$path .= $this->getDefaultActionName() . '/';
}
return $path;
}
public function getRoutePath($routeParams=array())
{
if (!$this->hasData('route_path')) {
$routePath = $this->getRequest()->getAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS);
if (!empty($routeParams['_use_rewrite'])
&& ($routePath !== null)) {
$this->setData('route_path', $routePath);
return $routePath;
}
$routePath = $this->getActionPath();
if ($this->getRouteParams()) {
foreach ($this->getRouteParams() as $key=>$value) {
if (is_null($value) || false===$value || ''===$value || !is_scalar($value)) {
continue;
}
$routePath .= $key.'/'.$value.'/';
}
}
if ($routePath != '' && substr($routePath, -1, 1) !== '/') {
$routePath.= '/';
}
$this->setData('route_path', $routePath);
}
return $this->_getData('route_path');
}
public function setRouteName($data)
{
if ($this->_getData('route_name')==$data) {
return $this;
}
$this->unsetData('route_front_name')
->unsetData('route_path')
->unsetData('controller_name')
->unsetData('action_name')
->unsetData('secure');
return $this->setData('route_name', $data);
}
public function getRouteFrontName()
{
if (!$this->hasData('route_front_name')) {
$routeName = $this->getRouteName();
$route = Mage::app()->getFrontController()->getRouterByRoute($routeName);
$frontName = $route->getFrontNameByRoute($routeName);
$this->setRouteFrontName($frontName);
}
return $this->_getData('route_front_name');
}
public function getRouteName()
{
return $this->_getData('route_name');
}
/**
* Set Controller Name
* Reset action name and route path if has change
*
* @param string $data
* @return Mage_Core_Model_Url
*/
public function setControllerName($data)
{
if ($this->_getData('controller_name')==$data) {
return $this;
}
$this->unsetData('route_path')->unsetData('action_name')->unsetData('secure');
return $this->setData('controller_name', $data);
}
public function getControllerName()
{
return $this->_getData('controller_name');
}
/**
* Set Action name
* Reseted route path if action name has change
*
* @param string $data
* @return Mage_Core_Model_Url
*/
public function setActionName($data)
{
if ($this->_getData('action_name') == $data) {
return $this;
}
$this->unsetData('route_path');
return $this->setData('action_name', $data)->unsetData('secure');
}
public function getActionName()
{
return $this->_getData('action_name');
}
public function setRouteParams(array $data, $unsetOldParams=true)
{
if (isset($data['_type'])) {
$this->setType($data['_type']);
unset($data['_type']);
}
if (isset($data['_store'])) {
$this->setStore($data['_store']);
unset($data['_store']);
}
if (isset($data['_forced_secure'])) {
$this->setSecure((bool)$data['_forced_secure']);
$this->setSecureIsForced(true);
unset($data['_forced_secure']);
} else {
if (isset($data['_secure'])) {
$this->setSecure((bool)$data['_secure']);
unset($data['_secure']);
}
}
if (isset($data['_absolute'])) {
unset($data['_absolute']);
}
if ($unsetOldParams) {
$this->unsetData('route_params');
}
$this->setUseUrlCache(true);
if (isset($data['_current'])) {
if (is_array($data['_current'])) {
foreach ($data['_current'] as $key) {
if (array_key_exists($key, $data) || !$this->getRequest()->getUserParam($key)) {
continue;
}
$data[$key] = $this->getRequest()->getUserParam($key);
}
} elseif ($data['_current']) {
foreach ($this->getRequest()->getUserParams() as $key=>$value) {
if (array_key_exists($key, $data) || $this->getRouteParam($key)) {
continue;
}
$data[$key] = $value;
}
foreach ($this->getRequest()->getQuery() as $key=>$value) {
$this->setQueryParam($key, $value);
}
$this->setUseUrlCache(false);
}
unset($data['_current']);
}
if (isset($data['_use_rewrite'])) {
unset($data['_use_rewrite']);
}
if (isset($data['_store_to_url']) && (bool)$data['_store_to_url'] === true) {
if (!Mage::getStoreConfig(Mage_Core_Model_Store::XML_PATH_STORE_IN_URL, $this->getStore())
&& !Mage::app()->isSingleStoreMode()
) {
$this->setQueryParam('___store', $this->getStore()->getCode());
}
}
unset($data['_store_to_url']);
foreach ($data as $k=>$v) {
$this->setRouteParam($k, $v);
}
return $this;
}
public function getRouteParams()
{
return $this->_getData('route_params');
}
public function setRouteParam($key, $data)
{
$params = $this->_getData('route_params');
if (isset($params[$key]) && $params[$key]==$data) {
return $this;
}
$params[$key] = $data;
$this->unsetData('route_path');
return $this->setData('route_params', $params);
}
public function getRouteParam($key)
{
return $this->_getData('route_params', $key);
}
public function getRouteUrl($routePath=null, $routeParams=null)
{
$this->unsetData('route_params');
if (isset($routeParams['_direct'])) {
if (is_array($routeParams)) {
$this->setRouteParams($routeParams, false);
}
return $this->getBaseUrl().$routeParams['_direct'];
}
if (!is_null($routePath)) {
$this->setRoutePath($routePath);
}
if (is_array($routeParams)) {
$this->setRouteParams($routeParams, false);
}
$url = $this->getBaseUrl().$this->getRoutePath($routeParams);
return $url;
}
/**
* If the host was switched but session cookie won't recognize it - add session id to query
*
* @return unknown
*/
public function checkCookieDomains()
{
$hostArr = explode(':', $this->getRequest()->getServer('HTTP_HOST'));
if ($hostArr[0]!==$this->getHost()) {
$session = Mage::getSingleton('core/session');
if (!$session->isValidForHost($this->getHost())) {
if (!self::$_encryptedSessionId) {
$helper = Mage::helper('core');
if (!$helper) {
return $this;
}
self::$_encryptedSessionId = $session->getEncryptedSessionId();
}
$this->setQueryParam(
$session->getSessionIdQueryParam(),
self::$_encryptedSessionId
);
}
}
return $this;
}
public function addSessionParam()
{
$session = Mage::getSingleton('core/session');
if (!self::$_encryptedSessionId) {
$helper = Mage::helper('core');
if (!$helper) {
return $this;
}
self::$_encryptedSessionId = $session->getEncryptedSessionId();
}
$this->setQueryParam(
$session->getSessionIdQueryParam(),
self::$_encryptedSessionId
);
return $this;
}
/**
* Set URL query param(s)
*
* @param mixed $data
* @return Mage_Core_Model_Url
*/
public function setQuery($data)
{
if ($this->_getData('query') == $data) {
return $this;
}
$this->unsetData('query_params');
return $this->setData('query', $data);
}
/**
* Get query params part of url
*
* @param bool $escape "&" escape flag
* @return string
*/
public function getQuery($escape = false)
{
if (!$this->hasData('query')) {
$query = '';
$params = $this->getQueryParams();
if (is_array($params)) {
ksort($params);
$query = http_build_query($params, '', $escape ? '&' : '&');
}
$this->setData('query', $query);
}
return $this->_getData('query');
}
/**
* Set query Params as array
*
* @param array $data
* @return Mage_Core_Model_Url
*/
public function setQueryParams(array $data)
{
$this->unsetData('query');
if ($this->_getData('query_params') == $data) {
return $this;
}
$params = $this->_getData('query_params');
if (!is_array($params)) {
$params = array();
}
foreach ($data as $param => $value) {
$params[$param] = $value;
}
$this->setData('query_params', $params);
return $this;
}
/**
* Purge Query params array
*
* @return Mage_Core_Model_Url
*/
public function purgeQueryParams()
{
$this->setData('query_params', array());
return $this;
}
/**
* Retrurn Query Params
*
* @return array
*/
public function getQueryParams()
{
if (!$this->hasData('query_params')) {
$params = array();
if ($this->_getData('query')) {
foreach (explode('&', $this->_getData('query')) as $param) {
$paramArr = explode('=', $param);
$params[$paramArr[0]] = urldecode($paramArr[1]);
}
}
$this->setData('query_params', $params);
}
return $this->_getData('query_params');
}
public function setQueryParam($key, $data)
{
$params = $this->getQueryParams();
if (isset($params[$key]) && $params[$key]==$data) {
return $this;
}
$params[$key] = $data;
$this->unsetData('query');
return $this->setData('query_params', $params);
}
public function getQueryParam($key)
{
if (!$this->hasData('query_params')) {
$this->getQueryParams();
}
return $this->_getData('query_params', $key);
}
/**
* Set fragment to URL
*
* @param string $data
* @return Mage_Core_Model_Url
*/
public function setFragment($data)
{
return $this->setData('fragment', $data);
}
public function getFragment()
{
return $this->_getData('fragment');
}
/**
* Build url by requested path and parameters
*
* @param string $routePath
* @param array $routeParams
* @return string
*/
public function getUrl($routePath=null, $routeParams=null)
{
$escapeQuery = false;
/**
* All system params should be unseted before we call getRouteUrl
* this method has condition for ading default controller anr actions names
* in case when we have params
*/
if (isset($routeParams['_fragment'])) {
$this->setFragment($routeParams['_fragment']);
unset($routeParams['_fragment']);
}
if (isset($routeParams['_escape'])) {
$escapeQuery = $routeParams['_escape'];
unset($routeParams['_escape']);
}
$query = null;
if (isset($routeParams['_query'])) {
$this->purgeQueryParams();
$query = $routeParams['_query'];
unset($routeParams['_query']);
}
$noSid = null;
if (isset($routeParams['_nosid'])) {
$noSid = (bool)$routeParams['_nosid'];
unset($routeParams['_nosid']);
}
$url = $this->getRouteUrl($routePath, $routeParams);
/**
* Apply query params, need call after getRouteUrl for rewrite _current values
*/
if ($query !== null) {
if (is_string($query)) {
$this->setQuery($query);
} elseif (is_array($query)) {
$this->setQueryParams($query, !empty($routeParams['_current']));
}
if ($query === false) {
$this->setQueryParams(array());
}
}
if ($noSid !== true) {
$this->_prepareSessionUrl($url);
}
if ($query = $this->getQuery($escapeQuery)) {
$url .= '?'.$query;
}
if ($this->getFragment()) {
$url .= '#'.$this->getFragment();
}
return $this->escape($url);
}
/**
* Check and add session id to URL
*
* @param string $url
* @return Mage_Core_Model_Url
*/
protected function _prepareSessionUrl($url)
{
if (!$this->getUseSession()) {
return $this;
}
$session = Mage::getSingleton('core/session');
/* @var $session Mage_Core_Model_Session */
if (Mage::app()->getUseSessionVar()) {
// secure URL
if ($this->getSecure()) {
$this->setQueryParam('___SID', 'S');
}
else {
$this->setQueryParam('___SID', 'U');
}
}
else {
if ($sessionId = $session->getSessionIdForHost($url)) {
$this->setQueryParam($session->getSessionIdQueryParam(), $sessionId);
}
}
return $this;
}
/**
* Escape (enclosure) URL string
*
* @param string $value
* @return string
*/
public function escape($value)
{
$value = str_replace('"', '%22', $value);
$value = str_replace("'", '%27', $value);
$value = str_replace('>', '%3E', $value);
$value = str_replace('<', '%3C', $value);
return $value;
}
/**
* Build url by direct url and parameters
*
* @param string $url
* @param array $params
* @return string
*/
public function getDirectUrl($url, $params = array()) {
$params['_direct'] = $url;
return $this->getUrl('', $params);
}
/**
* Replace Session ID value in URL
*
* @param string $html
* @return string
*/
public function sessionUrlVar($html)
{
return preg_replace_callback('#(\?|&|&)___SID=([SU])(&|&)?#', array($this, "sessionVarCallback"), $html);
}
/**
* Check and return use SID for URL
*
* @param bool $secure
* @return bool
*/
public function useSessionIdForUrl($secure = false)
{
$key = 'use_session_id_for_url_' . (int)$secure;
if (is_null($this->getData($key))) {
$httpHost = Mage::app()->getFrontController()->getRequest()->getHttpHost();
$urlHost = parse_url(Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK, $secure), PHP_URL_HOST);
if ($httpHost != $urlHost) {
$this->setData($key, true);
}
else {
$this->setData($key, false);
}
}
return $this->getData($key);
}
/**
* Callback function for session replace
*
* @param array $match
* @return string
*/
public function sessionVarCallback($match)
{
if ($this->useSessionIdForUrl($match[2] == 'S' ? true : false)) {
$session = Mage::getSingleton('core/session');
/* @var $session Mage_Core_Model_Session */
return $match[1]
. $session->getSessionIdQueryParam()
. '=' . $session->getEncryptedSessionId()
. (isset($match[3]) ? $match[3] : '');
}
else {
if ($match[1] == '?' && isset($match[3])) {
return '?';
}
elseif ($match[1] == '?' && !isset($match[3])) {
return '';
}
elseif (($match[1] == '&' || $match[1] == '&') && !isset($match[3])) {
return '';
}
elseif (($match[1] == '&' || $match[1] == '&') && isset($match[3])) {
return $match[3];
}
}
return '';
}
}