View source
<?php
namespace Drupal\workbench_moderation\Plugin\views\filter;
use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\views\Plugin\views\filter\FilterPluginBase;
use Drupal\views\Plugin\ViewsHandlerManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LatestRevision extends FilterPluginBase implements ContainerFactoryPluginInterface {
protected $entityTypeManager;
protected $joinHandler;
protected $connection;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ViewsHandlerManager $join_handler, Connection $connection) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->entityTypeManager = $entity_type_manager;
$this->joinHandler = $join_handler;
$this->connection = $connection;
}
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'), $container
->get('plugin.manager.views.join'), $container
->get('database'));
}
public function adminSummary() {
}
protected function operatorForm(&$form, FormStateInterface $form_state) {
}
public function canExpose() {
return FALSE;
}
public function query() {
if (!$this->connection
->schema()
->tableExists('workbench_revision_tracker')) {
return;
}
$table = $this
->ensureMyTable();
$query = $this->query;
$definition = $this->entityTypeManager
->getDefinition($this
->getEntityType());
$keys = $definition
->getKeys();
$definition = [
'table' => 'workbench_revision_tracker',
'type' => 'INNER',
'field' => 'entity_id',
'left_table' => $table,
'left_field' => $keys['id'],
'extra' => [
[
'left_field' => $keys['langcode'],
'field' => 'langcode',
],
[
'left_field' => $keys['revision'],
'field' => 'revision_id',
],
[
'field' => 'entity_type',
'value' => $this
->getEntityType(),
],
],
];
$join = $this->joinHandler
->createInstance('standard', $definition);
$query
->ensureTable('workbench_revision_tracker', $this->relationship, $join);
}
}