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