Example #1
0
 /**
  * @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;
     }
 }