mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-10 23:01:04 +01:00
Allow repositories to be activate/deactivated in a transaction-aware way
Summary: Adds activate/deactivate action plus transactions. Test Plan: See screenshot. Reviewers: btrahan Reviewed By: btrahan CC: aran Differential Revision: https://secure.phabricator.com/D7057
This commit is contained in:
parent
a82992e9a5
commit
63818818cb
6 changed files with 117 additions and 2 deletions
|
@ -494,6 +494,7 @@ phutil_register_library_map(array(
|
||||||
'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
|
'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php',
|
||||||
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
|
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
|
||||||
'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
|
'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
|
||||||
|
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
|
||||||
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
|
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
|
||||||
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
|
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
|
||||||
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
|
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
|
||||||
|
@ -2554,6 +2555,7 @@ phutil_register_library_map(array(
|
||||||
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
||||||
'DiffusionRepositoryController' => 'DiffusionController',
|
'DiffusionRepositoryController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryCreateController' => 'DiffusionController',
|
'DiffusionRepositoryCreateController' => 'DiffusionController',
|
||||||
|
'DiffusionRepositoryEditActivateController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
|
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditController' => 'DiffusionController',
|
'DiffusionRepositoryEditController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditEncodingController' => 'DiffusionController',
|
'DiffusionRepositoryEditEncodingController' => 'DiffusionController',
|
||||||
|
|
|
@ -67,6 +67,7 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
|
||||||
'' => 'DiffusionRepositoryEditController',
|
'' => 'DiffusionRepositoryEditController',
|
||||||
'basic/' => 'DiffusionRepositoryEditBasicController',
|
'basic/' => 'DiffusionRepositoryEditBasicController',
|
||||||
'encoding/' => 'DiffusionRepositoryEditEncodingController',
|
'encoding/' => 'DiffusionRepositoryEditEncodingController',
|
||||||
|
'activate/' => 'DiffusionRepositoryEditActivateController',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'inline/' => array(
|
'inline/' => array(
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class DiffusionRepositoryEditActivateController
|
||||||
|
extends DiffusionController {
|
||||||
|
|
||||||
|
public function processRequest() {
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$viewer = $request->getUser();
|
||||||
|
$drequest = $this->diffusionRequest;
|
||||||
|
$repository = $drequest->getRepository();
|
||||||
|
|
||||||
|
$repository = id(new PhabricatorRepositoryQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->requireCapabilities(
|
||||||
|
array(
|
||||||
|
PhabricatorPolicyCapability::CAN_VIEW,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT,
|
||||||
|
))
|
||||||
|
->withIDs(array($repository->getID()))
|
||||||
|
->executeOne();
|
||||||
|
|
||||||
|
if (!$repository) {
|
||||||
|
return new Aphront404Response();
|
||||||
|
}
|
||||||
|
|
||||||
|
$edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
$xaction = id(new PhabricatorRepositoryTransaction())
|
||||||
|
->setTransactionType(PhabricatorRepositoryTransaction::TYPE_ACTIVATE)
|
||||||
|
->setNewValue(!$repository->isTracked());
|
||||||
|
|
||||||
|
$editor = id(new PhabricatorRepositoryEditor())
|
||||||
|
->setContinueOnNoEffect(true)
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setActor($viewer)
|
||||||
|
->applyTransactions($repository, array($xaction));
|
||||||
|
|
||||||
|
return id(new AphrontReloadResponse())->setURI($edit_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
$dialog = id(new AphrontDialogView())
|
||||||
|
->setUser($viewer);
|
||||||
|
|
||||||
|
if ($repository->isTracked()) {
|
||||||
|
$dialog
|
||||||
|
->setTitle(pht('Deactivate Repository?'))
|
||||||
|
->appendChild(
|
||||||
|
pht('Deactivate this repository?'))
|
||||||
|
->addSubmitButton(pht('Deactivate Repository'))
|
||||||
|
->addCancelButton($edit_uri);
|
||||||
|
} else {
|
||||||
|
$dialog
|
||||||
|
->setTitle(pht('Activate Repository?'))
|
||||||
|
->appendChild(
|
||||||
|
pht('Activate this repository?'))
|
||||||
|
->addSubmitButton(pht('Activate Repository'))
|
||||||
|
->addCancelButton($edit_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id(new AphrontDialogResponse())
|
||||||
|
->setDialog($dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -18,8 +18,17 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
||||||
|
|
||||||
$title = pht('Edit %s', $repository->getName());
|
$title = pht('Edit %s', $repository->getName());
|
||||||
|
|
||||||
$content[] = id(new PHUIHeaderView())
|
$header = id(new PHUIHeaderView())
|
||||||
->setHeader($title);
|
->setHeader($title);
|
||||||
|
if (!$repository->isTracked()) {
|
||||||
|
$header->addTag(
|
||||||
|
id(new PhabricatorTagView())
|
||||||
|
->setType(PhabricatorTagView::TYPE_STATE)
|
||||||
|
->setName(pht('Inactive'))
|
||||||
|
->setBackgroundColor(PhabricatorTagView::COLOR_BLACK));
|
||||||
|
}
|
||||||
|
|
||||||
|
$content[] = $header;
|
||||||
|
|
||||||
$content[] = $this->buildBasicActions($repository);
|
$content[] = $this->buildBasicActions($repository);
|
||||||
$content[] = $this->buildBasicProperties($repository);
|
$content[] = $this->buildBasicProperties($repository);
|
||||||
|
@ -82,9 +91,28 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
||||||
->setIcon('edit')
|
->setIcon('edit')
|
||||||
->setName(pht('Edit Basic Information'))
|
->setName(pht('Edit Basic Information'))
|
||||||
->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/'))
|
->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/'))
|
||||||
->setDisabled(!$can_edit);
|
->setDisabled(!$can_edit)
|
||||||
|
->setWorkflow(!$can_edit);
|
||||||
$view->addAction($edit);
|
$view->addAction($edit);
|
||||||
|
|
||||||
|
$activate = id(new PhabricatorActionView())
|
||||||
|
->setHref(
|
||||||
|
$this->getRepositoryControllerURI($repository, 'edit/activate/'))
|
||||||
|
->setDisabled(!$can_edit)
|
||||||
|
->setWorkflow(true);
|
||||||
|
|
||||||
|
if ($repository->isTracked()) {
|
||||||
|
$activate
|
||||||
|
->setIcon('disable')
|
||||||
|
->setName(pht('Deactivate Repository'));
|
||||||
|
} else {
|
||||||
|
$activate
|
||||||
|
->setIcon('enable')
|
||||||
|
->setName(pht('Activate Repository'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$view->addAction($activate);
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ final class PhabricatorRepositoryEditor
|
||||||
public function getTransactionTypes() {
|
public function getTransactionTypes() {
|
||||||
$types = parent::getTransactionTypes();
|
$types = parent::getTransactionTypes();
|
||||||
|
|
||||||
|
$types[] = PhabricatorRepositoryTransaction::TYPE_ACTIVATE;
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_NAME;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_NAME;
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_DESCRIPTION;
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_ENCODING;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_ENCODING;
|
||||||
|
@ -18,6 +19,8 @@ final class PhabricatorRepositoryEditor
|
||||||
PhabricatorApplicationTransaction $xaction) {
|
PhabricatorApplicationTransaction $xaction) {
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_ACTIVATE:
|
||||||
|
return $object->isTracked();
|
||||||
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
||||||
return $object->getName();
|
return $object->getName();
|
||||||
case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION:
|
case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION:
|
||||||
|
@ -32,6 +35,7 @@ final class PhabricatorRepositoryEditor
|
||||||
PhabricatorApplicationTransaction $xaction) {
|
PhabricatorApplicationTransaction $xaction) {
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_ACTIVATE:
|
||||||
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
||||||
case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION:
|
case PhabricatorRepositoryTransaction::TYPE_DESCRIPTION:
|
||||||
case PhabricatorRepositoryTransaction::TYPE_ENCODING:
|
case PhabricatorRepositoryTransaction::TYPE_ENCODING:
|
||||||
|
@ -44,6 +48,9 @@ final class PhabricatorRepositoryEditor
|
||||||
PhabricatorApplicationTransaction $xaction) {
|
PhabricatorApplicationTransaction $xaction) {
|
||||||
|
|
||||||
switch ($xaction->getTransactionType()) {
|
switch ($xaction->getTransactionType()) {
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_ACTIVATE:
|
||||||
|
$object->setDetail('tracking-enabled', $xaction->getNewValue());
|
||||||
|
break;
|
||||||
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
case PhabricatorRepositoryTransaction::TYPE_NAME:
|
||||||
$object->setName($xaction->getNewValue());
|
$object->setName($xaction->getNewValue());
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
final class PhabricatorRepositoryTransaction
|
final class PhabricatorRepositoryTransaction
|
||||||
extends PhabricatorApplicationTransaction {
|
extends PhabricatorApplicationTransaction {
|
||||||
|
|
||||||
|
const TYPE_ACTIVATE = 'repo:activate';
|
||||||
const TYPE_NAME = 'repo:name';
|
const TYPE_NAME = 'repo:name';
|
||||||
const TYPE_DESCRIPTION = 'repo:description';
|
const TYPE_DESCRIPTION = 'repo:description';
|
||||||
const TYPE_ENCODING = 'repo:encoding';
|
const TYPE_ENCODING = 'repo:encoding';
|
||||||
|
@ -26,6 +27,16 @@ final class PhabricatorRepositoryTransaction
|
||||||
$new = $this->getNewValue();
|
$new = $this->getNewValue();
|
||||||
|
|
||||||
switch ($this->getTransactionType()) {
|
switch ($this->getTransactionType()) {
|
||||||
|
case self::TYPE_ACTIVATE:
|
||||||
|
if ($new) {
|
||||||
|
return pht(
|
||||||
|
'%s activated this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
} else {
|
||||||
|
return pht(
|
||||||
|
'%s deactivated this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
}
|
||||||
case self::TYPE_NAME:
|
case self::TYPE_NAME:
|
||||||
return pht(
|
return pht(
|
||||||
'%s renamed this repository from "%s" to "%s".',
|
'%s renamed this repository from "%s" to "%s".',
|
||||||
|
|
Loading…
Reference in a new issue