Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php b/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php
index 64d32d1700..86656d85a6 100644
--- a/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php
+++ b/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php
@@ -1,101 +1,118 @@
<?php
abstract class DiffusionCommitAuditTransaction
extends DiffusionCommitActionTransaction {
protected function getCommitActionGroupKey() {
return DiffusionCommitEditEngine::ACTIONGROUP_AUDIT;
}
protected function isViewerAnyAuditor(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer) {
return ($this->getViewerAuditStatus($commit, $viewer) !== null);
}
+ protected function isViewerAnyActiveAuditor(
+ PhabricatorRepositoryCommit $commit,
+ PhabricatorUser $viewer) {
+
+ // This omits various inactive states like "Resigned" and "Not Required".
+
+ return $this->isViewerAuditStatusAmong(
+ $commit,
+ $viewer,
+ array(
+ PhabricatorAuditStatusConstants::AUDIT_REQUIRED,
+ PhabricatorAuditStatusConstants::CONCERNED,
+ PhabricatorAuditStatusConstants::ACCEPTED,
+ PhabricatorAuditStatusConstants::AUDIT_REQUESTED,
+ ));
+ }
+
protected function isViewerAcceptingAuditor(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer) {
return $this->isViewerAuditStatusAmong(
$commit,
$viewer,
array(
PhabricatorAuditStatusConstants::ACCEPTED,
));
}
protected function isViewerRejectingAuditor(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer) {
return $this->isViewerAuditStatusAmong(
$commit,
$viewer,
array(
PhabricatorAuditStatusConstants::CONCERNED,
));
}
protected function getViewerAuditStatus(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer) {
if (!$viewer->getPHID()) {
return null;
}
foreach ($commit->getAudits() as $audit) {
if ($audit->getAuditorPHID() != $viewer->getPHID()) {
continue;
}
return $audit->getAuditStatus();
}
return null;
}
protected function isViewerAuditStatusAmong(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer,
array $status_list) {
$status = $this->getViewerAuditStatus($commit, $viewer);
if ($status === null) {
return false;
}
$status_map = array_fuse($status_list);
return isset($status_map[$status]);
}
protected function applyAuditorEffect(
PhabricatorRepositoryCommit $commit,
PhabricatorUser $viewer,
$value,
$status) {
$audits = $commit->getAudits();
$audits = mpull($audits, null, 'getAuditorPHID');
$map = array();
$with_authority = ($status != PhabricatorAuditStatusConstants::RESIGNED);
if ($with_authority) {
$has_authority = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser(
$viewer);
$has_authority = array_fuse($has_authority);
foreach ($audits as $audit) {
$auditor_phid = $audit->getAuditorPHID();
if (isset($has_authority[$auditor_phid])) {
$map[$auditor_phid] = $status;
}
}
}
// In all cases, you affect yourself.
$map[$viewer->getPHID()] = $status;
$this->updateAudits($commit, $map);
}
}
diff --git a/src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php b/src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php
index 1a553e3471..4a68252414 100644
--- a/src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php
+++ b/src/applications/diffusion/xaction/DiffusionCommitResignTransaction.php
@@ -1,62 +1,62 @@
<?php
final class DiffusionCommitResignTransaction
extends DiffusionCommitAuditTransaction {
const TRANSACTIONTYPE = 'diffusion.commit.resign';
const ACTIONKEY = 'resign';
protected function getCommitActionLabel() {
return pht('Resign as Auditor');
}
protected function getCommitActionDescription() {
return pht('You will resign as an auditor for this commit.');
}
public function getIcon() {
return 'fa-flag';
}
public function getColor() {
return 'orange';
}
protected function getCommitActionOrder() {
return 700;
}
public function generateOldValue($object) {
$actor = $this->getActor();
- return !$this->isViewerAnyAuditor($object, $actor);
+ return !$this->isViewerAnyActiveAuditor($object, $actor);
}
public function applyExternalEffects($object, $value) {
$status = PhabricatorAuditStatusConstants::RESIGNED;
$actor = $this->getActor();
$this->applyAuditorEffect($object, $actor, $value, $status);
}
protected function validateAction($object, PhabricatorUser $viewer) {
- if (!$this->isViewerAnyAuditor($object, $viewer)) {
+ if (!$this->isViewerAnyActiveAuditor($object, $viewer)) {
throw new Exception(
pht(
'You can not resign from this commit because you are not an '.
- 'auditor.'));
+ 'active auditor.'));
}
}
public function getTitle() {
return pht(
'%s resigned from this commit.',
$this->renderAuthor());
}
public function getTitleForFeed() {
return pht(
'%s resigned from %s.',
$this->renderAuthor(),
$this->renderObject());
}
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Jul 28, 7:47 PM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
187440
Default Alt Text
(5 KB)

Event Timeline