Examen de Français A1 – Les Moyens de Transport

body {
font-family: ‘Arial’, sans-serif;
line-height: 1.6;
max-width: 100%;
margin: 0 auto;
padding: 20px;
color: #333;
}

h1, h2 {
color: #0066cc;
text-align: center;
}

.intro {
background-color: #f0f8ff;
padding: 15px;
border-radius: 8px;
margin-bottom: 20px;
}

.question-container {
margin-bottom: 20px;
padding: 15px;
border: 1px solid #ddd;
border-radius: 8px;
background-color: #f9f9f9;
}

.options {
margin-top: 10px;
}

button {
background-color: #0066cc;
color: white;
border: none;
padding: 10px 15px;
border-radius: 5px;
cursor: pointer;
margin-top: 10px;
}

button:hover {
background-color: #004c99;
}

input[type=”text”] {
width: 100%;
padding: 8px;
margin-top: 5px;
border: 1px solid #ddd;
border-radius: 4px;
}

.result-section {
display: none;
text-align: center;
margin-top: 20px;
}

.badge {
border: 2px solid #0066cc;
padding: 20px;
margin: 20px auto;
text-align: center;
background-color: #f0f8ff;
max-width: 500px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
border-radius: 10px;
}

.progress-container {
width: 100%;
background-color: #ddd;
margin-bottom: 20px;
border-radius: 5px;
}

.progress-bar {
height: 20px;
background-color: #0066cc;
border-radius: 5px;
width: 0%;
text-align: center;
line-height: 20px;
color: white;
}

.controls {
display: flex;
justify-content: center;
margin-top: 15px;
}

#email-form {
margin-top: 20px;
display: none;
}

.stamp {
width: 100px;
height: 100px;
border: 2px solid #0066cc;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 20px auto;
background-color: #e6f0ff;
font-weight: bold;
color: #0066cc;
transform: rotate(-15deg);
}

#badge {
border: 5px solid #0066cc;
border-radius: 10px;
padding: 20px;
max-width: 800px;
margin: 20px auto;
background-color: #f9f9f9;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
position: relative;
}

#grade-stamp {
position: absolute;
top: 20px;
right: 20px;
width: 60px;
height: 60px;
background-color: #e63946;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
font-weight: bold;
border: 3px solid #333;
transform: rotate(15deg);
}

#email-status {
padding: 10px;
background-color: #dff0d8;
border: 1px solid #d6e9c6;
border-radius: 4px;
color: #3c763d;
margin-top: 15px;
display: none;
}

.certificate-header {
text-align: center;
margin-bottom: 20px;
}

.certificate-header h2 {
color: #0066cc;
font-size: 28px;
margin-bottom: 5px;
}

.certificate-header p {
font-style: italic;
color: #666;
}

.certificate-body {
margin: 20px 0;
text-align: center;
}

.certificate-signature {
margin-top: 40px;
text-align: center;
}

.signature-line {
width: 200px;
height: 1px;
background-color: #333;
margin: 10px auto;
}

.aplenguas-login-form {
max-width: 100%;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.form-group {
margin-bottom: 15px;
}

.form-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}

.form-group input {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
}

.btn-submit {
background-color: #4285f4;
color: white;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
}

#continuar {
background-color: #34a853;
color: white;
border: none;
padding: 10px 15px;
border-radius: 4px;
cursor: pointer;
margin-top: 10px;
}

Examen de Français A1, 3ème – Les Vacances et les Transports

Cette évaluation porte sur le vocabulaire des transports (publics et privés) et la conjugaison des verbes du premier et deuxième groupe. L’examen est noté sur 100 points.

0%

Résultats de l’évaluation

Nom:

Prénom:

Score: /100

Commentaire:

Certificat de Réussite

Aplenguas – Évaluation de Français

Ce certificat atteste que

a complété avec succès l’évaluation de français avec un score de

sur un total de 100 points

Signature du professeur

Envoyer le certificat par email

// Script para el formulario de inicio de sesión
const SCRIPT_URL = ‘https://script.google.com/macros/s/AKfycbzxYTLfaRuvekZR0RsNfLSxEcZ3pkH5o5yVyBSTUnOfqAFURFvQB1ATcEChHyzjAuW-/exec’;

