@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 edges to subclass `PhabricatorEdgeType`

Summary: Modernize Project edges to subclass `PhabricatorEdgeType`. Largely based on D11045.

Test Plan: Add a member to a project, saw new rows in the `phabricator_project.edge` and `phabricator_user.edge` tables.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin, epriestley

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

+238 -57
+1 -1
resources/sql/autopatches/20140210.projcfield.4.memmig.sql
··· 1 1 /* These are here so `grep` will find them if we ever change things: */ 2 2 3 - /* PhabricatorEdgeConfig::TYPE_PROJ_MEMBER = 13 */ 3 + /* PhabricatorProjectProjectHasMemberEdgeType::EDGECONST = 13 */ 4 4 /* PhabricatorEdgeConfig::TYPE_OBJECT_HAS_SUBSCRIBER = 21 */ 5 5 6 6 INSERT IGNORE INTO {$NAMESPACE}_project.edge (src, type, dst, dateCreated)
+1 -1
resources/sql/patches/20130716.archivememberlessprojects.php
··· 9 9 10 10 $members = PhabricatorEdgeQuery::loadDestinationPHIDs( 11 11 $project->getPHID(), 12 - PhabricatorEdgeConfig::TYPE_PROJ_MEMBER); 12 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST); 13 13 14 14 if (count($members)) { 15 15 echo sprintf(
+1 -1
resources/sql/patches/migrate-project-edges.php
··· 25 25 foreach ($members as $user_phid) { 26 26 $editor->addEdge( 27 27 $proj->getPHID(), 28 - PhabricatorEdgeConfig::TYPE_PROJ_MEMBER, 28 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST, 29 29 $user_phid); 30 30 } 31 31 $editor->save();
+4
src/__phutil_library_map__.php
··· 2155 2155 'PhabricatorProjectIcon' => 'applications/project/icon/PhabricatorProjectIcon.php', 2156 2156 'PhabricatorProjectInterface' => 'applications/project/interface/PhabricatorProjectInterface.php', 2157 2157 'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php', 2158 + 'PhabricatorProjectMemberOfProjectEdgeType' => 'applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php', 2158 2159 'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php', 2159 2160 'PhabricatorProjectMembersRemoveController' => 'applications/project/controller/PhabricatorProjectMembersRemoveController.php', 2160 2161 'PhabricatorProjectMoveController' => 'applications/project/controller/PhabricatorProjectMoveController.php', ··· 2162 2163 'PhabricatorProjectObjectHasProjectEdgeType' => 'applications/project/edge/PhabricatorProjectObjectHasProjectEdgeType.php', 2163 2164 'PhabricatorProjectOrUserDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserDatasource.php', 2164 2165 'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php', 2166 + 'PhabricatorProjectProjectHasMemberEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasMemberEdgeType.php', 2165 2167 'PhabricatorProjectProjectHasObjectEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasObjectEdgeType.php', 2166 2168 'PhabricatorProjectProjectPHIDType' => 'applications/project/phid/PhabricatorProjectProjectPHIDType.php', 2167 2169 'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php', ··· 5350 5352 'PhabricatorProjectEditorTestCase' => 'PhabricatorTestCase', 5351 5353 'PhabricatorProjectIcon' => 'Phobject', 5352 5354 'PhabricatorProjectListController' => 'PhabricatorProjectController', 5355 + 'PhabricatorProjectMemberOfProjectEdgeType' => 'PhabricatorEdgeType', 5353 5356 'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController', 5354 5357 'PhabricatorProjectMembersRemoveController' => 'PhabricatorProjectController', 5355 5358 'PhabricatorProjectMoveController' => 'PhabricatorProjectController', ··· 5357 5360 'PhabricatorProjectObjectHasProjectEdgeType' => 'PhabricatorEdgeType', 5358 5361 'PhabricatorProjectOrUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 5359 5362 'PhabricatorProjectProfileController' => 'PhabricatorProjectController', 5363 + 'PhabricatorProjectProjectHasMemberEdgeType' => 'PhabricatorEdgeType', 5360 5364 'PhabricatorProjectProjectHasObjectEdgeType' => 'PhabricatorEdgeType', 5361 5365 'PhabricatorProjectProjectPHIDType' => 'PhabricatorPHIDType', 5362 5366 'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+3 -1
src/applications/owners/storage/PhabricatorOwnersOwner.php
··· 57 57 if ($project_phids) { 58 58 $query = id(new PhabricatorEdgeQuery()) 59 59 ->withSourcePHIDs($project_phids) 60 - ->withEdgeTypes(array(PhabricatorEdgeConfig::TYPE_PROJ_MEMBER)); 60 + ->withEdgeTypes(array( 61 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST, 62 + )); 61 63 $query->execute(); 62 64 $users_in_project_phids = $query->getDestinationPHIDs(); 63 65 }
+3 -1
src/applications/project/conduit/ProjectCreateConduitAPIMethod.php
··· 43 43 44 44 $xactions[] = id(new PhabricatorProjectTransaction()) 45 45 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 46 - ->setMetadataValue('edge:type', PhabricatorEdgeConfig::TYPE_PROJ_MEMBER) 46 + ->setMetadataValue( 47 + 'edge:type', 48 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST) 47 49 ->setNewValue( 48 50 array( 49 51 '+' => array_fuse($members),
+1 -1
src/applications/project/controller/PhabricatorProjectEditDetailsController.php
··· 128 128 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 129 129 ->setMetadataValue( 130 130 'edge:type', 131 - PhabricatorEdgeConfig::TYPE_PROJ_MEMBER) 131 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST) 132 132 ->setNewValue( 133 133 array( 134 134 '+' => array($viewer->getPHID() => $viewer->getPHID()),
+1 -1
src/applications/project/controller/PhabricatorProjectMembersEditController.php
··· 42 42 $member_spec['+'] = array_fuse($add_members); 43 43 } 44 44 45 - $type_member = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 45 + $type_member = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 46 46 47 47 $xactions = array(); 48 48
+1 -1
src/applications/project/controller/PhabricatorProjectMembersRemoveController.php
··· 40 40 $member_spec = array(); 41 41 $member_spec['-'] = array($remove_phid => $remove_phid); 42 42 43 - $type_member = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 43 + $type_member = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 44 44 45 45 $xactions = array(); 46 46
+1 -1
src/applications/project/controller/PhabricatorProjectUpdateController.php
··· 56 56 break; 57 57 } 58 58 59 - $type_member = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 59 + $type_member = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 60 60 $member_spec = array( 61 61 $edge_action => array($user->getPHID() => $user->getPHID()), 62 62 );
+103
src/applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectMemberOfProjectEdgeType 4 + extends PhabricatorEdgeType { 5 + 6 + const EDGECONST = 14; 7 + 8 + public function getInverseEdgeConstant() { 9 + return PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 10 + } 11 + 12 + public function shouldWriteInverseTransactions() { 13 + return true; 14 + } 15 + 16 + public function getTransactionAddString( 17 + $actor, 18 + $add_count, 19 + $add_edges) { 20 + 21 + return pht( 22 + '%s added %s project(s): %s.', 23 + $actor, 24 + $add_count, 25 + $add_edges); 26 + } 27 + 28 + public function getTransactionRemoveString( 29 + $actor, 30 + $rem_count, 31 + $rem_edges) { 32 + 33 + return pht( 34 + '%s removed %s project(s): %s.', 35 + $actor, 36 + $rem_count, 37 + $rem_edges); 38 + } 39 + 40 + public function getTransactionEditString( 41 + $actor, 42 + $total_count, 43 + $add_count, 44 + $add_edges, 45 + $rem_count, 46 + $rem_edges) { 47 + 48 + return pht( 49 + '%s edited project(s), added %s: %s; removed %s: %s.', 50 + $actor, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s project(s) for %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s project(s) for %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited project(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $object, 98 + $add_count, 99 + $add_edges, 100 + $rem_count, 101 + $rem_edges); 102 + } 103 + }
+103
src/applications/project/edge/PhabricatorProjectProjectHasMemberEdgeType.php
··· 1 + <?php 2 + 3 + final class PhabricatorProjectProjectHasMemberEdgeType 4 + extends PhabricatorEdgeType { 5 + 6 + const EDGECONST = 13; 7 + 8 + public function getInverseEdgeConstant() { 9 + return PhabricatorProjectMemberOfProjectEdgeType::EDGECONST; 10 + } 11 + 12 + public function shouldWriteInverseTransactions() { 13 + return true; 14 + } 15 + 16 + public function getTransactionAddString( 17 + $actor, 18 + $add_count, 19 + $add_edges) { 20 + 21 + return pht( 22 + '%s added %s member(s): %s.', 23 + $actor, 24 + $add_count, 25 + $add_edges); 26 + } 27 + 28 + public function getTransactionRemoveString( 29 + $actor, 30 + $rem_count, 31 + $rem_edges) { 32 + 33 + return pht( 34 + '%s removed %s member(s): %s.', 35 + $actor, 36 + $rem_count, 37 + $rem_edges); 38 + } 39 + 40 + public function getTransactionEditString( 41 + $actor, 42 + $total_count, 43 + $add_count, 44 + $add_edges, 45 + $rem_count, 46 + $rem_edges) { 47 + 48 + return pht( 49 + '%s edited member(s), added %s: %s; removed %s: %s.', 50 + $actor, 51 + $add_count, 52 + $add_edges, 53 + $rem_count, 54 + $rem_edges); 55 + } 56 + 57 + public function getFeedAddString( 58 + $actor, 59 + $object, 60 + $add_count, 61 + $add_edges) { 62 + 63 + return pht( 64 + '%s added %s member(s) for %s: %s.', 65 + $actor, 66 + $add_count, 67 + $object, 68 + $add_edges); 69 + } 70 + 71 + public function getFeedRemoveString( 72 + $actor, 73 + $object, 74 + $rem_count, 75 + $rem_edges) { 76 + 77 + return pht( 78 + '%s removed %s member(s) for %s: %s.', 79 + $actor, 80 + $rem_count, 81 + $object, 82 + $rem_edges); 83 + } 84 + 85 + public function getFeedEditString( 86 + $actor, 87 + $object, 88 + $total_count, 89 + $add_count, 90 + $add_edges, 91 + $rem_count, 92 + $rem_edges) { 93 + 94 + return pht( 95 + '%s edited member(s) for %s, added %s: %s; removed %s: %s.', 96 + $actor, 97 + $object, 98 + $add_count, 99 + $add_edges, 100 + $rem_count, 101 + $rem_edges); 102 + } 103 + }
+4 -3
src/applications/project/editor/PhabricatorProjectTransactionEditor.php
··· 179 179 case PhabricatorTransactions::TYPE_EDGE: 180 180 $edge_type = $xaction->getMetadataValue('edge:type'); 181 181 switch ($edge_type) { 182 - case PhabricatorEdgeConfig::TYPE_PROJ_MEMBER: 182 + case PhabricatorProjectProjectHasMemberEdgeType::EDGECONST: 183 183 case PhabricatorEdgeConfig::TYPE_OBJECT_HAS_WATCHER: 184 184 $old = $xaction->getOldValue(); 185 185 $new = $xaction->getNewValue(); ··· 190 190 // When removing members, we remove their subscription too. 191 191 // When unwatching, we leave subscriptions, since it's fine to be 192 192 // subscribed to a project but not be a member of it. 193 - if ($edge_type == PhabricatorEdgeConfig::TYPE_PROJ_MEMBER) { 193 + $edge_const = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 194 + if ($edge_type == $edge_const) { 194 195 $rem = array_keys(array_diff_key($old, $new)); 195 196 } else { 196 197 $rem = array(); ··· 366 367 return; 367 368 case PhabricatorTransactions::TYPE_EDGE: 368 369 switch ($xaction->getMetadataValue('edge:type')) { 369 - case PhabricatorEdgeConfig::TYPE_PROJ_MEMBER: 370 + case PhabricatorProjectProjectHasMemberEdgeType::EDGECONST: 370 371 $old = $xaction->getOldValue(); 371 372 $new = $xaction->getNewValue(); 372 373
+3 -1
src/applications/project/editor/__tests__/PhabricatorProjectEditorTestCase.php
··· 274 274 $xactions = array(); 275 275 $xactions[] = id(new PhabricatorProjectTransaction()) 276 276 ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) 277 - ->setMetadataValue('edge:type', PhabricatorEdgeConfig::TYPE_PROJ_MEMBER) 277 + ->setMetadataValue( 278 + 'edge:type', 279 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST) 278 280 ->setNewValue($spec); 279 281 280 282 $editor = id(new PhabricatorProjectTransactionEditor())
+3 -3
src/applications/project/query/PhabricatorProjectQuery.php
··· 138 138 $viewer_phid = $this->getViewer()->getPHID(); 139 139 $project_phids = mpull($projects, 'getPHID'); 140 140 141 - $member_type = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 141 + $member_type = PhabricatorProjectProjectHasMemberEdgeType::EDGECONST; 142 142 $watcher_type = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_WATCHER; 143 143 144 144 $need_edge_types = array(); ··· 338 338 $conn_r, 339 339 'LEFT JOIN %T vm ON vm.src = p.phid AND vm.type = %d AND vm.dst = %s', 340 340 PhabricatorEdgeConfig::TABLE_NAME_EDGE, 341 - PhabricatorEdgeConfig::TYPE_PROJ_MEMBER, 341 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST, 342 342 $this->getViewer()->getPHID()); 343 343 } 344 344 ··· 347 347 $conn_r, 348 348 'JOIN %T e ON e.src = p.phid AND e.type = %d', 349 349 PhabricatorEdgeConfig::TABLE_NAME_EDGE, 350 - PhabricatorEdgeConfig::TYPE_PROJ_MEMBER); 350 + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST); 351 351 } 352 352 353 353 if ($this->slugs !== null) {
-22
src/infrastructure/edges/constants/PhabricatorEdgeConfig.php
··· 5 5 const TABLE_NAME_EDGE = 'edge'; 6 6 const TABLE_NAME_EDGEDATA = 'edgedata'; 7 7 8 - const TYPE_PROJ_MEMBER = 13; 9 - const TYPE_MEMBER_OF_PROJ = 14; 10 - 11 8 const TYPE_OBJECT_HAS_SUBSCRIBER = 21; 12 9 const TYPE_SUBSCRIBED_TO_OBJECT = 22; 13 10 ··· 103 100 104 101 private static function getInverse($edge_type) { 105 102 static $map = array( 106 - self::TYPE_PROJ_MEMBER => self::TYPE_MEMBER_OF_PROJ, 107 - self::TYPE_MEMBER_OF_PROJ => self::TYPE_PROJ_MEMBER, 108 - 109 103 self::TYPE_OBJECT_HAS_SUBSCRIBER => self::TYPE_SUBSCRIBED_TO_OBJECT, 110 104 self::TYPE_SUBSCRIBED_TO_OBJECT => self::TYPE_OBJECT_HAS_SUBSCRIBER, 111 105 ··· 179 173 switch ($type) { 180 174 case self::TYPE_MOCK_HAS_TASK: 181 175 return '%s edited task(s), added %d: %s; removed %d: %s.'; 182 - case self::TYPE_PROJ_MEMBER: 183 - return '%s edited member(s), added %d: %s; removed %d: %s.'; 184 - case self::TYPE_MEMBER_OF_PROJ: 185 - return '%s edited project(s), added %d: %s; removed %d: %s.'; 186 176 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 187 177 return '%s edited subscriber(s), added %d: %s; removed %d: %s.'; 188 178 case self::TYPE_SUBSCRIBED_TO_OBJECT: ··· 216 206 switch ($type) { 217 207 case self::TYPE_MOCK_HAS_TASK: 218 208 return '%s added %d task(s): %s.'; 219 - case self::TYPE_PROJ_MEMBER: 220 - return '%s added %d member(s): %s.'; 221 - case self::TYPE_MEMBER_OF_PROJ: 222 - return '%s added %d project(s): %s.'; 223 209 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 224 210 return '%s added %d subscriber(s): %s.'; 225 211 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: ··· 250 236 switch ($type) { 251 237 case self::TYPE_MOCK_HAS_TASK: 252 238 return '%s removed %d task(s): %s.'; 253 - case self::TYPE_PROJ_MEMBER: 254 - return '%s removed %d member(s): %s.'; 255 - case self::TYPE_MEMBER_OF_PROJ: 256 - return '%s removed %d project(s): %s.'; 257 239 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 258 240 return '%s removed %d subscriber(s): %s.'; 259 241 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: ··· 284 266 switch ($type) { 285 267 case self::TYPE_MOCK_HAS_TASK: 286 268 return '%s updated tasks of %s.'; 287 - case self::TYPE_PROJ_MEMBER: 288 - return '%s updated members of %s.'; 289 - case self::TYPE_MEMBER_OF_PROJ: 290 - return '%s updated projects of %s.'; 291 269 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 292 270 return '%s updated subscribers of %s.'; 293 271 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER:
+5 -19
src/infrastructure/internationalization/translation/PhabricatorBaseEnglishTranslation.php
··· 133 133 '%s edited member(s), added %d: %s; removed %d: %s.' => 134 134 '%s edited members, added: %3$s; removed: %5$s.', 135 135 136 - '%s added %d member(s): %s.' => array( 136 + '%s added %s member(s): %s.' => array( 137 137 array( 138 138 '%s added a member: %3$s.', 139 139 '%s added members: %3$s.', 140 140 ), 141 141 ), 142 142 143 - '%s removed %d member(s): %s.' => array( 143 + '%s removed %s member(s): %s.' => array( 144 144 array( 145 145 '%s removed a member: %3$s.', 146 146 '%s removed members: %3$s.', 147 147 ), 148 148 ), 149 149 150 - '%s edited project(s), added %d: %s; removed %d: %s.' => 150 + '%s edited project(s), added %s: %s; removed %s: %s.' => 151 151 '%s edited projects, added: %3$s; removed: %5$s.', 152 152 153 - '%s added %d project(s): %s.' => array( 153 + '%s added %s project(s): %s.' => array( 154 154 array( 155 155 '%s added a project: %3$s.', 156 156 '%s added projects: %3$s.', 157 157 ), 158 158 ), 159 159 160 - '%s removed %d project(s): %s.' => array( 160 + '%s removed %s project(s): %s.' => array( 161 161 array( 162 162 '%s removed a project: %3$s.', 163 163 '%s removed projects: %3$s.', ··· 791 791 792 792 '%s edited %s revision(s) for %s, added %s: %s; removed %s: %s.' => 793 793 '%s edited revisions for %3$s, added: %5$s; removed %7$s.', 794 - 795 - '%s added %s project(s): %s.' => array( 796 - array( 797 - '%s added a project: %3$s.', 798 - '%s added projects: %3$s.', 799 - ), 800 - ), 801 - 802 - '%s removed %s project(s): %s.' => array( 803 - array( 804 - '%s removed a project: %3$s.', 805 - '%s removed projects: %3$s.', 806 - ), 807 - ), 808 794 809 795 '%s edited %s project(s), added %s: %s; removed %s: %s.' => 810 796 '%s edited projects, added %4$s; removed %6$s.',