Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/query/DifferentialRevisionQuery.php
| Show First 20 Lines • Show All 467 Lines • ▼ Show 20 Lines | if ($this->needFlags) { | ||||
| foreach ($revisions as $revision) { | foreach ($revisions as $revision) { | ||||
| $revision->attachFlag( | $revision->attachFlag( | ||||
| $viewer, | $viewer, | ||||
| idx($flags, $revision->getPHID())); | idx($flags, $revision->getPHID())); | ||||
| } | } | ||||
| } | } | ||||
| if ($this->needDrafts) { | if ($this->needDrafts) { | ||||
| $drafts = id(new DifferentialDraft())->loadAllWhere( | $viewer_phid = $viewer->getPHID(); | ||||
| 'authorPHID = %s AND objectPHID IN (%Ls)', | $draft_type = PhabricatorObjectHasDraftEdgeType::EDGECONST; | ||||
| $viewer->getPHID(), | |||||
| mpull($revisions, 'getPHID')); | if (!$viewer_phid) { | ||||
| $drafts = mgroup($drafts, 'getObjectPHID'); | // Viewers without a valid PHID can never have drafts. | ||||
| foreach ($revisions as $revision) { | foreach ($revisions as $revision) { | ||||
| $revision->attachDrafts( | $revision->attachHasDraft($viewer, false); | ||||
| $viewer, | } | ||||
| idx($drafts, $revision->getPHID(), array())); | } else { | ||||
| $edge_query = id(new PhabricatorEdgeQuery()) | |||||
| ->withSourcePHIDs(mpull($revisions, 'getPHID')) | |||||
| ->withEdgeTypes( | |||||
| array( | |||||
| $draft_type, | |||||
| )) | |||||
| ->withDestinationPHIDs(array($viewer_phid)); | |||||
| $edge_query->execute(); | |||||
| foreach ($revisions as $revision) { | |||||
| $has_draft = (bool)$edge_query->getDestinationPHIDs( | |||||
| array( | |||||
| $revision->getPHID(), | |||||
| )); | |||||
| $revision->attachHasDraft($viewer, $has_draft); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return $revisions; | return $revisions; | ||||
| } | } | ||||
| private function loadData() { | private function loadData() { | ||||
| $table = $this->newResultObject(); | $table = $this->newResultObject(); | ||||
| ▲ Show 20 Lines • Show All 123 Lines • ▼ Show 20 Lines | if ($this->reviewers) { | ||||
| '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, | ||||
| DifferentialRevisionHasReviewerEdgeType::EDGECONST, | DifferentialRevisionHasReviewerEdgeType::EDGECONST, | ||||
| $this->reviewers); | $this->reviewers); | ||||
| } | } | ||||
| if ($this->draftAuthors) { | if ($this->draftAuthors) { | ||||
| $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.srcPHID = r.phid | ||||
| 'AND has_draft.authorPHID IN (%Ls)', | AND has_draft.type = %s | ||||
| $differential_draft->getTableName(), | AND has_draft.dstPHID IN (%Ls)', | ||||
| PhabricatorEdgeConfig::TABLE_NAME_EDGE, | |||||
| PhabricatorObjectHasDraftEdgeType::EDGECONST, | |||||
| $this->draftAuthors); | $this->draftAuthors); | ||||
| } | } | ||||
| if ($this->commitPHIDs) { | if ($this->commitPHIDs) { | ||||
| $joins[] = qsprintf( | $joins[] = qsprintf( | ||||
| $conn_r, | $conn_r, | ||||
| 'JOIN %T commits ON commits.revisionID = r.id', | 'JOIN %T commits ON commits.revisionID = r.id', | ||||
| DifferentialRevision::TABLE_COMMIT); | DifferentialRevision::TABLE_COMMIT); | ||||
| ▲ Show 20 Lines • Show All 477 Lines • Show Last 20 Lines | |||||