@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.

Modularize Almanac Network transactions

Summary: Depends on D19321. Ref T13120. Ref T12414. Move transactions for Almanac Networks (just "name") to ModularTransactions.

Test Plan:
- Created a new network.
- Renamed a network.
- Tried to create a network with no name (got an error).
- Grepped for `AlmanacNetworkTransaction::`.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13120, T12414

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

+65 -105
+5 -1
src/__phutil_library_map__.php
··· 93 93 'AlmanacNetworkEditor' => 'applications/almanac/editor/AlmanacNetworkEditor.php', 94 94 'AlmanacNetworkListController' => 'applications/almanac/controller/AlmanacNetworkListController.php', 95 95 'AlmanacNetworkNameNgrams' => 'applications/almanac/storage/AlmanacNetworkNameNgrams.php', 96 + 'AlmanacNetworkNameTransaction' => 'applications/almanac/xaction/AlmanacNetworkNameTransaction.php', 96 97 'AlmanacNetworkPHIDType' => 'applications/almanac/phid/AlmanacNetworkPHIDType.php', 97 98 'AlmanacNetworkQuery' => 'applications/almanac/query/AlmanacNetworkQuery.php', 98 99 'AlmanacNetworkSearchEngine' => 'applications/almanac/query/AlmanacNetworkSearchEngine.php', 99 100 'AlmanacNetworkTransaction' => 'applications/almanac/storage/AlmanacNetworkTransaction.php', 100 101 'AlmanacNetworkTransactionQuery' => 'applications/almanac/query/AlmanacNetworkTransactionQuery.php', 102 + 'AlmanacNetworkTransactionType' => 'applications/almanac/xaction/AlmanacNetworkTransactionType.php', 101 103 'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php', 102 104 'AlmanacPropertiesDestructionEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php', 103 105 'AlmanacPropertiesSearchEngineAttachment' => 'applications/almanac/engineextension/AlmanacPropertiesSearchEngineAttachment.php', ··· 5292 5294 'AlmanacNetworkEditor' => 'PhabricatorApplicationTransactionEditor', 5293 5295 'AlmanacNetworkListController' => 'AlmanacNetworkController', 5294 5296 'AlmanacNetworkNameNgrams' => 'PhabricatorSearchNgrams', 5297 + 'AlmanacNetworkNameTransaction' => 'AlmanacNetworkTransactionType', 5295 5298 'AlmanacNetworkPHIDType' => 'PhabricatorPHIDType', 5296 5299 'AlmanacNetworkQuery' => 'AlmanacQuery', 5297 5300 'AlmanacNetworkSearchEngine' => 'PhabricatorApplicationSearchEngine', 5298 - 'AlmanacNetworkTransaction' => 'PhabricatorApplicationTransaction', 5301 + 'AlmanacNetworkTransaction' => 'PhabricatorModularTransaction', 5299 5302 'AlmanacNetworkTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 5303 + 'AlmanacNetworkTransactionType' => 'AlmanacTransactionType', 5300 5304 'AlmanacNetworkViewController' => 'AlmanacNetworkController', 5301 5305 'AlmanacPropertiesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', 5302 5306 'AlmanacPropertiesSearchEngineAttachment' => 'AlmanacSearchEngineAttachment',
+1 -1
src/applications/almanac/editor/AlmanacNetworkEditEngine.php
··· 81 81 ->setKey('name') 82 82 ->setLabel(pht('Name')) 83 83 ->setDescription(pht('Name of the network.')) 84 - ->setTransactionType(AlmanacNetworkTransaction::TYPE_NAME) 84 + ->setTransactionType(AlmanacNetworkNameTransaction::TRANSACTIONTYPE) 85 85 ->setIsRequired(true) 86 86 ->setValue($object->getName()), 87 87 );
+8 -80
src/applications/almanac/editor/AlmanacNetworkEditor.php
··· 15 15 return true; 16 16 } 17 17 18 + public function getCreateObjectTitle($author, $object) { 19 + return pht('%s created this network.', $author); 20 + } 21 + 22 + public function getCreateObjectTitleForFeed($author, $object) { 23 + return pht('%s created %s.', $author, $object); 24 + } 25 + 18 26 public function getTransactionTypes() { 19 27 $types = parent::getTransactionTypes(); 20 28 21 - $types[] = AlmanacNetworkTransaction::TYPE_NAME; 22 29 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 23 30 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 24 31 25 32 return $types; 26 33 } 27 - 28 - protected function getCustomTransactionOldValue( 29 - PhabricatorLiskDAO $object, 30 - PhabricatorApplicationTransaction $xaction) { 31 - switch ($xaction->getTransactionType()) { 32 - case AlmanacNetworkTransaction::TYPE_NAME: 33 - return $object->getName(); 34 - } 35 - 36 - return parent::getCustomTransactionOldValue($object, $xaction); 37 - } 38 - 39 - protected function getCustomTransactionNewValue( 40 - PhabricatorLiskDAO $object, 41 - PhabricatorApplicationTransaction $xaction) { 42 - 43 - switch ($xaction->getTransactionType()) { 44 - case AlmanacNetworkTransaction::TYPE_NAME: 45 - return $xaction->getNewValue(); 46 - } 47 - 48 - return parent::getCustomTransactionNewValue($object, $xaction); 49 - } 50 - 51 - protected function applyCustomInternalTransaction( 52 - PhabricatorLiskDAO $object, 53 - PhabricatorApplicationTransaction $xaction) { 54 - 55 - switch ($xaction->getTransactionType()) { 56 - case AlmanacNetworkTransaction::TYPE_NAME: 57 - $object->setName($xaction->getNewValue()); 58 - return; 59 - } 60 - 61 - return parent::applyCustomInternalTransaction($object, $xaction); 62 - } 63 - 64 - protected function applyCustomExternalTransaction( 65 - PhabricatorLiskDAO $object, 66 - PhabricatorApplicationTransaction $xaction) { 67 - 68 - switch ($xaction->getTransactionType()) { 69 - case AlmanacNetworkTransaction::TYPE_NAME: 70 - return; 71 - } 72 - 73 - return parent::applyCustomExternalTransaction($object, $xaction); 74 - } 75 - 76 - protected function validateTransaction( 77 - PhabricatorLiskDAO $object, 78 - $type, 79 - array $xactions) { 80 - 81 - $errors = parent::validateTransaction($object, $type, $xactions); 82 - 83 - switch ($type) { 84 - case AlmanacNetworkTransaction::TYPE_NAME: 85 - $missing = $this->validateIsEmptyTextField( 86 - $object->getName(), 87 - $xactions); 88 - 89 - if ($missing) { 90 - $error = new PhabricatorApplicationTransactionValidationError( 91 - $type, 92 - pht('Required'), 93 - pht('Network name is required.'), 94 - nonempty(last($xactions), null)); 95 - 96 - $error->setIsMissingFieldError(true); 97 - $errors[] = $error; 98 - } 99 - break; 100 - } 101 - 102 - return $errors; 103 - } 104 - 105 - 106 34 107 35 }
+3 -23
src/applications/almanac/storage/AlmanacNetworkTransaction.php
··· 1 1 <?php 2 2 3 3 final class AlmanacNetworkTransaction 4 - extends PhabricatorApplicationTransaction { 5 - 6 - const TYPE_NAME = 'almanac:network:name'; 4 + extends PhabricatorModularTransaction { 7 5 8 6 public function getApplicationName() { 9 7 return 'almanac'; ··· 17 15 return null; 18 16 } 19 17 20 - public function getTitle() { 21 - $author_phid = $this->getAuthorPHID(); 22 - 23 - $old = $this->getOldValue(); 24 - $new = $this->getNewValue(); 25 - 26 - switch ($this->getTransactionType()) { 27 - case PhabricatorTransactions::TYPE_CREATE: 28 - return pht( 29 - '%s created this network.', 30 - $this->renderHandleLink($author_phid)); 31 - case self::TYPE_NAME: 32 - return pht( 33 - '%s renamed this network from "%s" to "%s".', 34 - $this->renderHandleLink($author_phid), 35 - $old, 36 - $new); 37 - } 38 - 39 - return parent::getTitle(); 18 + public function getBaseTransactionClass() { 19 + return 'AlmanacNetworkTransactionType'; 40 20 } 41 21 42 22 }
+44
src/applications/almanac/xaction/AlmanacNetworkNameTransaction.php
··· 1 + <?php 2 + 3 + final class AlmanacNetworkNameTransaction 4 + extends AlmanacNetworkTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'almanac:network: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 network from %s to %s.', 19 + $this->renderAuthor(), 20 + $this->renderOldValue(), 21 + $this->renderNewValue()); 22 + } 23 + 24 + public function getTitleForFeed() { 25 + return pht( 26 + '%s renamed %s from %s to %s.', 27 + $this->renderAuthor(), 28 + $this->renderObject(), 29 + $this->renderOldValue(), 30 + $this->renderNewValue()); 31 + } 32 + 33 + public function validateTransactions($object, array $xactions) { 34 + $errors = array(); 35 + 36 + if ($this->isEmptyTextTransaction($object->getName(), $xactions)) { 37 + $errors[] = $this->newRequiredError( 38 + pht('Network name is required.')); 39 + } 40 + 41 + return $errors; 42 + } 43 + 44 + }
+4
src/applications/almanac/xaction/AlmanacNetworkTransactionType.php
··· 1 + <?php 2 + 3 + abstract class AlmanacNetworkTransactionType 4 + extends AlmanacTransactionType {}