Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14024223
D20595.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
58 KB
Referenced Files
None
Subscribers
None
D20595.diff
View Options
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
@@ -2172,9 +2172,11 @@
'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php',
'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php',
'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php',
+ 'PhabricatorApplicationTransactionDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionDetailView.php',
'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php',
'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php',
'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php',
+ 'PhabricatorApplicationTransactionJSONDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionJSONDiffDetailView.php',
'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php',
'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php',
'PhabricatorApplicationTransactionPublishWorker' => 'applications/transactions/worker/PhabricatorApplicationTransactionPublishWorker.php',
@@ -3151,16 +3153,26 @@
'PhabricatorEditEngineConfigurationTransactionQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationTransactionQuery.php',
'PhabricatorEditEngineConfigurationViewController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php',
'PhabricatorEditEngineController' => 'applications/transactions/controller/PhabricatorEditEngineController.php',
+ 'PhabricatorEditEngineCreateOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineCreateOrderTransaction.php',
'PhabricatorEditEngineDatasource' => 'applications/transactions/typeahead/PhabricatorEditEngineDatasource.php',
+ 'PhabricatorEditEngineDefaultCreateTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDefaultCreateTransaction.php',
'PhabricatorEditEngineDefaultLock' => 'applications/transactions/editengine/PhabricatorEditEngineDefaultLock.php',
+ 'PhabricatorEditEngineDefaultTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDefaultTransaction.php',
+ 'PhabricatorEditEngineDisableTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDisableTransaction.php',
+ 'PhabricatorEditEngineEditOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineEditOrderTransaction.php',
'PhabricatorEditEngineExtension' => 'applications/transactions/engineextension/PhabricatorEditEngineExtension.php',
'PhabricatorEditEngineExtensionModule' => 'applications/transactions/engineextension/PhabricatorEditEngineExtensionModule.php',
+ 'PhabricatorEditEngineIsEditTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineIsEditTransaction.php',
'PhabricatorEditEngineListController' => 'applications/transactions/controller/PhabricatorEditEngineListController.php',
'PhabricatorEditEngineLock' => 'applications/transactions/editengine/PhabricatorEditEngineLock.php',
'PhabricatorEditEngineLockableInterface' => 'applications/transactions/editengine/PhabricatorEditEngineLockableInterface.php',
+ 'PhabricatorEditEngineLocksTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineLocksTransaction.php',
'PhabricatorEditEngineMFAEngine' => 'applications/transactions/editengine/PhabricatorEditEngineMFAEngine.php',
'PhabricatorEditEngineMFAInterface' => 'applications/transactions/editengine/PhabricatorEditEngineMFAInterface.php',
+ 'PhabricatorEditEngineNameTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineNameTransaction.php',
+ 'PhabricatorEditEngineOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineOrderTransaction.php',
'PhabricatorEditEnginePointsCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEnginePointsCommentAction.php',
+ 'PhabricatorEditEnginePreambleTransaction' => 'applications/transactions/xaction/PhabricatorEditEnginePreambleTransaction.php',
'PhabricatorEditEngineProfileMenuItem' => 'applications/search/menuitem/PhabricatorEditEngineProfileMenuItem.php',
'PhabricatorEditEngineQuery' => 'applications/transactions/query/PhabricatorEditEngineQuery.php',
'PhabricatorEditEngineSearchEngine' => 'applications/transactions/query/PhabricatorEditEngineSearchEngine.php',
@@ -3171,7 +3183,9 @@
'PhabricatorEditEngineSubtypeInterface' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php',
'PhabricatorEditEngineSubtypeMap' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php',
'PhabricatorEditEngineSubtypeTestCase' => 'applications/transactions/editengine/__tests__/PhabricatorEditEngineSubtypeTestCase.php',
+ 'PhabricatorEditEngineSubtypeTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineSubtypeTransaction.php',
'PhabricatorEditEngineTokenizerCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineTokenizerCommentAction.php',
+ 'PhabricatorEditEngineTransactionType' => 'applications/transactions/xaction/PhabricatorEditEngineTransactionType.php',
'PhabricatorEditField' => 'applications/transactions/editfield/PhabricatorEditField.php',
'PhabricatorEditPage' => 'applications/transactions/editengine/PhabricatorEditPage.php',
'PhabricatorEditType' => 'applications/transactions/edittype/PhabricatorEditType.php',
@@ -8091,8 +8105,10 @@
'PhabricatorApplicationTransactionCommentView' => 'AphrontView',
'PhabricatorApplicationTransactionController' => 'PhabricatorController',
'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController',
+ 'PhabricatorApplicationTransactionDetailView' => 'AphrontView',
'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor',
'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory',
+ 'PhabricatorApplicationTransactionJSONDiffDetailView' => 'PhabricatorApplicationTransactionDetailView',
'PhabricatorApplicationTransactionNoEffectException' => 'Exception',
'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse',
'PhabricatorApplicationTransactionPublishWorker' => 'PhabricatorWorker',
@@ -8103,7 +8119,7 @@
'PhabricatorApplicationTransactionShowOlderController' => 'PhabricatorApplicationTransactionController',
'PhabricatorApplicationTransactionStructureException' => 'Exception',
'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery',
- 'PhabricatorApplicationTransactionTextDiffDetailView' => 'AphrontView',
+ 'PhabricatorApplicationTransactionTextDiffDetailView' => 'PhabricatorApplicationTransactionDetailView',
'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType',
'PhabricatorApplicationTransactionType' => 'PhabricatorModularTransactionType',
'PhabricatorApplicationTransactionValidationError' => 'Phobject',
@@ -9228,18 +9244,28 @@
'PhabricatorEditEngineConfigurationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorEditEngineConfigurationSortController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineConfigurationSubtypeController' => 'PhabricatorEditEngineController',
- 'PhabricatorEditEngineConfigurationTransaction' => 'PhabricatorApplicationTransaction',
+ 'PhabricatorEditEngineConfigurationTransaction' => 'PhabricatorModularTransaction',
'PhabricatorEditEngineConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorEditEngineConfigurationViewController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineController' => 'PhabricatorApplicationTransactionController',
+ 'PhabricatorEditEngineCreateOrderTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineDatasource' => 'PhabricatorTypeaheadDatasource',
+ 'PhabricatorEditEngineDefaultCreateTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineDefaultLock' => 'PhabricatorEditEngineLock',
+ 'PhabricatorEditEngineDefaultTransaction' => 'PhabricatorEditEngineTransactionType',
+ 'PhabricatorEditEngineDisableTransaction' => 'PhabricatorEditEngineTransactionType',
+ 'PhabricatorEditEngineEditOrderTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineExtension' => 'Phobject',
'PhabricatorEditEngineExtensionModule' => 'PhabricatorConfigModule',
+ 'PhabricatorEditEngineIsEditTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineListController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineLock' => 'Phobject',
+ 'PhabricatorEditEngineLocksTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineMFAEngine' => 'Phobject',
+ 'PhabricatorEditEngineNameTransaction' => 'PhabricatorEditEngineTransactionType',
+ 'PhabricatorEditEngineOrderTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEnginePointsCommentAction' => 'PhabricatorEditEngineCommentAction',
+ 'PhabricatorEditEnginePreambleTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorEditEngineQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorEditEngineSearchEngine' => 'PhabricatorApplicationSearchEngine',
@@ -9249,7 +9275,9 @@
'PhabricatorEditEngineSubtype' => 'Phobject',
'PhabricatorEditEngineSubtypeMap' => 'Phobject',
'PhabricatorEditEngineSubtypeTestCase' => 'PhabricatorTestCase',
+ 'PhabricatorEditEngineSubtypeTransaction' => 'PhabricatorEditEngineTransactionType',
'PhabricatorEditEngineTokenizerCommentAction' => 'PhabricatorEditEngineCommentAction',
+ 'PhabricatorEditEngineTransactionType' => 'PhabricatorModularTransactionType',
'PhabricatorEditField' => 'Phobject',
'PhabricatorEditPage' => 'Phobject',
'PhabricatorEditType' => 'Phobject',
diff --git a/src/applications/herald/xaction/HeraldRuleEditTransaction.php b/src/applications/herald/xaction/HeraldRuleEditTransaction.php
--- a/src/applications/herald/xaction/HeraldRuleEditTransaction.php
+++ b/src/applications/herald/xaction/HeraldRuleEditTransaction.php
@@ -40,17 +40,10 @@
public function newChangeDetailView() {
$viewer = $this->getViewer();
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $json = new PhutilJSON();
- $old_json = $json->encodeFormatted($old);
- $new_json = $json->encodeFormatted($new);
-
- return id(new PhabricatorApplicationTransactionTextDiffDetailView())
+ return id(new PhabricatorApplicationTransactionJSONDiffDetailView())
->setViewer($viewer)
- ->setOldText($old_json)
- ->setNewText($new_json);
+ ->setOld($this->getOldValue())
+ ->setNew($this->getNewValue());
}
}
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php
@@ -15,7 +15,7 @@
$key = $config->getIdentifier();
$cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
- $type = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE;
+ $type = PhabricatorEditEngineDefaultCreateTransaction::TRANSACTIONTYPE;
if ($request->isFormPost()) {
$xactions = array();
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php
@@ -52,7 +52,7 @@
$field->readValueFromSubmit($request);
}
- $type = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
+ $type = PhabricatorEditEngineDefaultTransaction::TRANSACTIONTYPE;
$xactions = array();
foreach ($fields as $field) {
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php
@@ -15,7 +15,7 @@
$key = $config->getIdentifier();
$cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
- $type = PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE;
+ $type = PhabricatorEditEngineDisableTransaction::TRANSACTIONTYPE;
if ($request->isFormPost()) {
$xactions = array();
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationIsEditController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationIsEditController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationIsEditController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationIsEditController.php
@@ -15,8 +15,7 @@
$key = $config->getIdentifier();
$cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
- $type = PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT;
-
+ $type = PhabricatorEditEngineIsEditTransaction::TRANSACTIONTYPE;
if ($request->isFormPost()) {
$xactions = array();
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php
@@ -30,8 +30,7 @@
$xactions = array();
$locks = $request->getArr('locks');
- $type_locks = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
-
+ $type_locks = PhabricatorEditEngineLocksTransaction::TRANSACTIONTYPE;
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
->setTransactionType($type_locks)
->setNewValue($locks);
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php
@@ -31,8 +31,7 @@
$xactions = array();
$key_order = $request->getStrList('keyOrder');
- $type_order = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
-
+ $type_order = PhabricatorEditEngineOrderTransaction::TRANSACTIONTYPE;
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
->setTransactionType($type_order)
->setNewValue($key_order);
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php
@@ -70,10 +70,10 @@
if ($is_create) {
$xaction_type =
- PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER;
+ PhabricatorEditEngineCreateOrderTransaction::TRANSACTIONTYPE;
} else {
$xaction_type =
- PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER;
+ PhabricatorEditEngineEditOrderTransaction::TRANSACTIONTYPE;
}
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
@@ -35,9 +35,7 @@
$xactions = array();
$subtype = $request->getStr('subtype');
- $type_subtype =
- PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE;
-
+ $type_subtype = PhabricatorEditEngineSubtypeTransaction::TRANSACTIONTYPE;
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
->setTransactionType($type_subtype)
->setNewValue($subtype);
diff --git a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php
--- a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php
+++ b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php
@@ -99,14 +99,14 @@
->setLabel(pht('Name'))
->setDescription(pht('Name of the form.'))
->setTransactionType(
- PhabricatorEditEngineConfigurationTransaction::TYPE_NAME)
+ PhabricatorEditEngineNameTransaction::TRANSACTIONTYPE)
->setValue($object->getName()),
id(new PhabricatorRemarkupEditField())
->setKey('preamble')
->setLabel(pht('Preamble'))
->setDescription(pht('Optional instructions, shown above the form.'))
->setTransactionType(
- PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE)
+ PhabricatorEditEnginePreambleTransaction::TRANSACTIONTYPE)
->setValue($object->getPreamble()),
);
}
diff --git a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
--- a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
+++ b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
@@ -13,191 +13,9 @@
public function getTransactionTypes() {
$types = parent::getTransactionTypes();
-
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_NAME;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE;
- $types[] =
- PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE;
-
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER;
- $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER;
-
return $types;
}
- protected function validateTransaction(
- PhabricatorLiskDAO $object,
- $type,
- array $xactions) {
-
- $errors = parent::validateTransaction($object, $type, $xactions);
- switch ($type) {
- case PhabricatorEditEngineConfigurationTransaction::TYPE_NAME:
- $missing = $this->validateIsEmptyTextField(
- $object->getName(),
- $xactions);
-
- if ($missing) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Required'),
- pht('Form name is required.'),
- nonempty(last($xactions), null));
-
- $error->setIsMissingFieldError(true);
- $errors[] = $error;
- }
- break;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
- if ($xactions) {
- $map = $object->getEngine()
- ->setViewer($this->getActor())
- ->newSubtypeMap();
- foreach ($xactions as $xaction) {
- $new = $xaction->getNewValue();
-
- if ($map->isValidSubtype($new)) {
- continue;
- }
-
- $errors[] = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht('Subtype "%s" is not a valid subtype.', $new),
- $xaction);
- }
- }
- break;
- }
-
- return $errors;
- }
-
- protected function getCustomTransactionOldValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorEditEngineConfigurationTransaction::TYPE_NAME:
- return $object->getName();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
- return $object->getPreamble();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER:
- return $object->getFieldOrder();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
- $field_key = $xaction->getMetadataValue('field.key');
- return $object->getFieldDefault($field_key);
- case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
- return $object->getFieldLocks();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
- return $object->getSubtype();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
- return (int)$object->getIsDefault();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
- return (int)$object->getIsEdit();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
- return (int)$object->getIsDisabled();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER:
- return (int)$object->getCreateOrder();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER:
- return (int)$object->getEditOrder();
-
- }
- }
-
- protected function getCustomTransactionNewValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorEditEngineConfigurationTransaction::TYPE_NAME:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
- return $xaction->getNewValue();
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER:
- return (int)$xaction->getNewValue();
- }
- }
-
- protected function applyCustomInternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorEditEngineConfigurationTransaction::TYPE_NAME:
- $object->setName($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
- $object->setPreamble($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER:
- $object->setFieldOrder($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
- $field_key = $xaction->getMetadataValue('field.key');
- $object->setFieldDefault($field_key, $xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
- $object->setFieldLocks($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
- $object->setSubtype($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
- $object->setIsDefault($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
- $object->setIsEdit($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
- $object->setIsDisabled($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER:
- $object->setCreateOrder($xaction->getNewValue());
- return;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER:
- $object->setEditOrder($xaction->getNewValue());
- return;
- }
-
- return parent::applyCustomInternalTransaction($object, $xaction);
- }
-
- protected function applyCustomExternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorEditEngineConfigurationTransaction::TYPE_NAME:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER:
- case PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER:
- return;
- }
-
- return parent::applyCustomExternalTransaction($object, $xaction);
- }
-
}
diff --git a/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php b/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
--- a/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
+++ b/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
@@ -1,19 +1,7 @@
<?php
final class PhabricatorEditEngineConfigurationTransaction
- extends PhabricatorApplicationTransaction {
-
- const TYPE_NAME = 'editengine.config.name';
- const TYPE_PREAMBLE = 'editengine.config.preamble';
- const TYPE_ORDER = 'editengine.config.order';
- const TYPE_DEFAULT = 'editengine.config.default';
- const TYPE_LOCKS = 'editengine.config.locks';
- const TYPE_DEFAULTCREATE = 'editengine.config.default.create';
- const TYPE_ISEDIT = 'editengine.config.isedit';
- const TYPE_DISABLE = 'editengine.config.disable';
- const TYPE_CREATEORDER = 'editengine.order.create';
- const TYPE_EDITORDER = 'editengine.order.edit';
- const TYPE_SUBTYPE = 'editengine.config.subtype';
+ extends PhabricatorModularTransaction {
public function getApplicationName() {
return 'search';
@@ -23,203 +11,8 @@
return PhabricatorEditEngineConfigurationPHIDType::TYPECONST;
}
- public function getTitle() {
- $author_phid = $this->getAuthorPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case PhabricatorTransactions::TYPE_CREATE:
- return pht(
- '%s created this form configuration.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_NAME:
- if (strlen($old)) {
- return pht(
- '%s renamed this form from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $old,
- $new);
- } else {
- return pht(
- '%s named this form "%s".',
- $this->renderHandleLink($author_phid),
- $new);
- }
- case self::TYPE_PREAMBLE:
- return pht(
- '%s updated the preamble for this form.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_ORDER:
- return pht(
- '%s reordered the fields in this form.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_DEFAULT:
- $key = $this->getMetadataValue('field.key');
-
- $object = $this->getObject();
- $engine = $object->getEngine();
- $fields = $engine->getFieldsForConfig($object);
-
- $field = idx($fields, $key);
- if (!$field) {
- return pht(
- '%s changed the default value for field "%s".',
- $this->renderHandleLink($author_phid),
- $key);
- }
-
- return pht(
- '%s changed the default value for field "%s".',
- $this->renderHandleLink($author_phid),
- $field->getLabel());
- case self::TYPE_LOCKS:
- return pht(
- '%s changed locked and hidden fields.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_DEFAULTCREATE:
- if ($new) {
- return pht(
- '%s added this form to the "Create" menu.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s removed this form from the "Create" menu.',
- $this->renderHandleLink($author_phid));
- }
- case self::TYPE_ISEDIT:
- if ($new) {
- return pht(
- '%s marked this form as an edit form.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s unmarked this form as an edit form.',
- $this->renderHandleLink($author_phid));
- }
- case self::TYPE_DISABLE:
- if ($new) {
- return pht(
- '%s disabled this form.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s enabled this form.',
- $this->renderHandleLink($author_phid));
- }
- case self::TYPE_SUBTYPE:
- return pht(
- '%s changed the subtype of this form from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $old,
- $new);
- }
-
- return parent::getTitle();
- }
-
- public function getColor() {
- $author_phid = $this->getAuthorPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case PhabricatorTransactions::TYPE_CREATE:
- return 'green';
- case self::TYPE_DISABLE:
- if ($new) {
- return 'indigo';
- } else {
- return 'green';
- }
- }
-
- return parent::getColor();
- }
-
- public function getIcon() {
- $author_phid = $this->getAuthorPHID();
-
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case PhabricatorTransactions::TYPE_CREATE:
- return 'fa-plus';
- case self::TYPE_DISABLE:
- if ($new) {
- return 'fa-ban';
- } else {
- return 'fa-check';
- }
- }
-
- return parent::getIcon();
- }
-
- protected function newRemarkupChanges() {
- $changes = array();
-
- $type = $this->getTransactionType();
- switch ($type) {
- case self::TYPE_PREAMBLE:
- $changes[] = $this->newRemarkupChange()
- ->setOldValue($this->getOldValue())
- ->setNewValue($this->getNewValue());
- break;
- }
-
- return $changes;
- }
-
- public function hasChangeDetails() {
- switch ($this->getTransactionType()) {
- case self::TYPE_DEFAULT:
- return true;
- }
-
- return parent::hasChangeDetails();
- }
-
- public function renderChangeDetails(PhabricatorUser $viewer) {
- switch ($this->getTransactionType()) {
- case self::TYPE_DEFAULT:
- $old_value = $this->getOldValue();
- $new_value = $this->getNewValue();
-
- $old_value = $this->renderDefaultValueAsFallbackText($old_value);
- $new_value = $this->renderDefaultValueAsFallbackText($new_value);
-
- return $this->renderTextCorpusChangeDetails(
- $viewer,
- $old_value,
- $new_value);
- }
-
- return parent::renderChangeDetails($viewer);
- }
-
- private function renderDefaultValueAsFallbackText($default_value) {
- // See T13319. When rendering an "alice changed the default value for
- // field X." story on custom forms, we may fall back to a generic
- // rendering. Try to present the value change in a comprehensible way
- // even if it isn't especially human readable (for example, it may
- // contain PHIDs or other internal identifiers).
-
- if (is_scalar($default_value) || is_null($default_value)) {
- return $default_value;
- }
-
- if (phutil_is_natural_list($default_value)) {
- return id(new PhutilJSON())->encodeAsList($default_value);
- }
-
- return id(new PhutilJSON())->encodeAsObject($default_value);
+ public function getBaseTransactionClass() {
+ return 'PhabricatorEditEngineTransactionType';
}
}
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionDetailView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionDetailView.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionDetailView.php
@@ -0,0 +1,172 @@
+<?php
+
+abstract class PhabricatorApplicationTransactionDetailView
+ extends AphrontView {
+ protected $oldText;
+ protected $newText;
+
+ public function setNewText($new_text) {
+ $this->newText = $new_text;
+ return $this;
+ }
+
+ public function setOldText($old_text) {
+ $this->oldText = $old_text;
+ return $this;
+ }
+
+ public function renderForMail() {
+ $diff = $this->buildDiff();
+
+ $viewer = $this->getViewer();
+ $old_bright = $viewer->getCSSValue('old-bright');
+ $new_bright = $viewer->getCSSValue('new-bright');
+
+ $old_styles = array(
+ 'padding: 0 2px;',
+ 'color: #333333;',
+ "background: {$old_bright};",
+ );
+ $old_styles = implode(' ', $old_styles);
+
+ $new_styles = array(
+ 'padding: 0 2px;',
+ 'color: #333333;',
+ "background: {$new_bright};",
+ );
+ $new_styles = implode(' ', $new_styles);
+
+ $omit_styles = array(
+ 'padding: 8px 0;',
+ );
+ $omit_styles = implode(' ', $omit_styles);
+
+ $result = array();
+ foreach ($diff->getSummaryParts() as $part) {
+ $type = $part['type'];
+ $text = $part['text'];
+ switch ($type) {
+ case '.':
+ $result[] = phutil_tag(
+ 'div',
+ array(
+ 'style' => $omit_styles,
+ ),
+ pht('...'));
+ break;
+ case '-':
+ $result[] = phutil_tag(
+ 'span',
+ array(
+ 'style' => $old_styles,
+ ),
+ $text);
+ break;
+ case '+':
+ $result[] = phutil_tag(
+ 'span',
+ array(
+ 'style' => $new_styles,
+ ),
+ $text);
+ break;
+ case '=':
+ $result[] = $text;
+ break;
+ }
+ }
+
+ $styles = array(
+ 'white-space: pre-wrap;',
+ 'color: #74777D;',
+ );
+
+ // Beyond applying "pre-wrap", convert newlines to "<br />" explicitly
+ // to improve behavior in clients like Airmail.
+ $result = phutil_escape_html_newlines($result);
+
+ return phutil_tag(
+ 'div',
+ array(
+ 'style' => implode(' ', $styles),
+ ),
+ $result);
+ }
+
+ public function render() {
+ $diff = $this->buildDiff();
+
+ require_celerity_resource('differential-changeset-view-css');
+
+ $result = array();
+ foreach ($diff->getParts() as $part) {
+ $type = $part['type'];
+ $text = $part['text'];
+ switch ($type) {
+ case '-':
+ $result[] = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'old',
+ ),
+ $text);
+ break;
+ case '+':
+ $result[] = phutil_tag(
+ 'span',
+ array(
+ 'class' => 'new',
+ ),
+ $text);
+ break;
+ case '=':
+ $result[] = $text;
+ break;
+ }
+ }
+
+ $diff_view = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'prose-diff',
+ ),
+ $result);
+
+ $old_view = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'prose-diff',
+ ),
+ $this->oldText);
+
+ $new_view = phutil_tag(
+ 'div',
+ array(
+ 'class' => 'prose-diff',
+ ),
+ $this->newText);
+
+ return id(new PHUITabGroupView())
+ ->addTab(
+ id(new PHUITabView())
+ ->setKey('old')
+ ->setName(pht('Old'))
+ ->appendChild($old_view))
+ ->addTab(
+ id(new PHUITabView())
+ ->setKey('new')
+ ->setName(pht('New'))
+ ->appendChild($new_view))
+ ->addTab(
+ id(new PHUITabView())
+ ->setKey('diff')
+ ->setName(pht('Diff'))
+ ->appendChild($diff_view))
+ ->selectTab('diff');
+ }
+
+ private function buildDiff() {
+ $engine = new PhutilProseDifferenceEngine();
+ return $engine->getDiff($this->oldText, $this->newText);
+ }
+}
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionJSONDiffDetailView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionJSONDiffDetailView.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionJSONDiffDetailView.php
@@ -0,0 +1,17 @@
+<?php
+
+final class PhabricatorApplicationTransactionJSONDiffDetailView
+ extends PhabricatorApplicationTransactionDetailView {
+
+ public function setNew($new_object) {
+ $json = new PhutilJSON();
+ $this->setNewText($json->encodeFormatted($new_object));
+ return $this;
+ }
+
+ public function setOld($old_object) {
+ $json = new PhutilJSON();
+ $this->setOldText($json->encodeFormatted($old_object));
+ return $this;
+ }
+}
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php
--- a/src/applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php
@@ -1,174 +1,4 @@
<?php
final class PhabricatorApplicationTransactionTextDiffDetailView
- extends AphrontView {
-
- private $oldText;
- private $newText;
-
- public function setNewText($new_text) {
- $this->newText = $new_text;
- return $this;
- }
-
- public function setOldText($old_text) {
- $this->oldText = $old_text;
- return $this;
- }
-
- public function renderForMail() {
- $diff = $this->buildDiff();
-
- $viewer = $this->getViewer();
- $old_bright = $viewer->getCSSValue('old-bright');
- $new_bright = $viewer->getCSSValue('new-bright');
-
- $old_styles = array(
- 'padding: 0 2px;',
- 'color: #333333;',
- "background: {$old_bright};",
- );
- $old_styles = implode(' ', $old_styles);
-
- $new_styles = array(
- 'padding: 0 2px;',
- 'color: #333333;',
- "background: {$new_bright};",
- );
- $new_styles = implode(' ', $new_styles);
-
- $omit_styles = array(
- 'padding: 8px 0;',
- );
- $omit_styles = implode(' ', $omit_styles);
-
- $result = array();
- foreach ($diff->getSummaryParts() as $part) {
- $type = $part['type'];
- $text = $part['text'];
- switch ($type) {
- case '.':
- $result[] = phutil_tag(
- 'div',
- array(
- 'style' => $omit_styles,
- ),
- pht('...'));
- break;
- case '-':
- $result[] = phutil_tag(
- 'span',
- array(
- 'style' => $old_styles,
- ),
- $text);
- break;
- case '+':
- $result[] = phutil_tag(
- 'span',
- array(
- 'style' => $new_styles,
- ),
- $text);
- break;
- case '=':
- $result[] = $text;
- break;
- }
- }
-
- $styles = array(
- 'white-space: pre-wrap;',
- 'color: #74777D;',
- );
-
- // Beyond applying "pre-wrap", convert newlines to "<br />" explicitly
- // to improve behavior in clients like Airmail.
- $result = phutil_escape_html_newlines($result);
-
- return phutil_tag(
- 'div',
- array(
- 'style' => implode(' ', $styles),
- ),
- $result);
- }
-
- public function render() {
- $diff = $this->buildDiff();
-
- require_celerity_resource('differential-changeset-view-css');
-
- $result = array();
- foreach ($diff->getParts() as $part) {
- $type = $part['type'];
- $text = $part['text'];
- switch ($type) {
- case '-':
- $result[] = phutil_tag(
- 'span',
- array(
- 'class' => 'old',
- ),
- $text);
- break;
- case '+':
- $result[] = phutil_tag(
- 'span',
- array(
- 'class' => 'new',
- ),
- $text);
- break;
- case '=':
- $result[] = $text;
- break;
- }
- }
-
- $diff_view = phutil_tag(
- 'div',
- array(
- 'class' => 'prose-diff',
- ),
- $result);
-
- $old_view = phutil_tag(
- 'div',
- array(
- 'class' => 'prose-diff',
- ),
- $this->oldText);
-
- $new_view = phutil_tag(
- 'div',
- array(
- 'class' => 'prose-diff',
- ),
- $this->newText);
-
- return id(new PHUITabGroupView())
- ->addTab(
- id(new PHUITabView())
- ->setKey('old')
- ->setName(pht('Old'))
- ->appendChild($old_view))
- ->addTab(
- id(new PHUITabView())
- ->setKey('new')
- ->setName(pht('New'))
- ->appendChild($new_view))
- ->addTab(
- id(new PHUITabView())
- ->setKey('diff')
- ->setName(pht('Diff'))
- ->appendChild($diff_view))
- ->selectTab('diff');
- }
-
- private function buildDiff() {
- $engine = new PhutilProseDifferenceEngine();
- return $engine->getDiff($this->oldText, $this->newText);
- }
-
-}
+ extends PhabricatorApplicationTransactionDetailView {}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineCreateOrderTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineCreateOrderTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineCreateOrderTransaction.php
@@ -0,0 +1,26 @@
+<?php
+
+final class PhabricatorEditEngineCreateOrderTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.order.create';
+
+ public function generateOldValue($object) {
+ return (int)$object->getCreateOrder();
+ }
+
+ public function generateNewValue($object, $value) {
+ return (int)$value;
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setCreateOrder($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s changed the order in which this form appears in the "Create" menu.',
+ $this->renderAuthor());
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineDefaultCreateTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineDefaultCreateTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineDefaultCreateTransaction.php
@@ -0,0 +1,35 @@
+<?php
+
+final class PhabricatorEditEngineDefaultCreateTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.default.create';
+
+ public function generateOldValue($object) {
+ return (int)$object->getIsDefault();
+ }
+
+ public function generateNewValue($object, $value) {
+ return (int)$value;
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIsDefault($value);
+ }
+
+ public function getTitle() {
+ $old = $this->getOldValue();
+ $new = $this->getNewValue();
+
+ if ($new) {
+ return pht(
+ '%s added this form to the "Create" menu.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s removed this form from the "Create" menu.',
+ $this->renderAuthor());
+ }
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineDefaultTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineDefaultTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineDefaultTransaction.php
@@ -0,0 +1,71 @@
+<?php
+
+final class PhabricatorEditEngineDefaultTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.default';
+
+ public function generateOldValue($object) {
+ $field_key = $this->getMetadataValue('field.key');
+ return $object->getFieldDefault($field_key);
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $field_key = $this->getMetadataValue('field.key');
+ $object->setFieldDefault($field_key, $value);
+ }
+
+ public function getTitle() {
+ $key = $this->getMetadataValue('field.key');
+ $object = $this->getObject();
+ $engine = $object->getEngine();
+ $fields = $engine->getFieldsForConfig($object);
+ $field = idx($fields, $key);
+
+ if (!$field) {
+ return pht(
+ '%s changed the default values for field %s.',
+ $this->renderAuthor(),
+ $this->renderValue($key));
+ }
+
+ return pht(
+ '%s changed the default value for field %s.',
+ $this->renderAuthor(),
+ $this->renderValue($field->getLabel()));
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+ $old = $this->renderDefaultValueAsFallbackText($this->getOldValue());
+ $new = $this->renderDefaultValueAsFallbackText($this->getNewValue());
+
+ return id(new PhabricatorApplicationTransactionTextDiffDetailView())
+ ->setViewer($viewer)
+ ->setOldText($old)
+ ->setNewText($new);
+ }
+
+ private function renderDefaultValueAsFallbackText($default_value) {
+ // See T13319. When rendering an "alice changed the default value for
+ // field X." story on custom forms, we may fall back to a generic
+ // rendering. Try to present the value change in a comprehensible way
+ // even if it isn't especially human readable (for example, it may
+ // contain PHIDs or other internal identifiers).
+
+ if (is_scalar($default_value) || is_null($default_value)) {
+ return $default_value;
+ }
+
+ if (phutil_is_natural_list($default_value)) {
+ return id(new PhutilJSON())->encodeAsList($default_value);
+ }
+
+ return id(new PhutilJSON())->encodeAsObject($default_value);
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineDisableTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineDisableTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineDisableTransaction.php
@@ -0,0 +1,51 @@
+<?php
+
+final class PhabricatorEditEngineDisableTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.disable';
+
+ public function generateOldValue($object) {
+ return (int)$object->getIsDisabled();
+ }
+
+ public function generateNewValue($object, $value) {
+ return (int)$value;
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIsDisabled($value);
+ }
+
+ public function getTitle() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return pht(
+ '%s disabled this form.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s enabled this form.',
+ $this->renderAuthor());
+ }
+ }
+
+ public function getColor() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return 'indigo';
+ } else {
+ return 'green';
+ }
+ }
+
+ public function getIcon() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return 'fa-ban';
+ } else {
+ return 'fa-check';
+ }
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineEditOrderTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineEditOrderTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineEditOrderTransaction.php
@@ -0,0 +1,26 @@
+<?php
+
+final class PhabricatorEditEngineEditOrderTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.order.edit';
+
+ public function generateOldValue($object) {
+ return (int)$object->getEditOrder();
+ }
+
+ public function generateNewValue($object, $value) {
+ return (int)$value;
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setEditOrder($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s changed the order in which this form appears in the "Edit" menu.',
+ $this->renderAuthor());
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineIsEditTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineIsEditTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineIsEditTransaction.php
@@ -0,0 +1,34 @@
+<?php
+
+final class PhabricatorEditEngineIsEditTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.isedit';
+
+ public function generateOldValue($object) {
+ return (int)$object->getIsEdit();
+ }
+
+ public function generateNewValue($object, $value) {
+ return (int)$value;
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIsEdit($value);
+ }
+
+ public function getTitle() {
+ $new = $this->getNewValue();
+
+ if ($new) {
+ return pht(
+ '%s marked this form as an edit form.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s unmarked this form as an edit form.',
+ $this->renderAuthor());
+ }
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineLocksTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineLocksTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineLocksTransaction.php
@@ -0,0 +1,35 @@
+<?php
+
+final class PhabricatorEditEngineLocksTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.locks';
+
+ public function generateOldValue($object) {
+ return $object->getFieldLocks();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setFieldLocks($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s changed locked and hidden fields.',
+ $this->renderAuthor());
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+
+ return id(new PhabricatorApplicationTransactionJSONDiffDetailView())
+ ->setViewer($viewer)
+ ->setOld($this->getOldValue())
+ ->setNew($this->getNewValue());
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineNameTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineNameTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineNameTransaction.php
@@ -0,0 +1,54 @@
+<?php
+
+final class PhabricatorEditEngineNameTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.name';
+
+ public function generateOldValue($object) {
+ return $object->getName();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setName($value);
+ }
+
+ public function getTitle() {
+ if (strlen($this->getOldValue())) {
+ return pht(
+ '%s renamed this form from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ } else {
+ return pht(
+ '%s named this form %s.',
+ $this->renderAuthor(),
+ $this->renderNewValue());
+ }
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ foreach ($xactions as $xaction) {
+ $new = $xaction->getNewValue();
+ if (!strlen($new)) {
+ $errors[] = $this->newRequiredError(
+ pht('Form name is required.'),
+ $xaction);
+ continue;
+ }
+ }
+
+ if (!$errors) {
+ if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
+ $errors[] = $this->newRequiredError(
+ pht('Forms must have a name.'));
+ }
+ }
+
+ return $errors;
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineOrderTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineOrderTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineOrderTransaction.php
@@ -0,0 +1,35 @@
+<?php
+
+final class PhabricatorEditEngineOrderTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.order';
+
+ public function generateOldValue($object) {
+ return $object->getFieldOrder();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setFieldOrder($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s reordered the fields in this form.',
+ $this->renderAuthor());
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+
+ return id(new PhabricatorApplicationTransactionJSONDiffDetailView())
+ ->setViewer($viewer)
+ ->setOld($this->getOldValue())
+ ->setNew($this->getNewValue());
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEnginePreambleTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEnginePreambleTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEnginePreambleTransaction.php
@@ -0,0 +1,45 @@
+<?php
+
+final class PhabricatorEditEnginePreambleTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.preamble';
+
+ public function generateOldValue($object) {
+ return $object->getPreamble();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setPreamble($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s updated the preamble for this form.',
+ $this->renderAuthor());
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+
+ return id(new PhabricatorApplicationTransactionTextDiffDetailView())
+ ->setViewer($viewer)
+ ->setOldText($this->getOldValue())
+ ->setNewText($this->getNewValue());
+ }
+
+ public function newRemarkupChanges() {
+ $changes = array();
+
+ $changes[] = $this->newRemarkupChange()
+ ->setOldValue($this->getOldValue())
+ ->setNewValue($this->getNewValue());
+
+ return $changes;
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineSubtypeTransaction.php b/src/applications/transactions/xaction/PhabricatorEditEngineSubtypeTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineSubtypeTransaction.php
@@ -0,0 +1,48 @@
+<?php
+
+final class PhabricatorEditEngineSubtypeTransaction
+ extends PhabricatorEditEngineTransactionType {
+
+ const TRANSACTIONTYPE = 'editengine.config.subtype';
+
+ public function generateOldValue($object) {
+ return $object->getSubtype();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setSubtype($value);
+ }
+
+ public function getTitle() {
+ $old = $this->getOldValue();
+ $new = $this->getNewValue();
+
+ return pht(
+ '%s changed the subtype of this form from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $map = $object->getEngine()
+ ->setViewer($this->getActor())
+ ->newSubtypeMap();
+
+ $errors = array();
+ foreach ($xactions as $xaction) {
+ $new = $xaction->getNewValue();
+
+ if ($map->isValidSubtype($new)) {
+ continue;
+ }
+
+ $errors[] = $this->newInvalidError(
+ pht('Subtype "%s" is not a valid subtype.', $new),
+ $xaction);
+ }
+
+ return $errors;
+ }
+
+}
diff --git a/src/applications/transactions/xaction/PhabricatorEditEngineTransactionType.php b/src/applications/transactions/xaction/PhabricatorEditEngineTransactionType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/xaction/PhabricatorEditEngineTransactionType.php
@@ -0,0 +1,4 @@
+<?php
+
+abstract class PhabricatorEditEngineTransactionType
+ extends PhabricatorModularTransactionType {}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 8, 7:16 AM (1 w, 3 d ago)
Storage Engine
amazon-s3
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
phabricator/secure/5h/wc/jla7m3lbkgaymyzn
Default Alt Text
D20595.diff (58 KB)
Attached To
Mode
D20595: Modularize PhabricatorEditEngineConfigurationTransaction
Attached
Detach File
Event Timeline
Log In to Comment