1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-26 13:39:08 +01:00
phorge-phorge/src/applications/project/controller/PhabricatorProjectLockController.php
Austin McKinley 179d80dd57 Migrate Project lock to modular transactions
Summary: See T12673

Test Plan: Unit tests pass. Locked and unlocked a project and saw timeline changes.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley

Differential Revision: https://secure.phabricator.com/D17986
2017-05-21 11:36:53 -07:00

86 lines
2.3 KiB
PHP

<?php
final class PhabricatorProjectLockController
extends PhabricatorProjectController {
public function shouldAllowPublic() {
return true;
}
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$this->requireApplicationCapability(
ProjectCanLockProjectsCapability::CAPABILITY);
$id = $request->getURIData('id');
$project = id(new PhabricatorProjectQuery())
->setViewer($viewer)
->withIDs(array($id))
->requireCapabilities(
array(
PhabricatorPolicyCapability::CAN_VIEW,
PhabricatorPolicyCapability::CAN_EDIT,
))
->executeOne();
if (!$project) {
return new Aphront404Response();
}
$done_uri = "/project/members/{$id}/";
if (!$project->supportsEditMembers()) {
return $this->newDialog()
->setTitle(pht('Membership Immutable'))
->appendChild(
pht('This project does not support editing membership.'))
->addCancelButton($done_uri);
}
$is_locked = $project->getIsMembershipLocked();
if ($request->isFormPost()) {
$xactions = array();
if ($is_locked) {
$new_value = 0;
} else {
$new_value = 1;
}
$xactions[] = id(new PhabricatorProjectTransaction())
->setTransactionType(
PhabricatorProjectLockTransaction::TRANSACTIONTYPE)
->setNewValue($new_value);
$editor = id(new PhabricatorProjectTransactionEditor())
->setActor($viewer)
->setContentSourceFromRequest($request)
->setContinueOnNoEffect(true)
->setContinueOnMissingFields(true)
->applyTransactions($project, $xactions);
return id(new AphrontRedirectResponse())->setURI($done_uri);
}
if ($project->getIsMembershipLocked()) {
$title = pht('Unlock Project');
$body = pht(
'If you unlock this project, members will be free to leave.');
$button = pht('Unlock Project');
} else {
$title = pht('Lock Project');
$body = pht(
'If you lock this project, members will be prevented from '.
'leaving it.');
$button = pht('Lock Project');
}
return $this->newDialog()
->setTitle($title)
->appendParagraph($body)
->addSubmitbutton($button)
->addCancelButton($done_uri);
}
}