mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-08 04:48:28 +01:00
Move repository actions (notify, autoclose) to new UI
Summary: Ref T2231. Brings "Notify/Publish" and "Autoclose" to the new UI. Test Plan: See screenshots. Reviewers: btrahan, chad Reviewed By: btrahan CC: aran Maniphest Tasks: T2231 Differential Revision: https://secure.phabricator.com/D7402
This commit is contained in:
parent
49670e1a56
commit
52d4e66883
6 changed files with 225 additions and 0 deletions
|
@ -504,6 +504,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',
|
||||||
|
'DiffusionRepositoryEditActionsController' => 'applications/diffusion/controller/DiffusionRepositoryEditActionsController.php',
|
||||||
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
|
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
|
||||||
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
|
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
|
||||||
'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php',
|
'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php',
|
||||||
|
@ -2677,6 +2678,7 @@ phutil_register_library_map(array(
|
||||||
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
||||||
'DiffusionRepositoryController' => 'DiffusionController',
|
'DiffusionRepositoryController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryCreateController' => 'DiffusionController',
|
'DiffusionRepositoryCreateController' => 'DiffusionController',
|
||||||
|
'DiffusionRepositoryEditActionsController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditActivateController' => 'DiffusionController',
|
'DiffusionRepositoryEditActivateController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
|
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
|
||||||
'DiffusionRepositoryEditBranchesController' => 'DiffusionController',
|
'DiffusionRepositoryEditBranchesController' => 'DiffusionController',
|
||||||
|
|
|
@ -71,6 +71,7 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
|
||||||
'policy/' => 'DiffusionRepositoryEditPolicyController',
|
'policy/' => 'DiffusionRepositoryEditPolicyController',
|
||||||
'branches/' => 'DiffusionRepositoryEditBranchesController',
|
'branches/' => 'DiffusionRepositoryEditBranchesController',
|
||||||
'subversion/' => 'DiffusionRepositoryEditSubversionController',
|
'subversion/' => 'DiffusionRepositoryEditSubversionController',
|
||||||
|
'actions/' => 'DiffusionRepositoryEditActionsController',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'inline/' => array(
|
'inline/' => array(
|
||||||
|
|
|
@ -0,0 +1,126 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class DiffusionRepositoryEditActionsController
|
||||||
|
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/');
|
||||||
|
|
||||||
|
// NOTE: We're inverting these here, because the storage is silly.
|
||||||
|
$v_notify = !$repository->getHumanReadableDetail('herald-disabled');
|
||||||
|
$v_autoclose = !$repository->getHumanReadableDetail('disable-autoclose');
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
$v_notify = $request->getBool('notify');
|
||||||
|
$v_autoclose = $request->getBool('autoclose');
|
||||||
|
|
||||||
|
$xactions = array();
|
||||||
|
$template = id(new PhabricatorRepositoryTransaction());
|
||||||
|
|
||||||
|
$type_notify = PhabricatorRepositoryTransaction::TYPE_NOTIFY;
|
||||||
|
$type_autoclose = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE;
|
||||||
|
|
||||||
|
$xactions[] = id(clone $template)
|
||||||
|
->setTransactionType($type_notify)
|
||||||
|
->setNewValue($v_notify);
|
||||||
|
|
||||||
|
$xactions[] = id(clone $template)
|
||||||
|
->setTransactionType($type_autoclose)
|
||||||
|
->setNewValue($v_autoclose);
|
||||||
|
|
||||||
|
id(new PhabricatorRepositoryEditor())
|
||||||
|
->setContinueOnNoEffect(true)
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setActor($viewer)
|
||||||
|
->applyTransactions($repository, $xactions);
|
||||||
|
|
||||||
|
return id(new AphrontRedirectResponse())->setURI($edit_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = array();
|
||||||
|
|
||||||
|
$crumbs = $this->buildCrumbs();
|
||||||
|
$crumbs->addCrumb(
|
||||||
|
id(new PhabricatorCrumbView())
|
||||||
|
->setName(pht('Edit Actions')));
|
||||||
|
|
||||||
|
$title = pht('Edit Actions (%s)', $repository->getName());
|
||||||
|
|
||||||
|
$policies = id(new PhabricatorPolicyQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->setObject($repository)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$form = id(new AphrontFormView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->appendRemarkupInstructions(
|
||||||
|
pht(
|
||||||
|
"Normally, Phabricator publishes notifications when it discovers ".
|
||||||
|
"new commits. You can disable publishing for this repository by ".
|
||||||
|
"turning off **Notify/Publish**. This will disable notifications, ".
|
||||||
|
"feed, and Herald for this repository.".
|
||||||
|
"\n\n".
|
||||||
|
"When Phabricator discovers a new commit, it can automatically ".
|
||||||
|
"close associated revisions and tasks. If you don't want ".
|
||||||
|
"Phabricator to close objects when it discovers new commits in ".
|
||||||
|
"this repository, you can disable **Autoclose**."))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormSelectControl())
|
||||||
|
->setName('notify')
|
||||||
|
->setLabel(pht('Notify/Publish'))
|
||||||
|
->setValue((int)$v_notify)
|
||||||
|
->setOptions(
|
||||||
|
array(
|
||||||
|
1 => pht('Enable Notifications, Feed and Herald'),
|
||||||
|
0 => pht('Disable Notifications, Feed and Herald'),
|
||||||
|
)))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormSelectControl())
|
||||||
|
->setName('autoclose')
|
||||||
|
->setLabel(pht('Autoclose'))
|
||||||
|
->setValue((int)$v_autoclose)
|
||||||
|
->setOptions(
|
||||||
|
array(
|
||||||
|
1 => pht('Enable Autoclose'),
|
||||||
|
0 => pht('Disable Autoclose'),
|
||||||
|
)))
|
||||||
|
->appendChild(
|
||||||
|
id(new AphrontFormSubmitControl())
|
||||||
|
->setValue(pht('Save Actions'))
|
||||||
|
->addCancelButton($edit_uri));
|
||||||
|
|
||||||
|
$form_box = id(new PHUIObjectBoxView())
|
||||||
|
->setHeaderText($title)
|
||||||
|
->setForm($form);
|
||||||
|
|
||||||
|
return $this->buildApplicationPage(
|
||||||
|
array(
|
||||||
|
$crumbs,
|
||||||
|
$form_box,
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'title' => $title,
|
||||||
|
'device' => true,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -68,6 +68,10 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
||||||
$this->buildSubversionActions($repository));
|
$this->buildSubversionActions($repository));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$actions_properties = $this->buildActionsProperties(
|
||||||
|
$repository,
|
||||||
|
$this->buildActionsActions($repository));
|
||||||
|
|
||||||
$xactions = id(new PhabricatorRepositoryTransactionQuery())
|
$xactions = id(new PhabricatorRepositoryTransactionQuery())
|
||||||
->setViewer($user)
|
->setViewer($user)
|
||||||
->withObjectPHIDs(array($repository->getPHID()))
|
->withObjectPHIDs(array($repository->getPHID()))
|
||||||
|
@ -104,6 +108,8 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
||||||
$obj_box->addPropertyList($subversion_properties);
|
$obj_box->addPropertyList($subversion_properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$obj_box->addPropertyList($actions_properties);
|
||||||
|
|
||||||
return $this->buildApplicationPage(
|
return $this->buildApplicationPage(
|
||||||
array(
|
array(
|
||||||
$crumbs,
|
$crumbs,
|
||||||
|
@ -389,4 +395,54 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function buildActionsActions(PhabricatorRepository $repository) {
|
||||||
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
|
||||||
|
$view = id(new PhabricatorActionListView())
|
||||||
|
->setObjectURI($this->getRequest()->getRequestURI())
|
||||||
|
->setUser($viewer);
|
||||||
|
|
||||||
|
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||||
|
$viewer,
|
||||||
|
$repository,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT);
|
||||||
|
|
||||||
|
$edit = id(new PhabricatorActionView())
|
||||||
|
->setIcon('edit')
|
||||||
|
->setName(pht('Edit Actions'))
|
||||||
|
->setHref(
|
||||||
|
$this->getRepositoryControllerURI($repository, 'edit/actions/'))
|
||||||
|
->setWorkflow(!$can_edit)
|
||||||
|
->setDisabled(!$can_edit);
|
||||||
|
$view->addAction($edit);
|
||||||
|
|
||||||
|
return $view;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildActionsProperties(
|
||||||
|
PhabricatorRepository $repository,
|
||||||
|
PhabricatorActionListView $actions) {
|
||||||
|
|
||||||
|
$viewer = $this->getRequest()->getUser();
|
||||||
|
|
||||||
|
$view = id(new PHUIPropertyListView())
|
||||||
|
->setUser($viewer)
|
||||||
|
->setActionList($actions)
|
||||||
|
->addSectionHeader(pht('Actions'));
|
||||||
|
|
||||||
|
$notify = $repository->getDetail('herald-disabled')
|
||||||
|
? pht('Off')
|
||||||
|
: pht('On');
|
||||||
|
$notify = phutil_tag('em', array(), $notify);
|
||||||
|
$view->addProperty(pht('Publish/Notify'), $notify);
|
||||||
|
|
||||||
|
$autoclose = $repository->getDetail('disable-autoclose')
|
||||||
|
? pht('Off')
|
||||||
|
: pht('On');
|
||||||
|
$autoclose = phutil_tag('em', array(), $autoclose);
|
||||||
|
$view->addProperty(pht('Autoclose'), $autoclose);
|
||||||
|
|
||||||
|
return $view;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ final class PhabricatorRepositoryEditor
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE_ONLY;
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_UUID;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_UUID;
|
||||||
$types[] = PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH;
|
$types[] = PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH;
|
||||||
|
$types[] = PhabricatorRepositoryTransaction::TYPE_NOTIFY;
|
||||||
|
$types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE;
|
||||||
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
||||||
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
||||||
|
|
||||||
|
@ -44,6 +46,10 @@ final class PhabricatorRepositoryEditor
|
||||||
return $object->getUUID();
|
return $object->getUUID();
|
||||||
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
||||||
return $object->getDetail('svn-subpath');
|
return $object->getDetail('svn-subpath');
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
|
||||||
|
return (int)!$object->getDetail('herald-disabled');
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
|
||||||
|
return (int)!$object->getDetail('disable-autoclose');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +68,9 @@ final class PhabricatorRepositoryEditor
|
||||||
case PhabricatorRepositoryTransaction::TYPE_UUID:
|
case PhabricatorRepositoryTransaction::TYPE_UUID:
|
||||||
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
||||||
return $xaction->getNewValue();
|
return $xaction->getNewValue();
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
|
||||||
|
return (int)$xaction->getNewValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +107,12 @@ final class PhabricatorRepositoryEditor
|
||||||
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
case PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH:
|
||||||
$object->setDetail('svn-subpath', $xaction->getNewValue());
|
$object->setDetail('svn-subpath', $xaction->getNewValue());
|
||||||
break;
|
break;
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
|
||||||
|
$object->setDetail('herald-disabled', (int)!$xaction->getNewValue());
|
||||||
|
break;
|
||||||
|
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
|
||||||
|
$object->setDetail('disable-autoclose', (int)!$xaction->getNewValue());
|
||||||
|
break;
|
||||||
case PhabricatorRepositoryTransaction::TYPE_ENCODING:
|
case PhabricatorRepositoryTransaction::TYPE_ENCODING:
|
||||||
// Make sure the encoding is valid by converting to UTF-8. This tests
|
// Make sure the encoding is valid by converting to UTF-8. This tests
|
||||||
// that the user has mbstring installed, and also that they didn't type
|
// that the user has mbstring installed, and also that they didn't type
|
||||||
|
|
|
@ -12,6 +12,8 @@ final class PhabricatorRepositoryTransaction
|
||||||
const TYPE_AUTOCLOSE_ONLY = 'repo:autoclose-only';
|
const TYPE_AUTOCLOSE_ONLY = 'repo:autoclose-only';
|
||||||
const TYPE_SVN_SUBPATH = 'repo:svn-subpath';
|
const TYPE_SVN_SUBPATH = 'repo:svn-subpath';
|
||||||
const TYPE_UUID = 'repo:uuid';
|
const TYPE_UUID = 'repo:uuid';
|
||||||
|
const TYPE_NOTIFY = 'repo:notify';
|
||||||
|
const TYPE_AUTOCLOSE = 'repo:autoclose';
|
||||||
|
|
||||||
public function getApplicationName() {
|
public function getApplicationName() {
|
||||||
return 'repository';
|
return 'repository';
|
||||||
|
@ -163,6 +165,29 @@ final class PhabricatorRepositoryTransaction
|
||||||
$new);
|
$new);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case self::TYPE_NOTIFY:
|
||||||
|
if ($new) {
|
||||||
|
return pht(
|
||||||
|
'%s enabled notifications and publishing for this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
} else {
|
||||||
|
return pht(
|
||||||
|
'%s disabled notifications and publishing for this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case self::TYPE_AUTOCLOSE:
|
||||||
|
if ($new) {
|
||||||
|
return pht(
|
||||||
|
'%s enabled autoclose for this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
} else {
|
||||||
|
return pht(
|
||||||
|
'%s disabled autoclose for this repository.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::getTitle();
|
return parent::getTitle();
|
||||||
|
|
Loading…
Add table
Reference in a new issue