<?php

/**
 * @file
 * Provide Views data for integer-weight fields.
 */

/**
 * Implements hook_views_data_alter().
 */
function islandora_views_data_alter(&$data) {
  // For now only support Nodes and Media.
  foreach (['node', 'media'] as $entity_type) {
    $fields = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($entity_type);
    foreach ($fields as $field => $field_storage_definition) {
      if ($field_storage_definition->getType() == 'integer' && strpos($field, "field_") === 0) {
        $prefixed_field = $entity_type . '__' . $field;
        if (isset($data[$prefixed_field])) {
          $data[$prefixed_field][$field . '_value']['field'] = $data[$prefixed_field][$field]['field'];
          $data[$prefixed_field][$field]['title'] = t('Integer Weight Selector (@field)', [
            '@field' => $field,
          ]);
          $data[$prefixed_field][$field]['help'] = t('Provides a drag-n-drop reordering of integer-based weight fields.');
          $data[$prefixed_field][$field]['title short'] = t('Integer weight selector');
          $data[$prefixed_field][$field]['field']['id'] = 'integer_weight_selector';
        }
      }
    }
  }

  // Add Has Media filter.
  $data['node_field_data']['islandora_has_media'] = [
    'title' => t('Node has Media Use'),
    'group' => t('Content'),
    'filter' => [
      'title' => t('Node has media use filter'),
      'help' => t('Provides a custom filter for nodes that do or do not have media with a given use.'),
      'field' => 'nid',
      'id' => 'islandora_node_has_media_use',
    ],
  ];

  // Add Is Islandora filter.
  $data['node_field_data']['islandora_node_is_islandora'] = [
    'title' => t('Node is Islandora'),
    'group' => t('Content'),
    'filter' => [
      'title' => t('Node is Islandora'),
      'help' => t('Node has a content type that possesses the mandatory Islandora fields.'),
      'field' => 'nid',
      'id' => 'islandora_node_is_islandora',
    ],
  ];
}