@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Convert Nuance sources to modular transactions

Summary: Ref T12738. Update sources to modular transactions.

Test Plan: Created and edited a source.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12738

Differential Revision: https://secure.phabricator.com/D17994

+96 -165
+4
src/__phutil_library_map__.php
··· 1666 1666 'NuanceSourceActionController' => 'applications/nuance/controller/NuanceSourceActionController.php', 1667 1667 'NuanceSourceController' => 'applications/nuance/controller/NuanceSourceController.php', 1668 1668 'NuanceSourceDefaultEditCapability' => 'applications/nuance/capability/NuanceSourceDefaultEditCapability.php', 1669 + 'NuanceSourceDefaultQueueTransaction' => 'applications/nuance/xaction/NuanceSourceDefaultQueueTransaction.php', 1669 1670 'NuanceSourceDefaultViewCapability' => 'applications/nuance/capability/NuanceSourceDefaultViewCapability.php', 1670 1671 'NuanceSourceDefinition' => 'applications/nuance/source/NuanceSourceDefinition.php', 1671 1672 'NuanceSourceDefinitionTestCase' => 'applications/nuance/source/__tests__/NuanceSourceDefinitionTestCase.php', ··· 1675 1676 'NuanceSourceListController' => 'applications/nuance/controller/NuanceSourceListController.php', 1676 1677 'NuanceSourceManageCapability' => 'applications/nuance/capability/NuanceSourceManageCapability.php', 1677 1678 'NuanceSourceNameNgrams' => 'applications/nuance/storage/NuanceSourceNameNgrams.php', 1679 + 'NuanceSourceNameTransaction' => 'applications/nuance/xaction/NuanceSourceNameTransaction.php', 1678 1680 'NuanceSourcePHIDType' => 'applications/nuance/phid/NuanceSourcePHIDType.php', 1679 1681 'NuanceSourceQuery' => 'applications/nuance/query/NuanceSourceQuery.php', 1680 1682 'NuanceSourceSearchEngine' => 'applications/nuance/query/NuanceSourceSearchEngine.php', ··· 6785 6787 'NuanceSourceActionController' => 'NuanceController', 6786 6788 'NuanceSourceController' => 'NuanceController', 6787 6789 'NuanceSourceDefaultEditCapability' => 'PhabricatorPolicyCapability', 6790 + 'NuanceSourceDefaultQueueTransaction' => 'NuanceSourceTransactionType', 6788 6791 'NuanceSourceDefaultViewCapability' => 'PhabricatorPolicyCapability', 6789 6792 'NuanceSourceDefinition' => 'Phobject', 6790 6793 'NuanceSourceDefinitionTestCase' => 'PhabricatorTestCase', ··· 6794 6797 'NuanceSourceListController' => 'NuanceSourceController', 6795 6798 'NuanceSourceManageCapability' => 'PhabricatorPolicyCapability', 6796 6799 'NuanceSourceNameNgrams' => 'PhabricatorSearchNgrams', 6800 + 'NuanceSourceNameTransaction' => 'NuanceSourceTransactionType', 6797 6801 'NuanceSourcePHIDType' => 'PhabricatorPHIDType', 6798 6802 'NuanceSourceQuery' => 'NuanceQuery', 6799 6803 'NuanceSourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
+3 -2
src/applications/nuance/editor/NuanceSourceEditEngine.php
··· 96 96 ->setKey('name') 97 97 ->setLabel(pht('Name')) 98 98 ->setDescription(pht('Name of the source.')) 99 - ->setTransactionType(NuanceSourceTransaction::TYPE_NAME) 99 + ->setTransactionType(NuanceSourceNameTransaction::TRANSACTIONTYPE) 100 100 ->setIsRequired(true) 101 101 ->setValue($object->getName()), 102 102 id(new PhabricatorDatasourceEditField()) 103 103 ->setKey('defaultQueue') 104 104 ->setLabel(pht('Default Queue')) 105 105 ->setDescription(pht('Default queue.')) 106 - ->setTransactionType(NuanceSourceTransaction::TYPE_DEFAULT_QUEUE) 106 + ->setTransactionType( 107 + NuanceSourceDefaultQueueTransaction::TRANSACTIONTYPE) 107 108 ->setDatasource(new NuanceQueueDatasource()) 108 109 ->setSingleValue($object->getDefaultQueuePHID()), 109 110 );
-101
src/applications/nuance/editor/NuanceSourceEditor.php
··· 18 18 public function getTransactionTypes() { 19 19 $types = parent::getTransactionTypes(); 20 20 21 - $types[] = NuanceSourceTransaction::TYPE_NAME; 22 - $types[] = NuanceSourceTransaction::TYPE_DEFAULT_QUEUE; 23 - 24 - $types[] = PhabricatorTransactions::TYPE_EDGE; 25 - $types[] = PhabricatorTransactions::TYPE_COMMENT; 26 21 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 27 22 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 28 23 29 24 return $types; 30 - } 31 - 32 - protected function getCustomTransactionOldValue( 33 - PhabricatorLiskDAO $object, 34 - PhabricatorApplicationTransaction $xaction) { 35 - 36 - switch ($xaction->getTransactionType()) { 37 - case NuanceSourceTransaction::TYPE_NAME: 38 - return $object->getName(); 39 - case NuanceSourceTransaction::TYPE_DEFAULT_QUEUE: 40 - return $object->getDefaultQueuePHID(); 41 - } 42 - 43 - return parent::getCustomTransactionOldValue($object, $xaction); 44 - } 45 - 46 - protected function getCustomTransactionNewValue( 47 - PhabricatorLiskDAO $object, 48 - PhabricatorApplicationTransaction $xaction) { 49 - 50 - switch ($xaction->getTransactionType()) { 51 - case NuanceSourceTransaction::TYPE_NAME: 52 - case NuanceSourceTransaction::TYPE_DEFAULT_QUEUE: 53 - return $xaction->getNewValue(); 54 - } 55 - 56 - return parent::getCustomTransactionNewValue($object, $xaction); 57 - } 58 - 59 - protected function applyCustomInternalTransaction( 60 - PhabricatorLiskDAO $object, 61 - PhabricatorApplicationTransaction $xaction) { 62 - 63 - switch ($xaction->getTransactionType()) { 64 - case NuanceSourceTransaction::TYPE_NAME: 65 - $object->setName($xaction->getNewValue()); 66 - break; 67 - case NuanceSourceTransaction::TYPE_DEFAULT_QUEUE: 68 - $object->setDefaultQueuePHID($xaction->getNewValue()); 69 - break; 70 - } 71 - } 72 - 73 - protected function applyCustomExternalTransaction( 74 - PhabricatorLiskDAO $object, 75 - PhabricatorApplicationTransaction $xaction) { 76 - 77 - switch ($xaction->getTransactionType()) { 78 - case NuanceSourceTransaction::TYPE_NAME: 79 - case NuanceSourceTransaction::TYPE_DEFAULT_QUEUE: 80 - return; 81 - } 82 - 83 - return parent::applyCustomExternalTransaction($object, $xaction); 84 - } 85 - 86 - protected function validateTransaction( 87 - PhabricatorLiskDAO $object, 88 - $type, 89 - array $xactions) { 90 - 91 - $errors = parent::validateTransaction($object, $type, $xactions); 92 - 93 - switch ($type) { 94 - case NuanceSourceTransaction::TYPE_NAME: 95 - $missing = $this->validateIsEmptyTextField( 96 - $object->getName(), 97 - $xactions); 98 - 99 - if ($missing) { 100 - $error = new PhabricatorApplicationTransactionValidationError( 101 - $type, 102 - pht('Required'), 103 - pht('Source name is required.'), 104 - nonempty(last($xactions), null)); 105 - 106 - $error->setIsMissingFieldError(true); 107 - $errors[] = $error; 108 - } 109 - break; 110 - case NuanceSourceTransaction::TYPE_DEFAULT_QUEUE: 111 - foreach ($xactions as $xaction) { 112 - if (!$xaction->getNewValue()) { 113 - $error = new PhabricatorApplicationTransactionValidationError( 114 - $type, 115 - pht('Required'), 116 - pht('Sources must have a default queue.'), 117 - $xaction); 118 - $error->setIsMissingFieldError(true); 119 - $errors[] = $error; 120 - } 121 - } 122 - break; 123 - } 124 - 125 - return $errors; 126 25 } 127 26 128 27 }
-62
src/applications/nuance/storage/NuanceSourceTransaction.php
··· 3 3 final class NuanceSourceTransaction 4 4 extends NuanceTransaction { 5 5 6 - const TYPE_NAME = 'source.name'; 7 - const TYPE_DEFAULT_QUEUE = 'source.queue.default'; 8 - 9 6 public function getApplicationTransactionType() { 10 7 return NuanceSourcePHIDType::TYPECONST; 11 8 } ··· 16 13 17 14 public function getBaseTransactionClass() { 18 15 return 'NuanceSourceTransactionType'; 19 - } 20 - 21 - public function shouldHide() { 22 - $old = $this->getOldValue(); 23 - $new = $this->getNewValue(); 24 - $type = $this->getTransactionType(); 25 - 26 - switch ($type) { 27 - case self::TYPE_DEFAULT_QUEUE: 28 - return !$old; 29 - case self::TYPE_NAME: 30 - return ($old === null); 31 - } 32 - 33 - return parent::shouldHide(); 34 - } 35 - 36 - public function getRequiredHandlePHIDs() { 37 - $old = $this->getOldValue(); 38 - $new = $this->getNewValue(); 39 - $type = $this->getTransactionType(); 40 - 41 - $phids = parent::getRequiredHandlePHIDs(); 42 - switch ($type) { 43 - case self::TYPE_DEFAULT_QUEUE: 44 - if ($old) { 45 - $phids[] = $old; 46 - } 47 - if ($new) { 48 - $phids[] = $new; 49 - } 50 - break; 51 - } 52 - 53 - return $phids; 54 - } 55 - 56 - public function getTitle() { 57 - $old = $this->getOldValue(); 58 - $new = $this->getNewValue(); 59 - $type = $this->getTransactionType(); 60 - $author_phid = $this->getAuthorPHID(); 61 - 62 - switch ($type) { 63 - case self::TYPE_DEFAULT_QUEUE: 64 - return pht( 65 - '%s changed the default queue from %s to %s.', 66 - $this->renderHandleLink($author_phid), 67 - $this->renderHandleLink($old), 68 - $this->renderHandleLink($new)); 69 - case self::TYPE_NAME: 70 - return pht( 71 - '%s renamed this source from "%s" to "%s".', 72 - $this->renderHandleLink($author_phid), 73 - $old, 74 - $new); 75 - } 76 - 77 - return parent::getTitle(); 78 16 } 79 17 80 18 }
+42
src/applications/nuance/xaction/NuanceSourceDefaultQueueTransaction.php
··· 1 + <?php 2 + 3 + final class NuanceSourceDefaultQueueTransaction 4 + extends NuanceSourceTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'source.queue.default'; 7 + 8 + public function generateOldValue($object) { 9 + return $object->getDefaultQueuePHID(); 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $object->setDefaultQueuePHID($value); 14 + } 15 + 16 + public function getTitle() { 17 + return pht( 18 + '%s changed the default queue for this source from %s to %s.', 19 + $this->renderAuthor(), 20 + $this->renderOldHandle(), 21 + $this->renderNewHandle()); 22 + } 23 + 24 + public function validateTransactions($object, array $xactions) { 25 + $errors = array(); 26 + 27 + if (!$object->getDefaultQueuePHID() && !$xactions) { 28 + $errors[] = $this->newRequiredError( 29 + pht('Sources must have a default queue.')); 30 + } 31 + 32 + foreach ($xactions as $xaction) { 33 + if (!$xaction->getNewValue()) { 34 + $errors[] = $this->newRequiredError( 35 + pht('Sources must have a default queue.')); 36 + } 37 + } 38 + 39 + return $errors; 40 + } 41 + 42 + }
+47
src/applications/nuance/xaction/NuanceSourceNameTransaction.php
··· 1 + <?php 2 + 3 + final class NuanceSourceNameTransaction 4 + extends NuanceSourceTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'source.name'; 7 + 8 + public function generateOldValue($object) { 9 + return $object->getName(); 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $object->setName($value); 14 + } 15 + 16 + public function getTitle() { 17 + return pht( 18 + '%s renamed this source from %s to %s.', 19 + $this->renderAuthor(), 20 + $this->renderOldValue(), 21 + $this->renderNewValue()); 22 + } 23 + 24 + public function validateTransactions($object, array $xactions) { 25 + $errors = array(); 26 + 27 + if ($this->isEmptyTextTransaction($object->getName(), $xactions)) { 28 + $errors[] = $this->newRequiredError( 29 + pht('Sources must have a name.')); 30 + } 31 + 32 + $max_length = $object->getColumnMaximumByteLength('name'); 33 + foreach ($xactions as $xaction) { 34 + $new_value = $xaction->getNewValue(); 35 + $new_length = strlen($new_value); 36 + if ($new_length > $max_length) { 37 + $errors[] = $this->newInvalidError( 38 + pht( 39 + 'Source names must not be longer than %s character(s).', 40 + new PhutilNumber($max_length))); 41 + } 42 + } 43 + 44 + return $errors; 45 + } 46 + 47 + }