up
This commit is contained in:
+41
-16
@@ -35,7 +35,19 @@ try {
|
||||
$db->beginTransaction();
|
||||
|
||||
try {
|
||||
// Verificar estructura de tabla antes de insertar
|
||||
// Verificar si es actualización o creación
|
||||
$isUpdate = isset($input['id']) && !empty($input['id']);
|
||||
$menuId = $isUpdate ? intval($input['id']) : null;
|
||||
|
||||
if ($isUpdate) {
|
||||
// Verificar que el menú existe
|
||||
$existingMenu = $db->fetch("SELECT id FROM menus WHERE id = ?", [$menuId]);
|
||||
if (!$existingMenu) {
|
||||
throw new Exception('Menú no encontrado para actualizar');
|
||||
}
|
||||
}
|
||||
|
||||
// Verificar estructura de tabla antes de insertar/actualizar
|
||||
$tableStructure = $db->fetchAll("DESCRIBE menus");
|
||||
$availableColumns = array_column($tableStructure, 'Field');
|
||||
|
||||
@@ -44,13 +56,14 @@ try {
|
||||
// Adaptar datos a la estructura real de la tabla
|
||||
$menuData = [];
|
||||
|
||||
// Campos básicos que deberían existir
|
||||
// La tabla usa 'name' para la clave del menú
|
||||
if (in_array('name', $availableColumns)) {
|
||||
$menuData['name'] = $input['menu_key'] ?? $input['name']; // Usar menu_key como name
|
||||
$menuData['name'] = $input['menu_key'] ?? $input['name'] ?? 'menu_' . time();
|
||||
}
|
||||
|
||||
// La tabla usa 'title' para el nombre visible del menú
|
||||
if (in_array('title', $availableColumns)) {
|
||||
$menuData['title'] = $input['name'] ?? 'Nuevo Menú'; // Usar name como title
|
||||
$menuData['title'] = $input['name'] ?? $input['title'] ?? 'Nuevo Menú';
|
||||
}
|
||||
|
||||
if (in_array('description', $availableColumns)) {
|
||||
@@ -66,28 +79,37 @@ try {
|
||||
}
|
||||
|
||||
if (in_array('is_active', $availableColumns)) {
|
||||
$menuData['is_active'] = ($input['status'] === 'active') ? 1 : 0;
|
||||
// Mapear status a is_active: 'active' -> 1, cualquier otra cosa -> 0
|
||||
$menuData['is_active'] = (($input['status'] ?? 'active') === 'active') ? 1 : 0;
|
||||
}
|
||||
|
||||
if (in_array('order_position', $availableColumns)) {
|
||||
// Obtener próxima posición
|
||||
if (in_array('order_position', $availableColumns) && !$isUpdate) {
|
||||
// Solo establecer order_position para menús nuevos
|
||||
$maxOrder = $db->fetch("SELECT COALESCE(MAX(order_position), 0) as max_order FROM menus");
|
||||
$menuData['order_position'] = ($maxOrder['max_order'] ?? 0) + 1;
|
||||
}
|
||||
|
||||
if (in_array('created_at', $availableColumns)) {
|
||||
if (in_array('created_at', $availableColumns) && !$isUpdate) {
|
||||
$menuData['created_at'] = date('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
if (in_array('updated_at', $availableColumns)) {
|
||||
$menuData['updated_at'] = date('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
|
||||
// Crear o actualizar menú
|
||||
if ($isUpdate) {
|
||||
$result = $db->update('menus', $menuData, 'id = :menu_id', ['menu_id' => $menuId]);
|
||||
if (!$result || $result->rowCount() === 0) {
|
||||
throw new Exception('No se pudo actualizar el menú');
|
||||
}
|
||||
} else {
|
||||
$menuId = $db->insert('menus', $menuData);
|
||||
|
||||
if (!$menuId) {
|
||||
throw new Exception('Error insertando menú');
|
||||
}
|
||||
}
|
||||
|
||||
// Procesar opciones si las hay
|
||||
$optionsCount = 0;
|
||||
@@ -113,19 +135,22 @@ try {
|
||||
}
|
||||
}
|
||||
|
||||
// Actualizar contador de opciones
|
||||
$db->execute("UPDATE menus SET options_count = :count WHERE id = :id", [
|
||||
'count' => $optionsCount,
|
||||
'id' => $menuId
|
||||
]);
|
||||
// Actualizar contador de opciones solo si la columna existe
|
||||
if (in_array('options_count', $availableColumns)) {
|
||||
$db->execute("UPDATE menus SET options_count = :count WHERE id = :id", [
|
||||
'count' => $optionsCount,
|
||||
'id' => $menuId
|
||||
]);
|
||||
}
|
||||
|
||||
$db->commit();
|
||||
|
||||
echo json_encode([
|
||||
'success' => true,
|
||||
'message' => 'Menú guardado correctamente',
|
||||
'message' => $isUpdate ? 'Menú actualizado correctamente' : 'Menú guardado correctamente',
|
||||
'menu_id' => $menuId,
|
||||
'options_created' => $optionsCount
|
||||
'options_created' => $optionsCount,
|
||||
'action' => $isUpdate ? 'updated' : 'created'
|
||||
]);
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
Reference in New Issue
Block a user