From e6d623b57b8af9b700beda0cbfce4e5faa002578 Mon Sep 17 00:00:00 2001 From: artemvd Date: Fri, 25 Nov 2016 12:03:08 +0100 Subject: [PATCH 1/6] In case resolver returns other currency In the case if resolver returns the price in different currency we need this currency object to be format in correctly. By default $items variable has only the default currency code inside. --- .../Field/FieldFormatter/PriceCalculatedFormatter.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index b7b22d4ed9..02561be521 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -84,11 +84,7 @@ public static function create(ContainerInterface $container, array $configuratio * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { - $currency_codes = []; - foreach ($items as $delta => $item) { - $currency_codes[] = $item->currency_code; - } - $currencies = $this->currencyStorage->loadMultiple($currency_codes); + $currencies = $this->currencyStorage->loadMultiple(); $elements = []; /** @var \Drupal\commerce_price\Plugin\Field\FieldType\PriceItem $item */ From aaae6a5359bdf7b5755cbebc3c8612d1a5cd8fe8 Mon Sep 17 00:00:00 2001 From: artemvd Date: Mon, 28 Nov 2016 09:12:07 +0100 Subject: [PATCH 2/6] Update with the currency from resolved price --- .../PriceCalculatedFormatter.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index 02561be521..7708666ef4 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -7,6 +7,7 @@ use Drupal\commerce_price\Resolver\ChainPriceResolverInterface; use Drupal\Core\Cache\Cache; use Drupal\Core\Entity\EntityTypeManagerInterface; +use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Language\LanguageInterface; @@ -32,7 +33,13 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe * @var \Drupal\commerce_price\Resolver\ChainPriceResolverInterface */ protected $chainPriceResolver; - + + /** + * + * @var \Drupal\commerce_price\Entity\CurrencyInterface + */ + protected $currencyStorage; + /** * Constructs a new PriceCalculatedFormatter object. * @@ -57,9 +64,10 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe * @param \Drupal\commerce_price\Resolver\ChainPriceResolverInterface $chain_price_resolver * The chain price resolver. */ - public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager, NumberFormatterFactoryInterface $number_formatter_factory, ChainPriceResolverInterface $chain_price_resolver) { + public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager, NumberFormatterFactoryInterface $number_formatter_factory, ChainPriceResolverInterface $chain_price_resolver, EntityStorageInterface $currency_storage) { parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $entity_type_manager, $number_formatter_factory); $this->chainPriceResolver = $chain_price_resolver; + $this->currencyStorage = $currency_storage; } /** @@ -76,7 +84,8 @@ public static function create(ContainerInterface $container, array $configuratio $configuration['third_party_settings'], $container->get('entity_type.manager'), $container->get('commerce_price.number_formatter_factory'), - $container->get('commerce_price.chain_price_resolver') + $container->get('commerce_price.chain_price_resolver'), + $container->get('entity.manager')->getStorage('commerce_currency'), ); } @@ -84,8 +93,6 @@ public static function create(ContainerInterface $container, array $configuratio * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { - $currencies = $this->currencyStorage->loadMultiple(); - $elements = []; /** @var \Drupal\commerce_price\Plugin\Field\FieldType\PriceItem $item */ foreach ($items as $delta => $item) { @@ -93,7 +100,7 @@ public function viewElements(FieldItemListInterface $items, $langcode) { $purchasable_entity = $items->getEntity(); $resolved_price = $this->chainPriceResolver->resolve($purchasable_entity, '1'); $number = $resolved_price->getNumber(); - $currency = $currencies[$resolved_price->getCurrencyCode()]; + $currency = $this->currencyStorage->load($resolved_price->getCurrencyCode()); $elements[$delta] = [ '#markup' => $this->numberFormatter->formatCurrency($number, $currency), From 97117ae5b6b64693e22cb9e875cf2b1512c1f52a Mon Sep 17 00:00:00 2001 From: artemvd Date: Mon, 28 Nov 2016 10:36:42 +0100 Subject: [PATCH 3/6] Fix typo --- .../Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index 7708666ef4..5a8a6f9a16 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -85,7 +85,7 @@ public static function create(ContainerInterface $container, array $configuratio $container->get('entity_type.manager'), $container->get('commerce_price.number_formatter_factory'), $container->get('commerce_price.chain_price_resolver'), - $container->get('entity.manager')->getStorage('commerce_currency'), + $container->get('entity.manager')->getStorage('commerce_currency') ); } From 19c04dab04de0ceabd6dd65453c872e33a805f90 Mon Sep 17 00:00:00 2001 From: artemvd Date: Mon, 28 Nov 2016 15:03:13 +0100 Subject: [PATCH 4/6] Use entity type manager instead of entity manager Fixing bugs from reviewers --- .../Field/FieldFormatter/PriceCalculatedFormatter.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index 5a8a6f9a16..5e274da314 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -7,7 +7,6 @@ use Drupal\commerce_price\Resolver\ChainPriceResolverInterface; use Drupal\Core\Cache\Cache; use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Language\LanguageInterface; @@ -35,6 +34,7 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe protected $chainPriceResolver; /** + * Currency storage interface * * @var \Drupal\commerce_price\Entity\CurrencyInterface */ @@ -64,10 +64,10 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe * @param \Drupal\commerce_price\Resolver\ChainPriceResolverInterface $chain_price_resolver * The chain price resolver. */ - public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager, NumberFormatterFactoryInterface $number_formatter_factory, ChainPriceResolverInterface $chain_price_resolver, EntityStorageInterface $currency_storage) { + public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager, NumberFormatterFactoryInterface $number_formatter_factory, ChainPriceResolverInterface $chain_price_resolver) { parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $entity_type_manager, $number_formatter_factory); $this->chainPriceResolver = $chain_price_resolver; - $this->currencyStorage = $currency_storage; + $this->currencyStorage = $entity_type_manager->getStorage('commerce_currency'); } /** @@ -84,8 +84,7 @@ public static function create(ContainerInterface $container, array $configuratio $configuration['third_party_settings'], $container->get('entity_type.manager'), $container->get('commerce_price.number_formatter_factory'), - $container->get('commerce_price.chain_price_resolver'), - $container->get('entity.manager')->getStorage('commerce_currency') + $container->get('commerce_price.chain_price_resolver') ); } From 164615a18cfd2dca1bd86ad9da7bd5ae3ff4ff18 Mon Sep 17 00:00:00 2001 From: artemvd Date: Tue, 29 Nov 2016 08:44:47 +0100 Subject: [PATCH 5/6] Fix php standarts code formatting --- .../Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index 5e274da314..c0364955b8 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -34,12 +34,12 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe protected $chainPriceResolver; /** - * Currency storage interface + * Currency storage interface. * * @var \Drupal\commerce_price\Entity\CurrencyInterface */ protected $currencyStorage; - + /** * Constructs a new PriceCalculatedFormatter object. * From 4986ffd75767aeaeec8a671ac1283ab31a0541bb Mon Sep 17 00:00:00 2001 From: artemvd Date: Tue, 29 Nov 2016 10:06:31 +0100 Subject: [PATCH 6/6] Fix white space on line 35 --- .../Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php index c0364955b8..b63cd21bc6 100644 --- a/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php +++ b/modules/price/src/Plugin/Field/FieldFormatter/PriceCalculatedFormatter.php @@ -32,7 +32,7 @@ class PriceCalculatedFormatter extends PriceDefaultFormatter implements Containe * @var \Drupal\commerce_price\Resolver\ChainPriceResolverInterface */ protected $chainPriceResolver; - + /** * Currency storage interface. *