document.getElementById(‘login-form’).addEventListener(‘submit’, function(e) {
e.preventDefault();

const email = document.getElementById(‘email’).value;
const nombre = document.getElementById(‘nombre’).value;
const curso = document.getElementById(‘curso’).value;

// Mostrar estado de procesamiento
document.getElementById(‘estado-envio’).style.display = ‘block’;
document.getElementById(‘mensaje-estado’).innerText = ‘Enviando datos…’;

// Guardar los datos localmente
sessionStorage.setItem(‘student_email’, email);
sessionStorage.setItem(‘student_name’, nombre);
sessionStorage.setItem(‘student_course’, curso);

// Enviar datos al servidor usando fetch
const formData = new FormData();
formData.append(‘email’, email);
formData.append(‘nombre’, nombre);
formData.append(‘curso’, curso);
formData.append(‘accion’, ‘iniciar’); // Indica que es inicio de sesión

fetch(SCRIPT_URL, {
method: ‘POST’,
body: formData,
mode: ‘no-cors’
})
.then(response => {
// No podemos acceder a la respuesta debido a no-cors,
// pero asumimos que funcionó si no hubo errores
document.getElementById(‘login-form’).style.display = ‘none’;
document.getElementById(‘mensaje-confirmacion’).style.display = ‘block’;
document.getElementById(‘estado-envio’).style.display = ‘none’;
})
.catch(error => {
console.error(‘Error:’, error);
document.getElementById(‘mensaje-estado’).innerText = ‘Error al enviar datos’;
document.getElementById(‘detalles-error’).innerText = error.message;
document.getElementById(‘detalles-error’).style.display = ‘block’;
});
});

document.getElementById(‘continuar’).addEventListener(‘click’, function() {
document.querySelector(‘.aplenguas-login-form’).style.display = ‘none’;
document.getElementById(‘contenido-ejercicio’).style.display = ‘block’;
});

// Variables globales para el examen
let currentQuestionIndex = 0;
let userAnswers = [];
let questionOrder = [];
let studentData = {};

// Las preguntas de la evaluación
const questionsData = [
// Parte 1: Vocabulario de los transportes públicos
{
type: “qcm”,
question: “Quel moyen de transport public peut-on prendre pour voyager entre deux villes?”,
options: [“Un train”, “Une voiture personnelle”, “Un vélo”, “Un skateboard”],
correct: 0,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Comment s’appelle le transport public qui circule sous terre dans les grandes villes?”,
options: [“Le taxi”, “Le bus”, “Le métro”, “Le tramway”],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Où peut-on prendre l’avion?”,
options: [“À la gare”, “À l’aéroport”, “Au port”, “À la station de bus”],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Quel document est nécessaire pour voyager en train?”,
options: [“Un permis de conduire”, “Un passeport”, “Un billet”, “Une carte d’identité”],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Comment s’appelle le moyen de transport public qui circule sur des rails dans la ville? (Commençant par T)”,
correct: “tramway”,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Je vais à l’________ pour prendre l’avion.”,
correct: “aéroport”,
category: “Transport public”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je prends le train à l’aéroport.”,
“Je prends l’avion à la gare.”,
“Je prends le métro à la station.”,
“Je prends le bateau à la boulangerie.”
],
correct: 2,
category: “Transport public”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Le bus arrive à la plage.”,
“Le train arrive à la gare.”,
“L’avion arrive à la piscine.”,
“Le métro arrive à la mer.”
],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “qcm”,
question: “Comment appelle-t-on la personne qui conduit un bus?”,
options: [“Un pilote”, “Un chauffeur”, “Un conducteur de train”, “Un capitaine”],
correct: 1,
category: “Transport public”,
points: 2.5
},
{
type: “text”,
question: “Pour aller à l’école, je prends le _____ qui passe près de chez moi.”,
correct: “bus”,
category: “Transport public”,
points: 2.5
},

