diff --git a/classes/classes_ajout.php b/classes/classes_ajout.php index 76365c5a62..8c806769d2 100755 --- a/classes/classes_ajout.php +++ b/classes/classes_ajout.php @@ -1,7 +1,7 @@ \n"; die(); } @@ -72,7 +71,7 @@ check_token(); //$gepiProfSuivi=getSettingValue("gepi_prof_suivi"); - $gepiProfSuivi=ucfirst(retourne_denomination_pp($id_classe)); + $gepiProfSuivi = ucfirst(retourne_denomination_pp($id_classe)); $call_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT login, id_eleve FROM eleves ORDER BY nom, prenom;"); $nombreligne = mysqli_num_rows($call_eleves); @@ -87,8 +86,8 @@ $reg_data = 'yes'; - $tab_ele_sans_cpe_defini=array(); - $tab_ele_sans_pp_defini=array(); + $tab_ele_sans_cpe_defini = array(); + $tab_ele_sans_pp_defini = array(); $k = '0'; while ($k < $nombreligne) { @@ -97,77 +96,79 @@ $id_eleve = old_mysql_result($call_eleves, $k, 'id_eleve'); - if(isset($_POST['ajout_eleve_'.$id_eleve])) { - $i=1; + if (isset($_POST['ajout_eleve_' . $id_eleve])) { + $i = 1; while ($i < $nb_periode) { - $tab_per_ajout_eleve=$_POST['ajout_eleve_'.$id_eleve]; - if(isset($tab_per_ajout_eleve[$i])) { + $tab_per_ajout_eleve = $_POST['ajout_eleve_' . $id_eleve]; + if (isset($tab_per_ajout_eleve[$i])) { // Contrôler que l'élève n'est pas déjà dans une autre classe - $sql="SELECT id_classe FROM j_eleves_classes WHERE + $sql = "SELECT id_classe FROM j_eleves_classes WHERE (login = '$login_eleve' and id_classe!='$id_classe' and periode = '$i')"; - $test_clas_per=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test_clas_per)>0) { - $lig_clas_per=mysqli_fetch_object($test_clas_per); - $msg_complement.=get_nom_prenom_eleve($login_eleve)." est déjà dans une autre classe : ".get_class_from_id($lig_clas_per->id_classe)." en période $i
\n"; + $test_clas_per = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test_clas_per) > 0) { + $lig_clas_per = mysqli_fetch_object($test_clas_per); + $msg_complement .= get_nom_prenom_eleve($login_eleve) . " est déjà dans une autre classe : " . get_class_from_id($lig_clas_per->id_classe) . " en période $i
\n"; $reg_ok = 'no'; - } - else { - $sql="SELECT login FROM j_eleves_classes WHERE + } else { + $sql = "SELECT login FROM j_eleves_classes WHERE (login = '$login_eleve' and id_classe = '$id_classe' and periode = '$i')"; - $res_clas_per=mysqli_query($GLOBALS["mysqli"], $sql); - if (mysqli_num_rows($res_clas_per)==0) { - $sql="INSERT INTO j_eleves_classes VALUES('$login_eleve', '$id_classe', $i, '0');"; + $res_clas_per = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($res_clas_per) == 0) { + $sql = "INSERT INTO j_eleves_classes VALUES('$login_eleve', '$id_classe', $i, '0');"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)) {$reg_ok = 'no';} - else { + if (!($reg_data)) { + $reg_ok = 'no'; + } else { // Ménage: - $sql="SELECT id FROM infos_actions WHERE titre LIKE 'Ajout dans une classe % effectuer pour %($login_eleve)';"; - $res_actions=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($res_actions)>0) { - while($lig_action=mysqli_fetch_object($res_actions)) { - $menage=del_info_action($lig_action->id); - if(!$menage) {$msg.="Erreur lors de la suppression de l'action en attente en page d'accueil à propos de $login_eleve
";} + $sql = "SELECT id FROM infos_actions WHERE titre LIKE 'Ajout dans une classe % effectuer pour %($login_eleve)';"; + $res_actions = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($res_actions) > 0) { + while ($lig_action = mysqli_fetch_object($res_actions)) { + $menage = del_info_action($lig_action->id); + if (!$menage) { + $msg .= "Erreur lors de la suppression de l'action en attente en page d'accueil à propos de $login_eleve
"; + } } } } } - + // UPDATE: Ajouter l'élève à tous les groupes pour la période: - $sql="SELECT id_groupe FROM j_groupes_classes WHERE id_classe='$id_classe'"; - $res_liste_grp_classe=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($res_liste_grp_classe)>0){ - while($lig_tmp=mysqli_fetch_object($res_liste_grp_classe)){ - $sql="SELECT 1=1 FROM j_eleves_groupes WHERE login='$login_eleve' AND id_groupe='$lig_tmp->id_groupe' AND periode='$i'"; - $test=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test)==0){ - $sql="INSERT INTO j_eleves_groupes SET login='$login_eleve',id_groupe='$lig_tmp->id_groupe',periode='$i'"; - $insert_grp=mysqli_query($GLOBALS["mysqli"], $sql); - if (!$insert_grp) {$reg_ok = 'no';} - else { - $sql="SELECT DISTINCT code_modalite_elect FROM j_groupes_eleves_modalites WHERE id_groupe='".$lig_tmp->id_groupe."';"; - $test_grp_mod=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test_grp_mod)==1) { - $lig_grp_mod=mysqli_fetch_object($test_grp_mod); - - $sql="SELECT 1=1 FROM j_groupes_eleves_modalites WHERE login='".$login_eleve."' AND id_groupe='".$lig_tmp->id_groupe."';"; - $test_deja=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test_deja)>0) { + $sql = "SELECT id_groupe FROM j_groupes_classes WHERE id_classe='$id_classe'"; + $res_liste_grp_classe = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($res_liste_grp_classe) > 0) { + while ($lig_tmp = mysqli_fetch_object($res_liste_grp_classe)) { + $sql = "SELECT 1=1 FROM j_eleves_groupes WHERE login='$login_eleve' AND id_groupe='$lig_tmp->id_groupe' AND periode='$i'"; + $test = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test) == 0) { + $sql = "INSERT INTO j_eleves_groupes SET login='$login_eleve',id_groupe='$lig_tmp->id_groupe',periode='$i'"; + $insert_grp = mysqli_query($GLOBALS["mysqli"], $sql); + if (!$insert_grp) { + $reg_ok = 'no'; + } else { + $sql = "SELECT DISTINCT code_modalite_elect FROM j_groupes_eleves_modalites WHERE id_groupe='" . $lig_tmp->id_groupe . "';"; + $test_grp_mod = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test_grp_mod) == 1) { + $lig_grp_mod = mysqli_fetch_object($test_grp_mod); + + $sql = "SELECT 1=1 FROM j_groupes_eleves_modalites WHERE login='" . $login_eleve . "' AND id_groupe='" . $lig_tmp->id_groupe . "';"; + $test_deja = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test_deja) > 0) { // Ca ne devrait pas arriver - $sql="UPDATE j_groupes_eleves_modalites SET code_modalite_elect='".$lig_grp_mod->code_modalite_elect."' WHERE login='".$login_eleve."' AND id_groupe='".$lig_tmp->id_groupe."';"; - $update=mysqli_query($GLOBALS["mysqli"], $sql); - if(!$update) { + $sql = "UPDATE j_groupes_eleves_modalites SET code_modalite_elect='" . $lig_grp_mod->code_modalite_elect . "' WHERE login='" . $login_eleve . "' AND id_groupe='" . $lig_tmp->id_groupe . "';"; + $update = mysqli_query($GLOBALS["mysqli"], $sql); + if (!$update) { $reg_ok = 'no'; } - } - else { - $sql="INSERT INTO j_groupes_eleves_modalites SET code_modalite_elect='".$lig_grp_mod->code_modalite_elect."', login='".$login_eleve."', id_groupe='".$lig_tmp->id_groupe."';"; - $insert=mysqli_query($GLOBALS["mysqli"], $sql); - if(!$insert) { + } else { + $sql = "INSERT INTO j_groupes_eleves_modalites SET code_modalite_elect='" . $lig_grp_mod->code_modalite_elect . "', login='" . $login_eleve . "', id_groupe='" . $lig_tmp->id_groupe . "';"; + $insert = mysqli_query($GLOBALS["mysqli"], $sql); + if (!$insert) { $reg_ok = 'no'; } } @@ -176,61 +177,58 @@ } } } - - $sql="SELECT DISTINCT cpe_login FROM j_eleves_cpe jecpe, j_eleves_classes jec + + $sql = "SELECT DISTINCT cpe_login FROM j_eleves_cpe jecpe, j_eleves_classes jec WHERE ( jec.id_classe='$id_classe' AND jecpe.e_login=jec.login AND jec.periode='$i' )"; //echo "$sql
"; - $res_cpe=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($res_cpe)==1) { - $sql="DELETE FROM j_eleves_cpe WHERE e_login='$login_eleve';"; + $res_cpe = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($res_cpe) == 1) { + $sql = "DELETE FROM j_eleves_cpe WHERE e_login='$login_eleve';"; //echo "$sql
"; - $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); - - $lig_tmp=mysqli_fetch_object($res_cpe); - $sql="INSERT INTO j_eleves_cpe SET cpe_login='$lig_tmp->cpe_login', e_login='$login_eleve';"; + $nettoyage = mysqli_query($GLOBALS["mysqli"], $sql); + + $lig_tmp = mysqli_fetch_object($res_cpe); + $sql = "INSERT INTO j_eleves_cpe SET cpe_login='$lig_tmp->cpe_login', e_login='$login_eleve';"; //echo "$sql
"; - $insert_cpe=mysqli_query($GLOBALS["mysqli"], $sql); - } - else { - if(!in_array($login_eleve, $tab_ele_sans_cpe_defini)) { - $msg_complement.="
L'élève $login_eleve n'a pas été associé à un CPE."; - $tab_ele_sans_cpe_defini[]=$login_eleve; + $insert_cpe = mysqli_query($GLOBALS["mysqli"], $sql); + } else { + if (!in_array($login_eleve, $tab_ele_sans_cpe_defini)) { + $msg_complement .= "
L'élève $login_eleve n'a pas été associé à un CPE."; + $tab_ele_sans_cpe_defini[] = $login_eleve; } } - - $sql="SELECT DISTINCT professeur FROM j_eleves_professeurs jep + + $sql = "SELECT DISTINCT professeur FROM j_eleves_professeurs jep WHERE ( jep.id_classe='$id_classe' )"; //echo "$sql
"; - $res_pp=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($res_pp)==1) { - $sql="DELETE FROM j_eleves_professeurs WHERE login='$login_eleve';"; + $res_pp = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($res_pp) == 1) { + $sql = "DELETE FROM j_eleves_professeurs WHERE login='$login_eleve';"; //echo "$sql
"; - $nettoyage=mysqli_query($GLOBALS["mysqli"], $sql); - - $lig_tmp=mysqli_fetch_object($res_pp); - $sql="INSERT INTO j_eleves_professeurs SET professeur='$lig_tmp->professeur', login='$login_eleve', id_classe='$id_classe';"; + $nettoyage = mysqli_query($GLOBALS["mysqli"], $sql); + + $lig_tmp = mysqli_fetch_object($res_pp); + $sql = "INSERT INTO j_eleves_professeurs SET professeur='$lig_tmp->professeur', login='$login_eleve', id_classe='$id_classe';"; //echo "$sql
"; - $insert_pp=mysqli_query($GLOBALS["mysqli"], $sql); - } - else { - if(!in_array($login_eleve, $tab_ele_sans_pp_defini)) { - $msg_complement.="
L'élève $login_eleve n'a pas été associé à un ".$gepiProfSuivi."."; - $tab_ele_sans_pp_defini[]=$login_eleve; + $msg_complement .= "' target='_blank'>associé à un " . $gepiProfSuivi . "."; + $tab_ele_sans_pp_defini[] = $login_eleve; } } } @@ -238,32 +236,32 @@ $i++; } } - - if(isset($_POST['regime_'.$id_eleve])) { - $sql="SELECT * FROM j_eleves_regime WHERE login='$login_eleve';"; + + if (isset($_POST['regime_' . $id_eleve])) { + $sql = "SELECT * FROM j_eleves_regime WHERE login='$login_eleve';"; $call_regime = mysqli_query($GLOBALS["mysqli"], $sql); $nb_test_regime = mysqli_num_rows($call_regime); if ($nb_test_regime == 0) { - $sql="INSERT INTO j_eleves_regime SET login='$login_eleve', regime='".$_POST['regime_'.$id_eleve]."', doublant='-';"; + $sql = "INSERT INTO j_eleves_regime SET login='$login_eleve', regime='" . $_POST['regime_' . $id_eleve] . "', doublant='-';"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); if (!($reg_data)) $reg_ok = 'no'; } else { - $sql="UPDATE j_eleves_regime SET regime='".$_POST['regime_'.$id_eleve]."' WHERE login='$login_eleve';"; + $sql = "UPDATE j_eleves_regime SET regime='" . $_POST['regime_' . $id_eleve] . "' WHERE login='$login_eleve';"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); if (!($reg_data)) $reg_ok = 'no'; } } - - if(isset($_POST['doublant_eleve_'.$id_eleve])) { - $sql="SELECT * FROM j_eleves_regime WHERE login='$login_eleve';"; + + if (isset($_POST['doublant_eleve_' . $id_eleve])) { + $sql = "SELECT * FROM j_eleves_regime WHERE login='$login_eleve';"; $call_regime = mysqli_query($GLOBALS["mysqli"], $sql); $nb_test_regime = mysqli_num_rows($call_regime); if ($nb_test_regime == 0) { - $sql="INSERT INTO j_eleves_regime SET login='$login_eleve', doublant='".$_POST['doublant_eleve_'.$id_eleve]."', regime='d/p';"; + $sql = "INSERT INTO j_eleves_regime SET login='$login_eleve', doublant='" . $_POST['doublant_eleve_' . $id_eleve] . "', regime='d/p';"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); if (!($reg_data)) $reg_ok = 'no'; } else { - $sql="UPDATE j_eleves_regime SET doublant='".$_POST['doublant_eleve_'.$id_eleve]."' WHERE login='$login_eleve';"; + $sql = "UPDATE j_eleves_regime SET doublant='" . $_POST['doublant_eleve_' . $id_eleve] . "' WHERE login='$login_eleve';"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); if (!($reg_data)) $reg_ok = 'no'; } @@ -277,42 +275,40 @@ } else { $msg = "Il y a eu un problème lors de l'enregistrement !"; } - $msg.=$msg_complement; + $msg .= $msg_complement; } // AJOUT: boireaus -$chaine_options_classes=""; -$sql="SELECT id, classe FROM classes ORDER BY classe"; -$res_class_tmp=mysqli_query($GLOBALS["mysqli"], $sql); -if(mysqli_num_rows($res_class_tmp)>0){ - $id_class_prec=0; - $id_class_suiv=0; - $temoin_tmp=0; - - $cpt_classe=0; - $num_classe=-1; - - while($lig_class_tmp=mysqli_fetch_object($res_class_tmp)){ - if($lig_class_tmp->id==$id_classe){ +$chaine_options_classes = ""; +$sql = "SELECT id, classe FROM classes ORDER BY classe"; +$res_class_tmp = mysqli_query($GLOBALS["mysqli"], $sql); +if (mysqli_num_rows($res_class_tmp) > 0) { + $id_class_prec = 0; + $id_class_suiv = 0; + $temoin_tmp = 0; + + $cpt_classe = 0; + $num_classe = -1; + + while ($lig_class_tmp = mysqli_fetch_object($res_class_tmp)) { + if ($lig_class_tmp->id == $id_classe) { // Index de la classe dans les \n"; - $temoin_tmp=1; - if($lig_class_tmp=mysqli_fetch_object($res_class_tmp)){ - $chaine_options_classes.="\n"; - $id_class_suiv=$lig_class_tmp->id; - } - else{ - $id_class_suiv=0; + $chaine_options_classes .= "\n"; + $temoin_tmp = 1; + if ($lig_class_tmp = mysqli_fetch_object($res_class_tmp)) { + $chaine_options_classes .= "\n"; + $id_class_suiv = $lig_class_tmp->id; + } else { + $id_class_suiv = 0; } - } - else { - $chaine_options_classes.="\n"; + } else { + $chaine_options_classes .= "\n"; } - if($temoin_tmp==0){ - $id_class_prec=$lig_class_tmp->id; + if ($temoin_tmp == 0) { + $id_class_prec = $lig_class_tmp->id; } $cpt_classe++; @@ -321,7 +317,7 @@ // ================================= -$themessage = 'Des informations ont été modifiées. Voulez-vous vraiment quitter sans enregistrer ?'; +$themessage = 'Des informations ont été modifiées. Voulez-vous vraiment quitter sans enregistrer ?'; //**************** EN-TETE ************************************** $titre_page = "Gestion des classes | Ajout d'élèves à une classe"; require_once("../lib/header.inc.php"); @@ -331,7 +327,7 @@ echo "\n"; - echo " | \n"; -} -if($id_class_suiv!=0){echo " | Classe suivante";} -?> -

+ echo " | \n"; + } + if ($id_class_suiv != 0) { + echo " | Classe suivante"; + } + ?> +

-

Ajout d'élèves à la classe de
-Il n'est pas possible d'ajouter des élèves dans une classe virtuelle (sans aucune période).
Commencez par ajouter des périodes à la classe.

\n"; - require("../lib/footer.inc.php"); - die(); - } -?> -Liste des élèves non affectés à une classe :

+

Ajout d'élèves à la classe de
+ Il n'est pas possible d'ajouter des élèves dans une classe virtuelle (sans aucune période).
Commencez par ajouter des périodes à la classe.

\n"; + require("../lib/footer.inc.php"); + die(); + } + ?> + Liste des élèves non affectés à une classe :

-Il n'y a pas d'élèves actuellement dans la base.

\n"; -} else { + $call_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM eleves ORDER BY nom, prenom"); + $nombreligne = mysqli_num_rows($call_eleves); + if ($nombreligne == '0') { + echo "

Il n'y a pas d'élèves actuellement dans la base.

\n"; + } else { - echo "\n"; + echo "\n"; - $eleves_non_affectes = 'no'; - echo " + $eleves_non_affectes = 'no'; + echo "
"; - if($classes_ajout_sans_regime!="y") { - echo " + if ($classes_ajout_sans_regime != "y") { + echo " \n"; - } - echo " - \n"; - $i="1"; - while ($i < $nb_periode) { + } echo " + \n"; + $i = "1"; + while ($i < $nb_periode) { + echo " \n"; - $i++; - } - echo " + $i++; + } + echo " "; - $i="1"; - while ($i < $nb_periode) { - echo " + $i = "1"; + while ($i < $nb_periode) { + echo " "; - $i++; - } - echo " - "; - $k = '0'; - //========================= - // AJOUT: boireaus 20071010 - // Compteur des élèves effectivement non affectés: - - $acces_modify_eleve=acces("/eleves/modify_eleve.php", $_SESSION['statut']); - - //$ki=0; - //========================= - $chaine_id_eleve=array(); - $alt=1; - while($k < $nombreligne) { - $id_eleve = old_mysql_result($call_eleves, $k, 'id_eleve'); - $login_eleve = old_mysql_result($call_eleves, $k, 'login'); - $nom_eleve = old_mysql_result($call_eleves, $k, 'nom'); - $prenom_eleve = old_mysql_result($call_eleves, $k, 'prenom'); - $call_regime = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_regime WHERE login='$login_eleve'"); - $doublant = @old_mysql_result($call_regime, 0, 'doublant'); - if ($doublant == '') {$doublant = '-';} - $regime = @old_mysql_result($call_regime, 0, 'regime'); - if ($regime == '') {$regime = 'd/p';} - $i="1"; - while ($i < $nb_periode) { - $ajout_login[$i] = "ajout_".$login_eleve."_".$i; + echo ""; $i++; } - - $inserer_ligne = 'no'; - $call_data = mysqli_query($GLOBALS["mysqli"], "SELECT id_classe FROM j_eleves_classes WHERE login = '$login_eleve'"); - $test = mysqli_num_rows($call_data); - if ($test == 0) { - $inserer_ligne = 'yes'; - $eleves_non_affectes = 'yes'; - $i="1"; + echo " + "; + $k = '0'; + //========================= + // AJOUT: boireaus 20071010 + // Compteur des élèves effectivement non affectés: + + $acces_modify_eleve = acces("/eleves/modify_eleve.php", $_SESSION['statut']); + + //$ki=0; + //========================= + $chaine_id_eleve = array(); + $alt = 1; + while ($k < $nombreligne) { + $id_eleve = old_mysql_result($call_eleves, $k, 'id_eleve'); + $login_eleve = old_mysql_result($call_eleves, $k, 'login'); + $nom_eleve = old_mysql_result($call_eleves, $k, 'nom'); + $prenom_eleve = old_mysql_result($call_eleves, $k, 'prenom'); + $call_regime = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_regime WHERE login='$login_eleve'"); + $doublant = @old_mysql_result($call_regime, 0, 'doublant'); + if ($doublant == '') { + $doublant = '-'; + } + $regime = @old_mysql_result($call_regime, 0, 'regime'); + if ($regime == '') { + $regime = 'd/p'; + } + $i = "1"; while ($i < $nb_periode) { - $nom_classe[$i] = 'vide'; + $ajout_login[$i] = "ajout_" . $login_eleve . "_" . $i; $i++; } - } else { - $id_classe_eleve = old_mysql_result($call_data, 0, "id_classe"); - $query_periode_max = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM periodes WHERE id_classe = '$id_classe_eleve'"); - $periode_max = mysqli_num_rows($query_periode_max) + 1 ; - // si l'élève est déjà dans une classe dont le nombre de périodes est différent du nombre de périodes de la classe selctionnée, on ne fait rien. Dans la cas contraire : - if ($periode_max == $nb_periode) { - $i = '1'; + + $inserer_ligne = 'no'; + $call_data = mysqli_query($GLOBALS["mysqli"], "SELECT id_classe FROM j_eleves_classes WHERE login = '$login_eleve'"); + $test = mysqli_num_rows($call_data); + if ($test == 0) { + $inserer_ligne = 'yes'; + $eleves_non_affectes = 'yes'; + $i = "1"; while ($i < $nb_periode) { - $call_data2 = mysqli_query($GLOBALS["mysqli"], "SELECT id_classe FROM j_eleves_classes WHERE (login = '$login_eleve' and periode = '$i')"); - $test2 = mysqli_num_rows($call_data2); - if ($test2 == 0) { - // l'élève n'est affecté à aucune classe pour cette période - $inserer_ligne = 'yes'; - $eleves_non_affectes = 'yes'; - $nom_classe[$i] = 'vide'; - } else { - $idd_classe = old_mysql_result($call_data2, 0, "id_classe"); - $call_classe = mysqli_query($GLOBALS["mysqli"], "SELECT classe FROM classes WHERE (id = '$idd_classe')"); - $nom_classe[$i] = old_mysql_result($call_classe, 0, "classe"); - } + $nom_classe[$i] = 'vide'; $i++; } + } else { + $id_classe_eleve = old_mysql_result($call_data, 0, "id_classe"); + $query_periode_max = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM periodes WHERE id_classe = '$id_classe_eleve'"); + $periode_max = mysqli_num_rows($query_periode_max) + 1; + // si l'élève est déjà dans une classe dont le nombre de périodes est différent du nombre de périodes de la classe selctionnée, on ne fait rien. Dans la cas contraire : + if ($periode_max == $nb_periode) { + $i = '1'; + while ($i < $nb_periode) { + $call_data2 = mysqli_query($GLOBALS["mysqli"], "SELECT id_classe FROM j_eleves_classes WHERE (login = '$login_eleve' and periode = '$i')"); + $test2 = mysqli_num_rows($call_data2); + if ($test2 == 0) { + // l'élève n'est affecté à aucune classe pour cette période + $inserer_ligne = 'yes'; + $eleves_non_affectes = 'yes'; + $nom_classe[$i] = 'vide'; + } else { + $idd_classe = old_mysql_result($call_data2, 0, "id_classe"); + $call_classe = mysqli_query($GLOBALS["mysqli"], "SELECT classe FROM classes WHERE (id = '$idd_classe')"); + $nom_classe[$i] = old_mysql_result($call_classe, 0, "classe"); + } + $i++; + } + } } - } - if ($inserer_ligne == 'yes') { - $alt=$alt*(-1); - echo "\n"; - } - else { - echo "

".$current_nom_prenom."

\n"; - } + if ($inserer_ligne == 'yes') { + $alt = $alt * (-1); + echo "\n"; + } else { + echo "

" . $current_nom_prenom . "

\n"; + } - if($classes_ajout_sans_regime!="y") { - echo "\n"; - } - //echo "\n"; + } + //echo "\n"; + echo "

\n"; - $i="1"; - while ($i < $nb_periode) { - echo "\n"; + $i++; } - echo "

\n"; - $i++; - } - $elementlist = null; - for ($i=1;$i<=sizeof($ajout_login);$i++) { - //echo $ajout_login[$i]."
"; - $elementlist .= "'".$ajout_login[$i]."',"; - } - $elementlist = mb_substr($elementlist, 0, -1); + $elementlist = null; + for ($i = 1; $i <= sizeof($ajout_login); $i++) { + //echo $ajout_login[$i]."
"; + $elementlist .= "'" . $ajout_login[$i] . "',"; + } + $elementlist = mb_substr($elementlist, 0, -1); - echo "\n"; - echo "\n"; + echo "\n"; + echo "\n"; - //$ki++; + //$ki++; + } + $k++; } - $k++; - } - echo "

Nom Prénom

Régime

Redoublant

Redoublant

Ajouter per. $i
- Tout cocher / Tout décocher + Tout cocher / Tout décocher

cocher / décocher
toutes périodes

"; - if(isset($tab_infos_classe[$i]['date_fin'])) { - if(acces("/edt_organisation/edt_calendrier.php", $_SESSION['statut'])) { - if(($_SESSION['statut']=='administrateur')&&(getSettingAOui('autorise_edt_admin'))) { - echo "".formate_date($tab_infos_classe[$i]['date_fin']).""; - } - elseif(acces("/bulletin/verrouillage.php", $_SESSION['statut'])) { + if (isset($tab_infos_classe[$i]['date_fin'])) { + if (acces("/edt_organisation/edt_calendrier.php", $_SESSION['statut'])) { + if (($_SESSION['statut'] == 'administrateur') && (getSettingAOui('autorise_edt_admin'))) { + echo "" . formate_date($tab_infos_classe[$i]['date_fin']) . ""; + } elseif (acces("/bulletin/verrouillage.php", $_SESSION['statut'])) { + // Actuellement, les comptes scolarité n'ont pas accès àa classes_ajout.php + echo "" . formate_date($tab_infos_classe[$i]['date_fin']) . ""; + } else { + echo "" . formate_date($tab_infos_classe[$i]['date_fin']) . ""; + } + } elseif (acces("/bulletin/verrouillage.php", $_SESSION['statut'])) { // Actuellement, les comptes scolarité n'ont pas accès àa classes_ajout.php - echo "".formate_date($tab_infos_classe[$i]['date_fin']).""; - } - else { - echo "".formate_date($tab_infos_classe[$i]['date_fin']).""; + echo "" . formate_date($tab_infos_classe[$i]['date_fin']) . ""; + } else { + echo formate_date($tab_infos_classe[$i]['date_fin']); } } - elseif(acces("/bulletin/verrouillage.php", $_SESSION['statut'])) { - // Actuellement, les comptes scolarité n'ont pas accès àa classes_ajout.php - echo "".formate_date($tab_infos_classe[$i]['date_fin']).""; - } - else { - echo formate_date($tab_infos_classe[$i]['date_fin']); - } - } - echo "
\n"; - - $current_nom_prenom=casse_mot($nom_eleve, "maj")." ".casse_mot($prenom_eleve,'majf2'); - //echo "\n"; - if($acces_modify_eleve) { - echo "

".$current_nom_prenom."

\n"; + + $current_nom_prenom = casse_mot($nom_eleve, "maj") . " " . casse_mot($prenom_eleve, 'majf2'); + //echo "\n"; + if ($acces_modify_eleve) { + echo "

" . $current_nom_prenom . "

Ext.|Int.|D/P|I-ext.
\n"; - echo "   \n"; - echo "   \n"; - echo "   \n"; - echo "

"; + if ($classes_ajout_sans_regime != "y") { + echo "

Ext.|Int.|D/P|I-ext.
\n"; + echo "   \n"; + echo "   \n"; + echo "   \n"; + echo "

"; - echo "

"; - if ($nom_classe[$i] == 'vide') { - //echo ""; - echo ""; - $chaine_id_eleve[$i][]="case_".$id_eleve."_".$i; - } else { - echo "$nom_classe[$i]"; + $i = "1"; + while ($i < $nb_periode) { + echo "

"; + if ($nom_classe[$i] == 'vide') { + //echo ""; + echo ""; + $chaine_id_eleve[$i][] = "case_" . $id_eleve . "_" . $i; + } else { + echo "$nom_classe[$i]"; + } + echo "

Tout cocher / Tout décocher
Tout cocher / Tout décocher
\n"; + echo "\n"; - if ($eleves_non_affectes == 'no') { - echo "

Il n'y a aucun élève de disponible à ajouter !"; - } else { - echo "

+ if ($eleves_non_affectes == 'no') { + echo "

Il n'y a aucun élève de disponible à ajouter !"; + } else { + echo "

\n"; + } } -} echo " "; -?> - - + ?> + +
-


- +


+ diff --git a/classes/classes_const.php b/classes/classes_const.php index a68ff0ff93..042fc5adf1 100755 --- a/classes/classes_const.php +++ b/classes/classes_const.php @@ -1,7 +1,7 @@ Vous pouvez demander aux professeurs de vider leurs notes et appréciations pour le ou les élèves en question.
Sinon, un compte de statut 'secours' permet de corriger/vider des moyennes, appréciations et/ou avis du conseil de classe en se rendant dans la rubrique Saisie/Bulletin : saisie des moyennes et des appréciations par matière/Choix d'un élève."; +$explication_motif_bloquant_suppression_eleve_de_la_classe = "La présence de moyennes, appréciations ou avis du conseil de classe est bloquante pour la suppression d'un élève d'une classe.
Vous pouvez demander aux professeurs de vider leurs notes et appréciations pour le ou les élèves en question.
Sinon, un compte de statut 'secours' permet de corriger/vider des moyennes, appréciations et/ou avis du conseil de classe en se rendant dans la rubrique Saisie/Bulletin : saisie des moyennes et des appréciations par matière/Choix d'un élève."; if (isset($is_posted)) { check_token(); @@ -62,11 +62,11 @@ //========================= // AJOUT: boireaus 20071010 - $log_eleve=isset($_POST['log_eleve']) ? $_POST['log_eleve'] : array(); - $regime_eleve=isset($_POST['regime_eleve']) ? $_POST['regime_eleve'] : NULL; - $doublant_eleve=isset($_POST['doublant_eleve']) ? $_POST['doublant_eleve'] : NULL; - $prof_principal=isset($_POST['prof_principal']) ? $_POST['prof_principal'] : NULL; - $cpe_resp=isset($_POST['cpe_resp']) ? $_POST['cpe_resp'] : NULL; + $log_eleve = isset($_POST['log_eleve']) ? $_POST['log_eleve'] : array(); + $regime_eleve = isset($_POST['regime_eleve']) ? $_POST['regime_eleve'] : NULL; + $doublant_eleve = isset($_POST['doublant_eleve']) ? $_POST['doublant_eleve'] : NULL; + $prof_principal = isset($_POST['prof_principal']) ? $_POST['prof_principal'] : NULL; + $cpe_resp = isset($_POST['cpe_resp']) ? $_POST['cpe_resp'] : NULL; //========================= $k = 0; @@ -77,29 +77,37 @@ //========================= // AJOUT: boireaus 20071003 // Récupération du numéro de l'élève dans les saisies: - $num_eleve=-1; - for($i=0;$i\n"; //========================= // MODIF: boireaus 20071010 //$regime_login = 'regime_'.$login_eleve; //$reg_regime = isset($_POST[$regime_login])?$_POST[$regime_login]:NULL; - $reg_regime=""; - if(isset($regime_eleve[$num_eleve])){$reg_regime=$regime_eleve[$num_eleve];} + $reg_regime = ""; + if (isset($regime_eleve[$num_eleve])) { + $reg_regime = $regime_eleve[$num_eleve]; + } //$doublant_login = "doublant_".$login_eleve; //$reg_doublant = isset($_POST[$doublant_login])?$_POST[$doublant_login]:NULL; - $reg_doublant=""; - if(isset($doublant_eleve[$num_eleve])){$reg_doublant=$doublant_eleve[$num_eleve];} + $reg_doublant = ""; + if (isset($doublant_eleve[$num_eleve])) { + $reg_doublant = $doublant_eleve[$num_eleve]; + } //======================== - if ($reg_doublant == 'yes') {$reg_doublant = 'R';} else {$reg_doublant = '-';} + if ($reg_doublant == 'yes') { + $reg_doublant = 'R'; + } else { + $reg_doublant = '-'; + } $call_regime = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_regime WHERE login='$login_eleve'"); $nb_test_regime = mysqli_num_rows($call_regime); @@ -115,62 +123,62 @@ // MODIF: boireaus 20071010 //$prof_login = "prof_".$login_eleve; //$reg_prof = isset($_POST[$prof_login])?$_POST[$prof_login]:NULL; - $reg_prof="(vide)"; - if(isset($prof_principal[$num_eleve])){$reg_prof=$prof_principal[$num_eleve];} + $reg_prof = "(vide)"; + if (isset($prof_principal[$num_eleve])) { + $reg_prof = $prof_principal[$num_eleve]; + } //echo "\$reg_prof=$reg_prof
\n"; //echo "$login_eleve - \$reg_prof=\$prof_principal[$num_eleve]=".$prof_principal[$num_eleve]."
"; //========================= - $sql="SELECT professeur FROM j_eleves_professeurs WHERE (login = '$login_eleve' AND id_classe='$id_classe')"; + $sql = "SELECT professeur FROM j_eleves_professeurs WHERE (login = '$login_eleve' AND id_classe='$id_classe')"; //echo "$sql
"; $call_profsuivi_eleve = mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($call_profsuivi_eleve)>1) { + if (mysqli_num_rows($call_profsuivi_eleve) > 1) { // ANOMALIE : On fait le ménage - $sql="DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; + $sql = "DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; $eleve_profsuivi = @old_mysql_result($call_profsuivi_eleve, '0', 'professeur'); + } else { + $eleve_profsuivi = ""; } - else { - $eleve_profsuivi=""; - } - } - else { + } else { $eleve_profsuivi = @old_mysql_result($call_profsuivi_eleve, '0', 'professeur'); } //echo "\$eleve_profsuivi=$eleve_profsuivi
\n"; if (($reg_prof == '(vide)') and ($eleve_profsuivi != '')) { - $sql="DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; + $sql = "DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } } - if (($reg_prof != '(vide)') and ($eleve_profsuivi != '') and ($reg_prof != $eleve_profsuivi)) { + if (($reg_prof != '(vide)') and ($eleve_profsuivi != '') and ($reg_prof != $eleve_profsuivi)) { // Problème de doublon //$sql="UPDATE j_eleves_professeurs SET professeur ='$reg_prof' WHERE (login='$login_eleve' AND id_classe='$id_classe')"; - $sql="DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; + $sql = "DELETE FROM j_eleves_professeurs WHERE (login='$login_eleve' AND id_classe='$id_classe')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - $sql="INSERT INTO j_eleves_professeurs VALUES ('$login_eleve', '$reg_prof', '$id_classe')"; + $sql = "INSERT INTO j_eleves_professeurs VALUES ('$login_eleve', '$reg_prof', '$id_classe')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } } - if (($reg_prof != '(vide)') and ($eleve_profsuivi == '')) { - $sql="INSERT INTO j_eleves_professeurs VALUES ('$login_eleve', '$reg_prof', '$id_classe')"; + if (($reg_prof != '(vide)') and ($eleve_profsuivi == '')) { + $sql = "INSERT INTO j_eleves_professeurs VALUES ('$login_eleve', '$reg_prof', '$id_classe')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } @@ -181,36 +189,38 @@ //$cpe_login = "cpe_".$login_eleve; //$reg_cperesp = isset($_POST[$cpe_login])?$_POST[$cpe_login]:NULL; //$reg_cperesp="(vide)"; - $reg_cperesp="(vide)"; - if(isset($cpe_resp[$num_eleve])){$reg_cperesp=$cpe_resp[$num_eleve];} + $reg_cperesp = "(vide)"; + if (isset($cpe_resp[$num_eleve])) { + $reg_cperesp = $cpe_resp[$num_eleve]; + } //echo "\$reg_cperesp=$reg_cperesp
\n"; //========================= $call_cperesp_eleve = mysqli_query($GLOBALS["mysqli"], "SELECT cpe_login FROM j_eleves_cpe WHERE e_login = '$login_eleve'"); $eleve_cperesp = @old_mysql_result($call_cperesp_eleve, '0', 'cpe_login'); if (($reg_cperesp == '(vide)') and ($eleve_cperesp != '')) { - $sql="DELETE FROM j_eleves_cpe WHERE e_login='$login_eleve'"; + $sql = "DELETE FROM j_eleves_cpe WHERE e_login='$login_eleve'"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } } - if (($reg_cperesp != '(vide)') and ($eleve_cperesp != '') and ($reg_cperesp != $eleve_cperesp)) { - $sql="UPDATE j_eleves_cpe SET cpe_login ='$reg_cperesp' WHERE e_login='$login_eleve'"; + if (($reg_cperesp != '(vide)') and ($eleve_cperesp != '') and ($reg_cperesp != $eleve_cperesp)) { + $sql = "UPDATE j_eleves_cpe SET cpe_login ='$reg_cperesp' WHERE e_login='$login_eleve'"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } } - if (($reg_cperesp != '(vide)') and ($eleve_cperesp == '')) { - $sql="INSERT INTO j_eleves_cpe VALUES ('$login_eleve', '$reg_cperesp')"; + if (($reg_cperesp != '(vide)') and ($eleve_cperesp == '')) { + $sql = "INSERT INTO j_eleves_cpe VALUES ('$login_eleve', '$reg_cperesp')"; //echo "$sql
"; $reg_data = mysqli_query($GLOBALS["mysqli"], $sql); - if (!($reg_data)){ + if (!($reg_data)) { $reg_ok = 'no'; //echo "PB"; } @@ -223,77 +233,85 @@ $liste_cible2 = ''; $liste_cible3 = ''; $autorisation_sup = 'yes'; - while ($k < $nombreligne){ + while ($k < $nombreligne) { $eleve_login = old_mysql_result($call_eleves, $k, "login"); //echo "

\$eleve_login=$eleve_login et "; //========================= // AJOUT: boireaus 20071003 // Récupération du numéro de l'élève dans les saisies: - $num_eleve=-1; - for($i=0;$i"; - if($num_eleve!=-1){ - $delete=isset($_POST['delete_'.$num_eleve]) ? $_POST['delete_'.$num_eleve] : NULL; + if ($num_eleve != -1) { + $delete = isset($_POST['delete_' . $num_eleve]) ? $_POST['delete_' . $num_eleve] : NULL; - $i="1"; + $i = "1"; while ($i < $nb_periode) { //========================= // MODIF: boireaus 20071010 //$temp = 'delete_'.$eleve_login."_".$i; //$del_eleve[$i] = isset($_POST[$temp])?$_POST[$temp]:NULL; - $del_eleve[$i]=NULL; - if(isset($delete[$i])){$del_eleve[$i]=$delete[$i];} + $del_eleve[$i] = NULL; + if (isset($delete[$i])) { + $del_eleve[$i] = $delete[$i]; + } //========================= if ($del_eleve[$i] == 'yes') { - $sql="SELECT * FROM matieres_notes WHERE (login='$eleve_login' and periode = '$i');"; + $sql = "SELECT * FROM matieres_notes WHERE (login='$eleve_login' and periode = '$i');"; //echo "$sql
"; $test = mysqli_query($GLOBALS["mysqli"], $sql); $nb_test = mysqli_num_rows($test); - $sql="SELECT * FROM matieres_appreciations WHERE (login='$eleve_login' and periode='$i')"; + $sql = "SELECT * FROM matieres_appreciations WHERE (login='$eleve_login' and periode='$i')"; //echo "$sql
"; $test_app = mysqli_query($GLOBALS["mysqli"], $sql); $nb_test_app = mysqli_num_rows($test_app); - $sql="SELECT * FROM avis_conseil_classe WHERE (login='$eleve_login' and periode='$i' and avis!='')"; + $sql = "SELECT * FROM avis_conseil_classe WHERE (login='$eleve_login' and periode='$i' and avis!='')"; //echo "$sql
"; $test_app_conseil = mysqli_query($GLOBALS["mysqli"], $sql); $nb_test_app_conseil = mysqli_num_rows($test_app_conseil); if (($nb_test != 0) or ($nb_test_app != 0) or ($nb_test_app_conseil != 0)) { - $motif_bloquant=""; + $motif_bloquant = ""; if ($nb_test != 0) { - $motif_bloquant.=$nb_test." moyenne(s)"; + $motif_bloquant .= $nb_test . " moyenne(s)"; } if ($nb_test_app != 0) { - if($motif_bloquant!="") {$motif_bloquant.=", ";} - $motif_bloquant.=$nb_test_app." appréciation(s)"; + if ($motif_bloquant != "") { + $motif_bloquant .= ", "; + } + $motif_bloquant .= $nb_test_app . " appréciation(s)"; } if ($nb_test_app_conseil != 0) { - if($motif_bloquant!="") {$motif_bloquant.=", ";} - $motif_bloquant.="un avis du conseil de classe"; + if ($motif_bloquant != "") { + $motif_bloquant .= ", "; + } + $motif_bloquant .= "un avis du conseil de classe"; } $autorisation_sup = 'no'; - if(!isset($msg)) {$msg="";} - $msg.="--> Impossible de retirer l'élève $eleve_login de la classe pour la période $i !
Cet(te) élève a $motif_bloquant pour cette période. Commencez par supprimer les données de l'élève pour cette période !

\n"; + if (!isset($msg)) { + $msg = ""; + } + $msg .= "--> Impossible de retirer l'élève $eleve_login de la classe pour la période $i !
Cet(te) élève a $motif_bloquant pour cette période. Commencez par supprimer les données de l'élève pour cette période !

\n"; $reg_ok = "impossible"; } else { - $liste_cible .= $eleve_login.";"; - $liste_cible2 .= $i.";"; - $liste_cible3 .= $id_classe.";"; + $liste_cible .= $eleve_login . ";"; + $liste_cible2 .= $i . ";"; + $liste_cible3 .= $id_classe . ";"; } } $i++; @@ -304,57 +322,55 @@ //debug_var(); - if($autorisation_sup=='no') { - $msg.="De façon générale : ".$explication_motif_bloquant_suppression_eleve_de_la_classe."
"; + if ($autorisation_sup == 'no') { + $msg .= "De façon générale : " . $explication_motif_bloquant_suppression_eleve_de_la_classe . "
"; } if (($liste_cible != '') and ($autorisation_sup != 'no')) { - header("Location: ../lib/confirm_query.php?liste_cible=$liste_cible&liste_cible2=$liste_cible2&liste_cible3=$liste_cible3&action=retire_eleve".add_token_in_url(false)); + header("Location: ../lib/confirm_query.php?liste_cible=$liste_cible&liste_cible2=$liste_cible2&liste_cible3=$liste_cible3&action=retire_eleve" . add_token_in_url(false)); } if ($reg_ok == 'yes') { - //$message_enregistrement = "Les modifications ont été enregistrées !"; - if(!isset($msg)){$msg="";} - $msg.="Les modifications ont été enregistrées !"; + //$message_enregistrement = "Les modifications ont été enregistrées !"; + if (!isset($msg)) { + $msg = ""; + } + $msg .= "Les modifications ont été enregistrées !"; } else if ($reg_ok == "impossible") { $message_enregistrement = "Opération Impossible (voir message d'avertissement en rouge)."; $affiche_message = 'yes'; } else { - //$message_enregistrement = "Il y a eu un problème lors de l'enregistrement"; - $message_enregistrement="Il y a eu un problème lors de l'enregistrement"; + //$message_enregistrement = "Il y a eu un problème lors de l'enregistrement"; + $message_enregistrement = "Il y a eu un problème lors de l'enregistrement"; $affiche_message = 'yes'; } //$affiche_message = 'yes'; } -if(isset($_GET['add_eleve_classe'])) { +if (isset($_GET['add_eleve_classe'])) { check_token(); //add_eleve_classe=y&num_periode=$i&id_classe=$id_classe&login_eleve=$login_eleve - $login_eleve=isset($_GET['login_eleve']) ? $_GET['login_eleve'] : NULL; - $num_periode=isset($_GET['num_periode']) ? $_GET['num_periode'] : NULL; + $login_eleve = isset($_GET['login_eleve']) ? $_GET['login_eleve'] : NULL; + $num_periode = isset($_GET['num_periode']) ? $_GET['num_periode'] : NULL; - if(($num_periode=='')||(preg_match("/[^0-9]/", $num_periode))) { - $msg="Numéro de période $num_periode invalide pour l'ajout de $login_eleve dans la classe."; - } - elseif(($login_eleve=='')||(preg_match("/[^A-Za-z0-9\._-]/", $login_eleve))) { - $msg="Login élève $login_eleve invalide pour l'ajout dans la classe en période $num_periode."; - } - else { + if (($num_periode == '') || (preg_match("/[^0-9]/", $num_periode))) { + $msg = "Numéro de période $num_periode invalide pour l'ajout de $login_eleve dans la classe."; + } elseif (($login_eleve == '') || (preg_match("/[^A-Za-z0-9\._-]/", $login_eleve))) { + $msg = "Login élève $login_eleve invalide pour l'ajout dans la classe en période $num_periode."; + } else { //$sql="SELECT id_classe FROM j_eleves_classes WHERE login='$login_eleve' AND id_classe='$id_classe' AND periode='$num_periode';"; - $sql="SELECT id_classe FROM j_eleves_classes WHERE login='$login_eleve' AND periode='$num_periode';"; - $test=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test)>0) { - $lig=mysqli_fetch_object($test); - $msg="$login_eleve est déjà inscrit dans la classe ".get_class_from_id($lig->id_classe)." en période $num_periode."; - } - else { - $sql="INSERT INTO j_eleves_classes SET login='$login_eleve', id_classe='$id_classe', periode='$num_periode';"; - $insert=mysqli_query($GLOBALS["mysqli"], $sql); - if(!$insert) { - $msg="Erreur lors de l'ajout de $login_eleve dans la classe en période $num_periode."; - } - else { - $msg="Ajout de $login_eleve dans la classe en période $num_periode effectué.
Pensez à définir les matières suivies."; + $sql = "SELECT id_classe FROM j_eleves_classes WHERE login='$login_eleve' AND periode='$num_periode';"; + $test = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test) > 0) { + $lig = mysqli_fetch_object($test); + $msg = "$login_eleve est déjà inscrit dans la classe " . get_class_from_id($lig->id_classe) . " en période $num_periode."; + } else { + $sql = "INSERT INTO j_eleves_classes SET login='$login_eleve', id_classe='$id_classe', periode='$num_periode';"; + $insert = mysqli_query($GLOBALS["mysqli"], $sql); + if (!$insert) { + $msg = "Erreur lors de l'ajout de $login_eleve dans la classe en période $num_periode."; + } else { + $msg = "Ajout de $login_eleve dans la classe en période $num_periode effectué.
Pensez à définir les matières suivies."; } } } @@ -362,38 +378,36 @@ // ================================= // AJOUT: boireaus -$chaine_options_classes=""; -$sql="SELECT id, classe FROM classes ORDER BY classe"; -$res_class_tmp=mysqli_query($GLOBALS["mysqli"], $sql); -if(mysqli_num_rows($res_class_tmp)>0){ - $id_class_prec=0; - $id_class_suiv=0; - $temoin_tmp=0; - - $cpt_classe=0; - $num_classe=-1; - - while($lig_class_tmp=mysqli_fetch_object($res_class_tmp)){ - if($lig_class_tmp->id==$id_classe){ +$chaine_options_classes = ""; +$sql = "SELECT id, classe FROM classes ORDER BY classe"; +$res_class_tmp = mysqli_query($GLOBALS["mysqli"], $sql); +if (mysqli_num_rows($res_class_tmp) > 0) { + $id_class_prec = 0; + $id_class_suiv = 0; + $temoin_tmp = 0; + + $cpt_classe = 0; + $num_classe = -1; + + while ($lig_class_tmp = mysqli_fetch_object($res_class_tmp)) { + if ($lig_class_tmp->id == $id_classe) { // Index de la classe dans les \n"; - $temoin_tmp=1; - if($lig_class_tmp=mysqli_fetch_object($res_class_tmp)){ - $chaine_options_classes.="\n"; - $id_class_suiv=$lig_class_tmp->id; - } - else{ - $id_class_suiv=0; + $chaine_options_classes .= "\n"; + $temoin_tmp = 1; + if ($lig_class_tmp = mysqli_fetch_object($res_class_tmp)) { + $chaine_options_classes .= "\n"; + $id_class_suiv = $lig_class_tmp->id; + } else { + $id_class_suiv = 0; } - } - else { - $chaine_options_classes.="\n"; + } else { + $chaine_options_classes .= "\n"; } - if($temoin_tmp==0){ - $id_class_prec=$lig_class_tmp->id; + if ($temoin_tmp == 0) { + $id_class_prec = $lig_class_tmp->id; } $cpt_classe++; @@ -402,7 +416,7 @@ // ================================= -$themessage = 'Des informations ont été modifiées. Voulez-vous vraiment quitter sans enregistrer ?'; +$themessage = 'Des informations ont été modifiées. Voulez-vous vraiment quitter sans enregistrer ?'; //**************** EN-TETE ************************************** $titre_page = "Gestion des classes | Gestion des élèves"; @@ -414,29 +428,29 @@ //debug_var(); //============================= -$ouvrir_infobulle_nav=getSettingValue("ouvrir_infobulle_nav"); +$ouvrir_infobulle_nav = getSettingValue("ouvrir_infobulle_nav"); -$gepi_prof_suivi=ucfirst(retourne_denomination_pp($id_classe)); +$gepi_prof_suivi = ucfirst(retourne_denomination_pp($id_classe)); -if(!isset($quitter_la_page)){ - echo "

\n"; +if (!isset($quitter_la_page)) { + echo "\n"; echo "

\n"; - echo "Retour Retour | ".ucfirst($gepi_prof_suivi)." : saisie rapide\n"; + echo "Retour Retour | " . ucfirst($gepi_prof_suivi) . " : saisie rapide\n"; - if(getSettingAOui('active_mod_engagements')) { - if(($_SESSION['statut']=='administrateur')|| - (($_SESSION['statut']=='scolarite')&&(count(get_tab_engagements("eleve", "scolarite"))>0))|| - (($_SESSION['statut']=='cpe')&&(count(get_tab_engagements("eleve", "cpe"))>0))) { + if (getSettingAOui('active_mod_engagements')) { + if (($_SESSION['statut'] == 'administrateur') || + (($_SESSION['statut'] == 'scolarite') && (count(get_tab_engagements("eleve", "scolarite")) > 0)) || + (($_SESSION['statut'] == 'cpe') && (count(get_tab_engagements("eleve", "cpe")) > 0))) { echo " | Saisie des engagements\n"; } } echo " |"; - if($id_class_prec!=0) { - echo " "; + if ($id_class_prec != 0) { + echo " "; } - if($chaine_options_classes!="") { + if ($chaine_options_classes != "") { echo "\n"; - $tabdiv_infobulle[]=creer_div_infobulle('navigation_classe',$titre,"",$texte,"",14,0,'y','y','n','n'); + $tabdiv_infobulle[] = creer_div_infobulle('navigation_classe', $titre, "", $texte, "", 14, 0, 'y', 'y', 'n', 'n'); echo " | "; @@ -503,7 +518,7 @@ function modif_mode_infobulle_nav() { echo " | Exporter les options suivies par les élèves"; - if(acces_saisie_modalites_accompagnement()) { + if (acces_saisie_modalites_accompagnement()) { echo " | Modalités d'accompagnement"; } @@ -513,20 +528,19 @@ function modif_mode_infobulle_nav() { echo "

\n"; echo "
\n"; -} -else { +} else { // Cette page a été ouverte en target='blank' depuis une autre page (par exemple /eleves/modify_eleve.php) // Après modification éventuelle, il faut quitter cette page. - echo "\n"; + echo "\n"; echo "

"; - echo "Retour Refermer la page | ".ucfirst($gepi_prof_suivi)." : saisie rapide\n"; + echo "Retour Refermer la page | " . ucfirst($gepi_prof_suivi) . " : saisie rapide\n"; echo " |"; - if($id_class_prec!=0) { - echo " "; + if ($id_class_prec != 0) { + echo " "; } - if($chaine_options_classes!="") { + if ($chaine_options_classes != "") { echo " "; - $tab_profsuivi=array(); - $tab_profnom=array(); - $tab_profprenom=array(); + $tab_profsuivi = array(); + $tab_profnom = array(); + $tab_profprenom = array(); // Liste des profs pour prof_principal $call_prof = mysqli_query($GLOBALS["mysqli"], "SELECT DISTINCT u.login, u.nom, u.prenom " . - "FROM utilisateurs u, j_groupes_professeurs jgp, j_groupes_classes jgc WHERE (" . - "u.statut = 'professeur' and " . - "u.login = jgp.login and " . - "jgp.id_groupe = jgc.id_groupe and " . - "jgc.id_classe = '".$id_classe."'" . - ") ORDER BY u.nom, u.prenom"); + "FROM utilisateurs u, j_groupes_professeurs jgp, j_groupes_classes jgc WHERE (" . + "u.statut = 'professeur' and " . + "u.login = jgp.login and " . + "jgp.id_groupe = jgc.id_groupe and " . + "jgc.id_classe = '" . $id_classe . "'" . + ") ORDER BY u.nom, u.prenom"); $nb = mysqli_num_rows($call_prof); - $i=0; + $i = 0; while ($i < $nb) { $tab_profsuivi[$i] = old_mysql_result($call_prof, $i, "login"); $tab_profnom[$i] = old_mysql_result($call_prof, $i, "nom"); @@ -660,23 +676,22 @@ function imposer_cpe() { } // Recherche des PP de la classe - $sql="SELECT DISTINCT professeur FROM j_eleves_professeurs WHERE (id_classe='$id_classe')"; - $test_pp=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test_pp)==1) { - $lig_pp=mysqli_fetch_object($test_pp); - $login_pp_unique_actuel=$lig_pp->professeur; - } - else { - $login_pp_unique_actuel=""; + $sql = "SELECT DISTINCT professeur FROM j_eleves_professeurs WHERE (id_classe='$id_classe')"; + $test_pp = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test_pp) == 1) { + $lig_pp = mysqli_fetch_object($test_pp); + $login_pp_unique_actuel = $lig_pp->professeur; + } else { + $login_pp_unique_actuel = ""; } - $tab_cperesp=array(); - $tab_cpenom=array(); - $tab_cpeprenom=array(); + $tab_cperesp = array(); + $tab_cpenom = array(); + $tab_cpeprenom = array(); // Liste des CPE $call_cpe = mysqli_query($GLOBALS["mysqli"], "SELECT login,nom,prenom FROM utilisateurs WHERE (statut='cpe' AND etat='actif')"); $nb = mysqli_num_rows($call_cpe); - $i=0; + $i = 0; while ($i < $nb) { $tab_cperesp[$i] = old_mysql_result($call_cpe, $i, "login"); $tab_cpenom[$i] = old_mysql_result($call_cpe, $i, "nom"); @@ -685,20 +700,19 @@ function imposer_cpe() { } // Recherche des CPE de la classe - $sql="SELECT DISTINCT cpe_login FROM j_eleves_cpe jecpe, j_eleves_classes jec WHERE (jec.login=jecpe.e_login AND jec.id_classe='$id_classe')"; - $test_cpe=mysqli_query($GLOBALS["mysqli"], $sql); - if(mysqli_num_rows($test_cpe)==1) { - $lig_cpe=mysqli_fetch_object($test_cpe); - $login_cpe_unique_actuel=$lig_cpe->cpe_login; - } - else { - $login_cpe_unique_actuel=""; + $sql = "SELECT DISTINCT cpe_login FROM j_eleves_cpe jecpe, j_eleves_classes jec WHERE (jec.login=jecpe.e_login AND jec.id_classe='$id_classe')"; + $test_cpe = mysqli_query($GLOBALS["mysqli"], $sql); + if (mysqli_num_rows($test_cpe) == 1) { + $lig_cpe = mysqli_fetch_object($test_cpe); + $login_cpe_unique_actuel = $lig_cpe->cpe_login; + } else { + $login_cpe_unique_actuel = ""; } - $tab_eff_per=array(); - $i="1"; + $tab_eff_per = array(); + $i = "1"; while ($i < $nb_periode) { - $tab_eff_per[$i]=0; + $tab_eff_per[$i] = 0; $i++; } @@ -709,15 +723,17 @@ function imposer_cpe() { echo "Nom Prénom \n"; echo "Régime\n"; echo "Redoublant\n"; - echo "".$gepi_prof_suivi; + echo "" . $gepi_prof_suivi; echo "\n"; echo " Imposer pour tous les élèves\n"; @@ -728,44 +744,50 @@ function imposer_cpe() { echo "\n"; echo " Imposer pour tous les élèves\n"; echo "\n"; - $i="1"; + $i = "1"; while ($i < $nb_periode) { //echo "

Retirer de la classe
$nom_periode[$i]

\n"; echo "

Retirer de la classe
$nom_periode[$i]
\n"; +à la classe : " . formate_date($date_fin_periode[$i]) . "\">Retirer de la classe
$nom_periode[$i]
\n"; - echo "Tout cocher / Tout décocher"; + echo "Tout cocher / Tout décocher"; echo "

\n"; $i++; } echo " \n"; echo "\n"; - $alt=1; - while($k < $nombreligne) { + $alt = 1; + while ($k < $nombreligne) { $login_eleve = old_mysql_result($call_eleves, $k, 'login'); $call_regime = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_regime WHERE login='$login_eleve'"); $doublant = @old_mysql_result($call_regime, 0, 'doublant'); $regime = @old_mysql_result($call_regime, 0, 'regime'); - if ($regime =='') {$regime = "d/p";} - if ($doublant == '') {$doublant = '-';} + if ($regime == '') { + $regime = "d/p"; + } + if ($doublant == '') { + $doublant = '-'; + } - $regime_login = "regime_".$login_eleve; - $doublant_login = "doublant_".$login_eleve; - $i="1"; + $regime_login = "regime_" . $login_eleve; + $doublant_login = "doublant_" . $login_eleve; + $i = "1"; while ($i < $nb_periode) { - $delete_login[$i] = "delete_".$login_eleve."_".$i; + $delete_login[$i] = "delete_" . $login_eleve . "_" . $i; $i++; } $call_data_eleves = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM eleves WHERE (login = '$login_eleve')"); @@ -774,40 +796,42 @@ function imposer_cpe() { $call_profsuivi_eleve = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM j_eleves_professeurs WHERE (login = '$login_eleve' and id_classe='$id_classe')"); $eleve_profsuivi = @old_mysql_result($call_profsuivi_eleve, '0', 'professeur'); - $prof_login = "prof_".$login_eleve; + $prof_login = "prof_" . $login_eleve; $call_cperesp = mysqli_query($GLOBALS["mysqli"], "SELECT u.nom nom, u.prenom prenom, j.cpe_login cpe_login FROM j_eleves_cpe j, utilisateurs u WHERE (u.login = j.cpe_login AND j.e_login = '$login_eleve')"); $eleve_cperesp = @old_mysql_result($call_cperesp, '0', "cpe_login"); - $cpe_login = "cpe_".$login_eleve; + $cpe_login = "cpe_" . $login_eleve; - $alt=$alt*(-1); + $alt = $alt * (-1); echo "\n"; echo ""; - if(array_key_exists($login_eleve, $tab_engagements_user['login_user'])) { - $chaine_eng=""; - $chaine_eng_img=""; - for($loop_eng=0;$loop_engEngagement(s)"; - echo "
$chaine_eng_img
"; + echo "
$chaine_eng_img
"; } echo "

"; - echo ""; - echo my_strtoupper($nom_eleve)." ".casse_mot($prenom_eleve,'majf2'); + echo ""; + echo my_strtoupper($nom_eleve) . " " . casse_mot($prenom_eleve, 'majf2'); echo "\n"; echo "\n"; - $ancre_login_eleve=preg_replace("/[^A-Za-z0-9_]/","",$login_eleve); + $ancre_login_eleve = preg_replace("/[^A-Za-z0-9_]/", "", $login_eleve); echo "\n"; - echo "
Matières suivies"; + echo "
Matières suivies"; echo "

\n"; echo "\n"; @@ -816,20 +840,28 @@ function imposer_cpe() { echo "\n"; echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "
I-ext
I-ext
Int
Int
D/P
D/P
Ext
Ext
\n"; @@ -839,21 +871,25 @@ function imposer_cpe() { echo "\n"; echo "

\n"; - echo "\n"; + echo "\n"; echo "

\n"; echo "\n"; @@ -865,62 +901,71 @@ function imposer_cpe() { $cperesp = "(vide)"; echo "\n"; - for($loop=0;$loop".casse_mot($tab_cpeprenom[$loop],'majf2')." ".my_strtoupper($tab_cpenom[$loop])."\n"; + if ($tab_cperesp[$loop] == $eleve_cperesp) { + echo " selected"; + } + echo ">" . casse_mot($tab_cpeprenom[$loop], 'majf2') . " " . my_strtoupper($tab_cpenom[$loop]) . "\n"; } echo "

\n"; echo "\n"; - $i="1"; + $i = "1"; while ($i < $nb_periode) { $call_trim = mysqli_query($GLOBALS["mysqli"], "SELECT periode FROM j_eleves_classes WHERE (id_classe = '$id_classe' and periode = '$i' and login = '$login_eleve')"); $nb_ligne = mysqli_num_rows($call_trim); if ($nb_ligne != 0) { - if(!isset($tab_eff_per[$i])) {$tab_eff_per[$i]=0;} + if (!isset($tab_eff_per[$i])) { + $tab_eff_per[$i] = 0; + } $tab_eff_per[$i]++; echo ""; +à la classe : " . formate_date($date_fin_periode[$i]) . "\">"; echo "

"; // Tester s'il y a des notes/app dans le bulletin - $sql="SELECT 1=1 FROM matieres_notes WHERE login='".$login_eleve."' AND periode='".$i."';"; - $verif=mysqli_query($GLOBALS["mysqli"], $sql); - $nb_verif1=mysqli_num_rows($verif); - $sql="SELECT 1=1 FROM matieres_appreciations WHERE login='".$login_eleve."' AND periode='".$i."';"; - $verif2=mysqli_query($GLOBALS["mysqli"], $sql); - $nb_verif2=mysqli_num_rows($verif2); - $sql="SELECT 1=1 FROM avis_conseil_classe WHERE login='".$login_eleve."' AND periode='".$i."';"; - $verif3=mysqli_query($GLOBALS["mysqli"], $sql); - $nb_verif3=mysqli_num_rows($verif3); - - if(($nb_verif1==0)&&($nb_verif2==0)&&($nb_verif3==0)) { - - echo ""; - - if($_SESSION['statut']=='administrateur') { + + if ($_SESSION['statut'] == 'administrateur') { echo "
\n"; echo "Changer de classe"; } - } - else { - $motif_bloquant=""; - if($nb_verif1>0) {$motif_bloquant.="$nb_verif1 moyenne(s)";} - if($nb_verif2>0) { - if($motif_bloquant!="") {$motif_bloquant.=", ";} - $motif_bloquant.="$nb_verif2 appréciation(s)"; + } else { + $motif_bloquant = ""; + if ($nb_verif1 > 0) { + $motif_bloquant .= "$nb_verif1 moyenne(s)"; } - if($nb_verif3>0) { - if($motif_bloquant!="") {$motif_bloquant.=", ";} - $motif_bloquant.="un avis du conseil de classe"; + if ($nb_verif2 > 0) { + if ($motif_bloquant != "") { + $motif_bloquant .= ", "; + } + $motif_bloquant .= "$nb_verif2 appréciation(s)"; + } + if ($nb_verif3 > 0) { + if ($motif_bloquant != "") { + $motif_bloquant .= ", "; + } + $motif_bloquant .= "un avis du conseil de classe"; } //20171129 - echo ""; + echo ""; echo "\"Bulletin"; echo ""; @@ -933,17 +978,16 @@ function imposer_cpe() { $call_classe = mysqli_query($GLOBALS["mysqli"], "SELECT c.classe FROM classes c, j_eleves_classes j WHERE (c.id = j.id_classe and j.periode = '$i' and j.login = '$login_eleve')"); $nom_classe = @old_mysql_result($call_classe, 0, "classe"); - if($nom_classe!="") { + if ($nom_classe != "") { echo "

$nom_classe

\n"; - } - else { - echo "\"Ajouter\n"; + } else { + echo "\"Ajouter\n"; } } $i++; } - echo "Tout cocher Tout décocher"; + echo "Tout cocher Tout décocher"; echo "\n"; $k++; @@ -955,9 +999,9 @@ function imposer_cpe() { echo " \n"; echo " \n"; echo " \n"; - $i="1"; + $i = "1"; while ($i < $nb_periode) { - echo ""; + echo ""; echo $tab_eff_per[$i]; echo "\n"; $i++; @@ -970,25 +1014,25 @@ function imposer_cpe() { echo "
\n"; -//============================================ -// 20171129 -echo "\n"; + //============================================ echo "\n"; } -echo "

NOTE : ".$explication_motif_bloquant_suppression_eleve_de_la_classe."

\n"; +echo "

NOTE : " . $explication_motif_bloquant_suppression_eleve_de_la_classe . "

\n"; require("../lib/footer.inc.php"); diff --git a/edt_gestion_gr/edt_win.php b/edt_gestion_gr/edt_win.php index d25434e0c0..735a9e23dd 100755 --- a/edt_gestion_gr/edt_win.php +++ b/edt_gestion_gr/edt_win.php @@ -1,9 +1,6 @@ security_check(); if ($resultat_session == 'c') { - header("Location:../utilisateurs/mon_compte.php?change_mdp=yes&retour=accueil#changemdp"); - die(); + header("Location:../utilisateurs/mon_compte.php?change_mdp=yes&retour=accueil#changemdp"); + die(); } else if ($resultat_session == '0') { - header("Location: ../logout.php?auto=1"); - die(); + header("Location: ../logout.php?auto=1"); + die(); } // Sécurité if (!checkAccess()) { - header("Location: ./logout.php?auto=2"); - die(); + header("Location: ./logout.php?auto=2"); + die(); } // ===================== fin de l'initialisation ================ @@ -53,33 +50,31 @@ $aff_modif = NULL; // On récupère toutes les données du groupe -if (isset($var) AND is_numeric($var)) { +if (isset($var) and is_numeric($var)) { // On y va pour récupérer les données - $query_d = mysqli_query($GLOBALS["mysqli"], "SELECT nom, nom_long, subdivision_type, subdivision FROM edt_gr_nom WHERE id = '".$var."'"); + $query_d = mysqli_query($GLOBALS["mysqli"], "SELECT nom, nom_long, subdivision_type, subdivision FROM edt_gr_nom WHERE id = '" . $var . "'"); $rep_d = mysqli_fetch_array($query_d); } - if ($var2 == "changer_nom") { //echo '

Vous voulez changer de nom ?

'; // On récupère toutes les données du groupe - if (isset($var) AND is_numeric($var)) { - - $aff_modif .= ' + if (isset($var) and is_numeric($var)) { + $aff_modif .= '
 Modifier un groupe d\'élèves pour l\'EdT  - +

- +

- +

@@ -87,13 +82,10 @@
'; - - }else{ + } else { $aff_modif = '

Impossible de récupérer les données de ce groupe.

'; } - -}elseif($var2 == "liste_e"){ - +} elseif ($var2 == "liste_e") { // On vérifie si ce gr ne correspond pas à une classe et à laquelle précisément //$query_verif = mysql_fetch_array(mysql_query("SELECT subdivision_type, subdivision FROM edt_gr_nom WHERE id ='".$var."'")); @@ -102,58 +94,51 @@ // On récupère donc la liste des élèves de cette classe $sql_e = "SELECT DISTINCT e.nom, e.prenom, e.login FROM eleves e, j_eleves_classes jec WHERE jec.login = e.login - AND jec.id_classe = '".$rep_d["subdivision"]."' + AND jec.id_classe = '" . $rep_d["subdivision"] . "' ORDER BY nom, prenom"; - }else{ + } else { // Permet d'afficher la liste des élèves $sql_e = "SELECT DISTINCT e.nom, e.prenom, e.login FROM eleves e, edt_gr_eleves ege WHERE ege.id_eleve = e.id_eleve - AND ege.id_gr_nom = '".$var."' + AND ege.id_gr_nom = '" . $var . "' ORDER BY nom, prenom"; } // On met en place l'affichage - $aff_modif .= '

Modifier cette liste

'; + $aff_modif .= '

Modifier cette liste

'; - $query_e = mysqli_query($GLOBALS["mysqli"], $sql_e) OR trigger_error('Impossible de récupérer la liste des élèves', E_USER_ERROR); - - while($rep = mysqli_fetch_array($query_e)){ + $query_e = mysqli_query($GLOBALS["mysqli"], $sql_e) or trigger_error('Impossible de récupérer la liste des élèves', E_USER_ERROR); + while ($rep = mysqli_fetch_array($query_e)) { // On récupère alors la classe $query_c = mysqli_query($GLOBALS["mysqli"], "SELECT classe FROM j_eleves_classes jec, classes c - WHERE jec.login = '".$rep["login"]."' + WHERE jec.login = '" . $rep["login"] . "' AND jec.id_classe = c.id"); - $classe = old_mysql_result($query_c, 0,"classe"); - - $aff_modif .= $rep["nom"].' '.$rep["prenom"].' ('.$classe.').
'; + $classe = old_mysql_result($query_c, 0, "classe"); + $aff_modif .= $rep["nom"] . ' ' . $rep["prenom"] . ' (' . $classe . ').
'; } - - -}elseif($var2 == "liste_p"){ +} elseif ($var2 == "liste_p") { // On travaille sur la liste des professeurs $sql_p = "SELECT login, nom, prenom FROM edt_gr_profs egp, utilisateurs u WHERE egp.id_utilisateurs = u.login - AND id_gr_nom = '".$var."' + AND id_gr_nom = '" . $var . "' ORDER BY nom, prenom"; - $query_p = mysqli_query($GLOBALS["mysqli"], $sql_p) OR trigger_error("Impossible de récupérer la liste des professeurs de ce groupe : ", E_USER_ERROR); + $query_p = mysqli_query($GLOBALS["mysqli"], $sql_p) or trigger_error("Impossible de récupérer la liste des professeurs de ce groupe : ", E_USER_ERROR); - $aff_modif .= '

Modifier cette liste

'; - - while($rep = mysqli_fetch_array($query_p)){ - - $aff_modif .= '
'.$rep["nom"].' '.$rep["prenom"]; + $aff_modif .= '

Modifier cette liste

'; + while ($rep = mysqli_fetch_array($query_p)) { + $aff_modif .= '
' . $rep["nom"] . ' ' . $rep["prenom"]; } } - // On traite la modification si elle est demandée (liste d'élèves : obsolète) if ($action == "modifier_gr") { - $sql_m = "UPDATE edt_gr_nom SET nom = '".$nom_gr."', nom_long = '".$nom_long_gr."' WHERE id = '".$var."'"; - $query_m = mysqli_query($GLOBALS["mysqli"], $sql_m) OR trigger_error('Impossible de mettre à jour ce groupe '.mysqli_error($GLOBALS["mysqli"]), E_USER_ERROR); + $sql_m = "UPDATE edt_gr_nom SET nom = '" . $nom_gr . "', nom_long = '" . $nom_long_gr . "' WHERE id = '" . $var . "'"; + $query_m = mysqli_query($GLOBALS["mysqli"], $sql_m) or trigger_error('Impossible de mettre à jour ce groupe ' . mysqli_error($GLOBALS["mysqli"]), E_USER_ERROR); if ($query_m) { // On ferme la fenêtre echo '

La modification a bien été enregistrée, vous pouvez fermer cette fenêtre et rafraichir votre navigateur.

'; @@ -163,13 +148,13 @@ ?> - +  -  -
+
- + -
+
- \ No newline at end of file + diff --git a/lib/CsvClass.php b/lib/CsvClass.php index 6d406353ed..44e087f9c8 100755 --- a/lib/CsvClass.php +++ b/lib/CsvClass.php @@ -1,7 +1,7 @@ path = $path; + $this->name = $name; + $this->filename = $this->path . $this->name . '.csv'; + if ($delimiter) $this->delimiter = $delimiter; + if ($enclosure) $this->enclosure = $enclosure; + if (file_exists($this->filename)) { + $this->exists = true; + } + } - $this->path=$path; - $this->name=$name; - $this->filename=$this->path.$this->name.'.csv'; - if($delimiter) $this->delimiter=$delimiter; - if($enclosure) $this->enclosure=$enclosure; - if (file_exists($this->filename)) { - $this->exists=true; - } - } + public function set_data($data) { + $fp = fopen($this->filename, 'w'); + foreach ($data as $line) { + fputcsv($fp, preg_split(';', $line), $this->delimiter, $this->enclosure); //Romain Neil: A tester: remplacement par la fonction non dépréciée + } + fclose($fp); + } - public function set_data($data) { - //if($this->exists) $this->rename(); - $fp = fopen($this->filename, 'w'); - foreach($data as $line) { - fputcsv($fp, split(';',$line),$this->delimiter,$this->enclosure); - } - fclose($fp); - } - - private function rename() { - $i=1; - while($this->exists) { - $this->filename=$this->path.$this->name.'_'.$i.'.csv'; - if (!file_exists($this->filename)) { - $this->exists=false; - } - $i++; - } - } + private function rename() { + $i = 1; + while ($this->exists) { + $this->filename = $this->path . $this->name . '_' . $i . '.csv'; + if (!file_exists($this->filename)) { + $this->exists = false; + } + $i++; + } + } } + ?> diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 2a5f4036ef..391c8d0d5a 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -1,4 +1,5 @@ get_user_profile($_login); - $test_bind = @ldap_bind($this->ds,$user["dn"],$_password); + $test_bind = @ldap_bind($this->ds, $user["dn"], $_password); // On refait le bind pour reprendre les droits - ldap_bind($this->ds,$this->login,$this->password); + ldap_bind($this->ds, $this->login, $this->password); if ($user && $_password != '' && $test_bind) { return true; @@ -104,118 +105,112 @@ public function authenticate_user($_login, $_password) { # dans un tableau public function get_user_profile($_login) { $_login = my_ereg_replace("[^-@._[:space:][:alnum:]]", "", $_login); // securite - $search_dn = $this->get_dn(); - $search_filter = "(".$this->champ_login."=".$_login.")"; - $sr = ldap_search($this->ds,$search_dn,$search_filter); - $user = array(); - $user = ldap_get_entries($this->ds,$sr); - if (array_key_exists(0, $user)) { - $infos = array(); - $infos["dn"] = $user[0]["dn"]; - - if ($this->champ_prenom == '' || !array_key_exists($this->champ_prenom, $user[0])) { - $user[0][$this->champ_prenom][0] = ''; - } - if ($this->champ_nom == '' || !array_key_exists($this->champ_nom, $user[0])) { - $user[0][$this->champ_nom][0] = ''; - } - if ($this->champ_nom_complet == '' || !array_key_exists($this->champ_nom_complet, $user[0])) { - $user[0][$this->champ_nom_complet][0] = ''; - } - - $nom = $this->format_name($user[0][$this->champ_prenom][0], $user[0][$this->champ_nom][0], $user[0][$this->champ_nom_complet][0]); - - $infos["prenom"] = $nom['prenom']; - $infos["nom"] = $nom['nom']; - - if (!array_key_exists($this->champ_email, $user[0])) { - $user[0][$this->champ_email][0] = null; - } - $infos["email"] = $user[0][$this->champ_email][0]; - - if (!array_key_exists($this->champ_civilite, $user[0])) { - $user[0][$this->champ_civilite][0] = $this->code_cilivite_madame; - } - switch ($user[0][$this->champ_civilite][0]) { - case $this->code_civilite_madame: - $infos["civilite"] = "Mme"; - break; - case $this->code_civilite_mademoiselle: - $infos["civilite"] = "Mlle"; - break; - case $this->code_civilite_monsieur: - $infos["civilite"] = "M."; - break; - default: - $infos["civilite"] = "Mme"; - break; - } - - if ($this->champ_rne == '' || !array_key_exists($this->champ_rne, $user[0])) { - $user[0][$this->champ_rne][0] = ""; - $user[0][$this->champ_rne]['count'] = 0; - } - $nbre_rne = $user[0][$this->champ_rne]['count']; - - // S'il y a plusieurs RNE dans le ldap, on les renvoie tous - $infos["rne"] = array(); - for($a = 0 ; $a < $nbre_rne ; $a++){ + $search_dn = $this->get_dn(); + $search_filter = "(" . $this->champ_login . "=" . $_login . ")"; + $sr = ldap_search($this->ds, $search_dn, $search_filter); + $user = array(); + $user = ldap_get_entries($this->ds, $sr); + if (array_key_exists(0, $user)) { + $infos = []; + $infos["dn"] = $user[0]["dn"]; + + if ($this->champ_prenom == '' || !array_key_exists($this->champ_prenom, $user[0])) { + $user[0][$this->champ_prenom][0] = ''; + } + if ($this->champ_nom == '' || !array_key_exists($this->champ_nom, $user[0])) { + $user[0][$this->champ_nom][0] = ''; + } + if ($this->champ_nom_complet == '' || !array_key_exists($this->champ_nom_complet, $user[0])) { + $user[0][$this->champ_nom_complet][0] = ''; + } - $infos["rne"][$a] = $user[0][$this->champ_rne][$a]; + $nom = $this->format_name($user[0][$this->champ_prenom][0], $user[0][$this->champ_nom][0], $user[0][$this->champ_nom_complet][0]); + $infos["prenom"] = $nom['prenom']; + $infos["nom"] = $nom['nom']; + + if (!array_key_exists($this->champ_email, $user[0])) { + $user[0][$this->champ_email][0] = null; } + $infos["email"] = $user[0][$this->champ_email][0]; + if (!array_key_exists($this->champ_civilite, $user[0])) { + $user[0][$this->champ_civilite][0] = $this->code_cilivite_madame; + } + switch ($user[0][$this->champ_civilite][0]) { + case $this->code_civilite_mademoiselle: + $infos["civilite"] = "Mlle"; + break; + case $this->code_civilite_monsieur: + $infos["civilite"] = "M."; + break; + default: + $infos["civilite"] = "Mme"; + break; + } + + if ($this->champ_rne == '' || !array_key_exists($this->champ_rne, $user[0])) { + $user[0][$this->champ_rne][0] = ""; + $user[0][$this->champ_rne]['count'] = 0; + } + $nbre_rne = $user[0][$this->champ_rne]['count']; - # La détermination du statut est la manipulation la plus délicate. - # On dispose de deux moyens : un champ du LDAP (le plus simple...) - # ou bien une chaîne à tester sur le DN. - if ($this->champ_statut != null) { - // Le champ statut est défini, alors on teste - if (array_key_exists($this->champ_statut, $user[0])) { - if (in_array($user[0][$this->champ_statut][0], array("administrateur","professeur","eleve","responsable","scolarite","cpe"))) { - $infos["statut"] = $user[0][$this->champ_statut][0]; - } - } - } else { - // Si on est là, ce qu'on va essayer de tester avec des chaînes de caractères sur le DN - // En raison du risque d'erreur en cas de mauvaise configuration, on ne teste pas - // le statut administrateur. - if ($this->chaine_dn_statut_professeur != '' && strstr($infos["dn"],$this->chaine_dn_statut_professeur)) { - $infos["statut"] = "professeur"; - } else if ($this->chaine_dn_statut_eleve != '' && strstr($infos["dn"],$this->chaine_dn_statut_eleve)) { - $infos["statut"] = "eleve"; - } else if ($this->chaine_dn_statut_responsable != '' && strstr($infos["dn"],$this->chaine_dn_statut_responsable)) { - $infos["statut"] = "responsable"; - } else if ($this->chaine_dn_statut_scolarite != '' && strstr($infos["dn"],$this->chaine_dn_statut_scolarite)) { - $infos["statut"] = "scolarite"; - } else if ($this->chaine_dn_statut_cpe != '' && strstr($infos["dn"],$this->chaine_dn_statut_cpe)) { - $infos["statut"] = "cpe"; - } - } - if (!isset($info["statut"]) || !in_array($infos["statut"], array("administrateur","professeur","eleve","responsable","scolarite","cpe"))) { + // S'il y a plusieurs RNE dans le ldap, on les renvoie tous + $infos["rne"] = array(); + for ($a = 0; $a < $nbre_rne; $a++) { + + $infos["rne"][$a] = $user[0][$this->champ_rne][$a]; + + } + + # La détermination du statut est la manipulation la plus délicate. + # On dispose de deux moyens : un champ du LDAP (le plus simple...) + # ou bien une chaîne à tester sur le DN. + if ($this->champ_statut != null) { + // Le champ statut est défini, alors on teste + if (array_key_exists($this->champ_statut, $user[0])) { + if (in_array($user[0][$this->champ_statut][0], array("administrateur", "professeur", "eleve", "responsable", "scolarite", "cpe"))) { + $infos["statut"] = $user[0][$this->champ_statut][0]; + } + } + } else { + // Si on est là, ce qu'on va essayer de tester avec des chaînes de caractères sur le DN + // En raison du risque d'erreur en cas de mauvaise configuration, on ne teste pas + // le statut administrateur. + if ($this->chaine_dn_statut_professeur != '' && strstr($infos["dn"], $this->chaine_dn_statut_professeur)) { + $infos["statut"] = "professeur"; + } else if ($this->chaine_dn_statut_eleve != '' && strstr($infos["dn"], $this->chaine_dn_statut_eleve)) { + $infos["statut"] = "eleve"; + } else if ($this->chaine_dn_statut_responsable != '' && strstr($infos["dn"], $this->chaine_dn_statut_responsable)) { + $infos["statut"] = "responsable"; + } else if ($this->chaine_dn_statut_scolarite != '' && strstr($infos["dn"], $this->chaine_dn_statut_scolarite)) { + $infos["statut"] = "scolarite"; + } else if ($this->chaine_dn_statut_cpe != '' && strstr($infos["dn"], $this->chaine_dn_statut_cpe)) { + $infos["statut"] = "cpe"; + } + } + if (!isset($info["statut"]) || !in_array($infos["statut"], array("administrateur", "professeur", "eleve", "responsable", "scolarite", "cpe"))) { $infos["statut"] = getSettingValue("statut_utilisateur_defaut"); } - return $infos; - } else { - return false; - } + return $infos; + } else { + return false; + } } /* Permet de récupérer tou sles utilisateurs du LDAP en fonction d'un paramètre * retourne la liste des utilisateurs */ - public function get_all_users($type, $param){ + public function get_all_users($type, $param) { // On laisse la possibilité d'ajouter des lignes dans le code if ($type == 'rne') { // On utilise le rne de l'établissement pour récupérer les utilisateurs - $filter = '('.$this->champ_rne.'='.$param.')'; - $sr = ldap_search($this->ds, $this->get_dn(), $filter) ; - $infos = array(); - $infos = ldap_get_entries($this->ds, $sr); + $filter = '(' . $this->champ_rne . '=' . $param . ')'; + $sr = ldap_search($this->ds, $this->get_dn(), $filter); - return $infos; - }else{ + return ldap_get_entries($this->ds, $sr); + } else { return false; } } @@ -223,23 +218,21 @@ public function get_all_users($type, $param){ /* * renvoie le dn de recherche dans le ldap */ - private function get_dn(){ - return $this->people_ou.",".$this->base_dn; + private function get_dn() { + return $this->people_ou . "," . $this->base_dn; } # Ajoute un utilisateur à l'annuaire. # Retourne true/false. public function add_user($_login, $_nom, $_prenom, $_email, $_civilite, $_password, $_statut) { - # Si l'utilisateur existe déjà, on abandonne. La mise à jour d'une entrée passe par # une autre méthode. if ($this->test_user($_login)) { return false; - exit; } else { # L'utilisateur n'existe pas, on formate les données, et on le créé. - $dn = $this->champ_login."=".$_login.",".$this->people_ou.",".$this->base_dn; + $dn = $this->champ_login . "=" . $_login . "," . $this->people_ou . "," . $this->base_dn; $donnees = $this->format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, $_password, $_statut); $add = ldap_add($this->ds, $dn, $donnees); return $add; @@ -249,18 +242,16 @@ public function add_user($_login, $_nom, $_prenom, $_email, $_civilite, $_passwo # Met à jour un utilisateur dans l'annuaire. # Retourne true/false public function update_user($_login, $_nom, $_prenom, $_email, $_civilite, $_password, $_statut) { - # Si l'utilisateur n'existe pas, on abandonne. L'ajout d'une entrée passe par # une autre méthode. if (!$this->test_user($_login)) { return false; - exit; } else { # L'utilisateur existe, on formate les données, et on modifie l'annuaire. - $dn = $this->champ_login."=".$_login.",".$this->people_ou.",".$this->base_dn; + $dn = $this->champ_login . "=" . $_login . "," . $this->people_ou . "," . $this->base_dn; $donnees = $this->format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, $_password, $_statut); - $modify = ldap_modify($this->ds, $dn, $donnees); - return $modify; + + return ldap_modify($this->ds, $dn, $donnees); } } @@ -270,10 +261,9 @@ public function delete_user($_login) { # Si l'utilisateur n'existe pas, on arrête tout de suite. if (!$this->test_user($_login)) { return true; - exit; } else { # L'utilisateur existe, on supprime. - $dn = $this->champ_login."=".$_login.",".$this->people_ou.",".$this->base_dn; + $dn = $this->champ_login . "=" . $_login . "," . $this->people_ou . "," . $this->base_dn; $delete = ldap_delete($this->ds, $dn); return $delete; } @@ -288,33 +278,33 @@ public function set_manual_password($_login, $_password) { return $update; } - public static function connect_ldap($_adresse,$_port,$_login,$_password) { + public static function connect_ldap($_adresse, $_port, $_login, $_password) { # Pour avoir du débug en log serveur, décommenter la ligne suivante. #ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); - $ds = ldap_connect($_adresse, $_port); - if($ds) { - // On dit qu'on utilise LDAP V3, sinon la V2 par d?faut est utilis? et le bind ne passe pas. - $norme = ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); - // Accès non anonyme - if ($_login != '') { - // On tente un bind - $b = ldap_bind($ds, $_login, $_password); - } else { - // Accès anonyme - $b = ldap_bind($ds); - } - if ($b) { - return $ds; - } else { - return false; - } - } else { - return false; - } + $ds = ldap_connect($_adresse, $_port); + if ($ds) { + // On dit qu'on utilise LDAP V3, sinon la V2 par d?faut est utilis? et le bind ne passe pas. + $norme = ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + // Accès non anonyme + if ($_login != '') { + // On tente un bind + $b = ldap_bind($ds, $_login, $_password); + } else { + // Accès anonyme + $b = ldap_bind($ds); + } + if ($b) { + return $ds; + } else { + return false; + } + } else { + return false; + } } public static function is_setup() { - return file_exists(dirname(__FILE__)."/../".self::config_file); + return file_exists(dirname(__FILE__) . "/../" . self::config_file); } # On récupère les données de configuration présentes dans le fichier @@ -322,12 +312,12 @@ public static function is_setup() { private function load_config() { $ldap_config = array(); if (self::is_setup()) { - $path = dirname(__FILE__)."/../".self::config_file; + $path = dirname(__FILE__) . "/../" . self::config_file; include($path); $available_settings = get_object_vars($this); - foreach($available_settings as $key => $value) { - $varname = "ldap_".$key; + foreach ($available_settings as $key => $value) { + $varname = "ldap_" . $key; if (isset($$varname)) { $this->$key = $$varname; } @@ -338,25 +328,24 @@ private function load_config() { # Encodage d'un mot de passe utilisateur pour l'enregistrer # Ce code a été pris de phpLdapPasswd, par Karyl F. Stein # voir : http://www.karylstein.com/phpLdapPasswd - private function encode_password ($password = '', $encoding = '') { + private function encode_password($password = '', $encoding = '') { if ($encoding == '') $encoding = $this->password_encryption; if (strcasecmp($encoding, "clear") == 0) { $encodedpass = $password; } elseif (strcasecmp($encoding, "crypt") == 0) { - $encodedpass = "{CRYPT}".crypt($password); + $encodedpass = "{CRYPT}" . crypt($password); } elseif (strcasecmp($encoding, "md5") == 0) { - $encodedpass = "{MD5}".base64_encode(pack("H*",md5($password))); + $encodedpass = "{MD5}" . base64_encode(pack("H*", md5($password))); } elseif (strcasecmp($encoding, "ssha") == 0) { - mt_srand((double)microtime()*1000000); + mt_srand((double)microtime() * 1000000); $salt = mhash_keygen_s2k(MHASH_SHA1, $password, mb_substr(pack('h*', md5(mt_rand())), 0, 8), 4); - $encodedpass = "{SSHA}".base64_encode(mhash(MHASH_SHA1, $password.$salt).$salt); + $encodedpass = "{SSHA}" . base64_encode(mhash(MHASH_SHA1, $password . $salt) . $salt); } else { return false; - exit; } - return($encodedpass); + return ($encodedpass); } # Cette méthode prend trois paramètres : nom, prénom, nom complet. @@ -365,7 +354,7 @@ private function encode_password ($password = '', $encoding = '') { # courant d'avoir les nom et prénom présents de manière distincte dans # l'annuaire... private function format_name($_prenom, $_nom, $_nom_complet) { - $result = array(); + $result = []; if ($_prenom == '' and $_nom == '' and $_nom_complet == '') { // On n'a rien... On renvoie donc rien... $result['nom'] = ''; @@ -394,7 +383,7 @@ private function format_name($_prenom, $_nom, $_nom_complet) { } elseif ($_prenom != '' and $_nom != '' and $_nom_complet == '') { $result['prenom'] = $_prenom; $result['nom'] = $_nom; - $result['nom_complet'] = $_prenom." ".$_nom; + $result['nom_complet'] = $_prenom . " " . $_nom; } elseif ($_prenom != '' and $_nom != '' and $_nom_complet != '') { $result['prenom'] = $_prenom; $result['nom'] = $_nom; @@ -406,8 +395,7 @@ private function format_name($_prenom, $_nom, $_nom_complet) { # Cette méthode formatte des données utilisateurs au format accepté par ldap_add ou ldap_modify. # Les paramètres vides sont ignorés. private function format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, $_password, $_statut) { - - $data = array(); + $data = []; $data['objectClass'] = $this->people_object_classes; $data[$this->champ_login] = $_login; @@ -432,20 +420,17 @@ private function format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, // La civilité if ($_civilite != '' and $this->champ_civilite != '') { - switch ($_civilite) { - case "Mme": - $data[$this->champ_civilite] = $this->code_civilite_madame; - break; - case "Mlle": - $data[$this->champ_civilite] = $this->code_civilite_mademoiselle; - break; - case "M.": - $data[$this->champ_civilite] = $this->code_civilite_monsieur; - break; - default: - $data[$this->champ_civilite] = $this->code_civilite_madame; - break; - } + switch ($_civilite) { + case "Mlle": + $data[$this->champ_civilite] = $this->code_civilite_mademoiselle; + break; + case "M.": + $data[$this->champ_civilite] = $this->code_civilite_monsieur; + break; + default: + $data[$this->champ_civilite] = $this->code_civilite_madame; + break; + } } // Le mot de passe @@ -462,4 +447,3 @@ private function format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, } } -?> diff --git a/lib/Session.class.php b/lib/Session.class.php index 98527d4186..b60328c433 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -1,7 +1,7 @@ mysqli = $mysqli; + public function __construct($login_CAS_en_cours = false) { - if (!$login_CAS_en_cours) { - # On initialise la session - session_name("GEPI"); - set_error_handler("my_warning_handler", E_WARNING); - if(!isset($_SESSION)) { - session_start(); + global $temoin_pas_d_update_session_table_log; + global $mysqli; + $this->mysqli = $mysqli; + + if (!$login_CAS_en_cours) { + # On initialise la session + session_name("GEPI"); + set_error_handler("my_warning_handler", E_WARNING); + if (!isset($_SESSION)) { + session_start(); + } + restore_error_handler(); } - restore_error_handler(); - } # Avant de faire quoi que ce soit, on initialise le fuseau horaire if (isset($GLOBALS['timezone']) && $GLOBALS['timezone'] != '') { - $this->update_timezone($GLOBALS['timezone']); - } + $this->update_timezone($GLOBALS['timezone']); + } $this->maxLength = getSettingValue("sessionMaxLength"); $this->verif_CAS_multisite(); @@ -98,85 +97,84 @@ public function __construct($login_CAS_en_cours = false) { # On charge les valeurs déjà présentes en session $this->load_session_data(); # On charge des éléments de configuration liés à l'authentification - $this->auth_locale = getSettingValue("auth_locale") == 'yes' ? true : false; - $this->auth_ldap = getSettingValue("auth_ldap") == 'yes' ? true : false; - $this->auth_simpleSAML = getSettingValue("auth_simpleSAML") == 'yes' ? true : false; + $this->auth_locale = getSettingValue("auth_locale") == 'yes'; + $this->auth_ldap = getSettingValue("auth_ldap") == 'yes'; + $this->auth_simpleSAML = getSettingValue("auth_simpleSAML") == 'yes'; $this->auth_sso = in_array(getSettingValue("auth_sso"), array("lemon", "cas", "lcs")) ? getSettingValue("auth_sso") : false; if (!$this->is_anonymous()) { - # Il s'agit d'une session non anonyme qui existait déjà. - if (!$login_CAS_en_cours) { - if (isset($GLOBALS['niveau_arbo'])) { - if ($GLOBALS['niveau_arbo'] == "0") { - $logout_path = "./logout.php"; - } elseif ($GLOBALS['niveau_arbo'] == "2") { - $logout_path = "../../logout.php"; - } elseif ($GLOBALS['niveau_arbo'] == "3") { - $logout_path = "../../../logout.php"; - } else { - $logout_path = "../logout.php"; - } - } else { - $logout_path = "../logout.php"; - } - # On regarde s'il n'y a pas de timeout - if ($this->start && $this->timeout()) { - # timeout : on remet à zéro. - $debut_session = $_SESSION['start']; - $this->reset(3); - header("Location:".$logout_path."?auto=3&debut_session=".$debut_session."&session_id=".session_id()); - exit(); - } elseif (isset($GLOBALS['multisite']) && $GLOBALS['multisite'] == 'y') { - //echo ($_COOKIE['RNE'].' '.$this->rne);die; - if ($_COOKIE['RNE'] != $this->rne){ - //le rne a été modifié en cours de session - $this->reset(2); - header("Location:".$logout_path."?auto=0&session_id=".session_id()); - exit(); - } elseif ((getSettingValue('gepiSchoolRne')!='')&&(mb_strtoupper($_COOKIE['RNE']) != mb_strtoupper(getSettingValue('gepiSchoolRne')))) { - //le rne ne correspond pas à celui de la base - $this->reset(2); - header("Location:".$logout_path."?auto=2&session_id=".session_id()); - exit(); - } - } else { - $debug_maintien_session="n"; - if($debug_maintien_session=="y") { - $sql = "SELECT END from log where SESSION_ID = '" . session_id() . "' and START = '" . $this->start . "';"; - - if($this->mysqli !="") { - $result = mysqli_query($this->mysqli, $sql); - $tmp_fin_session = $result->fetch_object(); - $tmp_fin_session = $tmp_fin_session->END; - $result->close(); - } else { - $tmp_res_fin_session=mysqli_query($GLOBALS["mysqli"], $sql); - $tmp_fin_session=old_mysql_result($tmp_res_fin_session,0,'END'); - } - - } + # Il s'agit d'une session non anonyme qui existait déjà. + if (!$login_CAS_en_cours) { + if (isset($GLOBALS['niveau_arbo'])) { + if ($GLOBALS['niveau_arbo'] == "0") { + $logout_path = "./logout.php"; + } elseif ($GLOBALS['niveau_arbo'] == "2") { + $logout_path = "../../logout.php"; + } elseif ($GLOBALS['niveau_arbo'] == "3") { + $logout_path = "../../../logout.php"; + } else { + $logout_path = "../logout.php"; + } + } else { + $logout_path = "../logout.php"; + } + # On regarde s'il n'y a pas de timeout + if ($this->start && $this->timeout()) { + # timeout : on remet à zéro. + $debut_session = $_SESSION['start']; + $this->reset(3); + header("Location:" . $logout_path . "?auto=3&debut_session=" . $debut_session . "&session_id=" . session_id()); + exit(); + } elseif (isset($GLOBALS['multisite']) && $GLOBALS['multisite'] == 'y') { + //echo ($_COOKIE['RNE'].' '.$this->rne);die; + if ($_COOKIE['RNE'] != $this->rne) { + //le rne a été modifié en cours de session + $this->reset(2); + header("Location:" . $logout_path . "?auto=0&session_id=" . session_id()); + exit(); + } elseif ((getSettingValue('gepiSchoolRne') != '') && (mb_strtoupper($_COOKIE['RNE']) != mb_strtoupper(getSettingValue('gepiSchoolRne')))) { + //le rne ne correspond pas à celui de la base + $this->reset(2); + header("Location:" . $logout_path . "?auto=2&session_id=" . session_id()); + exit(); + } + } else { + $debug_maintien_session = "n"; + if ($debug_maintien_session == "y") { + $sql = "SELECT END from log where SESSION_ID = '" . session_id() . "' and START = '" . $this->start . "';"; + + if ($this->mysqli != "") { + $result = mysqli_query($this->mysqli, $sql); + $tmp_fin_session = $result->fetch_object(); + $tmp_fin_session = $tmp_fin_session->END; + $result->close(); + } else { + $tmp_res_fin_session = mysqli_query($GLOBALS["mysqli"], $sql); + $tmp_fin_session = old_mysql_result($tmp_res_fin_session, 0, 'END'); + } - if((!isset($temoin_pas_d_update_session_table_log))||($temoin_pas_d_update_session_table_log!="y")) { - # Pas de timeout : on met à jour le log - $this->update_log(); + } - if($debug_maintien_session=="y") { - $fich=fopen("/tmp/update_log.txt", "a+"); - fwrite($fich, strftime("%Y%m%d %H%M%S")." : Update log à $tmp_fin_session\n"); - fwrite($fich, "$sql\n"); - fclose($fich); - } - } - else { - if($debug_maintien_session=="y") { - $fich=fopen("/tmp/update_log.txt", "a+"); - fwrite($fich, strftime("%Y%m%d %H%M%S")." : Pas d update log \nLa fin de session reste à $tmp_fin_session\n".(isset($temoin_pas_d_update_session_table_log) ? "\$temoin_pas_d_update_session_table_log=".$temoin_pas_d_update_session_table_log : "\$temoin_pas_d_update_session_table_log non initialise")."\n"); - fwrite($fich, "$sql\n"); - fclose($fich); + if ((!isset($temoin_pas_d_update_session_table_log)) || ($temoin_pas_d_update_session_table_log != "y")) { + # Pas de timeout : on met à jour le log + $this->update_log(); + + if ($debug_maintien_session == "y") { + $fich = fopen("/tmp/update_log.txt", "a+"); + fwrite($fich, strftime("%Y%m%d %H%M%S") . " : Update log à $tmp_fin_session\n"); + fwrite($fich, "$sql\n"); + fclose($fich); + } + } else { + if ($debug_maintien_session == "y") { + $fich = fopen("/tmp/update_log.txt", "a+"); + fwrite($fich, strftime("%Y%m%d %H%M%S") . " : Pas d update log \nLa fin de session reste à $tmp_fin_session\n" . (isset($temoin_pas_d_update_session_table_log) ? "\$temoin_pas_d_update_session_table_log=" . $temoin_pas_d_update_session_table_log : "\$temoin_pas_d_update_session_table_log non initialise") . "\n"); + fwrite($fich, "$sql\n"); + fclose($fich); + } + } } } - } - } } } @@ -205,11 +203,10 @@ public function authenticate($_login = null, $_password = null) { // Quelques petits tests de sécurité - // Vérification de la liste noire des adresses IP - if (isset($GLOBALS['liste_noire_ip']) && in_array($_SERVER['REMOTE_ADDR'], $GLOBALS['liste_noire_ip'])) { - tentative_intrusion(1, "Tentative de connexion depuis une IP sur liste noire (login utilisé : ".$_login.")"); - return "3"; - die(); + // Vérification de la liste noire des adresses IP + if (isset($GLOBALS['liste_noire_ip']) && in_array($_SERVER['REMOTE_ADDR'], $GLOBALS['liste_noire_ip'])) { + tentative_intrusion(1, "Tentative de connexion depuis une IP sur liste noire (login utilisé : " . $_login . ")"); + return "3"; } if ($_login != null && mb_strtoupper($_login) != mb_strtoupper($this->login)) { @@ -217,104 +214,104 @@ public function authenticate($_login = null, $_password = null) { $this->reset("10"); } - if($debug_test_mdp=="y") { - $f_tmp=fopen($debug_test_mdp_file,"a+"); - fwrite($f_tmp,strftime("%a %d/%m/%Y - %H%M%S").": \$_login=$_login et \$_password=$_password\n"); + if ($debug_test_mdp == "y") { + $f_tmp = fopen($debug_test_mdp_file, "a+"); + fwrite($f_tmp, strftime("%a %d/%m/%Y - %H%M%S") . ": \$_login=$_login et \$_password=$_password\n"); fclose($f_tmp); - } - elseif($debug_login_nouveaux_comptes=="y") { - $loguer_nouveau_login="n"; - if(preg_match("/[A-Za-z0-9_\.-]/", $_login)) { - $sql="SELECT 1=1 FROM utilisateurs WHERE login='$_login' AND change_mdp='y';"; - - $resultat = mysqli_query($mysqli, $sql); - $nb_lignes = $resultat->num_rows; - $resultat->close(); - if($nb_lignes>0) { - $loguer_nouveau_login="y"; - - $f_tmp=fopen($debug_test_mdp_file,"a+"); - fwrite($f_tmp,strftime("%a %d/%m/%Y - %H%M%S").": \$_login=$_login et \$_password=$_password : "); - fclose($f_tmp); - } + } elseif ($debug_login_nouveaux_comptes == "y") { + $loguer_nouveau_login = "n"; + if (preg_match("/[A-Za-z0-9_-]/", $_login)) { + $sql = "SELECT 1=1 FROM utilisateurs WHERE login='$_login' AND change_mdp='y';"; + + $resultat = mysqli_query($mysqli, $sql); + $nb_lignes = $resultat->num_rows; + $resultat->close(); + if ($nb_lignes > 0) { + $loguer_nouveau_login = "y"; + + $f_tmp = fopen($debug_test_mdp_file, "a+"); + fwrite($f_tmp, strftime("%a %d/%m/%Y - %H%M%S") . ": \$_login=$_login et \$_password=$_password : "); + fclose($f_tmp); + } } } - // On initialise la session de l'utilisateur. - // On commence par extraire le mode d'authentification défini - // pour l'utilisateur. Si l'utilisateur n'existe pas, on essaiera - // l'authentification LDAP et le SSO quand même. + // On initialise la session de l'utilisateur. + // On commence par extraire le mode d'authentification défini + // pour l'utilisateur. Si l'utilisateur n'existe pas, on essaiera + // l'authentification LDAP et le SSO quand même. $auth_mode = self::user_auth_mode($_login); // 20140301 - $auth_sso_secours=isset($_POST['auth_sso_secours']) ? $_POST['auth_sso_secours'] : NULL; - if((isset($auth_sso_secours))&& - ($auth_sso_secours=="y")&& - ($_login!="")&& - ($_password!="")&& + $auth_sso_secours = isset($_POST['auth_sso_secours']) ? $_POST['auth_sso_secours'] : NULL; + if ((isset($auth_sso_secours)) && + ($auth_sso_secours == "y") && + ($_login != "") && + ($_password != "") && (getSettingAOui('autoriser_sso_password_auth'))) { - $auth_mode="gepi"; + $auth_mode = "gepi"; } switch ($auth_mode) { case "gepi": - # Authentification locale sur la base de données Gepi - $auth = $this->authenticate_gepi($_login,$_password); - break; + # Authentification locale sur la base de données Gepi + $auth = $this->authenticate_gepi($_login, $_password); + break; case "ldap": - # Authentification sur un serveur LDAP - $auth = $this->authenticate_ldap($_login,$_password); - break; - case "simpleSAML": - $auth = $this->authenticate_simpleSAML(); - break; + # Authentification sur un serveur LDAP + $auth = $this->authenticate_ldap($_login, $_password); + break; + case "simpleSAML": + $auth = $this->authenticate_simpleSAML(); + break; case "sso": - # Authentification gérée par un service de SSO - # On n'a pas besoin du login ni du mot de passe - switch ($this->auth_sso) { - case "cas": - $auth = $this->authenticate_cas(); - break; - case "lemon": - $auth = $this->authenticate_lemon(); - break; - case "lcs": - $auth = $this->authenticate_lcs(); - break; - } - break; + # Authentification gérée par un service de SSO + # On n'a pas besoin du login ni du mot de passe + switch ($this->auth_sso) { + case "cas": + $auth = $this->authenticate_cas(); + break; + case "lemon": + $auth = $this->authenticate_lemon(); + break; + case "lcs": + $auth = $this->authenticate_lcs(); + break; + } + break; case false: - # L'utilisateur n'existe pas dans la base de données ou bien - # n'a pas été passé en paramètre. - # On va donc tenter d'abord une authentification simpleSAML, puis LDAP, - # puis une authentification SSO, à condition que celles-ci - # soient bien sûr configurées. - if ($this->auth_ldap && $_login != null && $_password != null) { - $auth = $this->authenticate_ldap($_login,$_password); - }if ($this->auth_simpleSAML) { - $auth = $this->authenticate_simpleSAML(); - } else if ($this->auth_sso && $_login == null) { - // L'auth LDAP n'a pas marché, on essaie le SSO - switch ($this->auth_sso) { - case "cas": - $auth = $this->authenticate_cas(); - break; - case "lemon": - $auth = $this->authenticate_lemon(); - break; - case "lcs": - $auth = $this->authenticate_lcs(); - break; - } - } else { - $auth = false; - } - break; + # L'utilisateur n'existe pas dans la base de données ou bien + # n'a pas été passé en paramètre. + # On va donc tenter d'abord une authentification simpleSAML, puis LDAP, + # puis une authentification SSO, à condition que celles-ci + # soient bien sûr configurées. + if ($this->auth_ldap && $_login != null && $_password != null) { + $auth = $this->authenticate_ldap($_login, $_password); + } + if ($this->auth_simpleSAML) { + $auth = $this->authenticate_simpleSAML(); + } else if ($this->auth_sso && $_login == null) { + // L'auth LDAP n'a pas marché, on essaie le SSO + switch ($this->auth_sso) { + case "cas": + $auth = $this->authenticate_cas(); + break; + case "lemon": + $auth = $this->authenticate_lemon(); + break; + case "lcs": + $auth = $this->authenticate_lcs(); + break; + } + } else { + $auth = false; + } + break; default: - # Si on arrive là, c'est qu'il y a un problème avec la définition - # du mode d'authentification pour l'utilisateur en question. - $auth = false; - break; + # Si on arrive là, c'est qu'il y a un problème avec la définition + # du mode d'authentification pour l'utilisateur en question. + $auth = false; + break; } // A partir d'ici soit on a un avis d'échec de l'authentification, soit @@ -327,7 +324,7 @@ public function authenticate($_login = null, $_password = null) { // en paramètre. if (isset($GLOBALS['multisite']) && $GLOBALS['multisite'] == "y") { - if (!isset($_GET['rne']) AND (!isset($_COOKIE["RNE"]) OR $_COOKIE["RNE"] == 'RNE')) { + if (!isset($_GET['rne']) and (!isset($_COOKIE["RNE"]) or $_COOKIE["RNE"] == 'RNE')) { if (isset($GLOBALS['mode_choix_base']) && $GLOBALS['mode_choix_base'] == "url") { // dans ce cas, on se connecte à l'url $url_cas_sso donnée par le secure/connect.inc.php $t_rne = file_get_contents($GLOBALS[url_cas_sso] . '?login=' . $this->login . '&cle=' . $GLOBALS['cle_url_cas']); @@ -335,15 +332,15 @@ public function authenticate($_login = null, $_password = null) { $rep_rne = explode("|", $t_rne); $nbre_rne = count($rep_rne); if ($nbre_rne > 1) { - header("Location: choix_rne.php?nbre=".$nbre_rne."&lesrne=".$t_rne); + header("Location: choix_rne.php?nbre=" . $nbre_rne . "&lesrne=" . $t_rne); exit(); - } else{ + } else { if ($this->current_auth_mode == "sso") { setcookie('RNE', $t_rne, null, '/'); - header("Location: login_sso.php?rne=".$t_rne); + header("Location: login_sso.php?rne=" . $t_rne); exit(); } else { - header("Location: login.php?rne=".$t_rne); + header("Location: login.php?rne=" . $t_rne); exit(); } } @@ -361,32 +358,30 @@ public function authenticate($_login = null, $_password = null) { if ($test > 1) { // On envoie l'utilisateur choisir lui même son RNE $rnes = NULL; - for($a = 0 ; $a < $test ; $a++){ - $rnes .= $user["rne"][$a].'|'; + for ($a = 0; $a < $test; $a++) { + $rnes .= $user["rne"][$a] . '|'; } - header("Location: choix_rne.php?nbre=".$test."&lesrne=".$rnes); + header("Location: choix_rne.php?nbre=" . $test . "&lesrne=" . $rnes); exit(); - }else{ + } else { // Il n'y en a qu'un, on recharge ! if ($this->current_auth_mode == "sso") { setcookie('RNE', $user["rne"][0], null, '/'); - header("Location: login_sso.php?rne=".$user["rne"][0]); + header("Location: login_sso.php?rne=" . $user["rne"][0]); exit(); } else { - header("Location: login.php?rne=".$user["rne"][0]); + header("Location: login.php?rne=" . $user["rne"][0]); exit(); } } } else { return "8"; - exit(); } } else { return "8"; - exit(); } } } @@ -397,7 +392,6 @@ public function authenticate($_login = null, $_password = null) { if ($this->account_is_locked()) { $this->reset(2); return "2"; - exit(); } # On charge les données de l'utilisateur @@ -411,12 +405,11 @@ public function authenticate($_login = null, $_password = null) { $load = $this->import_user_profile_from_scribe(); # Sinon, on utilise l'import classique, très basique. - } elseif (getSettingValue("may_import_user_profile")=="yes") { + } elseif (getSettingValue("may_import_user_profile") == "yes") { $load = $this->import_user_profile(); } if (!$load) { return "6"; - exit(); } else { # Si l'import a réussi, on tente à nouveau de charger # les données de l'utilisateur. @@ -428,7 +421,6 @@ public function authenticate($_login = null, $_password = null) { if ($this->etat != "actif") { $this->reset(2); return "4"; - exit(); } # On vérifie que les connexions sont bien activées. @@ -436,19 +428,17 @@ public function authenticate($_login = null, $_password = null) { if ($this->statut != "administrateur" && ($disable_login == "yes" || $disable_login == "soft")) { $this->reset(2); return "7"; - exit(); } # On teste la cohérence de mode de connexion // 20140301 - if((!isset($auth_sso_secours))|| - ($auth_sso_secours!="y")|| + if ((!isset($auth_sso_secours)) || + ($auth_sso_secours != "y") || (!getSettingAOui('autoriser_sso_password_auth'))) { $auth_mode = self::user_auth_mode($this->login); if ($this->current_auth_mode != 'simpleSAML' && $auth_mode != $this->current_auth_mode) { $this->reset(2); return "5"; - exit; } } @@ -464,7 +454,7 @@ public function authenticate($_login = null, $_password = null) { $row = $sql_start->fetch_row(); $this->start = $row[0]; $sql_start->close(); - + $_SESSION['start'] = $this->start; $this->insert_log(); # On supprime l'historique des logs conformément à la durée définie. @@ -474,7 +464,6 @@ public function authenticate($_login = null, $_password = null) { # On envoie un mail, si l'option a été activée mail_connexion(); return "1"; - exit(); } else { // L'authentification a échoué. // On nettoie la session. @@ -486,7 +475,6 @@ public function authenticate($_login = null, $_password = null) { // d'attaque brute-force sur les logins. if ($this->record_failed_login($_login)) { return "2"; - exit(); } // On retourne le code d'erreur générique @@ -508,57 +496,51 @@ public function security_check() { # D'abord on regarde si on a une tentative d'accès anonyme à une page protégée : if ($this->auth_simpleSAML == 'yes') { - include_once(dirname(__FILE__).'/simplesaml/lib/_autoload.php'); + include_once(dirname(__FILE__) . '/simplesaml/lib/_autoload.php'); $auth = new SimpleSAML_Auth_GepiSimple(); if (!$this->login || !$auth->isAuthenticated()) { $this->authenticate(); } } else if ($this->is_anonymous()) { - if((!isset($pas_acces_a_une_page_sans_etre_logue))||($pas_acces_a_une_page_sans_etre_logue!="y")) { + if ((!isset($pas_acces_a_une_page_sans_etre_logue)) || ($pas_acces_a_une_page_sans_etre_logue != "y")) { tentative_intrusion(1, "Accès à une page sans être logué (peut provenir d'un timeout de session)."); } return "0"; - exit; } $sql = "SELECT statut, change_mdp, etat FROM utilisateurs where login = '" . $this->login . "'"; - - - $result = mysqli_query($mysqli, $sql); - $row = $result->fetch_object(); - $change_password = $row->change_mdp != "n" ? true : false; - $statut_ok = $this->statut == $row->statut ? true : false; - $etat_ok = $row->etat == "actif" ? true : false; - $login_allowed = getSettingValue("disable_login") == "yes" ? false : true; + + $result = mysqli_query($mysqli, $sql); + $row = $result->fetch_object(); + + $change_password = $row->change_mdp != "n"; + $statut_ok = $this->statut == $row->statut; + $etat_ok = $row->etat == "actif"; + $login_allowed = !(getSettingValue("disable_login") == "yes"); if (!$login_allowed && $this->statut != "administrateur") { return "0"; - exit; } if (!$statut_ok) { return "0"; - exit; } if (!$etat_ok) { return "0"; - exit; } - // Si on est là, ce que l'utilisateur a le droit de rester. + // Si on est là, c'est que l'utilisateur a le droit de rester. if ($change_password && - ($this->current_auth_mode == "gepi" || $this->current_auth_mode == "simpleSAML" || getSettingValue("ldap_write_access") == "yes")) - { - return "c"; - } + ($this->current_auth_mode == "gepi" || $this->current_auth_mode == "simpleSAML" || getSettingValue("ldap_write_access") == "yes")) { + return "c"; + } # Mieux vaut deux fois qu'une... - if ($statut_ok && $etat_ok && ($login_allowed || $this->statut == "administrateur")) { + if ($login_allowed || $this->statut == "administrateur") { return "1"; - exit; } } @@ -568,11 +550,10 @@ public static function user_auth_mode($_login) { global $mysqli; if ($_login == null) { return false; - die(); } - $sql = "SELECT auth_mode FROM utilisateurs WHERE UPPER(login) = '".mb_strtoupper($_login)."'"; - $resultat = mysqli_query($mysqli, $sql); + $sql = "SELECT auth_mode FROM utilisateurs WHERE UPPER(login) = '" . mb_strtoupper($_login) . "'"; + $resultat = mysqli_query($mysqli, $sql); $nb_lignes = $resultat->num_rows; if ($nb_lignes == 0) { return false; @@ -584,7 +565,7 @@ public static function user_auth_mode($_login) { } } - public function close ($_auto) { + public function close($_auto) { // $_auto_ reprend les codes de reset() $this->reset($_auto); } @@ -606,8 +587,8 @@ public function recreate_log() { } else { global $mysqli; - $sql = "SELECT login FROM utilisateurs WHERE login = '".$this->login."'"; - $resultat = mysqli_query($mysqli, $sql); + $sql = "SELECT login FROM utilisateurs WHERE login = '" . $this->login . "'"; + $resultat = mysqli_query($mysqli, $sql); $nb_lignes = $resultat->num_rows; $resultat->close(); @@ -624,7 +605,7 @@ public function recreate_log() { // Création d'une entrée de log public function insert_log() { global $mysqli; - include_once(dirname(__FILE__).'/HTMLPurifier.standalone.php'); + include_once(dirname(__FILE__) . '/HTMLPurifier.standalone.php'); $config = HTMLPurifier_Config::createDefault(); $config->set('Core.Encoding', 'utf-8'); // replace with your encoding $config->set('HTML.Doctype', 'XHTML 1.0 Strict'); // replace with your doctype @@ -653,14 +634,14 @@ private function update_log() { return false; } else { $sql = "UPDATE log SET END = now() + interval " . $this->maxLength . " minute where SESSION_ID = '" . session_id() . "' and START = '" . $this->start . "'"; - $res = mysqli_query($mysqli, $sql); + $res = mysqli_query($mysqli, $sql); } } // Dans le cas du multisite on vérifie si la session a été initialisée dans la bonne base - private function verif_CAS_multisite(){ - global $mysqli; - if (isset($_GET['rne']) AND $GLOBALS['multisite'] == 'y' AND isset($_SESSION["login"]) && getSettingValue("auth_simpleSAML") != 'yes') { + private function verif_CAS_multisite() { + global $mysqli; + if (isset($_GET['rne']) and $GLOBALS['multisite'] == 'y' and isset($_SESSION["login"]) && getSettingValue("auth_simpleSAML") != 'yes') { // Alors, on initialise la session ici if (!preg_match("/^[0-9A-Za-z]*$/", $_GET["rne"])) { @@ -700,15 +681,19 @@ private function register_logout($_auto) { $sql = "UPDATE log SET AUTOCLOSE = '" . $_auto . "', END = now() where SESSION_ID = '" . session_id() . "' and START = '" . $this->start . "'"; $res = mysqli_query($mysqli, $sql); - if((getSettingValue('csrf_log')=='y')&&(isset($_SESSION['login']))) { - $csrf_log_chemin=getSettingValue('csrf_log_chemin'); - if($csrf_log_chemin=='') {$csrf_log_chemin="/home/root/csrf";} + if ((getSettingValue('csrf_log') == 'y') && (isset($_SESSION['login']))) { + $csrf_log_chemin = getSettingValue('csrf_log_chemin'); + if ($csrf_log_chemin == '') { + $csrf_log_chemin = "/home/root/csrf"; + } //$f=fopen("$csrf_log_chemin/csrf_".$_SESSION['login'].".log","a+"); - $f=fopen("$csrf_log_chemin/csrf_".$_SESSION['login'].".log","a+"); - fwrite($f,"Fin de session ".strftime("%a %d/%m/%Y %H:%M:%S")." avec\n"); - if(isset($_SESSION['gepi_alea'])) {fwrite($f,"\$_SESSION['gepi_alea']=".$_SESSION['gepi_alea']."\n");} - fwrite($f,"$sql\n"); - fwrite($f,"-----------------\n"); + $f = fopen("$csrf_log_chemin/csrf_" . $_SESSION['login'] . ".log", "a+"); + fwrite($f, "Fin de session " . strftime("%a %d/%m/%Y %H:%M:%S") . " avec\n"); + if (isset($_SESSION['gepi_alea'])) { + fwrite($f, "\$_SESSION['gepi_alea']=" . $_SESSION['gepi_alea'] . "\n"); + } + fwrite($f, "$sql\n"); + fwrite($f, "-----------------\n"); fclose($f); } } @@ -728,14 +713,14 @@ private function reset($_auto = "0") { } if ($this->auth_simpleSAML == 'yes') { - include_once(dirname(__FILE__).'/simplesaml/lib/_autoload.php'); - $auth = new SimpleSAML_Auth_GepiSimple(); - if ($auth->isAuthenticated()) { - $auth->logout(); - //attention, cette fonction ->logout() ne retourne, pas, le reste du script ne sera pas éxécuter à partir de cette ligne. - //Il à y avoir un refresh automatique de la page suite au ->logout(), et donc le script va être re-éxecuter, avec cette fois - //$auth->isAuthenticated() qui vaudra false, et donc le reste du reset va être éxecuter - } + include_once(dirname(__FILE__) . '/simplesaml/lib/_autoload.php'); + $auth = new SimpleSAML_Auth_GepiSimple(); + if ($auth->isAuthenticated()) { + $auth->logout(); + //attention, cette fonction ->logout() ne retourne, pas, le reste du script ne sera pas éxécuter à partir de cette ligne. + //Il à y avoir un refresh automatique de la page suite au ->logout(), et donc le script va être re-éxecuter, avec cette fois + //$auth->isAuthenticated() qui vaudra false, et donc le reste du reset va être éxecuter + } } // Détruit toutes les variables de session @@ -744,7 +729,7 @@ private function reset($_auto = "0") { // Détruit le cookie sur le navigateur $CookieInfo = session_get_cookie_params(); - @setcookie(session_name(), '', time()-3600, $CookieInfo['path']); + @setcookie(session_name(), '', time() - 3600, $CookieInfo['path']); // détruit la session sur le serveur @@ -753,12 +738,12 @@ private function reset($_auto = "0") { //on redémarre une nouvelle session session_start(); session_regenerate_id(); - + $this->login = null; - + //si une url de portail est donnée, on redirige if (isset($_REQUEST['portal_return_url'])) { - header('Location:'.$_REQUEST['portal_return_url']); + header('Location:' . $_REQUEST['portal_return_url']); die; } } @@ -767,145 +752,143 @@ private function load_session_data() { # On ne met à jour que si la variable de session est assignée. # Si elle est assignée et null, on met 'false'. if (isset($_SESSION['login'])) { - $this->login = $_SESSION['login'] != null ? $_SESSION["login"] : false; + $this->login = $_SESSION['login'] != null ? $_SESSION["login"] : false; } if (isset($_SESSION['nom'])) { - $this->nom = $_SESSION['nom'] != null ? $_SESSION["nom"] : false; + $this->nom = $_SESSION['nom'] != null ? $_SESSION["nom"] : false; } if (isset($_SESSION['prenom'])) { - $this->prenom = $_SESSION['prenom'] != null ? $_SESSION["prenom"] : false; + $this->prenom = $_SESSION['prenom'] != null ? $_SESSION["prenom"] : false; } if (isset($_SESSION['statut'])) { - $this->statut = $_SESSION['statut'] != null ? $_SESSION["statut"] : false; + $this->statut = $_SESSION['statut'] != null ? $_SESSION["statut"] : false; } if (isset($_SESSION['start'])) { - $this->start = $_SESSION['start'] != null ? $_SESSION["start"] : false; + $this->start = $_SESSION['start'] != null ? $_SESSION["start"] : false; } if (isset($_SESSION['matiere'])) { - $this->matiere = $_SESSION['matiere'] != null ? $_SESSION["matiere"] : false; + $this->matiere = $_SESSION['matiere'] != null ? $_SESSION["matiere"] : false; } if (isset($_SESSION['rne'])) { - $this->rne = $_SESSION['rne'] != null ? $_SESSION["rne"] : false; + $this->rne = $_SESSION['rne'] != null ? $_SESSION["rne"] : false; } if (isset($_SESSION['statut_special'])) { - $this->statut_special = $_SESSION['statut_special'] != null ? $_SESSION["statut_special"] : false; + $this->statut_special = $_SESSION['statut_special'] != null ? $_SESSION["statut_special"] : false; } if (isset($_SESSION['statut_special_id'])) { - $this->statut_special_id = $_SESSION['statut_special_id'] != null ? $_SESSION["statut_special_id"] : false; + $this->statut_special_id = $_SESSION['statut_special_id'] != null ? $_SESSION["statut_special_id"] : false; } if (isset($_SESSION['maxLength'])) { - $this->maxLength = $_SESSION['maxLength'] != null ? $_SESSION["maxLength"] : false; + $this->maxLength = $_SESSION['maxLength'] != null ? $_SESSION["maxLength"] : false; } if (isset($_SESSION['current_auth_mode'])) { - $this->current_auth_mode = $_SESSION['current_auth_mode'] != null ? $_SESSION["current_auth_mode"] : false; + $this->current_auth_mode = $_SESSION['current_auth_mode'] != null ? $_SESSION["current_auth_mode"] : false; } } - function authenticate_gepi($_login,$_password) { + function authenticate_gepi($_login, $_password) { global $debug_test_mdp, $debug_test_mdp_file; global $debug_login_nouveaux_comptes, $loguer_nouveau_login; global $mysqli; - $sql = "SELECT login, password FROM utilisateurs WHERE (login = '" . $_login . "' and etat != 'inactif')"; - $resultat = mysqli_query($mysqli, $sql); - $nb_lignes = $resultat->num_rows; - if ($nb_lignes == "1") { - $result_query = $resultat->fetch_object(); - $sql_salt = "SELECT salt FROM utilisateurs WHERE (login = '" . $_login . "' and etat != 'inactif')"; - $query_salt = mysqli_query($mysqli, $sql_salt); - if ($query_salt !== false) { - $row = $query_salt->fetch_row(); - $db_salt = $row[0]; - $query_salt->close(); - } else { - $db_salt = ''; - } - $db_password = $result_query->password; - # Un compte existe avec ce login - if ($db_salt == '') { - //on va tester avec le md5 - if ($db_password == md5($_password)) { - } else { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Recu: '.$_password."\n"); - $tmp_mdp = array_flip (get_html_translation_table(HTML_ENTITIES)); - $_password_unhtmlentities = strtr ($_password, $tmp_mdp); - if ($db_password == md5($_password_unhtmlentities)) { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 OK avec unhtmlentities()'."\n"); - } else { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 en echec avec et sans modification unhtmlentities'."\n"); - return false; - } - } - //l'authentification est réussie sinon on serait déjà sorti de la fonction - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 OK'."\n"); - $sql_show = "SHOW COLUMNS FROM utilisateurs LIKE 'salt';"; - $query_show = mysqli_query($mysqli, $sql_show); - if ($query_show->num_rows > 0) { - //on va passer le hash en hmac scha256 - $salt = md5(uniqid(rand(), 1)); - $hmac_password = hash_hmac('sha256', $_password, $salt); - $sql_update = "UPDATE utilisateurs SET password = '".$hmac_password."', salt = '".$salt."' WHERE login = '".$_login."'"; - $update_query = mysqli_query($mysqli, $sql_update); - if ($update_query) { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Password ameliore en hmac'."\n"); - } else { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Echec password ameliore en hmac'."\n"); - } - } - - } else { - //login deja en hmac sha256 - if ($db_password == hash_hmac('sha256', $_password, $db_salt)) { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac OK sans modification'."\n"); - } else { - $tmp_mdp = array_flip (get_html_translation_table(HTML_ENTITIES)); - $_password_unhtmlentities = strtr ($_password, $tmp_mdp); - if ($db_password == hash_hmac('sha256', $_password_unhtmlentities, $db_salt)) { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac OK avec unhtmlentities()'."\n"); - } else { - $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac en echec avec et sans modification unhtmlentities'."\n"); - return false; - } - } - } - //si le login fait échec, la fonction a déjà retourné avec false - $this->login = $result_query->login; - $this->current_auth_mode = "gepi"; - return true; - - } else { - # Le login est erroné (n'existe pas dans la base) - return false; - } - $resultat->close(); + $sql = "SELECT login, password FROM utilisateurs WHERE (login = '" . $_login . "' and etat != 'inactif')"; + $resultat = mysqli_query($mysqli, $sql); + $nb_lignes = $resultat->num_rows; + if ($nb_lignes == "1") { + $result_query = $resultat->fetch_object(); + $sql_salt = "SELECT salt FROM utilisateurs WHERE (login = '" . $_login . "' and etat != 'inactif')"; + $query_salt = mysqli_query($mysqli, $sql_salt); + if ($query_salt !== false) { + $row = $query_salt->fetch_row(); + $db_salt = $row[0]; + $query_salt->close(); + } else { + $db_salt = ''; + } + $db_password = $result_query->password; + # Un compte existe avec ce login + if ($db_salt == '') { + //on va tester avec le md5 + if ($db_password != md5($_password)) { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Recu: ' . $_password . "\n"); + $tmp_mdp = array_flip(get_html_translation_table(HTML_ENTITIES)); + $_password_unhtmlentities = strtr($_password, $tmp_mdp); + if ($db_password == md5($_password_unhtmlentities)) { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 OK avec unhtmlentities()' . "\n"); + } else { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 en echec avec et sans modification unhtmlentities' . "\n"); + return false; + } + } + //l'authentification est réussie sinon on serait déjà sorti de la fonction + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification md5 OK' . "\n"); + $sql_show = "SHOW COLUMNS FROM utilisateurs LIKE 'salt';"; + $query_show = mysqli_query($mysqli, $sql_show); + if ($query_show->num_rows > 0) { + //on va passer le hash en hmac scha256 + $salt = md5(uniqid(rand(), 1)); + $hmac_password = hash_hmac('sha256', $_password, $salt); + $sql_update = "UPDATE utilisateurs SET password = '" . $hmac_password . "', salt = '" . $salt . "' WHERE login = '" . $_login . "'"; + $update_query = mysqli_query($mysqli, $sql_update); + if ($update_query) { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Password ameliore en hmac' . "\n"); + } else { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Echec password ameliore en hmac' . "\n"); + } + } + + } else { + //login deja en hmac sha256 + if ($db_password == hash_hmac('sha256', $_password, $db_salt)) { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac OK sans modification' . "\n"); + } else { + $tmp_mdp = array_flip(get_html_translation_table(HTML_ENTITIES)); + $_password_unhtmlentities = strtr($_password, $tmp_mdp); + if ($db_password == hash_hmac('sha256', $_password_unhtmlentities, $db_salt)) { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac OK avec unhtmlentities()' . "\n"); + } else { + $this->debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, 'Authentification hmac en echec avec et sans modification unhtmlentities' . "\n"); + return false; + } + } + } + //si le login fait échec, la fonction a déjà retourné avec false + $this->login = $result_query->login; + $this->current_auth_mode = "gepi"; + return true; + + } else { + # Le login est erroné (n'existe pas dans la base) + return false; + } + $resultat->close(); + } + + static function change_password_gepi($user_login, $password) { + global $mysqli; + $sql = "SHOW COLUMNS FROM utilisateurs LIKE 'salt';"; + + $resultat = mysqli_query($mysqli, $sql); + if ($resultat->num_rows > 0) { + $salt = md5(uniqid(rand(), 1)); + $hmac_password = hash_hmac('sha256', $password, $salt); + $result = mysqli_query($mysqli, "UPDATE utilisateurs SET password='$hmac_password', salt = '$salt' WHERE login='" . $user_login . "'"); + $resultat->close(); + return $result; + } else { + $result = mysqli_query($mysqli, "UPDATE utilisateurs SET password='" . md5($password) . "' WHERE login='" . $user_login . "'"); + $resultat->close(); + return $result; + } + } - static function change_password_gepi($user_login,$password) { - global $mysqli; - $sql = "SHOW COLUMNS FROM utilisateurs LIKE 'salt';"; - - $resultat = mysqli_query($mysqli, $sql); - if ($resultat->num_rows > 0) { - $salt = md5(uniqid(rand(), 1)); - $hmac_password = hash_hmac('sha256', $password, $salt); - $result = mysqli_query($mysqli, "UPDATE utilisateurs SET password='$hmac_password', salt = '$salt' WHERE login='" . $user_login . "'"); - $resultat->close(); - return $result; - } else { - $result = mysqli_query($mysqli, "UPDATE utilisateurs SET password='".md5($password)."' WHERE login='" . $user_login . "'"); - $resultat->close(); - return $result; - } - - } - - private function authenticate_ldap($_login,$_password) { + private function authenticate_ldap($_login, $_password) { if ($_login == null || $_password == null) { return false; - exit(); } $ldap_server = new LDAPServer; - if ($ldap_server->authenticate_user($_login,$_password)) { + if ($ldap_server->authenticate_user($_login, $_password)) { $this->login = $_login; $this->current_auth_mode = "ldap"; return true; @@ -980,14 +963,14 @@ private function authenticate_cas() { // Extractions des attributs supplémentaires, le cas échéant $tab = phpCAS::getAttributes(); - $attributs = array('prenom','nom','email'); - foreach($attributs as $attribut) { - $code_attribut = getSettingValue('cas_attribut_'.$attribut); + $attributs = array('prenom', 'nom', 'email'); + foreach ($attributs as $attribut) { + $code_attribut = getSettingValue('cas_attribut_' . $attribut); // Si un attribut a été spécifié, on va le chercher if (!empty($code_attribut)) { if (isset($tab[$code_attribut])) { $valeur = $tab[$code_attribut]; - if (!empty($valeur)){ + if (!empty($valeur)) { // L'attribut est trouvé et non vide, on l'assigne pour mettre à jour l'utilisateur // On s'assure que la chaîne est bien enregistrée en UTF-8. $valeur = ensure_utf8($valeur); @@ -999,8 +982,7 @@ private function authenticate_cas() { return true; } - private function test_loginsso() - { + private function test_loginsso() { global $mysqli; $requete = "SELECT login_gepi FROM sso_table_correspondance WHERE login_sso='$this->login_sso'"; @@ -1010,14 +992,14 @@ private function test_loginsso() return "0"; } else { return $valeur[0]; - } + } } public function logout_cas() { include_once('CAS.php'); // config_cas.inc.php est le fichier d'informations de connexions au serveur cas - $path = dirname(__FILE__)."/../secure/config_cas.inc.php"; + $path = dirname(__FILE__) . "/../secure/config_cas.inc.php"; include($path); // Le premier argument est la version du protocole CAS @@ -1025,11 +1007,11 @@ public function logout_cas() { phpCAS::setLang(PHPCAS_LANG_FRENCH); if ($cas_use_logout) { phpCAS::logout(); - }else{ + } else { if ($cas_logout_url != '') { - header("Location:".$cas_logout_url); + header("Location:" . $cas_logout_url); exit(); - }else{ + } else { // Il faudra trouver mieux echo 'GEPI

Vous êtes déconnecté.

'; exit(); @@ -1054,11 +1036,11 @@ public function logout_cas() { } private function authenticate_simpleSAML() { - include_once(dirname(__FILE__).'/simplesaml/lib/_autoload.php'); + include_once(dirname(__FILE__) . '/simplesaml/lib/_autoload.php'); $auth = new SimpleSAML_Auth_GepiSimple(); $auth->requireAuth(); $attributes = $auth->getAttributes(); - + //exploitation des attributs if (empty($attributes)) { //authentification échouée @@ -1067,23 +1049,23 @@ private function authenticate_simpleSAML() { $this->login = $attributes['login_gepi'][0]; $this->current_auth_mode = "simpleSAML"; - - // Extractions des attributs supplémentaires, le cas échéant - // inutile pour le moment + + // Extractions des attributs supplémentaires, le cas échéant + // inutile pour le moment return true; } - + private function authenticate_lemon() { #TODO: Vérifier que ça marche bien comme ça !! - if (isset($_GET['login'])) $login = $_GET['login']; else $login = ""; - if (isset($_COOKIE['user'])) $cookie_user = $_COOKIE['user']; else $cookie_user=""; - if(empty($cookie_user) or $cookie_user != $login) { - return false; - } else { - $this->login = $login; - $this->current_auth_mode = "sso"; - return true; - } + if (isset($_GET['login'])) $login = $_GET['login']; else $login = ""; + if (isset($_COOKIE['user'])) $cookie_user = $_COOKIE['user']; else $cookie_user = ""; + if (empty($cookie_user) or $cookie_user != $login) { + return false; + } else { + $this->login = $login; + $this->current_auth_mode = "sso"; + return true; + } } private function authenticate_lcs() { @@ -1104,21 +1086,21 @@ private function authenticate_lcs() { $dbPass = $GLOBALS['dbPass']; $dbDb = $GLOBALS['dbDb']; - if ($login!="") { - list($user, $groups)=people_get_variables($login, false); + if ($login != "") { + list($user, $groups) = people_get_variables($login, false); #TODO: Utiliser les infos des lignes ci-dessous pour mettre à jour # les informations de l'utilisateur dans la base. $lcs_tab_login["nom"] = $user["nom"]; $lcs_tab_login["email"] = $user["email"]; $long = mb_strlen($user["fullname"]) - mb_strlen($user["nom"]); - $lcs_tab_login["fullname"] = mb_substr($user["fullname"], 0, $long) ; + $lcs_tab_login["fullname"] = mb_substr($user["fullname"], 0, $long); // A ce stade, l'utilisateur est authentifié // Etablir à nouveau la connexion à la base if (isset($GLOBALS['db_nopersist']) && !$GLOBALS['db_nopersist']) - $db_c = ($GLOBALS["mysqli"] = mysqli_connect($dbHost, $dbUser, $dbPass)); + $db_c = ($GLOBALS["mysqli"] = mysqli_connect($dbHost, $dbUser, $dbPass)); else - $db_c = ($GLOBALS["mysqli"] = mysqli_connect($dbHost, $dbUser, $dbPass)); + $db_c = ($GLOBALS["mysqli"] = mysqli_connect($dbHost, $dbUser, $dbPass)); if (!$db_c || !((bool)mysqli_query($GLOBALS["mysqli"], "USE $dbDb"))) { echo "\n

Erreur : Echec de la connexion à la base de données"; @@ -1127,10 +1109,9 @@ private function authenticate_lcs() { $this->login = $login; $this->current_auth_mode = "sso"; return true; - exit; } else { // L'utilisateur n'a pas été identifié' - header("Location:".LCS_PAGE_AUTHENTIF); + header("Location:" . LCS_PAGE_AUTHENTIF); exit; } } @@ -1138,11 +1119,10 @@ private function authenticate_lcs() { # Cette méthode charge en session les données de l'utilisateur, # à la suite d'une authentification réussie. public function load_user_data() { - global $mysqli; + global $mysqli; # Petit test de départ pour être sûr : if (!$this->login || $this->login == null) { return false; - exit(); } # Gestion du multisite : on a besoin du RNE de l'utilisateur. @@ -1155,98 +1135,96 @@ public function load_user_data() { } # On interroge la base de données - $sql = "SELECT login, nom, prenom, email, statut, etat, now() start, change_mdp, auth_mode FROM utilisateurs WHERE (login = '".$this->login."')"; - - if($this->mysqli !="") { - $query = mysqli_query($this->mysqli, $sql); - # Est-ce qu'on a bien une entrée ? - if ($query->num_rows != "1") { - return false; - exit(); - } - $sql = "SELECT id_matiere FROM j_professeurs_matieres WHERE (id_professeur = '" . $this->login . "') ORDER BY ordre_matieres LIMIT 1"; - $matiere_principale = sql_query1($sql); - $row = $query->fetch_object(); - } else { - $query = mysqli_query($GLOBALS["mysqli"], $sql); - - # Est-ce qu'on a bien une entrée ? - if (mysqli_num_rows($query) != "1") { - return false; - exit(); - } - - $sql = "SELECT id_matiere FROM j_professeurs_matieres WHERE (id_professeur = '" . $this->login . "') ORDER BY ordre_matieres LIMIT 1"; - $matiere_principale = sql_query1($sql); - - $row = mysqli_fetch_object($query); - } - - $_SESSION['login'] = $this->login; + $sql = "SELECT login, nom, prenom, email, statut, etat, now() start, change_mdp, auth_mode FROM utilisateurs WHERE (login = '" . $this->login . "')"; + + if ($this->mysqli != "") { + $query = mysqli_query($this->mysqli, $sql); + # Est-ce qu'on a bien une entrée ? + if ($query->num_rows != "1") { + return false; + } + $sql = "SELECT id_matiere FROM j_professeurs_matieres WHERE (id_professeur = '" . $this->login . "') ORDER BY ordre_matieres LIMIT 1"; + $matiere_principale = sql_query1($sql); + $row = $query->fetch_object(); + } else { + $query = mysqli_query($GLOBALS["mysqli"], $sql); + + # Est-ce qu'on a bien une entrée ? + if (mysqli_num_rows($query) != "1") { + return false; + } + + $sql = "SELECT id_matiere FROM j_professeurs_matieres WHERE (id_professeur = '" . $this->login . "') ORDER BY ordre_matieres LIMIT 1"; + $matiere_principale = sql_query1($sql); + + $row = mysqli_fetch_object($query); + } + + $_SESSION['login'] = $this->login; if ($row->login != null) { - $_SESSION['login'] = $row->login; + $_SESSION['login'] = $row->login; } else { - $_SESSION['login'] = $this->login; + $_SESSION['login'] = $this->login; } - $_SESSION['prenom'] = $row->prenom; - $_SESSION['nom'] = $row->nom; + $_SESSION['prenom'] = $row->prenom; + $_SESSION['nom'] = $row->nom; $_SESSION['email'] = $row->email; - $_SESSION['statut'] = $row->statut; - $_SESSION['start'] = $row->start; - $_SESSION['matiere'] = $matiere_principale; - $_SESSION['rne'] = $this->rne; - $_SESSION['current_auth_mode'] = $this->current_auth_mode; + $_SESSION['statut'] = $row->statut; + $_SESSION['start'] = $row->start; + $_SESSION['matiere'] = $matiere_principale; + $_SESSION['rne'] = $this->rne; + $_SESSION['current_auth_mode'] = $this->current_auth_mode; - # L'état de l'utilisateur n'est pas stocké en session, mais seulement en interne - # pour pouvoir effectuer quelques tests : - $this->etat = $row->etat; + # L'état de l'utilisateur n'est pas stocké en session, mais seulement en interne + # pour pouvoir effectuer quelques tests : + $this->etat = $row->etat; // Ajout pour les statuts privés - if ($_SESSION['statut'] == 'autre') { + if ($_SESSION['statut'] == 'autre') { - // On charge aussi le statut spécial - $sql = "SELECT ds.id, ds.nom_statut FROM droits_statut ds, droits_utilisateurs du - WHERE du.login_user = '".$this->login."' + // On charge aussi le statut spécial + $sql = "SELECT ds.id, ds.nom_statut FROM droits_statut ds, droits_utilisateurs du + WHERE du.login_user = '" . $this->login . "' AND du.id_statut = ds.id"; - - $query = mysqli_query($mysqli, $sql); - $result = $query->fetch_object(); - + + $query = mysqli_query($mysqli, $sql); + $result = $query->fetch_object(); + $_SESSION['statut_special'] = $result->nom_statut; $_SESSION['statut_special_id'] = $result->id; - } + } + - //generate_token($_SESSION['login']); generate_token(); - # On charge les données dans l'instance de Session. - $this->load_session_data(); - return true; + # On charge les données dans l'instance de Session. + $this->load_session_data(); + return true; } public function record_failed_login($_login) { - global $mysqli; - - include_once(dirname(__FILE__).'/HTMLPurifier.standalone.php'); - $config = HTMLPurifier_Config::createDefault(); - $config->set('Core.Encoding', 'utf-8'); // replace with your encoding - $config->set('HTML.Doctype', 'XHTML 1.0 Strict'); // replace with your doctype - $purifier = new HTMLPurifier($config); - + global $mysqli; + + include_once(dirname(__FILE__) . '/HTMLPurifier.standalone.php'); + $config = HTMLPurifier_Config::createDefault(); + $config->set('Core.Encoding', 'utf-8'); // replace with your encoding + $config->set('HTML.Doctype', 'XHTML 1.0 Strict'); // replace with your doctype + $purifier = new HTMLPurifier($config); + # Une tentative de login avec un mot de passe erronnée a été détectée. - $sql_login = "SELECT login FROM utilisateurs WHERE (login = '".$_login."')"; - - $resultat = mysqli_query($mysqli, $sql_login); - $test_login = $resultat->num_rows; + $sql_login = "SELECT login FROM utilisateurs WHERE (login = '" . $_login . "')"; + + $resultat = mysqli_query($mysqli, $sql_login); + $test_login = $resultat->num_rows; if ($test_login != "0") { - tentative_intrusion(1, "Tentative de connexion avec un mot de passe incorrect. Ce peut être simplement une faute de frappe. Cette alerte n'est significative qu'en cas de répétition. (login : ".$_login.")"); + tentative_intrusion(1, "Tentative de connexion avec un mot de passe incorrect. Ce peut être simplement une faute de frappe. Cette alerte n'est significative qu'en cas de répétition. (login : " . $_login . ")"); # On a un vrai login. # On enregistre un log d'erreur de connexion. - $sql = "insert into log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values ( + $sql = "insert into log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values ( '" . $_login . "', now(), '', @@ -1255,34 +1233,34 @@ public function record_failed_login($_login) { '" . $purifier->purify($_SERVER['HTTP_REFERER']) . "', '4', now());"; - $res = mysqli_query($mysqli, $sql); - - // On compte de nombre de tentatives infructueuse issues de la même adresse IP - $sql = "select LOGIN from log where + $res = mysqli_query($mysqli, $sql); + + // On compte de nombre de tentatives infructueuse issues de la même adresse IP + $sql = "select LOGIN from log where LOGIN = '" . $_login . "' and START > now() - interval " . getSettingValue("temps_compte_verrouille") . " minute and - REMOTE_ADDR = '".$_SERVER['REMOTE_ADDR']."' + REMOTE_ADDR = '" . $_SERVER['REMOTE_ADDR'] . "' "; - $res_test = mysqli_query($mysqli, $sql); - if ($res_test->num_rows > getSettingValue("nombre_tentatives_connexion")) { - $this->lock_account($_login); - $resultat->close(); - return true; - } else { - $resultat->close(); - return false; - } - } else { - tentative_intrusion(1, "Tentative de connexion avec un login incorrect (n'existe pas dans la base Gepi). Ce peut être simplement une faute de frappe. Cette alerte n'est significative qu'en cas de répétition. (login utilisé : ".$_login.")"); - // Le login n'existe pas. On fait donc un test sur l'IP. - $sql = "select LOGIN from log where + $res_test = mysqli_query($mysqli, $sql); + if ($res_test->num_rows > getSettingValue("nombre_tentatives_connexion")) { + $this->lock_account($_login); + $resultat->close(); + return true; + } else { + $resultat->close(); + return false; + } + } else { + tentative_intrusion(1, "Tentative de connexion avec un login incorrect (n'existe pas dans la base Gepi). Ce peut être simplement une faute de frappe. Cette alerte n'est significative qu'en cas de répétition. (login utilisé : " . $_login . ")"); + // Le login n'existe pas. On fait donc un test sur l'IP. + $sql = "select LOGIN from log where START > now() - interval " . getSettingValue("temps_compte_verrouille") . " minute and - REMOTE_ADDR = '".$purifier->purify($_SERVER['REMOTE_ADDR'])."'"; - $res_test = mysqli_query($mysqli, $sql); - if ($res_test->num_rows <= 10) { - // On a moins de 10 enregistrements. On enregistre et on ne renvoie pas de code - // de verrouillage. - $sql = "insert into log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values ( + REMOTE_ADDR = '" . $purifier->purify($_SERVER['REMOTE_ADDR']) . "'"; + $res_test = mysqli_query($mysqli, $sql); + if ($res_test->num_rows <= 10) { + // On a moins de 10 enregistrements. On enregistre et on ne renvoie pas de code + // de verrouillage. + $sql = "insert into log (LOGIN, START, SESSION_ID, REMOTE_ADDR, USER_AGENT, REFERER, AUTOCLOSE, END) values ( '" . $_login . "', now(), '', @@ -1293,46 +1271,46 @@ public function record_failed_login($_login) { now() ) ;"; - $res = mysqli_query($mysqli, $sql); - $resultat->close(); - return false; - } else { - // On a 10 entrées, on renvoie un code d'erreur de verouillage. - $resultat->close(); - return true; - } - } - - $resultat->close(); + $res = mysqli_query($mysqli, $sql); + $resultat->close(); + return false; + } else { + // On a 10 entrées, on renvoie un code d'erreur de verouillage. + $resultat->close(); + return true; + } + } + + $resultat->close(); } - + # Verrouillage d'un compte en raison d'un trop grand nombre d'échec de connexion. private function lock_account($_login) { - global $mysqli; - if ((!isset($GLOBALS['bloque_compte_admin'])) or ($GLOBALS['bloque_compte_admin'] != "n")) { - // On verrouille le compte même si c'est un admin - $reg_data = mysqli_query($mysqli,"UPDATE utilisateurs SET date_verrouillage=now() WHERE login='".$_login."'" ); - - } else { - // on ne bloque pas le compte d'un administrateur - $reg_data = mysqli_query($mysqli,"UPDATE utilisateurs SET date_verrouillage=now() WHERE login='".$_login."' and statut!='administrateur'"); - - } - # On enregistre une alerte de sécurité. - tentative_intrusion(2, "Verrouillage du compte ".$_login." en raison d'un trop grand nombre de tentatives de connexion infructueuses. Ce peut être une tentative d'attaque brute-force.", $_login); - return true; + global $mysqli; + if ((!isset($GLOBALS['bloque_compte_admin'])) or ($GLOBALS['bloque_compte_admin'] != "n")) { + // On verrouille le compte même si c'est un admin + $reg_data = mysqli_query($mysqli, "UPDATE utilisateurs SET date_verrouillage=now() WHERE login='" . $_login . "'"); + + } else { + // on ne bloque pas le compte d'un administrateur + $reg_data = mysqli_query($mysqli, "UPDATE utilisateurs SET date_verrouillage=now() WHERE login='" . $_login . "' and statut!='administrateur'"); + + } + # On enregistre une alerte de sécurité. + tentative_intrusion(2, "Verrouillage du compte " . $_login . " en raison d'un trop grand nombre de tentatives de connexion infructueuses. Ce peut être une tentative d'attaque brute-force.", $_login); + return true; } # Renvoie true ou false selon que le compte est bloqué ou non. private function account_is_locked() { - global $mysqli; - $sql_verrouillage = "select login, statut from utilisateurs where + global $mysqli; + $sql_verrouillage = "select login, statut from utilisateurs where login = '" . $this->login . "' and date_verrouillage > now() - interval " . getSettingValue("temps_compte_verrouille") . " minute "; - $test_verrouillage = sql_query1($sql_verrouillage); - + $test_verrouillage = sql_query1($sql_verrouillage); + if ($test_verrouillage != "-1") { // Le compte est verrouillé. if ($this->statut == "administrateur" and $GLOBALS['bloque_compte_admin'] != "n") { @@ -1347,45 +1325,43 @@ private function account_is_locked() { } private function import_user_profile() { - global $mysqli; + global $mysqli; # On ne peut arriver ici quand dans le cas où on a une authentification réussie. # L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP if (!LDAPServer::is_setup()) { return false; - die(); } else { # Le serveur LDAP est configuré, on y va. # Encore un dernier petit test quand même : est-ce que l'utilisateur # est bien absent de la base. - $sql = "SELECT login FROM utilisateurs WHERE (login = '".$this->login."')"; - - $resultat = mysqli_query($mysqli, $sql); - if ($resultat->num_rows != "0") { - $resultat->close(); - return false; - die(); - } - $resultat->close(); + $sql = "SELECT login FROM utilisateurs WHERE (login = '" . $this->login . "')"; + + $resultat = mysqli_query($mysqli, $sql); + if ($resultat->num_rows != "0") { + $resultat->close(); + return false; + } + $resultat->close(); $ldap_server = new LDAPServer; $user = $ldap_server->get_user_profile($this->login); if ($user) { # On ne refait pas de tests ou de formattage. La méthode get_user_profile # s'occupe de tout. - $sql = "INSERT INTO utilisateurs SET - login = '".$this->login."', - prenom = '".$user["prenom"]."', - nom = '".$user["nom"]."', - email = '".$user["email"]."', - civilite = '".$user["civilite"]."', - statut = '".$user["statut"]."', + $sql = "INSERT INTO utilisateurs SET + login = '" . $this->login . "', + prenom = '" . $user["prenom"] . "', + nom = '" . $user["nom"] . "', + email = '" . $user["email"] . "', + civilite = '" . $user["civilite"] . "', + statut = '" . $user["statut"] . "', password = '', etat = 'actif', - auth_mode = '".$this->current_auth_mode."', + auth_mode = '" . $this->current_auth_mode . "', change_mdp = 'n'"; - - $res = mysqli_query($mysqli, $sql); - + + $res = mysqli_query($mysqli, $sql); + if (!$res) { return false; } else { @@ -1399,304 +1375,302 @@ private function import_user_profile() { private function import_user_profile_from_scribe() { - global $mysqli; + global $mysqli; # On ne peut arriver ici quand dans le cas où on a une authentification réussie. # L'import d'un utilisateur ne peut se faire qu'à partir d'un LDAP de Scribe, ici. if (!LDAPServer::is_setup()) { return false; - die(); } else { - - // config_cas.inc.php est le fichier d'informations de connexions au serveur cas - $path = dirname(__FILE__)."/LDAPServerScribe.class.php"; - include($path); - + + // config_cas.inc.php est le fichier d'informations de connexions au serveur cas + $path = dirname(__FILE__) . "/LDAPServerScribe.class.php"; + include($path); + # Le serveur LDAP est configuré, on y va. # Encore un dernier petit test quand même : est-ce que l'utilisateur # est bien absent de la base. - $sql = "SELECT login FROM utilisateurs WHERE (login = '".$this->login."')"; - $resultat = mysqli_query($mysqli, $sql); - if ($resultat->num_rows != "0") { - $resultat->close(); - return false; - die(); - } - $resultat->close(); + $sql = "SELECT login FROM utilisateurs WHERE (login = '" . $this->login . "')"; + $resultat = mysqli_query($mysqli, $sql); + if ($resultat->num_rows != "0") { + $resultat->close(); + return false; + } + $resultat->close(); $ldap_server = new LDAPServerScribe; - + $user = $ldap_server->get_user_profile($this->login); if ($user) { # On ne refait pas de tests ou de formattage. La méthode get_user_profile # s'occupe de tout. - - $errors = false; - - // On s'occupe de tous les traitements spécifiques à chaque statut - - // Eleve - if ($user['statut'] == 'eleve') { - // On a un élève : on vérifie s'il existe dans la table 'eleves', - // sur la base de son INE, ou nom et prénom. - $sql_test = "SELECT * FROM eleves - WHERE (no_gep = '".$user['raw']['ine'][0]."' - OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))"; - - $resultat = mysqli_query($mysqli, $sql); - $test = $resultat->num_rows; - $resultat->close(); - - if ($test == 0) { - // L'élève n'existe pas du tout. On va donc le créer. - $nouvel_eleve = new Eleve(); - $nouvel_eleve->setLogin($this->login); - $nouvel_eleve->setNom($user['nom']); - $nouvel_eleve->setPrenom($user['prenom']); - $nouvel_eleve->setSexe($user['raw']['entpersonsexe'][0]); - - $naissance = $user['raw']['entpersondatenaissance'][0]; - if ($naissance != '') { - $annee = mb_substr($naissance, 0, 4); - $mois = mb_substr($naissance, 4, 2); - $jour = mb_substr($naissance, 6, 2); - } else { - $annee = '0000'; - $mois = '00'; - $jour = '00'; - } - - $nouvel_eleve->setNaissance("$annee-$mois-$jour"); - $nouvel_eleve->setLieuNaissance(''); - $nouvel_eleve->setElenoet($user['raw']['employeenumber'][0] || ''); - $nouvel_eleve->setEreno(''); - $nouvel_eleve->setEleid($user['raw']['intid'][0] || ''); - $nouvel_eleve->setNoGep($user['raw']['ine'][0] || ''); - $nouvel_eleve->setEmail($user['email']); - - if (!$nouvel_eleve->save()) $errors = true; - - /* - * Récupération des CLASSES de l'eleve : - * Pour chaque eleve, on parcours ses classes, et on ne prend que celles - * qui correspondent à la branche de l'établissement courant, et on les stocke - */ - $nb_classes = $user['raw']['enteleveclasses']['count']; - - // Pour chaque classe trouvée.. - $eleve_added_to_classe = false; - for ($cpt=0; $cpt<$nb_classes; $cpt++) { - if ($eleve_added_to_classe) break; - $classe_from_ldap = explode("$", $user['raw']['enteleveclasses'][$cpt]); - // $classe_from_ldap[0] contient le DN de l'établissement - // $classe_from_ldap[1] contient l'id de la classe - $code_classe = $classe_from_ldap[1]; - - // Si le SIREN de la classe trouvée correspond bien au SIREN de l'établissement courant, - // on crée une entrée correspondante dans le tableau des classes disponibles - // Sinon c'est une classe d'un autre établissement, on ne doit donc pas en tenir compte - if (strcmp($classe_from_ldap[0], $ldap_server->get_base_branch()) == 0) { - - /* - * On test si la classe que l'on souhaite ajouter existe déjà - * en la cherchant dans la base ( - */ - $classe_courante = ClasseQuery::create() - ->filterByClasse($code_classe) - ->findOne(); - - if ($classe_courante) { - - foreach($classe_courante->getPeriodeNotes() as $periode) { - // On associe l'élève à la classe - $sql_classe = "INSERT INTO j_eleves_classes SET - login = '".$this->login."', - id_classe = '".$classe_courante->getId()."', - periode = '".$periode->getNumPeriode()."'"; - - $res = mysqli_query($mysqli, $sql); - $res->close(); - - } // Fin boucle périodes - $eleve_added_to_classe = true; - } // Fin test classe - } //Fin du if classe appartient a l'etablissement courant - } //Fin du parcours des classes de l'eleve - - - // On a maintenant un élève en base, qui appartient à sa classe - // pour toutes les périodes à partir de la période courante - - // On ne l'associe pas aux enseignements, car c'est un peu trop - // risqué et bancal pour être réalisé dynamiquement ici, dans - // la mesure où l'on n'a pas une information précise sur la - // composition des groupes. - - - } else { - // L'élève existe déjà dans la base. On ne créé que l'utilisateur correspondant. - // Pour ça, on va devoir s'assurer que l'identifiant est identique ! - $sql_login = "SELECT login FROM eleves - WHERE (no_gep = '".$user['raw']['ine'][0]."' - OR (nom = '".$user['nom']."' AND prenom = '".$user['prenom']."'))"; - - $resultat = mysqli_query($mysqli, $sql); - $res = $resultatè->fetch_object(); - $test_login = $res->login; - $resultat->close(); - - - if ($test_login != $this->login) { - // Le login est différent, on ne peut rien faire... Il faudrait renommer - // le login partout dans l'application, mais il n'existe pas de mécanisme - // pour le faire de manière fiable. - $errors = true; - } - } - - } elseif ($user['statut'] == 'responsable') { - // Si on a un responsable, il faut l'associer à un élève - - $resp = new ResponsableEleve(); - $resp->setLogin($this->login); - $resp->setNom($user['nom']); - $resp->setPrenom($user['prenom']); - $resp->setCivilite($user['raw']['personaltitle'][0]); - $resp->setTelPers($user['raw']['homephone'][0]); - $resp->setTelProf($user['raw']['telephonenumber'][0]); - $resp->setTelPort($user['raw']['mobile'][0]); - $resp->setMel($user['email']); - $resp->setAdresseId($user['raw']['intid'][0]); - - // On créé l'adresse associée - - $adr = new Adresse(); - $adr->setAdresseId($user['raw']['intid'][0]); - $adr->setAdr1($user['raw']['entpersonadresse'][0]); - $adr->setAdr2(''); - $adr->setAdr3(''); - $adr->setAdr4(''); - $adr->setCommune($user['raw']['entpersonville'][0]); - $adr->setCp($user['raw']['entpersoncodepostal'][0]); - $adr->setPays($user['raw']['entpersonpays'][0]); - - $resp->setAdresse($adr); - - $resp->save(); - - $nb_eleves_a_charge = $user['raw']['entauxpersreleleveeleve']['count']; - - //pour chaque dn d'eleve - for ($i=0;$i<$nb_eleves_a_charge;$i++) { - $eleve_uid = explode(",",$user['raw']['entauxpersreleleveeleve'][$i]); - $eleve_associe_login = mb_substr($eleve_uid[0], 4); - $eleve_sql = "SELECT ele_id FROM eleves WHERE login = '$eleve_associe_login'"; - - $eleve_query = mysqli_query($mysqli, $sql); - if ($eleve_query->num_rows == 1) { - $eleve_associe_obj = $eleve_query->fetch_object(); - $eleve_associe_ele_id = $eleve_associe_obj->ele_id; - // Gepi donne un ordre aux responsables, il faut donc verifier combien de responsables sont deja enregistres pour l'eleve - // On initialise le numero de responsable - $numero_responsable = 1; - $req_nb_resp_deja_presents = "SELECT count(*) FROM responsables2 WHERE ele_id = '$eleve_associe_ele_id'"; - $res_nb_resp = mysqli_query($mysqli, $req_nb_resp_deja_presents); - $nb_resp = $res_nb_resp->fetch_array($res_nb_resp); - if ($nb_resp[0] > 0) { - // Si deja 1 ou plusieurs responsables legaux pour cet eleve,on ajoute le nouveau responsable en incrementant son numero - $numero_responsable += $nb_resp[0]; - - //-- - // TODO: tester si on a des adresses identiques, et n'utiliser qu'un seul objet adresse dans ce cas. - //-- - } - - // Ajout de la relation entre Responsable et Eleve dans la table "responsables2" pour chaque eleve - $req_ajout_lien_eleve_resp = "INSERT INTO responsables2 VALUES('$eleve_associe_ele_id','".$resp->getResponsableEleveId()."','$numero_responsable','')"; - $insert_lien = mysqli_query($mysqli, $req_ajout_lien_eleve_resp); - } - } - - } elseif ($user['statut'] == 'professeur') { - // Rien de spécial à ce stade. - - } else { - // Ici : que fait-on si l'on n'a pas un statut directement reconnu - // et compatible Gepi ? - // On applique le statut par défaut, configuré par l'admin. - $user['statut'] = getSettingValue("statut_utilisateur_defaut"); - } - - // On créé l'utilisateur, s'il n'y a pas eu d'erreurs. - if (!$errors) { - $new_compte_utilisateur = new UtilisateurProfessionnel(); - $new_compte_utilisateur->setAuthMode('sso'); - $new_compte_utilisateur->setCivilite($user['civilite']); - $new_compte_utilisateur->setEmail($user['email']); - $new_compte_utilisateur->setEtat('actif'); - $new_compte_utilisateur->setLogin($this->login); - $new_compte_utilisateur->setNom($user['nom']); - $new_compte_utilisateur->setPrenom($user['prenom']); - $new_compte_utilisateur->setShowEmail('no'); - $new_compte_utilisateur->setStatut($user['statut']); - //$new_compte_utilisateur->save(); - if ($new_compte_utilisateur->save()) { - return true; - } else { - return false; - } - } - + + $errors = false; + + // On s'occupe de tous les traitements spécifiques à chaque statut + + // Eleve + if ($user['statut'] == 'eleve') { + // On a un élève : on vérifie s'il existe dans la table 'eleves', + // sur la base de son INE, ou nom et prénom. + $sql_test = "SELECT * FROM eleves + WHERE (no_gep = '" . $user['raw']['ine'][0] . "' + OR (nom = '" . $user['nom'] . "' AND prenom = '" . $user['prenom'] . "'))"; + + $resultat = mysqli_query($mysqli, $sql); + $test = $resultat->num_rows; + $resultat->close(); + + if ($test == 0) { + // L'élève n'existe pas du tout. On va donc le créer. + $nouvel_eleve = new Eleve(); + $nouvel_eleve->setLogin($this->login); + $nouvel_eleve->setNom($user['nom']); + $nouvel_eleve->setPrenom($user['prenom']); + $nouvel_eleve->setSexe($user['raw']['entpersonsexe'][0]); + + $naissance = $user['raw']['entpersondatenaissance'][0]; + if ($naissance != '') { + $annee = mb_substr($naissance, 0, 4); + $mois = mb_substr($naissance, 4, 2); + $jour = mb_substr($naissance, 6, 2); + } else { + $annee = '0000'; + $mois = '00'; + $jour = '00'; + } + + $nouvel_eleve->setNaissance("$annee-$mois-$jour"); + $nouvel_eleve->setLieuNaissance(''); + $nouvel_eleve->setElenoet($user['raw']['employeenumber'][0] || ''); + $nouvel_eleve->setEreno(''); + $nouvel_eleve->setEleid($user['raw']['intid'][0] || ''); + $nouvel_eleve->setNoGep($user['raw']['ine'][0] || ''); + $nouvel_eleve->setEmail($user['email']); + + if (!$nouvel_eleve->save()) $errors = true; + + /* + * Récupération des CLASSES de l'eleve : + * Pour chaque eleve, on parcours ses classes, et on ne prend que celles + * qui correspondent à la branche de l'établissement courant, et on les stocke + */ + $nb_classes = $user['raw']['enteleveclasses']['count']; + + // Pour chaque classe trouvée.. + $eleve_added_to_classe = false; + for ($cpt = 0; $cpt < $nb_classes; $cpt++) { + if ($eleve_added_to_classe) break; + $classe_from_ldap = explode("$", $user['raw']['enteleveclasses'][$cpt]); + // $classe_from_ldap[0] contient le DN de l'établissement + // $classe_from_ldap[1] contient l'id de la classe + $code_classe = $classe_from_ldap[1]; + + // Si le SIREN de la classe trouvée correspond bien au SIREN de l'établissement courant, + // on crée une entrée correspondante dans le tableau des classes disponibles + // Sinon c'est une classe d'un autre établissement, on ne doit donc pas en tenir compte + if (strcmp($classe_from_ldap[0], $ldap_server->get_base_branch()) == 0) { + + /* + * On test si la classe que l'on souhaite ajouter existe déjà + * en la cherchant dans la base ( + */ + $classe_courante = ClasseQuery::create() + ->filterByClasse($code_classe) + ->findOne(); + + if ($classe_courante) { + + foreach ($classe_courante->getPeriodeNotes() as $periode) { + // On associe l'élève à la classe + $sql_classe = "INSERT INTO j_eleves_classes SET + login = '" . $this->login . "', + id_classe = '" . $classe_courante->getId() . "', + periode = '" . $periode->getNumPeriode() . "'"; + + $res = mysqli_query($mysqli, $sql); + $res->close(); + + } // Fin boucle périodes + $eleve_added_to_classe = true; + } // Fin test classe + } //Fin du if classe appartient a l'etablissement courant + } //Fin du parcours des classes de l'eleve + + + // On a maintenant un élève en base, qui appartient à sa classe + // pour toutes les périodes à partir de la période courante + + // On ne l'associe pas aux enseignements, car c'est un peu trop + // risqué et bancal pour être réalisé dynamiquement ici, dans + // la mesure où l'on n'a pas une information précise sur la + // composition des groupes. + + + } else { + // L'élève existe déjà dans la base. On ne créé que l'utilisateur correspondant. + // Pour ça, on va devoir s'assurer que l'identifiant est identique ! + $sql_login = "SELECT login FROM eleves + WHERE (no_gep = '" . $user['raw']['ine'][0] . "' + OR (nom = '" . $user['nom'] . "' AND prenom = '" . $user['prenom'] . "'))"; + + $resultat = mysqli_query($mysqli, $sql); + $res = $resultatè->fetch_object(); + $test_login = $res->login; + $resultat->close(); + + + if ($test_login != $this->login) { + // Le login est différent, on ne peut rien faire... Il faudrait renommer + // le login partout dans l'application, mais il n'existe pas de mécanisme + // pour le faire de manière fiable. + $errors = true; + } + } + + } elseif ($user['statut'] == 'responsable') { + // Si on a un responsable, il faut l'associer à un élève + + $resp = new ResponsableEleve(); + $resp->setLogin($this->login); + $resp->setNom($user['nom']); + $resp->setPrenom($user['prenom']); + $resp->setCivilite($user['raw']['personaltitle'][0]); + $resp->setTelPers($user['raw']['homephone'][0]); + $resp->setTelProf($user['raw']['telephonenumber'][0]); + $resp->setTelPort($user['raw']['mobile'][0]); + $resp->setMel($user['email']); + $resp->setAdresseId($user['raw']['intid'][0]); + + // On créé l'adresse associée + + $adr = new Adresse(); + $adr->setAdresseId($user['raw']['intid'][0]); + $adr->setAdr1($user['raw']['entpersonadresse'][0]); + $adr->setAdr2(''); + $adr->setAdr3(''); + $adr->setAdr4(''); + $adr->setCommune($user['raw']['entpersonville'][0]); + $adr->setCp($user['raw']['entpersoncodepostal'][0]); + $adr->setPays($user['raw']['entpersonpays'][0]); + + $resp->setAdresse($adr); + + $resp->save(); + + $nb_eleves_a_charge = $user['raw']['entauxpersreleleveeleve']['count']; + + //pour chaque dn d'eleve + for ($i = 0; $i < $nb_eleves_a_charge; $i++) { + $eleve_uid = explode(",", $user['raw']['entauxpersreleleveeleve'][$i]); + $eleve_associe_login = mb_substr($eleve_uid[0], 4); + $eleve_sql = "SELECT ele_id FROM eleves WHERE login = '$eleve_associe_login'"; + + $eleve_query = mysqli_query($mysqli, $sql); + if ($eleve_query->num_rows == 1) { + $eleve_associe_obj = $eleve_query->fetch_object(); + $eleve_associe_ele_id = $eleve_associe_obj->ele_id; + // Gepi donne un ordre aux responsables, il faut donc verifier combien de responsables sont deja enregistres pour l'eleve + // On initialise le numero de responsable + $numero_responsable = 1; + $req_nb_resp_deja_presents = "SELECT count(*) FROM responsables2 WHERE ele_id = '$eleve_associe_ele_id'"; + $res_nb_resp = mysqli_query($mysqli, $req_nb_resp_deja_presents); + $nb_resp = $res_nb_resp->fetch_array($res_nb_resp); + if ($nb_resp[0] > 0) { + // Si deja 1 ou plusieurs responsables legaux pour cet eleve,on ajoute le nouveau responsable en incrementant son numero + $numero_responsable += $nb_resp[0]; + + //-- + // TODO: tester si on a des adresses identiques, et n'utiliser qu'un seul objet adresse dans ce cas. + //-- + } + + // Ajout de la relation entre Responsable et Eleve dans la table "responsables2" pour chaque eleve + $req_ajout_lien_eleve_resp = "INSERT INTO responsables2 VALUES('$eleve_associe_ele_id','" . $resp->getResponsableEleveId() . "','$numero_responsable','')"; + $insert_lien = mysqli_query($mysqli, $req_ajout_lien_eleve_resp); + } + } + + //} elseif ($user['statut'] == 'professeur') { + // Rien de spécial à ce stade. + + } else { + // Ici : que fait-on si l'on n'a pas un statut directement reconnu + // et compatible Gepi ? + // On applique le statut par défaut, configuré par l'admin. + $user['statut'] = getSettingValue("statut_utilisateur_defaut"); + } + + // On créé l'utilisateur, s'il n'y a pas eu d'erreurs. + if (!$errors) { + $new_compte_utilisateur = new UtilisateurProfessionnel(); + $new_compte_utilisateur->setAuthMode('sso'); + $new_compte_utilisateur->setCivilite($user['civilite']); + $new_compte_utilisateur->setEmail($user['email']); + $new_compte_utilisateur->setEtat('actif'); + $new_compte_utilisateur->setLogin($this->login); + $new_compte_utilisateur->setNom($user['nom']); + $new_compte_utilisateur->setPrenom($user['prenom']); + $new_compte_utilisateur->setShowEmail('no'); + $new_compte_utilisateur->setStatut($user['statut']); + //$new_compte_utilisateur->save(); + if ($new_compte_utilisateur->save()) { + return true; + } else { + return false; + } + } + } else { return false; } } } - # Mise à jour de quelques attributs de l'utilisateur à partir des attributs transmis - # par CAS directement. - private function update_user_with_cas_attributes(){ - global $mysqli; - $need_update = false; - if (isset($GLOBALS['debug_log_file'])){ - error_log("Mise à jour de l'utilisateur à partir des attributs CAS\n", 3, $GLOBALS['debug_log_file']); - error_log("Attribut email :".$this->cas_extra_attributes['email']."\n", 3, $GLOBALS['debug_log_file']); - error_log("Attribut prenom :".$this->cas_extra_attributes['prenom']."\n", 3, $GLOBALS['debug_log_file']); - error_log("Attribut nom :".$this->cas_extra_attributes['nom']."\n", 3, $GLOBALS['debug_log_file']); - } - if (!empty($this->cas_extra_attributes)) { - $query = 'UPDATE utilisateurs SET '; - $first = true; - foreach($this->cas_extra_attributes as $attribute => $value) { + # Mise à jour de quelques attributs de l'utilisateur à partir des attributs transmis + # par CAS directement. + private function update_user_with_cas_attributes() { + global $mysqli; + $need_update = false; + if (isset($GLOBALS['debug_log_file'])) { + error_log("Mise à jour de l'utilisateur à partir des attributs CAS\n", 3, $GLOBALS['debug_log_file']); + error_log("Attribut email :" . $this->cas_extra_attributes['email'] . "\n", 3, $GLOBALS['debug_log_file']); + error_log("Attribut prenom :" . $this->cas_extra_attributes['prenom'] . "\n", 3, $GLOBALS['debug_log_file']); + error_log("Attribut nom :" . $this->cas_extra_attributes['nom'] . "\n", 3, $GLOBALS['debug_log_file']); + } + if (!empty($this->cas_extra_attributes)) { + $query = 'UPDATE utilisateurs SET '; + $first = true; + foreach ($this->cas_extra_attributes as $attribute => $value) { // On compare la valeur envoyée avec la valeur présente dans Gepi - if ($_SESSION[$attribute] != $value){ - $_SESSION[$attribute] = $value; - $need_update = true; - if (!$first) { - $query .= ", "; - } - - $query .= "$attribute = '$value'"; - $first = false; - } - } - $query .= " WHERE login = '$this->login'"; - error_log("Détail requête : ".$query."\n", 3, $GLOBALS['debug_log_file']); - - if ($need_update) $res = mysqli_query($mysqli, $query); - if ($need_update && $this->statut == 'eleve') { - # On a eu une mise à jour qui concerne un élève, il faut synchroniser l'info dans la table eleves - $sql = "UPDATE eleves, utilisateurs + if ($_SESSION[$attribute] != $value) { + $_SESSION[$attribute] = $value; + $need_update = true; + if (!$first) { + $query .= ", "; + } + + $query .= "$attribute = '$value'"; + $first = false; + } + } + $query .= " WHERE login = '$this->login'"; + error_log("Détail requête : " . $query . "\n", 3, $GLOBALS['debug_log_file']); + + if ($need_update) $res = mysqli_query($mysqli, $query); + if ($need_update && $this->statut == 'eleve') { + # On a eu une mise à jour qui concerne un élève, il faut synchroniser l'info dans la table eleves + $sql = "UPDATE eleves, utilisateurs SET eleves.nom = utilisateurs.nom, eleves.prenom = utilisateurs.prenom, eleves.email = utilisateurs.email WHERE eleves.login = utilisateurs.login - AND utilisateurs.login = '".$this->login."'"; - - mysqli_query($mysqli, $sql); - } - return $res; - } - } + AND utilisateurs.login = '" . $this->login . "'"; + + mysqli_query($mysqli, $sql); + } + return $res; + } + } @@ -1704,52 +1678,53 @@ private function update_user_with_cas_attributes(){ # particulier. # Le fuseau horaire est simplement paramétré dans connect.inc.php, # en assignant $timezone. + /** + * @throws \Exception + */ private function update_timezone($_timezone) { - # Mise à jour du fuseau horaire pour PHP - $update_timezone = date_default_timezone_set($_timezone); - - # Mise à jour pour MySQL - if ($update_timezone) { - - # Il faut qu'on formatte le fuseau - $timezone = new DateTimeZone(date_default_timezone_get()); - $time = new DateTime("now", $timezone); - $offset = $timezone->getOffset($time); - $offset_sign = $offset < 0 == "-" ? "-" : "+"; - $offset = abs($offset); - $offset_hours = $offset / 3600 % 24; - $offset_hours = mb_strlen($offset_hours) == '1' ? "0".$offset_hours : $offset_hours; - $offset_minutes = $offset / 60 % 60; - $offset_minutes = mb_strlen($offset_minutes) == '1' ? "0".$offset_minutes : $offset_minutes; - $mysql_offset = $offset_sign . $offset_hours . ":" . $offset_minutes; - $test = mysqli_query($GLOBALS["mysqli"], "SET time_zone = '".$mysql_offset."'"); - } - return $update_timezone; - } - - # Renvoie 'true' si l'accès à Gepi se fait en https - static function https_request() { - if (!isset($_SERVER['HTTPS']) - OR (isset($_SERVER['HTTPS']) AND strtolower($_SERVER['HTTPS']) != "on") - OR (isset($_SERVER['X-Forwaded-Proto']) AND $_SERVER['X-Forwaded-Proto'] != "https")) { - return false; - } else { - return true; - } - } - - # écrit dans un fichier un message de debug - static private function debug_login_mdp($debug_test_mdp,$debug_test_mdp_file,$debug_test_mdp_message) { - global $debug_login_nouveaux_comptes, $loguer_nouveau_login; - - if(($debug_test_mdp=="y")|| - (($debug_login_nouveaux_comptes=="y")&&($loguer_nouveau_login=="y"))) { - $f_tmp=fopen($debug_test_mdp_file,"a+"); - fwrite($f_tmp,$debug_test_mdp_message); - fclose($f_tmp); - } - } -} + # Mise à jour du fuseau horaire pour PHP + $update_timezone = date_default_timezone_set($_timezone); + + # Mise à jour pour MySQL + if ($update_timezone) { + + # Il faut qu'on formatte le fuseau + $timezone = new DateTimeZone(date_default_timezone_get()); + $time = new DateTime("now", $timezone); + $offset = $timezone->getOffset($time); + $offset_sign = $offset < 0 == "-" ? "-" : "+"; + $offset = abs($offset); + $offset_hours = $offset / 3600 % 24; + $offset_hours = mb_strlen($offset_hours) == '1' ? "0" . $offset_hours : $offset_hours; + $offset_minutes = $offset / 60 % 60; + $offset_minutes = mb_strlen($offset_minutes) == '1' ? "0" . $offset_minutes : $offset_minutes; + $mysql_offset = $offset_sign . $offset_hours . ":" . $offset_minutes; + $test = mysqli_query($GLOBALS["mysqli"], "SET time_zone = '" . $mysql_offset . "'"); + } + return $update_timezone; + } + + # Renvoie 'true' si l'accès à Gepi se fait en https + static function https_request() { + if (!isset($_SERVER['HTTPS']) + or (isset($_SERVER['HTTPS']) and strtolower($_SERVER['HTTPS']) != "on") + or (isset($_SERVER['X-Forwaded-Proto']) and $_SERVER['X-Forwaded-Proto'] != "https")) { + return false; + } else { + return true; + } + } + + # écrit dans un fichier un message de debug + static private function debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, $debug_test_mdp_message) { + global $debug_login_nouveaux_comptes, $loguer_nouveau_login; -?> + if (($debug_test_mdp == "y") || + (($debug_login_nouveaux_comptes == "y") && ($loguer_nouveau_login == "y"))) { + $f_tmp = fopen($debug_test_mdp_file, "a+"); + fwrite($f_tmp, $debug_test_mdp_message); + fclose($f_tmp); + } + } +} diff --git a/lib/alerte_popup.php b/lib/alerte_popup.php index 1aa747e8b9..8a4c2f2ac2 100755 --- a/lib/alerte_popup.php +++ b/lib/alerte_popup.php @@ -1,57 +1,58 @@ "; - if("$niveau_arbo"=="public") { - $image_path.="../"; - } - else { - $niveau_arbo_count = $niveau_arbo; - while ($niveau_arbo_count != 0) { - $image_path.="../"; - $niveau_arbo_count--; - } +$image_path = null; + +if (isset($niveau_arbo)) { + //echo "\$niveau_arbo=$niveau_arbo
"; + if ("$niveau_arbo" == "public") { + $image_path .= "../"; + } else { + $niveau_arbo_count = $niveau_arbo; + while ($niveau_arbo_count != 0) { + $image_path .= "../"; + $niveau_arbo_count--; } } - else { - $image_path = "./"; - } +} else { + $image_path = "./"; +} ?>

+ height:200px;">   + + position:absolute;">alerte
+ text-align:justify; + width:600px; + height:130px; + border:1px solid black; + background-color:white; + padding-top:10px; + padding-left:20px; + padding-right:20px; + display:none; + position:absolute; + background-image:url('images/degrade_noir.png'); + background-repeat:repeat-x; + background-position: left bottom;">
-
ok
+
ok
diff --git a/lib/auth_sso.inc.php b/lib/auth_sso.inc.php index 102342574e..16bec9eb4f 100644 --- a/lib/auth_sso.inc.php +++ b/lib/auth_sso.inc.php @@ -1,6 +1,6 @@ authenticate(); -if ($auth == "1") { - # Authentification réussie - session_write_close(); - //header("Location:accueil.php"); - //die(); -} else { +session_write_close(); +if ($auth != "1") { # Echec d'authentification. - session_write_close(); - header("Location:../login_failure.php?error=".$auth."&mode=sso"); + header("Location:../login_failure.php?error=" . $auth . "&mode=sso"); die(); } -?> diff --git a/lib/calendrier/calendrier.class.php b/lib/calendrier/calendrier.class.php index 0681d3f3c8..e9a6b14c03 100755 --- a/lib/calendrier/calendrier.class.php +++ b/lib/calendrier/calendrier.class.php @@ -1,7 +1,7 @@ form = $form; - $this->champ = $champ; - $page = "?frm=".$form."&ch=".$champ; - $this->page = $page; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS PUBLIQUES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Change le style d'affichage du calendrier - * - * Un style fr commencera par lundi, alors qu'un style "en" débutera par dimanche - * - * @param string $style Le type d'affichage (fr ou en) - */ - function set_style($style){ - $tab = $this->stylesDispo; - if (in_array($style, $tab)){ - $this->style = $style; - }else{ - $this->style = "fr"; - } - } - - /** - * Set le nom de la page qu'il faut reloader - * - * A utiliser dans le seul cas où le calendrier est inclu dans une page (donc pas une - * popup pour lui tout seul) et qu'il y a des autres paramètres en GET. - * - * @param string $page Le nom de la page à reloader - */ - function set_page($page){ - $tab = explode("?", $page); - if (count($tab) > 1){ - $cc = "&"; - }else{ - $cc = "?"; - } - $page .= $cc."frm=".$this->form."&ch=".$this->champ; - $this->page = $page; - } - - /** - * Affiche ou non les zéros devant jours et mois < 10 - * - * @param boolean $zeros A true, affiche les zéros devant jours et mois < 10 - */ - function set_zeros($zeros){ - $this->zeros = $zeros; - } - - /** - * Fixe le format de la date à avoir dans le champ de formulaire - * - * L'ordre (année, mois, jour) peut être fourni dans un tableau (array("a", "m", "j")) ou - * dans une string ("amj") ou ("a,m,j") éventuellement. - * - * @param array|string $format L'ordre d'affichage des années, mois et jours - * @param string $sep La séparation entre années, mois et jours - * @return boolean True en cas de succès, false sinon - */ - function set_format($format, $sep){ - if (!is_array($format)){ - if (mb_strlen($format) == 3){ - $tmp = array(); - for ($i = 0; $i < mb_strlen($format); $i++){ - $tmp[] = $format[$i]; - } - $format = $tmp; - }else{ - return false; - } - } - $this->format = $format; - $this->sep = $sep; - return true; - } - - /** - * Détermine le mois et l'année en cours - * - * Par défaut, prend les valeurs d'aujourd'hui. - * - * @param integer $mois Le numéro du mois (1 = janvier) - * @param integer $annee L'année en 4 chiffres - */ - function set_date($mois, $annee){ - $this->mois = $mois; - $this->annee = $annee; - } - - /** - * Détermine le mois et l'année en cours - * - * Par défaut, prend les valeurs d'aujourd'hui. En fonction de la variable d'environnement - * $_POST. Le tableau doit en tout cas contenir ces valeurs : - * - $_POST['change_date'] : true ou false - * - $_POST['mois'] : le numéro du mois - * - $_POST['annee'] : l'année - * - * @param array $_POST Le numéro du mois (1 = janvier) - * @return boolean False si change_date n'existe pas, true sinon - */ - function auto_set_date(){ - if (isset($_POST['change_date'])){ - $this->set_date($_POST['mois'], $_POST['annee']); - return true; - } - return false; - } - - /** - * Assigne le spectre d'années à prendre en compte dans le calendrier - * - * @param integer $aMoins Le nb d'années en moins que la courante - * @param integer $aPlus Le nb d'années en plus que la courante - */ - function set_annees($aMoins, $aPlus){ - $this->aMoins = $aMoins; - //+1 parce que l'année courante est comprise dedans - $this->aPlus = $aPlus + 1; - } - - /** - * Sauve le chemin et le nom du fichier de css - * - * @param string $chemin Le chemin et le nom du fichier css - */ - function set_css($chemin){ - $this->css = $chemin; - } - - /** - * Sauve le chemin et le nom du fichier javascript - * - * @param string $chemin Le chemin et le nom du fichier javascript - */ - function set_js($chemin){ - $this->js = $chemin; - } - - /** - * Change le titre de la page - * - * @param string $titre Le titre de la page - */ - function set_titre($titre){ - $this->titre = $titre; - } - - /** - * Détermine si l'affichage du calendrier - * - * S'il est sous forme de popup, il faudra afficher toutes les entêtes html et insérer - * tous les fichiers css et js. S'il est contenu dans une page où il y a d'autres - * choses, il n'y a plus besoin des balises d'entêtes. - * - * @param boolean $estPop A true, affiche dans une popup, à false, non - */ - function set_popup($estPop){ - $this->popup = $estPop; - } - - /** - * Change le style du div qui englobe le calendrier - * - * On ne peut jouer que sur la largeur et/ou les marges. - * - * @param string $largeur La largeur du calendrier au format css - * @param string $marges Les marges du calendrier au format css - */ - function set_position($largeur, $marges){ - $this->largeurCal = $largeur; - $this->margesCal = $marges; - } - - /** - * Récupère la string pour ouvrir dans une popup - * - * @param string $page La page dans laquelle s'ouvrira le calendrier - * @param integer $l La largeur de la popup - * @param integer $h La hauteur de la popup - * @return string La string d'ouverture de popup - */ - function get_strPopup($page, $l, $h){ - $tab = explode("?", $page); - if (count($tab) > 1){ - $cc = "&"; - }else{ - $cc = "?"; - } - //$page .= $cc."frm=".$this->form."&ch=".$this->champ; - $page .= $cc."frm=".$this->form."&ch=".$this->champ; - $str = "window.open('".$page."','calendrier','width=".$l.",height=".$h.",scrollbars=0').focus();"; - return $str; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS AFFICHAGE PUBLIQUES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Affiche le calendrier dans la page - */ - function affiche(){ - $ajd = getdate(); - $mois = $ajd['mon']; - $annee = $ajd['year']; - if (isset($this->mois)){ - $mois = $this->mois; - } - if (isset($this->annee)){ - $annee = $this->annee; - } - if ($this->popup){ - $this->_affiche_entetes($this->titre, $this->css, $this->js); - $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); - $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); - $this->_affiche_basPage(); - }else{ - $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); - $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); - } - } - - /** - * Affiche l'insertion du fichier de javascript - * - * Utile seulement dans le cas où le calendrier n'est pas sous forme de popup, que la page hôte - * n'a pas de fichier js inclu dans le et/ou que les fonctions js du calendrier n'ont - * pas été copiées-collées dans le fichier js de la page - */ - function affiche_js(){ - echo ''."\n"; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS AFFICHAGE PRIVEES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Affiche les entêtes html - * - * Il s'agit concrétement des balises html, head, title, link, et ouverture de body - * - * @param string $titre Le titre de la page - * @param string $css Le lien vers la feuille de style - * @param string $js Le lien vers le fichier javascript - */ - function _affiche_entetes($titre, $css, $js){ - echo "\n"; - echo "\n"; - echo "\t".$titre."\n"; - echo "\t".''."\n"; - echo "\t".''."\n"; - echo "\n\n"; - echo "\n\n"; - } - - /** - * Affiche les fins de balises html - * - * Il s'agit concrétement des balises /html et /body - */ - function _affiche_basPage(){ - echo "\n"; - echo "\n"; - } - - /** - * Affiche le javascript de la page - * - * Concerne toutes les données utilisées dans les fonctions js du fichier js. - * - * @param string $frm Le nom du formulaire - * @param string $chm Le nom du champ - * @param boolean $zeros Affiche ou non le 0 devant jours et mois < 10 - * @param string $sep Le séparateur entre année, mois et jour - * @param boolean $popup Détermine si on va fermer la popup ou non - * @param array $ordre L'ordre de la date (année - mois - jour) - * @param integer $mois Le numéro du mois - * @param integer $annee L'année - */ - function _affiche_js($frm, $chm, $zeros, $sep, $popup, $ordre, $mois, $annee){ - if ($zeros){ - $zeros = "true"; - }else{ - $zeros = "false"; - } - echo '' . "\n"; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS AFFICHAGE PRIVEES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Affiche les entêtes html + * + * Il s'agit concrétement des balises html, head, title, link, et ouverture de body + * + * @param string $titre Le titre de la page + * @param string $css Le lien vers la feuille de style + * @param string $js Le lien vers le fichier javascript + */ + function _affiche_entetes($titre, $css, $js) { + echo "\n"; + echo "\n"; + echo "\t" . $titre . "\n"; + echo "\t" . '' . "\n"; + echo "\t" . '' . "\n"; + echo "\n\n"; + echo "\n\n"; + } + + /** + * Affiche les fins de balises html + * + * Il s'agit concrétement des balises /html et /body + */ + function _affiche_basPage() { + echo "\n"; + echo "\n"; + } + + /** + * Affiche le javascript de la page + * + * Concerne toutes les données utilisées dans les fonctions js du fichier js. + * + * @param string $frm Le nom du formulaire + * @param string $chm Le nom du champ + * @param boolean $zeros Affiche ou non le 0 devant jours et mois < 10 + * @param string $sep Le séparateur entre année, mois et jour + * @param boolean $popup Détermine si on va fermer la popup ou non + * @param array $ordre L'ordre de la date (année - mois - jour) + * @param integer $mois Le numéro du mois + * @param integer $annee L'année + */ + function _affiche_js($frm, $chm, $zeros, $sep, $popup, $ordre, $mois, $annee) { + if ($zeros) { + $zeros = "true"; + } else { + $zeros = "false"; + } + echo '\n\n"; - } - - /** - * Affiche le calendrier - * - * @param string $largeur La largeur du calendrier - * @param string $marges Les éventuelles marges du calendrier - * @param string $link Le nom de la page où il y a le calendrier avec les valeurs GET - * @param array $nomm Le noms des mois - * @param integer $anneeMin Le nb d'année en moins que celle actuelle - * @param integer $anneeMax Le nb d'année en plus que celle actuelle - * @param array $ajd Le tableau getdate() d'aujourd'hui - * @param string $affichage Le style d'affichage (fr, en) - */ - function _affiche_calendrier($largeur, $marges, $link, $nomm, $anneeMin, $anneeMax, $ajd, $affichage){ - $mois = $ajd['mon']; - $annee = $ajd['year']; - $aujourdhui = array($ajd['mday'], $mois, $annee); - if (isset($this->mois)){ - $mois = $this->mois; - } - if (isset($this->annee)){ - $annee = $this->annee; - } - list($premierJour, $dernierJour) = $this->_get_ajd($annee, $mois); - $nomj = $this->nomj; - - //Intervention des marges et largeur, si on est pas dans une popup - echo '
'."\n"; - - echo "\t".'
'."\n"; - echo "\t".'\n"; - echo "\t".'\n"; - echo "\t".''."\n"; - echo "\t
\n\n"; - echo "\t".''."\n"; - echo "\t\t\n"; - /** - * Affichage du nom des jours - */ - for ($jour = 0; $jour < 7; $jour++){ - $classe = $this->_get_classe($jour, 1, $affichage); - echo "\t\t\t".$nomj[$jour]."\n"; - } - echo "\t\t\n"; - /** - * Affichage des cellules vides en début de mois, s'il y en a - */ - for ($prems = 0; $prems < $premierJour; $prems++){ - $classe = $this->_get_classe($prems, 2, $affichage); - echo "\t\t\t \n"; - } - /** - * Affichage des jours du mois - */ - $cptJour = 0; - for ($jour = 1; $jour <= $dernierJour; $jour++){ - $classe = $this->_get_classeJour($aujourdhui, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $affichage); - $cptJour++; - echo "\t\t\t".''.$jour.''."\n"; - if (is_int(($jour + $prems) / 7)){ - $cptJour = 0; - echo "\t\t\n"; - if ($jour < $dernierJour){ - echo "\t\t\n"; - } - } - } - /** - * Affichage des cellules vides en fin de mois, s'il y en a - */ - if ($cptJour != 0){ - for ($i = 0; $i < (7 - $cptJour); $i++){ - $classe = $this->_get_classeJourReste($i, $cptJour, $affichage); - echo "\t\t\t \n"; - } - echo "\t\t\n"; - } - echo "\t
\n"; - echo "
\n\n"; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS PRIVEES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Renvoie la position du 1er et dernier jour du mois - * - * En fonction du mois et de l'année, retourne exactement le numéro du jour dans la - * semaine. Le tableau de retour est comme suit : - * - $tab[0] : le numéro du 1er jour - * - $tab[1] : le numéro du dernier jour - * - * @param integer $annee L'année choisie - * @param integer $mois Le mois choisi - * @return array Le tableau du 1er et dernier jour du mois - */ - function _get_ajd($annee, $mois){ - $affichage = $this->style; - $nomj = $this->nomj; - - $moisCheck = $mois + 1; - $anneeCheck = $annee; - if ($moisCheck > 12){ - $moisCheck = 1; - $anneeCheck = $annee + 1; - } - - $dernierJour = strftime("%d", mktime(0, 0, 0, $moisCheck, 0, $anneeCheck)); - $premierJour = date("w", mktime(0, 0, 0, $mois, 1, $annee)); - - if ($affichage == "fr"){ - //On modifie la position du premier jour suivant la disposition des jours qu'on veut - $origine = 1; - if ($origine > 7){ - $origine = 7; - } - $j = $origine; - for ($i = 0; $i < count($nomj); $i++){ - if ($j >= count($nomj)){ - $j = 0; - } - $temp[] = $nomj[$j]; - $j++; - } - //On décale le 1er jour en conséquence - $premierJour -= $origine; - if ($premierJour < 0){ - $premierJour = 6 - (abs($premierJour) - 1); - } - $this->nomj = $temp; - } - return array($premierJour, $dernierJour); - } - - /** - * Renvoie une string qui vaut selected ou non, pour un champs SELECT - * - * @param integer $temps L'année ou le mois choisi - * @param integer $i L'annee en cours - * @return string La string nécessaire pour sélectionner une OPTION - */ - function _get_selected($temps, $i){ - $selected = ""; - if ($temps == $i){ - $selected = " selected=\"selected\""; - } - return $selected; - } - - /** - * Renvoie une string représentant l'appel à une classe CSS - * - * Pour les valeurs par défaut : - * - 1 : ' class="aut"' - * - 2 : '' - * - * @param integer $jour Le jour en cours - * @param integer $index La valeur par défaut de la string - * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classe($jour, $index, $mode){ - switch ($index) { - case 1: - $classe = " class=\"aut\""; - break; - default: - $classe = ""; - } - switch ($mode) { - case "en": - $x1 = 0; - $x2 = 6; - break; - default: - $x1 = 6; - $x2 = 5; - } - if ($jour == $x1){ - $classe = " class=\"dim\""; - }elseif ($jour == $x2){ - $classe = " class=\"sam\""; - } - return $classe; - } - - /** - * Détermine si on est sur un dimanche ou un samedi, à partir du 1er du mois - * - * @param array $ajd Le jour, mois et année de maintenant - * @param integer $annee L'année en cours - * @param integer $mois Le mois en cours - * @param integer $jour Le jour en cours - * @param integer $cptJour Le numéro du jour en cours de la semaine - * @param integer $premierJour Le numéro du 1er jour (dans la semaine) du mois - * @param array $nomj Le tableau des noms des jours - * @param integer $prems Le numéro du dernier jour de la semaine du mois précédent - * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classeJour($ajd, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $mode){ - $classe = ""; - if ($mode == "en"){ - if (($cptJour == 0 && $jour > 1) || ($jour == 1 && $premierJour == 0)){ - $classe = " class=\"dim\""; - }elseif ($cptJour == 6 || (count($nomj) - $jour == $prems)){ - $classe = " class=\"sam\""; - } - }else{ - if ($cptJour == 6 || (count($nomj) - $jour == $prems)){ - $classe = " class=\"dim\""; - }else if ($cptJour == 5 || (count($nomj) - $jour - 1 == $prems)){ - $classe = " class=\"sam\""; - } - } - if ($jour == $ajd[0] && $mois == $ajd[1] && $annee == $ajd[2]){ - $classe = " class=\"ajd\""; - } - return $classe; - } - - /** - * Détermine si on est sur un samedi, lorsqu'on complète le tableau - * - * @param integer $i Le jour en cours - * @param integer $cptJour Le numéro du dernier jour (dans la semaine) du mois - * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classeJourReste($i, $cptJour, $mode){ - $classe = ""; - if ($mode == "en"){ - if ($i == (7 - $cptJour) - 1){ - $classe = " class=\"sam\""; - } - }else{ - if ($i == (6 - $cptJour) - 1){ - $classe = " class=\"sam\""; - }else if ($i == (7 - $cptJour) - 1){ - $classe = " class=\"dim\""; - } - } - return $classe; - } + + //echo "\t\twindow.opener.document.".$frm.".elements['".$chm."'].value = val;\n"; + //echo "\t\twindow.opener.document.getElementById('".$frm."').elements['".$chm."'].value = val;\n"; + echo "\t\twindow.close();\n"; + } else { + echo "\t\tdocument." . $frm . ".elements['" . $chm . "'].value = val;\n"; + } + echo "\t}\n"; + echo "\n\n"; + } + + /** + * Affiche le calendrier + * + * @param string $largeur La largeur du calendrier + * @param string $marges Les éventuelles marges du calendrier + * @param string $link Le nom de la page où il y a le calendrier avec les valeurs GET + * @param array $nomm Le noms des mois + * @param integer $anneeMin Le nb d'année en moins que celle actuelle + * @param integer $anneeMax Le nb d'année en plus que celle actuelle + * @param array $ajd Le tableau getdate() d'aujourd'hui + * @param string $affichage Le style d'affichage (fr, en) + */ + function _affiche_calendrier($largeur, $marges, $link, $nomm, $anneeMin, $anneeMax, $ajd, $affichage) { + $mois = $ajd['mon']; + $annee = $ajd['year']; + $aujourdhui = array($ajd['mday'], $mois, $annee); + if (isset($this->mois)) { + $mois = $this->mois; + } + if (isset($this->annee)) { + $annee = $this->annee; + } + list($premierJour, $dernierJour) = $this->_get_ajd($annee, $mois); + $nomj = $this->nomj; + + //Intervention des marges et largeur, si on est pas dans une popup + echo '
' . "\n"; + + echo "\t" . '
' . "\n"; + echo "\t" . '\n"; + echo "\t" . '\n"; + echo "\t" . '' . "\n"; + echo "\t
\n\n"; + echo "\t" . '' . "\n"; + echo "\t\t\n"; + /** + * Affichage du nom des jours + */ + for ($jour = 0; $jour < 7; $jour++) { + $classe = $this->_get_classe($jour, 1, $affichage); + echo "\t\t\t" . $nomj[$jour] . "\n"; + } + echo "\t\t\n"; + /** + * Affichage des cellules vides en début de mois, s'il y en a + */ + for ($prems = 0; $prems < $premierJour; $prems++) { + $classe = $this->_get_classe($prems, 2, $affichage); + echo "\t\t\t \n"; + } + /** + * Affichage des jours du mois + */ + $cptJour = 0; + for ($jour = 1; $jour <= $dernierJour; $jour++) { + $classe = $this->_get_classeJour($aujourdhui, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $affichage); + $cptJour++; + echo "\t\t\t" . '' . $jour . '' . "\n"; + if (is_int(($jour + $prems) / 7)) { + $cptJour = 0; + echo "\t\t\n"; + if ($jour < $dernierJour) { + echo "\t\t\n"; + } + } + } + /** + * Affichage des cellules vides en fin de mois, s'il y en a + */ + if ($cptJour != 0) { + for ($i = 0; $i < (7 - $cptJour); $i++) { + $classe = $this->_get_classeJourReste($i, $cptJour, $affichage); + echo "\t\t\t \n"; + } + echo "\t\t\n"; + } + echo "\t
\n"; + echo "
\n\n"; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS PRIVEES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Renvoie la position du 1er et dernier jour du mois + * + * En fonction du mois et de l'année, retourne exactement le numéro du jour dans la + * semaine. Le tableau de retour est comme suit : + * - $tab[0] : le numéro du 1er jour + * - $tab[1] : le numéro du dernier jour + * + * @param integer $annee L'année choisie + * @param integer $mois Le mois choisi + * @return array Le tableau du 1er et dernier jour du mois + */ + function _get_ajd($annee, $mois) { + $affichage = $this->style; + $nomj = $this->nomj; + + $moisCheck = $mois + 1; + $anneeCheck = $annee; + if ($moisCheck > 12) { + $moisCheck = 1; + $anneeCheck = $annee + 1; + } + + $dernierJour = strftime("%d", mktime(0, 0, 0, $moisCheck, 0, $anneeCheck)); + $premierJour = date("w", mktime(0, 0, 0, $mois, 1, $annee)); + + if ($affichage == "fr") { + //On modifie la position du premier jour suivant la disposition des jours qu'on veut + $origine = 1; + if ($origine > 7) { + $origine = 7; + } + $j = $origine; + for ($i = 0; $i < count($nomj); $i++) { + if ($j >= count($nomj)) { + $j = 0; + } + $temp[] = $nomj[$j]; + $j++; + } + //On décale le 1er jour en conséquence + $premierJour -= $origine; + if ($premierJour < 0) { + $premierJour = 6 - (abs($premierJour) - 1); + } + $this->nomj = $temp; + } + return array($premierJour, $dernierJour); + } + + /** + * Renvoie une string qui vaut selected ou non, pour un champs SELECT + * + * @param integer $temps L'année ou le mois choisi + * @param integer $i L'annee en cours + * @return string La string nécessaire pour sélectionner une OPTION + */ + function _get_selected($temps, $i) { + $selected = ""; + if ($temps == $i) { + $selected = " selected=\"selected\""; + } + return $selected; + } + + /** + * Renvoie une string représentant l'appel à une classe CSS + * + * Pour les valeurs par défaut : + * - 1 : ' class="aut"' + * - 2 : '' + * + * @param integer $jour Le jour en cours + * @param integer $index La valeur par défaut de la string + * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classe($jour, $index, $mode) { + switch ($index) { + case 1: + $classe = " class=\"aut\""; + break; + default: + $classe = ""; + } + switch ($mode) { + case "en": + $x1 = 0; + $x2 = 6; + break; + default: + $x1 = 6; + $x2 = 5; + } + if ($jour == $x1) { + $classe = " class=\"dim\""; + } elseif ($jour == $x2) { + $classe = " class=\"sam\""; + } + return $classe; + } + + /** + * Détermine si on est sur un dimanche ou un samedi, à partir du 1er du mois + * + * @param array $ajd Le jour, mois et année de maintenant + * @param integer $annee L'année en cours + * @param integer $mois Le mois en cours + * @param integer $jour Le jour en cours + * @param integer $cptJour Le numéro du jour en cours de la semaine + * @param integer $premierJour Le numéro du 1er jour (dans la semaine) du mois + * @param array $nomj Le tableau des noms des jours + * @param integer $prems Le numéro du dernier jour de la semaine du mois précédent + * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classeJour($ajd, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $mode) { + $classe = ""; + if ($mode == "en") { + if (($cptJour == 0 && $jour > 1) || ($jour == 1 && $premierJour == 0)) { + $classe = " class=\"dim\""; + } elseif ($cptJour == 6 || (count($nomj) - $jour == $prems)) { + $classe = " class=\"sam\""; + } + } else { + if ($cptJour == 6 || (count($nomj) - $jour == $prems)) { + $classe = " class=\"dim\""; + } else if ($cptJour == 5 || (count($nomj) - $jour - 1 == $prems)) { + $classe = " class=\"sam\""; + } + } + if ($jour == $ajd[0] && $mois == $ajd[1] && $annee == $ajd[2]) { + $classe = " class=\"ajd\""; + } + return $classe; + } + + /** + * Détermine si on est sur un samedi, lorsqu'on complète le tableau + * + * @param integer $i Le jour en cours + * @param integer $cptJour Le numéro du dernier jour (dans la semaine) du mois + * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classeJourReste($i, $cptJour, $mode) { + $classe = ""; + if ($mode == "en") { + if ($i == (7 - $cptJour) - 1) { + $classe = " class=\"sam\""; + } + } else { + if ($i == (6 - $cptJour) - 1) { + $classe = " class=\"sam\""; + } else if ($i == (7 - $cptJour) - 1) { + $classe = " class=\"dim\""; + } + } + return $classe; + } } diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index edabcaad26..c711263849 100755 --- a/lib/calendrier/calendrier.js +++ b/lib/calendrier/calendrier.js @@ -11,14 +11,14 @@ * * @param object frm L'object document du formulaire */ -function reload(frm){ - var mois = frm.elements['mois']; - var annee = frm.elements['annee']; - //Debug du mois et année - var index1 = mois.options[mois.selectedIndex].value; - var index2 = annee.options[annee.selectedIndex].value; +function reload(frm) { + const mois = frm.elements['mois']; + const annee = frm.elements['annee']; + //Debug du mois et année + const index1 = mois.options[mois.selectedIndex].value; + const index2 = annee.options[annee.selectedIndex].value; //Envoi du formulaire - frm.submit(); + frm.submit(); } /** @@ -27,19 +27,19 @@ function reload(frm){ * @param integer jour Le numéro du jour dans le mois * @param integer mois Le numéro du mois */ -function checkNum(jour, mois){ - tab = new Array(); - tab[0] = jour; - tab[1] = mois; - if (this.checkzero){ - if (jour < 10){ - tab[0] = "0" + jour; - } - if (mois < 10){ - tab[1] = "0" + mois; - } - } - return tab; +function checkNum(jour, mois) { + let tab = new Array(); + tab[0] = jour; + tab[1] = mois; + if (this.checkzero) { + if (jour < 10) { + tab[0] = "0" + jour; + } + if (mois < 10) { + tab[1] = "0" + mois; + } + } + return tab; } /** @@ -52,29 +52,31 @@ function checkNum(jour, mois){ * * @param integer jour Le numéro du jour dans le mois */ -function submitDate(jour){ - tab = this.checkNum(jour, this.moisc); - jour = tab[0]; - mois = tab[1]; - if (this.ordre[0] && this.ordre[0] == "M"){ - if (this.ordre[1] && this.ordre[1] == "A"){ +function submitDate(jour) { + let tab = this.checkNum(jour, this.moisc); + jour = tab[0]; + let mois = tab[1]; + let val; + + if (this.ordre[0] && this.ordre[0] === "M") { + if (this.ordre[1] && this.ordre[1] === "A") { val = mois + this.format + this.anneec + this.format + jour; - }else{ + } else { val = mois + this.format + jour + this.format + this.anneec; } - }else if (this.ordre[0] && this.ordre[0] == "J"){ - if (this.ordre[1] == "A"){ + } else if (this.ordre[0] && this.ordre[0] === "J") { + if (this.ordre[1] === "A") { val = jour + this.format + this.anneec + this.format + mois; - }else{ + } else { val = jour + this.format + mois + this.format + this.anneec; } - }else{ - if (this.ordre[1] && this.ordre[1] == "J"){ + } else { + if (this.ordre[1] && this.ordre[1] === "J") { val = this.anneec + this.format + jour + this.format + mois; - }else{ + } else { val = this.anneec + this.format + mois + this.format + jour; } } - //On agit selon qu'on est dans une popup ou non - this.finOperation(val); -} \ No newline at end of file + //On agit selon qu'on est dans une popup ou non + this.finOperation(val); +} diff --git a/lib/calendrier/calendrier_id.class.php b/lib/calendrier/calendrier_id.class.php index f51546954a..90bc13dd81 100755 --- a/lib/calendrier/calendrier_id.class.php +++ b/lib/calendrier/calendrier_id.class.php @@ -4,687 +4,685 @@ class Calendrier { - //---------------------------------------------------------------------------------------------------------------// - //-- PROPRIETES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Variables concernant le format de la date - * - * @var boolean $zeros A true, on met les zéros devant mois ou jour s'ils sont plus petit que 10 - * @var array $format L'ordre de la date, soit l'année (a), le mois (m) et le jour (j) - * @var string $sep Le séparateur entre l'année, le mois et le jour - */ - var $zeros = true; - var $format = array("j", "m", "a"); - var $sep = "/"; - - /** - * Propriétés concernant les années dipsonibles dans le calendrier - * - * @var integer $aMoins Le nombre d'années de moins que celle actuelle - * @var integer $aPlus Le nombre d'années de plus que celle actuelle - */ - var $aMoins = 1; - var $aPlus = 2; - - /** - * Propriétés à renseigner si $popup est à true - * - * Si $popup est à false, c'est que le calendrier va s'afficher dans la même page. Il faut - * donc spécifier le nom du formulaire, le nom du champ ainsi que celui de la page. Pour - * customiser un peu l'affichage, on peut jouer sur la largeur et les marges. - * - * @var boolean $popup A true, affichera le calendrier sous forme de popup - * @var string $largeurCal La largeur du calendrier (spécifier l'unité px, %, etc) - * @var string $margesCal Les marges du calendrier (genre 15px 10px 0 10px) - * @var string $form Le nom du formulaire - * @var string $champ Le nom du champ - * @var string $page Le nom de la page - */ - var $popup = true; - var $largeurCal = "100%"; - var $margesCal = 0; - var $form = null; - var $champ = null; - var $page = null; - - /** - * Propriétés diverses et variées - * - * @var string $titre Le titre de la popup - * @var string $css Le chemin et le nom du fichier de css du calendrier - * @var string $css Le chemin et le nom du fichier javascript du calendrier - * @var array $nomj Le nom des jours - * @var array $nomm Le nom des mois - * @var integer $mois Le mois choisi à afficher - * @var integer $annee L'année choisie à afficher - */ - var $titre = "Calendrier"; - var $css = "calendrier.css"; - var $js = "calendrier.js"; - var $nomj = array ("Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"); - var $nomm = array( - "Janvier", - "Février", - "Mars", - "Avril", - "Mai", - "Juin", - "Juillet", - "Août", - "Septembre", - "Octobre", - "Novembre", - "Décembre" - ); - var $mois = null; - var $annee = null; - - /** - * Propriétés concernant le style d'affichage du calendrier - * - * Par exemple, le style "fr" (français) commencera par lundi, alors que le style "en" (anglais) - * commencera lui par dimanche. - * - * @var array $stylesDispo Tableau de string représentant les styles disponibles - * @var string $style Le style d'affichage du calendrier - */ - var $stylesDispo = array("fr", "en"); - var $style = "fr"; - - - //---------------------------------------------------------------------------------------------------------------// - //-- CONSTRUCTEURS --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Assigne le nom du formulaire et du champ et récupère la date de maintenant - * - * @param string $form Le nom du formulaire - * @param string $champ Le nom du champ - */ - function Calendrier($form, $champ){ - $this->form = $form; - $this->champ = $champ; - $page = "?frm=".$form."&ch=".$champ; - $this->page = $page; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS PUBLIQUES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Change le style d'affichage du calendrier - * - * Un style fr commencera par lundi, alors qu'un style "en" débutera par dimanche - * - * @param string $form Le type d'affichage (fr ou en) - */ - function set_style($style){ - $tab = $this->stylesDispo; - if (in_array($style, $tab)){ - $this->style = $style; - }else{ - $this->style = "fr"; - } - } - - /** - * Set le nom de la page qu'il faut reloader - * - * A utiliser dans le seul cas où le calendrier est inclu dans une page (donc pas une - * popup pour lui tout seul) et qu'il y a des autres paramètres en GET. - * - * @param string $page Le nom de la page à reloader - */ - function set_page($page){ - $tab = explode("?", $page); - if (count($tab) > 1){ - $cc = "&"; - }else{ - $cc = "?"; - } - $page .= $cc."frm=".$this->form."&ch=".$this->champ; - $this->page = $page; - } - - /** - * Affiche ou non les zéros devant jours et mois < 10 - * - * @param boolean $zeros A true, affiche les zéros devant jours et mois < 10 - */ - function set_zeros($zeros){ - $this->zeros = $zeros; - } - - /** - * Fixe le format de la date à avoir dans le champ de formulaire - * - * L'ordre (année, mois, jour) peut être fourni dans un tableau (array("a", "m", "j")) ou - * dans une string ("amj") ou ("a,m,j") éventuellement. - * - * @param array|string $format L'ordre d'affichage des années, mois et jours - * @param string $sep La séparation entre années, mois et jours - * @return boolean True en cas de succès, false sinon - */ - function set_format($format, $sep){ - if (!is_array($format)){ - if (mb_strlen($format) == 3){ - $tmp = array(); - for ($i = 0; $i < mb_strlen($format); $i++){ - $tmp[] = $format[$i]; - } - $format = $tmp; - }else{ - return false; - } - } - $this->format = $format; - $this->sep = $sep; - return true; - } - - /** - * Détermine le mois et l'année en cours - * - * Par défaut, prend les valeurs d'aujourd'hui. - * - * @param integer $mois Le numéro du mois (1 = janvier) - * @param integer $annee L'année en 4 chiffres - */ - function set_date($mois, $annee){ - $this->mois = $mois; - $this->annee = $annee; - } - - /** - * Détermine le mois et l'année en cours - * - * Par défaut, prend les valeurs d'aujourd'hui. En fonction de la variable d'environnement - * $_POST. Le tableau doit en tout cas contenir ces valeurs : - * - $_POST['change_date'] : true ou false - * - $_POST['mois'] : le numéro du mois - * - $_POST['annee'] : l'année - * - * @param integer $mois Le numéro du mois (1 = janvier) - * @return boolean False si change_date n'existe pas, true sinon - */ - function auto_set_date(){ - if (isset($_POST['change_date'])){ - $this->set_date($_POST['mois'], $_POST['annee']); - return true; - } - return false; - } - - /** - * Assigne le spectre d'années à prendre en compte dans le calendrier - * - * @param integer $aMoins Le nb d'années en moins que la courante - * @param integer $aPlus Le nb d'années en plus que la courante - */ - function set_annees($aMoins, $aPlus){ - $this->aMoins = $aMoins; - //+1 parce que l'année courante est comprise dedans - $this->aPlus = $aPlus + 1; - } - - /** - * Sauve le chemin et le nom du fichier de css - * - * @param string $chemin Le chemin et le nom du fichier css - */ - function set_css($chemin){ - $this->css = $chemin; - } - - /** - * Sauve le chemin et le nom du fichier javascript - * - * @param string $chemin Le chemin et le nom du fichier javascript - */ - function set_js($chemin){ - $this->js = $chemin; - } - - /** - * Change le titre de la page - * - * @param string $titre Le titre de la page - */ - function set_titre($titre){ - $this->titre = $titre; - } - - /** - * Détermine si l'affichage du calendrier - * - * S'il est sous forme de popup, il faudra afficher toutes les entêtes html et insérer - * tous les fichiers css et js. S'il est contenu dans une page où il y a d'autres - * choses, il n'y a plus besoin des balises d'entêtes. - * - * @param boolean $estPop A true, affiche dans une popup, à false, non - */ - function set_popup($estPop){ - $this->popup = $estPop; - } - - /** - * Change le style du div qui englobe le calendrier - * - * On ne peut jouer que sur la largeur et/ou les marges. - * - * @param string $largeur La largeur du calendrier au format css - * @param string $marges Les marges du calendrier au format css - */ - function set_position($largeur, $marges){ - $this->largeurCal = $largeur; - $this->margesCal = $marges; - } - - /** - * Récupère la string pour ouvrir dans une popup - * - * @param string $page La page dans laquelle s'ouvrira le calendrier - * @param integer $l La largeur de la popup - * @param integer $h La hauteur de la popup - * @return string La string d'ouverture de popup - */ - function get_strPopup($page, $l, $h){ - $tab = explode("?", $page); - if (count($tab) > 1){ - $cc = "&"; - }else{ - $cc = "?"; - } - //$page .= $cc."frm=".$this->form."&ch=".$this->champ; - $page .= $cc."frm=".$this->form."&ch=".$this->champ; - $str = "window.open('".$page."','calendrier','width=".$l.",height=".$h.",scrollbars=0').focus();"; - return $str; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS AFFICHAGE PUBLIQUES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Affiche le calendrier dans la page - */ - function affiche(){ - $ajd = getdate(); - $mois = $ajd['mon']; - $annee = $ajd['year']; - if (isset($this->mois)){ - $mois = $this->mois; - } - if (isset($this->annee)){ - $annee = $this->annee; - } - if ($this->popup){ - $this->_affiche_entetes($this->titre, $this->css, $this->js); - $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); - $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); - $this->_affiche_basPage(); - }else{ - $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); - $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); - } - } - - /** - * Affiche l'insertion du fichier de javascript - * - * Utile seulement dans le cas où le calendrier n'est pas sous forme de popup, que la page hôte - * n'a pas de fichier js inclu dans le et/ou que les fonctions js du calendrier n'ont - * pas été copiées-collées dans le fichier js de la page - */ - function affiche_js(){ - echo ''."\n"; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS AFFICHAGE PRIVEES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Affiche les entêtes html - * - * Il s'agit concrétement des balises html, head, title, link, et ouverture de body - * - * @param string $titre Le titre de la page - * @param string $css Le lien vers la feuille de style - * @param string $js Le lien vers le fichier javascript - */ - function _affiche_entetes($titre, $css, $js){ - echo "\n"; - echo "\n"; - echo "\t".$titre."\n"; - echo "\t".''."\n"; - echo "\t".''."\n"; - echo "\n\n"; - echo "\n\n"; - } - - /** - * Affiche les fins de balises html - * - * Il s'agit concrétement des balises /html et /body - */ - function _affiche_basPage(){ - echo "\n"; - echo "\n"; - } - - /** - * Affiche le javascript de la page - * - * Concerne toutes les données utilisées dans les fonctions js du fichier js. - * - * @param string $frm Le nom du formulaire - * @param string $chm Le nom du champ - * @param boolean $zeros Affiche ou non le 0 devant jours et mois < 10 - * @param string $sep Le séparateur entre année, mois et jour - * @param boolean $popup Détermine si on va fermer la popup ou non - * @param array $ordre L'ordre de la date (année - mois - jour) - * @param integer $mois Le numéro du mois - * @param integer $annee L'année - */ - function _affiche_js($frm, $chm, $zeros, $sep, $popup, $ordre, $mois, $annee){ - if ($zeros){ - $zeros = "true"; - }else{ - $zeros = "false"; - } - echo '\n\n"; - } - - /** - * Affiche le calendrier - * - * @param string $largeur La largeur du calendrier - * @param string $marges Les éventuelles marges du calendrier - * @param string $link Le nom de la page où il y a le calendrier avec les valeurs GET - * @param array $nomm Le noms des mois - * @param integer $anneeMin Le nb d'année en moins que celle actuelle - * @param integer $anneeMax Le nb d'année en plus que celle actuelle - * @param array $ajd Le tableau getdate() d'aujourd'hui - * @param string $affichage Le style d'affichage (fr, en) - */ - function _affiche_calendrier($largeur, $marges, $link, $nomm, $anneeMin, $anneeMax, $ajd, $affichage){ - $mois = $ajd['mon']; - $annee = $ajd['year']; - $aujourdhui = array($ajd['mday'], $mois, $annee); - if (isset($this->mois)){ - $mois = $this->mois; - } - if (isset($this->annee)){ - $annee = $this->annee; - } - list($premierJour, $dernierJour) = $this->_get_ajd($annee, $mois); - $nomj = $this->nomj; - - //Intervention des marges et largeur, si on est pas dans une popup - echo '
'."\n"; - - echo "\t".'
'."\n"; - echo "\t".'\n"; - echo "\t".'\n"; - echo "\t".''."\n"; - echo "\t
\n\n"; - echo "\t".''."\n"; - echo "\t\t\n"; - /** - * Affichage du nom des jours - */ - for ($jour = 0; $jour < 7; $jour++){ - $classe = $this->_get_classe($jour, 1, $affichage); - echo "\t\t\t".$nomj[$jour]."\n"; - } - echo "\t\t\n"; - /** - * Affichage des cellules vides en début de mois, s'il y en a - */ - for ($prems = 0; $prems < $premierJour; $prems++){ - $classe = $this->_get_classe($prems, 2, $affichage); - echo "\t\t\t \n"; - } - /** - * Affichage des jours du mois - */ - $cptJour = 0; - for ($jour = 1; $jour <= $dernierJour; $jour++){ - $classe = $this->_get_classeJour($aujourdhui, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $affichage); - $cptJour++; - echo "\t\t\t".''.$jour.''."\n"; - if (is_int(($jour + $prems) / 7)){ - $cptJour = 0; - echo "\t\t\n"; - if ($jour < $dernierJour){ - echo "\t\t\n"; - } - } - } - /** - * Affichage des cellules vides en fin de mois, s'il y en a - */ - if ($cptJour != 0){ - for ($i = 0; $i < (7 - $cptJour); $i++){ - $classe = $this->_get_classeJourReste($i, $cptJour, $affichage); - echo "\t\t\t \n"; - } - echo "\t\t\n"; - } - echo "\t
\n"; - echo "
\n\n"; - } - - - //---------------------------------------------------------------------------------------------------------------// - //-- FONCTIONS PRIVEES --// - //---------------------------------------------------------------------------------------------------------------// - - /** - * Renvoie la position du 1er et dernier jour du mois - * - * En fonction du mois et de l'année, retourne exactement le numéro du jour dans la - * semaine. Le tableau de retour est comme suit : - * - $tab[0] : le numéro du 1er jour - * - $tab[1] : le numéro du dernier jour - * - * @param integer $annee L'année choisie - * @param integer $mois Le mois choisi - * @return array Le tableau du 1er et dernier jour du mois - */ - function _get_ajd($annee, $mois){ - $affichage = $this->style; - $nomj = $this->nomj; - - $moisCheck = $mois + 1; - $anneeCheck = $annee; - if ($moisCheck > 12){ - $moisCheck = 1; - $anneeCheck = $annee + 1; - } - - $dernierJour = strftime("%d", mktime(0, 0, 0, $moisCheck, 0, $anneeCheck)); - $premierJour = date("w", mktime(0, 0, 0, $mois, 1, $annee)); - - if ($affichage == "fr"){ - //On modifie la position du premier jour suivant la disposition des jours qu'on veut - $origine = 1; - if ($origine > 7){ - $origine = 7; - } - $j = $origine; - for ($i = 0; $i < count($nomj); $i++){ - if ($j >= count($nomj)){ - $j = 0; - } - $temp[] = $nomj[$j]; - $j++; - } - //On décale le 1er jour en conséquence - $premierJour -= $origine; - if ($premierJour < 0){ - $premierJour = 6 - (abs($premierJour) - 1); - } - $this->nomj = $temp; - } - return array($premierJour, $dernierJour); - } - - /** - * Renvoie une string qui vaut selected ou non, pour un champs SELECT - * - * @param integer $temps L'année ou le mois choisi - * @param integer $i L'annee en cours - * @return string La string nécessaire pour sélectionner une OPTION - */ - function _get_selected($temps, $i){ - $selected = ""; - if ($temps == $i){ - $selected = " selected=\"selected\""; - } - return $selected; - } - - /** - * Renvoie une string représentant l'appel à une classe CSS - * - * Pour les valeurs par défaut : - * - 1 : ' class="aut"' - * - 2 : '' - * - * @param integer $jour Le jour en cours - * @param integer $index La valeur par défaut de la string - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classe($jour, $index, $mode){ - switch ($index) { - case 1: - $classe = " class=\"aut\""; - break; - default: - $classe = ""; - } - switch ($mode) { - case "en": - $x1 = 0; - $x2 = 6; - break; - default: - $x1 = 6; - $x2 = 5; - } - if ($jour == $x1){ - $classe = " class=\"dim\""; - }elseif ($jour == $x2){ - $classe = " class=\"sam\""; - } - return $classe; - } - - /** - * Détermine si on est sur un dimanche ou un samedi, à partir du 1er du mois - * - * @param array $ajd Le jour, mois et année de maintenant - * @param integer $annee L'année en cours - * @param integer $mois Le mois en cours - * @param integer $jour Le jour en cours - * @param integer $cptJour Le numéro du jour en cours de la semaine - * @param integer $premierJour Le numéro du 1er jour (dans la semaine) du mois - * @param array $nomj Le tableau des noms des jours - * @param integer $prems Le numéro du dernier jour de la semaine du mois précédent - * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classeJour($ajd, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $mode){ - $classe = ""; - if ($mode == "en"){ - if (($cptJour == 0 && $jour > 1) || ($jour == 1 && $premierJour == 0)){ - $classe = " class=\"dim\""; - }elseif ($cptJour == 6 || (count($nomj) - $jour == $prems)){ - $classe = " class=\"sam\""; - } - }else{ - if ($cptJour == 6 || (count($nomj) - $jour == $prems)){ - $classe = " class=\"dim\""; - }else if ($cptJour == 5 || (count($nomj) - $jour - 1 == $prems)){ - $classe = " class=\"sam\""; - } - } - if ($jour == $ajd[0] && $mois == $ajd[1] && $annee == $ajd[2]){ - $classe = " class=\"ajd\""; - } - return $classe; - } - - /** - * Détermine si on est sur un samedi, lorsqu'on complète le tableau - * - * @param integer $i Le jour en cours - * @param integer $cptJour Le numéro du dernier jour (dans la semaine) du mois - * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") - * @return string La string nécessaire pour appeller la classe CSS voulue - */ - function _get_classeJourReste($i, $cptJour, $mode){ - $classe = ""; - if ($mode == "en"){ - if ($i == (7 - $cptJour) - 1){ - $classe = " class=\"sam\""; - } - }else{ - if ($i == (6 - $cptJour) - 1){ - $classe = " class=\"sam\""; - }else if ($i == (7 - $cptJour) - 1){ - $classe = " class=\"dim\""; - } - } - return $classe; - } + //---------------------------------------------------------------------------------------------------------------// + //-- PROPRIETES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Variables concernant le format de la date + * + * @var boolean $zeros A true, on met les zéros devant mois ou jour s'ils sont plus petit que 10 + * @var array $format L'ordre de la date, soit l'année (a), le mois (m) et le jour (j) + * @var string $sep Le séparateur entre l'année, le mois et le jour + */ + var $zeros = true; + var $format = array("j", "m", "a"); + var $sep = "/"; + + /** + * Propriétés concernant les années dipsonibles dans le calendrier + * + * @var integer $aMoins Le nombre d'années de moins que celle actuelle + * @var integer $aPlus Le nombre d'années de plus que celle actuelle + */ + var $aMoins = 1; + var $aPlus = 2; + + /** + * Propriétés à renseigner si $popup est à true + * + * Si $popup est à false, c'est que le calendrier va s'afficher dans la même page. Il faut + * donc spécifier le nom du formulaire, le nom du champ ainsi que celui de la page. Pour + * customiser un peu l'affichage, on peut jouer sur la largeur et les marges. + * + * @var boolean $popup A true, affichera le calendrier sous forme de popup + * @var string $largeurCal La largeur du calendrier (spécifier l'unité px, %, etc) + * @var string $margesCal Les marges du calendrier (genre 15px 10px 0 10px) + * @var string $form Le nom du formulaire + * @var string $champ Le nom du champ + * @var string $page Le nom de la page + */ + var $popup = true; + var $largeurCal = "100%"; + var $margesCal = 0; + var $form = null; + var $champ = null; + var $page = null; + + /** + * Propriétés diverses et variées + * + * @var string $titre Le titre de la popup + * @var string $css Le chemin et le nom du fichier de css du calendrier + * @var string $css Le chemin et le nom du fichier javascript du calendrier + * @var array $nomj Le nom des jours + * @var array $nomm Le nom des mois + * @var integer $mois Le mois choisi à afficher + * @var integer $annee L'année choisie à afficher + */ + var $titre = "Calendrier"; + var $css = "calendrier.css"; + var $js = "calendrier.js"; + var $nomj = array("Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"); + var $nomm = array( + "Janvier", + "Février", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Août", + "Septembre", + "Octobre", + "Novembre", + "Décembre" + ); + var $mois = null; + var $annee = null; + + /** + * Propriétés concernant le style d'affichage du calendrier + * + * Par exemple, le style "fr" (français) commencera par lundi, alors que le style "en" (anglais) + * commencera lui par dimanche. + * + * @var array $stylesDispo Tableau de string représentant les styles disponibles + * @var string $style Le style d'affichage du calendrier + */ + var $stylesDispo = array("fr", "en"); + var $style = "fr"; + + + //---------------------------------------------------------------------------------------------------------------// + //-- CONSTRUCTEURS --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Assigne le nom du formulaire et du champ et récupère la date de maintenant + * + * @param string $form Le nom du formulaire + * @param string $champ Le nom du champ + */ + function __construct($form, $champ) { + $this->form = $form; + $this->champ = $champ; + $page = "?frm=" . $form . "&ch=" . $champ; + $this->page = $page; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS PUBLIQUES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Change le style d'affichage du calendrier + * + * Un style fr commencera par lundi, alors qu'un style "en" débutera par dimanche + * + * @param string $form Le type d'affichage (fr ou en) + */ + function set_style($style) { + $tab = $this->stylesDispo; + if (in_array($style, $tab)) { + $this->style = $style; + } else { + $this->style = "fr"; + } + } + + /** + * Set le nom de la page qu'il faut reloader + * + * A utiliser dans le seul cas où le calendrier est inclu dans une page (donc pas une + * popup pour lui tout seul) et qu'il y a des autres paramètres en GET. + * + * @param string $page Le nom de la page à reloader + */ + function set_page($page) { + $tab = explode("?", $page); + if (count($tab) > 1) { + $cc = "&"; + } else { + $cc = "?"; + } + $page .= $cc . "frm=" . $this->form . "&ch=" . $this->champ; + $this->page = $page; + } + + /** + * Affiche ou non les zéros devant jours et mois < 10 + * + * @param boolean $zeros A true, affiche les zéros devant jours et mois < 10 + */ + function set_zeros($zeros) { + $this->zeros = $zeros; + } + + /** + * Fixe le format de la date à avoir dans le champ de formulaire + * + * L'ordre (année, mois, jour) peut être fourni dans un tableau (array("a", "m", "j")) ou + * dans une string ("amj") ou ("a,m,j") éventuellement. + * + * @param array|string $format L'ordre d'affichage des années, mois et jours + * @param string $sep La séparation entre années, mois et jours + * @return boolean True en cas de succès, false sinon + */ + function set_format($format, $sep) { + if (!is_array($format)) { + if (mb_strlen($format) == 3) { + $tmp = array(); + for ($i = 0; $i < mb_strlen($format); $i++) { + $tmp[] = $format[$i]; + } + $format = $tmp; + } else { + return false; + } + } + $this->format = $format; + $this->sep = $sep; + return true; + } + + /** + * Détermine le mois et l'année en cours + * + * Par défaut, prend les valeurs d'aujourd'hui. + * + * @param integer $mois Le numéro du mois (1 = janvier) + * @param integer $annee L'année en 4 chiffres + */ + function set_date($mois, $annee) { + $this->mois = $mois; + $this->annee = $annee; + } + + /** + * Détermine le mois et l'année en cours + * + * Par défaut, prend les valeurs d'aujourd'hui. En fonction de la variable d'environnement + * $_POST. Le tableau doit en tout cas contenir ces valeurs : + * - $_POST['change_date'] : true ou false + * - $_POST['mois'] : le numéro du mois + * - $_POST['annee'] : l'année + * + * @param integer $mois Le numéro du mois (1 = janvier) + * @return boolean False si change_date n'existe pas, true sinon + */ + function auto_set_date() { + if (isset($_POST['change_date'])) { + $this->set_date($_POST['mois'], $_POST['annee']); + return true; + } + return false; + } + + /** + * Assigne le spectre d'années à prendre en compte dans le calendrier + * + * @param integer $aMoins Le nb d'années en moins que la courante + * @param integer $aPlus Le nb d'années en plus que la courante + */ + function set_annees($aMoins, $aPlus) { + $this->aMoins = $aMoins; + //+1 parce que l'année courante est comprise dedans + $this->aPlus = $aPlus + 1; + } + + /** + * Sauve le chemin et le nom du fichier de css + * + * @param string $chemin Le chemin et le nom du fichier css + */ + function set_css($chemin) { + $this->css = $chemin; + } + + /** + * Sauve le chemin et le nom du fichier javascript + * + * @param string $chemin Le chemin et le nom du fichier javascript + */ + function set_js($chemin) { + $this->js = $chemin; + } + + /** + * Change le titre de la page + * + * @param string $titre Le titre de la page + */ + function set_titre($titre) { + $this->titre = $titre; + } + + /** + * Détermine si l'affichage du calendrier + * + * S'il est sous forme de popup, il faudra afficher toutes les entêtes html et insérer + * tous les fichiers css et js. S'il est contenu dans une page où il y a d'autres + * choses, il n'y a plus besoin des balises d'entêtes. + * + * @param boolean $estPop A true, affiche dans une popup, à false, non + */ + function set_popup($estPop) { + $this->popup = $estPop; + } + + /** + * Change le style du div qui englobe le calendrier + * + * On ne peut jouer que sur la largeur et/ou les marges. + * + * @param string $largeur La largeur du calendrier au format css + * @param string $marges Les marges du calendrier au format css + */ + function set_position($largeur, $marges) { + $this->largeurCal = $largeur; + $this->margesCal = $marges; + } + + /** + * Récupère la string pour ouvrir dans une popup + * + * @param string $page La page dans laquelle s'ouvrira le calendrier + * @param integer $l La largeur de la popup + * @param integer $h La hauteur de la popup + * @return string La string d'ouverture de popup + */ + function get_strPopup($page, $l, $h) { + $tab = explode("?", $page); + if (count($tab) > 1) { + $cc = "&"; + } else { + $cc = "?"; + } + //$page .= $cc."frm=".$this->form."&ch=".$this->champ; + $page .= $cc . "frm=" . $this->form . "&ch=" . $this->champ; + $str = "window.open('" . $page . "','calendrier','width=" . $l . ",height=" . $h . ",scrollbars=0').focus();"; + return $str; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS AFFICHAGE PUBLIQUES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Affiche le calendrier dans la page + */ + function affiche() { + $ajd = getdate(); + $mois = $ajd['mon']; + $annee = $ajd['year']; + if (isset($this->mois)) { + $mois = $this->mois; + } + if (isset($this->annee)) { + $annee = $this->annee; + } + if ($this->popup) { + $this->_affiche_entetes($this->titre, $this->css, $this->js); + $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); + $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); + $this->_affiche_basPage(); + } else { + $this->_affiche_calendrier($this->largeurCal, $this->margesCal, $this->page, $this->nomm, $this->aMoins, $this->aPlus, $ajd, $this->style); + $this->_affiche_js($this->form, $this->champ, $this->zeros, $this->sep, $this->popup, $this->format, $mois, $annee); + } + } + + /** + * Affiche l'insertion du fichier de javascript + * + * Utile seulement dans le cas où le calendrier n'est pas sous forme de popup, que la page hôte + * n'a pas de fichier js inclu dans le et/ou que les fonctions js du calendrier n'ont + * pas été copiées-collées dans le fichier js de la page + */ + function affiche_js() { + echo '' . "\n"; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS AFFICHAGE PRIVEES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Affiche les entêtes html + * + * Il s'agit concrétement des balises html, head, title, link, et ouverture de body + * + * @param string $titre Le titre de la page + * @param string $css Le lien vers la feuille de style + * @param string $js Le lien vers le fichier javascript + */ + function _affiche_entetes($titre, $css, $js) { + echo "\n"; + echo "\n"; + echo "\t" . $titre . "\n"; + echo "\t" . '' . "\n"; + echo "\t" . '' . "\n"; + echo "\n\n"; + echo "\n\n"; + } + + /** + * Affiche les fins de balises html + * + * Il s'agit concrétement des balises /html et /body + */ + function _affiche_basPage() { + echo "\n"; + echo "\n"; + } + + /** + * Affiche le javascript de la page + * + * Concerne toutes les données utilisées dans les fonctions js du fichier js. + * + * @param string $frm Le nom du formulaire + * @param string $chm Le nom du champ + * @param boolean $zeros Affiche ou non le 0 devant jours et mois < 10 + * @param string $sep Le séparateur entre année, mois et jour + * @param boolean $popup Détermine si on va fermer la popup ou non + * @param array $ordre L'ordre de la date (année - mois - jour) + * @param integer $mois Le numéro du mois + * @param integer $annee L'année + */ + function _affiche_js($frm, $chm, $zeros, $sep, $popup, $ordre, $mois, $annee) { + if ($zeros) { + $zeros = "true"; + } else { + $zeros = "false"; + } + echo '\n\n"; + } + + /** + * Affiche le calendrier + * + * @param string $largeur La largeur du calendrier + * @param string $marges Les éventuelles marges du calendrier + * @param string $link Le nom de la page où il y a le calendrier avec les valeurs GET + * @param array $nomm Le noms des mois + * @param integer $anneeMin Le nb d'année en moins que celle actuelle + * @param integer $anneeMax Le nb d'année en plus que celle actuelle + * @param array $ajd Le tableau getdate() d'aujourd'hui + * @param string $affichage Le style d'affichage (fr, en) + */ + function _affiche_calendrier($largeur, $marges, $link, $nomm, $anneeMin, $anneeMax, $ajd, $affichage) { + $mois = $ajd['mon']; + $annee = $ajd['year']; + $aujourdhui = array($ajd['mday'], $mois, $annee); + if (isset($this->mois)) { + $mois = $this->mois; + } + if (isset($this->annee)) { + $annee = $this->annee; + } + list($premierJour, $dernierJour) = $this->_get_ajd($annee, $mois); + $nomj = $this->nomj; + + //Intervention des marges et largeur, si on est pas dans une popup + echo '
' . "\n"; + + echo "\t" . '
' . "\n"; + echo "\t" . '\n"; + echo "\t" . '\n"; + echo "\t" . '' . "\n"; + echo "\t
\n\n"; + echo "\t" . '' . "\n"; + echo "\t\t\n"; + /** + * Affichage du nom des jours + */ + for ($jour = 0; $jour < 7; $jour++) { + $classe = $this->_get_classe($jour, 1, $affichage); + echo "\t\t\t" . $nomj[$jour] . "\n"; + } + echo "\t\t\n"; + /** + * Affichage des cellules vides en début de mois, s'il y en a + */ + for ($prems = 0; $prems < $premierJour; $prems++) { + $classe = $this->_get_classe($prems, 2, $affichage); + echo "\t\t\t \n"; + } + /** + * Affichage des jours du mois + */ + $cptJour = 0; + for ($jour = 1; $jour <= $dernierJour; $jour++) { + $classe = $this->_get_classeJour($aujourdhui, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $affichage); + $cptJour++; + echo "\t\t\t" . '' . $jour . '' . "\n"; + if (is_int(($jour + $prems) / 7)) { + $cptJour = 0; + echo "\t\t\n"; + if ($jour < $dernierJour) { + echo "\t\t\n"; + } + } + } + /** + * Affichage des cellules vides en fin de mois, s'il y en a + */ + if ($cptJour != 0) { + for ($i = 0; $i < (7 - $cptJour); $i++) { + $classe = $this->_get_classeJourReste($i, $cptJour, $affichage); + echo "\t\t\t \n"; + } + echo "\t\t\n"; + } + echo "\t
\n"; + echo "
\n\n"; + } + + + //---------------------------------------------------------------------------------------------------------------// + //-- FONCTIONS PRIVEES --// + //---------------------------------------------------------------------------------------------------------------// + + /** + * Renvoie la position du 1er et dernier jour du mois + * + * En fonction du mois et de l'année, retourne exactement le numéro du jour dans la + * semaine. Le tableau de retour est comme suit : + * - $tab[0] : le numéro du 1er jour + * - $tab[1] : le numéro du dernier jour + * + * @param integer $annee L'année choisie + * @param integer $mois Le mois choisi + * @return array Le tableau du 1er et dernier jour du mois + */ + function _get_ajd($annee, $mois) { + $affichage = $this->style; + $nomj = $this->nomj; + + $moisCheck = $mois + 1; + $anneeCheck = $annee; + if ($moisCheck > 12) { + $moisCheck = 1; + $anneeCheck = $annee + 1; + } + + $dernierJour = strftime("%d", mktime(0, 0, 0, $moisCheck, 0, $anneeCheck)); + $premierJour = date("w", mktime(0, 0, 0, $mois, 1, $annee)); + + if ($affichage == "fr") { + //On modifie la position du premier jour suivant la disposition des jours qu'on veut + $origine = 1; + if ($origine > 7) { + $origine = 7; + } + $j = $origine; + for ($i = 0; $i < count($nomj); $i++) { + if ($j >= count($nomj)) { + $j = 0; + } + $temp[] = $nomj[$j]; + $j++; + } + //On décale le 1er jour en conséquence + $premierJour -= $origine; + if ($premierJour < 0) { + $premierJour = 6 - (abs($premierJour) - 1); + } + $this->nomj = $temp; + } + return array($premierJour, $dernierJour); + } + + /** + * Renvoie une string qui vaut selected ou non, pour un champs SELECT + * + * @param integer $temps L'année ou le mois choisi + * @param integer $i L'annee en cours + * @return string La string nécessaire pour sélectionner une OPTION + */ + function _get_selected($temps, $i) { + $selected = ""; + if ($temps == $i) { + $selected = " selected=\"selected\""; + } + return $selected; + } + + /** + * Renvoie une string représentant l'appel à une classe CSS + * + * Pour les valeurs par défaut : + * - 1 : ' class="aut"' + * - 2 : '' + * + * @param integer $jour Le jour en cours + * @param integer $index La valeur par défaut de la string + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classe($jour, $index, $mode) { + switch ($index) { + case 1: + $classe = " class=\"aut\""; + break; + default: + $classe = ""; + } + switch ($mode) { + case "en": + $x1 = 0; + $x2 = 6; + break; + default: + $x1 = 6; + $x2 = 5; + } + if ($jour == $x1) { + $classe = " class=\"dim\""; + } elseif ($jour == $x2) { + $classe = " class=\"sam\""; + } + return $classe; + } + + /** + * Détermine si on est sur un dimanche ou un samedi, à partir du 1er du mois + * + * @param array $ajd Le jour, mois et année de maintenant + * @param integer $annee L'année en cours + * @param integer $mois Le mois en cours + * @param integer $jour Le jour en cours + * @param integer $cptJour Le numéro du jour en cours de la semaine + * @param integer $premierJour Le numéro du 1er jour (dans la semaine) du mois + * @param array $nomj Le tableau des noms des jours + * @param integer $prems Le numéro du dernier jour de la semaine du mois précédent + * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classeJour($ajd, $annee, $mois, $jour, $cptJour, $premierJour, $nomj, $prems, $mode) { + $classe = ""; + if ($mode == "en") { + if (($cptJour == 0 && $jour > 1) || ($jour == 1 && $premierJour == 0)) { + $classe = " class=\"dim\""; + } elseif ($cptJour == 6 || (count($nomj) - $jour == $prems)) { + $classe = " class=\"sam\""; + } + } else { + if ($cptJour == 6 || (count($nomj) - $jour == $prems)) { + $classe = " class=\"dim\""; + } else if ($cptJour == 5 || (count($nomj) - $jour - 1 == $prems)) { + $classe = " class=\"sam\""; + } + } + if ($jour == $ajd[0] && $mois == $ajd[1] && $annee == $ajd[2]) { + $classe = " class=\"ajd\""; + } + return $classe; + } + + /** + * Détermine si on est sur un samedi, lorsqu'on complète le tableau + * + * @param integer $i Le jour en cours + * @param integer $cptJour Le numéro du dernier jour (dans la semaine) du mois + * @param string $mode Le mode d'affichage du calendrier ("fr" ou "en") + * @return string La string nécessaire pour appeller la classe CSS voulue + */ + function _get_classeJourReste($i, $cptJour, $mode) { + $classe = ""; + if ($mode == "en") { + if ($i == (7 - $cptJour) - 1) { + $classe = " class=\"sam\""; + } + } else { + if ($i == (6 - $cptJour) - 1) { + $classe = " class=\"sam\""; + } else if ($i == (7 - $cptJour) - 1) { + $classe = " class=\"dim\""; + } + } + return $classe; + } } - -?> diff --git a/lib/calendrier/pop.calendrier.php b/lib/calendrier/pop.calendrier.php index 10bede2507..a95f8b1089 100755 --- a/lib/calendrier/pop.calendrier.php +++ b/lib/calendrier/pop.calendrier.php @@ -1,6 +1,5 @@ auto_set_date(); $cal->affiche(); - -?> diff --git a/lib/clock_fr.js b/lib/clock_fr.js index a23d55aff9..ae29731076 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -1,10 +1,10 @@ /* - * Last modification : 18/03/2005 + * Last modification : 02/06/2021 * */ -var LC_Style=["","",0,1,4,1,2]; +const LC_Style = ["", "", 0, 1, 4, 1, 2]; // arg 0 : balise d'ouverture // arg 1 : balise de fermeture // arg 2 : si 0 affichage sur 24 heures, si 1 affichage anglais AM et PM @@ -13,103 +13,145 @@ var LC_Style=["","",0,1,4,1,2]; // arg 5 : si 0 -> nom complet des jours et mois. Si 1 -> noms abrégés // arg 6 : valeur ajoutée au GMT -var LC_IE=(document.all); -var LC_NS=(document.layers); -var LC_N6=(window.sidebar); -var LC_Old=(!LC_IE&&!LC_NS&&!LC_N6); -var LC_Clocks=new Array(); -var LC_DaysOfWeek=[["Dimanche","Dim."],["Lundi","Lun."],["Mardi","Mar."],["Mercredi","Mer."],["Jeudi","Jeu."],["Vendredi","Ven."],["Samedi","Sam."]]; -var LC_MonthsOfYear=[["Janvier","Jan."],["Fevrier","Fev."],["Mars","Mar."],["Avril","Avr."],["Mai","Mai."],["Juin","Juin."],["Juillet","Juil."],["Août","Aoû."],["Septembre","Sep."],["Octobre","Oct."],["Novembre","Nov."],["Décembre","Dec."]]; -var LC_ClockUpdate=[0,1000,60000]; +const LC_IE = (document.all); +const LC_NS = (document.layers); +const LC_N6 = (window.sidebar); +const LC_Old = (!LC_IE && !LC_NS && !LC_N6); +const LC_Clocks = []; +const LC_DaysOfWeek = [["Dimanche", "Dim."], ["Lundi", "Lun."], ["Mardi", "Mar."], ["Mercredi", "Mer."], ["Jeudi", "Jeu."], ["Vendredi", "Ven."], ["Samedi", "Sam."]]; +const LC_MonthsOfYear = [["Janvier", "Jan."], ["Fevrier", "Fev."], ["Mars", "Mar."], ["Avril", "Avr."], ["Mai", "Mai."], ["Juin", "Juin."], ["Juillet", "Juil."], ["Août", "Aoû."], ["Septembre", "Sep."], ["Octobre", "Oct."], ["Novembre", "Nov."], ["Décembre", "Dec."]]; +const LC_ClockUpdate = [0, 1000, 60000]; -function LC_CreateClock(c){ - if(LC_IE||LC_N6){ - clockTags='' - }else if(LC_NS){ - clockTags='' - } - if(!LC_Old){ - document.write(clockTags) - }else{ - LC_UpdateClock(LC_Clocks.length-1) +function LC_CreateClock(c) { + let clockTags; + if (LC_IE || LC_N6) { + clockTags = '' + } else if (LC_NS) { + clockTags = '' } + if (!LC_Old) { + document.write(clockTags) + } else { + LC_UpdateClock(LC_Clocks.length - 1) + } } -function LC_InitializeClocks(){ - LC_OtherOnloads(); - if(LC_Old){ - return - } - for(i=0;i=3){md+="";abbrev="th"; - if(md.charAt(md.length-2)!=1){ - var tmp=md.charAt(md.length-1); - if(tmp==1){ - abbrev="sd" - }else if(tmp==2){ - abbrev="nd" - }else if(tmp==3){ - abbrev="rd" +function LC_UpdateClock(Clock) { + const c = LC_Clocks[Clock]; + const t = new Date(); + const day = t.getDay(); + let md = t.getDate(); + const mnth = t.getMonth(); + let hrs = t.getHours(); + let mins = t.getMinutes(); + let secs = t.getSeconds(); + let yr = t.getYear(); + if (yr < 1900) { + yr += 1900 + } + let abbrev; + if (c.DisplayDate >= 3) { + md += ""; + abbrev = "th"; + if (md.charAt(md.length - 2) !== 1) { + const tmp = md.charAt(md.length - 1); + if (tmp === 1) { + abbrev = "sd" + } else if (tmp === 2) { + abbrev = "nd" + } else if (tmp === 3) { + abbrev = "rd" + } } } - } - var ampm=""; - if(c.Hour12==1){ampm="AM"; - if(hrs>=12){ampm="PM";hrs-=12} - if(hrs==0){hrs=12}} - if(mins<=9){mins="0"+mins} - if(secs<=9){secs="0"+secs} - var html='';html+=c.OpenTags; - if(LC_NS){html+='
';} - if(c.DisplayDate==1){html+=' '+md+'/'+(mnth+1)+'/'+yr} - if(c.DisplayDate==2){html+=' '+(mnth+1)+'/'+md+'/'+yr} - if(c.DisplayDate>=3){html+=LC_DaysOfWeek[day][c.Abbreviate]+' '+md+' '+LC_MonthsOfYear[mnth][c.Abbreviate]} - if(c.DisplayDate>=4){html+=' '+yr}html+=''; - // html+='
'; - html+=' - '; - html+=''; - html+=hrs+':'+mins; - if(c.Update==1){html+=':'+secs} - if(c.Hour12){html+=' '+ampm}html+=c.CloseTags; - if(LC_NS){html+='
';} - html+=''; - if(LC_NS){ - var l=document.layers[c.Name+"Pos"].document.layers[c.Name].document;l.open();l.write(html);l.close(); - }else if(LC_N6||LC_IE){ - document.getElementById(c.Name).innerHTML=html; - }else{document.write(html);} + let ampm = ""; + if (c.Hour12 === 1) { + ampm = "AM"; + if (hrs >= 12) { + ampm = "PM"; + hrs -= 12 + } + if (hrs === 0) { + hrs = 12 + } + } + if (mins <= 9) { + mins = "0" + mins + } + if (secs <= 9) { + secs = "0" + secs + } + let html = ''; + html += c.OpenTags; + if (LC_NS) { + html += '
'; + } + if (c.DisplayDate === 1) { + html += ' ' + md + '/' + (mnth + 1) + '/' + yr + } + if (c.DisplayDate === 2) { + html += ' ' + (mnth + 1) + '/' + md + '/' + yr + } + if (c.DisplayDate >= 3) { + html += LC_DaysOfWeek[day][c.Abbreviate] + ' ' + md + ' ' + LC_MonthsOfYear[mnth][c.Abbreviate] + } + if (c.DisplayDate >= 4) { + html += ' ' + yr + } + html += ''; + // html+='
'; + html += ' - '; + html += ''; + html += hrs + ':' + mins; + if (c.Update === 1) { + html += ':' + secs + } + if (c.Hour12) { + html += ' ' + ampm + } + html += c.CloseTags; + if (LC_NS) { + html += '
'; + } + html += ''; + if (LC_NS) { + const l = document.layers[c.Name + "Pos"].document.layers[c.Name].document; + l.open(); + l.write(html); + l.close(); + } else if (LC_N6 || LC_IE) { + document.getElementById(c.Name).innerHTML = html; + } else { + document.write(html); + } } -function LiveClock(a,b,c,d,e,f,g,h,i,j,k,l){ -this.Name='LiveClock'+LC_Clocks.length; -this.OpenTags=e||LC_Style[0]; -this.CloseTags=f||LC_Style[1]; -this.Hour12=h||LC_Style[2]; -this.Update=i||LC_Style[3]; -this.DisplayDate=k||LC_Style[4]; -this.Abbreviate=j||LC_Style[5]; -this.GMT=l||LC_Style[6]; -LC_Clocks[LC_Clocks.length]=this; -LC_CreateClock(this); +function LiveClock(a, b, c, d, e, f, g, h, i, j, k, l) { + this.Name = 'LiveClock' + LC_Clocks.length; + this.OpenTags = e || LC_Style[0]; + this.CloseTags = f || LC_Style[1]; + this.Hour12 = h || LC_Style[2]; + this.Update = i || LC_Style[3]; + this.DisplayDate = k || LC_Style[4]; + this.Abbreviate = j || LC_Style[5]; + this.GMT = l || LC_Style[6]; + LC_Clocks[LC_Clocks.length] = this; + LC_CreateClock(this); } -LC_OtherOnloads=(window.onload)?window.onload:new Function;window.onload=LC_InitializeClocks; \ No newline at end of file +LC_OtherOnloads = (window.onload) ? window.onload : new Function; +window.onload = LC_InitializeClocks; diff --git a/lib/cookieClass.js b/lib/cookieClass.js index 1e270b556d..7605d4368b 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -5,13 +5,14 @@ * http://codeinthehole.com/archives/5-Javascript-cookie-objects-using-Prototype-and-JSON.html * *********************************************** */ -var Cookies = Class.create({ - initialize: function(path, domain) { +const Cookies = Class.create({ + initialize: function (path, domain) { this.path = path || '/'; this.domain = domain || null; }, // Sets a cookie - set: function(key, value, days) { + set: function (key, value, days) { + let setExpiration; if (typeof key != 'string') { throw "Invalid key"; } @@ -21,22 +22,23 @@ var Cookies = Class.create({ if (days && typeof days != 'number') { throw "Invalid expiration time"; } - var setValue = key+'='+escape(new String(value)); + const setValue = key + '=' + escape(String(value)); if (days) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - var setExpiration = "; expires="+date.toGMTString(); - } else var setExpiration = ""; - var setPath = '; path='+('/'); - var setDomain = (this.domain) ? '; domain='+escape(this.domain) : ''; - var cookieString = setValue+setExpiration+setPath+setDomain; - document.cookie = cookieString; + const date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + setExpiration = "; expires=" + date.toGMTString(); + } else { + setExpiration = ""; + } + const setPath = '; path=' + ('/'); + const setDomain = (this.domain) ? '; domain=' + escape(this.domain) : ''; + document.cookie = setValue + setExpiration + setPath + setDomain; }, // Returns a cookie value or false - get: function(key) { - var keyEquals = key+"="; - var value = false; - document.cookie.split(';').invoke('strip').each(function(s){ + get: function (key) { + const keyEquals = key + "="; + let value = false; + document.cookie.split(';').invoke('strip').each(function (s) { if (s.startsWith(keyEquals)) { value = unescape(s.substring(keyEquals.length, s.length)); throw $break; @@ -45,15 +47,15 @@ var Cookies = Class.create({ return value; }, // Clears a cookie - clear: function(key) { - this.set(key,''); + clear: function (key) { + this.set(key, ''); }, // Clears all cookies - clearAll: function() { - document.cookie.split(';').collect(function(s){ + clearAll: function () { + document.cookie.split(';').collect(function (s) { return s.split('=').first().strip(); - }).each(function(key){ + }).each(function (key) { this.clear(key); }.bind(this)); } -}); \ No newline at end of file +}); diff --git a/lib/microtime_template.php b/lib/microtime_template.php index 5beb1460b3..6d2787a65b 100755 --- a/lib/microtime_template.php +++ b/lib/microtime_template.php @@ -13,4 +13,3 @@ $pageload_time = $pageload_endtime - $pageload_starttime; $tbs_microtime=$pageload_time; } -?> diff --git a/lib/mincals_absences.inc b/lib/mincals_absences.inc index e29b43b4d9..7c0b2abc9c 100755 --- a/lib/mincals_absences.inc +++ b/lib/mincals_absences.inc @@ -1,192 +1,168 @@ day = $day; - $this->month = $month; - $this->year = $year; - $this->h = $h; - $this->id_classe = $id_classe; - $this->type = $type; - $this->dmy = $dmy; - } - - - function getCalendarLink($month, $year, $id_classe, $type) - { - $day=1; - if ($this->dmy=='gestion_absences') return $this->dmy.".php?year=$year&month=$month&day=$day&id_classe=$id_classe&type=$type"; - } - - function getDateLink($day, $month, $year) { - global $vocab; - if ($this->dmy=='gestion_absences') return "id_classe."&type=".$this->type; - - - } - - - function getDaysInMonth($month, $year) - { - if ($month < 1 || $month > 12) - { - return 0; - } - - $days = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); - - $d = $days[$month - 1]; - - if ($month == 2) - { - // Check for leap year - // Forget the 4000 rule, I doubt I'll be around then... - - if ($year%4 == 0) - { - if ($year%100 == 0) - { - if ($year%400 == 0) - { - $d = 29; - } - } - else - { - $d = 29; - } - } - } - - return $d; - } - - function getFirstDays() - { - global $weekstarts; - - $basetime = mktime(12,0,0,6,11+$weekstarts,2000); - for ($i = 0, $s = ""; $i < 7; $i++) - { - $show = $basetime + ($i * 24 * 60 * 60); - $fl = strftime('%a',$show); - $s .= "$fl\n"; - } - return $s; - } - - function getHTML() - { - global $weekstarts; - global $vocab; - if (!isset($weekstarts)) $weekstarts = 0; - $s = ""; - - $daysInMonth = $this->getDaysInMonth($this->month, $this->year); - $date = mktime(12, 0, 0, $this->month, 1, $this->year); - - $first = (strftime("%w",$date) + 7 - $weekstarts) % 7; - $monthName = strftime("%B",$date); - - $prevMonth = $this->getCalendarLink($this->month - 1 > 0 ? $this->month - 1 : 12, $this->month - 1 > 0 ? $this->year : $this->year - 1, $this->id_classe, $this->type); - $nextMonth = $this->getCalendarLink($this->month + 1 <= 12 ? $this->month + 1 : 1, $this->month + 1 <= 12 ? $this->year : $this->year + 1, $this->id_classe, $this->type); - - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - $s .= "\n"; - - $s .= "\n"; - $s .= $this->getFirstDays(); - $s .= "\n"; - - $d = 1 - $first; - $temp = 1; - $numweek=1; - while ($d <= $daysInMonth) - { - $s .= "\n"; - for ($i = 0; $i < 7; $i++) - { - $s .= "\n"; - $d++; - } - $s .= "\n"; - } - - $s .= "
" . (($prevMonth == "") ? " " : "<<") . ""; - - if ($this->dmy!='gestion_absences') { - $s .= "year&month=$this->month&day=1&id_classe=$this->id_classe&type=$this->type\">$monthName $this->year"; - } else { - $s .= "$monthName $this->year"; - } - - $s .= "" . (($nextMonth == "") ? " " : ">>") . "
"; - if ($this->dmy!='gestion_absences') { - $s .="year&month=$this->month&day=$temp&id_classe=$this->id_classe&type=$this->type\">s".$numweek.""; - $temp=$temp+7; - $numweek++; - } - $s .= ""; - if ($d > 0 && $d <= $daysInMonth) - { - $link = $this->getDateLink($d, $this->month, $this->year); - if ($link == "") - $s .= $d; - elseif (($d == $this->day) and ($this->h)) - $s .= $link.">$d"; - else - $s .= $link.">$d"; - } - else - { - $s .= " "; - } - $s .= "
\n"; - - return $s; - } -} - -$thismonth = mktime(0, 0, 0, $month, $day, $year); - - - - -$cal = new Calendar(date("d",$thismonth), date("m",$thismonth), date("Y",$thismonth), 1, $id_classe, $type, $dmy); -echo $cal->getHTML(); + // PHP Calendar Class + // + // Copyright David Wilkinson 2000. All Rights reserved. + // + // This software may be used, modified and distributed freely + // providing this copyright notice remains intact at the head + // of the file. + // + // This software is freeware. The author accepts no liability for + // any loss or damages whatsoever incurred directly or indirectly + // from the use of this script. + // + // URL: http://www.cascade.org.uk/software/php/calendar/ + // Email: davidw@cascade.org.uk + + class Calendar { + var $month; + var $year; + var $day; + var $h; + var $id_classe; + var $type; + var $dmy; + + function __construct($day, $month, $year, $h, $id_classe, $type, $dmy) { + $this->day = $day; + $this->month = $month; + $this->year = $year; + $this->h = $h; + $this->id_classe = $id_classe; + $this->type = $type; + $this->dmy = $dmy; + } + + function getCalendarLink($month, $year, $id_classe, $type) { + $day = 1; + if ($this->dmy == 'gestion_absences')return $this->dmy . ".php?year=$year&month=$month&day=$day&id_classe=$id_classe&type=$type"; + } + + function getDateLink($day, $month, $year) { + global $vocab; + if ($this->dmy == 'gestion_absences') return "
id_classe . "&type=" . $this->type; + } + + function getDaysInMonth($month, $year) { + if ($month < 1 || $month > 12) { + return 0; + } + + $days = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + + $d = $days[$month - 1]; + + if ($month == 2) { + // Check for leap year + // Forget the 4000 rule, I doubt I'll be around then... + + if ($year % 4 == 0) { + if ($year % 100 == 0) { + if ($year % 400 == 0) { + $d = 29; + } + } else { + $d = 29; + } + } + } + + return $d; + } + + function getFirstDays() { + global $weekstarts; + + $basetime = mktime(12, 0, 0, 6, 11 + $weekstarts, 2000); + for ($i = 0, $s = ""; $i < 7; $i++) { + $show = $basetime + ($i * 24 * 60 * 60); + $fl = strftime('%a', $show); + $s .= "$fl\n"; + } + return $s; + } + + function getHTML() { + global $weekstarts; + global $vocab; + if (!isset($weekstarts)) $weekstarts = 0; + $s = ""; + + $daysInMonth = $this->getDaysInMonth($this->month, $this->year); + $date = mktime(12, 0, 0, $this->month, 1, $this->year); + + $first = (strftime("%w", $date) + 7 - $weekstarts) % 7; + $monthName = strftime("%B", $date); + + $prevMonth = $this->getCalendarLink($this->month - 1 > 0 ? $this->month - 1 : 12, $this->month - 1 > 0 ? $this->year : $this->year - 1, $this->id_classe, $this->type); + $nextMonth = $this->getCalendarLink($this->month + 1 <= 12 ? $this->month + 1 : 1, $this->month + 1 <= 12 ? $this->year : $this->year + 1, $this->id_classe, $this->type); + + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + $s .= "\n"; + + $s .= "\n"; + $s .= $this->getFirstDays(); + $s .= "\n"; + + $d = 1 - $first; + $temp = 1; + $numweek = 1; + while ($d <= $daysInMonth) { + $s .= "\n"; + for ($i = 0; $i < 7; $i++) { + $s .= "\n"; + $d++; + } + $s .= "\n"; + } + + $s .= "
" . (($prevMonth == "") ? " " : "<<") . ""; + + if ($this->dmy != 'gestion_absences') { + $s .= "year&month=$this->month&day=1&id_classe=$this->id_classe&type=$this->type\">$monthName $this->year"; + } else { + $s .= "$monthName $this->year"; + } + + $s .= "" . (($nextMonth == "") ? " " : ">>") . "
"; + if ($this->dmy != 'gestion_absences') { + $s .= "year&month=$this->month&day=$temp&id_classe=$this->id_classe&type=$this->type\">s" . $numweek . ""; + $temp = $temp + 7; + $numweek++; + } + $s .= ""; + if ($d > 0 && $d <= $daysInMonth) { + $link = $this->getDateLink($d, $this->month, $this->year); + if ($link == "") + $s .= $d; + elseif (($d == $this->day) and ($this->h)) + $s .= $link . ">$d"; + else + $s .= $link . ">$d"; + } else { + $s .= " "; + } + $s .= "
\n"; + + return $s; + } + } + + $thismonth = mktime(0, 0, 0, $month, $day, $year); + + + $cal = new Calendar(date("d", $thismonth), date("m", $thismonth), date("Y", $thismonth), 1, $id_classe, $type, $dmy); + echo $cal->getHTML(); } -?> - diff --git a/lib/periodes.inc.php b/lib/periodes.inc.php index 2d353f2785..ccc517d8d2 100755 --- a/lib/periodes.inc.php +++ b/lib/periodes.inc.php @@ -1,7 +1,7 @@ 0) { - if ((isset($id_classe))&&($id_classe > 0)) { + if ((isset($id_classe)) && ($id_classe > 0)) { $_id_classe = $id_classe; - } elseif(isset($current_group["classes"]["list"][0])) { + } elseif (isset($current_group["classes"]["list"][0])) { $_id_classe = $current_group["classes"]["list"][0]; } - if(isset($_id_classe)) { - if(!is_array($_id_classe)) { + if (isset($_id_classe)) { + if (!is_array($_id_classe)) { $periode_query = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM periodes WHERE id_classe = '$_id_classe' ORDER BY num_periode"); + } else { + $periode_query = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM periodes WHERE id_classe = '" . $_id_classe[0] . "' ORDER BY num_periode"); } - else { - $periode_query = mysqli_query($GLOBALS["mysqli"], "SELECT * FROM periodes WHERE id_classe = '".$_id_classe[0]."' ORDER BY num_periode"); - } - $nb_periode = mysqli_num_rows($periode_query) + 1 ; + $nb_periode = mysqli_num_rows($periode_query) + 1; $i = "1"; while ($i < $nb_periode) { - $nom_periode[$i] = old_mysql_result($periode_query, $i-1, "nom_periode"); - $ver_periode[$i] = old_mysql_result($periode_query, $i-1, "verouiller"); - $date_ver_periode[$i] = old_mysql_result($periode_query, $i-1, "date_verrouillage"); - $date_fin_periode[$i] = old_mysql_result($periode_query, $i-1, "date_fin"); - $date_conseil_periode[$i] = old_mysql_result($periode_query, $i-1, "date_conseil_classe"); + $nom_periode[$i] = old_mysql_result($periode_query, $i - 1, "nom_periode"); + $ver_periode[$i] = old_mysql_result($periode_query, $i - 1, "verouiller"); + $date_ver_periode[$i] = old_mysql_result($periode_query, $i - 1, "date_verrouillage"); + $date_fin_periode[$i] = old_mysql_result($periode_query, $i - 1, "date_fin"); + $date_conseil_periode[$i] = old_mysql_result($periode_query, $i - 1, "date_conseil_classe"); $i++; } } } -?>