protected function getMailTo(PhabricatorLiskDAO $object)
 {
     $phids = array();
     $phids[] = $object->getAuthorPHID();
     $phids[] = $this->requireActor()->getPHID();
     $question = id(new PonderQuestionQuery())->setViewer($this->requireActor())->withIDs(array($object->getQuestionID()))->executeOne();
     $phids[] = $question->getAuthorPHID();
     return $phids;
 }
 protected function getMailTo(PhabricatorLiskDAO $object)
 {
     return array($object->getAuthorPHID(), $this->requireActor()->getPHID());
 }
 protected function didApplyHeraldRules(PhabricatorLiskDAO $object, HeraldAdapter $adapter, HeraldTranscript $transcript)
 {
     $xactions = array();
     // Build a transaction to adjust reviewers.
     $reviewers = array(DifferentialReviewerStatus::STATUS_ADDED => array_keys($adapter->getReviewersAddedByHerald()), DifferentialReviewerStatus::STATUS_BLOCKING => array_keys($adapter->getBlockingReviewersAddedByHerald()));
     $old_reviewers = $object->getReviewerStatus();
     $old_reviewers = mpull($old_reviewers, null, 'getReviewerPHID');
     $value = array();
     foreach ($reviewers as $status => $phids) {
         foreach ($phids as $phid) {
             if ($phid == $object->getAuthorPHID()) {
                 // Don't try to add the revision's author as a reviewer, since this
                 // isn't valid and doesn't make sense.
                 continue;
             }
             // If the target is already a reviewer, don't try to change anything
             // if their current status is at least as strong as the new status.
             // For example, don't downgrade an "Accepted" to a "Blocking Reviewer".
             $old_reviewer = idx($old_reviewers, $phid);
             if ($old_reviewer) {
                 $old_status = $old_reviewer->getStatus();
                 $old_strength = DifferentialReviewerStatus::getStatusStrength($old_status);
                 $new_strength = DifferentialReviewerStatus::getStatusStrength($status);
                 if ($new_strength <= $old_strength) {
                     continue;
                 }
             }
             $value['+'][$phid] = array('data' => array('status' => $status));
         }
     }
     if ($value) {
         $edge_reviewer = DifferentialRevisionHasReviewerEdgeType::EDGECONST;
         $xactions[] = id(new DifferentialTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', $edge_reviewer)->setNewValue($value);
     }
     // Require legalpad document signatures.
     $legal_phids = $adapter->getRequiredSignatureDocumentPHIDs();
     if ($legal_phids) {
         // We only require signatures of documents which have not already
         // been signed. In general, this reduces the amount of churn that
         // signature rules cause.
         $signatures = id(new LegalpadDocumentSignatureQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withDocumentPHIDs($legal_phids)->withSignerPHIDs(array($object->getAuthorPHID()))->execute();
         $signed_phids = mpull($signatures, 'getDocumentPHID');
         $legal_phids = array_diff($legal_phids, $signed_phids);
         // If we still have something to trigger, add the edges.
         if ($legal_phids) {
             $edge_legal = LegalpadObjectNeedsSignatureEdgeType::EDGECONST;
             $xactions[] = id(new DifferentialTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDGE)->setMetadataValue('edge:type', $edge_legal)->setNewValue(array('+' => array_fuse($legal_phids)));
         }
     }
     // Apply build plans.
     HarbormasterBuildable::applyBuildPlans($adapter->getDiff()->getPHID(), $adapter->getPHID(), $adapter->getBuildPlans());
     return $xactions;
 }
Пример #4
0
 protected function getMailTo(PhabricatorLiskDAO $object)
 {
     $phids = array();
     if ($object->getAuthorPHID()) {
         $phids[] = $object->getAuthorPHID();
     }
     $status_resigned = PhabricatorAuditStatusConstants::RESIGNED;
     foreach ($object->getAudits() as $audit) {
         if ($audit->getAuditStatus() != $status_resigned) {
             $phids[] = $audit->getAuditorPHID();
         }
     }
     return $phids;
 }
 protected function didApplyHeraldRules(PhabricatorLiskDAO $object, HeraldAdapter $adapter, HeraldTranscript $transcript)
 {
     $repository = $object->getRepository();
     if (!$repository) {
         return array();
     }
     if (!$this->affectedPaths) {
         return array();
     }
     $packages = PhabricatorOwnersPackage::loadAffectedPackages($repository, $this->affectedPaths);
     if (!$packages) {
         return array();
     }
     // Remove packages that the revision author is an owner of. If you own
     // code, you don't need another owner to review it.
     $authority = id(new PhabricatorOwnersPackageQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withPHIDs(mpull($packages, 'getPHID'))->withAuthorityPHIDs(array($object->getAuthorPHID()))->execute();
     $authority = mpull($authority, null, 'getPHID');
     foreach ($packages as $key => $package) {
         $package_phid = $package->getPHID();
         if (isset($authority[$package_phid])) {
             unset($packages[$key]);
             continue;
         }
     }
     if (!$packages) {
         return array();
     }
     $auto_subscribe = array();
     $auto_review = array();
     $auto_block = array();
     foreach ($packages as $package) {
         switch ($package->getAutoReview()) {
             case PhabricatorOwnersPackage::AUTOREVIEW_SUBSCRIBE:
                 $auto_subscribe[] = $package;
                 break;
             case PhabricatorOwnersPackage::AUTOREVIEW_REVIEW:
                 $auto_review[] = $package;
                 break;
             case PhabricatorOwnersPackage::AUTOREVIEW_BLOCK:
                 $auto_block[] = $package;
                 break;
             case PhabricatorOwnersPackage::AUTOREVIEW_NONE:
             default:
                 break;
         }
     }
     $owners_phid = id(new PhabricatorOwnersApplication())->getPHID();
     $xactions = array();
     if ($auto_subscribe) {
         $xactions[] = $object->getApplicationTransactionTemplate()->setAuthorPHID($owners_phid)->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)->setNewValue(array('+' => mpull($auto_subscribe, 'getPHID')));
     }
     $specs = array(array($auto_review, false), array($auto_block, true));
     foreach ($specs as $spec) {
         list($reviewers, $blocking) = $spec;
         if (!$reviewers) {
             continue;
         }
         $phids = mpull($reviewers, 'getPHID');
         $xaction = $this->newAutoReviewTransaction($object, $phids, $blocking);
         if ($xaction) {
             $xactions[] = $xaction;
         }
     }
     return $xactions;
 }
 protected function getMailTo(PhabricatorLiskDAO $object)
 {
     $phids = array();
     $phids[] = $object->getAuthorPHID();
     foreach ($object->getReviewerStatus() as $reviewer) {
         $phids[] = $reviewer->getReviewerPHID();
     }
     return $phids;
 }
 protected function getMailTo(PhabricatorLiskDAO $object)
 {
     $phids = array();
     if ($object->getAuthorPHID()) {
         $phids[] = $object->getAuthorPHID();
     }
     $status_resigned = PhabricatorAuditStatusConstants::RESIGNED;
     foreach ($object->getAudits() as $audit) {
         if (!$audit->isInteresting()) {
             // Don't send mail to uninteresting auditors, like packages which
             // own this code but which audits have not triggered for.
             continue;
         }
         if ($audit->getAuditStatus() != $status_resigned) {
             $phids[] = $audit->getAuditorPHID();
         }
     }
     $phids[] = $this->getActingAsPHID();
     return $phids;
 }