diff --git a/src/FlaggingViewsData.php b/src/FlaggingViewsData.php index 08792af..5b8bc14 100644 --- a/src/FlaggingViewsData.php +++ b/src/FlaggingViewsData.php @@ -2,6 +2,7 @@ namespace Drupal\flag; +use Drupal\flag\Entity\Flag; use Drupal\views\EntityViewsData; /** @@ -75,6 +76,29 @@ class FlaggingViewsData extends EntityViewsData { ], ]; + /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager */ + $entity_type_manager = \Drupal::entityTypeManager(); + foreach (Flag::loadMultiple(NULL) as $flag_id => $flag) { + /** @var \Drupal\flag\Entity\Flag $flag */ + $entity_type = $entity_type_manager->getDefinition($flag->getFlaggableEntityTypeId()); + if ($base = $entity_type->getDataTable() ?: $entity_type->getBaseTable()) { + $data['flagging']['flag_' . $flag_id]['relationship'] = [ + 'title' => $entity_type->getLabel(), + 'help' => $this->t('The @entity_type this flagging belongs to.', ['@entity_type' => $entity_type->getLabel()]), + 'base' => $base, + 'base field' => $entity_type->getKey('id'), + 'relationship field' => 'entity_id', + 'id' => 'standard', + 'label' => $entity_type->getLabel(), + 'extra' => [[ + 'field' => 'flag_id', + 'value' => $flag_id, + 'table' => 'flagging' + ]], + ]; + } + } + return $data; }