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');
|
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
|
// Editar
|
||||||
if (!empty($datos['id'])) {
|
if (!empty($datos['id'])) {
|
||||||
$id = (int)$datos['id'];
|
$id = (int)$datos['id'];
|
||||||
|
|||||||
@@ -445,6 +445,8 @@ function renderFormularios() {
|
|||||||
<i class="fas fa-paper-plane me-1"></i>Enviar
|
<i class="fas fa-paper-plane me-1"></i>Enviar
|
||||||
</button>
|
</button>
|
||||||
${PUEDE_ESCRIBIR ? `
|
${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})"
|
<button class="btn btn-sm btn-outline-primary" onclick="builder.editar(${f.id})"
|
||||||
title="Editar diseño"><i class="fas fa-edit"></i></button>
|
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)}')"
|
<button class="btn btn-sm btn-outline-danger" onclick="confirmarBorrar(${f.id},'${esc(f.nombre)}')"
|
||||||
@@ -456,6 +458,21 @@ function renderFormularios() {
|
|||||||
`).join('');
|
`).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) {
|
async function confirmarBorrar(id, nombre) {
|
||||||
if (!confirm(`¿Eliminar el formulario "${nombre}"?\nLos envíos existentes se conservarán.`)) return;
|
if (!confirm(`¿Eliminar el formulario "${nombre}"?\nLos envíos existentes se conservarán.`)) return;
|
||||||
const r = await fetch('api/lab/save_formulario.php', {
|
const r = await fetch('api/lab/save_formulario.php', {
|
||||||
|
|||||||
Reference in New Issue
Block a user