. // }}} /** * Handle network public feed * * @package GNUsocial * @category Controller * * @author Hugo Sales * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace App\Controller; use App\Core\Controller; use App\Core\Form; use function App\Core\I18n\_m; use App\Util\Common; use App\Util\Exceptiion\InvalidFormException; use App\Util\Formatting; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\HttpFoundation\Request; class AdminPanel extends Controller { /** * Handler for the site admin panel section. Allows the * administrator to change various configuration options */ public function site(Request $request) { // TODO CHECK PERMISSION $defaults = Common::getConfigDefaults(); $options = []; foreach ($defaults as $key => $inner) { $options[$key] = []; foreach (array_keys($inner) as $inner_key) { $options[_m($key)][_m($inner_key)] = "{$key}:{$inner_key}"; } } $form = Form::create([ ['setting', ChoiceType::class, ['label' => _m('Setting'), 'choices' => $options]], ['value', TextType::class, ['label' => _m('Value')]], ['save', SubmitType::class, ['label' => _m('Set site setting')]], ]); $form->handleRequest($request); if ($form->isSubmitted()) { $data = $form->getData(); if ($form->isValid() && array_key_exists('setting', $data)) { list($section, $setting) = explode(':', $data['setting']); $value = $data['value']; if (preg_match('/^[0-9]+$/', $value)) { $value = (int) $value; } elseif (strstr($value, ',') === false) { // empty, string } elseif (Formatting::toArray($value, $value)) { // empty } elseif (preg_match('/true|false/i', $value)) { $value = ($value == 'true'); } $default = $defaults[$section][$setting]; // Sanity check if (gettype($default) === gettype($value)) { $old_value = Common::config($section, $setting); Common::setConfig($section, $setting, $value); return [ '_template' => 'config/admin.html.twig', 'form' => $form->createView(), 'old_value' => Formatting::toString($old_value), 'default' => Formatting::toString($default), ]; } } else { throw new InvalidFormException(); } } return [ '_template' => 'config/admin.html.twig', 'form' => $form->createView(), ]; } }