commerce_product_bundles-8.x-1.0/src/Resolver/CommerceBundleCurrencyResolver.php
src/Resolver/CommerceBundleCurrencyResolver.php
<?php
namespace Drupal\commerce_product_bundles\Resolver;
use Drupal\commerce\Context;
use Drupal\commerce\PurchasableEntityInterface;
use Drupal\commerce_exchanger\ExchangerCalculatorInterface;
use Drupal\commerce_price\Resolver\PriceResolverInterface;
use Drupal\commerce_currency_resolver\CurrentCurrencyInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
/**
* Class CommerceBundleCurrencyResolver
*
* @package Drupal\commerce_product_bundles\Resolver
*/
class CommerceBundleCurrencyResolver implements PriceResolverInterface {
/**
* The current currency.
*
* @var \Drupal\commerce_currency_resolver\CurrentCurrencyInterface
*/
protected $currentCurrency;
/**
* Exchanger Calculator.
*
* @var \Drupal\commerce_exchanger\ExchangerCalculatorInterface
*/
protected $priceExchanger;
/**
* Config factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* Constructs a new CommerceCurrencyResolver object.
*
* @param \Drupal\commerce_currency_resolver\CurrentCurrencyInterface $current_currency
* The currency manager.
* @param \Drupal\commerce_exchanger\ExchangerCalculatorInterface $price_exchanger
* Price exchanger calculator.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* Config factory.
*/
public function __construct(CurrentCurrencyInterface $current_currency, ExchangerCalculatorInterface $price_exchanger, ConfigFactoryInterface $config_factory) {
$this->currentCurrency = $current_currency;
$this->priceExchanger = $price_exchanger;
$this->configFactory = $config_factory;
}
/**
* {@inheritdoc}
*/
public function resolve(PurchasableEntityInterface $entity, $quantity, Context $context) {
// Default price.
$price = NULL;
// Get field from context.
$field_name = $context->getData('field_name', 'price');
// @see \Drupal\commerce_price\Resolver\DefaultPriceResolver
if ($field_name === 'price') {
$price = $entity->get('price')->get(0)->toPrices();
}
// Loading orders trough drush, or any cli task
// will resolve price by current conditions in which cli is
// (country, language, current store) - this will result in
// currency exception. We need to return existing price.
if (PHP_SAPI === 'cli') {
return $price['USD'];
}
// Get current resolved currency.
$resolved_currency = $this->currentCurrency->getCurrency();
// Get resolved currency Price.
// Defaults to USD.
return isset($price[$resolved_currency]) ? $price[$resolved_currency] : $price['USD'];
}
}
