mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-20 11:41:08 +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',
|
||||
'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php',
|
||||
'DiffusionRepositoryCreateController' => 'applications/diffusion/controller/DiffusionRepositoryCreateController.php',
|
||||
'DiffusionRepositoryEditActionsController' => 'applications/diffusion/controller/DiffusionRepositoryEditActionsController.php',
|
||||
'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php',
|
||||
'DiffusionRepositoryEditBasicController' => 'applications/diffusion/controller/DiffusionRepositoryEditBasicController.php',
|
||||
'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php',
|
||||
|
@ -2677,6 +2678,7 @@ phutil_register_library_map(array(
|
|||
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
|
||||
'DiffusionRepositoryController' => 'DiffusionController',
|
||||
'DiffusionRepositoryCreateController' => 'DiffusionController',
|
||||
'DiffusionRepositoryEditActionsController' => 'DiffusionController',
|
||||
'DiffusionRepositoryEditActivateController' => 'DiffusionController',
|
||||
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
|
||||
'DiffusionRepositoryEditBranchesController' => 'DiffusionController',
|
||||
|
|
|
@ -71,6 +71,7 @@ final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
|
|||
'policy/' => 'DiffusionRepositoryEditPolicyController',
|
||||
'branches/' => 'DiffusionRepositoryEditBranchesController',
|
||||
'subversion/' => 'DiffusionRepositoryEditSubversionController',
|
||||
'actions/' => 'DiffusionRepositoryEditActionsController',
|
||||
),
|
||||
),
|
||||
'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));
|
||||
}
|
||||
|
||||
$actions_properties = $this->buildActionsProperties(
|
||||
$repository,
|
||||
$this->buildActionsActions($repository));
|
||||
|
||||
$xactions = id(new PhabricatorRepositoryTransactionQuery())
|
||||
->setViewer($user)
|
||||
->withObjectPHIDs(array($repository->getPHID()))
|
||||
|
@ -104,6 +108,8 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
|||
$obj_box->addPropertyList($subversion_properties);
|
||||
}
|
||||
|
||||
$obj_box->addPropertyList($actions_properties);
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
array(
|
||||
$crumbs,
|
||||
|
@ -389,4 +395,54 @@ final class DiffusionRepositoryEditController extends DiffusionController {
|
|||
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_UUID;
|
||||
$types[] = PhabricatorRepositoryTransaction::TYPE_SVN_SUBPATH;
|
||||
$types[] = PhabricatorRepositoryTransaction::TYPE_NOTIFY;
|
||||
$types[] = PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE;
|
||||
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
||||
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
|
||||
|
||||
|
@ -44,6 +46,10 @@ final class PhabricatorRepositoryEditor
|
|||
return $object->getUUID();
|
||||
case PhabricatorRepositoryTransaction::TYPE_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_SVN_SUBPATH:
|
||||
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:
|
||||
$object->setDetail('svn-subpath', $xaction->getNewValue());
|
||||
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:
|
||||
// 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
|
||||
|
|
|
@ -12,6 +12,8 @@ final class PhabricatorRepositoryTransaction
|
|||
const TYPE_AUTOCLOSE_ONLY = 'repo:autoclose-only';
|
||||
const TYPE_SVN_SUBPATH = 'repo:svn-subpath';
|
||||
const TYPE_UUID = 'repo:uuid';
|
||||
const TYPE_NOTIFY = 'repo:notify';
|
||||
const TYPE_AUTOCLOSE = 'repo:autoclose';
|
||||
|
||||
public function getApplicationName() {
|
||||
return 'repository';
|
||||
|
@ -163,6 +165,29 @@ final class PhabricatorRepositoryTransaction
|
|||
$new);
|
||||
}
|
||||
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();
|
||||
|
|
Loading…
Reference in a new issue