commerce-8.x-2.8/modules/order/src/Plugin/views/area/OrderTotal.php
modules/order/src/Plugin/views/area/OrderTotal.php
<?php
namespace Drupal\commerce_order\Plugin\views\area;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\area\AreaPluginBase;
use Drupal\views\Plugin\views\argument\NumericArgument;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Defines an order total area handler.
*
* Shows the order total field with its components listed in the footer of a
* View.
*
* @ingroup views_area_handlers
*
* @ViewsArea("commerce_order_total")
*/
class OrderTotal extends AreaPluginBase {
/**
* The order storage.
*
* @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage
*/
protected $orderStorage;
/**
* Constructs a new OrderTotal instance.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->orderStorage = $entity_type_manager->getStorage('commerce_order');
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('entity_type.manager')
);
}
/**
* {@inheritdoc}
*/
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
parent::buildOptionsForm($form, $form_state);
$form['empty']['#description'] = $this->t("Even if selected, this area handler will never render if a valid order cannot be found in the View's arguments.");
}
/**
* {@inheritdoc}
*/
public function render($empty = FALSE) {
if (!$empty || !empty($this->options['empty'])) {
foreach ($this->view->argument as $name => $argument) {
// First look for an order_id argument.
if (!$argument instanceof NumericArgument) {
continue;
}
if (!in_array($argument->getField(), ['commerce_order.order_id', 'commerce_order_item.order_id'])) {
continue;
}
if ($order = $this->orderStorage->load($argument->getValue())) {
return $order->get('total_price')->view(['label' => 'hidden', 'type' => 'commerce_order_total_summary']);
}
}
}
return [];
}
}
