Correcciones
This commit is contained in:
@@ -54,127 +54,171 @@ function aprobar_usuario()
|
||||
exit;
|
||||
}
|
||||
|
||||
// Obtener la solicitud
|
||||
$sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$id]);
|
||||
$solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
|
||||
if (!$solicitud) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=request_not_found");
|
||||
// Verificar sesión del usuario administrador
|
||||
if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id'])) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=session_error");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Validar que no haya sido aprobada ya
|
||||
if ($solicitud['request_status'] === 'approved') {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=already_approved");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Preparar datos
|
||||
$nombre = decrypt($solicitud['company_name']);
|
||||
$email = $solicitud['email'];
|
||||
$tipo = 'importador';
|
||||
|
||||
// Generar contraseña aleatoria
|
||||
$password_plain = bin2hex(random_bytes(5));
|
||||
$password_hash = password_hash($password_plain, PASSWORD_DEFAULT);
|
||||
|
||||
// Encriptar datos sensibles
|
||||
$nombre_encrypt = encrypt($nombre);
|
||||
$email_encrypt = encrypt($email);
|
||||
|
||||
// Insertar en usuarios_sistema
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, [
|
||||
$nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
|
||||
]);
|
||||
|
||||
if (!$stmtInsert) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=save_failed");
|
||||
exit;
|
||||
}
|
||||
|
||||
// insertar tabla de informacion general del nuevo usario
|
||||
// Obtener ID del nuevo usuario
|
||||
$sqlGetId = "SELECT SCOPE_IDENTITY() AS id_usuario";
|
||||
$stmtGetId = sqlsrv_query($conn, $sqlGetId);
|
||||
$idUsuarioRow = sqlsrv_fetch_array($stmtGetId, SQLSRV_FETCH_ASSOC);
|
||||
$id_usuario = $idUsuarioRow['id_usuario'] ?? null;
|
||||
|
||||
if (!$id_usuario) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=failed");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Insertar en informacion_general
|
||||
$rfc = decrypt($solicitud['rfc']);
|
||||
$telefono = $solicitud['phone'];
|
||||
|
||||
$sqlInfo = "INSERT INTO informacion_general
|
||||
(id_usuario, nombre, rfc, correo, telefono)
|
||||
VALUES (?, ?, ?, ?, ?)";
|
||||
$stmtInfo = sqlsrv_query($conn, $sqlInfo, [
|
||||
$id_usuario, $nombre, $rfc, $email, $telefono ]);
|
||||
|
||||
if (!$stmtInfo) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=failed");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Actualizar solicitud
|
||||
$sqlUpdate = "UPDATE solicitudes_importadores
|
||||
SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
|
||||
WHERE request_id = ?";
|
||||
$stmtUpdate = sqlsrv_query($conn, $sqlUpdate, [$_SESSION['usuario_id'] ?? null, $id]);
|
||||
|
||||
if (!$stmtUpdate) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=update_failed");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Enviar correo al importador
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
$mail->isSMTP();
|
||||
$mail->Host = 'secure.emailsrvr.com';
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = 'noreply@aduanasoft.com.mx';
|
||||
$mail->Password = $_ENV['SMTP_PASS'];
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = 587;
|
||||
// Iniciar transacción
|
||||
sqlsrv_begin_transaction($conn);
|
||||
|
||||
$mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | Sistema Integral para Importadores de Hidrocarburos');
|
||||
$mail->addAddress($email);
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = 'Tu acceso a la plataforma SIIH ha sido autorizado';
|
||||
// Obtener la solicitud
|
||||
$sql = "SELECT * FROM solicitudes_importadores WHERE request_id = ?";
|
||||
$stmt = sqlsrv_query($conn, $sql, [$id]);
|
||||
|
||||
if (!$stmt) {
|
||||
throw new Exception("Error en consulta de solicitud: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
$mail->Body = "
|
||||
<div style='font-family: Segoe UI, sans-serif; background-color: #f4f6f9; padding: 40px;'>
|
||||
<div style='max-width: 600px; margin: auto; background: #fff; border: 1px solid #ddd; border-radius: 10px; overflow: hidden;'>
|
||||
<div style='background: linear-gradient(to right, #003366, #0055A5); padding: 20px; text-align: center;'>
|
||||
<h2 style='color: white;'>¡Bienvenido a SIIH!</h2>
|
||||
</div>
|
||||
<div style='padding: 30px; color: #333; font-size: 16px;'>
|
||||
<p>Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:</p>
|
||||
<p><strong>Correo:</strong> $email</p>
|
||||
<p><strong>Contraseña:</strong> $password_plain</p>
|
||||
<p>📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.</p>
|
||||
<p><a href='http://siih.aduanasoft.com/IMPORTADORES/login' class='btn btn-primary'>Ir al sistema</a></p>
|
||||
</div>
|
||||
<div style='background: #e9ecef; text-align: center; padding: 15px; font-size: 13px; color: #666;'>
|
||||
© " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
|
||||
</div>
|
||||
</div>
|
||||
</div>";
|
||||
$solicitud = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
|
||||
if (!$solicitud) {
|
||||
throw new Exception("Solicitud no encontrada");
|
||||
}
|
||||
|
||||
// Validar que no haya sido aprobada ya
|
||||
if ($solicitud['request_status'] === 'approved') {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=already_approved");
|
||||
exit;
|
||||
}
|
||||
|
||||
// Preparar datos con validación
|
||||
$nombre = !empty($solicitud['company_name']) ? decrypt($solicitud['company_name']) : null;
|
||||
$email = $solicitud['email'] ?? null;
|
||||
$rfc = !empty($solicitud['rfc']) ? decrypt($solicitud['rfc']) : null;
|
||||
$telefono = $solicitud['phone'] ?? null;
|
||||
|
||||
// Validar datos requeridos
|
||||
if (empty($nombre) || empty($email) || empty($rfc)) {
|
||||
throw new Exception("Datos requeridos faltantes: nombre, email o RFC");
|
||||
}
|
||||
|
||||
$tipo = 'importador';
|
||||
|
||||
// Generar contraseña aleatoria
|
||||
$password_plain = bin2hex(random_bytes(5));
|
||||
$password_hash = password_hash($password_plain, PASSWORD_DEFAULT);
|
||||
|
||||
// Encriptar datos sensibles
|
||||
$nombre_encrypt = encrypt($nombre);
|
||||
$email_encrypt = encrypt($email);
|
||||
|
||||
// Insertar en usuarios_sistema y obtener ID en la misma consulta
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||
OUTPUT INSERTED.id_usuario
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||
|
||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, [
|
||||
$nombre_encrypt, $email_encrypt, $password_hash, $tipo, $_SESSION['usuario_id']
|
||||
]);
|
||||
|
||||
if (!$stmtInsert) {
|
||||
throw new Exception("Error al insertar usuario: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// Obtener el ID directamente del OUTPUT
|
||||
$idUsuarioRow = sqlsrv_fetch_array($stmtInsert, SQLSRV_FETCH_ASSOC);
|
||||
$id_usuario = $idUsuarioRow['id_usuario'] ?? null;
|
||||
|
||||
if (!$id_usuario) {
|
||||
throw new Exception("No se pudo obtener el ID del usuario creado. ID obtenido: " . var_export($idUsuarioRow, true));
|
||||
}
|
||||
|
||||
error_log("✓ Usuario creado exitosamente con ID: " . $id_usuario);
|
||||
|
||||
// Insertar en informacion_general
|
||||
$sqlInfo = "INSERT INTO informacion_general
|
||||
(id_usuario, nombre, rfc, correo, telefono)
|
||||
VALUES (?, ?, ?, ?, ?)";
|
||||
$stmtInfo = sqlsrv_query($conn, $sqlInfo, [
|
||||
$id_usuario, $nombre, $rfc, $email, $telefono
|
||||
]);
|
||||
|
||||
if (!$stmtInfo) {
|
||||
throw new Exception("Error al insertar información general: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// Actualizar solicitud
|
||||
$sqlUpdate = "UPDATE solicitudes_importadores
|
||||
SET request_status = 'approved', approval_date = GETDATE(), approved_by = ?
|
||||
WHERE request_id = ?";
|
||||
$stmtUpdate = sqlsrv_query($conn, $sqlUpdate, [$_SESSION['usuario_id'], $id]);
|
||||
|
||||
if (!$stmtUpdate) {
|
||||
throw new Exception("Error al actualizar solicitud: " . print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
// Confirmar transacción
|
||||
sqlsrv_commit($conn);
|
||||
|
||||
// Enviar correo al importador (fuera de la transacción)
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
$mail->isSMTP();
|
||||
$mail->Host = 'secure.emailsrvr.com';
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = 'noreply@aduanasoft.com.mx';
|
||||
$mail->Password = $_ENV['SMTP_PASS'] ?? '';
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = 587;
|
||||
|
||||
$mail->setFrom('noreply@aduanasoft.com.mx', 'SIIH | Sistema Integral para Importadores de Hidrocarburos');
|
||||
$mail->addAddress($email);
|
||||
$mail->CharSet = 'UTF-8';
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = 'Tu acceso a la plataforma SIIH ha sido autorizado';
|
||||
|
||||
$mail->Body = "
|
||||
<div style='font-family: Segoe UI, sans-serif; background-color: #f4f6f9; padding: 40px;'>
|
||||
<div style='max-width: 600px; margin: auto; background: #fff; border: 1px solid #ddd; border-radius: 10px; overflow: hidden;'>
|
||||
<div style='background: linear-gradient(to right, #003366, #0055A5); padding: 20px; text-align: center;'>
|
||||
<h2 style='color: white;'>¡Bienvenido a SIIH!</h2>
|
||||
</div>
|
||||
<div style='padding: 30px; color: #333; font-size: 16px;'>
|
||||
<p>Tu registro como importador ha sido aprobado. Aquí tienes tus credenciales de acceso:</p>
|
||||
<p><strong>Correo:</strong> $email</p>
|
||||
<p><strong>Contraseña:</strong> $password_plain</p>
|
||||
<p>📌 Te recomendamos cambiar tu contraseña una vez que ingreses al sistema.</p>
|
||||
<p><a href='http://siih.aduanasoft.com/IMPORTADORES/login' class='btn btn-primary'>Ir al sistema</a></p>
|
||||
</div>
|
||||
<div style='background: #e9ecef; text-align: center; padding: 15px; font-size: 13px; color: #666;'>
|
||||
© " . date('Y') . " SIIH · Sistema Integral para Importadores de Hidrocarburos
|
||||
</div>
|
||||
</div>
|
||||
</div>";
|
||||
|
||||
$mail->send();
|
||||
|
||||
// Éxito completo (usuario creado, solicitud actualizada y correo enviado)
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved");
|
||||
|
||||
} catch (Exception $mailException) {
|
||||
// Error en el correo, pero el usuario fue creado exitosamente
|
||||
error_log("Error al enviar correo de bienvenida: " . $mailException->getMessage());
|
||||
|
||||
// Redirigir con mensaje de éxito parcial
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved&warning=email_failed");
|
||||
}
|
||||
|
||||
$mail->send();
|
||||
} catch (Exception $e) {
|
||||
error_log("Error al enviar correo: {$mail->ErrorInfo}");
|
||||
// Revertir transacción
|
||||
sqlsrv_rollback($conn);
|
||||
|
||||
// Log del error para debugging
|
||||
error_log("Error al aprobar usuario: " . $e->getMessage());
|
||||
|
||||
// Redirigir con error específico basado en el tipo de error
|
||||
if (strpos($e->getMessage(), 'información general') !== false) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=info_general_failed");
|
||||
} elseif (strpos($e->getMessage(), 'ID del usuario') !== false) {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=user_id_failed");
|
||||
} else {
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?error=process_failed");
|
||||
}
|
||||
}
|
||||
|
||||
header("Location: /IMPORTADORES/administrador/aprobarUsuarios?success=approved");
|
||||
exit;
|
||||
}
|
||||
|
||||
@@ -208,10 +252,10 @@ function guardar_usuario()
|
||||
$conn = getConnection();
|
||||
|
||||
// 1. Capturar y validar datos
|
||||
$nombre = trim($_POST['nombre'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = $_POST['password'] ?? '';
|
||||
$tipo = $_POST['tipo_usuario'] ?? '';
|
||||
$nombre = trim($_POST['nombre'] ?? '');
|
||||
$email = trim($_POST['email'] ?? '');
|
||||
$password = $_POST['password'] ?? '';
|
||||
$tipo = $_POST['tipo_usuario'] ?? '';
|
||||
|
||||
if (empty($nombre) || empty($email) || empty($password) || empty($tipo)) {
|
||||
header("Location: /IMPORTADORES/administrador/altaUsuarios?error=invalid_data");
|
||||
@@ -241,7 +285,6 @@ function guardar_usuario()
|
||||
$sqlInsert = "INSERT INTO usuarios_sistema (nombre, email, password_hash, tipo_usuario, activo, creado_en, dos_factores, creado_por)
|
||||
VALUES (?, ?, ?, ?, 1, GETDATE(), 0, ?)";
|
||||
$params = [$nombre_encrypted, $email_encrypted, $password_hash, $tipo, $_SESSION['usuario_id']];
|
||||
|
||||
$stmtInsert = sqlsrv_query($conn, $sqlInsert, $params);
|
||||
|
||||
if ($stmtInsert === false) {
|
||||
@@ -776,7 +819,6 @@ function agenciasActivas()
|
||||
include __DIR__ . '/../../views/admin/agencias_activas.php';
|
||||
}
|
||||
|
||||
|
||||
function suspender()
|
||||
{
|
||||
if (!($_SESSION['usuario_id'] ?? false)) {
|
||||
@@ -993,45 +1035,6 @@ function suspenderAgencia()
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
function bitacoraLogin()
|
||||
{
|
||||
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'super_admin') {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$conn = getConnection();
|
||||
$sql = "SELECT * FROM bitacora_login ORDER BY fecha DESC";
|
||||
$stmt = sqlsrv_query($conn, $sql);
|
||||
|
||||
$registros = [];
|
||||
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
||||
$registros[] = $row;
|
||||
}
|
||||
|
||||
include __DIR__ . '/../../views/admin/bitacora_login.php';
|
||||
}
|
||||
|
||||
function bitacoraUsuarios()
|
||||
{
|
||||
if (!isset($_SESSION['usuario_id']) || $_SESSION['tipo_usuario'] !== 'super_admin') {
|
||||
header('Location: /IMPORTADORES/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
$conn = getConnection();
|
||||
$sql = "SELECT * FROM bitacora_usuarios ORDER BY fecha DESC";
|
||||
$stmt = sqlsrv_query($conn, $sql);
|
||||
|
||||
$registros = [];
|
||||
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
|
||||
$registros[] = $row;
|
||||
}
|
||||
|
||||
include __DIR__ . '/../../views/admin/bitacora_usuarios.php';
|
||||
}
|
||||
|
||||
function configuracion()
|
||||
{
|
||||
$conn = getConnection();
|
||||
|
||||
Reference in New Issue
Block a user