arch-8.x-1.x-dev/modules/product/src/Plugin/views/argument/Type.php
modules/product/src/Plugin/views/argument/Type.php
<?php
namespace Drupal\arch_product\Plugin\views\argument;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\views\Plugin\views\argument\StringArgument;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Argument handler to accept a product type.
*
* @ViewsArgument("product_type")
*/
class Type extends StringArgument {
/**
* ProductType storage handler.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $productTypeStorage;
/**
* Constructs a new Product Type object.
*
* @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\EntityStorageInterface $product_type_storage
* The entity storage class.
*/
public function __construct(
array $configuration,
$plugin_id,
$plugin_definition,
EntityStorageInterface $product_type_storage,
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->productTypeStorage = $product_type_storage;
}
/**
* {@inheritdoc}
*/
public static function create(
ContainerInterface $container,
array $configuration,
$plugin_id,
$plugin_definition,
) {
$entity_manager = $container->get('entity_type.manager');
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$entity_manager->getStorage('product_type')
);
}
/**
* {@inheritdoc}
*
* Get the user friendly version of the product type.
*/
public function summaryName($data) {
return $this->productType($data->{$this->name_alias});
}
/**
* {@inheritdoc}
*
* Get the user friendly version of the product type.
*/
public function title() {
return $this->productType($this->argument);
}
/**
* Get product type label.
*
* @param string $type_name
* Product type id.
*
* @return \Drupal\Core\StringTranslation\TranslatableMarkup|null|string
* Product type labe.
*/
public function productType($type_name) {
$type = $this->productTypeStorage->load($type_name);
$output = $type ? $type->label() : $this->t('Unknown product type', [], ['context' => 'arch_product']);
return $output;
}
}
