Page MenuHomePhabricator

D14831.id35859.diff
No OneTemporary

D14831.id35859.diff

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
@@ -71,6 +71,7 @@
'AlmanacNetworkTransaction' => 'applications/almanac/storage/AlmanacNetworkTransaction.php',
'AlmanacNetworkTransactionQuery' => 'applications/almanac/query/AlmanacNetworkTransactionQuery.php',
'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php',
+ 'AlmanacPropertiesDestructionEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php',
'AlmanacProperty' => 'applications/almanac/storage/AlmanacProperty.php',
'AlmanacPropertyController' => 'applications/almanac/controller/AlmanacPropertyController.php',
'AlmanacPropertyDeleteController' => 'applications/almanac/controller/AlmanacPropertyDeleteController.php',
@@ -2125,6 +2126,8 @@
'PhabricatorDesktopNotificationsSettingsPanel' => 'applications/settings/panel/PhabricatorDesktopNotificationsSettingsPanel.php',
'PhabricatorDestructibleInterface' => 'applications/system/interface/PhabricatorDestructibleInterface.php',
'PhabricatorDestructionEngine' => 'applications/system/engine/PhabricatorDestructionEngine.php',
+ 'PhabricatorDestructionEngineExtension' => 'applications/system/engine/PhabricatorDestructionEngineExtension.php',
+ 'PhabricatorDestructionEngineExtensionModule' => 'applications/system/engine/PhabricatorDestructionEngineExtensionModule.php',
'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDeveloperPreferencesSettingsPanel.php',
'PhabricatorDiffInlineCommentQuery' => 'infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php',
@@ -3922,6 +3925,7 @@
'AlmanacNetworkTransaction' => 'PhabricatorApplicationTransaction',
'AlmanacNetworkTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'AlmanacNetworkViewController' => 'AlmanacNetworkController',
+ 'AlmanacPropertiesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension',
'AlmanacProperty' => array(
'PhabricatorCustomFieldStorage',
'PhabricatorPolicyInterface',
@@ -6292,6 +6296,8 @@
'PhabricatorDefaultRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler',
'PhabricatorDesktopNotificationsSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDestructionEngine' => 'Phobject',
+ 'PhabricatorDestructionEngineExtension' => 'Phobject',
+ 'PhabricatorDestructionEngineExtensionModule' => 'PhabricatorConfigModule',
'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions',
'PhabricatorDeveloperPreferencesSettingsPanel' => 'PhabricatorSettingsPanel',
'PhabricatorDiffInlineCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
diff --git a/src/applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php b/src/applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php
@@ -0,0 +1,32 @@
+<?php
+
+final class AlmanacPropertiesDestructionEngineExtension
+ extends PhabricatorDestructionEngineExtension {
+
+ const EXTENSIONKEY = 'almanac.properties';
+
+ public function getExtensionName() {
+ return pht('Almanac Properties');
+ }
+
+ public function canDestroyObject(
+ PhabricatorDestructionEngine $engine,
+ $object) {
+ return ($object instanceof AlmanacPropertyInterface);
+ }
+
+ public function destroyObject(
+ PhabricatorDestructionEngine $engine,
+ $object) {
+
+ $table = new AlmanacProperty();
+ $conn_w = $table->establishConnection('w');
+
+ queryfx(
+ $conn_w,
+ 'DELETE FROM %T WHERE objectPHID = %s',
+ $table->getTableName(),
+ $object->getPHID());
+ }
+
+}
diff --git a/src/applications/search/engineextension/PhabricatorSearchEngineExtensionModule.php b/src/applications/search/engineextension/PhabricatorSearchEngineExtensionModule.php
--- a/src/applications/search/engineextension/PhabricatorSearchEngineExtensionModule.php
+++ b/src/applications/search/engineextension/PhabricatorSearchEngineExtensionModule.php
@@ -8,7 +8,7 @@
}
public function getModuleName() {
- return pht('SearchEngine Extensions');
+ return pht('Engine: Search');
}
public function renderModuleStatus(AphrontRequest $request) {
diff --git a/src/applications/system/engine/PhabricatorDestructionEngine.php b/src/applications/system/engine/PhabricatorDestructionEngine.php
--- a/src/applications/system/engine/PhabricatorDestructionEngine.php
+++ b/src/applications/system/engine/PhabricatorDestructionEngine.php
@@ -17,14 +17,9 @@
$log->setRootLogID($this->rootLogID);
}
- $object_phid = null;
- if (method_exists($object, 'getPHID')) {
- try {
- $object_phid = $object->getPHID();
- $log->setObjectPHID($object_phid);
- } catch (Exception $ex) {
- // Ignore.
- }
+ $object_phid = $this->getObjectPHID($object);
+ if ($object_phid) {
+ $log->setObjectPHID($object_phid);
}
if (method_exists($object, 'getMonogram')) {
@@ -43,6 +38,18 @@
$object->destroyObjectPermanently($this);
+ $extensions = PhabricatorDestructionEngineExtension::getAllExtensions();
+ foreach ($extensions as $key => $extension) {
+ if (!$extension->canDestroyObject($this, $object)) {
+ unset($extensions[$key]);
+ continue;
+ }
+ }
+
+ foreach ($extensions as $key => $extension) {
+ $extension->destroyObject($this, $object);
+ }
+
if ($object_phid) {
$this->destroyEdges($object_phid);
@@ -92,10 +99,6 @@
$token->delete();
}
}
-
- if ($object instanceof AlmanacPropertyInterface) {
- $this->destroyAlmanacProperties($object_phid);
- }
}
private function destroyEdges($src_phid) {
@@ -152,15 +155,22 @@
$object_phid);
}
- private function destroyAlmanacProperties($object_phid) {
- $table = new AlmanacProperty();
- $conn_w = $table->establishConnection('w');
+ private function destroyAlmanacProperties($object_phid) {}
- queryfx(
- $conn_w,
- 'DELETE FROM %T WHERE objectPHID = %s',
- $table->getTableName(),
- $object_phid);
+ public function getObjectPHID($object) {
+ if (!is_object($object)) {
+ return null;
+ }
+
+ if (!method_exists($object, 'getPHID')) {
+ return null;
+ }
+
+ try {
+ return $object->getPHID();
+ } catch (Exception $ex) {
+ return null;
+ }
}
}
diff --git a/src/applications/system/engine/PhabricatorDestructionEngineExtension.php b/src/applications/system/engine/PhabricatorDestructionEngineExtension.php
new file mode 100644
--- /dev/null
+++ b/src/applications/system/engine/PhabricatorDestructionEngineExtension.php
@@ -0,0 +1,24 @@
+<?php
+
+abstract class PhabricatorDestructionEngineExtension extends Phobject {
+
+ final public function getExtensionKey() {
+ return $this->getPhobjectClassConstant('EXTENSIONKEY');
+ }
+
+ abstract public function getExtensionName();
+ abstract public function canDestroyObject(
+ PhabricatorDestructionEngine $engine,
+ $object);
+ abstract public function destroyObject(
+ PhabricatorDestructionEngine $engine,
+ $object);
+
+ final public static function getAllExtensions() {
+ return id(new PhutilClassMapQuery())
+ ->setAncestorClass(__CLASS__)
+ ->setUniqueMethod('getExtensionKey')
+ ->execute();
+ }
+
+}
diff --git a/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php b/src/applications/system/engine/PhabricatorDestructionEngineExtensionModule.php
copy from src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php
copy to src/applications/system/engine/PhabricatorDestructionEngineExtensionModule.php
--- a/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php
+++ b/src/applications/system/engine/PhabricatorDestructionEngineExtensionModule.php
@@ -1,51 +1,43 @@
<?php
-final class PhabricatorEditEngineExtensionModule
+final class PhabricatorDestructionEngineExtensionModule
extends PhabricatorConfigModule {
public function getModuleKey() {
- return 'editengine';
+ return 'destructionengine';
}
public function getModuleName() {
- return pht('EditEngine Extensions');
+ return pht('Engine: Destruction');
}
public function renderModuleStatus(AphrontRequest $request) {
$viewer = $request->getViewer();
- $extensions = PhabricatorEditEngineExtension::getAllExtensions();
+ $extensions = PhabricatorDestructionEngineExtension::getAllExtensions();
$rows = array();
foreach ($extensions as $extension) {
$rows[] = array(
- $extension->getExtensionPriority(),
get_class($extension),
$extension->getExtensionName(),
- $extension->isExtensionEnabled()
- ? pht('Yes')
- : pht('No'),
);
}
$table = id(new AphrontTableView($rows))
->setHeaders(
array(
- pht('Priority'),
pht('Class'),
pht('Name'),
- pht('Enabled'),
))
->setColumnClasses(
array(
null,
- null,
'wide pri',
- null,
));
return id(new PHUIObjectBoxView())
- ->setHeaderText(pht('EditEngine Extensions'))
+ ->setHeaderText(pht('DestructionEngine Extensions'))
->setTable($table);
}
diff --git a/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php b/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php
--- a/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php
+++ b/src/applications/transactions/editengineextension/PhabricatorEditEngineExtensionModule.php
@@ -8,7 +8,7 @@
}
public function getModuleName() {
- return pht('EditEngine Extensions');
+ return pht('Engine: Edit');
}
public function renderModuleStatus(AphrontRequest $request) {

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 25, 6:12 PM (5 d, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7710727
Default Alt Text
D14831.id35859.diff (10 KB)

Event Timeline