false, 'error' => $e->getMessage() ]); writeLog('ERROR', 'Error en API manage_config: ' . $e->getMessage()); } /** * Maneja peticiones GET */ function handleGetRequest($action) { switch ($action) { case 'all': // Obtener todas las configuraciones $configs = getAllConfigsFromDB(); echo json_encode([ 'success' => true, 'data' => $configs ]); break; case 'whatsapp': // Obtener configuración específica de WhatsApp $whatsappConfig = getWhatsAppConfigFromDB(); echo json_encode([ 'success' => true, 'data' => $whatsappConfig ]); break; case 'validate_whatsapp': // Validar configuración de WhatsApp $validation = validateWhatsAppConfigFromDB(); echo json_encode([ 'success' => true, 'data' => $validation ]); break; case 'get': // Obtener configuración específica $key = $_GET['key'] ?? ''; if (empty($key)) { throw new Exception('Clave de configuración requerida'); } $value = getConfigFromDB($key); $default = $_GET['default'] ?? null; echo json_encode([ 'success' => true, 'data' => [ 'key' => $key, 'value' => $value ?? $default, 'exists' => $value !== null ] ]); break; case 'status': // Estado general del sistema de configuraciones $allConfigs = getAllConfigsFromDB(); $whatsappValidation = validateWhatsAppConfigFromDB(); echo json_encode([ 'success' => true, 'data' => [ 'total_configs' => count($allConfigs), 'whatsapp_configured' => $whatsappValidation['valid'], 'database_migrated' => !empty($allConfigs), 'installation_completed' => isInstallationCompleted() ] ]); break; default: throw new Exception('Acción GET no reconocida'); } } /** * Maneja peticiones POST */ function handlePostRequest($action) { $input = json_decode(file_get_contents('php://input'), true); if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception('JSON inválido en el cuerpo de la petición'); } switch ($action) { case 'save': // Guardar configuración individual $key = $input['key'] ?? ''; $value = $input['value'] ?? ''; $description = $input['description'] ?? null; if (empty($key)) { throw new Exception('Clave de configuración requerida'); } $result = saveConfigToDB($key, $value, $description); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuración guardada exitosamente' : 'Error al guardar configuración' ]); if ($result) { writeLog('INFO', "Configuración '$key' actualizada", ['user' => $_SESSION['admin_username'] ?? 'unknown']); } break; case 'save_multiple': // Guardar múltiples configuraciones $configs = $input['configs'] ?? []; if (empty($configs) || !is_array($configs)) { throw new Exception('Array de configuraciones requerido'); } $result = saveMultipleConfigsToDB($configs); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuraciones guardadas exitosamente' : 'Error al guardar configuraciones', 'count' => count($configs) ]); if ($result) { writeLog('INFO', "Guardadas " . count($configs) . " configuraciones", [ 'keys' => array_keys($configs), 'user' => $_SESSION['admin_username'] ?? 'unknown' ]); } break; case 'save_whatsapp': // Guardar configuración específica de WhatsApp $whatsappConfig = $input['whatsapp'] ?? []; if (empty($whatsappConfig)) { throw new Exception('Configuración de WhatsApp requerida'); } $result = saveWhatsAppConfigToDB($whatsappConfig); // Validar la configuración guardada $validation = validateWhatsAppConfigFromDB(); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuración de WhatsApp guardada exitosamente' : 'Error al guardar configuración de WhatsApp', 'validation' => $validation ]); if ($result) { writeLog('INFO', 'Configuración de WhatsApp actualizada', [ 'configured_fields' => $validation['configured_fields'], 'user' => $_SESSION['admin_username'] ?? 'unknown' ]); } break; case 'initialize_defaults': // Inicializar configuraciones por defecto $result = initializeDefaultConfigs(); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuraciones por defecto inicializadas' : 'Error al inicializar configuraciones' ]); if ($result) { writeLog('INFO', 'Configuraciones por defecto inicializadas', [ 'user' => $_SESSION['admin_username'] ?? 'unknown' ]); } break; case 'migrate_to_database': // Migrar configuraciones a la base de datos $result = migrateConfigsToDatabase(); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuraciones migradas exitosamente a la base de datos' : 'Error en la migración' ]); break; default: throw new Exception('Acción POST no reconocida'); } } /** * Maneja peticiones PUT (actualizar) */ function handlePutRequest($action) { $input = json_decode(file_get_contents('php://input'), true); if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception('JSON inválido en el cuerpo de la petición'); } switch ($action) { case 'update': // Actualizar configuración específica $key = $input['key'] ?? ''; $value = $input['value'] ?? ''; $description = $input['description'] ?? null; if (empty($key)) { throw new Exception('Clave de configuración requerida'); } $result = saveConfigToDB($key, $value, $description); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuración actualizada exitosamente' : 'Error al actualizar configuración' ]); break; default: throw new Exception('Acción PUT no reconocida'); } } /** * Maneja peticiones DELETE */ function handleDeleteRequest($action) { switch ($action) { case 'delete': $key = $_GET['key'] ?? ''; if (empty($key)) { throw new Exception('Clave de configuración requerida'); } $result = deleteConfigFromDB($key); echo json_encode([ 'success' => $result, 'message' => $result ? 'Configuración eliminada exitosamente' : 'Error al eliminar configuración' ]); if ($result) { writeLog('INFO', "Configuración '$key' eliminada", [ 'user' => $_SESSION['admin_username'] ?? 'unknown' ]); } break; case 'clear_cache': // Limpiar cache de configuraciones clearConfigCache(); echo json_encode([ 'success' => true, 'message' => 'Cache de configuraciones limpiado' ]); break; default: throw new Exception('Acción DELETE no reconocida'); } } ?>