You are here

function ServiceAuditFilesUsedNotReferenced::_auditfiles_used_not_referenced_get_file_list in Audit Files 8

Retrieves the file IDs to operate on.

Return value

array The file IDs.

File

src/ServiceAuditFilesUsedNotReferenced.php, line 22
providing the service that used in 'used not referenced' functionality.

Class

ServiceAuditFilesUsedNotReferenced

Namespace

Drupal\auditfiles

Code

function _auditfiles_used_not_referenced_get_file_list() {
  $config = \Drupal::config('auditfiles_config.settings');
  $connection = Database::getConnection();
  $query = 'SELECT DISTINCT fid FROM {file_usage} fu';
  $maximum_records = $config
    ->get('auditfiles_report_options_maximum_records') ? $config
    ->get('auditfiles_report_options_maximum_records') : 250;
  if ($maximum_records > 0) {
    $query .= ' LIMIT ' . $maximum_records;
  }
  $files_in_file_usage = $connection
    ->query($query)
    ->fetchCol();
  $files_in_fields = [];
  $fields[] = \Drupal::service('entity_field.manager')
    ->getFieldMapByFieldType('image');
  $fields[] = \Drupal::service('entity_field.manager')
    ->getFieldMapByFieldType('file');
  $count = 0;
  foreach ($fields as $key => $value) {
    foreach ($value as $table_prefix => $entity_type) {
      foreach ($entity_type as $key1 => $value1) {
        $field_data[$count]['table'] = $table_prefix . '__' . $key1;
        $field_data[$count]['column'] = $key1 . '_target_id';
        $count++;
      }
    }
  }
  foreach ($field_data as $key => $value) {
    $table = $value['table'];
    $column = $value['column'];
    if (Database::getConnection()
      ->schema()
      ->tableExists($table)) {
      $query = "SELECT t.{$column} FROM {$table} AS t INNER JOIN {file_usage} AS f ON f.fid = t.{$column}";
      $result = $connection
        ->query($query);
      foreach ($result as $fid) {
        if (in_array($fid->{$column}, $files_in_file_usage)) {
          $files_in_fields[] = $fid->{$column};
        }
      }
    }
  }
  return array_diff($files_in_file_usage, $files_in_fields);
}