}
     }
     $tab_donnees[':email_origine'] = 'admin';
 } else {
     $tab_donnees[':email_origine'] = '';
 }
 // Cas du mot de passe
 if (!$box_password) {
     $tab_donnees[':password'] = crypter_mdp($password);
 }
 // Cas de la 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);
 }
 // Mettre à jour l'enregistrement
 $tab_donnees += array(':sconet_id' => $sconet_id, ':reference' => $reference, ':profil_sigle' => $profil, ':genre' => $genre, ':nom' => $nom, ':prenom' => $prenom, ':courriel' => $courriel, ':id_ent' => $id_ent, ':id_gepi' => $id_gepi, ':sortie_date' => $sortie_date_mysql);
 DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id, $tab_donnees);
 // Afficher le retour
 $checked = $check ? ' checked' : '';
 echo '<td class="nu"><input type="checkbox" name="f_ids" value="' . $id . '"' . $checked . ' /></td>';
 echo '<td class="label">' . html($id_ent) . '</td>';
 echo '<td class="label">' . html($id_gepi) . '</td>';
 echo '<td class="label">' . html($sconet_id) . '</td>';
 echo '<td class="label">' . html($reference) . '</td>';
 echo '<td class="label">' . html($profil) . ' <img alt="" src="./_img/bulle_aide.png" width="16" height="16" title="' . html(html($_SESSION['tmp'][$profil])) . '" /></td>';
 echo '<td class="label">' . Html::$tab_genre['adulte'][$genre] . '</td>';
 echo '<td class="label">' . html($nom) . '</td>';
 echo '<td class="label">' . html($prenom) . '</td>';
        $texte_lien_avant = '';
    }
    if (!$aff_lien) {
        $texte_lien_apres = '';
    }
    $toggle_class = $aff_start ? 'toggle_moins' : 'toggle_plus';
    $toggle_etat = $aff_start ? '' : ' class="hide"';
    $avec_texte_nombre = !$make_officiel || $_SESSION['OFFICIEL']['BULLETIN_ACQUIS_TEXTE_NOMBRE'] ? TRUE : FALSE;
    $avec_texte_code = !$make_officiel || $_SESSION['OFFICIEL']['BULLETIN_ACQUIS_TEXTE_CODE'] ? TRUE : FALSE;
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Période concernée
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($periode_id == 0) {
    $date_mysql_debut = convert_date_french_to_mysql($date_debut);
    $date_mysql_fin = convert_date_french_to_mysql($date_fin);
} else {
    $DB_ROW = DB_STRUCTURE_COMMUN::DB_recuperer_dates_periode($groupe_id, $periode_id);
    if (empty($DB_ROW)) {
        exit('La classe et la période ne sont pas reliées !');
    }
    $date_mysql_debut = $DB_ROW['jointure_date_debut'];
    $date_mysql_fin = $DB_ROW['jointure_date_fin'];
    $date_debut = convert_date_mysql_to_french($date_mysql_debut);
    $date_fin = convert_date_mysql_to_french($date_mysql_fin);
}
if ($date_mysql_debut > $date_mysql_fin) {
    exit('La date de début est postérieure à la date de fin !');
}
$tab_precision_retroactif = array('auto' => 'notes antérieures selon référentiels', 'oui' => 'avec notes antérieures', 'non' => 'sans notes antérieures', 'annuel' => 'notes antérieures de l\'année scolaire');
$precision_socle = $only_socle ? ', restriction au socle' : '';
}
// Récupérer la liste des périodes, dans l'ordre choisi par l'admin
$DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_periodes();
if (empty($DB_TAB)) {
    exit('Aucune période n\'est enregistrée !');
}
foreach ($DB_TAB as $DB_ROW) {
    $tab_periode[$DB_ROW['periode_id']] = $DB_ROW['periode_nom'];
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Ajouter des périodes à des classes & groupes
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($action == 'ajouter' && $date_debut && $date_fin) {
    // Formater les dates
    $date_debut_mysql = convert_date_french_to_mysql($date_debut);
    $date_fin_mysql = convert_date_french_to_mysql($date_fin);
    // Vérifier que le date de début est antérieure à la date de fin
    if ($date_debut_mysql > $date_fin_mysql) {
        exit('Erreur : la date de début est postérieure à la date de fin !');
    }
    foreach ($tab_select_periodes as $periode_id) {
        foreach ($tab_select_classes_groupes as $groupe_id) {
            DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_groupe_periode($groupe_id, $periode_id, TRUE, $date_debut_mysql, $date_fin_mysql);
        }
    }
} elseif ($action == 'retirer') {
    $notification_contenu = '';
    $notification_intro = date('d-m-Y H:i:s') . ' ' . $_SESSION['USER_PRENOM'] . ' ' . $_SESSION['USER_NOM'];
    foreach ($tab_select_periodes as $periode_id) {
        foreach ($tab_select_classes_groupes as $groupe_id) {
            DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_liaison_groupe_periode($groupe_id, $periode_id, FALSE);
//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
//	Compléter une évaluation existante
//	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
elseif( ($action=='completer') && (isset($tab_types[$groupe_type])) && in_array($qui,$tab_qui) && $devoir_id && $devoir_groupe_id && in_array($suite,$tab_suite) && $nb_demandes && $nb_users && $nb_items && $date && $date_visible )
{
	// Dans le cas d'une évaluation sur une liste d'élèves sélectionnés
	if($qui=='select')
	{
		// Il faut ajouter tous les élèves choisis
		DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_devoir_user($devoir_id,$devoir_groupe_id,$tab_user_id,'ajouter'); // ($devoir_groupe_id et non $groupe_id qui correspond à la classe d'origine des élèves...)
	}
	// Maintenant on peut modifier les items de l'évaluation
	DB_STRUCTURE_PROFESSEUR::DB_modifier_liaison_devoir_item($devoir_id,$tab_item_id,'ajouter');
	// Insérer les scores 'REQ' pour indiquer au prof les demandes dans le tableau de saisie
	$date_mysql         = convert_date_french_to_mysql($date);
	$date_visible_mysql = convert_date_french_to_mysql($date_visible);
	$info = 'Demande en attente ('.$_SESSION['USER_NOM'].' '.$_SESSION['USER_PRENOM']{0}.'.)';
	foreach($tab_user_item as $key)
	{
		list($eleve_id,$item_id) = explode('x',$key);
		DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($_SESSION['USER_ID'],$eleve_id,$devoir_id,$item_id,$date_mysql,'REQ',$info,$date_visible_mysql);
	}
	// Pour terminer, on change le statut des demandes ou on les supprime
	$listing_demande_id = implode(',',$tab_demande_id);
	if($suite=='changer')
	{
		DB_STRUCTURE_PROFESSEUR::DB_modifier_statut_demandes($listing_demande_id,'prof');
	}
	else
	{
		DB_STRUCTURE_PROFESSEUR::DB_supprimer_demandes_devoir($listing_demande_id);
             }
             $memo_date_debut = min($memo_date_debut, $date_debut);
             $memo_date_fin = max($memo_date_fin, $date_fin);
         }
     }
 }
 if ($xml->Retards) {
     $objet = 'retards';
     // cas d'un fichier de retards
     foreach ($xml->Retards as $eleve) {
         // il n'y a aucun identifiant disponible dans cet export...
         $nom = $eleve->NOM ? Clean::nom($eleve->NOM) : NULL;
         $prenom = $eleve->PRENOM ? Clean::prenom($eleve->PRENOM) : NULL;
         $nb_retard_nj = $eleve->REGLE && $eleve->REGLE == 'N' ? 1 : 0;
         $id = $nom . '.' . $prenom;
         $date = $eleve->DATE ? convert_date_french_to_mysql($eleve->DATE) : NULL;
         if ($nom && $prenom && $date) {
             if (!isset($tab_users_fichier[$id])) {
                 $tab_users_fichier[$id] = array(NULL, NULL, $nom, $prenom, NULL, NULL, 1, $nb_retard_nj);
             } else {
                 $tab_users_fichier[$id][6] += 1;
                 $tab_users_fichier[$id][7] += 1;
             }
             $memo_date_debut = min($memo_date_debut, $date);
             $memo_date_fin = max($memo_date_fin, $date);
         }
     }
 }
 $nb_eleves_trouves = count($tab_users_fichier, COUNT_NORMAL);
 if (!$nb_eleves_trouves) {
     exit('Erreur : aucun élève trouvé dans le fichier !');
						$tab_demande_supprimer[$key] = $key;
					}
				}
			}
			unset($tab_post[$key]);
		}
	}
	// Il reste dans $tab_post les données à ajouter (mises dans $tab_nouveau_ajouter) et les données qui ne servent pas (non enregistrées et non saisies)
	$tab_nouveau_ajouter = array_filter($tab_post,'non_note');
	// Il n'y a plus qu'à mettre à jour la base
	if( !count($tab_nouveau_ajouter) && !count($tab_nouveau_modifier) && !count($tab_nouveau_supprimer) )
	{
		exit('Aucune modification détectée !');
	}
	// L'information associée à la note comporte le nom de l'évaluation + celui du professeur (c'est une information statique, conservée sur plusieurs années)
	$date_visible_mysql = ($date_visible=='identique') ? $date_mysql : convert_date_french_to_mysql($date_visible);
	$info = $description.' ('.$_SESSION['USER_NOM'].' '.$_SESSION['USER_PRENOM']{0}.'.)';
	foreach($tab_nouveau_ajouter as $key => $note)
	{
		list($item_id,$eleve_id) = explode('x',$key);
		DB_STRUCTURE_PROFESSEUR::DB_ajouter_saisie($_SESSION['USER_ID'],$eleve_id,$devoir_id,$item_id,$date_mysql,$note,$info,$date_visible_mysql);
	}
	foreach($tab_nouveau_modifier as $key => $note)
	{
		list($item_id,$eleve_id) = explode('x',$key);
		DB_STRUCTURE_PROFESSEUR::DB_modifier_saisie($eleve_id,$devoir_id,$item_id,$note,$info);
	}
	foreach($tab_nouveau_supprimer as $key => $key)
	{
		list($item_id,$eleve_id) = explode('x',$key);
		DB_STRUCTURE_PROFESSEUR::DB_supprimer_saisie($eleve_id,$devoir_id,$item_id);
    // Supprimer l'entrée de la base éventuelle afin de ne plus la rechercher pour les utilisateurs suivants
    if ($id_base) {
        $tab_i_fichier_TO_id_base[$i_fichier] = $id_base;
        unset($tab_users_base['sconet_id'][$id_base], $tab_users_base['sconet_num'][$id_base], $tab_users_base['reference'][$id_base], $tab_users_base['nom'][$id_base], $tab_users_base['prenom'][$id_base]);
    }
}
// Parcourir chaque entrée de la base
if (count($tab_users_base['sconet_id'])) {
    $tab_indices_base = array_keys($tab_users_base['sconet_id']);
    foreach ($tab_indices_base as $id_base) {
        // Cas [7] : absent dans le fichier, présent dans la base, actuel : contenu à retirer (probablement un user nouvellement sortant)
        if ($tab_users_base['sortie'][$id_base] == SORTIE_DEFAUT_MYSQL) {
            $indication = $import_profil == 'eleve' ? $tab_users_base['classe'][$id_base] : $tab_users_base['profil_sigle'][$id_base];
            $date_sortie_fr = isset($_SESSION['tmp']['date_sortie'][$tab_users_base['sconet_id'][$id_base]]) ? $_SESSION['tmp']['date_sortie'][$tab_users_base['sconet_id'][$id_base]] : TODAY_FR;
            $lignes_retirer .= '<tr><th>Retirer <input id="del_' . $id_base . '" name="del_' . $id_base . '" type="checkbox" checked /></th><td>' . html($tab_users_base['sconet_id'][$id_base] . ' / ' . $tab_users_base['sconet_num'][$id_base] . ' / ' . $tab_users_base['reference'][$id_base] . ' || ' . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . ' (' . $indication . ')') . ' || <b>Sortie : non &rarr; ' . $date_sortie_fr . '</b></td></tr>' . NL;
            $tab_users_retirer[$id_base] = convert_date_french_to_mysql($date_sortie_fr);
        } else {
            if ($mode == 'complet') {
                $indication = $import_profil == 'eleve' ? $tab_users_base['classe'][$id_base] : $tab_users_base['profil_sigle'][$id_base];
                $lignes_inchanger .= '<tr><th>Conserver</th><td>' . html($tab_users_base['sconet_id'][$id_base] . ' / ' . $tab_users_base['sconet_num'][$id_base] . ' / ' . $tab_users_base['reference'][$id_base] . ' || ' . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . ' (' . $indication . ')') . '</td></tr>' . NL;
            }
        }
    }
}
unset($_SESSION['tmp']['date_sortie']);
// On enregistre
$tab_memo_analyse = array('modifier' => $tab_users_modifier, 'ajouter' => $tab_users_ajouter, 'retirer' => $tab_users_retirer);
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_memo_analyse.txt', serialize($tab_memo_analyse));
// On enregistre (tableau mis à jour)
$tab_liens_id_base = array('classes' => $tab_i_classe_TO_id_base, 'groupes' => $tab_i_groupe_TO_id_base, 'users' => $tab_i_fichier_TO_id_base);
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_liens_id_base.txt', serialize($tab_liens_id_base));
            $ligne3 = 'Utilisateur : ' . $login;
            $ligne4 = 'Mot de passe : ' . $password;
            $fcontenu_pdf_tab[] = $ligne1 . "\r\n" . $ligne2 . "\r\n" . $ligne3 . "\r\n" . $ligne4;
        }
    }
}
// Modifier des users éventuels
$nb_mod = 0;
if (count($tab_mod)) {
    foreach ($tab_mod as $id_base) {
        // Il peut théoriquement subsister un conflit de sconet_id pour des users ayant même reference, et réciproquement... idem pour l'adresse mail...
        $tab_champs = $import_profil == 'eleve' ? array('sconet_id', 'sconet_num', 'reference', 'classe', 'genre', 'nom', 'prenom', 'birth_date', 'courriel', 'email_origine') : array('sconet_id', 'reference', 'profil_sigle', 'genre', 'nom', 'prenom', 'courriel', 'email_origine');
        $DB_VAR = array();
        foreach ($tab_champs as $champ_ref) {
            if ($tab_memo_analyse['modifier'][$id_base][$champ_ref] !== FALSE) {
                $DB_VAR[':' . $champ_ref] = $champ_ref != 'birth_date' ? $tab_memo_analyse['modifier'][$id_base][$champ_ref] : convert_date_french_to_mysql($tab_memo_analyse['modifier'][$id_base][$champ_ref]);
            }
        }
        if ($tab_memo_analyse['modifier'][$id_base]['entree'] !== FALSE) {
            $DB_VAR[':sortie_date'] = $tab_memo_analyse['modifier'][$id_base]['entree'];
        }
        // bilan
        if (count($DB_VAR)) {
            DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id_base, $DB_VAR);
        }
        $nb_mod++;
    }
}
// On enregistre (tableau mis à jour)
$tab_liens_id_base = array('classes' => $tab_i_classe_TO_id_base, 'groupes' => $tab_i_groupe_TO_id_base, 'users' => $tab_i_fichier_TO_id_base);
FileSystem::ecrire_fichier(CHEMIN_DOSSIER_IMPORT . 'import_' . $import_origine . '_' . $import_profil . '_' . $_SESSION['BASE'] . '_' . session_id() . '_liens_id_base.txt', serialize($tab_liens_id_base));