Files
whatsapp/api/lab/save_formulario.php
T
Lizandro GuarnizoandClaude Sonnet 4.6 20146535c7 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>
2026-07-03 08:21:50 -05:00

65 lines
2.3 KiB
PHP

<?php
/**
* POST /api/lab/save_formulario.php
* Solo admins pueden crear/editar plantillas.
*
* Body JSON para crear: { nombre, descripcion?, categoria?, esquema, permite_firma?, requiere_firma? }
* Body JSON para editar: { id, ...mismos campos... }
* Body JSON para borrar: { id, borrar: true }
*/
require_once __DIR__ . '/_helpers.php';
requireMethod('POST');
requireModuleWrite('lab_formularios'); // admins y roles con permiso write pueden crear/editar
try {
$datos = inputJson();
$form = new Formulario();
$admin = adminId();
// Borrar (soft delete)
if (!empty($datos['id']) && !empty($datos['borrar'])) {
$form->actualizar((int)$datos['id'], ['is_active' => 0], $admin);
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'];
unset($datos['id']);
// Verificar que el formulario existe
$existe = $form->obtener($id);
if (!$existe) {
jsonError("Formulario #$id no encontrado en la base de datos", 404);
}
$form->actualizar($id, $datos, $admin);
jsonOk(['id' => $id], 'Formulario actualizado');
}
// Crear
if (empty($datos['nombre'])) jsonError('El nombre es obligatorio');
if (empty($datos['esquema'])) jsonError('El esquema es obligatorio');
$id = $form->crear($datos, $admin);
jsonOk(['id' => $id], 'Formulario creado correctamente');
} catch (InvalidArgumentException $e) {
jsonError($e->getMessage());
} catch (Exception $e) {
jsonError($e->getMessage(), 500);
}