[-] Core: Fix language link with multishop from another shop #PSCFV-10063

This commit is contained in:
Rémi Gaillard
2013-08-14 11:25:46 +02:00
parent cecaee8e68
commit 3d591be8c6
3 changed files with 26 additions and 20 deletions
+3
View File
@@ -549,6 +549,9 @@ class DispatcherCore
if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id;
if ($this->use_routes && !isset($this->routes[$id_shop]))
$this->loadRoutes($id_shop);
if (!isset($this->routes[$id_shop]) || !isset($this->routes[$id_shop][$id_lang]) || !isset($this->routes[$id_shop][$id_lang][$route_id]))
return false;
+11 -8
View File
@@ -70,7 +70,7 @@ class LanguageCore extends ObjectModel
/** @var array Languages cache */
protected static $_checkedLangs;
protected static $_LANGUAGES;
protected static $countActiveLanguages;
protected static $countActiveLanguages = array();
protected $webserviceParameters = array(
'objectNodeName' => 'language',
@@ -762,15 +762,18 @@ class LanguageCore extends ObjectModel
return (isset(self::$_cache_language_installation[$iso_code]) ? self::$_cache_language_installation[$iso_code] : false);
}
public static function countActiveLanguages()
public static function countActiveLanguages($id_shop = null)
{
if (!self::$countActiveLanguages)
self::$countActiveLanguages = Db::getInstance()->getValue('
if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id;
if (!isset(self::$countActiveLanguages[$id_shop]))
self::$countActiveLanguages[$id_shop] = Db::getInstance()->getValue('
SELECT COUNT(DISTINCT l.id_lang) FROM `'._DB_PREFIX_.'lang` l
'.Shop::addSqlAssociation('lang', 'l').'
JOIN '._DB_PREFIX_.'lang_shop lang_shop ON (lang_shop.id_lang = l.id_lang AND lang_shop.id_shop = '.(int)$id_shop.')
WHERE l.`active` = 1
');
return self::$countActiveLanguages;
return self::$countActiveLanguages[$id_shop];
}
public static function downloadAndInstallLanguagePack($iso, $version = null, $params = null)
@@ -825,8 +828,8 @@ class LanguageCore extends ObjectModel
* @since 1.5.0
* @return bool
*/
public static function isMultiLanguageActivated()
public static function isMultiLanguageActivated($id_shop = null)
{
return (Language::countActiveLanguages() > 1);
return (Language::countActiveLanguages($id_shop) > 1);
}
}
+12 -12
View File
@@ -96,14 +96,14 @@ class LinkCore
else
$shop = Context::getContext()->shop;
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($product))
{
if (is_array($product) && isset($product['id_product']))
$product = new Product($product['id_product'], false, $id_lang);
$product = new Product($product['id_product'], false, $id_lang, $id_shop);
elseif ((int)$product)
$product = new Product((int)$product, false, $id_lang);
$product = new Product((int)$product, false, $id_lang, $id_shop);
else
throw new PrestaShopException('Invalid product vars');
}
@@ -167,7 +167,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($category))
$category = new Category($category, $id_lang);
@@ -210,7 +210,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($cms_category))
@@ -250,7 +250,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
@@ -294,7 +294,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($supplier))
@@ -331,7 +331,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($manufacturer))
@@ -371,7 +371,7 @@ class LinkCore
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
// If the module has its own route ... just use it !
if (Dispatcher::getInstance()->hasRoute('module-'.$module.'-'.$controller, $id_lang, $id_shop))
@@ -476,7 +476,7 @@ class LinkCore
$uri_path = Dispatcher::getInstance()->createUrl($controller, $id_lang, $request, false, '', $id_shop);
$url = ($ssl && $this->ssl_enable) ? 'https://' : 'http://';
$url .= $shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang).ltrim($uri_path, '/');
$url .= $shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop).ltrim($uri_path, '/');
return $url;
}
@@ -629,12 +629,12 @@ class LinkCore
return $url.(!strstr($url, '?') ? '?' : '&').'orderby='.urlencode($orderby).'&orderway='.urlencode($orderway);
}
protected function getLangLink($id_lang = null, Context $context = null)
protected function getLangLink($id_lang = null, Context $context = null, $id_shop = null)
{
if (!$context)
$context = Context::getContext();
if (!$this->allow || !Language::isMultiLanguageActivated())
if (!$this->allow || !Language::isMultiLanguageActivated($id_shop))
return '';
if (!$id_lang)