3 namespace Drupal\node\Plugin\views\argument;
5 use Drupal\Core\Database\Connection;
6 use Drupal\views\Plugin\views\argument\NumericArgument;
7 use Symfony\Component\DependencyInjection\ContainerInterface;
8 use Drupal\node\NodeStorageInterface;
11 * Argument handler to accept a node revision id.
13 * @ViewsArgument("node_vid")
15 class Vid extends NumericArgument {
18 * Database Service Object.
20 * @var \Drupal\Core\Database\Connection
27 * @var \Drupal\node\NodeStorageInterface
29 protected $nodeStorage;
32 * Constructs a Drupal\Component\Plugin\PluginBase object.
34 * @param array $configuration
35 * A configuration array containing information about the plugin instance.
36 * @param string $plugin_id
37 * The plugin_id for the plugin instance.
38 * @param mixed $plugin_definition
39 * The plugin implementation definition.
40 * @param \Drupal\Core\Database\Connection $database
41 * Database Service Object.
42 * @param \Drupal\node\NodeStorageInterface $node_storage
45 public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, NodeStorageInterface $node_storage) {
46 parent::__construct($configuration, $plugin_id, $plugin_definition);
48 $this->database = $database;
49 $this->nodeStorage = $node_storage;
55 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
60 $container->get('database'),
61 $container->get('entity.manager')->getStorage('node')
66 * Override the behavior of title(). Get the title of the revision.
68 public function titleQuery() {
71 $results = $this->database->query('SELECT nr.vid, nr.nid, npr.title FROM {node_revision} nr WHERE nr.vid IN ( :vids[] )', [':vids[]' => $this->value])->fetchAllAssoc('vid', PDO::FETCH_ASSOC);
73 foreach ($results as $result) {
74 $nids[] = $result['nid'];
77 $nodes = $this->nodeStorage->loadMultiple(array_unique($nids));
79 foreach ($results as $result) {
80 $nodes[$result['nid']]->set('title', $result['title']);
81 $titles[] = $nodes[$result['nid']]->label();