Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15292654
D17442.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
14 KB
Referenced Files
None
Subscribers
None
D17442.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2610,6 +2610,7 @@
'PhabricatorEditEngineConfigurationSaveController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSaveController.php',
'PhabricatorEditEngineConfigurationSearchEngine' => 'applications/transactions/query/PhabricatorEditEngineConfigurationSearchEngine.php',
'PhabricatorEditEngineConfigurationSortController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php',
+ 'PhabricatorEditEngineConfigurationSubtypeController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php',
'PhabricatorEditEngineConfigurationTransaction' => 'applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php',
'PhabricatorEditEngineConfigurationTransactionQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationTransactionQuery.php',
'PhabricatorEditEngineConfigurationViewController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php',
@@ -7669,6 +7670,7 @@
'PhabricatorEditEngineConfigurationSaveController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineConfigurationSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorEditEngineConfigurationSortController' => 'PhabricatorEditEngineController',
+ 'PhabricatorEditEngineConfigurationSubtypeController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineConfigurationTransaction' => 'PhabricatorApplicationTransaction',
'PhabricatorEditEngineConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorEditEngineConfigurationViewController' => 'PhabricatorEditEngineController',
diff --git a/src/applications/maniphest/storage/ManiphestTask.php b/src/applications/maniphest/storage/ManiphestTask.php
--- a/src/applications/maniphest/storage/ManiphestTask.php
+++ b/src/applications/maniphest/storage/ManiphestTask.php
@@ -557,4 +557,9 @@
return $this->setSubtype($value);
}
+ public function newEditEngineSubtypeMap() {
+ $config = PhabricatorEnv::getEnvConfig('maniphest.subtypes');
+ return PhabricatorEditEngineSubtype::newSubtypeMap($config);
+ }
+
}
diff --git a/src/applications/transactions/application/PhabricatorTransactionsApplication.php b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
--- a/src/applications/transactions/application/PhabricatorTransactionsApplication.php
+++ b/src/applications/transactions/application/PhabricatorTransactionsApplication.php
@@ -55,6 +55,8 @@
'PhabricatorEditEngineConfigurationDefaultsController',
'lock/(?P<key>[^/]+)/' =>
'PhabricatorEditEngineConfigurationLockController',
+ 'subtype/(?P<key>[^/]+)/' =>
+ 'PhabricatorEditEngineConfigurationSubtypeController',
'defaultcreate/(?P<key>[^/]+)/' =>
'PhabricatorEditEngineConfigurationDefaultCreateController',
'defaultedit/(?P<key>[^/]+)/' =>
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php
@@ -0,0 +1,85 @@
+<?php
+
+final class PhabricatorEditEngineConfigurationSubtypeController
+ extends PhabricatorEditEngineController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $engine_key = $request->getURIData('engineKey');
+ $this->setEngineKey($engine_key);
+
+ $key = $request->getURIData('key');
+ $viewer = $this->getViewer();
+
+ $config = id(new PhabricatorEditEngineConfigurationQuery())
+ ->setViewer($viewer)
+ ->withEngineKeys(array($engine_key))
+ ->withIdentifiers(array($key))
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
+ if (!$config) {
+ return new Aphront404Response();
+ }
+
+ $cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
+
+ $engine = $config->getEngine();
+ if (!$engine->supportsSubtypes()) {
+ return new Aphront404Response();
+ }
+
+ if ($request->isFormPost()) {
+ $xactions = array();
+
+ $subtype = $request->getStr('subtype');
+ $type_subtype =
+ PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE;
+
+ $xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
+ ->setTransactionType($type_subtype)
+ ->setNewValue($subtype);
+
+ $editor = id(new PhabricatorEditEngineConfigurationEditor())
+ ->setActor($viewer)
+ ->setContentSourceFromRequest($request)
+ ->setContinueOnMissingFields(true)
+ ->setContinueOnNoEffect(true);
+
+ $editor->applyTransactions($config, $xactions);
+
+ return id(new AphrontRedirectResponse())
+ ->setURI($cancel_uri);
+ }
+
+ $fields = $engine->getFieldsForConfig($config);
+
+ $help = pht(<<<EOTEXT
+Choose the object **subtype** that this form should create and edit.
+EOTEXT
+ );
+
+ $map = $engine->newSubtypeMap();
+ $map = mpull($map, 'getName');
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendRemarkupInstructions($help)
+ ->appendControl(
+ id(new AphrontFormSelectControl())
+ ->setName('subtype')
+ ->setLabel(pht('Subtype'))
+ ->setValue($config->getSubtype())
+ ->setOptions($map));
+
+ return $this->newDialog()
+ ->setTitle(pht('Change Form Subtype'))
+ ->setWidth(AphrontDialogView::WIDTH_FORM)
+ ->appendForm($form)
+ ->addSubmitButton(pht('Save Changes'))
+ ->addCancelButton($cancel_uri);
+ }
+
+}
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php
--- a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php
@@ -151,6 +151,27 @@
->setWorkflow(true)
->setDisabled(!$can_edit));
+ if ($engine->supportsSubtypes()) {
+ $subtype_uri = "{$base_uri}/subtype/{$form_key}/";
+
+ $curtain->addAction(
+ id(new PhabricatorActionView())
+ ->setName(pht('Change Form Subtype'))
+ ->setIcon('fa-drivers-license-o')
+ ->setHref($subtype_uri)
+ ->setWorkflow(true)
+ ->setDisabled(!$can_edit));
+ }
+
+ $curtain->addAction(
+ id(new PhabricatorActionView())
+ ->setName(pht('Change Default Values'))
+ ->setIcon('fa-paint-brush')
+ ->setHref($defaults_uri)
+ ->setWorkflow(!$can_edit)
+ ->setDisabled(!$can_edit));
+
+
$disable_uri = "{$base_uri}/disable/{$form_key}/";
if ($config->getIsDisabled()) {
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngine.php b/src/applications/transactions/editengine/PhabricatorEditEngine.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngine.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngine.php
@@ -213,6 +213,20 @@
return $fields;
}
+ final public function supportsSubtypes() {
+ try {
+ $object = $this->newEditableObject();
+ } catch (Exception $ex) {
+ return false;
+ }
+
+ return ($object instanceof PhabricatorEditEngineSubtypeInterface);
+ }
+
+ final public function newSubtypeMap() {
+ return $this->newEditableObject()->newEditEngineSubtypeMap();
+ }
+
/* -( Display Text )------------------------------------------------------- */
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php b/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngineSubtype.php
@@ -6,6 +6,27 @@
const SUBTYPE_DEFAULT = 'default';
+ private $key;
+ private $name;
+
+ public function setKey($key) {
+ $this->key = $key;
+ return $this;
+ }
+
+ public function getKey() {
+ return $this->key;
+ }
+
+ public function setName($name) {
+ $this->name = $name;
+ return $this;
+ }
+
+ public function getName() {
+ return $this->name;
+ }
+
public static function validateSubtypeKey($subtype) {
if (strlen($subtype) > 64) {
throw new Exception(
@@ -81,4 +102,19 @@
}
}
+ public static function newSubtypeMap(array $config) {
+ $map = array();
+
+ foreach ($config as $entry) {
+ $key = $entry['key'];
+ $name = $entry['name'];
+
+ $map[$key] = id(new self())
+ ->setKey($key)
+ ->setName($name);
+ }
+
+ return $map;
+ }
+
}
diff --git a/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php
--- a/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php
+++ b/src/applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php
@@ -4,5 +4,6 @@
public function getEditEngineSubtype();
public function setEditEngineSubtype($subtype);
+ public function newEditEngineSubtypeMap();
}
diff --git a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
--- a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
+++ b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php
@@ -21,6 +21,7 @@
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
+ $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE;
$types[] =
PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE;
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT;
@@ -55,6 +56,22 @@
$errors[] = $error;
}
break;
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
+ $map = $object->getEngine()->newSubtypeMap();
+ foreach ($xactions as $xaction) {
+ $new = $xaction->getNewValue();
+
+ if (isset($map[$new])) {
+ continue;
+ }
+
+ $errors[] = new PhabricatorApplicationTransactionValidationError(
+ $type,
+ pht('Invalid'),
+ pht('Subtype "%s" is not a valid subtype.', $new),
+ $xaction);
+ }
+ break;
}
return $errors;
@@ -76,6 +93,8 @@
return $object->getFieldDefault($field_key);
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
return $object->getFieldLocks();
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
+ return $object->getSubtype();
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
return (int)$object->getIsDefault();
case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
@@ -86,6 +105,7 @@
return (int)$object->getCreateOrder();
case PhabricatorEditEngineConfigurationTransaction::TYPE_EDITORDER:
return (int)$object->getEditOrder();
+
}
}
@@ -99,6 +119,7 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER:
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
return $xaction->getNewValue();
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
@@ -130,6 +151,9 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
$object->setFieldLocks($xaction->getNewValue());
return;
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
+ $object->setSubtype($xaction->getNewValue());
+ return;
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
$object->setIsDefault($xaction->getNewValue());
return;
@@ -161,6 +185,7 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
case PhabricatorEditEngineConfigurationTransaction::TYPE_ISEDIT:
case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_SUBTYPE:
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULTCREATE:
case PhabricatorEditEngineConfigurationTransaction::TYPE_DISABLE:
case PhabricatorEditEngineConfigurationTransaction::TYPE_CREATEORDER:
diff --git a/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php b/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
--- a/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
+++ b/src/applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php
@@ -13,6 +13,7 @@
const TYPE_DISABLE = 'editengine.config.disable';
const TYPE_CREATEORDER = 'editengine.order.create';
const TYPE_EDITORDER = 'editengine.order.edit';
+ const TYPE_SUBTYPE = 'editengine.config.subtype';
public function getApplicationName() {
return 'search';
@@ -99,6 +100,12 @@
'%s enabled this form.',
$this->renderHandleLink($author_phid));
}
+ case self::TYPE_SUBTYPE:
+ return pht(
+ '%s changed the subtype of this form from "%s" to "%s".',
+ $this->renderHandleLink($author_phid),
+ $old,
+ $new);
}
return parent::getTitle();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Mar 6, 2:42 AM (6 d, 1 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7228538
Default Alt Text
D17442.diff (14 KB)
Attached To
Mode
D17442: Allow EditEngine forms for objects which support subtyping to have a subtype configured
Attached
Detach File
Event Timeline
Log In to Comment