function ImageViewsHooks::fieldViewsDataViewsDataAlter

Implements hook_field_views_data_views_data_alter().

Views integration to provide reverse relationships on image fields.

File

core/modules/image/src/Hook/ImageViewsHooks.php, line 44

Class

ImageViewsHooks
Hook implementations for image.

Namespace

Drupal\image\Hook

Code

public function fieldViewsDataViewsDataAlter(array &$data, FieldStorageConfigInterface $field_storage) : void {
    $entity_type_id = $field_storage->getTargetEntityTypeId();
    $field_name = $field_storage->getName();
    $entity_type_manager = \Drupal::entityTypeManager();
    $entity_type = $entity_type_manager->getDefinition($entity_type_id);
    $pseudo_field_name = 'reverse_' . $field_name . '_' . $entity_type_id;
    
    /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
    $table_mapping = $entity_type_manager->getStorage($entity_type_id)
        ->getTableMapping();
    [
        $label,
    ] = views_entity_field_label($entity_type_id, $field_name);
    $data['file_managed'][$pseudo_field_name]['relationship'] = [
        'title' => t('@entity using @field', [
            '@entity' => $entity_type->getLabel(),
            '@field' => $label,
        ]),
        'label' => t('@field_name', [
            '@field_name' => $field_name,
        ]),
        'help' => t('Relate each @entity with a @field set to the image.', [
            '@entity' => $entity_type->getLabel(),
            '@field' => $label,
        ]),
        'group' => $entity_type->getLabel(),
        'id' => 'entity_reverse',
        'base' => $entity_type->getDataTable() ?: $entity_type->getBaseTable(),
        'entity_type' => $entity_type_id,
        'base field' => $entity_type->getKey('id'),
        'field_name' => $field_name,
        'field table' => $table_mapping->getDedicatedDataTableName($field_storage),
        'field field' => $field_name . '_target_id',
        'join_extra' => [
            0 => [
                'field' => 'deleted',
                'value' => 0,
                'numeric' => TRUE,
            ],
        ],
    ];
}

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