You are here

public function ServiceAuditFilesMergeFileReferences::auditfilesMergeFileReferencesBatchMergeProcessFile in Audit Files 8.3

Same name and namespace in other branches
  1. 8.2 src/ServiceAuditFilesMergeFileReferences.php \Drupal\auditfiles\ServiceAuditFilesMergeFileReferences::auditfilesMergeFileReferencesBatchMergeProcessFile()

Deletes the specified file from the file_managed table.

Parameters

int $file_being_kept: The file ID of the file to merge the other into.

int $file_being_merged: The file ID of the file to merge.

File

src/ServiceAuditFilesMergeFileReferences.php, line 224

Class

ServiceAuditFilesMergeFileReferences
Define all methods that used in merge file references functionality.

Namespace

Drupal\auditfiles

Code

public function auditfilesMergeFileReferencesBatchMergeProcessFile($file_being_kept, $file_being_merged) {
  $connection = $this->connection;
  $file_being_kept_results = $connection
    ->select('file_usage', 'fu')
    ->fields('fu', [
    'module',
    'type',
    'id',
    'count',
  ])
    ->condition('fid', $file_being_kept)
    ->execute()
    ->fetchAll();
  if (empty($file_being_kept_results)) {
    $this
      ->messenger()
      ->addWarning($this->stringTranslation
      ->translate('There was no file usage data found for the file you choose to keep. No changes were made.'));
    return;
  }
  $file_being_kept_data = reset($file_being_kept_results);
  $file_being_merged_results = $connection
    ->select('file_usage', 'fu')
    ->fields('fu', [
    'module',
    'type',
    'id',
    'count',
  ])
    ->condition('fid', $file_being_merged)
    ->execute()
    ->fetchAll();
  if (empty($file_being_merged_results)) {
    $this
      ->messenger()
      ->addWarning($this->stringTranslation
      ->translate('There was an error retrieving the file usage data from the database for file ID %fid. Please check the files in one of the other reports. No changes were made for this file.', [
      '%fid' => $file_being_merged,
    ]));
    return;
  }
  $file_being_merged_data = reset($file_being_merged_results);
  $file_being_merged_uri_results = $connection
    ->select('file_managed', 'fm')
    ->fields('fm', [
    'uri',
  ])
    ->condition('fid', $file_being_merged)
    ->execute()
    ->fetchAll();
  $file_being_merged_uri = reset($file_being_merged_uri_results);
  if ($file_being_kept_data->id == $file_being_merged_data->id) {
    $file_being_kept_data->count += $file_being_merged_data->count;

    // Delete the unnecessary entry from the file_usage table.
    $connection
      ->delete('file_usage')
      ->condition('fid', $file_being_merged)
      ->execute();

    // Update the entry for the file being kept.
    $connection
      ->update('file_usage')
      ->fields([
      'count' => $file_being_kept_data->count,
    ])
      ->condition('fid', $file_being_kept)
      ->condition('module', $file_being_kept_data->module)
      ->condition('type', $file_being_kept_data->type)
      ->condition('id', $file_being_kept_data->id)
      ->execute();
  }
  else {
    $connection
      ->update('file_usage')
      ->fields([
      'fid' => $file_being_kept,
    ])
      ->condition('fid', $file_being_merged)
      ->condition('module', $file_being_merged_data->module)
      ->condition('type', $file_being_merged_data->type)
      ->condition('id', $file_being_merged_data->id)
      ->execute();

    // Update any fields that might be pointing to the file being merged.
    $this
      ->auditfilesMergeFileReferencesUpdateFileFields($file_being_kept, $file_being_merged);
  }

  // Delete the unnecessary entries from the file_managed table.
  $connection
    ->delete('file_managed')
    ->condition('fid', $file_being_merged)
    ->execute();

  // Delete the duplicate file.
  if (!empty($file_being_merged_uri->uri)) {
    $this->fileSystem
      ->delete($file_being_merged_uri->uri);
  }
}