From 7c98cd85fe6df097be6dbcdaba096257d4c3134a Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 10 Dec 2015 05:14:54 -0800 Subject: [PATCH] Implement DestructibleInterface for Owners Packages Summary: Fixes T9945. This is straightforward. The two sub-object types are very lightweight so I just deleted them directly instead of loading + delete()'ing (or implementing DestructibleInterface on them, which would require they have PHIDs). Also improve a US English localization. Test Plan: - Used `bin/remove destroy PHID-... --trace` to destroy a package. - Verified it was gone. - Inspected the SQL in the log for general reasonableness. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9945 Differential Revision: https://secure.phabricator.com/D14729 --- src/__phutil_library_map__.php | 1 + .../storage/PhabricatorOwnersPackage.php | 29 ++++++++++++++++++- .../PhabricatorUSEnglishTranslation.php | 5 ++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index a549dd55f2..0a6a3e3e24 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -6784,6 +6784,7 @@ phutil_register_library_map(array( 'PhabricatorPolicyInterface', 'PhabricatorApplicationTransactionInterface', 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', ), 'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorOwnersPackageEditEngine' => 'PhabricatorEditEngine', diff --git a/src/applications/owners/storage/PhabricatorOwnersPackage.php b/src/applications/owners/storage/PhabricatorOwnersPackage.php index 09e2a3be26..f4ae31b3b6 100644 --- a/src/applications/owners/storage/PhabricatorOwnersPackage.php +++ b/src/applications/owners/storage/PhabricatorOwnersPackage.php @@ -5,7 +5,8 @@ final class PhabricatorOwnersPackage implements PhabricatorPolicyInterface, PhabricatorApplicationTransactionInterface, - PhabricatorCustomFieldInterface { + PhabricatorCustomFieldInterface, + PhabricatorDestructibleInterface { protected $name; protected $originalName; @@ -338,4 +339,30 @@ final class PhabricatorOwnersPackage return $this; } + +/* -( PhabricatorDestructibleInterface )----------------------------------- */ + + + public function destroyObjectPermanently( + PhabricatorDestructionEngine $engine) { + + $this->openTransaction(); + $conn_w = $this->establishConnection('w'); + + queryfx( + $conn_w, + 'DELETE FROM %T WHERE packageID = %d', + id(new PhabricatorOwnersPath())->getTableName(), + $this->getID()); + + queryfx( + $conn_w, + 'DELETE FROM %T WHERE packageID = %d', + id(new PhabricatorOwnersOwner())->getTableName(), + $this->getID()); + + $this->delete(); + $this->saveTransaction(); + } + } diff --git a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php index 3c23491a4f..79c9ef567a 100644 --- a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php +++ b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php @@ -1501,6 +1501,11 @@ final class PhabricatorUSEnglishTranslation '%s updated %s for %s, added %s: %s; removed %s: %s.' => '%s updated %s for %s, added: %5$s; removed; %7$s.', + + 'Permanently destroyed %s object(s).' => array( + 'Permanently destroyed %s object.', + 'Permanently destroyed %s objects.', + ), ); }