Path: blob/master/src/applications/differential/field/DifferentialReviewersCommitMessageField.php
12256 views
<?php12final class DifferentialReviewersCommitMessageField3extends DifferentialCommitMessageField {45const FIELDKEY = 'reviewerPHIDs';67public function getFieldName() {8return pht('Reviewers');9}1011public function getFieldOrder() {12return 4000;13}1415public function getFieldAliases() {16return array(17'Reviewer',18);19}2021public function parseFieldValue($value) {22$results = $this->parseObjectList(23$value,24array(25PhabricatorPeopleUserPHIDType::TYPECONST,26PhabricatorProjectProjectPHIDType::TYPECONST,27PhabricatorOwnersPackagePHIDType::TYPECONST,28),29false,30array('!'));3132return $this->flattenReviewers($results);33}3435public function readFieldValueFromConduit($value) {36return $this->readStringListFieldValueFromConduit($value);37}3839public function readFieldValueFromObject(DifferentialRevision $revision) {40if (!$revision->getPHID()) {41return array();42}4344$status_blocking = DifferentialReviewerStatus::STATUS_BLOCKING;4546$results = array();47foreach ($revision->getReviewers() as $reviewer) {48if ($reviewer->getReviewerStatus() == $status_blocking) {49$suffixes = array('!' => '!');50} else {51$suffixes = array();52}5354$results[] = array(55'phid' => $reviewer->getReviewerPHID(),56'suffixes' => $suffixes,57);58}5960return $this->flattenReviewers($results);61}6263public function renderFieldValue($value) {64$value = $this->inflateReviewers($value);6566$phid_list = array();67$suffix_map = array();68foreach ($value as $reviewer) {69$phid = $reviewer['phid'];70$phid_list[] = $phid;71if (isset($reviewer['suffixes']['!'])) {72$suffix_map[$phid] = '!';73}74}7576return $this->renderHandleList($phid_list, $suffix_map);77}7879public function getFieldTransactions($value) {80$value = $this->inflateReviewers($value);8182$reviewer_list = array();83foreach ($value as $reviewer) {84$phid = $reviewer['phid'];85if (isset($reviewer['suffixes']['!'])) {86$reviewer_list[] = 'blocking('.$phid.')';87} else {88$reviewer_list[] = $phid;89}90}9192$xaction_key = DifferentialRevisionReviewersTransaction::EDITKEY;93$xaction_type = "{$xaction_key}.set";9495return array(96array(97'type' => $xaction_type,98'value' => $reviewer_list,99),100);101}102103private function flattenReviewers(array $values) {104// NOTE: For now, `arc` relies on this field returning only scalars, so we105// need to reduce the results into scalars. See T10981.106$result = array();107108foreach ($values as $value) {109$result[] = $value['phid'].implode('', array_keys($value['suffixes']));110}111112return $result;113}114115private function inflateReviewers(array $values) {116$result = array();117118foreach ($values as $value) {119if (substr($value, -1) == '!') {120$value = substr($value, 0, -1);121$suffixes = array('!' => '!');122} else {123$suffixes = array();124}125126$result[] = array(127'phid' => $value,128'suffixes' => $suffixes,129);130}131132return $result;133}134135}136137138