LatestRevision.php

Same filename in other branches
  1. 9 core/modules/views/src/Plugin/views/filter/LatestRevision.php
  2. 10 core/modules/views/src/Plugin/views/filter/LatestRevision.php
  3. 11.x core/modules/views/src/Plugin/views/filter/LatestRevision.php

Namespace

Drupal\views\Plugin\views\filter

File

core/modules/views/src/Plugin/views/filter/LatestRevision.php

View source
<?php

namespace Drupal\views\Plugin\views\filter;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\views\Plugin\ViewsHandlerManager;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Filter to show only the latest revision of an entity.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("latest_revision")
 */
class LatestRevision extends FilterPluginBase implements ContainerFactoryPluginInterface {
    
    /**
     * Entity Type Manager service.
     *
     * @var \Drupal\Core\Entity\EntityTypeManagerInterface
     */
    protected $entityTypeManager;
    
    /**
     * Views Handler Plugin Manager.
     *
     * @var \Drupal\views\Plugin\ViewsHandlerManager
     */
    protected $joinHandler;
    
    /**
     * Constructs a new LatestRevision.
     *
     * @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\EntityTypeManagerInterface $entity_type_manager
     *   Entity Type Manager Service.
     * @param \Drupal\views\Plugin\ViewsHandlerManager $join_handler
     *   Views Handler Plugin Manager.
     */
    public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, ViewsHandlerManager $join_handler) {
        parent::__construct($configuration, $plugin_id, $plugin_definition);
        $this->entityTypeManager = $entity_type_manager;
        $this->joinHandler = $join_handler;
    }
    
    /**
     * {@inheritdoc}
     */
    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'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function adminSummary() {
    }
    
    /**
     * {@inheritdoc}
     */
    protected function operatorForm(&$form, FormStateInterface $form_state) {
    }
    
    /**
     * {@inheritdoc}
     */
    public function canExpose() {
        return FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function query() {
        
        /** @var \Drupal\views\Plugin\views\query\Sql $query */
        $query = $this->query;
        $query_base_table = $this->relationship ?: $this->view->storage
            ->get('base_table');
        $entity_type = $this->entityTypeManager
            ->getDefinition($this->getEntityType());
        $keys = $entity_type->getKeys();
        $definition = [
            'table' => $query_base_table,
            'type' => 'LEFT',
            'field' => $keys['id'],
            'left_table' => $query_base_table,
            'left_field' => $keys['id'],
            'extra' => [
                [
                    'left_field' => $keys['revision'],
                    'field' => $keys['revision'],
                    'operator' => '>',
                ],
            ],
        ];
        $join = $this->joinHandler
            ->createInstance('standard', $definition);
        $join_table_alias = $query->addTable($query_base_table, $this->relationship, $join);
        $query->addWhere($this->options['group'], "{$join_table_alias}.{$keys['id']}", NULL, 'IS NULL');
    }

}

Classes

Title Deprecated Summary
LatestRevision Filter to show only the latest revision of an entity.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.