110 lines
3.2 KiB
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."
|
|
]);
|
|
}
|