diff --git a/admin-dev/init.php b/admin-dev/init.php index e94d227dc..e6c8e2e23 100644 --- a/admin-dev/init.php +++ b/admin-dev/init.php @@ -38,62 +38,61 @@ if (!$cookie->isLoggedBack()) $destination = substr($_SERVER['REQUEST_URI'], strlen(dirname($_SERVER['SCRIPT_NAME'])) + 1); Tools::redirectAdmin('login.php'.(empty($destination) || ($destination == 'index.php?logout') ? '' : '?redirect='.$destination)); } -else + +$currentIndex = $_SERVER['SCRIPT_NAME'].(($tab = Tools::getValue('tab')) ? '?tab='.$tab : ''); +if ($back = Tools::getValue('back')) + $currentIndex .= '&back='.urlencode($back); + +/* Server Params */ +$protocol_link = (Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://'; +$protocol_content = (isset($useSSL) AND $useSSL AND Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://'; +$link = new Link($protocol_link, $protocol_content); +define('_PS_BASE_URL_', Tools::getShopDomain(true)); +define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); + +$employee = new Employee((int)$cookie->id_employee); +$cookie->id_lang = (int)$employee->id_lang; +$language = new Language($cookie->id_lang ? $cookie->id_lang : Configuration::get('PS_LANG_DEFAULT')); +$iso = $language->iso_code; +include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php'); +include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php'); +include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php'); + +/* attribute id_lang is often needed, so we create a constant for performance reasons */ +define('_USER_ID_LANG_', (int)$cookie->id_lang); + +$path = dirname(__FILE__).'/themes/'; +if (empty($employee->bo_theme) OR !file_exists($path.$employee->bo_theme.'/admin.css')) { - $currentIndex = $_SERVER['SCRIPT_NAME'].(($tab = Tools::getValue('tab')) ? '?tab='.$tab : ''); - if ($back = Tools::getValue('back')) - $currentIndex .= '&back='.urlencode($back); - - /* Server Params */ - $protocol_link = (Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://'; - $protocol_content = (isset($useSSL) AND $useSSL AND Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://'; - $link = new Link($protocol_link, $protocol_content); - define('_PS_BASE_URL_', Tools::getShopDomain(true)); - define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); - - $employee = new Employee((int)$cookie->id_employee); - $cookie->id_lang = (int)$employee->id_lang; - $language = new Language($cookie->id_lang ? $cookie->id_lang : Configuration::get('PS_LANG_DEFAULT')); - $iso = $language->iso_code; - include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php'); - include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php'); - include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php'); - - /* attribute id_lang is often needed, so we create a constant for performance reasons */ - define('_USER_ID_LANG_', (int)$cookie->id_lang); - - $path = dirname(__FILE__).'/themes/'; - if (empty($employee->bo_theme) OR !file_exists($path.$employee->bo_theme.'/admin.css')) - { - if (file_exists($path.'oldschool/admin.css')) - $employee->bo_theme = 'oldschool'; - elseif (file_exists($path.'origins/admin.css')) - $employee->bo_theme = 'origins'; - else - foreach (scandir($path) as $theme) - if ($theme[0] != '.' AND file_exists($path.$theme.'/admin.css')) - { - $employee->bo_theme = $theme; - break; - } - $employee->update(); - } - - // Change shop context ? - if (Tools::isMultiShopActivated() && Tools::getValue('setShopContext') !== false) - { - $cookie->shopContext = Tools::getValue('setShopContext'); - $url = parse_url($_SERVER['REQUEST_URI']); - $query = (isset($url['query'])) ? $url['query'] : ''; - parse_str($query, $parseQuery); - unset($parseQuery['setShopContext']); - Tools::redirectAdmin($url['path'] . '?' . http_build_query($parseQuery)); - } - - $context = Context::getContext(); - $context->employee = $employee; - $context->cookie = $cookie; - $context->link = $link; - $context->language = $language; - $context->country = new Country(Configuration::get('PS_COUNTRY_DEFAULT')); + if (file_exists($path.'oldschool/admin.css')) + $employee->bo_theme = 'oldschool'; + elseif (file_exists($path.'origins/admin.css')) + $employee->bo_theme = 'origins'; + else + foreach (scandir($path) as $theme) + if ($theme[0] != '.' AND file_exists($path.$theme.'/admin.css')) + { + $employee->bo_theme = $theme; + break; + } + $employee->update(); } + +// Change shop context ? +if (Tools::isMultiShopActivated() && Tools::getValue('setShopContext') !== false) +{ + $cookie->shopContext = Tools::getValue('setShopContext'); + $url = parse_url($_SERVER['REQUEST_URI']); + $query = (isset($url['query'])) ? $url['query'] : ''; + parse_str($query, $parseQuery); + unset($parseQuery['setShopContext']); + Tools::redirectAdmin($url['path'] . '?' . http_build_query($parseQuery)); +} + +$context = Context::getContext(); +$context->employee = $employee; +$context->cookie = $cookie; +$context->link = $link; +$context->language = $language; +$context->country = new Country(Configuration::get('PS_COUNTRY_DEFAULT')); +$context->shop = new Shop(Shop::getContext('shop', true)); \ No newline at end of file diff --git a/admin-dev/tabs/AdminMeta.php b/admin-dev/tabs/AdminMeta.php index 674751d50..963762165 100644 --- a/admin-dev/tabs/AdminMeta.php +++ b/admin-dev/tabs/AdminMeta.php @@ -133,7 +133,7 @@ class AdminMeta extends AdminTab foreach ($this->_languages as $language) echo '
- + '.$this->l('Invalid characters:').' <>;=#{} 

'.$this->l('Example : "contacts" for http://mysite.com/shop/contacts to redirect to http://mysite.com/shop/contact-form.php').'

'; diff --git a/admin-dev/tabs/AdminModulesPositions.php b/admin-dev/tabs/AdminModulesPositions.php index e3fd658c7..3d9a6fef1 100644 --- a/admin-dev/tabs/AdminModulesPositions.php +++ b/admin-dev/tabs/AdminModulesPositions.php @@ -31,8 +31,6 @@ class AdminModulesPositions extends AdminTab public function postProcess() { - global $currentIndex; - // Getting key value for display if (Tools::getValue('show_modules') AND strval(Tools::getValue('show_modules')) != 'all') $this->displayKey = (int)(Tools::getValue('show_modules')); @@ -48,7 +46,7 @@ class AdminModulesPositions extends AdminTab if (Validate::isLoadedObject($module)) { $module->updatePosition($id_hook, (int)(Tools::getValue('direction'))); - Tools::redirectAdmin($currentIndex.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } else $this->_errors[] = Tools::displayError('module cannot be loaded'); @@ -89,7 +87,7 @@ class AdminModulesPositions extends AdminTab elseif (!$module->registerExceptions($id_hook, $excepts, Shop::getListFromContext())) $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); else - Tools::redirectAdmin($currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } } else @@ -131,7 +129,7 @@ class AdminModulesPositions extends AdminTab } if (!$this->_errors) - Tools::redirectAdmin($currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } else { @@ -146,7 +144,7 @@ class AdminModulesPositions extends AdminTab if (!$module->editExceptions($id_hook, $exceptions, Shop::getListFromContext())) $this->_errors[] = Tools::displayError('An error occurred while transplanting module to hook.'); else - Tools::redirectAdmin($currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=16'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } } } @@ -172,7 +170,7 @@ class AdminModulesPositions extends AdminTab if (!$module->unregisterHook($id_hook, Shop::getListFromContext()) OR !$module->unregisterExceptions($id_hook, Shop::getListFromContext())) $this->_errors[] = Tools::displayError('An error occurred while deleting module from hook.'); else - Tools::redirectAdmin($currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } } else @@ -202,7 +200,7 @@ class AdminModulesPositions extends AdminTab } } if (!sizeof($this->_errors)) - Tools::redirectAdmin($currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=17'.($this->displayKey ? '&show_modules='.$this->displayKey : '').'&token='.$this->token); } } } @@ -217,9 +215,7 @@ class AdminModulesPositions extends AdminTab public function displayList() { - global $currentIndex; - - $link = new Link(); + $context = Context::getContext(); $admin_dir = dirname($_SERVER['PHP_SELF']); $admin_dir = substr($admin_dir, strrpos($admin_dir,'/') + 1); @@ -231,13 +227,13 @@ class AdminModulesPositions extends AdminTab '; - echo ' '.$this->l('Transplant a module').'

'; + echo ' '.$this->l('Transplant a module').'

'; // Print select list echo '
'.$this->l('Show').' : - '; $modules = Module::getModulesInstalled(); @@ -253,26 +249,26 @@ class AdminModulesPositions extends AdminTab echo '

-   +  
'.$this->l('Live edit').''; - if (Tools::isMultiShopActivated() && Shop::getContextType() != Shop::CONTEXT_SHOP) + if (Tools::isMultiShopActivated() && $context->shop->getContextType() != Shop::CONTEXT_SHOP) echo '

'.$this->l('You have to select a shop to use live edit').'

'; else echo '

'.$this->l('By clicking here you will be redirected to the front office of your shop to move and delete modules directly.').'


- '.$this->l('Run LiveEdit').''; + '.$this->l('Run LiveEdit').''; echo '
'; // Print hook list - echo '
'; + echo ''; $irow = 0; $hooks = Hook::getHooks(!(int)(Tools::getValue('hook_position'))); echo '
'; - $canMove = (Tools::isMultiShopActivated() && Shop::getContextType() != Shop::CONTEXT_SHOP) ? false : true; + $canMove = (Tools::isMultiShopActivated() && $context->shop->getContextType() != Shop::CONTEXT_SHOP) ? false : true; if (!$canMove) echo '
'.$this->l('If you want to order / move following data, please go in shop context (select a shop in shop list)').'
'; foreach ($hooks AS $hook) @@ -307,8 +303,8 @@ class AdminModulesPositions extends AdminTab echo ' '.(int)($position).' = 2) ? ' class="dragHandle"' : '').' id="td_'.$hook['id_hook'].'_'.$instance->id.'" width="40"> - '.(($canMove) ? ''.$this->l('Up').'
- '.$this->l('Down').'' : '').' + '.(($canMove) ? ''.$this->l('Up').'
+ '.$this->l('Down').'' : '').' '; echo ' - '.$this->l('Edit').' - '.$this->l('Delete').' + '.$this->l('Edit').' + '.$this->l('Delete').' '; echo ' @@ -337,7 +333,6 @@ class AdminModulesPositions extends AdminTab public function displayForm($isMainTab = true) { - global $currentIndex; parent::displayForm(); $id_module = (int)(Tools::getValue('id_module')); @@ -346,7 +341,7 @@ class AdminModulesPositions extends AdminTab { // Check auth for this page if (!$id_module || !$id_hook) - Tools::redirectAdmin($currentIndex . '&token='.$this->token); + Tools::redirectAdmin($this->currentIndex . '&token='.$this->token); $sql = 'SELECT id_module FROM '._DB_PREFIX_.'hook_module @@ -354,7 +349,7 @@ class AdminModulesPositions extends AdminTab AND id_hook = '.$id_hook.' AND id_shop IN('.implode(', ', ShopCore::getListFromContext()).')'; if (!Db::getInstance()->getValue($sql)) - Tools::redirectAdmin($currentIndex . '&token='.$this->token); + Tools::redirectAdmin($this->currentIndex . '&token='.$this->token); $slModule = Module::getInstanceById($id_module); $exceptsList = $slModule->getExceptions($id_hook, true); @@ -386,7 +381,7 @@ class AdminModulesPositions extends AdminTab $modules = $instances; $hooks = Hook::getHooks(0); echo ' - '; + '; if ($this->displayKey) echo ''; echo '
'.$this->l('Transplant a module').' diff --git a/admin-dev/tabs/AdminPreferences.php b/admin-dev/tabs/AdminPreferences.php index 4957c69eb..29c8a7419 100644 --- a/admin-dev/tabs/AdminPreferences.php +++ b/admin-dev/tabs/AdminPreferences.php @@ -29,14 +29,13 @@ class AdminPreferences extends AdminTab { public function __construct() { - global $cookie; - + $context = Context::getContext(); $this->className = 'Configuration'; $this->table = 'configuration'; $timezones = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT name FROM '._DB_PREFIX_.'timezone'); $taxes[] = array('id' => 0, 'name' => $this->l('None')); - foreach (Tax::getTaxes((int)($cookie->id_lang)) as $tax) + foreach (Tax::getTaxes($context->language->id) as $tax) $taxes[] = array('id' => $tax['id_tax'], 'name' => $tax['name']); $order_process_type = array( @@ -71,7 +70,7 @@ class AdminPreferences extends AdminTab 'name' => $this->l('None') ) ); - foreach (CMS::listCms($cookie->id_lang) as $cms_file) + foreach (CMS::listCms($context->language->id) as $cms_file) $cms_tab[] = array('id' => $cms_file['id_cms'], 'name' => $cms_file['meta_title']); $this->_fieldsGeneral = array( @@ -117,8 +116,6 @@ class AdminPreferences extends AdminTab public function postProcess() { - global $currentIndex; - if (isset($_POST['submitGeneral'.$this->table])) { Module::hookExec('categoryUpdate'); // We call this hook, for regenerate cache of categories @@ -152,7 +149,7 @@ class AdminPreferences extends AdminTab if ($val = Tools::getValue('PS_THEME')) { if (rewriteSettingsFile(NULL, $val, NULL)) - Tools::redirectAdmin($currentIndex.'&conf=6'.'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=6'.'&token='.$this->token); else $this->_errors[] = Tools::displayError('Cannot access settings file.'); } @@ -169,12 +166,10 @@ class AdminPreferences extends AdminTab * Update settings in database and configuration files * * @params array $fields Fields settings - * - * @global string $currentIndex Current URL in order to keep current Tab */ protected function _postConfig($fields) { - global $currentIndex, $smarty; + global $smarty; $languages = Language::getLanguages(false); if (!Configuration::get('PS_FORCE_SMARTY_2')) @@ -282,7 +277,7 @@ class AdminPreferences extends AdminTab if (!sizeof($this->_errors)) { $this->submitConfiguration($fields); - Tools::redirectAdmin($currentIndex.'&conf=6'.'&token='.$this->token); + Tools::redirectAdmin($this->currentIndex.'&conf=6'.'&token='.$this->token); } } } @@ -330,13 +325,10 @@ class AdminPreferences extends AdminTab * * @params string $name Form name * @params array $fields Fields settings - * - * @global string $currentIndex Current URL in order to keep current Tab */ protected function _displayForm($name, $fields, $tabname, $size, $icon) { - global $currentIndex; - + $context = Context::getContext(); $defaultLanguage = (int)(Configuration::get('PS_LANG_DEFAULT')); $languages = Language::getLanguages(false); $confValues = $this->getConf($fields, $languages); @@ -355,7 +347,7 @@ class AdminPreferences extends AdminTab $(\'input[name=PS_MAINTENANCE_IP]\').attr(\'value\',\''.Tools::getRemoteAddr().'\'); } - +
'.$tabname.''; foreach ($fields AS $key => $field) { @@ -376,7 +368,7 @@ class AdminPreferences extends AdminTab echo '
'; } - $isDisabled = (isset($field['visibility']) && $field['visibility'] > Shop::getContextType()) ? true : false; + $isDisabled = (isset($field['visibility']) && $field['visibility'] > $context->shop->getContextType()) ? true : false; /* Display the appropriate input type for each field */ switch ($field['type']) diff --git a/classes/AdminTab.php b/classes/AdminTab.php index 2e4ed801f..28d0a1691 100644 --- a/classes/AdminTab.php +++ b/classes/AdminTab.php @@ -140,6 +140,8 @@ abstract class AdminTabCore /** @var string specificConfirmDelete */ public $specificConfirmDelete = NULL; + + public $currentIndex = ''; protected $identifiersDnd = array('id_product' => 'id_product', 'id_category' => 'id_category_to_move','id_cms_category' => 'id_cms_category_to_move', 'id_cms' => 'id_cms'); @@ -1692,21 +1694,22 @@ abstract class AdminTabCore */ public function displayOptionsList() { - global $currentIndex, $cookie, $tab; + global $tab; + $context = Context::getContext(); if (!isset($this->_fieldsOptions) OR !sizeof($this->_fieldsOptions)) return false; $defaultLanguage = (int)Configuration::get('PS_LANG_DEFAULT'); $this->_languages = Language::getLanguages(false); - $tab = Tab::getTab((int)$cookie->id_lang, Tab::getIdFromClassName($tab)); + $tab = Tab::getTab($context->language->id, Tab::getIdFromClassName($tab)); echo '

'; echo (isset($this->optionTitle) ? '

'.$this->optionTitle.'

' : ''); echo ' - +
'; echo (isset($this->optionTitle) ? ' ' @@ -1719,7 +1722,7 @@ abstract class AdminTabCore if (!Validate::isCleanHtml($val)) $val = Configuration::get($key); - $isDisabled = (isset($field['visibility']) && $field['visibility'] > Shop::getContextType()) ? true : false; + $isDisabled = (isset($field['visibility']) && $field['visibility'] > $context->shop->getContextType()) ? true : false; echo $this->getHtmlDefaultConfigurationValue($key, $this->_languages); echo ' @@ -2002,8 +2005,6 @@ abstract class AdminTabCore protected function warnDomainName() { - global $currentIndex; - if ($_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN') AND $_SERVER['HTTP_HOST'] != Configuration::get('PS_SHOP_DOMAIN_SSL')) $this->displayWarning($this->l('Your are currently connected with the following domain name:').' '.$_SERVER['HTTP_HOST'].'
'. $this->l('This one is different from the main shop domain name set in "Preferences > SEO & URLs":').' '.Configuration::get('PS_SHOP_DOMAIN').'
@@ -2013,15 +2014,15 @@ abstract class AdminTabCore protected function displayAssoShop($field_name = 'name') { - global $currentIndex, $cookie; - if (!Tools::isMultiShopActivated() || (!$this->_object && Shop::getContextType() != Shop::CONTEXT_ALL)) + $context = Context::getContext(); + if (!Tools::isMultiShopActivated() || (!$this->_object && $context->shop->getContextType() != Shop::CONTEXT_ALL)) return; $shops = Shop::getShops(); $objects = Db::getInstance()->ExecuteS('SELECT DISTINCT a.`'.pSQL($this->identifier).'`, '.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? 'b' : 'a').'.`'.pSQL($field_name).'` FROM `'._DB_PREFIX_.pSQL($this->table).'`a '. (($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' LEFT JOIN `'._DB_PREFIX_.pSQL($this->table).'_lang` b ON (a.`'.pSQL($this->identifier).'`=b.`'.pSQL($this->identifier).'`)' : ''). - ' WHERE 1'.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' AND b.id_lang='.(int)$cookie->id_lang : '').($this->_object ? ' AND a.`'.pSQL($this->identifier).'`='.(int)$this->_object->id : '')); + ' WHERE 1'.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' AND b.id_lang='.(int)$context->language->id : '').($this->_object ? ' AND a.`'.pSQL($this->identifier).'`='.(int)$this->_object->id : '')); $assos = array(); $res = Db::getInstance()->ExecuteS('SELECT id_shop, `'.pSQL($this->identifier).'` FROM `'._DB_PREFIX_.pSQL($this->table).'_shop`'); @@ -2032,7 +2033,7 @@ abstract class AdminTabCore { $html = ' - + '; @@ -2074,15 +2075,14 @@ abstract class AdminTabCore protected function displayAssoGroupShop($field_name = 'name') { - global $currentIndex, $cookie; - - if (!Tools::isMultiShopActivated() || (!$this->_object && Shop::getContextType() != Shop::CONTEXT_ALL)) + $context = Context::getContext(); + if (!Tools::isMultiShopActivated() || (!$this->_object && $context->shop->getContextType() != Shop::CONTEXT_ALL)) return; $objects = Db::getInstance()->ExecuteS('SELECT DISTINCT a.`'.pSQL($this->identifier).'`, '.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? 'b' : 'a').'.`'.pSQL($field_name).'` FROM `'._DB_PREFIX_.pSQL($this->table).'` a'. (($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' LEFT JOIN `'._DB_PREFIX_.pSQL($this->table).'_lang` b ON (a.`'.pSQL($this->identifier).'`=b.`'.pSQL($this->identifier).'`)' : ''). - ' WHERE 1'.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' AND b.id_lang='.(int)$cookie->id_lang : '').($this->_object ? ' AND a.`'.pSQL($this->identifier).'`='.(int)$this->_object->id : '')); + ' WHERE 1'.(($this->lang AND isset($this->fieldsDisplay[$field_name]['filter_key']) AND $this->fieldsDisplay[$field_name]['filter_key'] == 'b!'.$field_name) ? ' AND b.id_lang='.(int)$context->language->id : '').($this->_object ? ' AND a.`'.pSQL($this->identifier).'`='.(int)$this->_object->id : '')); $groups_shop = GroupShop::getGroupShops(); $assos = array(); $res = Db::getInstance()->ExecuteS('SELECT id_group_shop, `'.pSQL($this->identifier).'` @@ -2091,7 +2091,7 @@ abstract class AdminTabCore $assos[$row['id_group_shop']][] = $row[$this->identifier]; if (!$this->_object) { - $html = ' + $html = '
'.$this->l('Shop association').'
@@ -2157,21 +2157,22 @@ abstract class AdminTabCore */ protected function getHtmlDefaultConfigurationValue($key, $languages) { + $context = Context::getContext(); if (Configuration::isLangKey($key)) { $testContext = false; foreach ($languages as $lang) - if ((Shop::getContextType() == Shop::CONTEXT_SHOP && Configuration::hasContext($key, $lang['id_lang'], Shop::CONTEXT_SHOP)) - || (Shop::getContextType() == Shop::CONTEXT_GROUP && Configuration::hasContext($key, $lang['id_lang'], Shop::CONTEXT_GROUP))) + if (($context->shop->getContextType() == Shop::CONTEXT_SHOP && Configuration::hasContext($key, $lang['id_lang'], Shop::CONTEXT_SHOP)) + || ($context->shop->getContextType() == Shop::CONTEXT_GROUP && Configuration::hasContext($key, $lang['id_lang'], Shop::CONTEXT_GROUP))) $testContext = true; } else { - $testContext = ((Shop::getContextType() == Shop::CONTEXT_SHOP && Configuration::hasContext($key, null, Shop::CONTEXT_SHOP)) - || (Shop::getContextType() == Shop::CONTEXT_GROUP && Configuration::hasContext($key, null, Shop::CONTEXT_GROUP))) ? true : false; + $testContext = (($context->shop->getContextType() == Shop::CONTEXT_SHOP && Configuration::hasContext($key, null, Shop::CONTEXT_SHOP)) + || ($context->shop->getContextType() == Shop::CONTEXT_GROUP && Configuration::hasContext($key, null, Shop::CONTEXT_GROUP))) ? true : false; } - if (Tools::isMultiShopActivated() && Shop::getContextType() != Shop::CONTEXT_ALL && $testContext) + if (Tools::isMultiShopActivated() && $context->shop->getContextType() != Shop::CONTEXT_ALL && $testContext) { echo '
'; 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);