/** * @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'); }
/** * 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'); }
/** * @return Response */ public function renderSelectorAction() { return $this->templatingEngine->renderResponse('SyliusShopBundle:Currency:selector.html.twig', ['activeCurrencyCode' => $this->currencyContext->getCurrencyCode(), 'availableCurrenciesCodes' => $this->currencyProvider->getAvailableCurrenciesCodes()]); }