You are here

public function filedepot::deleteVersion in filedepot 7

Same name and namespace in other branches
  1. 6 filedepot.class.php \filedepot::deleteVersion()

File

./filedepot.class.php, line 1314
filedepot.class.php Main class for the Filedepot module

Class

filedepot
@file filedepot.class.php Main class for the Filedepot module

Code

public function deleteVersion($fid, $version) {
  $q1 = db_query("SELECT cid,version FROM {filedepot_files} WHERE fid=:fid", array(
    'fid' => $fid,
  ));
  list($cid, $curVersion) = array_values($q1
    ->fetchAssoc());
  $q2 = db_query("SELECT fname, drupal_fid FROM {filedepot_fileversions} WHERE fid=:fid AND version=:version", array(
    ':fid' => $fid,
    ':version' => $version,
  ));
  list($fname, $dfid) = array_values($q2
    ->fetchAssoc());
  if ($cid > 0 and !empty($fname) and $dfid > 0) {
    db_delete('filedepot_fileversions')
      ->condition('fid', $fid)
      ->condition('version', $version)
      ->execute();

    // Need to check there are no other repository entries in this category for the same filename
    if (db_query("SELECT count(fid) FROM {filedepot_files} WHERE cid=:cid and fname=:fname", array(
      'cid' => $cid,
      'fname' => $fname,
    ))
      ->fetchField() > 1) {
      watchdog('filedepot', 'Delete file(@fid), version: @version, File: @fname. Other references found - not deleted.', array(
        '@fid' => $fid,
        '@version' => $version,
        '@fname' => $fname,
      ));
    }
    else {
      if (!empty($fname) and file_exists("{$this->root_storage_path}{$cid}/{$fname}")) {
        @unlink("{$this->root_storage_path}{$cid}/{$fname}");
      }
      watchdog('filedepot', 'Delete file(@fid), version: @version, File: @fname. Single reference - file deleted.', array(
        '@fid' => $fid,
        '@version' => $version,
        '@fname' => $fname,
      ));
    }

    // If there is at least 1 more version record on file then I may need to update current version
    if (db_query("SELECT count(fid) FROM {filedepot_fileversions} WHERE fid=:fid", array(
      ':fid' => $fid,
    ))
      ->fetchField() > 0) {
      if ($version == $curVersion) {

        // Retrieve most current version on record
        $q3 = db_query("SELECT fname,version,date FROM {filedepot_fileversions} WHERE fid=:fid ORDER BY version DESC", array(
          ':fid' => $fid,
        ), 0, 1);
        list($fname, $version, $date) = array_values($q3
          ->fetchAssoc());
        db_query("UPDATE {filedepot_files} SET fname=:fname,version=:version, date=:time WHERE fid=:fid", array(
          ':fname' => $fname,
          ':version' => $version,
          ':time' => time(),
          ':fid' => $fid,
        ));
      }
    }
    else {
      watchdog('filedepot', 'Delete File final version for fid(@fid), Main file records deleted.', array(
        '@fid' => $fid,
        '@version' => $version,
        '@fname' => $fname,
      ));
      db_delete('filedepot_files')
        ->condition('fid', $fid)
        ->execute();
    }
    return TRUE;
  }
  else {
    return FALSE;
  }
}