mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-13 02:12:41 +01:00
Allow EditEngine configurations to be disabled and marked as "Default"
Summary: Ref T9132. Let configurations be enabled/disabled. This doesn't do much right now. Let configurations be marked as default entries in the application "Create" menu. This makes them show up in the application in a dropdown, so you can replace the default form and/or provide several forms. In Maniphest, we'll do this to provide a menu something like this: - New Bug Report - New Feature Request - ADVANCED TASK CREATION!!11~ (only available for Community members) Test Plan: {F1005679} Reviewers: chad Reviewed By: chad Maniphest Tasks: T9132 Differential Revision: https://secure.phabricator.com/D14584
This commit is contained in:
parent
760655aa09
commit
37893ba2e6
16 changed files with 377 additions and 24 deletions
|
@ -2114,7 +2114,9 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorEditEngine' => 'applications/transactions/editengine/PhabricatorEditEngine.php',
|
'PhabricatorEditEngine' => 'applications/transactions/editengine/PhabricatorEditEngine.php',
|
||||||
'PhabricatorEditEngineAPIMethod' => 'applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php',
|
'PhabricatorEditEngineAPIMethod' => 'applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php',
|
||||||
'PhabricatorEditEngineConfiguration' => 'applications/transactions/storage/PhabricatorEditEngineConfiguration.php',
|
'PhabricatorEditEngineConfiguration' => 'applications/transactions/storage/PhabricatorEditEngineConfiguration.php',
|
||||||
|
'PhabricatorEditEngineConfigurationDefaultCreateController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php',
|
||||||
'PhabricatorEditEngineConfigurationDefaultsController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php',
|
'PhabricatorEditEngineConfigurationDefaultsController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php',
|
||||||
|
'PhabricatorEditEngineConfigurationDisableController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php',
|
||||||
'PhabricatorEditEngineConfigurationEditController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationEditController.php',
|
'PhabricatorEditEngineConfigurationEditController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationEditController.php',
|
||||||
'PhabricatorEditEngineConfigurationEditEngine' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php',
|
'PhabricatorEditEngineConfigurationEditEngine' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php',
|
||||||
'PhabricatorEditEngineConfigurationEditor' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php',
|
'PhabricatorEditEngineConfigurationEditor' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php',
|
||||||
|
@ -6210,7 +6212,9 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorApplicationTransactionInterface',
|
'PhabricatorApplicationTransactionInterface',
|
||||||
'PhabricatorPolicyInterface',
|
'PhabricatorPolicyInterface',
|
||||||
),
|
),
|
||||||
|
'PhabricatorEditEngineConfigurationDefaultCreateController' => 'PhabricatorEditEngineController',
|
||||||
'PhabricatorEditEngineConfigurationDefaultsController' => 'PhabricatorEditEngineController',
|
'PhabricatorEditEngineConfigurationDefaultsController' => 'PhabricatorEditEngineController',
|
||||||
|
'PhabricatorEditEngineConfigurationDisableController' => 'PhabricatorEditEngineController',
|
||||||
'PhabricatorEditEngineConfigurationEditController' => 'PhabricatorEditEngineController',
|
'PhabricatorEditEngineConfigurationEditController' => 'PhabricatorEditEngineController',
|
||||||
'PhabricatorEditEngineConfigurationEditEngine' => 'PhabricatorEditEngine',
|
'PhabricatorEditEngineConfigurationEditEngine' => 'PhabricatorEditEngine',
|
||||||
'PhabricatorEditEngineConfigurationEditor' => 'PhabricatorApplicationTransactionEditor',
|
'PhabricatorEditEngineConfigurationEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||||
|
|
|
@ -640,7 +640,7 @@ abstract class PhabricatorApplication
|
||||||
'(?P<id>[0-9]\d*)/)?'.
|
'(?P<id>[0-9]\d*)/)?'.
|
||||||
'(?:'.
|
'(?:'.
|
||||||
'(?:'.
|
'(?:'.
|
||||||
'(?P<editAction>parameters)'.
|
'(?P<editAction>parameters|nodefault)'.
|
||||||
'|'.
|
'|'.
|
||||||
'(?:form/(?P<formKey>[^/]+))'.
|
'(?:form/(?P<formKey>[^/]+))'.
|
||||||
')'.
|
')'.
|
||||||
|
|
|
@ -15,11 +15,9 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
|
||||||
protected function buildApplicationCrumbs() {
|
protected function buildApplicationCrumbs() {
|
||||||
$crumbs = parent::buildApplicationCrumbs();
|
$crumbs = parent::buildApplicationCrumbs();
|
||||||
|
|
||||||
$crumbs->addAction(
|
id(new PhabricatorPasteEditEngine())
|
||||||
id(new PHUIListItemView())
|
->setViewer($this->getViewer())
|
||||||
->setName(pht('Create Paste'))
|
->addActionToCrumbs($crumbs);
|
||||||
->setHref($this->getApplicationURI('edit/'))
|
|
||||||
->setIcon('fa-plus-square'));
|
|
||||||
|
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,10 @@ final class PhabricatorTransactionsApplication extends PhabricatorApplication {
|
||||||
'PhabricatorEditEngineConfigurationDefaultsController',
|
'PhabricatorEditEngineConfigurationDefaultsController',
|
||||||
'lock/(?P<key>[^/]+)/' =>
|
'lock/(?P<key>[^/]+)/' =>
|
||||||
'PhabricatorEditEngineConfigurationLockController',
|
'PhabricatorEditEngineConfigurationLockController',
|
||||||
|
'defaultcreate/(?P<key>[^/]+)/' =>
|
||||||
|
'PhabricatorEditEngineConfigurationDefaultCreateController',
|
||||||
|
'disable/(?P<key>[^/]+)/' =>
|
||||||
|
'PhabricatorEditEngineConfigurationDisableController',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorEditEngineConfigurationDefaultCreateController
|
||||||
|
extends PhabricatorEditEngineController {
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$config = $this->loadConfigForEdit();
|
||||||
|
if (!$config) {
|
||||||
|
return id(new Aphront404Response());
|
||||||
|
}
|
||||||
|
|
||||||
|
$engine_key = $config->getEngineKey();
|
||||||
|
$key = $config->getIdentifier();
|
||||||
|
$cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
|
||||||
|
|
||||||
|
$type = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE;
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
$xactions = array();
|
||||||
|
|
||||||
|
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
|
||||||
|
->setTransactionType($type)
|
||||||
|
->setNewValue(!$config->getIsDefault());
|
||||||
|
|
||||||
|
$editor = id(new PhabricatorEditEngineConfigurationEditor())
|
||||||
|
->setActor($viewer)
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setContinueOnMissingFields(true)
|
||||||
|
->setContinueOnNoEffect(true);
|
||||||
|
|
||||||
|
$editor->applyTransactions($config, $xactions);
|
||||||
|
|
||||||
|
return id(new AphrontRedirectResponse())
|
||||||
|
->setURI($cancel_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($config->getIsDefault()) {
|
||||||
|
$title = pht('Remove From "Create" Menu');
|
||||||
|
$body = pht(
|
||||||
|
'Remove this form from the application "Create" menu? It will still '.
|
||||||
|
'function properly, but no longer be reachable directly from the '.
|
||||||
|
'application.');
|
||||||
|
$button = pht('Remove From Menu');
|
||||||
|
} else {
|
||||||
|
$title = pht('Add To "Create" Menu');
|
||||||
|
$body = pht(
|
||||||
|
'Add this form to the application "Create" menu? Users will '.
|
||||||
|
'be able to choose it when creating new objects.');
|
||||||
|
$button = pht('Add To Menu');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->newDialog()
|
||||||
|
->setTitle($title)
|
||||||
|
->appendParagraph($body)
|
||||||
|
->addSubmitButton($button)
|
||||||
|
->addCancelbutton($cancel_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class PhabricatorEditEngineConfigurationDisableController
|
||||||
|
extends PhabricatorEditEngineController {
|
||||||
|
|
||||||
|
public function handleRequest(AphrontRequest $request) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$config = $this->loadConfigForEdit();
|
||||||
|
if (!$config) {
|
||||||
|
return id(new Aphront404Response());
|
||||||
|
}
|
||||||
|
|
||||||
|
$engine_key = $config->getEngineKey();
|
||||||
|
$key = $config->getIdentifier();
|
||||||
|
$cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
|
||||||
|
|
||||||
|
$type = PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE;
|
||||||
|
|
||||||
|
if ($request->isFormPost()) {
|
||||||
|
$xactions = array();
|
||||||
|
|
||||||
|
$xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
|
||||||
|
->setTransactionType($type)
|
||||||
|
->setNewValue(!$config->getIsDisabled());
|
||||||
|
|
||||||
|
$editor = id(new PhabricatorEditEngineConfigurationEditor())
|
||||||
|
->setActor($viewer)
|
||||||
|
->setContentSourceFromRequest($request)
|
||||||
|
->setContinueOnMissingFields(true)
|
||||||
|
->setContinueOnNoEffect(true);
|
||||||
|
|
||||||
|
$editor->applyTransactions($config, $xactions);
|
||||||
|
|
||||||
|
return id(new AphrontRedirectResponse())
|
||||||
|
->setURI($cancel_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($config->getIsDisabled()) {
|
||||||
|
$title = pht('Enable Form');
|
||||||
|
$body = pht(
|
||||||
|
'Enable this form? Users who can see it will be able to use it to '.
|
||||||
|
'create objects.');
|
||||||
|
$button = pht('Enable Form');
|
||||||
|
} else {
|
||||||
|
$title = pht('Disable Form');
|
||||||
|
$body = pht(
|
||||||
|
'Disable this form? Users will no longer be able to use it.');
|
||||||
|
$button = pht('Disable Form');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->newDialog()
|
||||||
|
->setTitle($title)
|
||||||
|
->appendParagraph($body)
|
||||||
|
->addSubmitButton($button)
|
||||||
|
->addCancelbutton($cancel_uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -17,16 +17,16 @@ final class PhabricatorEditEngineConfigurationListController
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildApplicationCrumbs() {
|
protected function buildApplicationCrumbs() {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
$crumbs = parent::buildApplicationCrumbs();
|
$crumbs = parent::buildApplicationCrumbs();
|
||||||
|
|
||||||
$engine_key = $this->getEngineKey();
|
$target_key = $this->getEngineKey();
|
||||||
$edit_uri = "/transactions/editengine/{$engine_key}/edit/";
|
$target_engine = PhabricatorEditEngine::getByKey($viewer, $target_key);
|
||||||
|
|
||||||
$crumbs->addAction(
|
id(new PhabricatorEditEngineConfigurationEditEngine())
|
||||||
id(new PHUIListItemView())
|
->setTargetEngine($target_engine)
|
||||||
->setName(pht('New Form'))
|
->setViewer($viewer)
|
||||||
->setHref($edit_uri)
|
->addActionToCrumbs($crumbs);
|
||||||
->setIcon('fa-plus-square'));
|
|
||||||
|
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,17 +8,9 @@ final class PhabricatorEditEngineConfigurationViewController
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
public function handleRequest(AphrontRequest $request) {
|
||||||
$engine_key = $request->getURIData('engineKey');
|
|
||||||
$this->setEngineKey($engine_key);
|
|
||||||
|
|
||||||
$key = $request->getURIData('key');
|
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
$config = id(new PhabricatorEditEngineConfigurationQuery())
|
$config = $this->loadConfigForEdit();
|
||||||
->setViewer($viewer)
|
|
||||||
->withEngineKeys(array($engine_key))
|
|
||||||
->withIdentifiers(array($key))
|
|
||||||
->executeOne();
|
|
||||||
if (!$config) {
|
if (!$config) {
|
||||||
return id(new Aphront404Response());
|
return id(new Aphront404Response());
|
||||||
}
|
}
|
||||||
|
@ -149,6 +141,42 @@ final class PhabricatorEditEngineConfigurationViewController
|
||||||
->setWorkflow(true)
|
->setWorkflow(true)
|
||||||
->setDisabled(!$can_edit));
|
->setDisabled(!$can_edit));
|
||||||
|
|
||||||
|
$disable_uri = "{$base_uri}/disable/{$form_key}/";
|
||||||
|
|
||||||
|
if ($config->getIsDisabled()) {
|
||||||
|
$disable_name = pht('Enable Form');
|
||||||
|
$disable_icon = 'fa-check';
|
||||||
|
} else {
|
||||||
|
$disable_name = pht('Disable Form');
|
||||||
|
$disable_icon = 'fa-ban';
|
||||||
|
}
|
||||||
|
|
||||||
|
$view->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName($disable_name)
|
||||||
|
->setIcon($disable_icon)
|
||||||
|
->setHref($disable_uri)
|
||||||
|
->setWorkflow(true)
|
||||||
|
->setDisabled(!$can_edit));
|
||||||
|
|
||||||
|
$defaultcreate_uri = "{$base_uri}/defaultcreate/{$form_key}/";
|
||||||
|
|
||||||
|
if ($config->getIsDefault()) {
|
||||||
|
$defaultcreate_name = pht('Remove from "Create" Menu');
|
||||||
|
$defaultcreate_icon = 'fa-minus';
|
||||||
|
} else {
|
||||||
|
$defaultcreate_name = pht('Add to "Create" Menu');
|
||||||
|
$defaultcreate_icon = 'fa-plus';
|
||||||
|
}
|
||||||
|
|
||||||
|
$view->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName($defaultcreate_name)
|
||||||
|
->setIcon($defaultcreate_icon)
|
||||||
|
->setHref($defaultcreate_uri)
|
||||||
|
->setWorkflow(true)
|
||||||
|
->setDisabled(!$can_edit));
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,4 +34,39 @@ abstract class PhabricatorEditEngineController
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function loadConfigForEdit() {
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$engine_key = $request->getURIData('engineKey');
|
||||||
|
$this->setEngineKey($engine_key);
|
||||||
|
|
||||||
|
$key = $request->getURIData('key');
|
||||||
|
|
||||||
|
$config = id(new PhabricatorEditEngineConfigurationQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withEngineKeys(array($engine_key))
|
||||||
|
->withIdentifiers(array($key))
|
||||||
|
->requireCapabilities(
|
||||||
|
array(
|
||||||
|
PhabricatorPolicyCapability::CAN_VIEW,
|
||||||
|
PhabricatorPolicyCapability::CAN_EDIT,
|
||||||
|
))
|
||||||
|
->executeOne();
|
||||||
|
|
||||||
|
if ($config) {
|
||||||
|
$engine = $config->getEngine();
|
||||||
|
|
||||||
|
// TODO: When we're editing the meta-engine, we need to set the engine
|
||||||
|
// itself as its own target. This is hacky and it would be nice to find
|
||||||
|
// a cleaner approach later.
|
||||||
|
if ($engine instanceof PhabricatorEditEngineConfigurationEditEngine) {
|
||||||
|
$engine->setTargetEngine($engine);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,7 +352,9 @@ abstract class PhabricatorEditEngine
|
||||||
if (!$has_default) {
|
if (!$has_default) {
|
||||||
$first = head($configurations);
|
$first = head($configurations);
|
||||||
if (!$first->getBuiltinKey()) {
|
if (!$first->getBuiltinKey()) {
|
||||||
$first->setBuiltinKey(self::EDITENGINECONFIG_DEFAULT);
|
$first
|
||||||
|
->setBuiltinKey(self::EDITENGINECONFIG_DEFAULT)
|
||||||
|
->setIsDefault(true);
|
||||||
|
|
||||||
if (!strlen($first->getName())) {
|
if (!strlen($first->getName())) {
|
||||||
$first->setName($this->getObjectCreateShortText());
|
$first->setName($this->getObjectCreateShortText());
|
||||||
|
@ -629,6 +631,8 @@ abstract class PhabricatorEditEngine
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case 'parameters':
|
case 'parameters':
|
||||||
return $this->buildParametersResponse($object);
|
return $this->buildParametersResponse($object);
|
||||||
|
case 'nodefault':
|
||||||
|
return $this->buildNoDefaultResponse($object);
|
||||||
default:
|
default:
|
||||||
return $this->buildEditResponse($object);
|
return $this->buildEditResponse($object);
|
||||||
}
|
}
|
||||||
|
@ -820,6 +824,74 @@ abstract class PhabricatorEditEngine
|
||||||
return $actions;
|
return $actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final public function addActionToCrumbs(PHUICrumbsView $crumbs) {
|
||||||
|
$viewer = $this->getViewer();
|
||||||
|
|
||||||
|
$configs = id(new PhabricatorEditEngineConfigurationQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withEngineKeys(array($this->getEngineKey()))
|
||||||
|
->withIsDefault(true)
|
||||||
|
->withIsDisabled(false)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
$dropdown = null;
|
||||||
|
$disabled = false;
|
||||||
|
$workflow = false;
|
||||||
|
|
||||||
|
$menu_icon = 'fa-plus-square';
|
||||||
|
|
||||||
|
if (!$configs) {
|
||||||
|
if ($viewer->isLoggedIn()) {
|
||||||
|
$disabled = true;
|
||||||
|
} else {
|
||||||
|
// If the viewer isn't logged in, assume they'll get hit with a login
|
||||||
|
// dialog and are likely able to create objects after they log in.
|
||||||
|
$disabled = false;
|
||||||
|
}
|
||||||
|
$workflow = true;
|
||||||
|
$create_uri = $this->getEditURI(null, 'nodefault/');
|
||||||
|
} else {
|
||||||
|
$config = head($configs);
|
||||||
|
$form_key = $config->getIdentifier();
|
||||||
|
$create_uri = $this->getEditURI(null, "form/{$form_key}/");
|
||||||
|
|
||||||
|
if (count($configs) > 1) {
|
||||||
|
$configs = msort($configs, 'getDisplayName');
|
||||||
|
|
||||||
|
$menu_icon = 'fa-caret-square-o-down';
|
||||||
|
|
||||||
|
$dropdown = id(new PhabricatorActionListView())
|
||||||
|
->setUser($viewer);
|
||||||
|
|
||||||
|
foreach ($configs as $config) {
|
||||||
|
$form_key = $config->getIdentifier();
|
||||||
|
$config_uri = $this->getEditURI(null, "form/{$form_key}/");
|
||||||
|
|
||||||
|
$item_icon = 'fa-plus';
|
||||||
|
|
||||||
|
$dropdown->addAction(
|
||||||
|
id(new PhabricatorActionView())
|
||||||
|
->setName($config->getDisplayName())
|
||||||
|
->setIcon($item_icon)
|
||||||
|
->setHref($config_uri));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$action = id(new PHUIListItemView())
|
||||||
|
->setName($this->getObjectCreateShortText())
|
||||||
|
->setHref($create_uri)
|
||||||
|
->setIcon($menu_icon)
|
||||||
|
->setWorkflow($workflow)
|
||||||
|
->setDisabled($disabled);
|
||||||
|
|
||||||
|
if ($dropdown) {
|
||||||
|
$action->setDropdownMenu($dropdown);
|
||||||
|
}
|
||||||
|
|
||||||
|
$crumbs->addAction($action);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -( Responding to HTTP Parameter Requests )------------------------------ */
|
/* -( Responding to HTTP Parameter Requests )------------------------------ */
|
||||||
|
|
||||||
|
@ -864,6 +936,19 @@ abstract class PhabricatorEditEngine
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function buildNoDefaultResponse($object) {
|
||||||
|
$cancel_uri = $this->getObjectCreateCancelURI($object);
|
||||||
|
|
||||||
|
return $this->getController()
|
||||||
|
->newDialog()
|
||||||
|
->setTitle(pht('No Default Create Forms'))
|
||||||
|
->appendParagraph(
|
||||||
|
pht(
|
||||||
|
'This application is not configured with any visible, enabled '.
|
||||||
|
'forms for creating objects.'))
|
||||||
|
->addCancelButton($cancel_uri);
|
||||||
|
}
|
||||||
|
|
||||||
/* -( Conduit )------------------------------------------------------------ */
|
/* -( Conduit )------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ final class PhabricatorEditEngineConfigurationEditEngine
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTargetEngine() {
|
public function getTargetEngine() {
|
||||||
|
if (!$this->targetEngine) {
|
||||||
|
throw new PhutilInvalidStateException('setTargetEngine');
|
||||||
|
}
|
||||||
return $this->targetEngine;
|
return $this->targetEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,10 @@ final class PhabricatorEditEngineConfigurationEditor
|
||||||
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
|
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
|
||||||
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
|
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
|
||||||
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
|
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
|
||||||
|
$types[] =
|
||||||
|
PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE;
|
||||||
|
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE;
|
||||||
|
|
||||||
|
|
||||||
return $types;
|
return $types;
|
||||||
}
|
}
|
||||||
|
@ -70,6 +74,10 @@ final class PhabricatorEditEngineConfigurationEditor
|
||||||
return $object->getFieldDefault($field_key);
|
return $object->getFieldDefault($field_key);
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
||||||
return $object->getFieldLocks();
|
return $object->getFieldLocks();
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
|
||||||
|
return (int)$object->getIsDefault();
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
|
||||||
|
return (int)$object->getIsDisabled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +92,9 @@ final class PhabricatorEditEngineConfigurationEditor
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
||||||
return $xaction->getNewValue();
|
return $xaction->getNewValue();
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
|
||||||
|
return (int)$xaction->getNewValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +119,12 @@ final class PhabricatorEditEngineConfigurationEditor
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
||||||
$object->setFieldLocks($xaction->getNewValue());
|
$object->setFieldLocks($xaction->getNewValue());
|
||||||
return;
|
return;
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
|
||||||
|
$object->setIsDefault($xaction->getNewValue());
|
||||||
|
return;
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
|
||||||
|
$object->setIsDisabled($xaction->getNewValue());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::applyCustomInternalTransaction($object, $xaction);
|
return parent::applyCustomInternalTransaction($object, $xaction);
|
||||||
|
@ -123,6 +140,8 @@ final class PhabricatorEditEngineConfigurationEditor
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
|
||||||
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
|
||||||
|
case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,8 @@ final class PhabricatorEditEngineConfigurationQuery
|
||||||
private $engineKeys;
|
private $engineKeys;
|
||||||
private $builtinKeys;
|
private $builtinKeys;
|
||||||
private $identifiers;
|
private $identifiers;
|
||||||
|
private $default;
|
||||||
|
private $disabled;
|
||||||
|
|
||||||
public function withIDs(array $ids) {
|
public function withIDs(array $ids) {
|
||||||
$this->ids = $ids;
|
$this->ids = $ids;
|
||||||
|
@ -34,6 +36,16 @@ final class PhabricatorEditEngineConfigurationQuery
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function withIsDefault($default) {
|
||||||
|
$this->default = $default;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withIsDisabled($disabled) {
|
||||||
|
$this->disabled = $disabled;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function newResultObject() {
|
public function newResultObject() {
|
||||||
return new PhabricatorEditEngineConfiguration();
|
return new PhabricatorEditEngineConfiguration();
|
||||||
}
|
}
|
||||||
|
@ -118,6 +130,22 @@ final class PhabricatorEditEngineConfigurationQuery
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->default !== null) {
|
||||||
|
foreach ($page as $key => $config) {
|
||||||
|
if ($config->getIsDefault() != $this->default) {
|
||||||
|
unset($page[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->disabled !== null) {
|
||||||
|
foreach ($page as $key => $config) {
|
||||||
|
if ($config->getIsDisabled() != $this->disabled) {
|
||||||
|
unset($page[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->identifiers !== null) {
|
if ($this->identifiers !== null) {
|
||||||
$identifiers = array_fuse($this->identifiers);
|
$identifiers = array_fuse($this->identifiers);
|
||||||
foreach ($page as $key => $config) {
|
foreach ($page as $key => $config) {
|
||||||
|
|
|
@ -92,6 +92,13 @@ final class PhabricatorEditEngineConfigurationSearchEngine
|
||||||
}
|
}
|
||||||
$item->setHref("/transactions/editengine/{$engine_key}/view/{$key}/");
|
$item->setHref("/transactions/editengine/{$engine_key}/view/{$key}/");
|
||||||
|
|
||||||
|
if ($config->getIsDefault()) {
|
||||||
|
$item->addIcon('fa-plus', pht('Default'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($config->getIsDisabled()) {
|
||||||
|
$item->addIcon('fa-ban', pht('Disabled'));
|
||||||
|
}
|
||||||
|
|
||||||
$list->addItem($item);
|
$list->addItem($item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ final class PhabricatorEditEngineConfiguration
|
||||||
PhabricatorUser $actor,
|
PhabricatorUser $actor,
|
||||||
PhabricatorEditEngine $engine) {
|
PhabricatorEditEngine $engine) {
|
||||||
|
|
||||||
// TODO: This should probably be controlled by a new defualt capability.
|
// TODO: This should probably be controlled by a new default capability.
|
||||||
$edit_policy = PhabricatorPolicies::POLICY_ADMIN;
|
$edit_policy = PhabricatorPolicies::POLICY_ADMIN;
|
||||||
|
|
||||||
return id(new PhabricatorEditEngineConfiguration())
|
return id(new PhabricatorEditEngineConfiguration())
|
||||||
|
|
|
@ -8,6 +8,8 @@ final class PhabricatorEditEngineConfigurationTransaction
|
||||||
const TYPE_ORDER = 'editengine.config.order';
|
const TYPE_ORDER = 'editengine.config.order';
|
||||||
const TYPE_DEFAULT = 'editengine.config.default';
|
const TYPE_DEFAULT = 'editengine.config.default';
|
||||||
const TYPE_LOCKS = 'editengine.config.locks';
|
const TYPE_LOCKS = 'editengine.config.locks';
|
||||||
|
const TYPE_DEFAULTCREATE = 'editengine.config.default.create';
|
||||||
|
const TYPE_DISABLE = 'editengine.config.disable';
|
||||||
|
|
||||||
public function getApplicationName() {
|
public function getApplicationName() {
|
||||||
return 'search';
|
return 'search';
|
||||||
|
@ -60,6 +62,26 @@ final class PhabricatorEditEngineConfigurationTransaction
|
||||||
return pht(
|
return pht(
|
||||||
'%s changed locked and hidden fields.',
|
'%s changed locked and hidden fields.',
|
||||||
$this->renderHandleLink($author_phid));
|
$this->renderHandleLink($author_phid));
|
||||||
|
case self::TYPE_DEFAULTCREATE:
|
||||||
|
if ($new) {
|
||||||
|
return pht(
|
||||||
|
'%s added this form to the "Create" menu.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
} else {
|
||||||
|
return pht(
|
||||||
|
'%s removed this form from the "Create" menu.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
}
|
||||||
|
case self::TYPE_DISABLE:
|
||||||
|
if ($new) {
|
||||||
|
return pht(
|
||||||
|
'%s disabled this form.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
} else {
|
||||||
|
return pht(
|
||||||
|
'%s enabled this form.',
|
||||||
|
$this->renderHandleLink($author_phid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return parent::getTitle();
|
return parent::getTitle();
|
||||||
|
|
Loading…
Reference in a new issue