Para usar la prueba gratuita debes indicar correo y oposición. El límite es de 5 preguntas al día.
Introduce tus credenciales para acceder. Las cuentas las gestiona Academia Lasan S.L.
Los test quedarán guardados en servidor.
Hay incidencias pendientes de revisar.
0Total
0Respondidas
0Aciertos
0Fallos
0,00Puntuación corregida
Examen
Configura el examen y pulsa Comenzar examen.
Pregunta 1Tiempo restante: --:--Materia
Denunciar pregunta
Mis test resueltos
Mis preguntas falladas
Tests asignados
Crear test para alumnos
Si el alumno entra varias veces, el tiempo se acumula hasta agotar esta duración.
Puedes dejar todas las categorías o elegir un bloque concreto.
Tests creados y resultados
Listado de preguntas
Gestión de categorías
Se creará como hija de la categoría seleccionada. Formato interno: Padre > Hija.
Añadir o editar pregunta
Se toma del título del documento dentro de la materia. Si importas otro documento con el mismo título, sus preguntas se sumarán dentro del mismo apartado.
Importar bloque de preguntas
Cada bloque debe incluir: id, examCode, subject, category, question, options[4], correctIndex y observations. Si category coincide con otro bloque de la misma materia, las preguntas quedarán agrupadas juntas. Para subcategorías puedes usar rutas como: Constitución > Defensor del Pueblo.
Crear usuario
Los administradores solo pueden crear alumnos de su propia academia. El superusuario puede crear administradores y asignarlos a cualquier academia.
Listado de usuarios
Crear academia
Sin espacios ni acentos. Se usará para vincular usuarios y configuración.
Configurar academia
Si no seleccionas ninguna materia, se mostrarán todas. Esta configuración afecta a los alumnos de esa academia.
Alta masiva de alumnos
Columnas: usuario,password,email,academia,rol. Para administradores de academia, la academia se fijará automáticamente en la suya.
Listado de academias
Incidencias pendientes
Cómo resolver
Cuando un usuario denuncia una pregunta, la pregunta se desactiva automáticamente para todos los usuarios y queda pendiente de revisión.
Un administrador o el super usuario puede:
1. Rectificar la pregunta desde el botón Editar y reactivar. Al guardar, vuelve a estar visible.
2. Suprimirla definitivamente.
Cambiar credenciales del super usuario
Pruebas gratuitas
Aquí se guardan los correos y la oposición indicada por quienes entran en modo prueba.
";
} else {
list.innerHTML = "";
users.forEach(u => {
const username = String(u.username || u.usuario || "").toLowerCase();
const displayName = String(u.username || u.usuario || "");
const div = document.createElement("div");
div.className = "question-list-item";
div.innerHTML = `
`;
list.appendChild(div);
});
}
modal.classList.remove("hidden");
} catch (e) {
console.error("lasanOpenAssignUsersModalById:", e);
alert("Error abriendo la ventana de alumnos.");
}
}
function lasanCloseAssignUsersModal() {
const modal = document.getElementById("assignUsersModal");
if (modal) modal.classList.add("hidden");
}
async function lasanSaveAssignedUsersToTest() {
const testId = document.getElementById("assignUsersTestId")?.value || "";
const assignedTo = [...document.querySelectorAll(".assign-user-check:checked")].map(x => x.value);
if (!testId) {
alert("No se ha identificado el test.");
return;
}
if (!assignedTo.length) {
alert("Selecciona al menos un alumno.");
return;
}
try {
const res = await fetch(API_BASE + "actualizar_test_programado.php?t=" + Date.now(), {
method: "POST",
headers: {"Content-Type":"application/json"},
body: JSON.stringify({
id: testId,
assignedTo: assignedTo,
currentRole: state.currentUser.role,
currentAcademy: currentAcademyId()
})
});
const data = await res.json();
if (!data.ok) {
alert(data.error || "No se pudo actualizar el test.");
return;
}
lasanCloseAssignUsersModal();
await renderScheduledAdmin();
await renderAssignedTests();
alert("Alumnos actualizados.");
} catch (e) {
console.error("lasanSaveAssignedUsersToTest:", e);
alert("Error conectando con el servidor.");
}
}
document.addEventListener("click", function(e) {
const btn = e.target.closest("[data-assign-users]");
if (btn) {
e.preventDefault();
lasanOpenAssignUsersModalById(btn.getAttribute("data-assign-users"));
return;
}
if (e.target && e.target.id === "cancelAssignUsersBtn") {
lasanCloseAssignUsersModal();
return;
}
if (e.target && e.target.id === "saveAssignUsersBtn") {
lasanSaveAssignedUsersToTest();
return;
}
if (e.target && e.target.id === "assignUsersSelectAllBtn") {
document.querySelectorAll(".assign-user-check").forEach(x => x.checked = true);
return;
}
if (e.target && e.target.id === "assignUsersClearBtn") {
document.querySelectorAll(".assign-user-check").forEach(x => x.checked = false);
return;
}
const modal = document.getElementById("assignUsersModal");
if (modal && e.target === modal) lasanCloseAssignUsersModal();
});
'>
Este espacio sirve para instalar cambios futuros sin sustituir el archivo completo. Las actualizaciones se guardan aparte y se sincronizan con el servidor para el usuario correspondiente.