You are here

function commerce_reports_views_data_alter in Commerce Reporting 8

Same name and namespace in other branches
  1. 7.4 includes/views/commerce_reports.views.inc \commerce_reports_views_data_alter()
  2. 7 includes/views/commerce_reports.views.inc \commerce_reports_views_data_alter()
  3. 7.2 includes/views/commerce_reports.views.inc \commerce_reports_views_data_alter()
  4. 7.3 includes/views/commerce_reports.views.inc \commerce_reports_views_data_alter()

Implements hook_views_data_alter().

File

./commerce_reports.views.inc, line 17
Views integration for Commerce reports.

Code

function commerce_reports_views_data_alter(array &$data) {

  /* Move this to entity module:
    function entity_views_data_alter(array &$data) {
      foreach (entity_get_bundle_plugin_entity_types() as $entity_type) {
        $entity_type_id = $entity_type->id();
        $base_table = $entity_type->getBaseTable() ?: $entity_type->id();
      ...
    */
  $entity_type_id = 'commerce_order_report';
  $base_table = 'commerce_order_report';

  // Get the list of bundles the field appears in.
  $entity_type_bundle_info = \Drupal::service('entity_type.bundle.info');
  $bundles = array_keys($entity_type_bundle_info
    ->getBundleInfo($entity_type_id));

  // Get the list of field definitions for all bundles.
  $entity_field_manager = \Drupal::service('entity_field.manager');
  $all_field_definitions = [];
  foreach ($bundles as $bundle) {
    $field_definitions = $entity_field_manager
      ->getFieldDefinitions($entity_type_id, $bundle);
    $all_field_definitions += $field_definitions;
  }
  $all_field_definitions = array_filter($all_field_definitions, function (FieldDefinitionInterface $field_definition) {
    return $field_definition instanceof BundleFieldDefinition;
  });

  /** @var \Drupal\entity\BundleFieldDefinition $field_storage */
  foreach ($all_field_definitions as $field_storage) {
    $field_data = commerce_reports_field_default_views_data($field_storage, $base_table);

    // Possibly replace the following with hooks.
    commerce_reports_bundle_plugin_fields_views_data($field_data, $field_storage);
    if (is_array($field_data)) {
      $data = NestedArray::mergeDeep($data, $field_data);
    }
  }
}