Version 1
[yaffs-website] / web / core / modules / node / src / Plugin / views / argument / Type.php
diff --git a/web/core/modules/node/src/Plugin/views/argument/Type.php b/web/core/modules/node/src/Plugin/views/argument/Type.php
new file mode 100644 (file)
index 0000000..760397a
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+
+namespace Drupal\node\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 node type.
+ *
+ * @ViewsArgument("node_type")
+ */
+class Type extends StringArgument {
+
+  /**
+   * NodeType storage handler.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $nodeTypeStorage;
+
+  /**
+   * Constructs a new Node 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 $storage
+   *   The entity storage class.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $node_type_storage) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->nodeTypeStorage = $node_type_storage;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    $entity_manager = $container->get('entity.manager');
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $entity_manager->getStorage('node_type')
+    );
+  }
+
+  /**
+   * Override the behavior of summaryName(). Get the user friendly version
+   * of the node type.
+   */
+  public function summaryName($data) {
+    return $this->node_type($data->{$this->name_alias});
+  }
+
+  /**
+   * Override the behavior of title(). Get the user friendly version of the
+   * node type.
+   */
+  public function title() {
+    return $this->node_type($this->argument);
+  }
+
+  public function node_type($type_name) {
+    $type = $this->nodeTypeStorage->load($type_name);
+    $output = $type ? $type->label() : $this->t('Unknown content type');
+    return $output;
+  }
+
+}