Differential D18398 Diff 44240 src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/xaction/DifferentialRevisionReviewTransaction.php
| Show First 20 Lines • Show All 204 Lines • ▼ Show 20 Lines | protected function applyReviewerEffect( | ||||
| // If we have a specific list of reviewers to act on, usually because the | // If we have a specific list of reviewers to act on, usually because the | ||||
| // user has submitted a specific list of reviewers to act as by | // user has submitted a specific list of reviewers to act as by | ||||
| // unchecking some checkboxes under "Accept", only affect those reviewers. | // unchecking some checkboxes under "Accept", only affect those reviewers. | ||||
| if (is_array($value)) { | if (is_array($value)) { | ||||
| $map = array_select_keys($map, $value); | $map = array_select_keys($map, $value); | ||||
| } | } | ||||
| // Convert reviewer statuses into edge data. | |||||
| foreach ($map as $reviewer_phid => $reviewer_status) { | |||||
| $map[$reviewer_phid] = array( | |||||
| 'data' => array( | |||||
| 'status' => $reviewer_status, | |||||
| ), | |||||
| ); | |||||
| } | |||||
| // This is currently double-writing: to the old (edge) store and the new | |||||
| // (reviewer) store. Do the old edge write first. | |||||
| $src_phid = $revision->getPHID(); | |||||
| $edge_type = DifferentialRevisionHasReviewerEdgeType::EDGECONST; | |||||
| $editor = new PhabricatorEdgeEditor(); | |||||
| foreach ($map as $dst_phid => $edge_data) { | |||||
| if ($status == DifferentialReviewerStatus::STATUS_RESIGNED) { | |||||
| // TODO: For now, we just remove these reviewers. In the future, we will | |||||
| // store resignations explicitly. | |||||
| $editor->removeEdge($src_phid, $edge_type, $dst_phid); | |||||
| } else { | |||||
| $editor->addEdge($src_phid, $edge_type, $dst_phid, $edge_data); | |||||
| } | |||||
| } | |||||
| $editor->save(); | |||||
| // Now, do the new write. | // Now, do the new write. | ||||
| if ($map) { | if ($map) { | ||||
| $diff = $this->getEditor()->getActiveDiff($revision); | $diff = $this->getEditor()->getActiveDiff($revision); | ||||
| if ($diff) { | if ($diff) { | ||||
| $diff_phid = $diff->getPHID(); | $diff_phid = $diff->getPHID(); | ||||
| } else { | } else { | ||||
| $diff_phid = null; | $diff_phid = null; | ||||
| } | } | ||||
| $table = new DifferentialReviewer(); | $table = new DifferentialReviewer(); | ||||
| $src_phid = $revision->getPHID(); | |||||
| $reviewers = $table->loadAllWhere( | $reviewers = $table->loadAllWhere( | ||||
| 'revisionPHID = %s AND reviewerPHID IN (%Ls)', | 'revisionPHID = %s AND reviewerPHID IN (%Ls)', | ||||
| $src_phid, | $src_phid, | ||||
| array_keys($map)); | array_keys($map)); | ||||
| $reviewers = mpull($reviewers, null, 'getReviewerPHID'); | $reviewers = mpull($reviewers, null, 'getReviewerPHID'); | ||||
| foreach ($map as $dst_phid => $edge_data) { | foreach (array_keys($map) as $dst_phid) { | ||||
| $reviewer = idx($reviewers, $dst_phid); | $reviewer = idx($reviewers, $dst_phid); | ||||
| if (!$reviewer) { | if (!$reviewer) { | ||||
| $reviewer = id(new DifferentialReviewer()) | $reviewer = id(new DifferentialReviewer()) | ||||
| ->setRevisionPHID($src_phid) | ->setRevisionPHID($src_phid) | ||||
| ->setReviewerPHID($dst_phid); | ->setReviewerPHID($dst_phid); | ||||
| } | } | ||||
| $old_status = $reviewer->getReviewerStatus(); | $old_status = $reviewer->getReviewerStatus(); | ||||
| Show All 26 Lines | |||||