DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
 // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
 // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
 // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
 // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
 @sleep(1);
 // Personnaliser certains paramètres de la structure
 $tab_parametres = array();
 $tab_parametres['version_base']               = VERSION_BASE_STRUCTURE;
 $tab_parametres['webmestre_uai']              = $uai;
 $tab_parametres['webmestre_denomination']     = $denomination;
 $tab_parametres['etablissement_denomination'] = $denomination;
 DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
 // Insérer le compte administrateur dans la base de cette structure
 $password = fabriquer_mdp();
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , $contact_nom , $contact_prenom , NULL /*user_naissance_date*/ , $contact_courriel , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ );
 // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' );
 // Envoyer un courriel au contact et / ou une copie du courriel au webmestre
 $courriel_contenu = ( $courriel_envoi || $courriel_copie ) ? Webmestre::contenu_courriel_inscription( $base_id , $denomination , $contact_nom , $contact_prenom , 'admin' , $password , URL_DIR_SACOCHE ) : '' ;
 $courriel_titre   = ( $courriel_envoi || $courriel_copie ) ? 'Création compte - Inscription n°'.$base_id : '' ;
 if($courriel_envoi)
 {
   $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu );
   if(!$courriel_bilan)
   {
     exit('Erreur lors de l\'envoi du courriel !');
   }
 }
 if($courriel_copie)
 {
     if (mb_strlen($password) < $_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI'][$profil]) {
         exit('Erreur : mot de passe trop court pour ce profil !');
     }
 }
 // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur.
 if ($courriel) {
     if (HEBERGEUR_INSTALLATION == 'multi-structures') {
         list($mail_domaine, $is_domaine_valide) = tester_domaine_courriel_valide($courriel);
         if (!$is_domaine_valide) {
             exit('Erreur avec le domaine "' . $mail_domaine . '" !');
         }
     }
 }
 $user_email_origine = $courriel ? 'admin' : '';
 // Insérer l'enregistrement
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($sconet_id, 0, $reference, $profil, $genre, $nom, $prenom, NULL, $courriel, $user_email_origine, $login, crypter_mdp($password), 0, $id_ent, $id_gepi);
 // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'bilan_officiel_appreciation', 'accueil');
 // Il peut (déjà !) falloir lui affecter une date de sortie...
 if ($box_date) {
     $sortie_date = '-';
     $sortie_date_mysql = SORTIE_DEFAUT_MYSQL;
 } else {
     $sortie_date_mysql = convert_date_french_to_mysql($sortie_date);
     DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($user_id, array(':sortie_date' => $sortie_date_mysql));
 }
 // Afficher le retour
 echo '<tr id="id_' . $user_id . '" class="new">';
 echo '<td class="nu"><input type="checkbox" name="f_ids" value="' . $user_id . '" /></td>';
 echo '<td class="label">' . html($id_ent) . '</td>';
 echo '<td class="label">' . html($id_gepi) . '</td>';
     }
   }
 }
 // Cas de la date de naissance
 if($box_birth_date)
 {
   $birth_date = '-' ;
   $birth_date_mysql = NULL;
 }
 else
 {
   $birth_date_mysql = convert_date_french_to_mysql($birth_date);
 }
 $user_email_origine = ($courriel) ? 'admin' : '' ;
 // Insérer l'enregistrement
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( $sconet_id , $sconet_num , $reference , $profil , $genre , $nom , $prenom , $birth_date_mysql , $courriel , $user_email_origine , $login , crypter_mdp($password) , 0 /*eleve_classe_id*/ , $id_ent , $id_gepi );
 // Il peut (déjà !) falloir lui affecter une date de sortie...
 if($box_sortie_date)
 {
   $sortie_date = '-' ;
   $sortie_date_mysql = SORTIE_DEFAUT_MYSQL;
 }
 else
 {
   $sortie_date_mysql = convert_date_french_to_mysql($sortie_date);
   DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user( $user_id , array(':sortie_date'=>$sortie_date_mysql) );
 }
 // Si on inscrit un élève après avoir fait afficher une classe ou un groupe, alors on l'affecte dans la classe ou le groupe en question
 $tab_groupe_type = array( 'c'=>'classe' , 'g'=>'groupe' );
 if( isset($tab_groupe_type[$groupe_type]) && $groupe_id )
 {
	{
		if( DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('reference',$reference,NULL,'directeur') )
		{
			exit('Erreur : référence déjà utilisée !');
		}
	}
	// Construire le login
	$login = fabriquer_login($prenom,$nom,'directeur');
	// Puis tester le login (parmi tout le personnel de l'établissement)
	if( DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login',$login) )
	{
		// Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin
		$login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login);
	}
	// Insérer l'enregistrement
	$user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($sconet_id,$sconet_num=0,$reference,'directeur',$nom,$prenom,$login,crypter_mdp($password),0,$id_ent,$id_gepi);
	// Il peut (déjà !) falloir lui affecter une date de sortie...
	if($not_exit)
	{
		$sortie_date = '-' ;
		$sortie_date_mysql = SORTIE_DEFAUT_MYSQL;
	}
	else
	{
		$sortie_date_mysql = convert_date_french_to_mysql($sortie_date);
		DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user( $user_id , array(':sortie_date'=>$sortie_date_mysql) );
	}
	// Afficher le retour
	echo'<tr id="id_'.$user_id.'" class="new">';
	echo	'<td class="nu"><input type="checkbox" name="f_ids" value="'.$user_id.'" /></td>';
	echo	'<td class="label">'.html($id_ent).'</td>';
   DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
   // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
   // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
   // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
   // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
   @sleep(1);
   // Personnaliser certains paramètres de la structure
   $tab_parametres = array();
   $tab_parametres['version_base']               = VERSION_BASE_STRUCTURE;
   $tab_parametres['webmestre_uai']              = HEBERGEUR_UAI;
   $tab_parametres['webmestre_denomination']     = HEBERGEUR_DENOMINATION;
   $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION;
   DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
   // Insérer un compte administrateur dans la base de la structure
   $password = fabriquer_mdp();
   $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , WEBMESTRE_NOM , WEBMESTRE_PRENOM , NULL /*user_naissance_date*/ , WEBMESTRE_COURRIEL , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ );
   // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
   DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' );
   // Affichage du retour
   $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>'.NL;
   $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>'.NL;
   $affichage .= '<ul class="puce">';
   $affichage .= '<li>nom d\'utilisateur " admin "</li>';
   $affichage .= '<li>mot de passe " '.$password.' "</li>';
   $affichage .= '</ul>'.NL;
   $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>'.NL;
   $affichage .= '<hr />'.NL;
   $affichage .= '<h2>Installation logicielle terminée</h2>'.NL;
   $affichage .= '<p>Se connecter avec le compte webmestre : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL;
   $affichage .= '<p>Se connecter avec le compte administrateur : <a href="'.URL_DIR_SACOCHE.'">'.URL_INSTALL_SACOCHE.'</a></p>'.NL;
 }
     $login = fabriquer_login($tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
     // Puis tester le login (parmi tout le personnel de l'établissement)
     if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) {
         // Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin
         $login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login);
     }
     // Construire le password
     if ($import_profil != 'eleve' || !$_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI']['ELV'] || empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date'])) {
         $password = fabriquer_mdp($tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']);
     } else {
         $password = str_replace('/', '', $tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
     }
     // Attention à la date de naissance, définie seulement pour les élèves
     $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']);
     // Ajouter l'utilisateur
     $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'], $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'], $tab_memo_analyse['ajouter'][$i_fichier]['reference'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'], $tab_memo_analyse['ajouter'][$i_fichier]['genre'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $birth_date, $tab_memo_analyse['ajouter'][$i_fichier]['courriel'], $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'], $login, crypter_mdp($password), $tab_memo_analyse['ajouter'][$i_fichier]['classe']);
     if ($import_profil == 'professeur') {
         // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel
         DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'bilan_officiel_appreciation', 'accueil');
     }
     $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id;
     $nb_add++;
     $tab_password[$user_id] = $password;
     $classe_ou_profil = $import_profil == 'eleve' ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'];
     $fcontenu_csv .= '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['reference'] . '"' . $separateur . $classe_ou_profil . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['prenom'] . $separateur . $login . $separateur . '"' . $password . '"' . "\r\n";
     $ligne1 = $classe_ou_profil;
     $ligne2 = $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . ' ' . $tab_memo_analyse['ajouter'][$i_fichier]['prenom'];
     $ligne3 = 'Utilisateur : ' . $login;
     $ligne4 = 'Mot de passe : ' . $password;
     $fcontenu_pdf_tab[] = $ligne1 . "\r\n" . $ligne2 . "\r\n" . $ligne3 . "\r\n" . $ligne4;
 }
 }
 // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur.
 if($courriel)
 {
   if(HEBERGEUR_INSTALLATION=='multi-structures')
   {
     list($mail_domaine,$is_domaine_valide) = tester_domaine_courriel_valide($courriel);
     if(!$is_domaine_valide)
     {
       exit('Erreur avec le domaine "'.$mail_domaine.'" !');
     }
   }
 }
 $user_email_origine = ($courriel) ? 'admin' : '' ;
 // Insérer l'enregistrement
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*sconet_num*/ , '' /*reference*/ , $profil , $genre , $nom , $prenom , NULL /*user_naissance_date*/ , $courriel , $user_email_origine , $login , crypter_mdp($password) , 0 /*eleve_classe_id*/ , $id_ent , $id_gepi );
 // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' );
 // Afficher le retour
 echo'<tr id="id_'.$user_id.'" class="new">';
 echo  '<td>'.html($id_ent).'</td>';
 echo  '<td>'.html($id_gepi).'</td>';
 echo  '<td>'.Html::$tab_genre['adulte'][$genre].'</td>';
 echo  '<td>'.html($nom).'</td>';
 echo  '<td>'.html($prenom).'</td>';
 echo  '<td class="new">'.html($login).' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="Pensez à noter le login !" /></td>';
 echo  '<td class="new">'.html($password).' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="Pensez à noter le mot de passe !" /></td>';
 echo  '<td>'.html($courriel).'</td>';
 echo  '<td class="nu">';
 echo    '<q class="modifier" title="Modifier cet administrateur."></q>';
 echo    '<q class="supprimer" title="Retirer cet administrateur."></q>';
 DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
 // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
 // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
 // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
 // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
 @sleep(1);
 // Personnaliser certains paramètres de la structure
 $tab_parametres = array();
 $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE;
 $tab_parametres['webmestre_uai'] = $uai;
 $tab_parametres['webmestre_denomination'] = $denomination;
 $tab_parametres['etablissement_denomination'] = $denomination;
 DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
 // Insérer le compte administrateur dans la base de cette structure
 $password = fabriquer_mdp();
 $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', $contact_nom, $contact_prenom, NULL, $contact_courriel, 'user', 'admin', crypter_mdp($password), 0, '', '');
 // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
 DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil');
 // Envoyer un courriel au contact et / ou une copie du courriel au webmestre
 $courriel_contenu = $courriel_envoi || $courriel_copie ? Webmestre::contenu_courriel_inscription($base_id, $denomination, $contact_nom, $contact_prenom, 'admin', $password, URL_DIR_SACOCHE) : '';
 $courriel_titre = $courriel_envoi || $courriel_copie ? 'Création compte - Inscription n°' . $base_id : '';
 if ($courriel_envoi) {
     $courriel_bilan = Sesamail::mail($contact_courriel, $courriel_titre, $courriel_contenu);
     if (!$courriel_bilan) {
         exit('Erreur lors de l\'envoi du courriel !');
     }
 }
 if ($courriel_copie) {
     $introduction = '================================================================================' . "\r\n" . 'Copie pour information du courriel adressé à ' . $contact_courriel . "\r\n" . '================================================================================' . "\r\n\r\n";
     $courriel_bilan = Sesamail::mail(WEBMESTRE_COURRIEL, $courriel_titre, $introduction . $courriel_contenu);
     if (!$courriel_bilan) {
     DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure();
     // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas.
     // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là).
     // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ?
     // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider...
     @sleep(1);
     // Personnaliser certains paramètres de la structure
     $tab_parametres = array();
     $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE;
     $tab_parametres['webmestre_uai'] = HEBERGEUR_UAI;
     $tab_parametres['webmestre_denomination'] = HEBERGEUR_DENOMINATION;
     $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION;
     DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres);
     // Insérer un compte administrateur dans la base de la structure
     $password = fabriquer_mdp();
     $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', WEBMESTRE_NOM, WEBMESTRE_PRENOM, NULL, WEBMESTRE_COURRIEL, 'user', 'admin', crypter_mdp($password), 0, '', '');
     // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification
     DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil');
     // Affichage du retour
     $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>' . NL;
     $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>' . NL;
     $affichage .= '<ul class="puce">';
     $affichage .= '<li>nom d\'utilisateur " admin "</li>';
     $affichage .= '<li>mot de passe " ' . $password . ' "</li>';
     $affichage .= '</ul>' . NL;
     $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>' . NL;
     $affichage .= '<hr />' . NL;
     $affichage .= '<h2>Installation logicielle terminée</h2>' . NL;
     $affichage .= '<p>Se connecter avec le compte webmestre : <a href="' . URL_DIR_SACOCHE . '?webmestre">' . URL_DIR_SACOCHE . '?webmestre</a></p>' . NL;
     $affichage .= '<p>Se connecter avec le compte administrateur : <a href="' . URL_DIR_SACOCHE . '">' . URL_INSTALL_SACOCHE . '</a></p>' . NL;
 } elseif (HEBERGEUR_INSTALLATION == 'multi-structures') {