Skip to content

Instantly share code, notes, and snippets.

@alex-zige
Created March 7, 2012 22:27
Show Gist options
  • Save alex-zige/1996710 to your computer and use it in GitHub Desktop.
Save alex-zige/1996710 to your computer and use it in GitHub Desktop.
Magento: Illegal scheme supplied fix
<?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) 2011 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Store model
*
* @method Mage_Core_Model_Resource_Store _getResource()
* @method Mage_Core_Model_Resource_Store getResource()
* @method Mage_Core_Model_Store setCode(string $value)
* @method Mage_Core_Model_Store setWebsiteId(int $value)
* @method Mage_Core_Model_Store setGroupId(int $value)
* @method Mage_Core_Model_Store setName(string $value)
* @method int getSortOrder()
* @method Mage_Core_Model_Store setSortOrder(int $value)
* @method Mage_Core_Model_Store setIsActive(int $value)
*
* @category Mage
* @package Mage_Core
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Core_Model_Store extends Mage_Core_Model_Abstract
{
/**
* Entity name
*/
const ENTITY = 'core_store';
/**
* Configuration pathes
*/
const XML_PATH_STORE_STORE_NAME = 'general/store_information/name';
const XML_PATH_STORE_STORE_PHONE = 'general/store_information/phone';
const XML_PATH_STORE_IN_URL = 'web/url/use_store';
const XML_PATH_USE_REWRITES = 'web/seo/use_rewrites';
const XML_PATH_UNSECURE_BASE_URL = 'web/unsecure/base_url';
const XML_PATH_SECURE_BASE_URL = 'web/secure/base_url';
const XML_PATH_SECURE_IN_FRONTEND = 'web/secure/use_in_frontend';
const XML_PATH_SECURE_IN_ADMINHTML = 'web/secure/use_in_adminhtml';
const XML_PATH_SECURE_BASE_LINK_URL = 'web/secure/base_link_url';
const XML_PATH_UNSECURE_BASE_LINK_URL = 'web/unsecure/base_link_url';
const XML_PATH_OFFLOADER_HEADER = 'web/secure/offloader_header';
const XML_PATH_PRICE_SCOPE = 'catalog/price/scope';
/**
* Price scope constants
*/
const PRICE_SCOPE_GLOBAL = 0;
const PRICE_SCOPE_WEBSITE = 1;
/**
* Possible URL types
*/
const URL_TYPE_LINK = 'link';
const URL_TYPE_DIRECT_LINK = 'direct_link';
const URL_TYPE_WEB = 'web';
const URL_TYPE_SKIN = 'skin';
const URL_TYPE_JS = 'js';
const URL_TYPE_MEDIA = 'media';
/**
* Code constants
*/
const DEFAULT_CODE = 'default';
const ADMIN_CODE = 'admin';
/**
* Cache tag
*/
const CACHE_TAG = 'store';
/**
* Cookie name
*/
const COOKIE_NAME = 'store';
/**
* Script name, which returns all the images
*/
const MEDIA_REWRITE_SCRIPT = 'get.php/';
/**
* Cache flag
*
* @var boolean
*/
protected $_cacheTag = true;
/**
* Event prefix for model events
*
* @var string
*/
protected $_eventPrefix = 'store';
/**
* Event object name
*
* @var string
*/
protected $_eventObject = 'store';
/**
* Price filter
*
* @var Mage_Directory_Model_Currency_Filter
*/
protected $_priceFilter;
/**
* Website model
*
* @var Mage_Core_Model_Website
*/
protected $_website;
/**
* Group model
*
* @var Mage_Core_Model_Store_Group
*/
protected $_group;
/**
* Store configuration cache
*
* @var array|null
*/
protected $_configCache = null;
/**
* Base nodes of store configuration cache
*
* @var array
*/
protected $_configCacheBaseNodes = array();
/**
* Directory cache
*
* @var array
*/
protected $_dirCache = array();
/**
* URL cache
*
* @var array
*/
protected $_urlCache = array();
/**
* Base URL cache
*
* @var array
*/
protected $_baseUrlCache = array();
/**
* Session entity
*
* @var Mage_Core_Model_Session_Abstract
*/
protected $_session;
/**
* Flag that shows that backend URLs are secure
*
* @var boolean|null
*/
protected $_isAdminSecure = null;
/**
* Flag that shows that frontend URLs are secure
*
* @var boolean|null
*/
protected $_isFrontSecure = null;
/**
* Store frontend name
*
* @var string|null
*/
protected $_frontendName = null;
/**
* Readonly flag
*
* @var bool
*/
private $_isReadOnly = false;
/**
* Initialize object
*/
protected function _construct()
{
$this->_init('core/store');
$this->_configCacheBaseNodes = array(
self::XML_PATH_PRICE_SCOPE,
self::XML_PATH_SECURE_BASE_URL,
self::XML_PATH_SECURE_IN_ADMINHTML,
self::XML_PATH_SECURE_IN_FRONTEND,
self::XML_PATH_STORE_IN_URL,
self::XML_PATH_UNSECURE_BASE_URL,
self::XML_PATH_USE_REWRITES,
self::XML_PATH_UNSECURE_BASE_LINK_URL,
self::XML_PATH_SECURE_BASE_LINK_URL,
'general/locale/code'
);
}
/**
* Retrieve store session object
*
* @return Mage_Core_Model_Session_Abstract
*/
protected function _getSession()
{
if (!$this->_session) {
$this->_session = Mage::getModel('core/session')
->init('store_'.$this->getCode());
}
return $this->_session;
}
/**
* Loading store data
*
* @param mixed $id
* @param string $field
* @return Mage_Core_Model_Store
*/
public function load($id, $field=null)
{
if (!is_numeric($id) && is_null($field)) {
$this->_getResource()->load($this, $id, 'code');
return $this;
}
return parent::load($id, $field);
}
/**
* Loading store configuration data
*
* @param string $code
* @return Mage_Core_Model_Store
*/
public function loadConfig($code)
{
if (is_numeric($code)) {
foreach (Mage::getConfig()->getNode()->stores->children() as $storeCode => $store) {
if ((int) $store->system->store->id == $code) {
$code = $storeCode;
break;
}
}
} else {
$store = Mage::getConfig()->getNode()->stores->{$code};
}
if (!empty($store)) {
$this->setCode($code);
$id = (int) $store->system->store->id;
$this->setId($id)->setStoreId($id);
$this->setWebsiteId((int) $store->system->website->id);
}
return $this;
}
/**
* Retrieve Store code
*
* @return string
*/
public function getCode()
{
return $this->_getData('code');
}
/**
* Retrieve store configuration data
*
* @param string $path
* @return string|null
*/
public function getConfig($path)
{
if (isset($this->_configCache[$path])) {
return $this->_configCache[$path];
}
$config = Mage::getConfig();
$fullPath = 'stores/' . $this->getCode() . '/' . $path;
$data = $config->getNode($fullPath);
if (!$data && !Mage::isInstalled()) {
$data = $config->getNode('default/' . $path);
}
if (!$data) {
return null;
}
return $this->_processConfigValue($fullPath, $path, $data);
}
/**
* Initialize base store configuration data
*
* Method provide cache configuration data without loading store config XML
*
* @return Mage_Core_Model_Config
*/
public function initConfigCache()
{
/**
* Funtionality related with config separation
*/
if ($this->_configCache === null) {
$code = $this->getCode();
if ($code) {
if (Mage::app()->useCache('config')) {
$cacheId = 'store_' . $code . '_config_cache';
$data = Mage::app()->loadCache($cacheId);
if ($data) {
$data = unserialize($data);
} else {
$data = array();
foreach ($this->_configCacheBaseNodes as $node) {
$data[$node] = $this->getConfig($node);
}
Mage::app()->saveCache(serialize($data), $cacheId, array(
self::CACHE_TAG,
Mage_Core_Model_Config::CACHE_TAG
));
}
$this->_configCache = $data;
}
}
}
return $this;
}
/**
* Set config value for CURRENT model
*
* This value don't save in config
*
* @param string $path
* @param mixed $value
* @return Mage_Core_Model_Store
*/
public function setConfig($path, $value)
{
if (isset($this->_configCache[$path])) {
$this->_configCache[$path] = $value;
}
$fullPath = 'stores/' . $this->getCode() . '/' . $path;
Mage::getConfig()->setNode($fullPath, $value);
return $this;
}
/**
* Set website model
*
* @param Mage_Core_Model_Website $website
*/
public function setWebsite(Mage_Core_Model_Website $website)
{
$this->_website = $website;
}
/**
* Retrieve store website
*
* @return Mage_Core_Model_Website
*/
public function getWebsite()
{
if (is_null($this->getWebsiteId())) {
return false;
}
if (is_null($this->_website)) {
$this->_website = Mage::app()->getWebsite($this->getWebsiteId());
}
return $this->_website;
}
/**
* Process config value
*
* @param string $fullPath
* @param string $path
* @param Varien_Simplexml_Element $node
* @return string
*/
protected function _processConfigValue($fullPath, $path, $node)
{
if (isset($this->_configCache[$path])) {
return $this->_configCache[$path];
}
if ($node->hasChildren()) {
$aValue = array();
foreach ($node->children() as $k => $v) {
$aValue[$k] = $this->_processConfigValue($fullPath . '/' . $k, $path . '/' . $k, $v);
}
$this->_configCache[$path] = $aValue;
return $aValue;
}
$sValue = (string) $node;
if (!empty($node['backend_model']) && !empty($sValue)) {
$backend = Mage::getModel((string) $node['backend_model']);
$backend->setPath($path)->setValue($sValue)->afterLoad();
$sValue = $backend->getValue();
}
if (is_string($sValue) && strpos($sValue, '{{') !== false) {
if (strpos($sValue, '{{unsecure_base_url}}') !== false) {
$unsecureBaseUrl = $this->getConfig(self::XML_PATH_UNSECURE_BASE_URL);
$sValue = str_replace('{{unsecure_base_url}}', $unsecureBaseUrl, $sValue);
} elseif (strpos($sValue, '{{secure_base_url}}') !== false) {
$secureBaseUrl = $this->getConfig(self::XML_PATH_SECURE_BASE_URL);
$sValue = str_replace('{{secure_base_url}}', $secureBaseUrl, $sValue);
} elseif (strpos($sValue, '{{base_url}}') === false) {
$sValue = Mage::getConfig()->substDistroServerVars($sValue);
}
}
$this->_configCache[$path] = $sValue;
return $sValue;
}
/**
* Convert config values for url pathes
*
* @deprecated after 1.4.2.0
* @param string $value
* @return string
*/
public function processSubst($value)
{
if (!is_string($value)) {
return $value;
}
if (strpos($value, '{{unsecure_base_url}}') !== false) {
$unsecureBaseUrl = $this->getConfig(self::XML_PATH_UNSECURE_BASE_URL);
$value = str_replace('{{unsecure_base_url}}', $unsecureBaseUrl, $value);
} elseif (strpos($value, '{{secure_base_url}}') !== false) {
$secureBaseUrl = $this->getConfig(self::XML_PATH_SECURE_BASE_URL);
$value = str_replace('{{secure_base_url}}', $secureBaseUrl, $value);
} elseif (strpos($value, '{{') !== false && strpos($value, '{{base_url}}') === false) {
$value = Mage::getConfig()->substDistroServerVars($value);
}
return $value;
}
/**
* Retrieve default base path
*
* @return string
*/
public function getDefaultBasePath()
{
if (!isset($_SERVER['SCRIPT_NAME'])) {
return '/';
}
return rtrim(Mage::app()->getRequest()->getBasePath() . '/') . '/';
}
/**
* Retrieve url using store configuration specific
*
* @param string $route
* @param array $params
* @return string
*/
public function getUrl($route = '', $params = array())
{
/** @var $url Mage_Core_Model_Url */
$url = Mage::getModel('core/url')
->setStore($this);
if (Mage::app()->getStore()->getId() != $this->getId()) {
$params['_store_to_url'] = true;
}
return $url->getUrl($route, $params);
}
/**
* Retrieve base URL
*
* @param string $type
* @param boolean|null $secure
* @return string
*/
public function getBaseUrl($type = self::URL_TYPE_LINK, $secure = null)
{
$cacheKey = $type . '/' . (is_null($secure) ? 'null' : ($secure ? 'true' : 'false'));
if (!isset($this->_baseUrlCache[$cacheKey])) {
switch ($type) {
case self::URL_TYPE_WEB:
$secure = is_null($secure) ? $this->isCurrentlySecure() : (bool)$secure;
$url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_url');
break;
case self::URL_TYPE_LINK:
$secure = (bool) $secure;
$url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_link_url');
$url = $this->_updatePathUseRewrites($url);
$url = $this->_updatePathUseStoreView($url);
break;
case self::URL_TYPE_DIRECT_LINK:
$secure = (bool) $secure;
$url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_link_url');
$url = $this->_updatePathUseRewrites($url);
break;
case self::URL_TYPE_SKIN:
case self::URL_TYPE_JS:
$secure = is_null($secure) ? $this->isCurrentlySecure() : (bool) $secure;
$url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_' . $type . '_url');
break;
case self::URL_TYPE_MEDIA:
$url = $this->_updateMediaPathUseRewrites($secure);
break;
default:
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid base url type'));
}
if (false !== strpos($url, '{{base_url}}')) {
$baseUrl = Mage::getConfig()->substDistroServerVars('{{base_url}}');
$url = str_replace('{{base_url}}', $baseUrl, $url);
}
$this->_baseUrlCache[$cacheKey] = rtrim($url, '/') . '/';
}
return $this->_baseUrlCache[$cacheKey];
}
/**
* Remove script file name from url in case when server rewrites are enabled
*
* @param string $url
* @return string
*/
protected function _updatePathUseRewrites($url)
{
if ($this->isAdmin()
|| !$this->getConfig(self::XML_PATH_USE_REWRITES)
|| !Mage::isInstalled()
) {
$url .= basename($_SERVER['SCRIPT_FILENAME']) . '/';
}
return $url;
}
/**
* Retrieve URL for media catalog
*
* If we use Database file storage and server doesn't support rewrites (.htaccess in media folder)
* we have to put name of fetching media script exactly into URL
*
* @param null|boolean $secure
* @param string $type
* @return string
*/
protected function _updateMediaPathUseRewrites($secure = null, $type = self::URL_TYPE_MEDIA)
{
$secure = is_null($secure) ? $this->isCurrentlySecure() : (bool) $secure;
$secureStringFlag = $secure ? 'secure' : 'unsecure';
$url = $this->getConfig('web/' . $secureStringFlag . '/base_' . $type . '_url');
if (!$this->getConfig(self::XML_PATH_USE_REWRITES)
&& Mage::helper('core/file_storage_database')->checkDbUsage()
) {
$urlStart = $this->getConfig('web/' . $secureStringFlag . '/base_url');
$url = str_replace($urlStart, $urlStart . self::MEDIA_REWRITE_SCRIPT, $url);
}
return $url;
}
/**
* Add store code to url in case if it is enabled in configuration
*
* @param string $url
* @return string
*/
protected function _updatePathUseStoreView($url)
{
if ($this->getStoreInUrl()) {
$url .= $this->getCode() . '/';
}
return $url;
}
/**
* Returns whether url forming scheme prepends url path with store view code
*
* @return bool
*/
public function getStoreInUrl()
{
return Mage::isInstalled() && $this->getConfig(self::XML_PATH_STORE_IN_URL);
}
/**
* Get store identifier
*
* @return int
*/
public function getId()
{
return $this->_getData('store_id');
}
/**
* Check if store is admin store
*
* @return unknown
*/
public function isAdmin()
{
return $this->getId() == Mage_Core_Model_App::ADMIN_STORE_ID;
}
/**
* Check if backend URLs should be secure
*
* @return boolean
*/
public function isAdminUrlSecure()
{
if ($this->_isAdminSecure === null) {
$this->_isAdminSecure = (boolean) (int) (string) Mage::getConfig()
->getNode(Mage_Core_Model_Url::XML_PATH_SECURE_IN_ADMIN);
}
return $this->_isAdminSecure;
}
/**
* Check if forntend URLs should be secure
*
* @return boolean
*/
public function isFrontUrlSecure()
{
if ($this->_isFrontSecure === null) {
$this->_isFrontSecure = Mage::getStoreConfigFlag(Mage_Core_Model_Url::XML_PATH_SECURE_IN_FRONT,
$this->getId());
}
return $this->_isFrontSecure;
}
/**
* Check if request was secure
*
* @return boolean
*/
public function isCurrentlySecure()
{
$standardRule = !empty($_SERVER['HTTPS']) && ('off' != $_SERVER['HTTPS']);
$offloaderHeader = trim((string) Mage::getConfig()->getNode(self::XML_PATH_OFFLOADER_HEADER, 'default'));
if ((!empty($offloaderHeader) && !empty($_SERVER[$offloaderHeader])) || $standardRule) {
return true;
}
if (Mage::isInstalled()) {
$secureBaseUrl = '';
if (!$this->isAdmin()) {
$secureBaseUrl = Mage::getStoreConfig(Mage_Core_Model_Url::XML_PATH_SECURE_URL);
} else {
$secureBaseUrl = (string) Mage::getConfig()
->getNode(Mage_Core_Model_Url::XML_PATH_SECURE_URL, 'default');
}
if (!$secureBaseUrl) {
return false;
}
if (false !== strpos($secureBaseUrl, '{{base_url}}')) {
$secureBaseUrl = Mage::getConfig()->substDistroServerVars('{{base_url}}');
}
$uri = Zend_Uri::factory($secureBaseUrl);
$port = $uri->getPort();
$isSecure = ($uri->getScheme() == 'https')
&& isset($_SERVER['SERVER_PORT'])
&& ($port == $_SERVER['SERVER_PORT']);
return $isSecure;
} else {
$isSecure = isset($_SERVER['SERVER_PORT']) && (443 == $_SERVER['SERVER_PORT']);
return $isSecure;
}
}
/*************************************************************************************
* Store currency interface
*/
/**
* Retrieve store base currency code
*
* @return string
*/
public function getBaseCurrencyCode()
{
$configValue = $this->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE);
if ($configValue == Mage_Core_Model_Store::PRICE_SCOPE_GLOBAL) {
return Mage::app()->getBaseCurrencyCode();
} else {
return $this->getConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_BASE);
}
}
/**
* Retrieve store base currency
*
* @return Mage_Directory_Model_Currency
*/
public function getBaseCurrency()
{
$currency = $this->getData('base_currency');
if (is_null($currency)) {
$currency = Mage::getModel('directory/currency')->load($this->getBaseCurrencyCode());
$this->setData('base_currency', $currency);
}
return $currency;
}
/**
* Get default store currency code
*
* @return string
*/
public function getDefaultCurrencyCode()
{
$result = $this->getConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_DEFAULT);
return $result;
}
/**
* Retrieve store default currency
*
* @return Mage_Directory_Model_Currency
*/
public function getDefaultCurrency()
{
$currency = $this->getData('default_currency');
if (is_null($currency)) {
$currency = Mage::getModel('directory/currency')->load($this->getDefaultCurrencyCode());
$this->setData('default_currency', $currency);
}
return $currency;
}
/**
* Set current store currency code
*
* @param string $code
* @return string
*/
public function setCurrentCurrencyCode($code)
{
$code = strtoupper($code);
if (in_array($code, $this->getAvailableCurrencyCodes())) {
$this->_getSession()->setCurrencyCode($code);
if ($code == $this->getDefaultCurrency()) {
Mage::app()->getCookie()->delete('currency', $code);
} else {
Mage::app()->getCookie()->set('currency', $code);
}
}
return $this;
}
/**
* Get current store currency code
*
* @return string
*/
public function getCurrentCurrencyCode()
{
// try to get currently set code among allowed
$code = $this->_getSession()->getCurrencyCode();
if (empty($code)) {
$code = $this->getDefaultCurrencyCode();
}
if (in_array($code, $this->getAvailableCurrencyCodes(true))) {
return $code;
}
// take first one of allowed codes
$codes = array_values($this->getAvailableCurrencyCodes(true));
if (empty($codes)) {
// return default code, if no codes specified at all
return $this->getDefaultCurrencyCode();
}
return array_shift($codes);
}
/**
* Get allowed store currency codes
*
* If base currency is not allowed in current website config scope,
* then it can be disabled with $skipBaseNotAllowed
*
* @param bool $skipBaseNotAllowed
* @return array
*/
public function getAvailableCurrencyCodes($skipBaseNotAllowed = false)
{
$codes = $this->getData('available_currency_codes');
if (is_null($codes)) {
$codes = explode(',', $this->getConfig(Mage_Directory_Model_Currency::XML_PATH_CURRENCY_ALLOW));
// add base currency, if it is not in allowed currencies
$baseCurrencyCode = $this->getBaseCurrencyCode();
if (!in_array($baseCurrencyCode, $codes)) {
$codes[] = $baseCurrencyCode;
// save base currency code index for further usage
$disallowedBaseCodeIndex = array_keys($codes);
$disallowedBaseCodeIndex = array_pop($disallowedBaseCodeIndex);
$this->setData('disallowed_base_currency_code_index', $disallowedBaseCodeIndex);
}
$this->setData('available_currency_codes', $codes);
}
// remove base currency code, if it is not allowed by config (optional)
if ($skipBaseNotAllowed) {
$disallowedBaseCodeIndex = $this->getData('disallowed_base_currency_code_index');
if (null !== $disallowedBaseCodeIndex) {
unset($codes[$disallowedBaseCodeIndex]);
}
}
return $codes;
}
/**
* Retrieve store current currency
*
* @return Mage_Directory_Model_Currency
*/
public function getCurrentCurrency()
{
$currency = $this->getData('current_currency');
if (is_null($currency)) {
$currency = Mage::getModel('directory/currency')->load($this->getCurrentCurrencyCode());
$baseCurrency = $this->getBaseCurrency();
if (! $baseCurrency->getRate($currency)) {
$currency = $baseCurrency;
$this->setCurrentCurrencyCode($baseCurrency->getCode());
}
$this->setData('current_currency', $currency);
}
return $currency;
}
/**
* Retrieve current currency rate
*
* @return float
*/
public function getCurrentCurrencyRate()
{
return $this->getBaseCurrency()->getRate($this->getCurrentCurrency());
}
/**
* Convert price from default currency to current currency
*
* @param double $price
* @param boolean $format Format price to currency format
* @param boolean $includeContainer Enclose into <span class="price"><span>
* @return double
*/
public function convertPrice($price, $format = false, $includeContainer = true)
{
if ($this->getCurrentCurrency() && $this->getBaseCurrency()) {
$value = $this->getBaseCurrency()->convert($price, $this->getCurrentCurrency());
} else {
$value = $price;
}
if ($this->getCurrentCurrency() && $format) {
$value = $this->formatPrice($value, $includeContainer);
}
return $value;
}
/**
* Round price
*
* @param mixed $price
* @return double
*/
public function roundPrice($price)
{
return round($price, 2);
}
/**
* Format price with currency filter (taking rate into consideration)
*
* @param double $price
* @param bool $includeContainer
* @return string
*/
public function formatPrice($price, $includeContainer = true)
{
if ($this->getCurrentCurrency()) {
return $this->getCurrentCurrency()->format($price, array(), $includeContainer);
}
return $price;
}
/**
* Get store price filter
*
* @return Varien_Filter_Sprintf
*/
public function getPriceFilter()
{
if (!$this->_priceFilter) {
if ($this->getBaseCurrency() && $this->getCurrentCurrency()) {
$this->_priceFilter = $this->getCurrentCurrency()->getFilter();
$this->_priceFilter->setRate($this->getBaseCurrency()->getRate($this->getCurrentCurrency()));
}
elseif($this->getDefaultCurrency()) {
$this->_priceFilter = $this->getDefaultCurrency()->getFilter();
}
else {
$this->_priceFilter = new Varien_Filter_Sprintf('%s', 2);
}
}
return $this->_priceFilter;
}
/**
* Retrieve root category identifier
*
* @return int
*/
public function getRootCategoryId()
{
if (!$this->getGroup()) {
return 0;
}
return $this->getGroup()->getRootCategoryId();
}
/**
* Set group model for store
*
* @param Mage_Core_Model_Store_Group $group
*/
public function setGroup($group)
{
$this->_group = $group;
}
/**
* Retrieve group model
*
* @return Mage_Core_Model_Store_Group
*/
public function getGroup()
{
if (is_null($this->getGroupId())) {
return false;
}
if (is_null($this->_group)) {
$this->_group = Mage::getModel('core/store_group')->load($this->getGroupId());
}
return $this->_group;
}
/**
* Retrieve website identifier
*
* @return string|int|null
*/
public function getWebsiteId()
{
return $this->_getData('website_id');
}
/**
* Retrieve group identifier
*
* @return string|int|null
*/
public function getGroupId()
{
return $this->_getData('group_id');
}
/**
* Retrieve default group identifier
*
* @return string|int|null
*/
public function getDefaultGroupId()
{
return $this->_getData('default_group_id');
}
/**
* Check if store can be deleted
*
* @return boolean
*/
public function isCanDelete()
{
if (!$this->getId()) {
return false;
}
return $this->getGroup()->getDefaultStoreId() != $this->getId();
}
/**
* Retrieve current url for store
*
* @param bool|string $fromStore
* @return string
*/
public function getCurrentUrl($fromStore = true)
{
$sidQueryParam = $this->_getSession()->getSessionIdQueryParam();
$requestString = Mage::getSingleton('core/url')->escape(
ltrim(Mage::app()->getRequest()->getRequestString(), '/'));
$storeUrl = Mage::app()->getStore()->isCurrentlySecure()
? $this->getUrl('', array('_secure' => true))
: $this->getUrl('');
$storeParsedUrl = parse_url($storeUrl);
$storeParsedQuery = array();
if (isset($storeParsedUrl['query'])) {
parse_str($storeParsedUrl['query'], $storeParsedQuery);
}
$currQuery = Mage::app()->getRequest()->getQuery();
if (isset($currQuery[$sidQueryParam]) && !empty($currQuery[$sidQueryParam])
&& $this->_getSession()->getSessionIdForHost($storeUrl) != $currQuery[$sidQueryParam]
) {
unset($currQuery[$sidQueryParam]);
}
foreach ($currQuery as $k => $v) {
$storeParsedQuery[$k] = $v;
}
if (!Mage::getStoreConfigFlag(Mage_Core_Model_Store::XML_PATH_STORE_IN_URL, $this->getCode())) {
$storeParsedQuery['___store'] = $this->getCode();
}
if ($fromStore !== false) {
$storeParsedQuery['___from_store'] = $fromStore === true ? Mage::app()->getStore()->getCode() : $fromStore;
}
return $storeParsedUrl['scheme'] . '://' . $storeParsedUrl['host']
. (isset($storeParsedUrl['port']) ? ':' . $storeParsedUrl['port'] : '')
. $storeParsedUrl['path'] . $requestString
. ($storeParsedQuery ? '?'.http_build_query($storeParsedQuery, '', '&amp;') : '');
}
/**
* Check if store is active
*
* @return boolean|null
*/
public function getIsActive()
{
return $this->_getData('is_active');
}
/**
* Retrieve store name
*
* @return string|null
*/
public function getName()
{
return $this->_getData('name');
}
/**
* Protect delete from non admin area
*
* Register indexing event before delete store
*
* @return Mage_Core_Model_Store
*/
protected function _beforeDelete()
{
$this->_protectFromNonAdmin();
Mage::getSingleton('index/indexer')->logEvent($this, self::ENTITY, Mage_Index_Model_Event::TYPE_DELETE);
return parent::_beforeDelete();
}
/**
* rewrite in order to clear configuration cache
*
* @return Mage_Core_Model_Store
*/
protected function _afterDelete()
{
parent::_afterDelete();
Mage::getConfig()->removeCache();
return $this;
}
/**
* Init indexing process after store delete commit
*
* @return Mage_Core_Model_Store
*/
protected function _afterDeleteCommit()
{
parent::_afterDeleteCommit();
Mage::getSingleton('index/indexer')->indexEvents(self::ENTITY, Mage_Index_Model_Event::TYPE_DELETE);
return $this;
}
/**
* Reinit and reset Config Data
*
* @return Mage_Core_Model_Store
*/
public function resetConfig()
{
Mage::getConfig()->reinit();
$this->_dirCache = array();
$this->_configCache = array();
$this->_baseUrlCache = array();
$this->_urlCache = array();
return $this;
}
/**
* Get/Set isReadOnly flag
*
* @param bool $value
* @return bool
*/
public function isReadOnly($value = null)
{
if (null !== $value) {
$this->_isReadOnly = (bool) $value;
}
return $this->_isReadOnly;
}
/**
* Retrieve storegroup name
*
* @return string
*/
public function getFrontendName()
{
if (is_null($this->_frontendName)) {
$storeGroupName = (string) Mage::getStoreConfig('general/store_information/name', $this);
$this->_frontendName = (!empty($storeGroupName)) ? $storeGroupName : $this->getGroup()->getName();
}
return $this->_frontendName;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment