';
echo '

';
@@ -2192,7 +2193,7 @@ abstract class AdminTabCore
$languages = Language::getLanguages(false);
foreach ($fields as $key => $options)
{
- if (isset($options['visibility']) && $options['visibility'] > Shop::getContextType())
+ if (isset($options['visibility']) && $options['visibility'] > Context::getContext()->shop->getContextType())
continue;
if (Tools::isMultiShopActivated() && isset($_POST['configUseDefault'][$key]))
diff --git a/classes/Category.php b/classes/Category.php
index bc0c6d75f..5ba96da4c 100644
--- a/classes/Category.php
+++ b/classes/Category.php
@@ -579,9 +579,8 @@ class CategoryCore extends ObjectModel
if (!$id_shop)
$id_shop = Configuration::get('PS_SHOP_DEFAULT');
$shop = new Shop((int)$id_shop);
- $id_category = $shop->getRootCategory();
- return new Category ((int)$id_category, is_null($id_lang) ? (int)_USER_ID_LANG_ : (int)($id_lang));
+ return new Category ((int)$shop->id_category, is_null($id_lang) ? (int)_USER_ID_LANG_ : (int)($id_lang));
}
/**
diff --git a/classes/Configuration.php b/classes/Configuration.php
index 26975c035..d3aa020da 100644
--- a/classes/Configuration.php
+++ b/classes/Configuration.php
@@ -372,7 +372,7 @@ class ConfigurationCore extends ObjectModel
*/
public static function deleteFromContext($key)
{
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
if (!$shopID && !$shopGroupID)
return;
@@ -395,7 +395,7 @@ class ConfigurationCore extends ObjectModel
*/
public static function hasContext($key, $langID, $context)
{
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
if ($context == Shop::CONTEXT_SHOP && Configuration::hasKey($key, $langID, null, $shopID))
return true;
else if ($context == Shop::CONTEXT_GROUP && Configuration::hasKey($key, $langID, $shopGroupID))
@@ -424,7 +424,7 @@ class ConfigurationCore extends ObjectModel
*/
protected static function getShopFromContext(&$id_group_shop, &$id_shop)
{
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
if (is_null($id_shop))
$id_shop = $shopID;
if (is_null($id_group_shop))
diff --git a/classes/FrontController.php b/classes/FrontController.php
index f8aaa9af5..1dd45f1eb 100755
--- a/classes/FrontController.php
+++ b/classes/FrontController.php
@@ -188,7 +188,7 @@ class FrontControllerCore
$cart->id_currency = (int)($cookie->id_currency);
$cart->id_guest = (int)($cookie->id_guest);
$cart->id_group_shop = (int)$this->id_current_group_shop;
- $cart->id_shop = (int)$this->id_current_shop;
+ $cart->id_shop = $this->id_current_shop;
if ($cookie->id_customer)
{
$cart->id_customer = (int)($cookie->id_customer);
@@ -276,7 +276,7 @@ class FrontControllerCore
'vat_management' => (int)Configuration::get('VATNUMBER_MANAGEMENT'),
'opc' => (bool)Configuration::get('PS_ORDER_PROCESS_TYPE'),
'PS_CATALOG_MODE' => (bool)Configuration::get('PS_CATALOG_MODE'),
- 'id_current_shop' => (int)$this->id_current_shop,
+ 'id_current_shop' => $this->id_current_shop,
'id_current_group_shop' => (int)$this->id_current_group_shop
));
diff --git a/classes/Module.php b/classes/Module.php
index de112388a..f7b9d91e9 100644
--- a/classes/Module.php
+++ b/classes/Module.php
@@ -105,7 +105,7 @@ abstract class ModuleCore
public function __construct($name = null)
{
// Search the module shop context
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
$this->setShopID($shopID);
$this->setShopGroupID($shopGroupID);
diff --git a/classes/ObjectModel.php b/classes/ObjectModel.php
index 2710257c4..697ab5f38 100644
--- a/classes/ObjectModel.php
+++ b/classes/ObjectModel.php
@@ -124,12 +124,13 @@ abstract class ObjectModelCore
/* Connect to database and check SQL table/identifier */
if (!Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
die(Tools::displayError());
+ $db = Db::getInstance();
$this->identifier = pSQL($this->identifier);
/* Load object from database if object id is present */
if ($id)
{
if (!isset(self::$_cache[$this->table][(int)$id][(int)$id_shop][(int)$id_lang]))
- self::$_cache[$this->table][(int)($id)][(int)$id_shop][(int)$id_lang] = Db::getInstance()->getRow('
+ self::$_cache[$this->table][(int)($id)][(int)$id_shop][(int)$id_lang] = $db->getRow('
SELECT *
FROM `'._DB_PREFIX_.$this->table.'` a '.
($id_lang ? ('LEFT JOIN `'.pSQL(_DB_PREFIX_.$this->table).'_lang` b ON (a.`'.$this->identifier.'` = b.`'.$this->identifier).'` AND `id_lang` = '.(int)($id_lang).')' : '')
@@ -145,7 +146,7 @@ abstract class ObjectModelCore
if (!$id_lang AND method_exists($this, 'getTranslationsFieldsChild'))
{
- $result = Db::getInstance()->ExecuteS('SELECT * FROM `'.pSQL(_DB_PREFIX_.$this->table).'_lang`
+ $result = $db->ExecuteS('SELECT * FROM `'.pSQL(_DB_PREFIX_.$this->table).'_lang`
WHERE `'.$this->identifier.'` = '.(int)$id
.(($this->langMultiShop AND $id_shop) ? ' AND `id_shop`='.(int)$id_shop : ''));
if ($result)
diff --git a/classes/Product.php b/classes/Product.php
index da5aaa040..2add1418a 100644
--- a/classes/Product.php
+++ b/classes/Product.php
@@ -2079,17 +2079,22 @@ class ProductCore extends ObjectModel
*
* @since 1.5.0
* @param int $quantity
+ * @param int $id_product_attribute
+ * @param bool $update
+ * @param Context $context
*/
- public function setStock($quantity, $id_product_attribute = 0, $update = false)
+ public function setStock($quantity, $id_product_attribute = 0, $update = false, $context = null)
{
if (!$this->id)
return ;
- $shop = Context::getContext()->shop->getID();
+ if (!$context)
+ $context = Context::getContext();
+ $shop = $context->shop;
// For retrocompatibility
$id_product_attribute = (int)$id_product_attribute;
$quantity = (int)$quantity;
- if (Shop::getInstance($shop)->isDefaultShop())
+ if ($shop->isDefaultShop())
{
if ($id_product_attribute)
{
@@ -2111,7 +2116,7 @@ class ProductCore extends ObjectModel
// Change stock quantity on product attribute
if ($id_product_attribute)
{
- if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop))
+ if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop->getID()))
{
$sql = 'UPDATE '._DB_PREFIX_.'stock
SET quantity = '.(($update) ? 'quantity + '. $quantity : $quantity).'
@@ -2122,14 +2127,14 @@ class ProductCore extends ObjectModel
Db::getInstance()->autoExecute(_DB_PREFIX_.'stock', array(
'id_product' => $this->id,
'id_product_attribute' => $id_product_attribute,
- 'id_shop' => $shop,
- 'id_group_shop' => Shop::getGroupFromShop($shop),
+ 'id_shop' => $shop->getID(),
+ 'id_group_shop' => $shop->getGroupID(),
'quantity' => $quantity,
), 'INSERT');
}
// Change stock quantity on product
- if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop))
+ if ($id_stock = Stock::getStockId($this->id, $id_product_attribute, $shop->getID()))
{
$sql = 'UPDATE '._DB_PREFIX_.'stock
SET quantity = '.(($update) ? 'quantity + '. $quantity : $quantity).'
@@ -2140,8 +2145,8 @@ class ProductCore extends ObjectModel
Db::getInstance()->autoExecute(_DB_PREFIX_.'stock', array(
'id_product' => $this->id,
'id_product_attribute' => 0,
- 'id_shop' => $shop,
- 'id_group_shop' => Shop::getGroupFromShop($shop),
+ 'id_shop' => $shop->getID(),
+ 'id_group_shop' => $shop->getGroupID(),
'quantity' => $quantity,
), 'INSERT');
}
@@ -2150,19 +2155,22 @@ class ProductCore extends ObjectModel
* Get the stock quantity of current product
*
* @since 1.5.0
+ * @param int $id_product_attribute
+ * @param Context $context
* @return int
*/
- public function getStock($id_product_attribute = 0)
+ public function getStock($id_product_attribute = 0, $context = null)
{
if (!$this->id)
return 0;
+ if (!$context)
+ $context = Context::getContext();
- $shop = Context::getContext()->shop->getID();
$sql = 'SELECT quantity
FROM '._DB_PREFIX_.'stock
WHERE id_product = '.$this->id.'
AND id_product_attribute = '.(int)$id_product_attribute
- .Shop::sqlSharedStock('', $shop);
+ .Shop::sqlSharedStock();
return (int)Db::getInstance()->getValue($sql);
}
diff --git a/classes/Shop.php b/classes/Shop.php
index fc12feb99..a022b2f6b 100644
--- a/classes/Shop.php
+++ b/classes/Shop.php
@@ -45,12 +45,6 @@ class ShopCore extends ObjectModel
*/
protected $group;
- //private static $current_base_uri;
- //private static $current_theme_name;
- private static $id_current_shop;
- private static $id_current_group_shop;
- private static $id_current_root_category;
-
protected $fieldsSize = array('name' => 64);
protected $fieldsValidate = array(
'active' => 'isBool',
@@ -220,7 +214,7 @@ class ShopCore extends ObjectModel
return false;
$this->theme_name = $row['name'];
- $this->base_uri = $row['uri'];
+ $this->base_uri = ($row['uri']) ? $row['uri'].'/' : '';
return true;
}
@@ -315,7 +309,17 @@ class ShopCore extends ObjectModel
{
return ($this->id == Configuration::get('PS_SHOP_DEFAULT'));
}
-
+
+ /**
+ * Get list of associated tables to shop
+ *
+ * @return array
+ */
+ public static function getAssoTables()
+ {
+ return self::$assoTables;
+ }
+
/**
* Load list of groups and shops, and cache it
*
@@ -357,17 +361,7 @@ class ShopCore extends ObjectModel
}
}
}
-
- /**
- * Get list of associated tables to shop
- *
- * @return array
- */
- public static function getAssoTables()
- {
- return self::$assoTables;
- }
-
+
/**
* Get shops list
*
@@ -390,7 +384,7 @@ class ShopCore extends ObjectModel
}
return $results;
}
-
+
/**
* Return a shop ID from shop name
*
@@ -406,7 +400,7 @@ class ShopCore extends ObjectModel
return $shopID;
return false;
}
-
+
/**
* @return int Total of shops
*/
@@ -414,7 +408,7 @@ class ShopCore extends ObjectModel
{
return count(Shop::getShops($active));
}
-
+
/**
* Retrieve group ID of a shop
*
@@ -449,23 +443,24 @@ class ShopCore extends ObjectModel
* Retrieve the current shop context in FO or BO
*
* @param string null|shop|group
+ * @param bool If true, this method will return default shop ID if no shop was found in context (for BO)
* @return array(id_shop, id_group_shop)|int
*/
- public static function retrieveContext($type = null)
+ public static function getContext($type = null, $useDefault = false)
{
static $executed = false, $shopID = 0, $shopGroupID = 0;
+
if (!$executed)
{
+ $context = Context::getContext();
if (defined('PS_ADMIN_DIR'))
{
- global $cookie;
-
// While cookie is not instancied in admin, we wait ...
- if (!$cookie)
+ if (!isset($context->cookie))
return ($type == 'shop' || $type == 'group') ? '' : array('', '');
// Parse shopContext cookie value (E.g. s-2, g-4)
- $split = explode('-', $cookie->shopContext);
+ $split = explode('-', Context::getContext()->cookie);
$shopID = $shopGroupID = '';
if (count($split) == 2)
{
@@ -480,11 +475,17 @@ class ShopCore extends ObjectModel
}
else
{
- $shopID = (int)self::$id_current_shop;
- $shopGroupID = (int)self::$id_current_group_shop;
+ $shopID = $context->shop->getID();
+ $shopGroupID = $context->shop->getGroupID();
}
$executed = true;
}
+
+ if ($useDefault && !$shopID)
+ $shopID = Configuration::get('PS_SHOP_DEFAULT');
+ if ($useDefault && !$shopGroupID)
+ $shopID = Shop::getGroupFromShop(Configuration::get('PS_SHOP_DEFAULT'));
+
if ($type == 'shop')
return $shopID;
else if ($type == 'group')
@@ -519,7 +520,7 @@ class ShopCore extends ObjectModel
*/
public static function getListFromContext()
{
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
return Shop::getListOfID($shopID, $shopGroupID);
}
@@ -528,9 +529,9 @@ class ShopCore extends ObjectModel
*
* @return int
*/
- public static function getContextType()
+ public function getContextType()
{
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
if ($shopID)
return Shop::CONTEXT_SHOP;
else if ($shopGroupID)
@@ -548,9 +549,9 @@ class ShopCore extends ObjectModel
$restriction = '';
if (is_null($shopID))
- $shopID = Shop::retrieveContext('shop');
+ $shopID = Shop::getContext('shop');
if (is_null($shopGroupID))
- $shopGroupID = Shop::retrieveContext('group');
+ $shopGroupID = Shop::getContext('group');
if ($type == 'group_shop')
{
@@ -607,7 +608,7 @@ class ShopCore extends ObjectModel
$tree = Shop::getTree();
// Get default value
- list($shopID, $shopGroupID) = Shop::retrieveContext();
+ list($shopID, $shopGroupID) = Shop::getContext();
if ($shopID)
$value = 's-'.$shopID;
else if ($shopGroupID)
diff --git a/controllers/AuthController.php b/controllers/AuthController.php
index 5a745b1bc..2d289ea32 100644
--- a/controllers/AuthController.php
+++ b/controllers/AuthController.php
@@ -132,7 +132,7 @@ class AuthControllerCore extends FrontController
$this->errors[] = Tools::displayError('Invalid date of birth');
if (!sizeof($this->errors))
{
- if (Customer::customerExists(Tools::getValue('email'), false, true, (int)$this->id_current_group_shop, (int)$this->id_current_shop))
+ if (Customer::customerExists(Tools::getValue('email')))
$this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.');
if (Tools::isSubmit('newsletter'))
{
diff --git a/controllers/CMSController.php b/controllers/CMSController.php
index 1104bd6b0..8d4ab522f 100644
--- a/controllers/CMSController.php
+++ b/controllers/CMSController.php
@@ -60,7 +60,7 @@ class CmsControllerCore extends FrontController
parent::preProcess();
/* assignCase (1 = CMS page, 2 = CMS category) */
- if (Validate::isLoadedObject($this->cms) AND ($this->cms->isAssociatedToShop((int)$this->id_current_shop) AND $this->cms->active OR (Tools::getValue('adtoken') == Tools::encrypt('PreviewCMS'.$this->cms->id) AND file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad').'/ajax.php'))))
+ if (Validate::isLoadedObject($this->cms) AND ($this->cms->isAssociatedToShop() AND $this->cms->active OR (Tools::getValue('adtoken') == Tools::encrypt('PreviewCMS'.$this->cms->id) AND file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad').'/ajax.php'))))
$this->assignCase = 1;
elseif (Validate::isLoadedObject($this->cms_category))
$this->assignCase = 2;
diff --git a/controllers/CartController.php b/controllers/CartController.php
index a766ab01e..9da4bdf29 100644
--- a/controllers/CartController.php
+++ b/controllers/CartController.php
@@ -105,7 +105,7 @@ class CartControllerCore extends FrontController
$this->errors[] = Tools::displayError('Product not found');
else
{
- $producToAdd = new Product((int)($idProduct), true, (int)self::$cookie->id_lang, (int)$this->id_current_shop);
+ $producToAdd = new Product((int)($idProduct), true, (int)self::$cookie->id_lang);
if ((!$producToAdd->id OR !$producToAdd->active) AND !$delete)
if (Tools::getValue('ajax') == 'true')
die('{"hasError" : true, "errors" : ["'.Tools::displayError('Product is no longer available.', false).'"]}');
diff --git a/controllers/CategoryController.php b/controllers/CategoryController.php
index 5ad36d0d4..1c85eac95 100644
--- a/controllers/CategoryController.php
+++ b/controllers/CategoryController.php
@@ -51,7 +51,7 @@ class CategoryControllerCore extends FrontController
public function preProcess()
{
if ($id_category = (int)Tools::getValue('id_category'))
- $this->category = new Category($id_category, self::$cookie->id_lang, (int)$this->id_current_shop);
+ $this->category = new Category($id_category, self::$cookie->id_lang);
if (!Validate::isLoadedObject($this->category))
{
header('HTTP/1.1 404 Not Found');
diff --git a/controllers/CompareController.php b/controllers/CompareController.php
index 6bd24211f..5f6a43e3b 100644
--- a/controllers/CompareController.php
+++ b/controllers/CompareController.php
@@ -58,14 +58,14 @@ class CompareControllerCore extends FrontController
foreach ($ids AS $k => &$id)
{
- $curProduct = new Product((int)$id, true, (int)self::$cookie->id_lang,(int)$this->id_current_shop);
- if (!$curProduct->active OR !$curProduct->isAssociatedToShop((int)$this->id_current_shop))
+ $curProduct = new Product((int)$id, true, (int)self::$cookie->id_lang);
+ if (!$curProduct->active OR !$curProduct->isAssociatedToShop())
{
unset($ids[$k]);
continue;
}
- if (!$curProduct->active OR !$curProduct->isAssociatedToShop((int)$this->id_current_shop))
+ if (!$curProduct->active OR !$curProduct->isAssociatedToShop())
{
unset($ids[$k]);
continue;
diff --git a/controllers/ContactController.php b/controllers/ContactController.php
index 76450c88f..51c50963c 100644
--- a/controllers/ContactController.php
+++ b/controllers/ContactController.php
@@ -103,7 +103,7 @@ class ContactControllerCore extends FrontController
else
{
$customer = new Customer();
- $customer->getByEmail($from, NULL, (int)$this->id_current_group_shop, (int)$this->id_current_shop);
+ $customer->getByEmail($from);
}
$contact = new Contact($id_contact, self::$cookie->id_lang);
diff --git a/controllers/ManufacturerController.php b/controllers/ManufacturerController.php
index 0793193a4..01145546c 100644
--- a/controllers/ManufacturerController.php
+++ b/controllers/ManufacturerController.php
@@ -40,7 +40,7 @@ class ManufacturerControllerCore extends FrontController
if ($id_manufacturer = Tools::getValue('id_manufacturer'))
{
$this->manufacturer = new Manufacturer((int)$id_manufacturer, self::$cookie->id_lang);
- if (Validate::isLoadedObject($this->manufacturer) AND $this->manufacturer->active AND $this->manufacturer->isAssociatedToGroupShop((int)$this->id_current_shop))
+ if (Validate::isLoadedObject($this->manufacturer) AND $this->manufacturer->active AND $this->manufacturer->isAssociatedToGroupShop())
{
$nbProducts = $this->manufacturer->getProducts($id_manufacturer, NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$nbProducts);
diff --git a/controllers/ProductController.php b/controllers/ProductController.php
index 59858783b..8959abe0c 100644
--- a/controllers/ProductController.php
+++ b/controllers/ProductController.php
@@ -102,7 +102,7 @@ class ProductControllerCore extends FrontController
$this->errors[] = Tools::displayError('Product not found');
else
{
- if (!Validate::isLoadedObject($this->product) OR !$this->product->isAssociatedToShop((int)$this->id_current_shop)
+ if (!Validate::isLoadedObject($this->product) OR !$this->product->isAssociatedToShop()
OR (!$this->product->active AND (Tools::getValue('adtoken') != Tools::encrypt('PreviewProduct'.$this->product->id))
|| !file_exists(dirname(__FILE__).'/../'.Tools::getValue('ad').'/ajax.php')))
{
@@ -160,16 +160,16 @@ class ProductControllerCore extends FrontController
if (isset($regs[2]) AND is_numeric($regs[2]))
{
if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[2])))))
- $category = new Category((int)($regs[2]), (int)self::$cookie->id_lang, (int)$this->id_current_shop);
+ $category = new Category((int)($regs[2]), (int)self::$cookie->id_lang);
}
elseif (isset($regs[5]) AND is_numeric($regs[5]))
{
if (Product::idIsOnCategoryId((int)($this->product->id), array('0' => array('id_category' => (int)($regs[5])))))
- $category = new Category((int)($regs[5]), (int)self::$cookie->id_lang, (int)$this->id_current_shop);
+ $category = new Category((int)($regs[5]), (int)self::$cookie->id_lang);
}
}
if (!$category)
- $category = new Category($this->product->id_category_default, (int)self::$cookie->id_lang, (int)$this->id_current_shop);
+ $category = new Category($this->product->id_category_default, (int)self::$cookie->id_lang);
if (isset($category) AND Validate::isLoadedObject($category))
{
diff --git a/controllers/SupplierController.php b/controllers/SupplierController.php
index 4d297880a..2861d7dab 100644
--- a/controllers/SupplierController.php
+++ b/controllers/SupplierController.php
@@ -40,7 +40,7 @@ class SupplierControllerCore extends FrontController
if ($id_supplier = Tools::getValue('id_supplier'))
{
$this->supplier = new Supplier((int)$id_supplier, self::$cookie->id_lang);
- if (Validate::isLoadedObject($this->supplier) AND $this->supplier->active AND $this->supplier->isAssociatedToGroupShop((int)$this->id_current_shop))
+ if (Validate::isLoadedObject($this->supplier) AND $this->supplier->active AND $this->supplier->isAssociatedToGroupShop())
{
$nbProducts = $this->supplier->getProducts($id_supplier, NULL, NULL, NULL, $this->orderBy, $this->orderWay, true);
$this->pagination((int)$nbProducts);