Page MenuHomePhabricator

D7402.id16675.diff
No OneTemporary

D7402.id16675.diff

Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -504,6 +504,7 @@
'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',
@@ -2673,6 +2674,7 @@
'DiffusionRemarkupRule' => 'PhabricatorRemarkupRuleObject',
'DiffusionRepositoryController' => 'DiffusionController',
'DiffusionRepositoryCreateController' => 'DiffusionController',
+ 'DiffusionRepositoryEditActionsController' => 'DiffusionController',
'DiffusionRepositoryEditActivateController' => 'DiffusionController',
'DiffusionRepositoryEditBasicController' => 'DiffusionController',
'DiffusionRepositoryEditBranchesController' => 'DiffusionController',
Index: src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
===================================================================
--- src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
+++ src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
@@ -71,6 +71,7 @@
'policy/' => 'DiffusionRepositoryEditPolicyController',
'branches/' => 'DiffusionRepositoryEditBranchesController',
'subversion/' => 'DiffusionRepositoryEditSubversionController',
+ 'actions/' => 'DiffusionRepositoryEditActionsController',
),
),
'inline/' => array(
Index: src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php
===================================================================
--- /dev/null
+++ src/applications/diffusion/controller/DiffusionRepositoryEditActionsController.php
@@ -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,
+ ));
+ }
+
+}
Index: src/applications/diffusion/controller/DiffusionRepositoryEditController.php
===================================================================
--- src/applications/diffusion/controller/DiffusionRepositoryEditController.php
+++ src/applications/diffusion/controller/DiffusionRepositoryEditController.php
@@ -68,6 +68,10 @@
$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 @@
$obj_box->addPropertyList($subversion_properties);
}
+ $obj_box->addPropertyList($actions_properties);
+
return $this->buildApplicationPage(
array(
$crumbs,
@@ -389,4 +395,54 @@
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;
+ }
+
}
Index: src/applications/repository/editor/PhabricatorRepositoryEditor.php
===================================================================
--- src/applications/repository/editor/PhabricatorRepositoryEditor.php
+++ src/applications/repository/editor/PhabricatorRepositoryEditor.php
@@ -15,6 +15,8 @@
$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 @@
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 @@
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 @@
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
Index: src/applications/repository/storage/PhabricatorRepositoryTransaction.php
===================================================================
--- src/applications/repository/storage/PhabricatorRepositoryTransaction.php
+++ src/applications/repository/storage/PhabricatorRepositoryTransaction.php
@@ -12,6 +12,8 @@
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 @@
$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();

File Metadata

Mime Type
text/plain
Expires
Fri, Sep 20, 11:40 AM (12 h, 30 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6623545
Default Alt Text
D7402.id16675.diff (12 KB)

Event Timeline