authInfo->getPerms('global')->check(Perm::G_CONFIG_MANAGE)) Template::throwError(403); $isNew = true; $sName = (string)filter_input(INPUT_GET, 'name'); $sType = (string)filter_input(INPUT_GET, 'type'); $sValue = null; $loadValueInfo = fn() => $cfg->getValueInfo($sName); if(!empty($sName)) { $sInfo = $loadValueInfo(); if($sInfo !== null) { $isNew = false; $sName = $sInfo->getName(); $sType = $sInfo->getType(); $sValue = $sInfo->getValue(); } } while($_SERVER['REQUEST_METHOD'] === 'POST' && CSRF::validateRequest()) { if($isNew) { $sName = trim((string)filter_input(INPUT_POST, 'conf_name')); if(!DbConfig::validateName($sName)) { echo 'Name contains invalid characters.'; break; } $sType = trim((string)filter_input(INPUT_POST, 'conf_type')); if(!in_array($sType, ['string', 'int', 'float', 'bool', 'array'])) { echo 'Invalid type specified.'; break; } } if($sType === 'array') { $applyFunc = $cfg->setArray(...); $sValue = []; $sRaw = filter_input(INPUT_POST, 'conf_value', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); foreach($sRaw as $rValue) { if(strpos($rValue, ':') === 1) { $rType = $rValue[0]; $rValue = substr($rValue, 2); $sValue[] = match($rType) { 's' => $rValue, 'i' => (int)$rValue, 'd' => (float)$rValue, 'f' => (float)$rValue, 'b' => $rValue !== 'false' && $rValue !== '0' && $rValue !== '', default => '', }; } else $sValue[] = $rValue; } } elseif($sType === 'bool') { $sValue = !empty($_POST['conf_value']); $applyFunc = $cfg->setBoolean(...); } else { $sValue = filter_input(INPUT_POST, 'conf_value'); if($sType === 'int') { $applyFunc = $cfg->setInteger(...); $sValue = (int)$sValue; } elseif($sType === 'float') { $applyFunc = $cfg->setFloat(...); $sValue = (float)$sValue; } else $applyFunc = $cfg->setString(...); } $msz->createAuditLog($isNew ? 'CONFIG_CREATE' : 'CONFIG_UPDATE', [$sName]); $applyFunc($sName, $sValue); Tools::redirect($msz->urls->format('manage-general-settings')); return; } if($sType === 'array' && !empty($sValue)) foreach($sValue as $key => $value) $sValue[$key] = gettype($value)[0] . ':' . $value; Template::render('manage.general.setting', [ 'config_new' => $isNew, 'config_name' => $sName, 'config_type' => $sType, 'config_value' => $sValue, ]);