예제 #1
0
 /**
  * @param Request $request
  * @param string $code
  *
  * @return Response
  */
 public function switchAction(Request $request, $code)
 {
     if (!in_array($code, $this->currencyProvider->getAvailableCurrenciesCodes())) {
         throw new HttpException(Response::HTTP_NOT_ACCEPTABLE, sprintf('The currency code "%s" is invalid.', $code));
     }
     $this->currencyChangeHandler->handle($code);
     return new RedirectResponse($request->headers->get('referer', $request->getSchemeAndHttpHost()));
 }
 /**
  * {@inheritdoc}
  */
 public function getCurrencyCode()
 {
     $availableCurrenciesCodes = $this->currencyProvider->getAvailableCurrenciesCodes();
     $currencyCode = $this->currencyStorage->get($this->channelContext->getChannel());
     if (!in_array($currencyCode, $availableCurrenciesCodes, true)) {
         throw CurrencyNotFoundException::notAvailable($currencyCode, $availableCurrenciesCodes);
     }
     return $currencyCode;
 }
 /**
  * {@inheritdoc}
  */
 public function getCurrencyCode()
 {
     $availableCurrenciesCodes = $this->currencyProvider->getAvailableCurrenciesCodes();
     $currencyCode = $this->currencyProvider->getDefaultCurrencyCode();
     if (!in_array($currencyCode, $availableCurrenciesCodes, true)) {
         throw CurrencyNotFoundException::notAvailable($currencyCode, $availableCurrenciesCodes);
     }
     return $currencyCode;
 }
 function it_throws_an_exception_if_currency_taken_from_storage_is_not_available(ChannelContextInterface $channelContext, CurrencyStorageInterface $currencyStorage, CurrencyProviderInterface $currencyProvider, ChannelInterface $channel)
 {
     $channelContext->getChannel()->willReturn($channel);
     $currencyStorage->get($channel)->willReturn('BTC');
     $currencyProvider->getAvailableCurrenciesCodes()->willReturn(['LTC', 'PLN']);
     $this->shouldThrow(CurrencyNotFoundException::class)->during('getCurrencyCode');
 }
예제 #5
0
 /**
  * Builds frontend currency menu.
  *
  * @return ItemInterface
  */
 public function createCurrencyMenu()
 {
     $menu = $this->factory->createItem('root', ['childrenAttributes' => ['class' => 'nav nav-pills']]);
     $currencies = $this->currencyProvider->getAvailableCurrenciesCodes();
     if (1 === count($currencies)) {
         $menu->setDisplay(false);
         return $menu;
     }
     foreach ($currencies as $currency) {
         $code = $currency->getCode();
         $menu->addChild($code, ['route' => 'sylius_currency_change', 'routeParameters' => ['currencyCode' => $code], 'linkAttributes' => ['title' => $this->translate('sylius.frontend.menu.currency', ['%currency%' => $code])]])->setLabel(Intl::getCurrencyBundle()->getCurrencySymbol($code));
     }
     $this->eventDispatcher->dispatch(MenuBuilderEvent::FRONTEND_CURRENCY, new MenuBuilderEvent($this->factory, $menu));
     return $menu;
 }
 function it_throws_a_currency_not_found_exception_if_default_currency_is_not_available(CurrencyProviderInterface $currencyProvider)
 {
     $currencyProvider->getAvailableCurrenciesCodes()->willReturn(['GBP', 'PLN']);
     $currencyProvider->getDefaultCurrencyCode()->willReturn('EUR');
     $this->shouldThrow(CurrencyNotFoundException::class)->during('getCurrencyCode');
 }
예제 #7
0
 /**
  * @return Response
  */
 public function renderSelectorAction()
 {
     return $this->templatingEngine->renderResponse('SyliusShopBundle:Currency:selector.html.twig', ['activeCurrencyCode' => $this->currencyContext->getCurrencyCode(), 'availableCurrenciesCodes' => $this->currencyProvider->getAvailableCurrenciesCodes()]);
 }