- 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>
65 lines
2.3 KiB
PHP
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);
|
|
}
|