You are here

function scheduled_publish_views_data_alter in Scheduled Publish 8.3

Implements hook_views_data_alter().

File

./scheduled_publish.module, line 80
Contains scheduled_publish.module.

Code

function scheduled_publish_views_data_alter(array &$data) {

  // Create a dynamic data entry for Views based on the
  // first available scheduled publishing field.
  $fields = scheduled_publish_get_node_fields();
  if ($fields && isset($data['node__' . $fields[0]])) {
    $field = array_shift($fields);
    $field_table = 'node__' . $field;
    $state_field = $field . '_moderation_state';
    $value_field = $field . '_value';

    // Results from the base table.
    $db_connection = Database::getConnection();
    $query = $db_connection
      ->select($field_table, 'ft');
    $query
      ->fields('ft');

    // Add results from other field tables via union.
    foreach ($fields as $key => $f_name) {
      $union = $db_connection
        ->select('node__' . $f_name, 'ft' . $key);
      $union
        ->fields('ft' . $key);
      $query
        ->union($union);
    }

    // Change values to make this have a static configuration
    // and titles different from the base entry.
    $data['scheduled_publish_dynamic']['table'] = $data[$field_table]['table'];
    unset($data['scheduled_publish_dynamic']['table']['join']['node_field_data']['table']);
    $data['scheduled_publish_dynamic']['table']['join']['node_field_data']['table formula'] = $query;
    $data['scheduled_publish_dynamic']['sp_dynamic'] = $data[$field_table][$field];
    $data['scheduled_publish_dynamic']['sp_dynamic']['title'] = 'Scheduled publish dynamic';
    $data['scheduled_publish_dynamic']['sp_dynamic']['title short'] = 'SP dynamic';
    $data['scheduled_publish_dynamic']['sp_dynamic_moderation_state'] = $data[$field_table][$state_field];
    $data['scheduled_publish_dynamic']['sp_dynamic_moderation_state']['title'] = 'Scheduled publish dynamic (moderation state)';
    $data['scheduled_publish_dynamic']['sp_dynamic_moderation_state']['title short'] = 'SP dynamic (moderation state)';
    if (isset($data[$field_table]['delta'])) {
      $data['scheduled_publish_dynamic']['delta'] = $data[$field_table]['delta'];
      $data['scheduled_publish_dynamic']['delta']['title'] = 'Scheduled publish dynamic (delta)';
      $data['scheduled_publish_dynamic']['delta']['title short'] = 'SP dynamic (delta)';
    }
    $data['scheduled_publish_dynamic']['sp_dynamic_value'] = $data[$field_table][$value_field];
    $data['scheduled_publish_dynamic']['sp_dynamic_value']['title'] = 'Scheduled publish dynamic (value)';
    $data['scheduled_publish_dynamic']['sp_dynamic_value']['title short'] = 'SP dynamic (value)';
  }
}