// Parte 2: Vocabulario de los transportes privados
{
type: “qcm”,
question: “Quel véhicule privé a deux roues et un moteur?”,
options: [“Une voiture”, “Un vélo”, “Une moto”, “Un bus”],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Qu’est-ce qui est nécessaire pour conduire une voiture?”,
options: [“Un billet”, “Un permis de conduire”, “Un passeport”, “Une carte d’étudiant”],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Ma _______ est garée dans le garage.”,
correct: “voiture”,
category: “Transport privé”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je conduis mon train à l’école.”,
“Je conduis ma voiture au travail.”,
“Je conduis mon métro au parc.”,
“Je conduis mon avion à la plage.”
],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Quel véhicule privé n’a pas de moteur?”,
options: [“Une voiture”, “Une moto”, “Un vélo”, “Un scooter”],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Pour faire du sport, je préfère utiliser mon _____.”,
correct: “vélo”,
category: “Transport privé”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“J’achète de l’essence pour mon vélo.”,
“J’achète un billet pour ma voiture.”,
“J’achète de l’essence pour ma voiture.”,
“J’achète un ticket pour ma moto.”
],
correct: 2,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Qu’est-ce qui protège la tête quand on fait de la moto?”,
options: [“Des gants”, “Un casque”, “Des lunettes”, “Une écharpe”],
correct: 1,
category: “Transport privé”,
points: 2.5
},
{
type: “text”,
question: “Je mets ma _______ dans le garage pour la nuit.”,
correct: “voiture”,
category: “Transport privé”,
points: 2.5
},
{
type: “qcm”,
question: “Quel véhicule peut transporter toute la famille?”,
options: [“Une moto”, “Un vélo”, “Un scooter”, “Une voiture”],
correct: 3,
category: “Transport privé”,
points: 2.5
},

// Parte 3: Conjugación de los verbos del 1er grupo
{
type: “text”,
question: “Je _____ (voyager) en train.”,
correct: “voyage”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Vous _____ (parler) français.”,
correct: “parlez”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Nous _____ (visiter) Paris.”,
correct: “visitons”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Tu parlent anglais.”,
“Tu parlez anglais.”,
“Tu parle anglais.”,
“Tu parles anglais.”
],
correct: 3,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Ils mangent au restaurant.”,
“Ils mange au restaurant.”,
“Ils manges au restaurant.”,
“Ils mangeons au restaurant.”
],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Elle _____ (aimer) voyager en avion.”,
correct: “aime”,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘regarder’ à la première personne du pluriel?”,
options: [“regardons”, “regardez”, “regardent”, “regarde”],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘réserver’ à la deuxième personne du singulier?”,
options: [“réserves”, “réservez”, “réserve”, “réservons”],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Je monte dans le bus.”,
“Je montes dans le bus.”,
“Je montez dans le bus.”,
“Je montons dans le bus.”
],
correct: 0,
category: “Verbes 1er groupe”,
points: 2.5
},
{
type: “text”,
question: “Elles _____ (écouter) de la musique pendant le voyage.”,
correct: “écoutent”,
category: “Verbes 1er groupe”,
points: 2.5
},

// Parte 4: Conjugación de los verbos del 2º grupo
{
type: “text”,
question: “Je _____ (finir) mes devoirs.”,
correct: “finis”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Nous _____ (choisir) un hôtel.”,
correct: “choisissons”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Vous _____ (réussir) votre examen.”,
correct: “réussissez”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Ils finit leur repas.”,
“Ils finissent leur repas.”,
“Ils finis leur repas.”,
“Ils finissons leur repas.”
],
correct: 1,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Elle choisit un livre.”,
“Elle choisie un livre.”,
“Elle choisis un livre.”,
“Elle choisissent un livre.”
],
correct: 0,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘grandir’ à la troisième personne du pluriel?”,
options: [“grandissent”, “grandissez”, “grandit”, “grandis”],
correct: 0,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “Quelle est la bonne conjugaison du verbe ‘réfléchir’ à la première personne du singulier?”,
options: [“réfléchissons”, “réfléchit”, “réfléchis”, “réfléchissez”],
correct: 2,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “text”,
question: “Tu _____ (réussir) à prendre le train à l’heure.”,
correct: “réussis”,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “choix_phrase”,
question: “Choisissez la phrase correcte:”,
options: [
“Nous remplissez le formulaire.”,
“Nous remplis le formulaire.”,
“Nous remplit le formulaire.”,
“Nous remplissons le formulaire.”
],
correct: 3,
category: “Verbes 2ème groupe”,
points: 2.5
},
{
type: “qcm”,
question: “À quel groupe appartient le verbe ‘finir’?”,
options: [“Premier groupe”, “Deuxième groupe”, “Troisième groupe”, “Quatrième groupe”],
correct: 1,
category: “Distinction des groupes”,
points: 2.5
}
];

// Mezclar las preguntas
function shuffleArray(array) {
for (let i = array.length – 1; i > 0; i–) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}

