Path: blob/master/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php
12241 views
<?php12abstract class DiffusionCommitAuditTransaction3extends DiffusionCommitActionTransaction {45protected function getCommitActionGroupKey() {6return DiffusionCommitEditEngine::ACTIONGROUP_AUDIT;7}89public function generateOldValue($object) {10return false;11}1213protected function isViewerAnyAuditor(14PhabricatorRepositoryCommit $commit,15PhabricatorUser $viewer) {16return ($this->getViewerAuditStatus($commit, $viewer) !== null);17}1819protected function isViewerAnyActiveAuditor(20PhabricatorRepositoryCommit $commit,21PhabricatorUser $viewer) {2223// This omits inactive states; currently just "Resigned".24$active = array(25PhabricatorAuditRequestStatus::AUDIT_REQUIRED,26PhabricatorAuditRequestStatus::CONCERNED,27PhabricatorAuditRequestStatus::ACCEPTED,28PhabricatorAuditRequestStatus::AUDIT_REQUESTED,29);30$active = array_fuse($active);3132$viewer_status = $this->getViewerAuditStatus($commit, $viewer);3334return isset($active[$viewer_status]);35}3637protected function isViewerFullyAccepted(38PhabricatorRepositoryCommit $commit,39PhabricatorUser $viewer) {40return $this->isViewerAuditStatusFullyAmong(41$commit,42$viewer,43array(44PhabricatorAuditRequestStatus::ACCEPTED,45));46}4748protected function isViewerFullyRejected(49PhabricatorRepositoryCommit $commit,50PhabricatorUser $viewer) {51return $this->isViewerAuditStatusFullyAmong(52$commit,53$viewer,54array(55PhabricatorAuditRequestStatus::CONCERNED,56));57}5859protected function getViewerAuditStatus(60PhabricatorRepositoryCommit $commit,61PhabricatorUser $viewer) {6263if (!$viewer->getPHID()) {64return null;65}6667foreach ($commit->getAudits() as $audit) {68if ($audit->getAuditorPHID() != $viewer->getPHID()) {69continue;70}7172return $audit->getAuditStatus();73}7475return null;76}7778protected function isViewerAuditStatusFullyAmong(79PhabricatorRepositoryCommit $commit,80PhabricatorUser $viewer,81array $status_list) {8283$status = $this->getViewerAuditStatus($commit, $viewer);84if ($status === null) {85return false;86}8788$status_map = array_fuse($status_list);89foreach ($commit->getAudits() as $audit) {90if (!$commit->hasAuditAuthority($viewer, $audit)) {91continue;92}9394$status = $audit->getAuditStatus();95if (isset($status_map[$status])) {96continue;97}9899return false;100}101102return true;103}104105protected function applyAuditorEffect(106PhabricatorRepositoryCommit $commit,107PhabricatorUser $viewer,108$value,109$status) {110111$actor = $this->getActor();112$acting_phid = $this->getActingAsPHID();113114$audits = $commit->getAudits();115$audits = mpull($audits, null, 'getAuditorPHID');116117$map = array();118119$with_authority = ($status != PhabricatorAuditRequestStatus::RESIGNED);120if ($with_authority) {121foreach ($audits as $audit) {122if ($commit->hasAuditAuthority($actor, $audit, $acting_phid)) {123$map[$audit->getAuditorPHID()] = $status;124}125}126}127128// In all cases, you affect yourself.129$map[$viewer->getPHID()] = $status;130131$this->updateAudits($commit, $map);132}133134}135136137