@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 status to modular transactions

Test Plan: Unit tests pass. Archived/activated some projects a couple times; observed expected transactions on timeline.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley

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

+76 -61
+1 -1
resources/sql/patches/20131020.pxactionmig.php
··· 34 34 $type_map = array( 35 35 'name' => PhabricatorProjectNameTransaction::TRANSACTIONTYPE, 36 36 'members' => PhabricatorProjectTransaction::TYPE_MEMBERS, 37 - 'status' => PhabricatorProjectTransaction::TYPE_STATUS, 37 + 'status' => PhabricatorProjectStatusTransaction::TRANSACTIONTYPE, 38 38 'canview' => PhabricatorTransactions::TYPE_VIEW_POLICY, 39 39 'canedit' => PhabricatorTransactions::TYPE_EDIT_POLICY, 40 40 'canjoin' => PhabricatorTransactions::TYPE_JOIN_POLICY,
+2
src/__phutil_library_map__.php
··· 3669 3669 'PhabricatorProjectSlugsTransaction' => 'applications/project/xaction/PhabricatorProjectSlugsTransaction.php', 3670 3670 'PhabricatorProjectStandardCustomField' => 'applications/project/customfield/PhabricatorProjectStandardCustomField.php', 3671 3671 'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php', 3672 + 'PhabricatorProjectStatusTransaction' => 'applications/project/xaction/PhabricatorProjectStatusTransaction.php', 3672 3673 'PhabricatorProjectSubprojectWarningController' => 'applications/project/controller/PhabricatorProjectSubprojectWarningController.php', 3673 3674 'PhabricatorProjectSubprojectsController' => 'applications/project/controller/PhabricatorProjectSubprojectsController.php', 3674 3675 'PhabricatorProjectSubprojectsProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectSubprojectsProfileMenuItem.php', ··· 9084 9085 'PhabricatorStandardCustomFieldInterface', 9085 9086 ), 9086 9087 'PhabricatorProjectStatus' => 'Phobject', 9088 + 'PhabricatorProjectStatusTransaction' => 'PhabricatorProjectTransactionType', 9087 9089 'PhabricatorProjectSubprojectWarningController' => 'PhabricatorProjectController', 9088 9090 'PhabricatorProjectSubprojectsController' => 'PhabricatorProjectController', 9089 9091 'PhabricatorProjectSubprojectsProfileMenuItem' => 'PhabricatorProfileMenuItem',
+2 -1
src/applications/project/controller/PhabricatorProjectArchiveController.php
··· 32 32 $xactions = array(); 33 33 34 34 $xactions[] = id(new PhabricatorProjectTransaction()) 35 - ->setTransactionType(PhabricatorProjectTransaction::TYPE_STATUS) 35 + ->setTransactionType( 36 + PhabricatorProjectStatusTransaction::TRANSACTIONTYPE) 36 37 ->setNewValue($new_status); 37 38 38 39 id(new PhabricatorProjectTransactionEditor())
+2 -1
src/applications/project/controller/PhabricatorProjectColumnHideController.php
··· 65 65 $xactions = array(); 66 66 67 67 $xactions[] = id(new PhabricatorProjectTransaction()) 68 - ->setTransactionType(PhabricatorProjectTransaction::TYPE_STATUS) 68 + ->setTransactionType( 69 + PhabricatorProjectStatusTransaction::TRANSACTIONTYPE) 69 70 ->setNewValue($new_status); 70 71 71 72 id(new PhabricatorProjectTransactionEditor())
+1 -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_STATUS; 34 33 $types[] = PhabricatorProjectTransaction::TYPE_IMAGE; 35 34 $types[] = PhabricatorProjectTransaction::TYPE_ICON; 36 35 $types[] = PhabricatorProjectTransaction::TYPE_COLOR; ··· 50 49 PhabricatorApplicationTransaction $xaction) { 51 50 52 51 switch ($xaction->getTransactionType()) { 53 - case PhabricatorProjectTransaction::TYPE_STATUS: 54 - return $object->getStatus(); 55 52 case PhabricatorProjectTransaction::TYPE_IMAGE: 56 53 return $object->getProfileImagePHID(); 57 54 case PhabricatorProjectTransaction::TYPE_ICON: ··· 81 78 PhabricatorApplicationTransaction $xaction) { 82 79 83 80 switch ($xaction->getTransactionType()) { 84 - case PhabricatorProjectTransaction::TYPE_STATUS: 85 81 case PhabricatorProjectTransaction::TYPE_IMAGE: 86 82 case PhabricatorProjectTransaction::TYPE_ICON: 87 83 case PhabricatorProjectTransaction::TYPE_COLOR: ··· 109 105 PhabricatorApplicationTransaction $xaction) { 110 106 111 107 switch ($xaction->getTransactionType()) { 112 - case PhabricatorProjectTransaction::TYPE_STATUS: 113 - $object->setStatus($xaction->getNewValue()); 114 - return; 115 108 case PhabricatorProjectTransaction::TYPE_IMAGE: 116 109 $object->setProfileImagePHID($xaction->getNewValue()); 117 110 return; ··· 157 150 $new = $xaction->getNewValue(); 158 151 159 152 switch ($xaction->getTransactionType()) { 160 - case PhabricatorProjectTransaction::TYPE_STATUS: 161 153 case PhabricatorProjectTransaction::TYPE_IMAGE: 162 154 case PhabricatorProjectTransaction::TYPE_ICON: 163 155 case PhabricatorProjectTransaction::TYPE_COLOR: ··· 343 335 344 336 switch ($xaction->getTransactionType()) { 345 337 case PhabricatorProjectNameTransaction::TRANSACTIONTYPE: 346 - case PhabricatorProjectTransaction::TYPE_STATUS: 338 + case PhabricatorProjectStatusTransaction::TRANSACTIONTYPE: 347 339 case PhabricatorProjectTransaction::TYPE_IMAGE: 348 340 case PhabricatorProjectTransaction::TYPE_ICON: 349 341 case PhabricatorProjectTransaction::TYPE_COLOR:
+1 -1
src/applications/project/lipsum/PhabricatorProjectTestDataGenerator.php
··· 20 20 $this->newProjectTitle()); 21 21 22 22 $xactions[] = $this->newTransaction( 23 - PhabricatorProjectTransaction::TYPE_STATUS, 23 + PhabricatorProjectStatusTransaction::TRANSACTIONTYPE, 24 24 $this->newProjectStatus()); 25 25 26 26 // Almost always make the author a member.
+1 -48
src/applications/project/storage/PhabricatorProjectTransaction.php
··· 3 3 final class PhabricatorProjectTransaction 4 4 extends PhabricatorModularTransaction { 5 5 6 - const TYPE_STATUS = 'project:status'; 7 6 const TYPE_IMAGE = 'project:image'; 8 7 const TYPE_ICON = 'project:icon'; 9 8 const TYPE_COLOR = 'project:color'; ··· 55 54 return array_merge($req_phids, parent::getRequiredHandlePHIDs()); 56 55 } 57 56 58 - public function getColor() { 59 - 60 - $old = $this->getOldValue(); 61 - $new = $this->getNewValue(); 62 - 63 - switch ($this->getTransactionType()) { 64 - case self::TYPE_STATUS: 65 - if ($old == 0) { 66 - return 'red'; 67 - } else { 68 - return 'green'; 69 - } 70 - } 71 - return parent::getColor(); 72 - } 73 - 74 57 public function shouldHide() { 75 58 switch ($this->getTransactionType()) { 76 59 case PhabricatorTransactions::TYPE_EDGE: ··· 115 98 $new = $this->getNewValue(); 116 99 117 100 switch ($this->getTransactionType()) { 118 - case self::TYPE_STATUS: 119 - if ($old == 0) { 120 - return 'fa-ban'; 121 - } else { 122 - return 'fa-check'; 123 - } 124 101 case self::TYPE_LOCKED: 125 102 if ($new) { 126 103 return 'fa-lock'; ··· 149 126 '%s created this project.', 150 127 $this->renderHandleLink($author_phid)); 151 128 152 - case self::TYPE_STATUS: 153 - if ($old == 0) { 154 - return pht( 155 - '%s archived this project.', 156 - $author_handle); 157 - } else { 158 - return pht( 159 - '%s activated this project.', 160 - $author_handle); 161 - } 162 - break; 163 - 164 129 case self::TYPE_IMAGE: 165 130 // TODO: Some day, it would be nice to show the images. 166 131 if (!$old) { ··· 288 253 $new = $this->getNewValue(); 289 254 290 255 switch ($this->getTransactionType()) { 291 - case self::TYPE_STATUS: 292 - if ($old == 0) { 293 - return pht( 294 - '%s archived %s.', 295 - $author_handle, 296 - $object_handle); 297 - } else { 298 - return pht( 299 - '%s activated %s.', 300 - $author_handle, 301 - $object_handle); 302 - } 303 256 case self::TYPE_IMAGE: 304 257 // TODO: Some day, it would be nice to show the images. 305 258 if (!$old) { ··· 378 331 $tags[] = self::MAILTAG_OTHER; 379 332 } 380 333 break; 381 - case self::TYPE_STATUS: 334 + case PhabricatorProjectStatusTransaction::TRANSACTIONTYPE: 382 335 case self::TYPE_LOCKED: 383 336 default: 384 337 $tags[] = self::MAILTAG_OTHER;
+66
src/applications/project/xaction/PhabricatorProjectStatusTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectStatusTransaction 4 + extends PhabricatorProjectTransactionType { 5 + 6 + const TRANSACTIONTYPE = 'project:status'; 7 + 8 + public function generateOldValue($object) { 9 + return $object->getStatus(); 10 + } 11 + 12 + public function applyInternalEffects($object, $value) { 13 + $object->setStatus($value); 14 + } 15 + 16 + public function getTitle() { 17 + $old = $this->getOldValue(); 18 + 19 + if ($old == 0) { 20 + return pht( 21 + '%s archived this project.', 22 + $this->renderAuthor()); 23 + } else { 24 + return pht( 25 + '%s activated this project.', 26 + $this->renderAuthor()); 27 + } 28 + } 29 + 30 + public function getTitleForFeed() { 31 + $old = $this->getOldValue(); 32 + 33 + if ($old == 0) { 34 + return pht( 35 + '%s archived %s.', 36 + $this->renderAuthor(), 37 + $this->renderObject()); 38 + } else { 39 + return pht( 40 + '%s activated %s.', 41 + $this->renderAuthor(), 42 + $this->renderObject()); 43 + } 44 + } 45 + 46 + public function getColor() { 47 + $old = $this->getOldValue(); 48 + 49 + if ($old == 0) { 50 + return 'red'; 51 + } else { 52 + return 'green'; 53 + } 54 + } 55 + 56 + public function getIcon() { 57 + $old = $this->getOldValue(); 58 + 59 + if ($old == 0) { 60 + return 'fa-ban'; 61 + } else { 62 + return 'fa-check'; 63 + } 64 + } 65 + 66 + }