87 lines
2.4 KiB
PHP
Executable File
87 lines
2.4 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* change_language.php
|
|
*
|
|
* Este script maneja el cambio de idioma en la aplicación.
|
|
* Actualiza la sesión del usuario con el idioma seleccionado.
|
|
*/
|
|
|
|
// Iniciar la sesión si no está iniciada
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
session_start();
|
|
}
|
|
|
|
// Incluir configuración y base de datos
|
|
require_once __DIR__ . '/config/config.php';
|
|
require_once __DIR__ . '/includes/db.php';
|
|
require_once __DIR__ . '/includes/translation_helper.php';
|
|
|
|
// Configurar cabeceras para respuesta JSON
|
|
header('Content-Type: application/json');
|
|
|
|
// Verificar que la solicitud sea POST
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
http_response_code(405); // Método no permitido
|
|
echo json_encode(['success' => false, 'message' => 'Método no permitido']);
|
|
exit;
|
|
}
|
|
|
|
// Obtener el idioma de la solicitud
|
|
$language = $_POST['language'] ?? null;
|
|
|
|
// Validar que se proporcionó un idioma
|
|
if (empty($language)) {
|
|
http_response_code(400); // Solicitud incorrecta
|
|
echo json_encode(['success' => false, 'message' => 'No se proporcionó un idioma']);
|
|
exit;
|
|
}
|
|
|
|
// Verificar que el idioma esté disponible
|
|
$availableLanguages = get_available_languages();
|
|
$validLanguage = false;
|
|
|
|
foreach ($availableLanguages as $lang) {
|
|
if ($lang['code'] === $language) {
|
|
$validLanguage = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$validLanguage) {
|
|
http_response_code(400); // Solicitud incorrecta
|
|
echo json_encode(['success' => false, 'message' => 'Idioma no válido']);
|
|
exit;
|
|
}
|
|
|
|
// Actualizar el idioma en la sesión
|
|
$_SESSION['language'] = $language;
|
|
|
|
// Si el usuario está autenticado, actualizar su preferencia de idioma en la base de datos
|
|
if (isset($_SESSION['user_id'])) {
|
|
try {
|
|
$stmt = $pdo->prepare("UPDATE users SET language = ? WHERE id = ?");
|
|
$stmt->execute([$language, $_SESSION['user_id']]);
|
|
} catch (PDOException $e) {
|
|
// Registrar el error pero no fallar la operación
|
|
error_log("Error al actualizar el idioma del usuario: " . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
// Limpiar la caché de traducciones si existe
|
|
if (isset($GLOBALS['_translations_cache'])) {
|
|
$GLOBALS['_translations_cache'] = [];
|
|
}
|
|
|
|
// Devolver respuesta exitosa
|
|
echo json_encode([
|
|
'success' => true,
|
|
'message' => 'Idioma actualizado correctamente',
|
|
'language' => $language
|
|
]);
|
|
|
|
// Registrar el cambio de idioma
|
|
custom_log("Idioma cambiado a: " . $language, 'language');
|
|
|
|
// Finalizar el script
|
|
exit;
|