3 namespace Drupal\views\Plugin\views\filter;
5 use Drupal\Core\Entity\EntityTypeManagerInterface;
6 use Drupal\Core\Form\FormStateInterface;
7 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
8 use Drupal\views\Plugin\ViewsHandlerManager;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
12 * Filter to show only the latest revision of an entity.
14 * @ingroup views_filter_handlers
16 * @ViewsFilter("latest_revision")
18 class LatestRevision extends FilterPluginBase implements ContainerFactoryPluginInterface {
21 * Entity Type Manager service.
23 * @var \Drupal\Core\Entity\EntityTypeManagerInterface
25 protected $entityTypeManager;
28 * Views Handler Plugin Manager.
30 * @var \Drupal\views\Plugin\ViewsHandlerManager
32 protected $joinHandler;
35 * Constructs a new LatestRevision.
37 * @param array $configuration
38 * A configuration array containing information about the plugin instance.
39 * @param string $plugin_id
40 * The plugin_id for the plugin instance.
41 * @param mixed $plugin_definition
42 * The plugin implementation definition.
43 * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
44 * Entity Type Manager Service.
45 * @param \Drupal\views\Plugin\ViewsHandlerManager $join_handler
46 * Views Handler Plugin Manager.
48 public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ViewsHandlerManager $join_handler) {
49 parent::__construct($configuration, $plugin_id, $plugin_definition);
51 $this->entityTypeManager = $entity_type_manager;
52 $this->joinHandler = $join_handler;
58 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
60 $configuration, $plugin_id, $plugin_definition,
61 $container->get('entity_type.manager'),
62 $container->get('plugin.manager.views.join')
69 public function adminSummary() {
75 protected function operatorForm(&$form, FormStateInterface $form_state) {
81 public function canExpose() {
88 public function query() {
89 /** @var \Drupal\views\Plugin\views\query\Sql $query */
90 $query = $this->query;
91 $query_base_table = $this->relationship ?: $this->view->storage->get('base_table');
93 $entity_type = $this->entityTypeManager->getDefinition($this->getEntityType());
94 $keys = $entity_type->getKeys();
97 'table' => $query_base_table,
99 'field' => $keys['id'],
100 'left_table' => $query_base_table,
101 'left_field' => $keys['id'],
103 ['left_field' => $keys['revision'], 'field' => $keys['revision'], 'operator' => '>'],
107 $join = $this->joinHandler->createInstance('standard', $definition);
109 $join_table_alias = $query->addTable($query_base_table, $this->relationship, $join);
110 $query->addWhere($this->options['group'], "$join_table_alias.{$keys['id']}", NULL, 'IS NULL');