diff --git a/double_reference.module b/double_reference.module new file mode 100644 index 0000000000000000000000000000000000000000..2b5b56e468541d8243241de0d431969b3f896aa8 --- /dev/null +++ b/double_reference.module @@ -0,0 +1,39 @@ +<?php + +/** + * @file + * double_reference.module. + */ + +declare(strict_types=1); + +use Drupal\field\FieldStorageConfigInterface; + +/** + * Implements hook_field_views_data_views_data_alter(). + */ +function double_reference_field_views_data_views_data_alter( + array &$data, + FieldStorageConfigInterface $field +): void { + // Guard the field type. + if ($field->getType() !== 'double_reference') { + return; + } + + $fieldName = $field->getName(); + $targetType = $field->getSetting('target_type'); + $arTargetType = $field->getSetting('ar_target_type'); + + // Change the target_type filter to use the entity reference filter. + $data["{$field->getTargetEntityTypeId()}__{$fieldName}"]["{$fieldName}_target_id"]['filter']['id'] = match($targetType) { + 'taxonomy_term' => 'taxonomy_index_tid', + default => 'entity_reference', + }; + + // Change the ar_target_type filter to use the entity reference filter. + $data["{$field->getTargetEntityTypeId()}__{$fieldName}"]["{$fieldName}_ar_target_id"]['filter']['id'] = match($arTargetType) { + 'taxonomy_term' => 'taxonomy_index_tid', + default => 'entity_reference', + }; +}