Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15303119
D14509.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
17 KB
Referenced Files
None
Subscribers
None
D14509.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -7,7 +7,7 @@
*/
return array(
'names' => array(
- 'core.pkg.css' => '0689cd7e',
+ 'core.pkg.css' => '9f339987',
'core.pkg.js' => '47dc9ebb',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '2de124c9',
@@ -130,7 +130,7 @@
'rsrc/css/phui/phui-document.css' => '765a9dac',
'rsrc/css/phui/phui-feed-story.css' => 'b7b26d23',
'rsrc/css/phui/phui-fontkit.css' => '9cda225e',
- 'rsrc/css/phui/phui-form-view.css' => '621b21c5',
+ 'rsrc/css/phui/phui-form-view.css' => 'c1d2ef29',
'rsrc/css/phui/phui-form.css' => 'afdb2c6e',
'rsrc/css/phui/phui-header-view.css' => '55bb32dd',
'rsrc/css/phui/phui-icon.css' => 'b0a6b1b6',
@@ -795,7 +795,7 @@
'phui-font-icon-base-css' => 'ecbbb4c2',
'phui-fontkit-css' => '9cda225e',
'phui-form-css' => 'afdb2c6e',
- 'phui-form-view-css' => '621b21c5',
+ 'phui-form-view-css' => 'c1d2ef29',
'phui-header-view-css' => '55bb32dd',
'phui-icon-view-css' => 'b0a6b1b6',
'phui-image-mask-css' => '5a8b09c8',
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
@@ -2117,6 +2117,7 @@
'PhabricatorEditEngineConfigurationEditEngine' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php',
'PhabricatorEditEngineConfigurationEditor' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php',
'PhabricatorEditEngineConfigurationListController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationListController.php',
+ 'PhabricatorEditEngineConfigurationLockController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php',
'PhabricatorEditEngineConfigurationPHIDType' => 'applications/transactions/phid/PhabricatorEditEngineConfigurationPHIDType.php',
'PhabricatorEditEngineConfigurationQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationQuery.php',
'PhabricatorEditEngineConfigurationReorderController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php',
@@ -6211,6 +6212,7 @@
'PhabricatorEditEngineConfigurationEditEngine' => 'PhabricatorEditEngine',
'PhabricatorEditEngineConfigurationEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorEditEngineConfigurationListController' => 'PhabricatorEditEngineController',
+ 'PhabricatorEditEngineConfigurationLockController' => 'PhabricatorEditEngineController',
'PhabricatorEditEngineConfigurationPHIDType' => 'PhabricatorPHIDType',
'PhabricatorEditEngineConfigurationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorEditEngineConfigurationReorderController' => 'PhabricatorEditEngineController',
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
@@ -49,6 +49,8 @@
'PhabricatorEditEngineConfigurationReorderController',
'defaults/(?P<key>[^/]+)/' =>
'PhabricatorEditEngineConfigurationDefaultsController',
+ 'lock/(?P<key>[^/]+)/' =>
+ 'PhabricatorEditEngineConfigurationLockController',
),
),
),
diff --git a/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php
@@ -0,0 +1,109 @@
+<?php
+
+final class PhabricatorEditEngineConfigurationLockController
+ 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 id(new Aphront404Response());
+ }
+
+ $cancel_uri = "/transactions/editengine/{$engine_key}/view/{$key}/";
+
+ if ($request->isFormPost()) {
+ $xactions = array();
+
+ $locks = $request->getArr('locks');
+ $type_locks = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
+
+ $xactions[] = id(new PhabricatorEditEngineConfigurationTransaction())
+ ->setTransactionType($type_locks)
+ ->setNewValue($locks);
+
+ $editor = id(new PhabricatorEditEngineConfigurationEditor())
+ ->setActor($viewer)
+ ->setContentSourceFromRequest($request)
+ ->setContinueOnMissingFields(true)
+ ->setContinueOnNoEffect(true);
+
+ $editor->applyTransactions($config, $xactions);
+
+ return id(new AphrontRedirectResponse())
+ ->setURI($cancel_uri);
+ }
+
+ $engine = $config->getEngine();
+ $fields = $engine->getFieldsForConfig($config);
+
+ $help = pht(<<<EOTEXT
+**Locked** fields are visible in the form, but their values can not be changed
+by the user.
+
+**Hidden** fields are not visible in the form.
+
+Any assigned default values are still respected, even if the field is locked
+or hidden.
+EOTEXT
+ );
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendRemarkupInstructions($help);
+
+ $locks = $config->getFieldLocks();
+
+ $lock_visible = PhabricatorEditEngineConfiguration::LOCK_VISIBLE;
+ $lock_locked = PhabricatorEditEngineConfiguration::LOCK_LOCKED;
+ $lock_hidden = PhabricatorEditEngineConfiguration::LOCK_HIDDEN;
+
+ $map = array(
+ $lock_visible => pht('Visible'),
+ $lock_locked => pht("\xF0\x9F\x94\x92 Locked"),
+ $lock_hidden => pht("\xE2\x9C\x98 Hidden"),
+ );
+
+ foreach ($fields as $field) {
+ if (!$field->getIsLockable()) {
+ continue;
+ }
+
+ $key = $field->getKey();
+
+ $label = $field->getLabel();
+ if (!strlen($label)) {
+ $label = $key;
+ }
+
+ $form->appendControl(
+ id(new AphrontFormSelectControl())
+ ->setName('locks['.$key.']')
+ ->setLabel($label)
+ ->setValue(idx($locks, $key, $lock_visible))
+ ->setOptions($map));
+ }
+
+ return $this->newDialog()
+ ->setTitle(pht('Lock / Hide Fields'))
+ ->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
@@ -139,6 +139,16 @@
->setWorkflow(true)
->setDisabled(!$can_edit));
+ $lock_uri = "{$base_uri}/lock/{$form_key}/";
+
+ $view->addAction(
+ id(new PhabricatorActionView())
+ ->setName(pht('Lock / Hide Fields'))
+ ->setIcon('fa-lock')
+ ->setHref($lock_uri)
+ ->setWorkflow(true)
+ ->setDisabled(!$can_edit));
+
return $view;
}
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
@@ -658,12 +658,22 @@
$validation_exception = null;
if ($request->isFormPost()) {
foreach ($fields as $field) {
+ if ($field->getIsLocked() || $field->getIsHidden()) {
+ continue;
+ }
+
$field->readValueFromSubmit($request);
}
$xactions = array();
foreach ($fields as $field) {
- $xactions[] = $field->generateTransaction(clone $template);
+ $xaction = $field->generateTransaction(clone $template);
+
+ if (!$xaction) {
+ continue;
+ }
+
+ $xactions[] = $xaction;
}
$editor = $object->getApplicationTransactionEditor()
@@ -683,6 +693,10 @@
} else {
if ($this->getIsCreate()) {
foreach ($fields as $field) {
+ if ($field->getIsLocked() || $field->getIsHidden()) {
+ continue;
+ }
+
$field->readValueFromRequest($request);
}
} else {
diff --git a/src/applications/transactions/editfield/PhabricatorEditField.php b/src/applications/transactions/editfield/PhabricatorEditField.php
--- a/src/applications/transactions/editfield/PhabricatorEditField.php
+++ b/src/applications/transactions/editfield/PhabricatorEditField.php
@@ -13,11 +13,16 @@
private $metadata = array();
private $description;
private $editTypeKey;
+
private $isLocked;
+ private $isHidden;
+
private $isPreview;
- private $isReorderable = true;
private $isEditDefaults;
+
+ private $isReorderable = true;
private $isDefaultable = true;
+ private $isLockable = true;
public function setKey($key) {
$this->key = $key;
@@ -118,6 +123,24 @@
return $this->isDefaultable;
}
+ public function setIsLockable($is_lockable) {
+ $this->isLockable = $is_lockable;
+ return $this;
+ }
+
+ public function getIsLockable() {
+ return $this->isLockable;
+ }
+
+ public function setIsHidden($is_hidden) {
+ $this->isHidden = $is_hidden;
+ return $this;
+ }
+
+ public function getIsHidden() {
+ return $this->isHidden;
+ }
+
protected function newControl() {
throw new PhutilMethodNotImplementedException();
}
@@ -138,10 +161,17 @@
if ($this->getIsPreview()) {
$disabled = true;
+ $hidden = false;
} else if ($this->getIsEditDefaults()) {
$disabled = false;
+ $hidden = false;
} else {
$disabled = $this->getIsLocked();
+ $hidden = $this->getIsHidden();
+ }
+
+ if ($hidden) {
+ return null;
}
$control->setDisabled($disabled);
@@ -152,6 +182,18 @@
public function appendToForm(AphrontFormView $form) {
$control = $this->renderControl();
if ($control !== null) {
+
+ if ($this->getIsPreview()) {
+ if ($this->getIsHidden()) {
+ $control
+ ->addClass('aphront-form-preview-hidden')
+ ->setError(pht('Hidden'));
+ } else if ($this->getIsLocked()) {
+ $control
+ ->setError(pht('Locked'));
+ }
+ }
+
$form->appendControl($control);
}
return $this;
@@ -187,6 +229,10 @@
public function generateTransaction(
PhabricatorApplicationTransaction $xaction) {
+ if (!$this->getTransactionType()) {
+ return null;
+ }
+
$xaction
->setTransactionType($this->getTransactionType())
->setNewValue($this->getValueForTransaction());
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_PREAMBLE;
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
$types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT;
+ $types[] = PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS;
return $types;
}
@@ -67,6 +68,8 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
$field_key = $xaction->getMetadataValue('field.key');
return $object->getFieldDefault($field_key);
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
+ return $object->getFieldLocks();
}
}
@@ -79,6 +82,7 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER:
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
return $xaction->getNewValue();
}
}
@@ -101,6 +105,9 @@
$field_key = $xaction->getMetadataValue('field.key');
$object->setFieldDefault($field_key, $xaction->getNewValue());
return;
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
+ $object->setFieldLocks($xaction->getNewValue());
+ return;
}
return parent::applyCustomInternalTransaction($object, $xaction);
@@ -115,6 +122,7 @@
case PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE;
case PhabricatorEditEngineConfigurationTransaction::TYPE_ORDER;
case PhabricatorEditEngineConfigurationTransaction::TYPE_DEFAULT:
+ case PhabricatorEditEngineConfigurationTransaction::TYPE_LOCKS:
return;
}
diff --git a/src/applications/transactions/storage/PhabricatorEditEngineConfiguration.php b/src/applications/transactions/storage/PhabricatorEditEngineConfiguration.php
--- a/src/applications/transactions/storage/PhabricatorEditEngineConfiguration.php
+++ b/src/applications/transactions/storage/PhabricatorEditEngineConfiguration.php
@@ -17,6 +17,10 @@
private $engine = self::ATTACHABLE;
+ const LOCK_VISIBLE = 'visible';
+ const LOCK_LOCKED = 'locked';
+ const LOCK_HIDDEN = 'hidden';
+
public function getTableName() {
return 'search_editengineconfiguration';
}
@@ -97,6 +101,22 @@
}
}
+ $locks = $this->getFieldLocks();
+ foreach ($fields as $field) {
+ $key = $field->getKey();
+ switch (idx($locks, $key)) {
+ case self::LOCK_LOCKED:
+ $field->setIsLocked(true);
+ break;
+ case self::LOCK_HIDDEN:
+ $field->setIsHidden(true);
+ break;
+ case self::LOCK_VISIBLE:
+ default:
+ break;
+ }
+ }
+
$fields = $this->reorderFields($fields);
$preamble = $this->getPreamble();
@@ -106,6 +126,7 @@
->setKey('config.preamble')
->setIsReorderable(false)
->setIsDefaultable(false)
+ ->setIsLockable(false)
->setValue($preamble),
) + $fields;
}
@@ -116,19 +137,7 @@
private function reorderFields(array $fields) {
$keys = $this->getFieldOrder();
$fields = array_select_keys($fields, $keys) + $fields;
-
- // Now, move locked fields to the bottom.
- $head = array();
- $tail = array();
- foreach ($fields as $key => $field) {
- if (!$field->getIsLocked()) {
- $head[$key] = $field;
- } else {
- $tail[$key] = $field;
- }
- }
-
- return $head + $tail;
+ return $fields;
}
public function getURI() {
@@ -176,6 +185,14 @@
return $this->getProperty('order', array());
}
+ public function setFieldLocks(array $field_locks) {
+ return $this->setProperty('locks', $field_locks);
+ }
+
+ public function getFieldLocks() {
+ return $this->getProperty('locks', array());
+ }
+
public function getFieldDefault($key) {
$defaults = $this->getProperty('defaults', array());
return idx($defaults, $key);
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
@@ -7,6 +7,7 @@
const TYPE_PREAMBLE = 'editengine.config.preamble';
const TYPE_ORDER = 'editengine.config.order';
const TYPE_DEFAULT = 'editengine.config.default';
+ const TYPE_LOCKS = 'editengine.config.locks';
public function getApplicationName() {
return 'search';
@@ -55,6 +56,10 @@
'%s changed the default value for field "%s".',
$this->renderHandleLink($author_phid),
$key);
+ case self::TYPE_LOCKS:
+ return pht(
+ '%s changed locked and hidden fields.',
+ $this->renderHandleLink($author_phid));
}
return parent::getTitle();
diff --git a/webroot/rsrc/css/phui/phui-form-view.css b/webroot/rsrc/css/phui/phui-form-view.css
--- a/webroot/rsrc/css/phui/phui-form-view.css
+++ b/webroot/rsrc/css/phui/phui-form-view.css
@@ -527,3 +527,7 @@
.aphront-form-choose-table .aphront-form-choose-button-cell {
padding: 4px 8px;
}
+
+.aphront-form-preview-hidden {
+ opacity: 0.5;
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Mar 7, 12:11 AM (15 h, 3 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7309829
Default Alt Text
D14509.diff (17 KB)
Attached To
Mode
D14509: Allow EditEngine form fields to be locked and hidden
Attached
Detach File
Event Timeline
Log In to Comment