function dynamic_entity_reference_views_data_alter in Dynamic Entity Reference 8.2
Implements hook_views_data_alter().
Changes dynamic_entity_reference base fields argument and filter to numeric.
File
- ./
dynamic_entity_reference.views.inc, line 261 - Provides views data for the dynamic_entity_reference module.
Code
function dynamic_entity_reference_views_data_alter(&$data) {
$entity_manager = \Drupal::entityTypeManager();
/** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
list($entity_types, $sql_entity_types, $fields_all) = dynamic_entity_reference_get_all_base_fields();
foreach ($fields_all as $entity_type_id => $fields) {
$entity_type = $entity_types[$entity_type_id];
$base_table = $entity_manager
->getHandler($entity_type_id, 'views_data')
->getViewsTableForEntityType($entity_type);
/** @var \Drupal\Core\Field\BaseFieldDefinition[] $fields */
foreach ($fields as $field) {
$field_name = $field
->getName();
// Unlimited (-1) or > 1 store field data in a dedicated table.
$table = $field
->getCardinality() == 1 ? $base_table : $entity_type
->getBaseTable() . '__' . $field_name;
// Filter out non SQL entity types because \Drupal\views\EntityViewsData
// class only allows entities with
// \Drupal\Core\Entity\Sql\SqlEntityStorageInterface.
$targets = array_intersect(DynamicEntityReferenceItem::getTargetTypes($field
->getSettings()), array_keys($sql_entity_types));
foreach ($targets as $target_entity_type_id) {
$target_entity_id_is_int = DynamicEntityReferenceItem::entityHasIntegerId($target_entity_type_id);
if ($target_entity_id_is_int) {
$data[$table][$target_entity_type_id . '__' . $field_name]['argument']['id'] = 'numeric';
$data[$table][$target_entity_type_id . '__' . $field_name]['filter']['id'] = 'numeric';
}
}
}
}
}