forked from GNUsocial/gnu-social
[CONTROLLER][ADMIN][CONFIG] Fix form to use static strings as keys and add labels seperately; convert input from string to appropriate type
This commit is contained in:
parent
292d98a33c
commit
107351a6b5
@ -33,10 +33,11 @@
|
|||||||
namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
use App\Core\Controller;
|
use App\Core\Controller;
|
||||||
use App\Core\DB\DB;
|
|
||||||
use App\Core\DB\DefaultSettings;
|
use App\Core\DB\DefaultSettings;
|
||||||
use App\Core\Form;
|
use App\Core\Form;
|
||||||
use function App\Core\I18n\_m;
|
use function App\Core\I18n\_m;
|
||||||
|
use App\Util\Common;
|
||||||
|
use App\Util\Formatting;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
@ -56,29 +57,35 @@ class AdminPanel extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$form = Form::create([
|
$form = Form::create([
|
||||||
[_m('Setting'), ChoiceType::class, ['choices' => $options]],
|
['setting', ChoiceType::class, ['label' => _m('Setting'), 'choices' => $options]],
|
||||||
[_m('Value'), TextType::class],
|
['value', TextType::class, ['label' => _m('Value')]],
|
||||||
['save', SubmitType::class, ['label' => _m('Set site setting')]],
|
['save', SubmitType::class, ['label' => _m('Set site setting')]],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$form->handleRequest($request);
|
$form->handleRequest($request);
|
||||||
if ($form->isSubmitted()) {
|
if ($form->isSubmitted()) {
|
||||||
$data = $form->getData();
|
$data = $form->getData();
|
||||||
if ($form->isValid() && array_key_exists(_m('Setting'), $data)) {
|
if ($form->isValid() && array_key_exists('setting', $data)) {
|
||||||
list($section, $setting) = explode(':', $data[_m('Setting')]);
|
list($section, $setting) = explode(':', $data['setting']);
|
||||||
$value = $data[_m('Value')];
|
$value = $data['value'];
|
||||||
$default = $defaults[$section][$setting];
|
if (preg_match('/^[0-9]+$/', $value)) {
|
||||||
|
$value = (int) $value;
|
||||||
|
} elseif (Formatting::toArray($value, $value)) {
|
||||||
|
// empty
|
||||||
|
} elseif (preg_match('/true|false/i', $value)) {
|
||||||
|
$value = ($value == 'true');
|
||||||
|
}
|
||||||
|
|
||||||
|
$default = $defaults[$section][$setting];
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if (gettype($default) === gettype($value)) {
|
if (gettype($default) === gettype($value)) {
|
||||||
$conf = DB::find('config', ['section' => $section, 'setting' => $setting]);
|
$old_value = Common::config($section, $setting);
|
||||||
$old_value = unserialize($conf->getValue());
|
Common::setConfig($section, $setting, $value);
|
||||||
$conf->setValue(serialize($value));
|
|
||||||
DB::flush();
|
|
||||||
return [
|
return [
|
||||||
'_template' => 'config/admin.html.twig',
|
'_template' => 'config/admin.html.twig',
|
||||||
'form' => $form->createView(),
|
'form' => $form->createView(),
|
||||||
'old_value' => $old_value,
|
'old_value' => Formatting::toString($old_value),
|
||||||
'default' => $default,
|
'default' => Formatting::toString($default),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user