formularios: agregar botón Clonar para duplicar plantillas
- save_formulario.php: manejo de {clonar:true} → crea copia con "Copia de [nombre]"
- lab_formularios.php: botón icono copy en cada tarjeta + función clonarFormulario()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
17703f0157
commit
20146535c7
@@ -22,6 +22,21 @@ try {
|
||||
jsonOk(['id' => (int)$datos['id']], 'Formulario eliminado');
|
||||
}
|
||||
|
||||
// Clonar
|
||||
if (!empty($datos['id']) && !empty($datos['clonar'])) {
|
||||
$original = $form->obtener((int)$datos['id']);
|
||||
if (!$original) jsonError('Formulario no encontrado', 404);
|
||||
$nuevoId = $form->crear([
|
||||
'nombre' => 'Copia de ' . $original['nombre'],
|
||||
'descripcion' => $original['descripcion'] ?? null,
|
||||
'categoria' => $original['categoria'] ?? 'otro',
|
||||
'esquema' => $original['esquema'] ?? '[]',
|
||||
'permite_firma' => $original['permite_firma'] ?? 0,
|
||||
'requiere_firma' => $original['requiere_firma'] ?? 0,
|
||||
], $admin);
|
||||
jsonOk(['id' => $nuevoId], 'Formulario clonado');
|
||||
}
|
||||
|
||||
// Editar
|
||||
if (!empty($datos['id'])) {
|
||||
$id = (int)$datos['id'];
|
||||
|
||||
@@ -445,6 +445,8 @@ function renderFormularios() {
|
||||
<i class="fas fa-paper-plane me-1"></i>Enviar
|
||||
</button>
|
||||
${PUEDE_ESCRIBIR ? `
|
||||
<button class="btn btn-sm btn-outline-secondary" onclick="clonarFormulario(${f.id},'${esc(f.nombre)}')"
|
||||
title="Clonar formulario"><i class="fas fa-copy"></i></button>
|
||||
<button class="btn btn-sm btn-outline-primary" onclick="builder.editar(${f.id})"
|
||||
title="Editar diseño"><i class="fas fa-edit"></i></button>
|
||||
<button class="btn btn-sm btn-outline-danger" onclick="confirmarBorrar(${f.id},'${esc(f.nombre)}')"
|
||||
@@ -456,6 +458,21 @@ function renderFormularios() {
|
||||
`).join('');
|
||||
}
|
||||
|
||||
async function clonarFormulario(id, nombre) {
|
||||
if (!confirm(`¿Clonar el formulario "${nombre}"?\nSe creará una copia con el nombre "Copia de ${nombre}".`)) return;
|
||||
const r = await fetch('api/lab/save_formulario.php', {
|
||||
method:'POST', headers:{'Content-Type':'application/json'},
|
||||
body: JSON.stringify({ id, clonar: true }),
|
||||
});
|
||||
const d = await r.json();
|
||||
if (d.success || d.ok) {
|
||||
showToast('✅ Formulario clonado');
|
||||
cargarFormularios();
|
||||
} else {
|
||||
alert(d.error || 'Error al clonar');
|
||||
}
|
||||
}
|
||||
|
||||
async function confirmarBorrar(id, nombre) {
|
||||
if (!confirm(`¿Eliminar el formulario "${nombre}"?\nLos envíos existentes se conservarán.`)) return;
|
||||
const r = await fetch('api/lab/save_formulario.php', {
|
||||
|
||||
Reference in New Issue
Block a user