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

Migrate Project workboard to modular transactions

Summary: This was interesting, because there were a mix of callsites using transactions and others that just set the property on the `Project` object. I made everything consistent in using transactions to change this property. I also found an implementation of `getTitle()` that I don't think is ever being invoked since `shouldHide()` is returning `true`, but I migrated it anyway.

Test Plan: Unit tests pass + enabling/disabling workboards (and importing).

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley

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

+68 -27
+2
src/__phutil_library_map__.php
··· 3708 3708 'PhabricatorProjectWatcherListView' => 'applications/project/view/PhabricatorProjectWatcherListView.php', 3709 3709 'PhabricatorProjectWorkboardBackgroundColor' => 'applications/project/constants/PhabricatorProjectWorkboardBackgroundColor.php', 3710 3710 'PhabricatorProjectWorkboardProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectWorkboardProfileMenuItem.php', 3711 + 'PhabricatorProjectWorkboardTransaction' => 'applications/project/xaction/PhabricatorProjectWorkboardTransaction.php', 3711 3712 'PhabricatorProjectsAncestorsSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorProjectsAncestorsSearchEngineAttachment.php', 3712 3713 'PhabricatorProjectsCurtainExtension' => 'applications/project/engineextension/PhabricatorProjectsCurtainExtension.php', 3713 3714 'PhabricatorProjectsEditEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php', ··· 9148 9149 'PhabricatorProjectWatcherListView' => 'PhabricatorProjectUserListView', 9149 9150 'PhabricatorProjectWorkboardBackgroundColor' => 'Phobject', 9150 9151 'PhabricatorProjectWorkboardProfileMenuItem' => 'PhabricatorProfileMenuItem', 9152 + 'PhabricatorProjectWorkboardTransaction' => 'PhabricatorProjectTransactionType', 9151 9153 'PhabricatorProjectsAncestorsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', 9152 9154 'PhabricatorProjectsCurtainExtension' => 'PHUICurtainExtension', 9153 9155 'PhabricatorProjectsEditEngineExtension' => 'PhabricatorEditEngineExtension',
+2 -1
src/applications/project/controller/PhabricatorProjectBoardDisableController.php
··· 33 33 $xactions = array(); 34 34 35 35 $xactions[] = id(new PhabricatorProjectTransaction()) 36 - ->setTransactionType(PhabricatorProjectTransaction::TYPE_HASWORKBOARD) 36 + ->setTransactionType( 37 + PhabricatorProjectWorkboardTransaction::TRANSACTIONTYPE) 37 38 ->setNewValue(0); 38 39 39 40 id(new PhabricatorProjectTransactionEditor())
+11 -1
src/applications/project/controller/PhabricatorProjectBoardImportController.php
··· 61 61 ->setProperties($import_column->getProperties()) 62 62 ->save(); 63 63 } 64 + $xactions = array(); 65 + $xactions[] = id(new PhabricatorProjectTransaction()) 66 + ->setTransactionType( 67 + PhabricatorProjectWorkboardTransaction::TRANSACTIONTYPE) 68 + ->setNewValue(1); 64 69 65 - $project->setHasWorkboard(1)->save(); 70 + id(new PhabricatorProjectTransactionEditor()) 71 + ->setActor($viewer) 72 + ->setContentSourceFromRequest($request) 73 + ->setContinueOnNoEffect(true) 74 + ->setContinueOnMissingFields(true) 75 + ->applyTransactions($project, $xactions); 66 76 67 77 $table->saveTransaction(); 68 78
+14 -2
src/applications/project/controller/PhabricatorProjectBoardViewController.php
··· 966 966 ->setProjectPHID($project->getPHID()) 967 967 ->save(); 968 968 969 - $project->setHasWorkboard(1)->save(); 969 + $xactions = array(); 970 + $xactions[] = id(new PhabricatorProjectTransaction()) 971 + ->setTransactionType( 972 + PhabricatorProjectWorkboardTransaction::TRANSACTIONTYPE) 973 + ->setNewValue(1); 974 + 975 + id(new PhabricatorProjectTransactionEditor()) 976 + ->setActor($viewer) 977 + ->setContentSourceFromRequest($request) 978 + ->setContinueOnNoEffect(true) 979 + ->setContinueOnMissingFields(true) 980 + ->applyTransactions($project, $xactions); 970 981 971 982 return id(new AphrontRedirectResponse()) 972 983 ->setURI($board_uri); ··· 1050 1061 $xactions = array(); 1051 1062 1052 1063 $xactions[] = id(new PhabricatorProjectTransaction()) 1053 - ->setTransactionType(PhabricatorProjectTransaction::TYPE_HASWORKBOARD) 1064 + ->setTransactionType( 1065 + PhabricatorProjectWorkboardTransaction::TRANSACTIONTYPE) 1054 1066 ->setNewValue(1); 1055 1067 1056 1068 id(new PhabricatorProjectTransactionEditor())
-9
src/applications/project/editor/PhabricatorProjectTransactionEditor.php
··· 30 30 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; 31 31 $types[] = PhabricatorTransactions::TYPE_JOIN_POLICY; 32 32 33 - $types[] = PhabricatorProjectTransaction::TYPE_HASWORKBOARD; 34 33 $types[] = PhabricatorProjectTransaction::TYPE_DEFAULT_SORT; 35 34 $types[] = PhabricatorProjectTransaction::TYPE_DEFAULT_FILTER; 36 35 $types[] = PhabricatorProjectTransaction::TYPE_BACKGROUND; ··· 43 42 PhabricatorApplicationTransaction $xaction) { 44 43 45 44 switch ($xaction->getTransactionType()) { 46 - case PhabricatorProjectTransaction::TYPE_HASWORKBOARD: 47 - return (int)$object->getHasWorkboard(); 48 45 case PhabricatorProjectTransaction::TYPE_DEFAULT_SORT: 49 46 return $object->getDefaultWorkboardSort(); 50 47 case PhabricatorProjectTransaction::TYPE_DEFAULT_FILTER: ··· 64 61 case PhabricatorProjectTransaction::TYPE_DEFAULT_SORT: 65 62 case PhabricatorProjectTransaction::TYPE_DEFAULT_FILTER: 66 63 return $xaction->getNewValue(); 67 - case PhabricatorProjectTransaction::TYPE_HASWORKBOARD: 68 - return (int)$xaction->getNewValue(); 69 64 case PhabricatorProjectTransaction::TYPE_BACKGROUND: 70 65 $value = $xaction->getNewValue(); 71 66 if (!strlen($value)) { ··· 82 77 PhabricatorApplicationTransaction $xaction) { 83 78 84 79 switch ($xaction->getTransactionType()) { 85 - case PhabricatorProjectTransaction::TYPE_HASWORKBOARD: 86 - $object->setHasWorkboard($xaction->getNewValue()); 87 - return; 88 80 case PhabricatorProjectTransaction::TYPE_DEFAULT_SORT: 89 81 $object->setDefaultWorkboardSort($xaction->getNewValue()); 90 82 return; ··· 107 99 $new = $xaction->getNewValue(); 108 100 109 101 switch ($xaction->getTransactionType()) { 110 - case PhabricatorProjectTransaction::TYPE_HASWORKBOARD: 111 102 case PhabricatorProjectTransaction::TYPE_DEFAULT_SORT: 112 103 case PhabricatorProjectTransaction::TYPE_DEFAULT_FILTER: 113 104 case PhabricatorProjectTransaction::TYPE_BACKGROUND:
+1 -14
src/applications/project/storage/PhabricatorProjectTransaction.php
··· 3 3 final class PhabricatorProjectTransaction 4 4 extends PhabricatorModularTransaction { 5 5 6 - const TYPE_HASWORKBOARD = 'project:hasworkboard'; 7 6 const TYPE_DEFAULT_SORT = 'project:sort'; 8 7 const TYPE_DEFAULT_FILTER = 'project:filter'; 9 8 const TYPE_BACKGROUND = 'project:background'; ··· 61 60 62 61 public function shouldHideForFeed() { 63 62 switch ($this->getTransactionType()) { 64 - case self::TYPE_HASWORKBOARD: 65 63 case self::TYPE_DEFAULT_SORT: 66 64 case self::TYPE_DEFAULT_FILTER: 67 65 case self::TYPE_BACKGROUND: ··· 73 71 74 72 public function shouldHideForMail(array $xactions) { 75 73 switch ($this->getTransactionType()) { 76 - case self::TYPE_HASWORKBOARD: 74 + case PhabricatorProjectWorkboardTransaction::TRANSACTIONTYPE: 77 75 case self::TYPE_DEFAULT_SORT: 78 76 case self::TYPE_DEFAULT_FILTER: 79 77 case self::TYPE_BACKGROUND: ··· 141 139 } 142 140 } 143 141 break; 144 - 145 - case self::TYPE_HASWORKBOARD: 146 - if ($new) { 147 - return pht( 148 - '%s enabled the workboard for this project.', 149 - $author_handle); 150 - } else { 151 - return pht( 152 - '%s disabled the workboard for this project.', 153 - $author_handle); 154 - } 155 142 156 143 case self::TYPE_DEFAULT_SORT: 157 144 return pht(
+38
src/applications/project/xaction/PhabricatorProjectWorkboardTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectWorkboardTransaction 4 + extends PhabricatorProjectTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'project:hasworkboard'; 7 + 8 + public function generateOldValue($object) { 9 + return (int)$object->getHasWorkboard(); 10 + } 11 + 12 + public function generateNewValue($object, $value) { 13 + return (int)$value; 14 + } 15 + 16 + public function applyInternalEffects($object, $value) { 17 + $object->setHasWorkboard($value); 18 + } 19 + 20 + public function getTitle() { 21 + $new = $this->getNewValue(); 22 + 23 + if ($new) { 24 + return pht( 25 + '%s enabled the workboard for this project.', 26 + $this->renderAuthor()); 27 + } else { 28 + return pht( 29 + '%s disabled the workboard for this project.', 30 + $this->renderAuthor()); 31 + } 32 + } 33 + 34 + public function shouldHide() { 35 + return true; 36 + } 37 + 38 + }