Fix: preservar todos los exámenes seleccionados al configurar tiempos
Al guardar config de un examen se sobreescribía _c8j2g16 con solo ese examen, perdiendo los demás en el reload. Ahora se envía exam_types (array completo), se guarda como array en datos_respuestas y sessionStorage restaura todos los checkboxes marcados al recargar. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
b13cc3f8ea
commit
0ea411ce62
@@ -44,7 +44,13 @@ if ($tc['datos_respuestas']) {
|
|||||||
// Merge: preserve config from other exams already saved
|
// Merge: preserve config from other exams already saved
|
||||||
if (!isset($dr['_tomas_config']) || !is_array($dr['_tomas_config'])) $dr['_tomas_config'] = [];
|
if (!isset($dr['_tomas_config']) || !is_array($dr['_tomas_config'])) $dr['_tomas_config'] = [];
|
||||||
foreach ($cfg as $k => $v) $dr['_tomas_config'][$k] = $v;
|
foreach ($cfg as $k => $v) $dr['_tomas_config'][$k] = $v;
|
||||||
if ($examType !== '') $dr['_c8j2g16'] = $examType;
|
// Guardar selección completa de exámenes (array) para que el reload restaure todos
|
||||||
|
$examTypes = isset($body['exam_types']) && is_array($body['exam_types']) ? array_values(array_filter($body['exam_types'])) : [];
|
||||||
|
if ($examTypes) {
|
||||||
|
$dr['_c8j2g16'] = count($examTypes) === 1 ? $examTypes[0] : $examTypes;
|
||||||
|
} elseif ($examType !== '' && !array_key_exists('_c8j2g16', $dr)) {
|
||||||
|
$dr['_c8j2g16'] = $examType;
|
||||||
|
}
|
||||||
if ($otroHora !== '') $dr['_otro_hora'] = $otroHora;
|
if ($otroHora !== '') $dr['_otro_hora'] = $otroHora;
|
||||||
|
|
||||||
$pdo->prepare("UPDATE turnero_consentimientos SET datos_respuestas = ? WHERE id = ?")
|
$pdo->prepare("UPDATE turnero_consentimientos SET datos_respuestas = ? WHERE id = ?")
|
||||||
|
|||||||
+12
-13
@@ -1392,14 +1392,15 @@ var _mpOtroHora = <?= json_encode($datosCliente['_otro_hora'] ?? null, JSON_U
|
|||||||
|
|
||||||
function _mpGuardarConfig(config, examType, onOk, onErr, extra) {
|
function _mpGuardarConfig(config, examType, onOk, onErr, extra) {
|
||||||
var base = window.location.href.split('/ver_formulario_enviado.php')[0];
|
var base = window.location.href.split('/ver_formulario_enviado.php')[0];
|
||||||
var payload = Object.assign({ token: _mpCfgToken, tomas_config: config, exam_type: examType }, extra || {});
|
var allExams = Array.from(document.querySelectorAll('[name="_c8j2g16[]"]:checked,[name="_c8j2g16"]:checked')).map(function(el){ return el.value; });
|
||||||
|
var payload = Object.assign({ token: _mpCfgToken, tomas_config: config, exam_type: examType, exam_types: allExams }, extra || {});
|
||||||
fetch(base + '/modules/turnero/api/configurar_tomas.php', {
|
fetch(base + '/modules/turnero/api/configurar_tomas.php', {
|
||||||
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
method: 'POST', headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify(payload)
|
body: JSON.stringify(payload)
|
||||||
})
|
})
|
||||||
.then(function(r) { return r.json(); })
|
.then(function(r) { return r.json(); })
|
||||||
.then(function(d) {
|
.then(function(d) {
|
||||||
if (d.ok) { try { sessionStorage.setItem('_mpExamRestore', examType || ''); } catch(e) {} onOk(); }
|
if (d.ok) { try { sessionStorage.setItem('_mpExamRestore', allExams.join('||') || examType || ''); } catch(e) {} onOk(); }
|
||||||
else onErr(d.error || 'Error desconocido');
|
else onErr(d.error || 'Error desconocido');
|
||||||
})
|
})
|
||||||
.catch(function() { onErr('Error de conexión.'); });
|
.catch(function() { onErr('Error de conexión.'); });
|
||||||
@@ -1611,17 +1612,15 @@ document.addEventListener('click', function(e) {
|
|||||||
// Al cargar: aplicar visibilidad y renderizar badges
|
// Al cargar: aplicar visibilidad y renderizar badges
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
var examName = _mpGetExamName();
|
var examName = _mpGetExamName();
|
||||||
// Restaurar selección de examen tras el reload del panel de config
|
// Restaurar selección de examen(es) tras el reload del panel de config
|
||||||
if (!examName) {
|
try {
|
||||||
try {
|
var saved = sessionStorage.getItem('_mpExamRestore');
|
||||||
var saved = sessionStorage.getItem('_mpExamRestore');
|
if (saved) {
|
||||||
if (saved) {
|
sessionStorage.removeItem('_mpExamRestore');
|
||||||
sessionStorage.removeItem('_mpExamRestore');
|
saved.split('||').filter(Boolean).forEach(function(n) { _mpSetExamChecked(n); });
|
||||||
examName = saved;
|
if (!examName) examName = saved.split('||').filter(Boolean)[0] || '';
|
||||||
_mpSetExamChecked(saved);
|
}
|
||||||
}
|
} catch(e) {}
|
||||||
} catch(e) {}
|
|
||||||
}
|
|
||||||
_mpApplyExamVisibility(examName);
|
_mpApplyExamVisibility(examName);
|
||||||
if (_mpModoTurnero) {
|
if (_mpModoTurnero) {
|
||||||
_mpRenderBadges();
|
_mpRenderBadges();
|
||||||
|
|||||||
Reference in New Issue
Block a user