getConnection(); // Configuration $upload_dir = '/var/www/mathematiques/uploads/classes/'; $fichiers_json = ['2CV.json', 'TCV.json', '3PM.json', '1V.json','TCFA.json']; $mot_de_passe_defaut = 'eleve2025'; // Statistiques $stats = [ 'classes_creees' => 0, 'eleves_crees' => 0, 'erreurs' => 0, 'details' => [] ]; /** * Convertit un nom de classe en niveau complet */ function niveau_complet($nom_classe) { $premier_char = strtoupper(substr($nom_classe, 0, 1)); switch($premier_char) { case '3': return 'Troisième'; case '2': return 'Seconde'; case '1': return 'Première'; case 'T': return 'Terminale'; default: return 'Autre'; } } /** * Génère un login unique */ function generer_login_unique($prenom, $nom, $db) { $prenom_clean = strtolower(transliterate($prenom)); $nom_clean = strtolower(transliterate($nom)); $initiale = substr($prenom_clean, 0, 1); $login_base = $initiale . '.' . $nom_clean; $login = $login_base; $suffixe = 1; while (login_existe($login, $db)) { $suffixe++; $login = $login_base . $suffixe; } return $login; } /** * Enlève les accents */ function transliterate($str) { $unwanted_array = [ 'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y' ]; return strtr($str, $unwanted_array); } /** * Vérifie si un login existe */ function login_existe($login, $db) { $stmt = $db->prepare("SELECT COUNT(*) FROM utilisateurs WHERE login = ?"); $stmt->execute([$login]); return $stmt->fetchColumn() > 0; } /** * Crée ou récupère une classe */ function creer_ou_recuperer_classe($nom_classe, $annee_scolaire, $db) { $stmt = $db->prepare(" SELECT id_classe FROM classes WHERE nom_classe = ? AND annee_scolaire = ? "); $stmt->execute([$nom_classe, $annee_scolaire]); $classe_existante = $stmt->fetch(PDO::FETCH_ASSOC); if ($classe_existante) { return [ 'id' => $classe_existante['id_classe'], 'nouveau' => false ]; } $niveau = niveau_complet($nom_classe); $stmt = $db->prepare(" INSERT INTO classes (nom_classe, niveau, annee_scolaire, type_classe, actif) VALUES (?, ?, ?, 'reguliere', 1) "); $stmt->execute([$nom_classe, $niveau, $annee_scolaire]); return [ 'id' => $db->lastInsertId(), 'nouveau' => true ]; } /** * Crée un élève */ function creer_eleve($eleve_data, $id_classe, $mot_de_passe, $db) { $prenom = trim($eleve_data['prenom']); $nom = trim($eleve_data['nom']); $login = generer_login_unique($prenom, $nom, $db); $mot_de_passe_hash = password_hash($mot_de_passe, PASSWORD_DEFAULT); $stmt = $db->prepare(" INSERT INTO utilisateurs (login, mot_de_passe, nom, prenom, id_type, id_classe, actif) VALUES (?, ?, ?, ?, 2, ?, 1) "); $stmt->execute([ $login, $mot_de_passe_hash, $nom, $prenom, $id_classe ]); return [ 'id' => $db->lastInsertId(), 'login' => $login, 'nom' => $nom, 'prenom' => $prenom ]; } // Début du traitement echo " Import des classes

🔧 Import des classes et élèves

"; try { foreach ($fichiers_json as $fichier) { $chemin_complet = $upload_dir . $fichier; echo "
"; echo "

📁 Traitement de : $fichier

"; if (!file_exists($chemin_complet)) { echo "

❌ Fichier non trouvé : $chemin_complet

"; $stats['erreurs']++; echo "
"; continue; } $json_content = file_get_contents($chemin_complet); $data = json_decode($json_content, true); if (!$data || !isset($data['classe'])) { echo "

❌ Format JSON invalide

"; $stats['erreurs']++; echo "
"; continue; } $classe_data = $data['classe']; $nom_classe = $classe_data['nom']; $annee_scolaire = $classe_data['annee_scolaire']; $eleves = $classe_data['eleves']; echo "

📚 Classe: $nom_classe ($annee_scolaire)

"; echo "

👥 Nombre d'élèves: " . count($eleves) . "

"; $result_classe = creer_ou_recuperer_classe($nom_classe, $annee_scolaire, $db); $id_classe = $result_classe['id']; if ($result_classe['nouveau']) { echo "

✅ Classe créée (ID: $id_classe)

"; $stats['classes_creees']++; } else { echo "

ℹ️ Classe existante (ID: $id_classe)

"; } echo "
"; echo "Import des élèves :
"; $eleves_crees_classe = 0; foreach ($eleves as $eleve) { try { $result_eleve = creer_eleve($eleve, $id_classe, $mot_de_passe_defaut, $db); echo "
"; echo "✅ {$result_eleve['prenom']} {$result_eleve['nom']} → "; echo "{$result_eleve['login']} (ID: {$result_eleve['id']})"; echo "
"; $stats['eleves_crees']++; $eleves_crees_classe++; } catch (Exception $e) { echo "
"; echo "❌ {$eleve['prenom']} {$eleve['nom']} : " . $e->getMessage(); echo "
"; $stats['erreurs']++; } } echo "
"; echo "

✅ $eleves_crees_classe élève(s) créé(s)

"; echo ""; } echo "

📊 Statistiques d'import

Classes créées : {$stats['classes_creees']}

Élèves créés : {$stats['eleves_crees']}

Erreurs : {$stats['erreurs']}

Mot de passe par défaut : $mot_de_passe_defaut

"; if ($stats['eleves_crees'] > 0) { echo "

🎉 Import réussi !

{$stats['eleves_crees']} élèves importés avec succès.

Login : initiale_prenom.nom (ex: j.dupont)

Mot de passe : $mot_de_passe_defaut

"; } } catch (Exception $e) { echo "
"; echo "

❌ Erreur fatale

"; echo "

" . htmlspecialchars($e->getMessage()) . "

"; echo "
"; } echo " "; ?>