// Inicializar la evaluación
document.getElementById(‘start-btn’).addEventListener(‘click’, function() {
// Obtener los datos del usuario de la sesión
const studentName = sessionStorage.getItem(‘student_name’);
if (!studentName) {
alert(“Une erreur s’est produite. Veuillez vous reconnecter.”);
return;
}

// Separar el nombre y apellido
const nameParts = studentName.split(‘ ‘);
studentData = {
prenom: nameParts[0] || ”,
nom: nameParts.slice(1).join(‘ ‘) || ”,
email: sessionStorage.getItem(‘student_email’) || ”,
curso: sessionStorage.getItem(‘student_course’) || ”
};

// Ocultar la intro y mostrar los controles
document.querySelector(‘.intro’).style.display = ‘none’;
document.querySelector(‘.controls’).style.display = ‘flex’;
document.querySelector(‘.progress-container’).style.display = ‘block’;

// Mezclar las preguntas y crear el orden
questionOrder = Array.from({ length: questionsData.length }, (_, i) => i);
questionOrder = shuffleArray(questionOrder);

// Inicializar las respuestas del usuario
userAnswers = Array(questionsData.length).fill(null);

// Mostrar la primera pregunta
displayQuestion(0);
});

// Mostrar una pregunta
function displayQuestion(index) {
const questionArea = document.getElementById(‘question-area’);
const questionIndex = questionOrder[index];
const question = questionsData[questionIndex];

// Actualizar la barra de progreso
const progress = ((index + 1) / questionOrder.length) * 100;
document.querySelector(‘.progress-bar’).style.width = progress + ‘%’;
document.querySelector(‘.progress-bar’).textContent = Math.round(progress) + ‘%’;

// Crear el elemento de pregunta
const questionElement = document.createElement(‘div’);
questionElement.className = ‘question-container’;
questionElement.id = ‘question-‘ + index;

// Añadir el contenido de la pregunta
questionElement.innerHTML = `

Question ${index + 1} sur ${questionOrder.length}

${question.question}

`;

// Añadir las opciones según el tipo de pregunta
if (question.type === ‘qcm’ || question.type === ‘choix_phrase’) {
const optionsContainer = document.createElement(‘div’);
optionsContainer.className = ‘options’;

question.options.forEach((option, optIndex) => {
const optionLabel = document.createElement(‘label’);
optionLabel.style.display = ‘block’;
optionLabel.style.margin = ‘5px 0’;

const radioInput = document.createElement(‘input’);
radioInput.type = ‘radio’;
radioInput.name = ‘question-‘ + index;
radioInput.value = optIndex;
radioInput.id = ‘option-‘ + index + ‘-‘ + optIndex;

// Verificar si hay una respuesta guardada
if (userAnswers[questionIndex] !== null && userAnswers[questionIndex] === optIndex) {
radioInput.checked = true;
}

radioInput.addEventListener(‘change’, function() {
userAnswers[questionIndex] = parseInt(this.value);
});

optionLabel.appendChild(radioInput);
optionLabel.appendChild(document.createTextNode(‘ ‘ + option));
optionsContainer.appendChild(optionLabel);
});

questionElement.appendChild(optionsContainer);
} else if (question.type === ‘text’) {
const textInput = document.createElement(‘input’);
textInput.type = ‘text’;
textInput.id = ‘text-answer-‘ + index;

// Verificar si hay una respuesta guardada
if (userAnswers[questionIndex] !== null) {
textInput.value = userAnswers[questionIndex];
}

textInput.addEventListener(‘input’, function() {
userAnswers[questionIndex] = this.value;
});

questionElement.appendChild(textInput);
}

// Limpiar el área de preguntas y añadir la nueva
questionArea.innerHTML = ”;
questionArea.appendChild(questionElement);

// Configurar el botón siguiente
const nextBtn = document.getElementById(‘next-btn’);
if (index === questionOrder.length – 1) {
nextBtn.textContent = ‘Terminer l’évaluation’;
} else {
nextBtn.textContent = ‘Question suivante’;
}

currentQuestionIndex = index;
}

// Manejar el botón siguiente
document.getElementById(‘next-btn’).addEventListener(‘click’, function() {
// Verificar si es la última pregunta
if (currentQuestionIndex === questionOrder.length – 1) {
// Finalizar la evaluación
calculateResults();
} else {
// Ir a la siguiente pregunta
displayQuestion(currentQuestionIndex + 1);
}
});

