security_check();
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
header("Location: ../logout.php?auto=1");
die();
}
$sql="SELECT 1=1 FROM droits WHERE id='/gestion/changement_d_annee.php';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)==0) {
$sql="INSERT INTO droits SET id='/gestion/changement_d_annee.php',
administrateur='V',
professeur='F',
cpe='F',
scolarite='F',
eleve='F',
responsable='F',
secours='F',
autre='F',
description='Changement d\'année.',
statut='';";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
}
// Check access
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
$msg = '';
if(isset($_GET['suppr_comptes_resp_en_reserve_et_collision_eleve'])) {
check_token();
$sql="DELETE FROM tempo_utilisateurs WHERE statut='responsable' AND login IN (SELECT login FROM eleves);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
$msg.="Ménage effectué.
Refaites maintenant une mise en réserve des comptes élèves
";
}
else {
$msg.="Erreur lors de la suppression de logins responsables mis en réserve.
";
}
}
if(isset($_GET['suppr_comptes_ele_en_reserve_et_collision_resp'])) {
check_token();
$sql="DELETE FROM tempo_utilisateurs WHERE statut='eleve' AND login IN (SELECT u.login FROM utilisateurs u, resp_pers rp WHERE u.statut='responsable' AND u.login=rp.login);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
$msg.="Ménage effectué.
Refaites maintenant une mise en réserve des comptes responsables
";
}
else {
$msg.="Erreur lors de la suppression de logins élèves mis en réserve.
";
}
}
if (isset($_POST['is_posted'])) {
if ($_POST['is_posted']=='1') {
check_token();
if (isset($_POST['gepiYear'])) {
if (!saveSetting("gepiYear", $_POST['gepiYear'])) {
$msg .= "Erreur lors de l'enregistrement de l'année scolaire !";
}
else {
$msg .= "Enregistrement de l'année scolaire effectué.
";
}
}
if (isset($_POST['begin_day']) and isset($_POST['begin_month']) and isset($_POST['begin_year'])) {
$begin_bookings = mktime(0,0,0,$_POST['begin_month'],$_POST['begin_day'],$_POST['begin_year']);
if (!saveSetting("begin_bookings", $begin_bookings)) {
$msg .= "Erreur lors de l'enregistrement de begin_bookings !";
}
else {
$msg .= "Enregistrement de begin_bookings effectué.
";
}
}
if (isset($_POST['end_day']) and isset($_POST['end_month']) and isset($_POST['end_year'])) {
$end_bookings = mktime(0,0,0,$_POST['end_month'],$_POST['end_day'],$_POST['end_year']);
if (!saveSetting("end_bookings", $end_bookings)) {
$msg .= "Erreur lors de l'enregistrement de end_bookings !";
}
else {
$msg .= "Enregistrement de end_bookings effectué.
";
}
}
// 20150810
$maj_dates_per=isset($_POST['maj_dates_per']) ? $_POST['maj_dates_per'] : array();
if(count($maj_dates_per)>0) {
$nb_update_per=0;
// Il faudrait vérifier que les dates sont cohérentes
$ts_prec=0;
for($loop=0;$loop
";
}
else {
$tmp_tab=explode("/", $debut_per);
$jour_debut=$tmp_tab[0];
$mois_debut=$tmp_tab[1];
$annee_debut=$tmp_tab[2];
if(!checkdate($mois_debut,$jour_debut,$annee_debut)) {
$msg.="La date de début de période $debut_per est invalide.
";
}
else {
$ts_debut=gmmktime(0, 0, 0, $mois_debut, $jour_debut, $annee_debut);
if(!$ts_debut) {
$msg.="La date de début de période $debut_per est invalide.
";
}
}
}
if(!preg_match("#[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}#", $fin_per)) {
$msg.="La date de fin de période $fin_per est invalide.
";
}
else {
$tmp_tab=explode("/", $fin_per);
$jour_fin=$tmp_tab[0];
$mois_fin=$tmp_tab[1];
$annee_fin=$tmp_tab[2];
if(!checkdate($mois_fin,$jour_fin,$annee_fin)) {
$msg.="La date de fin de période $fin_per est invalide.
";
}
else {
$ts_fin=gmmktime(23, 59, 0, $mois_fin, $jour_fin, $annee_fin);
if(!$ts_fin) {
$msg.="La date de fin de période $fin_per est invalide.
";
}
}
}
if((isset($ts_debut))&&(isset($ts_fin))) {
// Ca ne convient pas: Les timestamp dans edt_calendrier sont en GMT
//$sql="UPDATE edt_calendrier SET debut_calendrier_ts='$ts_debut', fin_calendrier_ts='$ts_fin', jourdebut_calendrier='".strftime("%Y-%m-%d", $ts_debut)."', heuredebut_calendrier='00:00:00', jourfin_calendrier='".strftime("%Y-%m-%d", $ts_fin)."', heurefin_calendrier='23:59:00' WHERE id_calendrier='".$maj_dates_per[$loop]."';";
//$sql="UPDATE edt_calendrier SET debut_calendrier_ts='$ts_debut', fin_calendrier_ts='$ts_fin', jourdebut_calendrier='".$annee_debut."-".$mois_debut."-".$jour_debut."', heuredebut_calendrier='00:00:00', jourfin_calendrier='".$annee_fin."-".$mois_fin."-".$jour_fin."', heurefin_calendrier='23:59:00' WHERE id_calendrier='".$maj_dates_per[$loop]."';";
$sql="UPDATE edt_calendrier SET debut_calendrier_ts='$ts_debut', fin_calendrier_ts='$ts_fin', jourdebut_calendrier='".gmstrftime("%Y-%m-%d", $ts_debut)."', heuredebut_calendrier='00:00:00', jourfin_calendrier='".gmstrftime("%Y-%m-%d", $ts_fin)."', heurefin_calendrier='23:59:00' WHERE id_calendrier='".$maj_dates_per[$loop]."';";
//echo "$sql
";
$update=mysqli_query($GLOBALS["mysqli"], $sql);
if($update) {
$tmp_tab=explode(";", $lig_cal->classe_concerne_calendrier);
for($loop2=0;$loop2
";
}
}
}
$nb_update_per++;
}
else {
$msg.="Erreur lors de la mise à jour des dates de début et fin de la période ".$lig_cal->nom_calendrier.".
";
}
}
}
}
if($nb_update_per>0) {
$msg.=$nb_update_per." périodes mises à jour.
";
}
}
if((isset($_POST['reserve_comptes_eleves']))&&($_POST['reserve_comptes_eleves']=='y')) {
$sql="DELETE FROM tempo_utilisateurs WHERE statut='eleve';";
//echo "$sql
";
$nettoyage=mysqli_query($GLOBALS["mysqli"], $sql);
$sql="INSERT INTO tempo_utilisateurs SELECT u.login,u.password,u.salt,u.email,e.ele_id,e.elenoet,u.nom,u.prenom,u.statut,u.auth_mode,NOW(),u.statut FROM utilisateurs u, eleves e WHERE u.login=e.login AND u.statut='eleve';";
//echo "$sql
";
$svg_insert=mysqli_query($GLOBALS["mysqli"], $sql);
if($svg_insert) {
$msg.="Mise en réserve des comptes élèves effectuée.
";
}
else {
$msg.="Erreur lors de la mise en réserve des comptes élèves.
";
$sql="SELECT * FROM tempo_utilisateurs WHERE statut='responsable' AND login IN (SELECT login FROM eleves);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
$msg.="Anomalie : Un ou des comptes responsables ont été mis en réserve avec un login correspondant à un compte élève.
Liste des comptes : ";
$cpt=0;
while($lig=mysqli_fetch_object($res)) {
if($cpt>0) {$msg.=", ";}
$msg.=$lig->login;
$tmp_tab=get_info_responsable($lig->login);
if(count($tmp_tab)>0) {$msg.=" (".$tmp_tab['nom']." ".$tmp_tab['prenom'].")";}
$cpt++;
}
$msg.="Ces comptes peuvent correspondre à une mise en réserve de l'année précédente... pour des parents dont les élèves ont quitté l'établissement.
Supprimer de la mise en réserve les comptes correspondants
Vous devrez par la suite refaire une mise en réserve des comptes élèves.
Vous pouvez aussi, plus simplement supprimer les comptes mis en réserve à l'aide des liens plus bas dans la page, et ensuite refaire la mise en réserve pour ne conserver que les comptes de cette année.
";
}
}
}
if((isset($_POST['reserve_comptes_responsables']))&&($_POST['reserve_comptes_responsables']=='y')) {
$sql="DELETE FROM tempo_utilisateurs WHERE statut='responsable';";
//echo "$sql
";
$nettoyage=mysqli_query($GLOBALS["mysqli"], $sql);
$sql="INSERT INTO tempo_utilisateurs SELECT u.login,u.password,u.salt,u.email,rp.pers_id,rp.pers_id,u.nom,u.prenom,u.statut,u.auth_mode,NOW(),u.statut FROM utilisateurs u, resp_pers rp WHERE u.login=rp.login AND u.statut='responsable';";
//echo "$sql
";
$svg_insert=mysqli_query($GLOBALS["mysqli"], $sql);
if($svg_insert) {
$msg.="Mise en réserve des comptes responsables effectuée.
";
// Remplacement de l'identifiant2 par la liste des elenoet associés pour le cas d'une initialisation CSV.
$sql="SELECT identifiant1 FROM tempo_utilisateurs WHERE statut='responsable';";
$res_t_u=mysqli_query($GLOBALS["mysqli"], $sql);
while($lig_t_u=mysqli_fetch_object($res_t_u)) {
$sql="SELECT e.elenoet FROM eleves e, responsables2 r WHERE e.ele_id=r.ele_id AND (r.resp_legal='1' OR r.resp_legal='2') AND r.pers_id='".$lig_t_u->identifiant1."';";
$res_elenoet=mysqli_query($GLOBALS["mysqli"], $sql);
$chaine_elenoet="";
while($lig_elenoet=mysqli_fetch_object($res_elenoet)) {
$chaine_elenoet.="|".$lig_elenoet->elenoet;
}
if($chaine_elenoet!='') {
$sql="UPDATE tempo_utilisateurs SET identifiant2='".$chaine_elenoet."|' WHERE identifiant1='".$lig_t_u->identifiant1."' AND statut='responsable';";
$update_t_u=mysqli_query($GLOBALS["mysqli"], $sql);
}
}
}
else {
$msg.="Erreur lors de la mise en réserve des comptes responsables.
";
$sql="SELECT * FROM tempo_utilisateurs WHERE statut='eleve' AND login IN (SELECT u.login FROM utilisateurs u, resp_pers rp WHERE u.statut='responsable' AND u.login=rp.login);";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
$msg.="Anomalie : Un ou des comptes élèves ont été mis en réserve avec un login correspondant à un compte responsable.
Liste des comptes : ";
$cpt=0;
while($lig=mysqli_fetch_object($res)) {
if($cpt>0) {$msg.=", ";}
$msg.=$lig->login;
$tmp_tab=get_info_eleve($lig->login);
if(count($tmp_tab)>0) {$msg.=" (".$tmp_tab['nom']." ".$tmp_tab['prenom'].")";}
$cpt++;
}
$msg.="Ces comptes peuvent correspondre à une mise en réserve de l'année précédente... pour des élèves qui ont quitté l'établissement.
Supprimer de la mise en réserve les comptes correspondants
Vous devrez par la suite refaire une mise en réserve des comptes responsables.
Vous pouvez aussi, plus simplement supprimer les comptes mis en réserve à l'aide des liens plus bas dans la page, et ensuite refaire la mise en réserve pour ne conserver que les comptes de cette année.
";
}
}
}
$sql="SELECT 1=1 FROM preferences WHERE name LIKE 'accueil_simpl_id_groupe_order_%';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
$sql="DELETE FROM preferences WHERE name LIKE 'accueil_simpl_id_groupe_order_%';";
$del=mysqli_query($GLOBALS["mysqli"], $sql);
if($del) {
$msg.="La suppression des préférences d'affichage ou non des enseignements en page d'accueil simplifiée est effectuée.
";
}
else {
$msg.="Erreur lors de la suppression des préférences d'affichage ou non des enseignements en page d'accueil simplifiée.
";
}
}
}
elseif ($_POST['is_posted']=='2') {
check_token();
if (isset($_POST['clean_log']) and isset($_POST['log_day']) and isset($_POST['log_month']) and isset($_POST['log_year'])) {
$msg.="Nettoyage des logs de connexion antérieurs à ".$_POST['log_day']."/".$_POST['log_month']."/".$_POST['log_year']." : ".clean_table_log($_POST['log_day']."/".$_POST['log_month']."/".$_POST['log_year'])."
";
}
if (isset($_POST['clean_tentative_intrusion']) and isset($_POST['ti_day']) and isset($_POST['ti_month']) and isset($_POST['ti_year'])) {
$msg.="Nettoyage des logs de tentatives d'intrusion antérieurs à ".$_POST['ti_day']."/".$_POST['ti_month']."/".$_POST['ti_year']." : ".clean_table_tentative_intrusion($_POST['ti_day']."/".$_POST['ti_month']."/".$_POST['ti_year'])."
";
}
}
}
if (isset($_GET['reinit_dates_verrouillage_periode'])) {
check_token();
$sql="update periodes set date_verrouillage='0000-00-00 00:00:00';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
$msg.="Réinitialisation des dates de verrouillage de périodes effectuée.
";
}
else {
$msg.="Erreur lors de la réinitialisation des dates de verrouillage de périodes.
";
}
}
if (isset($_GET['suppr_reserve_eleve'])) {
check_token();
$sql="DELETE FROM tempo_utilisateurs WHERE statut='eleve';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
$msg.="Suppression de la réserve sur les comptes élèves effectuée.
";
}
else {
$msg.="Erreur lors de la suppression de la réserve sur les comptes élèves.
";
}
}
if (isset($_GET['suppr_reserve_resp'])) {
check_token();
$sql="DELETE FROM tempo_utilisateurs WHERE statut='responsable';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if($res) {
$msg.="Suppression de la réserve sur les comptes responsables effectuée.
";
}
else {
$msg.="Erreur lors de la suppression de la réserve sur les comptes responsables.
";
}
}
// Load settings
if (!loadSettings()) {
die("Erreur chargement settings");
}
if (isset($_POST['is_posted']) and ($msg=='')) $msg = "Les modifications ont été enregistrées !";
if(isset($_SESSION['chgt_annee'])) {
unset($_SESSION['chgt_annee']);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$style_specifique[] = "lib/DHTMLcalendar/calendarstyle";
$javascript_specifique[] = "lib/DHTMLcalendar/calendar";
$javascript_specifique[] = "lib/DHTMLcalendar/lang/calendar-fr";
$javascript_specifique[] = "lib/DHTMLcalendar/calendar-setup";
$themessage = 'Des informations ont été modifiées. Voulez-vous vraiment quitter sans enregistrer ?';
//**************** EN-TETE *****************
// End standart header
$titre_page = "Changement d'année";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
//debug_var();
$debug_ele="n";
$debug_resp="n";
echo "
Au changement d'année, avant d'initialiser la nouvelle année scolaire, il convient d'effectuer quelques opérations.
Elles sont en principe détaillées (peut-être même plus à jour si des ajouts y ont été apportés après la sortie de votre version de GEPI) sur le Wiki.
Optionnel également : Vous pouvez vider les absences de l'année passée, l'emploi du temps, les incidents/sanctions du module discipline en consultant la page de Nettoyage de la base.
\n"; echo "NOTES :
\n"; echo "La sauvegarde sur périphérique externe permet de remettre en place un GEPI si jamais votre GEPI en ligne subit des dégats (crash du disque dur hébergeant votre GEPI, incendie du local serveur,...).
Vous n'aurez normalement jamais besoin de ces sauvegardes, mais mieux vaut prendre des précautions.
Lors de l'initialisation de l'année, la date à laquelle une période a été close pour telle classe sera réinitialisée.
Ce n'était pas le cas pour une initialisation faite avant le 17/09/2012.
Pour forcer cette réinitialisation, cliquer ici.
Cette date de verrouillage présente un intérêt pour l'accès des responsables et élèves aux appréciations des bulletins dans le cas où vous avez choisi un accès automatique N jours après la clôture de la période.
Ces dates de verrouillage, indiquant à quelle date la période de notes a été close, n'ont rien à voir avec les dates déclarées pour les fins de périodes d'absences dans la page de Verrouillage.
Les dates de fin de période affichées dans la page de Verrouillage concernent la liste des élèves qui seront présentés dans vos groupes/classes pour la saisie des absences (tel élève arrivé au 2è trimestre ou ayant changé de classe,... doit ou ne doit pas apparaître sur telle période dans tel groupe/classe).
Rappel des opérations à effectuer après l'initialisation
Si vous avez plusieurs types de classes (classes à trimestres et classes à semestre), ou si vous avez de nouvelles classes par rapport à l'année précédente (un nom de classe qui n'existait pas l'année précédente), il faudra contrôler les dates de périodes pour vérifier que rien n'a été oublié.
Dans tous les cas, les dates de vacances devront être mises à jour (il est possible de les importer d'après le fichier iCal officiel Education Nationale).
Changer les dates dans le calendrier EDT et forcer les dates pour les absences (Lien Mettre à jour les dates de fin de périodes pour le module Absences, d'après les dates de périodes de cours ci-dessous.).
Les dates de périodes de notes et les dates de vacances doivent être mises à jour sans quoi les compositions des groupes risquent d'être erronées lors de la saisie des absences et les totaux d'absences également.
Créer les comptes élèves/responsables manquants.
Activer les comptes élèves/responsables.
Effectuer l'association SSO pour les nouveaux comptes si vous êtes dans un environnement ENT.
Si vous utilisez un compte générique pour les professeurs d'EPS pour la saisie des absences
(il arrive que tous les professeurs d'EPS fassent les saisies sur la même machine; se déconnecter/reconnecter pour ces saisies est très malcommode),
ré-activer le compte Equipe EPS,
créer un enseignement (le nommer \"EPS_abs\" par exemple) par classe invisible sur B, CN, CDT via Paramétrage par lots.
Si vous utilisez le module Flux RSS pour les cahiers de textes, Créer les flux RSS manquants.