Port MySQL settings to PHP
Summary: - Ports MySQL settings to PHP. - Removes "mysql.retries" -- this existed only because Magic Numbers Are Bad, but there is no concievable reason it should ever be set to anything other than 3. - Introduced "Hidden" config, which isn't visible from the web (for SaaS, we'll just mark anything with secret keys as "hidden"). - Introduced "Masked" config, which will be masked in darkconsole once that gets updated. - "Hidden" implies "Masked" and "Locked". - Moved "storage.default-namespace" here -- it probably makes more sense than core; this was my bad in T2255. - Put cancel button back for hidden/locked config. - Introduce 'class' config type. Test Plan: Viewed MySQL options. None are editable. Reviewers: codeblock, btrahan Reviewed By: codeblock CC: aran Maniphest Tasks: T2255 Differential Revision: https://secure.phabricator.com/D4326
This commit is contained in:
@@ -100,6 +100,15 @@ final class PhabricatorConfigEditController
|
||||
$error_view = id(new AphrontErrorView())
|
||||
->setTitle(pht('You broke everything!'))
|
||||
->setErrors($errors);
|
||||
} else if ($option->getHidden()) {
|
||||
$msg = pht(
|
||||
"This configuration is hidden and can not be edited or viewed from ".
|
||||
"the web interface.");
|
||||
|
||||
$error_view = id(new AphrontErrorView())
|
||||
->setTitle(pht('Configuration Hidden'))
|
||||
->setSeverity(AphrontErrorView::SEVERITY_WARNING)
|
||||
->appendChild('<p>'.phutil_escape_html($msg).'</p>');
|
||||
} else if ($option->getLocked()) {
|
||||
$msg = pht(
|
||||
"This configuration is locked and can not be edited from the web ".
|
||||
@@ -111,10 +120,14 @@ final class PhabricatorConfigEditController
|
||||
->appendChild('<p>'.phutil_escape_html($msg).'</p>');
|
||||
}
|
||||
|
||||
$control = $this->renderControl(
|
||||
$option,
|
||||
$display_value,
|
||||
$e_value);
|
||||
if ($option->getHidden()) {
|
||||
$control = null;
|
||||
} else {
|
||||
$control = $this->renderControl(
|
||||
$option,
|
||||
$display_value,
|
||||
$e_value);
|
||||
}
|
||||
|
||||
$engine = new PhabricatorMarkupEngine();
|
||||
$engine->addObject($option, 'description');
|
||||
@@ -135,14 +148,15 @@ final class PhabricatorConfigEditController
|
||||
->setValue($description))
|
||||
->appendChild($control);
|
||||
|
||||
$submit_control = id(new AphrontFormSubmitControl())
|
||||
->addCancelButton($done_uri);
|
||||
|
||||
if (!$option->getLocked()) {
|
||||
$form
|
||||
->appendChild(
|
||||
id(new AphrontFormSubmitControl())
|
||||
->addCancelButton($done_uri)
|
||||
->setValue(pht('Save Config Entry')));
|
||||
$submit_control->setValue(pht('Save Config Entry'));
|
||||
}
|
||||
|
||||
$form->appendChild($submit_control);
|
||||
|
||||
$examples = $this->renderExamples($option);
|
||||
if ($examples) {
|
||||
$form->appendChild(
|
||||
@@ -151,10 +165,12 @@ final class PhabricatorConfigEditController
|
||||
->setValue($examples));
|
||||
}
|
||||
|
||||
$form->appendChild(
|
||||
id(new AphrontFormMarkupControl())
|
||||
->setLabel(pht('Default'))
|
||||
->setValue($this->renderDefaults($option)));
|
||||
if (!$option->getHidden()) {
|
||||
$form->appendChild(
|
||||
id(new AphrontFormMarkupControl())
|
||||
->setLabel(pht('Default'))
|
||||
->setValue($this->renderDefaults($option)));
|
||||
}
|
||||
|
||||
$title = pht('Edit %s', $this->key);
|
||||
$short = pht('Edit');
|
||||
@@ -256,6 +272,20 @@ final class PhabricatorConfigEditController
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'class':
|
||||
if (!class_exists($value)) {
|
||||
$e_value = pht('Invalid');
|
||||
$errors[] = pht('Class does not exist.');
|
||||
} else {
|
||||
$base = $option->getBaseClass();
|
||||
if (!is_subclass_of($value, $base)) {
|
||||
$e_value = pht('Invalid');
|
||||
$errors[] = pht('Class is not of valid type.');
|
||||
} else {
|
||||
$set_value = $value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$json = json_decode($value, true);
|
||||
if ($json === null && strtolower($value) != 'null') {
|
||||
@@ -319,11 +349,26 @@ final class PhabricatorConfigEditController
|
||||
$control = id(new AphrontFormSelectControl())
|
||||
->setOptions(
|
||||
array(
|
||||
'' => '(Use Default)',
|
||||
'' => pht('(Use Default)'),
|
||||
'true' => idx($option->getOptions(), 0),
|
||||
'false' => idx($option->getOptions(), 1),
|
||||
));
|
||||
break;
|
||||
case 'class':
|
||||
$symbols = id(new PhutilSymbolLoader())
|
||||
->setType('class')
|
||||
->setAncestorClass($option->getBaseClass())
|
||||
->setConcreteOnly(true)
|
||||
->selectSymbolsWithoutLoading();
|
||||
$names = ipull($symbols, 'name', 'name');
|
||||
sort($names);
|
||||
$names = array(
|
||||
'' => pht('(Use Default)'),
|
||||
) + $names;
|
||||
|
||||
$control = id(new AphrontFormSelectControl())
|
||||
->setOptions($names);
|
||||
break;
|
||||
case 'list<string>':
|
||||
$control = id(new AphrontFormTextAreaControl())
|
||||
->setCaption(pht('Separate values with newlines or commas.'));
|
||||
|
||||
Reference in New Issue
Block a user