/** * @see FileInterface::delete() * @return bool */ public function delete() { global $transaction; if ($this->file_id != null and $this->file and $this->file_version) { $transaction_id = $transaction->begin(); $folder_id = $this->get_parent_folder_id(); $folder = Folder::get_instance($folder_id); $file_delete_event = new FileDeleteEvent($this->file_id, $folder_id, 0); $event_handler = new EventHandler($file_delete_event); if ($event_handler->get_success() == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } $file_version_array = FileVersion_Access::list_entries_by_toid($this->file_id); if (is_array($file_version_array) and count($file_version_array) >= 1) { $file_size = 0; $file_path_array = array(); $temp_file_id = $this->file_id; foreach ($file_version_array as $key => $value) { $file_version_access = new FileVersion_Access($value); $file_size = $file_size + $file_version_access->get_size(); $extension_array = explode(".", $file_version_access->get_name()); $extension_array_length = substr_count($file_version_access->get_name(), "."); if ($extension_array_length == 0) { $extension = ""; } else { $extension = "." . $extension_array[$extension_array_length]; } $path = constant("BASE_DIR") . "/" . $folder->get_path() . "/" . $this->data_entity_id . "-" . $file_version_access->get_internal_revision() . "" . $extension . ""; if ($file_version_access->delete()) { array_push($file_path_array, $path); } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } $folder->decrease_filesize($this->get_owner_id(), $file_size); $file_delete = $this->file->delete(); if ($file_delete == true) { // Data Entity Delete if (parent::delete() == true) { if (is_array($file_path_array) and count($file_path_array) >= 1) { foreach ($file_path_array as $key => $value) { if (is_file($value)) { if (is_writable($value)) { $delete_success = unlink($value); if ($delete_success == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } $this->file->__consturct($temp_file_id); $this->file->set_flag(-1); // Corrupt return false; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } $this->file->__consturct($temp_file_id); $this->file->set_flag(-1); // Corrupt return false; } } } } if ($transaction_id != null) { $transaction->commit($transaction_id); } return true; } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { return false; } }