Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/query/DifferentialRevisionQuery.php
Show First 20 Lines • Show All 633 Lines • ▼ Show 20 Lines | private function buildJoinsClause($conn_r) { | ||||
if ($this->reviewers) { | if ($this->reviewers) { | ||||
$joins[] = qsprintf( | $joins[] = qsprintf( | ||||
$conn_r, | $conn_r, | ||||
'JOIN %T e_reviewers ON e_reviewers.src = r.phid '. | 'JOIN %T e_reviewers ON e_reviewers.src = r.phid '. | ||||
'AND e_reviewers.type = %s '. | 'AND e_reviewers.type = %s '. | ||||
'AND e_reviewers.dst in (%Ls)', | 'AND e_reviewers.dst in (%Ls)', | ||||
PhabricatorEdgeConfig::TABLE_NAME_EDGE, | PhabricatorEdgeConfig::TABLE_NAME_EDGE, | ||||
PhabricatorEdgeConfig::TYPE_DREV_HAS_REVIEWER, | DifferentialRevisionHasReviewerEdgeType::EDGECONST, | ||||
$this->reviewers); | $this->reviewers); | ||||
} | } | ||||
if ($this->draftAuthors) { | if ($this->draftAuthors) { | ||||
$differential_draft = new DifferentialDraft(); | $differential_draft = new DifferentialDraft(); | ||||
$joins[] = qsprintf( | $joins[] = qsprintf( | ||||
$conn_r, | $conn_r, | ||||
'JOIN %T has_draft ON has_draft.objectPHID = r.phid '. | 'JOIN %T has_draft ON has_draft.objectPHID = r.phid '. | ||||
▲ Show 20 Lines • Show All 244 Lines • ▼ Show 20 Lines | switch ($this->order) { | ||||
default: | default: | ||||
throw new Exception("Unknown query order constant '{$this->order}'."); | throw new Exception("Unknown query order constant '{$this->order}'."); | ||||
} | } | ||||
} | } | ||||
private function loadRelationships($conn_r, array $revisions) { | private function loadRelationships($conn_r, array $revisions) { | ||||
assert_instances_of($revisions, 'DifferentialRevision'); | assert_instances_of($revisions, 'DifferentialRevision'); | ||||
$type_reviewer = PhabricatorEdgeConfig::TYPE_DREV_HAS_REVIEWER; | $type_reviewer = DifferentialRevisionHasReviewerEdgeType::EDGECONST; | ||||
$type_subscriber = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_SUBSCRIBER; | $type_subscriber = PhabricatorEdgeConfig::TYPE_OBJECT_HAS_SUBSCRIBER; | ||||
$edges = id(new PhabricatorEdgeQuery()) | $edges = id(new PhabricatorEdgeQuery()) | ||||
->withSourcePHIDs(mpull($revisions, 'getPHID')) | ->withSourcePHIDs(mpull($revisions, 'getPHID')) | ||||
->withEdgeTypes(array($type_reviewer, $type_subscriber)) | ->withEdgeTypes(array($type_reviewer, $type_subscriber)) | ||||
->setOrder(PhabricatorEdgeQuery::ORDER_OLDEST_FIRST) | ->setOrder(PhabricatorEdgeQuery::ORDER_OLDEST_FIRST) | ||||
->execute(); | ->execute(); | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | private function loadHashes( | ||||
} | } | ||||
} | } | ||||
private function loadReviewers( | private function loadReviewers( | ||||
AphrontDatabaseConnection $conn_r, | AphrontDatabaseConnection $conn_r, | ||||
array $revisions) { | array $revisions) { | ||||
assert_instances_of($revisions, 'DifferentialRevision'); | assert_instances_of($revisions, 'DifferentialRevision'); | ||||
$edge_type = PhabricatorEdgeConfig::TYPE_DREV_HAS_REVIEWER; | $edge_type = DifferentialRevisionHasReviewerEdgeType::EDGECONST; | ||||
$edges = id(new PhabricatorEdgeQuery()) | $edges = id(new PhabricatorEdgeQuery()) | ||||
->withSourcePHIDs(mpull($revisions, 'getPHID')) | ->withSourcePHIDs(mpull($revisions, 'getPHID')) | ||||
->withEdgeTypes(array($edge_type)) | ->withEdgeTypes(array($edge_type)) | ||||
->needEdgeData(true) | ->needEdgeData(true) | ||||
->setOrder(PhabricatorEdgeQuery::ORDER_OLDEST_FIRST) | ->setOrder(PhabricatorEdgeQuery::ORDER_OLDEST_FIRST) | ||||
->execute(); | ->execute(); | ||||
▲ Show 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | private function loadReviewerAuthority( | ||||
$allow_self) { | $allow_self) { | ||||
$revision_map = mpull($revisions, null, 'getPHID'); | $revision_map = mpull($revisions, null, 'getPHID'); | ||||
$viewer_phid = $this->getViewer()->getPHID(); | $viewer_phid = $this->getViewer()->getPHID(); | ||||
// Find all the project reviewers which the user may have authority over. | // Find all the project reviewers which the user may have authority over. | ||||
$project_phids = array(); | $project_phids = array(); | ||||
$project_type = PhabricatorProjectProjectPHIDType::TYPECONST; | $project_type = PhabricatorProjectProjectPHIDType::TYPECONST; | ||||
$edge_type = PhabricatorEdgeConfig::TYPE_DREV_HAS_REVIEWER; | $edge_type = DifferentialRevisionHasReviewerEdgeType::EDGECONST; | ||||
foreach ($edges as $src => $types) { | foreach ($edges as $src => $types) { | ||||
if (!$allow_self) { | if (!$allow_self) { | ||||
if ($revision_map[$src]->getAuthorPHID() == $viewer_phid) { | if ($revision_map[$src]->getAuthorPHID() == $viewer_phid) { | ||||
// If self-review isn't permitted, the user will never have | // If self-review isn't permitted, the user will never have | ||||
// authority over projects on revisions they authored because you | // authority over projects on revisions they authored because you | ||||
// can't accept your own revisions, so we don't need to load any | // can't accept your own revisions, so we don't need to load any | ||||
// data about these reviewers. | // data about these reviewers. | ||||
continue; | continue; | ||||
Show All 33 Lines |