commerce_product_bundles-8.x-1.0/src/CommerceBundleEntityViewsData.php
src/CommerceBundleEntityViewsData.php
<?php namespace Drupal\commerce_product_bundles; use Drupal\commerce\CommerceEntityViewsData; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\entity\BundleFieldDefinition; /** * Class CommerceBundleEntityViewsData * * @package Drupal\commerce_product_bundles */ class CommerceBundleEntityViewsData extends CommerceEntityViewsData { /** * {@inheritdoc} */ public function getViewsData() { $data = parent::getViewsData(); $this->tableMapping = $this->storage->getTableMapping(); $entity_type_id = $this->entityType->id(); // Workaround for core issue #3004300. if ($this->entityType->isRevisionable()) { $revision_table = $this->tableMapping->getRevisionTable(); $data[$revision_table]['table']['entity revision'] = TRUE; } // Add missing reverse relationships. Workaround for core issue #2706431. $base_fields = $this->getEntityFieldManager()->getBaseFieldDefinitions($entity_type_id); $entity_reference_fields = array_filter($base_fields, function (BaseFieldDefinition $field) { return $field->getType() == 'entity_reference'; }); if (in_array($entity_type_id, ['commerce_order', 'commerce_product_bundles'])) { // Product bundle variations and order items have reference fields pointing // to the parent entity, no need for a reverse relationship. unset($entity_reference_fields['bundle_variations']); unset($entity_reference_fields['order_items']); } $this->addReverseRelationships($data, $entity_reference_fields); // Add views integration for bundle plugin fields. // Workaround for core issue #2898635. if ($this->entityType->hasHandlerClass('bundle_plugin')) { $bundles = $this->getEntityTypeBundleInfo()->getBundleInfo($entity_type_id); foreach (array_keys($bundles) as $bundle) { $field_definitions = $this->getEntityFieldManager()->getFieldDefinitions($entity_type_id, $bundle); foreach ($field_definitions as $field_definition) { if ($field_definition instanceof BundleFieldDefinition) { $this->addBundleFieldData($data, $field_definition); } } } } // Use custom bundle handlers which know how to handle non-config bundles. // Workaround for core issue #3056998. if ($bundle_key = $this->entityType->getKey('bundle')) { $base_table = $this->getViewsTableForEntityType($this->entityType); $data[$base_table][$bundle_key]['field']['id'] = 'commerce_entity_bundle'; $data[$base_table][$bundle_key]['filter']['id'] = 'commerce_entity_bundle'; } return $data; } }