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

Add Summary and Repository EditEngine fields + Modular Transactions to Differential

Summary: Ref T11114. These are unambiguous and always-enabled.

Test Plan: {F2117777}

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11114

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

+175
+4
src/__phutil_library_map__.php
··· 545 545 'DifferentialRevisionRelationshipSource' => 'applications/search/relationship/DifferentialRevisionRelationshipSource.php', 546 546 'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php', 547 547 'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php', 548 + 'DifferentialRevisionRepositoryTransaction' => 'applications/differential/xaction/DifferentialRevisionRepositoryTransaction.php', 548 549 'DifferentialRevisionRequiredActionResultBucket' => 'applications/differential/query/DifferentialRevisionRequiredActionResultBucket.php', 549 550 'DifferentialRevisionResultBucket' => 'applications/differential/query/DifferentialRevisionResultBucket.php', 550 551 'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php', ··· 552 553 'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php', 553 554 'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php', 554 555 'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php', 556 + 'DifferentialRevisionSummaryTransaction' => 'applications/differential/xaction/DifferentialRevisionSummaryTransaction.php', 555 557 'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php', 556 558 'DifferentialRevisionTitleTransaction' => 'applications/differential/xaction/DifferentialRevisionTitleTransaction.php', 557 559 'DifferentialRevisionTransactionType' => 'applications/differential/xaction/DifferentialRevisionTransactionType.php', ··· 5195 5197 'DifferentialRevisionRelationshipSource' => 'PhabricatorObjectRelationshipSource', 5196 5198 'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField', 5197 5199 'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField', 5200 + 'DifferentialRevisionRepositoryTransaction' => 'DifferentialRevisionTransactionType', 5198 5201 'DifferentialRevisionRequiredActionResultBucket' => 'DifferentialRevisionResultBucket', 5199 5202 'DifferentialRevisionResultBucket' => 'PhabricatorSearchResultBucket', 5200 5203 'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField', ··· 5202 5205 'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine', 5203 5206 'DifferentialRevisionStatus' => 'Phobject', 5204 5207 'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField', 5208 + 'DifferentialRevisionSummaryTransaction' => 'DifferentialRevisionTransactionType', 5205 5209 'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField', 5206 5210 'DifferentialRevisionTitleTransaction' => 'DifferentialRevisionTransactionType', 5207 5211 'DifferentialRevisionTransactionType' => 'PhabricatorModularTransactionType',
+20
src/applications/differential/editor/DifferentialRevisionEditEngine.php
··· 64 64 id(new PhabricatorTextEditField()) 65 65 ->setKey('title') 66 66 ->setLabel(pht('Title')) 67 + ->setIsRequired(true) 67 68 ->setTransactionType( 68 69 DifferentialRevisionTitleTransaction::TRANSACTIONTYPE) 69 70 ->setDescription(pht('The title of the revision.')) 70 71 ->setConduitDescription(pht('Retitle the revision.')) 71 72 ->setConduitTypeDescription(pht('New revision title.')) 72 73 ->setValue($object->getTitle()), 74 + id(new PhabricatorRemarkupEditField()) 75 + ->setKey('summary') 76 + ->setLabel(pht('Summary')) 77 + ->setTransactionType( 78 + DifferentialRevisionSummaryTransaction::TRANSACTIONTYPE) 79 + ->setDescription(pht('The summary of the revision.')) 80 + ->setConduitDescription(pht('Change the revision summary.')) 81 + ->setConduitTypeDescription(pht('New revision summary.')) 82 + ->setValue($object->getSummary()), 83 + id(new PhabricatorDatasourceEditField()) 84 + ->setKey('repositoryPHID') 85 + ->setLabel(pht('Repository')) 86 + ->setDatasource(new DiffusionRepositoryDatasource()) 87 + ->setTransactionType( 88 + DifferentialRevisionRepositoryTransaction::TRANSACTIONTYPE) 89 + ->setDescription(pht('The repository the revision belongs to.')) 90 + ->setConduitDescription(pht('Change the repository for this revision.')) 91 + ->setConduitTypeDescription(pht('New repository.')) 92 + ->setSingleValue($object->getRepositoryPHID()), 73 93 ); 74 94 } 75 95
+95
src/applications/differential/xaction/DifferentialRevisionRepositoryTransaction.php
··· 1 + <?php 2 + 3 + final class DifferentialRevisionRepositoryTransaction 4 + extends DifferentialRevisionTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'differential.revision.repository'; 7 + 8 + public function generateOldValue($object) { 9 + return $object->getRepositoryPHID(); 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $object->setRepositoryPHID($value); 14 + } 15 + 16 + public function getTitle() { 17 + $old = $this->getOldValue(); 18 + $new = $this->getNewValue(); 19 + if ($old && $new) { 20 + return pht( 21 + '%s changed the repository for this revision from %s to %s.', 22 + $this->renderAuthor(), 23 + $this->renderHandle($old), 24 + $this->renderHandle($new)); 25 + } else if ($new) { 26 + return pht( 27 + '%s set the repository for this revision to %s.', 28 + $this->renderAuthor(), 29 + $this->renderHandle($new)); 30 + } else { 31 + return pht( 32 + '%s removed %s as the repository for this revision.', 33 + $this->renderAuthor(), 34 + $this->renderHandle($old)); 35 + } 36 + } 37 + 38 + public function getTitleForFeed() { 39 + $old = $this->getOldValue(); 40 + $new = $this->getNewValue(); 41 + if ($old && $new) { 42 + return pht( 43 + '%s changed the repository for %s from %s to %s.', 44 + $this->renderAuthor(), 45 + $this->renderObject(), 46 + $this->renderHandle($old), 47 + $this->renderHandle($new)); 48 + } else if ($new) { 49 + return pht( 50 + '%s set the repository for %s to %s.', 51 + $this->renderAuthor(), 52 + $this->renderObject(), 53 + $this->renderHandle($new)); 54 + } else { 55 + return pht( 56 + '%s removed %s as the repository for %s.', 57 + $this->renderAuthor(), 58 + $this->renderHandle($old), 59 + $this->renderObject()); 60 + } 61 + } 62 + 63 + public function validateTransactions($object, array $xactions) { 64 + $actor = $this->getActor(); 65 + 66 + $errors = array(); 67 + 68 + $old_value = $object->getRepositoryPHID(); 69 + foreach ($xactions as $xaction) { 70 + $new_value = $xaction->getNewValue(); 71 + if (!$new_value) { 72 + continue; 73 + } 74 + 75 + if ($new_value == $old_value) { 76 + continue; 77 + } 78 + 79 + $repository = id(new PhabricatorRepositoryQuery()) 80 + ->setViewer($actor) 81 + ->withPHIDs(array($new_value)) 82 + ->executeOne(); 83 + if (!$repository) { 84 + $errors[] = $this->newInvalidError( 85 + pht( 86 + 'Repository "%s" is not a valid repository, or you do not have '. 87 + 'permission to view it.'), 88 + $xaction); 89 + } 90 + } 91 + 92 + return $errors; 93 + } 94 + 95 + }
+56
src/applications/differential/xaction/DifferentialRevisionSummaryTransaction.php
··· 1 + <?php 2 + 3 + final class DifferentialRevisionSummaryTransaction 4 + extends DifferentialRevisionTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'differential.revision.summary'; 7 + 8 + public function generateOldValue($object) { 9 + return $object->getSummary(); 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $object->setSummary($value); 14 + } 15 + 16 + public function getTitle() { 17 + return pht( 18 + '%s edited the summary of this revision.', 19 + $this->renderAuthor()); 20 + } 21 + 22 + public function getTitleForFeed() { 23 + return pht( 24 + '%s updated the summary of %s.', 25 + $this->renderAuthor(), 26 + $this->renderObject()); 27 + } 28 + 29 + public function hasChangeDetailView() { 30 + return true; 31 + } 32 + 33 + public function getMailDiffSectionHeader() { 34 + return pht('CHANGES TO REVISION SUMMARY'); 35 + } 36 + 37 + public function newChangeDetailView() { 38 + $viewer = $this->getViewer(); 39 + 40 + return id(new PhabricatorApplicationTransactionTextDiffDetailView()) 41 + ->setViewer($viewer) 42 + ->setOldText($this->getOldValue()) 43 + ->setNewText($this->getNewValue()); 44 + } 45 + 46 + public function newRemarkupChanges() { 47 + $changes = array(); 48 + 49 + $changes[] = $this->newRemarkupChange() 50 + ->setOldValue($this->getOldValue()) 51 + ->setNewValue($this->getNewValue()); 52 + 53 + return $changes; 54 + } 55 + 56 + }