// Calcular los resultados
function calculateResults() {
let score = 0;
let correctAnswers = 0;

for (let i = 0; i = 90) {
gradeStamp.textContent = ‘A’;
gradeStamp.style.backgroundColor = ‘#4CAF50’;
document.getElementById(‘feedback’).textContent = ‘Excellent travail! Vous maîtrisez très bien les concepts.’;
} else if (score >= 80) {
gradeStamp.textContent = ‘B’;
gradeStamp.style.backgroundColor = ‘#8BC34A’;
document.getElementById(‘feedback’).textContent = ‘Très bon travail! Quelques petites erreurs mais dans l’ensemble c’est bien.’;
} else if (score >= 70) {
gradeStamp.textContent = ‘C’;
gradeStamp.style.backgroundColor = ‘#FFC107’;
document.getElementById(‘feedback’).textContent = ‘Bon travail. Vous avez compris les concepts principaux.’;
} else if (score >= 60) {
gradeStamp.textContent = ‘D’;
gradeStamp.style.backgroundColor = ‘#FF9800’;
document.getElementById(‘feedback’).textContent = ‘Passable. Vous devez encore travailler sur certains concepts.’;
} else {
gradeStamp.textContent = ‘F’;
gradeStamp.style.backgroundColor = ‘#e63946’;
document.getElementById(‘feedback’).textContent = ‘Vous devez réviser les concepts fondamentaux. N’hésitez pas à demander de l’aide à votre professeur.’;
}
}

// Enviar los resultados al servidor
function sendResultsToServer(score) {
const formData = new FormData();
formData.append(‘email’, studentData.email);
formData.append(‘nombre’, studentData.prenom + ‘ ‘ + studentData.nom);
formData.append(‘curso’, studentData.curso);
formData.append(‘score’, score);
formData.append(‘accion’, ‘resultados’); // Indica que son resultados

fetch(SCRIPT_URL, {
method: ‘POST’,
body: formData,
mode: ‘no-cors’
})
.catch(error => {
console.error(‘Error al enviar resultados:’, error);
});
}

// Manejar la descarga del certificado
document.getElementById(‘download-badge’).addEventListener(‘click’, function() {
const { jsPDF } = window.jspdf;

html2canvas(document.getElementById(‘badge’)).then(canvas => {
const imgData = canvas.toDataURL(‘image/png’);
const pdf = new jsPDF(‘l’, ‘mm’, ‘a4’);
const imgProps= pdf.getImageProperties(imgData);
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

pdf.addImage(imgData, ‘PNG’, 0, 0, pdfWidth, pdfHeight);
pdf.save(‘certificat_francais_’ + studentData.prenom + ‘_’ + studentData.nom + ‘.pdf’);
});
});

// Mostrar/ocultar formulario de email
document.getElementById(‘show-email-form’).addEventListener(‘click’, function() {
const emailForm = document.getElementById(‘email-form’);
if (emailForm.style.display === ‘block’) {
emailForm.style.display = ‘none’;
} else {
emailForm.style.display = ‘block’;
}
});

// Enviar certificado por email
document.getElementById(‘send-email’).addEventListener(‘click’, function() {
const recipientEmail = document.getElementById(‘recipient-email’).value;
if (!recipientEmail) {
alert(‘Veuillez entrer une adresse email valide.’);
return;
}

const emailStatus = document.getElementById(‘email-status’);
emailStatus.style.display = ‘block’;
emailStatus.textContent = ‘Envoi en cours…’;

html2canvas(document.getElementById(‘badge’)).then(canvas => {
const imgData = canvas.toDataURL(‘image/png’);

const formData = new FormData();
formData.append(‘email’, studentData.email);
formData.append(‘recipient’, recipientEmail);
formData.append(‘name’, studentData.prenom + ‘ ‘ + studentData.nom);
formData.append(‘score’, document.getElementById(‘score’).textContent);
formData.append(‘imageData’, imgData);
formData.append(‘accion’, ‘email’); // Indica que es un envío por email

fetch(SCRIPT_URL, {
method: ‘POST’,
body: formData,
mode: ‘no-cors’
})
.then(() => {
emailStatus.textContent = ‘Certificat envoyé avec succès!’;
emailStatus.style.backgroundColor = ‘#dff0d8’;
})
.catch(error => {
console.error(‘Error:’, error);
emailStatus.textContent = ‘Erreur lors de l’envoi. Veuillez réessayer plus tard.’;
emailStatus.style.backgroundColor = ‘#f2dede’;
});
});
});