- Botón "Añadir tipo de examen…" debajo del selector _c8j2g16 - Al escribir y guardar, añade la opción vía API y la selecciona al instante - api/lab/add_exam_option.php: guarda la nueva opción en el esquema del formulario - Migración actualizada: solo elimina condiciones de separadores (no toca el selector) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
1.4 KiB
PHP
43 lines
1.4 KiB
PHP
<?php
|
|
/**
|
|
* POST /api/lab/add_exam_option.php
|
|
* Añade una opción al campo selector de tipo de examen (_c8j2g16) del formulario id=15.
|
|
* Body JSON: { exam_name: string }
|
|
*/
|
|
require_once __DIR__ . '/_helpers.php';
|
|
requireMethod('POST');
|
|
requireAdmin();
|
|
|
|
$body = inputJson();
|
|
$examName = trim($body['exam_name'] ?? '');
|
|
|
|
if (!$examName) jsonError('exam_name requerido.');
|
|
if (strlen($examName) > 80) jsonError('Nombre demasiado largo (máx 80 chars).');
|
|
if (!preg_match('/\S/', $examName)) jsonError('Nombre inválido.');
|
|
|
|
$db = Database::getInstance();
|
|
$row = $db->fetch("SELECT esquema FROM lab_formularios WHERE id = 15 LIMIT 1");
|
|
if (!$row) jsonError('Formulario no encontrado.', 404);
|
|
|
|
$esquema = json_decode($row['esquema'], true);
|
|
if (!is_array($esquema)) jsonError('Esquema inválido.', 500);
|
|
|
|
$updated = false;
|
|
foreach ($esquema as &$campo) {
|
|
if (($campo['id'] ?? '') !== '_c8j2g16') continue;
|
|
$opts = $campo['options'] ?? [];
|
|
if (in_array($examName, $opts, true)) jsonError("El tipo \"$examName\" ya existe.");
|
|
$opts[] = $examName;
|
|
$campo['options'] = $opts;
|
|
$updated = true;
|
|
break;
|
|
}
|
|
unset($campo);
|
|
|
|
if (!$updated) jsonError('Campo selector de examen no encontrado en el formulario.', 500);
|
|
|
|
$db->getConnection()->prepare("UPDATE lab_formularios SET esquema = ? WHERE id = 15")
|
|
->execute([json_encode($esquema, JSON_UNESCAPED_UNICODE)]);
|
|
|
|
jsonOk(['exam_name' => $examName], "Tipo \"$examName\" añadido.");
|