SubscriptionViewsData.php in Commerce Recurring Framework 8
File
src/SubscriptionViewsData.php
View source
<?php
namespace Drupal\commerce_recurring;
use Drupal\commerce\CommerceEntityViewsData;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeInterface;
class SubscriptionViewsData extends CommerceEntityViewsData {
protected $purchasableEntityTypeRepository;
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
$instance = parent::createInstance($container, $entity_type);
$instance->purchasableEntityTypeRepository = $container
->get('commerce.purchasable_entity_type_repository');
return $instance;
}
public function getViewsData() {
$data = parent::getViewsData();
unset($data['commerce_subscription']['purchased_entity']['relationship']);
$entity_types = $this->purchasableEntityTypeRepository
->getPurchasableEntityTypes();
$table_mapping = $this->storage
->getTableMapping();
foreach ($entity_types as $entity_type) {
$entity_type_id = $entity_type
->id();
if (!$this->entityTypeManager
->hasDefinition($entity_type_id)) {
continue;
}
$data['commerce_subscription'][$entity_type_id] = [
'relationship' => [
'title' => $entity_type
->getLabel(),
'help' => $this
->t('The purchased @entity_type.', [
'@entity_type' => $entity_type
->getSingularLabel(),
]),
'base' => $this
->getViewsTableForEntityType($entity_type),
'base field' => $entity_type
->getKey('id'),
'relationship field' => $table_mapping
->getColumnNames('purchased_entity')['target_id'],
'id' => 'standard',
'label' => $entity_type
->getLabel(),
],
];
$target_base_table = $this
->getViewsTableForEntityType($entity_type);
$data[$target_base_table]['reverse__commerce_subscription__purchased_entity'] = [
'relationship' => [
'title' => $this->entityType
->getLabel(),
'help' => $this
->t('The @subscription_entity_type for this @entity_type.', [
'@subscription_entity_type' => $this->entityType
->getPluralLabel(),
'@entity_type' => $entity_type
->getSingularLabel(),
]),
'group' => $entity_type
->getLabel(),
'base' => $this
->getViewsTableForEntityType($this->entityType),
'base field' => $table_mapping
->getColumnNames('purchased_entity')['target_id'],
'relationship field' => $entity_type
->getKey('id'),
'id' => 'standard',
'label' => $this->entityType
->getLabel(),
'entity_type' => $this->entityType
->id(),
],
];
}
return $data;
}
}