DiploMaster/api/importar_csv.php

110 lines
3.2 KiB
PHP

<?php
require '../includes/config.php';
header('Content-Type: application/json');
if (!is_logged_in()) {
http_response_code(401);
echo json_encode(['success' => false, 'error' => 'No autenticado']);
exit;
}
$input = json_decode(file_get_contents('php://input'), true);
$alumnos = $input['alumnos'] ?? [];
if (empty($alumnos)) {
echo json_encode(['success' => false, 'error' => 'No se recibieron alumnos']);
exit;
}
function limpiar($s) {
return trim($s, "\"' ");
}
$errores = [];
$importados = 0;
foreach ($alumnos as $index => $alumno) {
$fila = $index + 2;
$nombre = limpiar($alumno['nombre'] ?? '');
$email = limpiar($alumno['email'] ?? '');
$telefono = limpiar($alumno['telefono'] ?? '');
$tipoCurso = strtolower(limpiar($alumno['tipoCurso'] ?? ''));
$nombreCurso = limpiar($alumno['nombreCurso'] ?? '');
if (!$nombre || !$email || !$telefono || !$tipoCurso || !$nombreCurso) {
$errores[] = "Fila $fila: faltan datos obligatorios.";
continue;
}
// Verificar curso+tipo
$stmtCurso = $pdo->prepare("
SELECT id
FROM cursos
WHERE nombre = ? AND tipo = ?
");
$stmtCurso->execute([$nombreCurso, $tipoCurso]);
$curso = $stmtCurso->fetch(PDO::FETCH_ASSOC);
if (!$curso) {
$errores[] = "Fila $fila: el curso '$nombreCurso' con tipo '$tipoCurso' no existe.";
continue;
}
// Verificar duplicados por separado
$emailDuplicado = false;
$telefonoDuplicado = false;
$stmtEmail = $pdo->prepare("SELECT id FROM alumnos WHERE email = ?");
$stmtEmail->execute([$email]);
if ($stmtEmail->fetch()) {
$emailDuplicado = true;
}
$stmtTel = $pdo->prepare("SELECT id FROM alumnos WHERE telefono = ?");
$stmtTel->execute([$telefono]);
if ($stmtTel->fetch()) {
$telefonoDuplicado = true;
}
if ($emailDuplicado || $telefonoDuplicado) {
if ($emailDuplicado && $telefonoDuplicado) {
$errores[] = "Fila $fila: el email '$email' y el teléfono '$telefono' ya están registrados.";
} elseif ($emailDuplicado) {
$errores[] = "Fila $fila: el email '$email' ya está registrado.";
} elseif ($telefonoDuplicado) {
$errores[] = "Fila $fila: el teléfono '$telefono' ya está registrado.";
}
continue;
}
try {
$pdo->beginTransaction();
$stmtAlumno = $pdo->prepare("INSERT INTO alumnos (nombre, email, telefono) VALUES (?, ?, ?)");
$stmtAlumno->execute([$nombre, $email, $telefono]);
$alumnoId = $pdo->lastInsertId();
$stmtAsignar = $pdo->prepare("INSERT INTO alumnos_cursos (alumno_id, curso_id, estado) VALUES (?, ?, 'cursando')");
$stmtAsignar->execute([$alumnoId, $curso['id']]);
$pdo->commit();
$importados++;
} catch (PDOException $e) {
$pdo->rollBack();
$errores[] = "Fila $fila: error al guardar en base de datos.";
}
}
if (!empty($errores)) {
echo json_encode([
'success' => false,
'conflicts' => $errores
]);
} else {
echo json_encode([
'success' => true,
'message' => "$importados alumnos importados exitosamente."
]);
}