Bundle.php

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

Namespace

Drupal\views\Plugin\views\filter

File

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

View source
<?php

namespace Drupal\views\Plugin\views\filter;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\views\Attribute\ViewsFilter;
use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Filter class which allows filtering by entity bundles.
 *
 * @ingroup views_filter_handlers
 */
class Bundle extends InOperator {
    
    /**
     * The entity type for the filter.
     *
     * @var string
     */
    protected $entityTypeId;
    
    /**
     * The entity type definition.
     *
     * @var \Drupal\Core\Entity\EntityTypeInterface
     */
    protected $entityType;
    
    /**
     * The entity type manager.
     *
     * @var \Drupal\Core\Entity\EntityTypeManagerInterface
     */
    protected $entityTypeManager;
    
    /**
     * The bundle info service.
     *
     * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
     */
    protected $bundleInfoService;
    
    /**
     * The bundle key.
     */
    // phpcs:ignore Drupal.NamingConventions.ValidVariableName.LowerCamelName
    public string $real_field;
    
    /**
     * Constructs a Bundle 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\EntityTypeManagerInterface $entity_type_manager
     *   The entity type manager.
     * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $bundle_info_service
     *   The bundle info service.
     */
    public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityTypeBundleInfoInterface $bundle_info_service) {
        parent::__construct($configuration, $plugin_id, $plugin_definition);
        $this->entityTypeManager = $entity_type_manager;
        $this->bundleInfoService = $bundle_info_service;
    }
    
    /**
     * {@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('entity_type.bundle.info'));
    }
    
    /**
     * {@inheritdoc}
     */
    public function init(ViewExecutable $view, DisplayPluginBase $display, ?array &$options = NULL) {
        parent::init($view, $display, $options);
        $this->entityTypeId = $this->getEntityType();
        $this->entityType = \Drupal::entityTypeManager()->getDefinition($this->entityTypeId);
        $this->real_field = $this->entityType
            ->getKey('bundle');
    }
    
    /**
     * {@inheritdoc}
     */
    public function getValueOptions() {
        if (!isset($this->valueOptions)) {
            $types = $this->bundleInfoService
                ->getBundleInfo($this->entityTypeId);
            $this->valueTitle = $this->t('@entity types', [
                '@entity' => $this->entityType
                    ->getLabel(),
            ]);
            $options = [];
            foreach ($types as $type => $info) {
                $options[$type] = $info['label'];
            }
            asort($options);
            $this->valueOptions = $options;
        }
        return $this->valueOptions;
    }
    
    /**
     * {@inheritdoc}
     */
    public function query() {
        // Make sure that the entity base table is in the query.
        $this->ensureMyTable();
        parent::query();
    }
    
    /**
     * {@inheritdoc}
     */
    public function calculateDependencies() {
        $dependencies = parent::calculateDependencies();
        $bundle_entity_type = $this->entityType
            ->getBundleEntityType();
        $bundle_entity_storage = $this->entityTypeManager
            ->getStorage($bundle_entity_type);
        foreach (array_keys($this->value) as $bundle) {
            if ($bundle_entity = $bundle_entity_storage->load($bundle)) {
                $dependencies[$bundle_entity->getConfigDependencyKey()][] = $bundle_entity->getConfigDependencyName();
            }
        }
        return $dependencies;
    }

}

Classes

Title Deprecated Summary
Bundle Filter class which allows filtering by entity bundles.

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