1 file.inc file_usage_delete(File $file, $module, $type = NULL, $id = NULL, $count = 1)

Removes a record to indicate that a module is no longer using a file.

Parameters

File $file: A file entity.

$module: The name of the module using the file.

$type: (optional) The type of the object that contains the referenced file. May be omitted if all module references to a file are being deleted.

$id: (optional) The unique, numeric ID of the object containing the referenced file. May be omitted if all module references to a file are being deleted.

$count: (optional) The number of references to delete from the object. Defaults to 1. 0 may be specified to delete all references to the file within a specific object.

See also

file_usage_add()

file_usage_list()

Related topics

File

core/includes/file.inc, line 736
API for handling file uploads and server file management.

Code

function file_usage_delete(File $file, $module, $type = NULL, $id = NULL, $count = 1) {
  // Delete rows that have a exact or less value to prevent empty rows.
  $query = db_delete('file_usage')
    ->condition('module', $module)
    ->condition('fid', $file->fid);
  if ($type && $id) {
    $query
    ->condition('type', $type)
      ->condition('id', $id);
  }
  if ($count) {
    $query->condition('count', $count, '<=');
  }
  $result = $query->execute();

  // If the row has more than the specified count decrement it by that number.
  if (!$result && $count > 0) {
    $query = db_update('file_usage')
      ->condition('module', $module)
      ->condition('fid', $file->fid);
    if ($type && $id) {
      $query
      ->condition('type', $type)
        ->condition('id', $id);
    }
    $query->expression('count', 'count - :count', array(':count' => $count));
    $query->execute();
  }

  // If there are no more remaining usages of this file, mark it as temporary,
  // which result in a delete through system_cron().
  $usage = file_usage_list($file);
  if (empty($usage)) {
    $file->status = 0;
    $file->save();
  }
}