/** * @see FileInterface::delete_version() * @param integer $internal_revision * @return bool */ public function delete_version($internal_revision) { global $transaction; if ($this->file_id and $this->file and $this->file_version) { if (is_numeric($internal_revision)) { $transaction_id = $transaction->begin(); $folder_id = $this->get_parent_folder_id(); $folder = Folder::get_instance($folder_id); $this->open_internal_revision($internal_revision); $number_of_root_major_versions = FileVersion_Access::get_number_of_root_major_versions_by_toid($this->file_id); if ($number_of_root_major_versions > 1) { $file_version_id = FileVersion_Access::get_entry_by_toid_and_internal_revision($this->file_id, $internal_revision); $file_delete_event = new FileVersionDeleteEvent($file_version_id, $folder_id, $this->file_version->get_size()); $event_handler = new EventHandler($file_delete_event); if ($event_handler->get_success() == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return 0; } $minor_file_array = FileVersion_Access::list_entries_by_previous_version_id($file_version_id); if (is_array($minor_file_array) and count($minor_file_array) >= 1) { foreach ($minor_file_array as $key => $value) { $file = new File($this->file_id); $file->open_file_version_id($value); if ($file->delete_version($file->get_internal_revision()) == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return 0; } } } if ($this->file_version->get_current() == true) { $next_current_file_version_id = FileVersion_Access::get_last_uploaded_version_entry_by_toid($this->file_id, $internal_revision); $file_version_access = new FileVersion_Access($next_current_file_version_id); $file_version_access->set_current(true); } // Minimise Filesize $folder->decrease_filesize($this->file_version->get_owner_id(), $this->file_version->get_size()); // Datei L�schen $extension_array = explode(".", $this->file_version->get_name()); $extension_array_length = substr_count($this->file_version->get_name(), "."); if ($extension_array_length == 0) { $extension = ""; } else { $extension = "." . $extension_array[$extension_array_length]; } $path = constant("BASE_DIR") . "/" . $folder->get_path() . "/" . $this->date_entity_id . "-" . $this->file_version->get_internal_revision() . "" . $extension . ""; if ($this->file_version->delete()) { if (is_file($path)) { if (is_writable($path)) { $delete_success = unlink($path); if ($delete_success == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } $this->file->set_flag(-1); // Corrupt return 0; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } $this->file->set_flag(-1); // Corrupt return 0; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } $this->file->set_flag(-1); // Corrupt return 0; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return 0; } if ($transaction_id != null) { $transaction->commit($transaction_id); } return 1; } else { if ($this->delete()) { if ($transaction_id != null) { $transaction->commit($transaction_id); } return 2; } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return 0; } } } else { return 0; } } else { return 0; } }