Page MenuHomePhorge

D25051.1732513175.diff
No OneTemporary

D25051.1732513175.diff

diff --git a/resources/sql/autopatches/20230917.fileattachment.01.delete.sql b/resources/sql/autopatches/20230917.fileattachment.01.delete.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20230917.fileattachment.01.delete.sql
@@ -0,0 +1,6 @@
+USE {$NAMESPACE}_file;
+ DELETE FROM file_attachment
+ WHERE NOT EXISTS
+ (SELECT *
+ FROM file
+ WHERE phid=file_attachment.filePHID)
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3450,6 +3450,7 @@
'PhabricatorFileAES256StorageFormat' => 'applications/files/format/PhabricatorFileAES256StorageFormat.php',
'PhabricatorFileAltTextTransaction' => 'applications/files/xaction/PhabricatorFileAltTextTransaction.php',
'PhabricatorFileAttachment' => 'applications/files/storage/PhabricatorFileAttachment.php',
+ 'PhabricatorFileAttachmentDestructionEngineExtension' => 'applications/files/engineextension/PhabricatorFileAttachmentDestructionEngineExtension.php',
'PhabricatorFileAttachmentQuery' => 'applications/files/query/PhabricatorFileAttachmentQuery.php',
'PhabricatorFileBundleLoader' => 'applications/files/query/PhabricatorFileBundleLoader.php',
'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php',
@@ -9906,6 +9907,7 @@
'PhabricatorPolicyInterface',
'PhabricatorExtendedPolicyInterface',
),
+ 'PhabricatorFileAttachmentDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension',
'PhabricatorFileAttachmentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFileBundleLoader' => 'Phobject',
'PhabricatorFileChunk' => array(
diff --git a/src/applications/files/engineextension/PhabricatorFileAttachmentDestructionEngineExtension.php b/src/applications/files/engineextension/PhabricatorFileAttachmentDestructionEngineExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/files/engineextension/PhabricatorFileAttachmentDestructionEngineExtension.php
@@ -0,0 +1,22 @@
+<?php
+
+final class PhabricatorFileAttachmentDestructionEngineExtension
+ extends PhabricatorDestructionEngineExtension {
+
+ const EXTENSIONKEY = 'file.attachments';
+
+ public function getExtensionName() {
+ return pht('File Attachments');
+ }
+
+ public function destroyObject(
+ PhabricatorDestructionEngine $engine,
+ $object) {
+ $attachments = id(new PhabricatorFileAttachment())->loadAllWhere(
+ 'objectPHID = %s',
+ $object->getPHID());
+ foreach ($attachments as $attachment) {
+ $attachment->delete();
+ }
+ }
+}
diff --git a/src/applications/files/storage/PhabricatorFile.php b/src/applications/files/storage/PhabricatorFile.php
--- a/src/applications/files/storage/PhabricatorFile.php
+++ b/src/applications/files/storage/PhabricatorFile.php
@@ -1728,6 +1728,14 @@
PhabricatorDestructionEngine $engine) {
$this->openTransaction();
+
+ $attachments = id(new PhabricatorFileAttachment())->loadAllWhere(
+ 'filePHID = %s',
+ $this->getPHID());
+ foreach ($attachments as $attachment) {
+ $attachment->delete();
+ }
+
$this->delete();
$this->saveTransaction();
}

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 25, 05:39 (14 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
993448
Default Alt Text
D25051.1732513175.diff (3 KB)

Event Timeline