View source
<?php
namespace Drupal\price\Plugin\Field\FieldFormatter;
use CommerceGuys\Intl\Formatter\CurrencyFormatterInterface;
use Drupal\price\Context;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\price\Resolver\ChainPriceResolverInterface;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PriceCalculatedFormatter extends PriceDefaultFormatter implements ContainerFactoryPluginInterface {
protected $chainPriceResolver;
protected $currentUser;
public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, CurrencyFormatterInterface $currency_formatter, ChainPriceResolverInterface $chain_price_resolver, AccountInterface $current_user) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $currency_formatter);
$this->chainPriceResolver = $chain_price_resolver;
$this->currentUser = $current_user;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container
->get('price.currency_formatter'), $container
->get('price.chain_price_resolver'), $container
->get('current_user'));
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
if (!$items
->isEmpty()) {
$context = new Context($this->currentUser, NULL, [
'field_name' => $items
->getName(),
]);
$entity = $items
->getEntity();
$resolved_price = $this->chainPriceResolver
->resolve($entity, 1, $context);
$number = $resolved_price
->getNumber();
$currency_code = $resolved_price
->getCurrencyCode();
$options = $this
->getFormattingOptions();
$elements[0] = [
'#theme' => 'price_calculated',
'#calculated_price' => $this->currencyFormatter
->format($number, $currency_code, $options),
'#entity' => $entity,
'#cache' => [
'tags' => $entity
->getCacheTags(),
'contexts' => Cache::mergeContexts($entity
->getCacheContexts(), [
'languages:' . LanguageInterface::TYPE_INTERFACE,
'country',
]),
],
];
}
return $elements;
}
public static function isApplicable(FieldDefinitionInterface $field_definition) {
$entity_type = \Drupal::entityTypeManager()
->getDefinition($field_definition
->getTargetEntityTypeId());
return $entity_type
->entityClassImplements(ContentEntityInterface::class);
}
}