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

Make projects policy-aware

Summary: We managed to move enough Owners stuff aside to make this reasonable; make projects implement the policy interface and projectquery use cursor-based paging.

Test Plan:
- Grepped for ProjectQuery callsites.
- Created an audit comment.
- Used `project.query` to query projects.
- Loaded homepage.
- Viewed Maniphest task list, grouped by project.
- Viewed project list.
- Created / edited project.
- Browsed Owners.

Reviewers: vrana, btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T603

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

+41 -6
+1 -1
src/__phutil_library_map__.php
··· 1949 1949 'PhabricatorProjectProfile' => 'PhabricatorProjectDAO', 1950 1950 'PhabricatorProjectProfileController' => 'PhabricatorProjectController', 1951 1951 'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController', 1952 - 'PhabricatorProjectQuery' => 'PhabricatorOffsetPagedQuery', 1952 + 'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyQuery', 1953 1953 'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO', 1954 1954 'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants', 1955 1955 'PhabricatorProjectUpdateController' => 'PhabricatorProjectController',
+4
src/applications/audit/editor/PhabricatorAuditCommentEditor.php
··· 323 323 324 324 // The user can audit on behalf of all projects they are a member of. 325 325 $query = new PhabricatorProjectQuery(); 326 + 327 + // TODO: As above. 328 + $query->setViewer($user); 329 + 326 330 $query->withMemberPHIDs(array($user->getPHID())); 327 331 $projects = $query->execute(); 328 332 foreach ($projects as $project) {
+1
src/applications/conduit/method/project/ConduitAPI_project_query_Method.php
··· 58 58 59 59 protected function execute(ConduitAPIRequest $request) { 60 60 $query = new PhabricatorProjectQuery(); 61 + $query->setViewer($request->getUser()); 61 62 $query->needMembers(true); 62 63 63 64 $ids = $request->getValue('ids');
+1
src/applications/directory/controller/PhabricatorDirectoryMainController.php
··· 40 40 case 'home': 41 41 case 'feed': 42 42 $project_query = new PhabricatorProjectQuery(); 43 + $project_query->setViewer($user); 43 44 $project_query->withMemberPHIDs(array($user->getPHID())); 44 45 $projects = $project_query->execute(); 45 46 break;
+1
src/applications/maniphest/controller/ManiphestTaskListController.php
··· 690 690 691 691 if ($this->view == 'projecttriage' || $this->view == 'projectall') { 692 692 $project_query = new PhabricatorProjectQuery(); 693 + $project_query->setViewer($user); 693 694 $project_query->withMemberPHIDs($user_phids); 694 695 $projects = $project_query->execute(); 695 696 $project_phids = mpull($projects, 'getPHID');
+1
src/applications/owners/query/PhabricatorOwnersPackageQuery.php
··· 65 65 $base_phids = $this->ownerPHIDs; 66 66 67 67 $query = new PhabricatorProjectQuery(); 68 + $query->setViewer($this->getViewer()); 68 69 $query->withMemberPHIDs($base_phids); 69 70 $projects = $query->execute(); 70 71 $project_phids = mpull($projects, 'getPHID');
+1
src/applications/project/controller/PhabricatorProjectListController.php
··· 45 45 $pager->setOffset($request->getInt('page')); 46 46 47 47 $query = new PhabricatorProjectQuery(); 48 + $query->setViewer($request->getUser()); 48 49 $query->setOffset($pager->getOffset()); 49 50 $query->setLimit($pager->getPageSize() + 1); 50 51
+15 -4
src/applications/project/query/PhabricatorProjectQuery.php
··· 16 16 * limitations under the License. 17 17 */ 18 18 19 - final class PhabricatorProjectQuery extends PhabricatorOffsetPagedQuery { 19 + final class PhabricatorProjectQuery extends PhabricatorCursorPagedPolicyQuery { 20 20 21 21 private $ids; 22 22 private $phids; ··· 56 56 return $this; 57 57 } 58 58 59 - public function execute() { 59 + protected function getPagingColumn() { 60 + return 'name'; 61 + } 62 + 63 + protected function getPagingValue($result) { 64 + return $result->getName(); 65 + } 66 + 67 + public function loadPage() { 60 68 $table = new PhabricatorProject(); 61 69 $conn_r = $table->establishConnection('r'); 62 70 ··· 73 81 $projects = $table->loadAllFromArray($data); 74 82 75 83 if ($projects && $this->needMembers) { 84 + $etype = PhabricatorEdgeConfig::TYPE_PROJ_MEMBER; 76 85 $members = id(new PhabricatorEdgeQuery()) 77 86 ->withSourcePHIDs(mpull($projects, 'getPHID')) 78 - ->withTypes(array(PhabricatorEdgeConfig::TYPE_PROJ_MEMBER)) 87 + ->withEdgeTypes(array($etype)) 79 88 ->execute(); 80 89 foreach ($projects as $project) { 81 90 $phid = $project->getPHID(); 82 - $project->attachMemberPHIDs(array_keys($members[$phid])); 91 + $project->attachMemberPHIDs(array_keys($members[$phid][$etype])); 83 92 } 84 93 } 85 94 ··· 134 143 PhabricatorEdgeConfig::TYPE_PROJ_MEMBER, 135 144 $this->memberPHIDs); 136 145 } 146 + 147 + $where[] = $this->buildPagingClause($conn_r); 137 148 138 149 return $this->formatWhereClause($where); 139 150 }
+16 -1
src/applications/project/storage/PhabricatorProject.php
··· 16 16 * limitations under the License. 17 17 */ 18 18 19 - final class PhabricatorProject extends PhabricatorProjectDAO { 19 + final class PhabricatorProject extends PhabricatorProjectDAO 20 + implements PhabricatorPolicyInterface { 20 21 21 22 protected $name; 22 23 protected $phid; ··· 27 28 28 29 private $subprojectsNeedUpdate; 29 30 private $memberPHIDs; 31 + 32 + public function getCapabilities() { 33 + return array( 34 + PhabricatorPolicyCapability::CAN_VIEW, 35 + ); 36 + } 37 + 38 + public function getPolicy($capability) { 39 + return PhabricatorPolicies::POLICY_USER; 40 + } 41 + 42 + public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { 43 + return false; 44 + } 30 45 31 46 public function getConfiguration() { 32 47 return array(