mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-21 04:50:55 +01:00
Use Application PHIDs in Projects
Summary: Ref T2715. Move Projects to the new stuff. Test Plan: Used `phid.query` to load projects. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2715 Differential Revision: https://secure.phabricator.com/D6526
This commit is contained in:
parent
b574b3ff8e
commit
69d5a9af58
16 changed files with 71 additions and 49 deletions
|
@ -1398,6 +1398,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php',
|
||||
'PhabricatorProjectMembersEditController' => 'applications/project/controller/PhabricatorProjectMembersEditController.php',
|
||||
'PhabricatorProjectNameCollisionException' => 'applications/project/exception/PhabricatorProjectNameCollisionException.php',
|
||||
'PhabricatorProjectPHIDTypeProject' => 'applications/project/phid/PhabricatorProjectPHIDTypeProject.php',
|
||||
'PhabricatorProjectProfile' => 'applications/project/storage/PhabricatorProjectProfile.php',
|
||||
'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php',
|
||||
'PhabricatorProjectProfileEditController' => 'applications/project/controller/PhabricatorProjectProfileEditController.php',
|
||||
|
@ -3402,6 +3403,7 @@ phutil_register_library_map(array(
|
|||
),
|
||||
'PhabricatorProjectMembersEditController' => 'PhabricatorProjectController',
|
||||
'PhabricatorProjectNameCollisionException' => 'Exception',
|
||||
'PhabricatorProjectPHIDTypeProject' => 'PhabricatorPHIDType',
|
||||
'PhabricatorProjectProfile' => 'PhabricatorProjectDAO',
|
||||
'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
|
||||
'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController',
|
||||
|
|
|
@ -213,27 +213,29 @@ final class PhabricatorAuditListController extends PhabricatorAuditController {
|
|||
}
|
||||
|
||||
private function validateHandle(PhabricatorObjectHandle $handle) {
|
||||
$type = $handle->getType();
|
||||
|
||||
switch ($this->filter) {
|
||||
case 'active':
|
||||
case 'user':
|
||||
case 'author':
|
||||
if ($handle->getType() !== PhabricatorPHIDConstants::PHID_TYPE_USER) {
|
||||
if ($type !== PhabricatorPHIDConstants::PHID_TYPE_USER) {
|
||||
throw new Exception("PHID must be a user PHID!");
|
||||
}
|
||||
break;
|
||||
case 'package':
|
||||
case 'packagecommits':
|
||||
if ($handle->getType() !== PhabricatorPHIDConstants::PHID_TYPE_OPKG) {
|
||||
if ($type !== PhabricatorPHIDConstants::PHID_TYPE_OPKG) {
|
||||
throw new Exception("PHID must be a package PHID!");
|
||||
}
|
||||
break;
|
||||
case 'project':
|
||||
if ($handle->getType() !== PhabricatorPHIDConstants::PHID_TYPE_PROJ) {
|
||||
if ($type !== PhabricatorProjectPHIDTypeProject::TYPECONST) {
|
||||
throw new Exception("PHID must be a project PHID!");
|
||||
}
|
||||
break;
|
||||
case 'repository':
|
||||
if ($handle->getType() !== PhabricatorPHIDConstants::PHID_TYPE_REPO) {
|
||||
if ($type !== PhabricatorPHIDConstants::PHID_TYPE_REPO) {
|
||||
throw new Exception("PHID must be a repository PHID!");
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -121,7 +121,7 @@ abstract class ConduitAPI_maniphest_Method extends ConduitAPIMethod {
|
|||
$project_phids = $request->getValue('projectPHIDs');
|
||||
if ($project_phids !== null) {
|
||||
$this->validatePHIDList($project_phids,
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ,
|
||||
PhabricatorProjectPHIDTypeProject::TYPECONST,
|
||||
'projectPHIDS');
|
||||
$changes[ManiphestTransactionType::TYPE_PROJECTS] = $project_phids;
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ final class ManiphestSearchIndexer
|
|||
$doc->addRelationship(
|
||||
PhabricatorSearchRelationship::RELATIONSHIP_PROJECT,
|
||||
$phid,
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ,
|
||||
PhabricatorProjectPHIDTypeProject::TYPECONST,
|
||||
$task->getDateModified()); // Bogus.
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ final class ConduitAPI_owners_query_Method
|
|||
protected static function queryByOwner($owner) {
|
||||
$is_valid_phid =
|
||||
phid_get_type($owner) == PhabricatorPHIDConstants::PHID_TYPE_USER ||
|
||||
phid_get_type($owner) == PhabricatorPHIDConstants::PHID_TYPE_PROJ;
|
||||
phid_get_type($owner) == PhabricatorProjectPHIDTypeProject::TYPECONST;
|
||||
|
||||
if (!$is_valid_phid) {
|
||||
throw id(new ConduitException('ERR-INVALID-PARAMETER'))
|
||||
|
|
|
@ -42,7 +42,9 @@ final class PhabricatorOwnersOwner extends PhabricatorOwnersDAO {
|
|||
array());
|
||||
|
||||
$users_in_project_phids = array();
|
||||
$project_phids = idx($all_phids, PhabricatorPHIDConstants::PHID_TYPE_PROJ);
|
||||
$project_phids = idx(
|
||||
$all_phids,
|
||||
PhabricatorProjectPHIDTypeProject::TYPECONST);
|
||||
if ($project_phids) {
|
||||
$query = id(new PhabricatorEdgeQuery())
|
||||
->withSourcePHIDs($project_phids)
|
||||
|
|
|
@ -117,7 +117,6 @@ final class PhabricatorObjectHandle
|
|||
PhabricatorPHIDConstants::PHID_TYPE_QUES => 'Question',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PVAR => 'Variable',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PSTE => 'Paste',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ => 'Project',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_LEGD => 'Legalpad Document',
|
||||
);
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
final class PhabricatorPHIDConstants {
|
||||
|
||||
const PHID_TYPE_USER = 'USER';
|
||||
const PHID_TYPE_PROJ = 'PROJ';
|
||||
const PHID_TYPE_UNKNOWN = '????';
|
||||
const PHID_TYPE_MAGIC = '!!!!';
|
||||
const PHID_TYPE_REPO = 'REPO';
|
||||
|
|
|
@ -56,13 +56,6 @@ final class PhabricatorObjectHandleData {
|
|||
$phids);
|
||||
return mpull($users, null, 'getPHID');
|
||||
|
||||
case PhabricatorPHIDConstants::PHID_TYPE_PROJ:
|
||||
$projects = id(new PhabricatorProjectQuery())
|
||||
->setViewer($this->viewer)
|
||||
->withPHIDs($phids)
|
||||
->execute();
|
||||
return mpull($projects, null, 'getPHID');
|
||||
|
||||
case PhabricatorPHIDConstants::PHID_TYPE_REPO:
|
||||
// TODO: Update this to PhabricatorRepositoryQuery
|
||||
$object = new PhabricatorRepository();
|
||||
|
@ -289,23 +282,6 @@ final class PhabricatorObjectHandleData {
|
|||
}
|
||||
break;
|
||||
|
||||
case PhabricatorPHIDConstants::PHID_TYPE_PROJ:
|
||||
foreach ($phids as $phid) {
|
||||
$handle = new PhabricatorObjectHandle();
|
||||
$handle->setPHID($phid);
|
||||
$handle->setType($type);
|
||||
if (empty($objects[$phid])) {
|
||||
$handle->setName('Unknown Project');
|
||||
} else {
|
||||
$project = $objects[$phid];
|
||||
$handle->setName($project->getName());
|
||||
$handle->setURI('/project/view/'.$project->getID().'/');
|
||||
$handle->setComplete(true);
|
||||
}
|
||||
$handles[$phid] = $handle;
|
||||
}
|
||||
break;
|
||||
|
||||
case PhabricatorPHIDConstants::PHID_TYPE_REPO:
|
||||
foreach ($phids as $phid) {
|
||||
$handle = new PhabricatorObjectHandle();
|
||||
|
|
|
@ -16,14 +16,7 @@ function phid_get_type($phid) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Group a list of phids by type. Given:
|
||||
*
|
||||
* phid_group_by_type([PHID-USER-1, PHID-USER-2, PHID-PROJ-3])
|
||||
*
|
||||
* phid_group_by_type would return:
|
||||
*
|
||||
* [PhabricatorPHIDConstants::PHID_TYPE_USER => [PHID-USER-1, PHID-USER-2],
|
||||
* PhabricatorPHIDConstants::PHID_TYPE_PROJ => [PHID-PROJ-3]]
|
||||
* Group a list of phids by type.
|
||||
*
|
||||
* @param phids array of phids
|
||||
* @return map of phid type => list of phids
|
||||
|
|
|
@ -37,7 +37,7 @@ final class PhabricatorPolicy {
|
|||
|
||||
$phid_type = phid_get_type($policy_identifier);
|
||||
switch ($phid_type) {
|
||||
case PhabricatorPHIDConstants::PHID_TYPE_PROJ:
|
||||
case PhabricatorProjectPHIDTypeProject::TYPECONST:
|
||||
$policy->setType(PhabricatorPolicyType::TYPE_PROJECT);
|
||||
$policy->setName($handle->getName());
|
||||
break;
|
||||
|
|
|
@ -84,7 +84,7 @@ final class PhabricatorPolicyFilter {
|
|||
|
||||
$policy = $object->getPolicy($capability);
|
||||
$type = phid_get_type($policy);
|
||||
if ($type == PhabricatorPHIDConstants::PHID_TYPE_PROJ) {
|
||||
if ($type == PhabricatorProjectPHIDTypeProject::TYPECONST) {
|
||||
$need_projects[] = $policy;
|
||||
}
|
||||
}
|
||||
|
@ -203,7 +203,7 @@ final class PhabricatorPolicyFilter {
|
|||
break;
|
||||
default:
|
||||
$type = phid_get_type($policy);
|
||||
if ($type == PhabricatorPHIDConstants::PHID_TYPE_PROJ) {
|
||||
if ($type == PhabricatorProjectPHIDTypeProject::TYPECONST) {
|
||||
if (isset($this->userProjects[$viewer->getPHID()][$policy])) {
|
||||
return true;
|
||||
} else {
|
||||
|
@ -268,7 +268,7 @@ final class PhabricatorPolicyFilter {
|
|||
$this->viewer);
|
||||
|
||||
$type = phid_get_type($policy);
|
||||
if ($type == PhabricatorPHIDConstants::PHID_TYPE_PROJ) {
|
||||
if ($type == PhabricatorProjectPHIDTypeProject::TYPECONST) {
|
||||
$who = "To {$verb} this object, you must be a member of project ".
|
||||
"'".$handle->getFullName()."'.";
|
||||
} else if ($type == PhabricatorPHIDConstants::PHID_TYPE_USER) {
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorProjectPHIDTypeProject extends PhabricatorPHIDType {
|
||||
|
||||
const TYPECONST = 'PROJ';
|
||||
|
||||
public function getTypeConstant() {
|
||||
return self::TYPECONST;
|
||||
}
|
||||
|
||||
public function getTypeName() {
|
||||
return pht('Project');
|
||||
}
|
||||
|
||||
public function newObject() {
|
||||
return new PhabricatorProject();
|
||||
}
|
||||
|
||||
public function loadObjects(
|
||||
PhabricatorObjectQuery $query,
|
||||
array $phids) {
|
||||
|
||||
return id(new PhabricatorProjectQuery())
|
||||
->setViewer($query->getViewer())
|
||||
->withPHIDs($phids)
|
||||
->execute();
|
||||
}
|
||||
|
||||
public function loadHandles(
|
||||
PhabricatorHandleQuery $query,
|
||||
array $handles,
|
||||
array $objects) {
|
||||
|
||||
foreach ($handles as $phid => $handle) {
|
||||
$project = $objects[$phid];
|
||||
|
||||
$name = $project->getName();
|
||||
$id = $project->getID();
|
||||
|
||||
$handle->setName($name);
|
||||
$handle->setURI("/project/view/{$id}/");
|
||||
}
|
||||
}
|
||||
|
||||
public function canLoadNamedObject($name) {
|
||||
// TODO: We should be able to load named projects by hashtag, e.g. "#yolo".
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -84,7 +84,7 @@ final class PhabricatorProject extends PhabricatorProjectDAO
|
|||
|
||||
public function generatePHID() {
|
||||
return PhabricatorPHID::generateNewPHID(
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ);
|
||||
PhabricatorProjectPHIDTypeProject::TYPECONST);
|
||||
}
|
||||
|
||||
public function loadProfile() {
|
||||
|
|
|
@ -55,7 +55,7 @@ final class PhabricatorRepositoryCommitSearchIndexer
|
|||
$doc->addRelationship(
|
||||
PhabricatorSearchRelationship::RELATIONSHIP_PROJECT,
|
||||
$project_phid,
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ,
|
||||
PhabricatorProjectPHIDTypeProject::TYPECONST,
|
||||
$date_created);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -155,7 +155,6 @@ final class PhabricatorEdgeConfig extends PhabricatorEdgeConstants {
|
|||
|
||||
static $class_map = array(
|
||||
PhabricatorPHIDConstants::PHID_TYPE_USER => 'PhabricatorUser',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_PROJ => 'PhabricatorProject',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_TOBJ => 'HarbormasterObject',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_BLOG => 'PhameBlog',
|
||||
PhabricatorPHIDConstants::PHID_TYPE_POST => 'PhamePost',
|
||||
|
|
Loading…
Reference in a new issue