diff --git a/core/lib/Thelia/Core/HttpFoundation/Session/Session.php b/core/lib/Thelia/Core/HttpFoundation/Session/Session.php index 8c6a241ec..fc2726647 100755 --- a/core/lib/Thelia/Core/HttpFoundation/Session/Session.php +++ b/core/lib/Thelia/Core/HttpFoundation/Session/Session.php @@ -28,6 +28,7 @@ use Thelia\Core\Security\User\UserInterface; use Thelia\Exception\InvalidCartException; use Thelia\Model\CartQuery; use Thelia\Model\Cart; +use Thelia\Model\Currency; use Thelia\Tools\URL; use Thelia\Model\Lang; @@ -44,9 +45,9 @@ class Session extends BaseSession /** * @return \Thelia\Model\Lang|null */ - public function getLang() + public function getLang($forceDefault = true) { - return $this->get("thelia.current.lang", Lang::getDefaultLanguage()); + return $this->get("thelia.current.lang", $forceDefault ? Lang::getDefaultLanguage():null); } public function setLang(Lang $lang) @@ -68,6 +69,16 @@ class Session extends BaseSession return $this; } + public function setCurrency(Currency $currency) + { + $this->set("thelia.current.currency", $currency); + } + + public function getCurrency($forceDefault = true) + { + return $this->get("thelia.current.currency", $forceDefault ? Currency::getDefaultCurrency():null); + } + // -- Customer user -------------------------------------------------------- public function setCustomerUser(UserInterface $user) diff --git a/core/lib/Thelia/Core/TheliaHttpKernel.php b/core/lib/Thelia/Core/TheliaHttpKernel.php index 3c0f14808..319173f5f 100755 --- a/core/lib/Thelia/Core/TheliaHttpKernel.php +++ b/core/lib/Thelia/Core/TheliaHttpKernel.php @@ -135,9 +135,26 @@ class TheliaHttpKernel extends HttpKernel if ($lang) { $request->getSession() ->setLang($lang) - ->setLocale($lang->getLocale()) ; } + + $request->getSession()->setCurrency($this->defineCurrency($request)); + } + + protected function defineCurrency(Request $request) + { + $currency = null; + if ($request->query->has("currency")) { + $currency = Model\CurrencyQuery::create()->findOneByCode($request->query->get("currency")); + } else { + $currency = $request->getSession()->getCurrency(false); + } + + if(null === $currency) { + $currency = Model\Currency::getDefaultCurrency(); + } + + return $currency; } /** @@ -153,7 +170,7 @@ class TheliaHttpKernel extends HttpKernel $lang = Model\LangQuery::create()->findOneByCode($request->query->get("lang")); if (is_null($lang)) { - return; + return Model\Lang::getDefaultLanguage(); } //if each lang had is own domain, we redirect the user to the good one. @@ -175,7 +192,7 @@ class TheliaHttpKernel extends HttpKernel } //check if lang is not defined. If not we have to search the good one. - if (null === $request->getSession()->getLang()) { + if (null === $request->getSession()->getLang(false)) { if (Model\ConfigQuery::read("one_domain_foreach_lang", false) == 1) { //find lang with domain @@ -183,7 +200,7 @@ class TheliaHttpKernel extends HttpKernel } //find default lang - return Model\LangQuery::create()->findOneByByDefault(1); + return Model\Lang::getDefaultLanguage(); } } diff --git a/core/lib/Thelia/Model/Currency.php b/core/lib/Thelia/Model/Currency.php index ef8d73735..843211d5a 100755 --- a/core/lib/Thelia/Model/Currency.php +++ b/core/lib/Thelia/Model/Currency.php @@ -13,6 +13,17 @@ class Currency extends BaseCurrency { use \Thelia\Model\Tools\PositionManagementTrait; + public static function getDefaultCurrency() + { + $currency = CurrencyQuery::create()->findOneByByDefault(1); + + if (null === $currency) { + throw new \RuntimeException("No default currency is defined. Please define one."); + } + + return $currency; + } + /** * {@inheritDoc} */ diff --git a/templates/default/layout.tpl b/templates/default/layout.tpl index 0548f2ae0..1def30301 100644 --- a/templates/default/layout.tpl +++ b/templates/default/layout.tpl @@ -79,14 +79,13 @@ URL: http://www.thelia.net
  • New address
  • -
  • Category 1
  • -
  • Category 2
  • -
  • Category 3
  • -
  • Category 4
  • + {loop type="category" name="category.navigation" parent="0" limit="3"} +
  • {#TITLE}
  • + {/loop}