From 20146535c7f2b6d8446e84ccdbd11c3be9a9c37c Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Fri, 3 Jul 2026 08:21:42 -0500 Subject: [PATCH] =?UTF-8?q?formularios:=20agregar=20bot=C3=B3n=20Clonar=20?= =?UTF-8?q?para=20duplicar=20plantillas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- api/lab/save_formulario.php | 15 +++++++++++++++ lab_formularios.php | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/api/lab/save_formulario.php b/api/lab/save_formulario.php index e74bccb..d2e7b1a 100644 --- a/api/lab/save_formulario.php +++ b/api/lab/save_formulario.php @@ -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']; diff --git a/lab_formularios.php b/lab_formularios.php index a96c004..ea93d47 100644 --- a/lab_formularios.php +++ b/lab_formularios.php @@ -445,6 +445,8 @@ function renderFormularios() { Enviar ${PUEDE_ESCRIBIR ? ` +