From 0da213eb761d9fa4cfdc58794fb6fb9c9f33d4c2 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:45:15 +0200 Subject: [PATCH 01/63] lib/Session.class.php: reformmatage --- lib/Session.class.php | 1678 ++++++++++++++++++++--------------------- 1 file changed, 839 insertions(+), 839 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 98527d4186..22da443cb8 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -20,31 +20,30 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -$debug_test_mdp="n"; -if(getSettingValue('debug_test_mdp_file')!='') { - $debug_test_mdp_file=getSettingValue('debug_test_mdp_file'); -} -else { - $debug_test_mdp_file="/tmp/test_mdp.txt"; +$debug_test_mdp = "n"; +if (getSettingValue('debug_test_mdp_file') != '') { + $debug_test_mdp_file = getSettingValue('debug_test_mdp_file'); +} else { + $debug_test_mdp_file = "/tmp/test_mdp.txt"; } //$debug_test_mdp_file="/tmp/test_mdp.txt"; // Passer à 'y' pour loguer les premiers accès (pour expliquer à l'utilisateur ce qu'il fait de travers lors de sa première connexion) -$debug_login_nouveaux_comptes="n"; +$debug_login_nouveaux_comptes = "n"; // Ne pas toucher: La variable est déclarée ici pour être globale et modifiée à y ou n par la suite -$loguer_nouveau_login="n"; +$loguer_nouveau_login = "n"; # Cette classe sert à manipuler la session en cours. # Elle gère notamment l'authentification des utilisateurs # à partir de différentes sources. function my_warning_handler($errno, $errstr) { - if ($errno == E_WARNING && strpos($errstr, 'PHP_Incomplete_Class') !== false) { - //ignore warning, this one is probably due to propel unserialization wuthout correct class declaration - return true; - } else { - return false; - } + if ($errno == E_WARNING && strpos($errstr, 'PHP_Incomplete_Class') !== false) { + //ignore warning, this one is probably due to propel unserialization wuthout correct class declaration + return true; + } else { + return false; + } } class Session { @@ -64,33 +63,33 @@ class Session { public $auth_simpleSAML = false; # false, cas, lemon, lcs private $login_sso = false; //login (ou uid) du sso auquel on est connecté (peut être différent du login gepi, la correspondance est faite dans mod_sso_table) public $current_auth_mode = false; # gepi, ldap, sso, ou false : le mode d'authentification - public $mysqli = ''; + public $mysqli = ''; - private $etat = false; # actif/inactif. Utilisé simplement en interne pour vérifier que - # l'utilisateur authentifié de source externe est bien actif dans Gepi. - - private $cas_extra_attributes = false; # D'éventuels attributs chargés depuis la réponse CAS + private $etat = false; # actif/inactif. Utilisé simplement en interne pour vérifier que + # l'utilisateur authentifié de source externe est bien actif dans Gepi. - public function __construct($login_CAS_en_cours = false) { + private $cas_extra_attributes = false; # D'éventuels attributs chargés depuis la réponse CAS - global $temoin_pas_d_update_session_table_log; - global $mysqli; - $this->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(); @@ -104,79 +103,78 @@ public function __construct($login_CAS_en_cours = false) { $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,11 @@ 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"; + die(); } if ($_login != null && mb_strtoupper($_login) != mb_strtoupper($this->login)) { @@ -217,104 +215,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 +325,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 +333,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,21 +359,21 @@ 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(); } } @@ -411,7 +409,7 @@ 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) { @@ -441,8 +439,8 @@ public function authenticate($_login = null, $_password = null) { # 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) { @@ -464,7 +462,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. @@ -508,13 +506,13 @@ 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"; @@ -522,10 +520,10 @@ public function security_check() { } $sql = "SELECT statut, change_mdp, etat FROM utilisateurs where login = '" . $this->login . "'"; - - - $result = mysqli_query($mysqli, $sql); - $row = $result->fetch_object(); + + + $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; @@ -550,10 +548,9 @@ public function security_check() { // Si on est là, ce 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")) { @@ -571,8 +568,8 @@ public static function user_auth_mode($_login) { 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 +581,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 +603,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 +621,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 +650,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 +697,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 +729,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 +745,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 +754,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 +768,145 @@ 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)) { + } 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(); + } + + 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 +981,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 +1000,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 +1010,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 +1025,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 +1054,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 +1067,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 +1104,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"; @@ -1130,7 +1130,7 @@ private function authenticate_lcs() { exit; } else { // L'utilisateur n'a pas été identifié' - header("Location:".LCS_PAGE_AUTHENTIF); + header("Location:" . LCS_PAGE_AUTHENTIF); exit; } } @@ -1138,7 +1138,7 @@ 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; @@ -1155,98 +1155,98 @@ 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; + 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; 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 +1255,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 +1293,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,7 +1347,7 @@ 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()) { @@ -1357,35 +1357,35 @@ private function import_user_profile() { # 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; + die(); + } + $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 +1399,304 @@ 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; + die(); + } + $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; + } + } @@ -1706,50 +1706,50 @@ private function update_user_with_cas_attributes(){ # en assignant $timezone. 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); + } + } } ?> From 051d97131c0766b958f7d7d7917aac0d0cb01ecf Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:46:11 +0200 Subject: [PATCH 02/63] lib/Session.class.php: optimisation des conditions --- lib/Session.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 22da443cb8..a9dda8c8b8 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -97,9 +97,9 @@ 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()) { From 751f00d43531744166a2736ae64dd422d505afb5 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:47:14 +0200 Subject: [PATCH 03/63] lib/Session.class.php: suppression de code non atteignable --- lib/Session.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index a9dda8c8b8..7585ab4bb9 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -207,7 +207,6 @@ public function authenticate($_login = null, $_password = null) { 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(); } if ($_login != null && mb_strtoupper($_login) != mb_strtoupper($this->login)) { From 407ae4854a31cdfefaff437b2e13c30d80d9b89b Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:47:40 +0200 Subject: [PATCH 04/63] =?UTF-8?q?lib/Session.class.php:=20simplification?= =?UTF-8?q?=20de=20l'expression=20r=C3=A9guli=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Session.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 7585ab4bb9..163e7a6862 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -220,7 +220,7 @@ public function authenticate($_login = null, $_password = null) { fclose($f_tmp); } elseif ($debug_login_nouveaux_comptes == "y") { $loguer_nouveau_login = "n"; - if (preg_match("/[A-Za-z0-9_\.-]/", $_login)) { + 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); From 7021bef5b8cd383d5b99e7e4daa9ab9624d0955f Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:49:11 +0200 Subject: [PATCH 05/63] lib/LDAPServer.class.php: suppression de la branche du switch redondante --- lib/LDAPServer.class.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 2a5f4036ef..68b541f263 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -137,10 +137,7 @@ public function get_user_profile($_login) { $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: + case $this->code_civilite_mademoiselle: $infos["civilite"] = "Mlle"; break; case $this->code_civilite_monsieur: From b9429e21127531a64ddc6c5228afd005a9172142 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:49:49 +0200 Subject: [PATCH 06/63] lib/LDAPServer.class.php: suppression de la variable inutile --- lib/LDAPServer.class.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 68b541f263..87f38a9628 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -208,10 +208,8 @@ public function get_all_users($type, $param){ // 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); - return $infos; + return ldap_get_entries($this->ds, $sr); }else{ return false; } From fe26188c5ae60890ec350161781b59f5a0e90618 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:50:09 +0200 Subject: [PATCH 07/63] lib/LDAPServer.class.php: uniformisation --- lib/LDAPServer.class.php | 284 ++++++++++++++++++++------------------- 1 file changed, 143 insertions(+), 141 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 87f38a9628..f6b28f1824 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,113 +105,113 @@ 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]) { + $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_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++){ + $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++) { $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"))) { + # 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) ; + $filter = '(' . $this->champ_rne . '=' . $param . ')'; + $sr = ldap_search($this->ds, $this->get_dn(), $filter); return ldap_get_entries($this->ds, $sr); - }else{ + } else { return false; } } @@ -218,8 +219,8 @@ 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; } @@ -234,7 +235,7 @@ public function add_user($_login, $_nom, $_prenom, $_email, $_civilite, $_passwo 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; @@ -252,7 +253,7 @@ public function update_user($_login, $_nom, $_prenom, $_email, $_civilite, $_pas 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; @@ -268,7 +269,7 @@ public function delete_user($_login) { 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; } @@ -283,33 +284,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 @@ -317,12 +318,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; } @@ -333,25 +334,25 @@ 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. @@ -389,7 +390,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; @@ -427,20 +428,20 @@ 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 "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; + } } // Le mot de passe @@ -457,4 +458,5 @@ private function format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, } } + ?> From bd6af2cea1ec4ed23c8b7989ec62ed4e3f7351b2 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:50:51 +0200 Subject: [PATCH 08/63] lib/LDAPServer.class.php: suppression de code non atteignable --- lib/LDAPServer.class.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index f6b28f1824..63abbdbd95 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -232,7 +232,6 @@ public function add_user($_login, $_nom, $_prenom, $_email, $_civilite, $_passwo # 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; @@ -250,7 +249,6 @@ public function update_user($_login, $_nom, $_prenom, $_email, $_civilite, $_pas # 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; @@ -266,7 +264,6 @@ 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; @@ -349,7 +346,6 @@ private function encode_password($password = '', $encoding = '') { $encodedpass = "{SSHA}" . base64_encode(mhash(MHASH_SHA1, $password . $salt) . $salt); } else { return false; - exit; } return ($encodedpass); From eb9ea724fd2237d34a1c9edf926a7d5157d75e37 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:55:05 +0200 Subject: [PATCH 09/63] lib/Session.class.php: suppression de code non atteignable --- lib/Session.class.php | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 163e7a6862..2a8a0146b4 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -379,11 +379,9 @@ public function authenticate($_login = null, $_password = null) { } else { return "8"; - exit(); } } else { return "8"; - exit(); } } } @@ -394,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 @@ -413,7 +410,6 @@ public function authenticate($_login = null, $_password = null) { } if (!$load) { return "6"; - exit(); } else { # Si l'import a réussi, on tente à nouveau de charger # les données de l'utilisateur. @@ -425,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. @@ -433,7 +428,6 @@ 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 @@ -445,7 +439,6 @@ public function authenticate($_login = null, $_password = null) { if ($this->current_auth_mode != 'simpleSAML' && $auth_mode != $this->current_auth_mode) { $this->reset(2); return "5"; - exit; } } @@ -471,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. @@ -483,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 @@ -515,7 +506,6 @@ public function security_check() { 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 . "'"; @@ -531,17 +521,14 @@ public function security_check() { 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. @@ -554,7 +541,6 @@ public function security_check() { # Mieux vaut deux fois qu'une... if ($statut_ok && $etat_ok && ($login_allowed || $this->statut == "administrateur")) { return "1"; - exit; } } @@ -564,7 +550,6 @@ 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) . "'"; @@ -902,7 +887,6 @@ static function change_password_gepi($user_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)) { @@ -1126,7 +1110,6 @@ 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); @@ -1141,7 +1124,6 @@ public function load_user_data() { # 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. @@ -1161,7 +1143,6 @@ public function load_user_data() { # 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); @@ -1172,7 +1153,6 @@ public function load_user_data() { # 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"; @@ -1351,7 +1331,6 @@ private function import_user_profile() { # 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 @@ -1362,7 +1341,6 @@ private function import_user_profile() { if ($resultat->num_rows != "0") { $resultat->close(); return false; - die(); } $resultat->close(); @@ -1403,7 +1381,6 @@ private function import_user_profile_from_scribe() { # 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 @@ -1418,7 +1395,6 @@ private function import_user_profile_from_scribe() { if ($resultat->num_rows != "0") { $resultat->close(); return false; - die(); } $resultat->close(); From db06b00d6b067fd8d0f14dfd77b371f2d7fcec6b Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:55:21 +0200 Subject: [PATCH 10/63] lib/Session.class.php: suppression du tag de fermeture php inutile --- lib/Session.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 2a8a0146b4..44d1e1b991 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -1726,5 +1726,3 @@ static private function debug_login_mdp($debug_test_mdp, $debug_test_mdp_file, $ } } } - -?> From 520aa88ab6dee8fb31b1003e87f03bd54f4030e8 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:56:03 +0200 Subject: [PATCH 11/63] lib/Session.class.php: update_timezone: ajout du tag throw --- lib/Session.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Session.class.php b/lib/Session.class.php index 44d1e1b991..4d4069e357 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -1679,6 +1679,9 @@ 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 From 160be4c6812b95c9784cf790e339d1d0792964c1 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:56:42 +0200 Subject: [PATCH 12/63] =?UTF-8?q?lib/Session.class.php:=20commentaire=20de?= =?UTF-8?q?=20code=20non=20utilis=C3=A9=20pour=20le=20moment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Session.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 4d4069e357..4aa8b40a64 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -1591,7 +1591,7 @@ private function import_user_profile_from_scribe() { } } - } elseif ($user['statut'] == 'professeur') { + //} elseif ($user['statut'] == 'professeur') { // Rien de spécial à ce stade. } else { From 6d5dc7d4ca507d4353d701bf21810503cc7abb39 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:57:45 +0200 Subject: [PATCH 13/63] lib/Session.class.php: authenticate_gepi: inversion de la condition --- lib/Session.class.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 4aa8b40a64..27d6479711 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -809,8 +809,7 @@ function authenticate_gepi($_login, $_password) { # Un compte existe avec ce login if ($db_salt == '') { //on va tester avec le md5 - if ($db_password == md5($_password)) { - } else { + 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); From bdc8b6d9cc5c52a19dc4ce01c9519b17341399e1 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 13:58:41 +0200 Subject: [PATCH 14/63] lib/Session.class.php: security_check: simplification des conditions --- lib/Session.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 27d6479711..7ba7e49b83 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -514,10 +514,10 @@ public function security_check() { $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; + $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"; From 1484aec3817d2b89a28ba10a44923a45e577be3d Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:00:26 +0200 Subject: [PATCH 15/63] lib/Session.class.php: security_check: typo fix --- lib/Session.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 7ba7e49b83..a7f7190fa1 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -531,7 +531,7 @@ public function security_check() { return "0"; } - // 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")) { From 5b7c08bb2bd1c0b76b131304abab43b01ad94652 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:02:02 +0200 Subject: [PATCH 16/63] =?UTF-8?q?lib/Session.class.php:=20security=5Fcheck?= =?UTF-8?q?:=20$statut-ok=20et=20$etat=5Fok=20sont=20toujours=20=C3=A9gale?= =?UTF-8?q?s=20=C3=A0=20true=20=C3=A0=20ce=20point=20l=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/Session.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index a7f7190fa1..984b599943 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -539,7 +539,7 @@ public function security_check() { } # Mieux vaut deux fois qu'une... - if ($statut_ok && $etat_ok && ($login_allowed || $this->statut == "administrateur")) { + if ($login_allowed || $this->statut == "administrateur") { return "1"; } } From 3352c07e4ba871a39a11e18b6ac3c272ecfcadfa Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:02:52 +0200 Subject: [PATCH 17/63] =?UTF-8?q?lib/microtime=5Ftemplate.php:=20suppressi?= =?UTF-8?q?on=20tag=20non=20n=C3=A9cessaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/microtime_template.php | 1 - 1 file changed, 1 deletion(-) 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; } -?> From 47bba46ec3e6bd5d87e65916c0e908d95dab5d9a Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:03:36 +0200 Subject: [PATCH 18/63] lib/Session.class.php: ajout du copyright --- lib/Session.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Session.class.php b/lib/Session.class.php index 984b599943..b60328c433 100755 --- a/lib/Session.class.php +++ b/lib/Session.class.php @@ -1,7 +1,7 @@ Date: Wed, 2 Jun 2021 14:04:25 +0200 Subject: [PATCH 19/63] lib/mincals_absences.inc.php: uniformisation --- lib/mincals_absences.inc | 348 ++++++++++++++++++--------------------- 1 file changed, 162 insertions(+), 186 deletions(-) diff --git a/lib/mincals_absences.inc b/lib/mincals_absences.inc index e29b43b4d9..dda745f6ca 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 Calendar($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(); } -?> - From 1d20048f756d2144ecf8eb71a488a6a519f47732 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:06:54 +0200 Subject: [PATCH 20/63] =?UTF-8?q?lib/mincals=5Fabsences.inc.php:=20uniform?= =?UTF-8?q?isation=20+=20ajotu=20date=20derni=C3=A8res=20modifications?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/mincals_absences.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/mincals_absences.inc b/lib/mincals_absences.inc index dda745f6ca..1845698ca8 100755 --- a/lib/mincals_absences.inc +++ b/lib/mincals_absences.inc @@ -1,5 +1,9 @@ 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"; + 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; From f00834b13475d01f574859fd7a5020898c17892d Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:07:38 +0200 Subject: [PATCH 21/63] lib/mincals_absences.inc.php: utilisation du "nouveau style" de constructeur --- lib/mincals_absences.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mincals_absences.inc b/lib/mincals_absences.inc index 1845698ca8..7c0b2abc9c 100755 --- a/lib/mincals_absences.inc +++ b/lib/mincals_absences.inc @@ -30,7 +30,7 @@ function minicals($year, $month, $day, $id_classe, $type, $dmy) { var $type; var $dmy; - function Calendar($day, $month, $year, $h, $id_classe, $type, $dmy) { + function __construct($day, $month, $year, $h, $id_classe, $type, $dmy) { $this->day = $day; $this->month = $month; $this->year = $year; From 867c512d8b62f88ce45c3bab17806e326eb29f0e Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 14:08:23 +0200 Subject: [PATCH 22/63] lib/periodes.inc.php: uniformisation --- lib/periodes.inc.php | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) 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++; } } } -?> From 22de866afad7ab9c06958f7b44cec0287d901e18 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:15:47 +0200 Subject: [PATCH 23/63] =?UTF-8?q?classes/classes=5Fajout.php:=20-=20unifor?= =?UTF-8?q?misation=20-=20js:=20utilisation=20de=20'let'=20=C3=A0=20la=20p?= =?UTF-8?q?lace=20de=20'var'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/classes_ajout.php | 705 +++++++++++++++++++------------------- 1 file changed, 359 insertions(+), 346 deletions(-) diff --git a/classes/classes_ajout.php b/classes/classes_ajout.php index 76365c5a62..1f63a1316b 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 " "; -?> - - + ?> + +
-


- +


+ From eae0236467516e086e6af86dd30148b6b0274c51 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:16:46 +0200 Subject: [PATCH 24/63] classes/classes_ajout.php: js: utilisation de 'let' et comparaison 'stricte' --- classes/classes_ajout.php | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/classes/classes_ajout.php b/classes/classes_ajout.php index 1f63a1316b..8c806769d2 100755 --- a/classes/classes_ajout.php +++ b/classes/classes_ajout.php @@ -362,19 +362,16 @@ class='back_link'/> Retour à la page de // Initialisation change='no'; - function confirm_changement_classe(thechange, themessage) - { + function confirm_changement_classe(thechange, themessage) { if (!(thechange)) thechange='no'; - if (thechange != 'yes') { + if (thechange !== 'yes') { document.form1.submit(); - } - else{ - var is_confirmed = confirm(themessage); + } else { + let is_confirmed = confirm(themessage); if(is_confirmed){ document.form1.submit(); - } - else{ - document.getElementById('id_classe').selectedIndex=$num_classe; + } else{ + document.getElementById('id_classe').selectedIndex = $num_classe; } } } From aaff31e8edaac8761d313b2fece548acb5881265 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:19:08 +0200 Subject: [PATCH 25/63] =?UTF-8?q?classes/classes=5Fconst.php:=20-=20unifor?= =?UTF-8?q?misation=20-=20css:=20supression=20de=20l'unit=C3=A9=20'px'=20i?= =?UTF-8?q?nutile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/classes_const.php | 670 ++++++++++++++++++++------------------ 1 file changed, 357 insertions(+), 313 deletions(-) diff --git a/classes/classes_const.php b/classes/classes_const.php index a68ff0ff93..4bc1c82a17 100755 --- a/classes/classes_const.php +++ b/classes/classes_const.php @@ -41,17 +41,17 @@ die(); } -$id_classe=isset($_POST['id_classe']) ? $_POST['id_classe'] : (isset($_GET['id_classe']) ? $_GET['id_classe'] : NULL); -if((!isset($id_classe))||(!preg_match("/^[0-9]{1,}$/", $id_classe))) { +$id_classe = isset($_POST['id_classe']) ? $_POST['id_classe'] : (isset($_GET['id_classe']) ? $_GET['id_classe'] : NULL); +if ((!isset($id_classe)) || (!preg_match("/^[0-9]{1,}$/", $id_classe))) { header("Location: ../accueil.php?msg=Classe non choisie."); die(); } include "../lib/periodes.inc.php"; -$_SESSION['chemin_retour'] = $gepiPath."/classes/classes_const.php?id_classe=".$id_classe; +$_SESSION['chemin_retour'] = $gepiPath . "/classes/classes_const.php?id_classe=" . $id_classe; -$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."; +$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"); From 7de7f16e4e5ba67f69d85ef7f27e9dd6b9eeb7e0 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:20:02 +0200 Subject: [PATCH 26/63] =?UTF-8?q?classes/classes=5Fconst.php:=20utilisatio?= =?UTF-8?q?n=20de=20'strtoupper'=20=C3=A0=20la=20place=20de=20'my=5Fstrtou?= =?UTF-8?q?pper'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/classes_const.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/classes_const.php b/classes/classes_const.php index 4bc1c82a17..449d24ce9f 100755 --- a/classes/classes_const.php +++ b/classes/classes_const.php @@ -889,7 +889,7 @@ function imposer_cpe() { if ($tab_profsuivi[$loop] == $eleve_profsuivi) { echo " selected"; } - echo ">" . casse_mot($tab_profprenom[$loop], 'majf2') . " " . my_strtoupper($tab_profnom[$loop]) . "\n"; + echo ">" . casse_mot($tab_profprenom[$loop], 'majf2') . " " . strtoupper($tab_profnom[$loop]) . "\n"; } echo "

\n"; echo "\n"; From 267dbec1ba5c68fe6048d172d12876bf658f1f07 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:22:11 +0200 Subject: [PATCH 27/63] =?UTF-8?q?classes/classes=5Fconst.php:=20regex:=20u?= =?UTF-8?q?tilisation=20de=20'+'=20=C3=A0=20la=20place=20de=20'{1,}'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/classes_const.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/classes_const.php b/classes/classes_const.php index 449d24ce9f..042fc5adf1 100755 --- a/classes/classes_const.php +++ b/classes/classes_const.php @@ -1,7 +1,7 @@ Date: Wed, 2 Jun 2021 16:26:01 +0200 Subject: [PATCH 28/63] lib/auth_sso.inc.php: extraction du code commun --- lib/auth_sso.inc.php | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/lib/auth_sso.inc.php b/lib/auth_sso.inc.php index 102342574e..593d6dadcb 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(); } -?> From d53e4a01188de8baa1d2707f77375b264e95d293 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:26:36 +0200 Subject: [PATCH 29/63] lib/auth_sso.inc.php: uniformisation --- lib/auth_sso.inc.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/auth_sso.inc.php b/lib/auth_sso.inc.php index 593d6dadcb..16bec9eb4f 100644 --- a/lib/auth_sso.inc.php +++ b/lib/auth_sso.inc.php @@ -21,7 +21,7 @@ //test version de php if (version_compare(PHP_VERSION, '5') < 0) { - die('GEPI nécessite PHP5 pour fonctionner'); + die('GEPI nécessite PHP5 pour fonctionner'); } // Pour le multisite @@ -36,7 +36,7 @@ // On doit empêcher le filtrage de $_POST['logoutRequest'], qui contient des // caractères spéciaux if (isset($_POST) && array_key_exists('logoutRequest', $_POST)) { - $logout_request = $_POST['logoutRequest']; + $logout_request = $_POST['logoutRequest']; } // Initialisations files require_once("../lib/initialisations.inc.php"); @@ -45,7 +45,7 @@ $auth_sso = in_array($gepiSettings['auth_sso'], array("lemon", "cas", "lcs")); if ($auth_sso && isset($logout_request)) { - $_POST['logoutRequest'] = $logout_request; + $_POST['logoutRequest'] = $logout_request; } # Cette page a pour vocation de gérer les authentification SSO. @@ -92,15 +92,15 @@ phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_root, true, $url_base); phpCAS::setLang(PHPCAS_LANG_FRENCH); - if((isset($cas_proxy_server))&&($cas_proxy_server!="")&&(isset($cas_proxy_port))&&($cas_proxy_port!="")) { - phpCAS::setExtraCurlOption(CURLOPT_PROXY , $cas_proxy_server); - phpCAS::setExtraCurlOption(CURLOPT_PROXYPORT , $cas_proxy_port); - phpCAS::setExtraCurlOption(CURLOPT_PROXYTYPE , CURLPROXY_HTTP); + if ((isset($cas_proxy_server)) && ($cas_proxy_server != "") && (isset($cas_proxy_port)) && ($cas_proxy_port != "")) { + phpCAS::setExtraCurlOption(CURLOPT_PROXY, $cas_proxy_server); + phpCAS::setExtraCurlOption(CURLOPT_PROXYPORT, $cas_proxy_port); + phpCAS::setExtraCurlOption(CURLOPT_PROXYTYPE, CURLPROXY_HTTP); } // redirige vers le serveur d'authentification si aucun utilisateur authentifié n'a // été trouvé par le client CAS. - if(getSettingAOui("setNoCasServerValidation")) { + if (getSettingAOui("setNoCasServerValidation")) { phpCAS::setNoCasServerValidation(); } @@ -113,7 +113,7 @@ phpCAS::handleLogoutRequests(false); } // Authentification - phpCAS::forceAuthentication(); + phpCAS::forceAuthentication(); // Initialisation de la session, avec blocage de l'initialisation de la // session php ainsi que des tests de timeout et update de logs, @@ -124,7 +124,6 @@ } - # L'instance de Session permettant de gérer directement les authentifications # SSO, on ne s'embête pas : $auth = $session_gepi->authenticate(); From cc32aa42890137be476be3f493dda393b3ca4320 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:27:12 +0200 Subject: [PATCH 30/63] =?UTF-8?q?lib/alerte=5Fpopup.php:=20suppression=20d?= =?UTF-8?q?es=20unit=C3=A9s=20redondantes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/alerte_popup.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/alerte_popup.php b/lib/alerte_popup.php index 1aa747e8b9..867156c2e6 100755 --- a/lib/alerte_popup.php +++ b/lib/alerte_popup.php @@ -28,8 +28,8 @@ From e711e246e90cfefcbb13e51c2ae1636242dd1c2e Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:27:29 +0200 Subject: [PATCH 31/63] lib/alerte_popup.php: uniformisation --- lib/alerte_popup.php | 69 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/lib/alerte_popup.php b/lib/alerte_popup.php index 867156c2e6..8a4c2f2ac2 100755 --- a/lib/alerte_popup.php +++ b/lib/alerte_popup.php @@ -1,29 +1,27 @@ "; - 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
From af34b2dd67f2c979abb371a9861165dc92eb2257 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:34:27 +0200 Subject: [PATCH 32/63] lib/calendrier/calendrier.class.php: uniformisation --- lib/calendrier/calendrier.class.php | 1472 +++++++++++++-------------- 1 file changed, 736 insertions(+), 736 deletions(-) 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; + } } From c06dcf57f2e80fdc2396bf0be3d57ac9dd70fd45 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:36:48 +0200 Subject: [PATCH 33/63] lib/calendrier/calendrier_id.class.php: uniformisation --- lib/calendrier/calendrier_id.class.php | 1360 ++++++++++++------------ 1 file changed, 680 insertions(+), 680 deletions(-) diff --git a/lib/calendrier/calendrier_id.class.php b/lib/calendrier/calendrier_id.class.php index f51546954a..29624b27d0 100755 --- a/lib/calendrier/calendrier_id.class.php +++ b/lib/calendrier/calendrier_id.class.php @@ -4,686 +4,686 @@ 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 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; + } } From c8c207b50f49628b530900ad759aa76cd70a288d Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:37:23 +0200 Subject: [PATCH 34/63] lib/calendrier/calendrier_id.class.php: uitlisation du nouveau style de constructeur --- lib/calendrier/calendrier_id.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/calendrier/calendrier_id.class.php b/lib/calendrier/calendrier_id.class.php index 29624b27d0..725a044a75 100755 --- a/lib/calendrier/calendrier_id.class.php +++ b/lib/calendrier/calendrier_id.class.php @@ -104,7 +104,7 @@ class Calendrier { * @param string $form Le nom du formulaire * @param string $champ Le nom du champ */ - function Calendrier($form, $champ) { + function __construct($form, $champ) { $this->form = $form; $this->champ = $champ; $page = "?frm=" . $form . "&ch=" . $champ; From aff7e9c9d1fd4ab605282c247a0fadda58e54613 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:38:21 +0200 Subject: [PATCH 35/63] lib/calendrier/calendrier_id.class.php: suppression du tag de fermeture inutile --- lib/calendrier/calendrier_id.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/calendrier/calendrier_id.class.php b/lib/calendrier/calendrier_id.class.php index 725a044a75..90bc13dd81 100755 --- a/lib/calendrier/calendrier_id.class.php +++ b/lib/calendrier/calendrier_id.class.php @@ -686,5 +686,3 @@ function _get_classeJourReste($i, $cptJour, $mode) { } } - -?> From c96f30912b419752e9cdd0c360b8114f7ca4bbbb Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:39:28 +0200 Subject: [PATCH 36/63] lib/calendrier/pop.calendrie.php: - suppression du tag de fermeture inutile - uniformisation --- lib/calendrier/pop.calendrier.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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(); - -?> From f3854c9610e7ebc89b088b2fe75fbfe395b02d1c Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:40:32 +0200 Subject: [PATCH 37/63] lib/calendrier/calendrier.js: uniformisation --- lib/calendrier/calendrier.js | 94 ++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index edabcaad26..4d25d4b8bc 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; - //Envoi du formulaire - frm.submit(); +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; + //Envoi du formulaire + 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) { + 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,29 @@ 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"){ - val = mois + this.format + this.anneec + this.format + jour; - }else{ - val = mois + this.format + jour + this.format + this.anneec; - } - }else if (this.ordre[0] && this.ordre[0] == "J"){ - if (this.ordre[1] == "A"){ - val = jour + this.format + this.anneec + this.format + mois; - }else{ - val = jour + this.format + mois + this.format + this.anneec; - } - }else{ - if (this.ordre[1] && this.ordre[1] == "J"){ - val = this.anneec + this.format + jour + this.format + mois; - }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 +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") { + val = mois + this.format + this.anneec + this.format + jour; + } else { + val = mois + this.format + jour + this.format + this.anneec; + } + } else if (this.ordre[0] && this.ordre[0] == "J") { + if (this.ordre[1] == "A") { + val = jour + this.format + this.anneec + this.format + mois; + } else { + val = jour + this.format + mois + this.format + this.anneec; + } + } else { + if (this.ordre[1] && this.ordre[1] == "J") { + val = this.anneec + this.format + jour + this.format + mois; + } else { + val = this.anneec + this.format + mois + this.format + jour; + } + } + //On agit selon qu'on est dans une popup ou non + this.finOperation(val); +} From 2e79c12c1235d581c72916201bd59be54c8cd0f5 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:41:20 +0200 Subject: [PATCH 38/63] =?UTF-8?q?lib/calendrier/calendrier.js:=20reload:?= =?UTF-8?q?=20utilisation=20de=20const=20=C3=A0=20la=20place=20de=20'var'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/calendrier/calendrier.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index 4d25d4b8bc..e0045d3d47 100755 --- a/lib/calendrier/calendrier.js +++ b/lib/calendrier/calendrier.js @@ -12,12 +12,12 @@ * @param object frm L'object document du formulaire */ function reload(frm) { - var mois = frm.elements['mois']; - var annee = frm.elements['annee']; + const mois = frm.elements['mois']; + const annee = frm.elements['annee']; //Debug du mois et année - var index1 = mois.options[mois.selectedIndex].value; - var index2 = annee.options[annee.selectedIndex].value; - //Envoi du formulaire + const index1 = mois.options[mois.selectedIndex].value; + const index2 = annee.options[annee.selectedIndex].value; + //Envoi du formulaire frm.submit(); } From c36237fc683e3c1dd1d4e29176d8865486c061fa Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:42:08 +0200 Subject: [PATCH 39/63] =?UTF-8?q?lib/calendrier/calendrier.js:=20checkNum:?= =?UTF-8?q?=20d=C3=A9claration=20explicite=20de=20la=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/calendrier/calendrier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index e0045d3d47..a2fc05e20d 100755 --- a/lib/calendrier/calendrier.js +++ b/lib/calendrier/calendrier.js @@ -28,7 +28,7 @@ function reload(frm) { * @param integer mois Le numéro du mois */ function checkNum(jour, mois) { - tab = new Array(); + let tab = new Array(); tab[0] = jour; tab[1] = mois; if (this.checkzero) { From e34469afeb6e3ba409d9deb78790792b8bf6408e Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:43:13 +0200 Subject: [PATCH 40/63] =?UTF-8?q?lib/calendrier/calendrier.js:=20submitDat?= =?UTF-8?q?e:=20d=C3=A9claration=20explicite=20des=20variables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/calendrier/calendrier.js | 44 +++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index a2fc05e20d..e1793b93dc 100755 --- a/lib/calendrier/calendrier.js +++ b/lib/calendrier/calendrier.js @@ -53,28 +53,30 @@ function checkNum(jour, mois) { * @param integer jour Le numéro du jour dans le mois */ function submitDate(jour) { - tab = this.checkNum(jour, this.moisc); + let 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") { - val = mois + this.format + this.anneec + this.format + jour; - } else { - val = mois + this.format + jour + this.format + this.anneec; - } - } else if (this.ordre[0] && this.ordre[0] == "J") { - if (this.ordre[1] == "A") { - val = jour + this.format + this.anneec + this.format + mois; - } else { - val = jour + this.format + mois + this.format + this.anneec; - } - } else { - if (this.ordre[1] && this.ordre[1] == "J") { - val = this.anneec + this.format + jour + this.format + mois; - } else { - val = this.anneec + this.format + mois + this.format + jour; - } - } + 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 { + val = mois + this.format + jour + this.format + this.anneec; + } + } else if (this.ordre[0] && this.ordre[0] == "J") { + if (this.ordre[1] == "A") { + val = jour + this.format + this.anneec + this.format + mois; + } else { + val = jour + this.format + mois + this.format + this.anneec; + } + } else { + if (this.ordre[1] && this.ordre[1] == "J") { + val = this.anneec + this.format + jour + this.format + mois; + } else { + val = this.anneec + this.format + mois + this.format + jour; + } + } //On agit selon qu'on est dans une popup ou non this.finOperation(val); } From c5ab9ab7e6bedea8999886a6558b679ff35cde71 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:44:02 +0200 Subject: [PATCH 41/63] lib/calendrier/calendrier.js: submitDate: comparaison 'stricte' --- lib/calendrier/calendrier.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/calendrier/calendrier.js b/lib/calendrier/calendrier.js index e1793b93dc..c711263849 100755 --- a/lib/calendrier/calendrier.js +++ b/lib/calendrier/calendrier.js @@ -58,20 +58,20 @@ function submitDate(jour) { let mois = tab[1]; let val; - if (this.ordre[0] && this.ordre[0] == "M") { - if (this.ordre[1] && this.ordre[1] == "A") { + 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 { 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 { val = jour + this.format + mois + this.format + this.anneec; } } else { - if (this.ordre[1] && this.ordre[1] == "J") { + if (this.ordre[1] && this.ordre[1] === "J") { val = this.anneec + this.format + jour + this.format + mois; } else { val = this.anneec + this.format + mois + this.format + jour; From df4d9be77bcc4a6c87b1a84855a9b69b9fce0df6 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:45:32 +0200 Subject: [PATCH 42/63] lib/clock_fr.js: uniformisation --- lib/clock_fr.js | 224 ++++++++++++++++++++++++++++-------------------- 1 file changed, 132 insertions(+), 92 deletions(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index a23d55aff9..d8b93961f4 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]; +var 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,143 @@ 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]; +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]; -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) { + 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" - } - } - } - 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);} +function LC_UpdateClock(Clock) { + var c = LC_Clocks[Clock]; + var t = new Date(); + var day = t.getDay(); + var md = t.getDate(); + var mnth = t.getMonth(); + var hrs = t.getHours(); + var mins = t.getMinutes(); + var secs = t.getSeconds(); + var yr = t.getYear(); + if (yr < 1900) { + yr += 1900 + } + if (c.DisplayDate >= 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" + } + } + } + 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); + } } -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; From dababfaabc91b01a917ff15fbf9588a8b9570fc7 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:47:10 +0200 Subject: [PATCH 43/63] =?UTF-8?q?lib/clock=5Ffr.js:=20utilisation=20de=20'?= =?UTF-8?q?let'=20et=20de=20'const'=20=C3=A0=20la=20place=20de=20'var'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/clock_fr.js | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index d8b93961f4..64ac7d204a 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -4,7 +4,7 @@ */ -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,14 +13,14 @@ 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 = new Array(); +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) { @@ -49,16 +49,16 @@ function LC_InitializeClocks() { } function LC_UpdateClock(Clock) { - var c = LC_Clocks[Clock]; - var t = new Date(); - var day = t.getDay(); - var md = t.getDate(); - var mnth = t.getMonth(); - var hrs = t.getHours(); - var mins = t.getMinutes(); - var secs = t.getSeconds(); - var yr = t.getYear(); - if (yr < 1900) { + 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 } if (c.DisplayDate >= 3) { @@ -75,8 +75,8 @@ function LC_UpdateClock(Clock) { } } } - var ampm = ""; - if (c.Hour12 == 1) { + let ampm = ""; + if (c.Hour12 == 1) { ampm = "AM"; if (hrs >= 12) { ampm = "PM"; @@ -92,8 +92,8 @@ function LC_UpdateClock(Clock) { if (secs <= 9) { secs = "0" + secs } - var html = ''; - html += c.OpenTags; + let html = ''; + html += c.OpenTags; if (LC_NS) { html += '
'; } @@ -126,8 +126,8 @@ function LC_UpdateClock(Clock) { } html += ''; if (LC_NS) { - var l = document.layers[c.Name + "Pos"].document.layers[c.Name].document; - l.open(); + 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) { From a2430446a2477fa40cee1018ce486d2933a9224a Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:47:29 +0200 Subject: [PATCH 44/63] lib/clock_fr.js: utilisation du nouveau style de tableau --- lib/clock_fr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index 64ac7d204a..1892437be9 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -17,7 +17,7 @@ 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 = new Array(); +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]; From 06d849f1eb32537b5e19dc968e5d867e88de61c8 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:48:06 +0200 Subject: [PATCH 45/63] lib/clock_fr.js: LC_CreateClock: extraction de la variable 'clockTags' --- lib/clock_fr.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index 1892437be9..e0174be8a4 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -23,11 +23,12 @@ const LC_MonthsOfYear = [["Janvier", "Jan."], ["Fevrier", "Fev."], ["Mars", "Mar const LC_ClockUpdate = [0, 1000, 60000]; function LC_CreateClock(c) { - if (LC_IE || LC_N6) { - clockTags = '' - } else if (LC_NS) { - clockTags = '' - } + let clockTags; + if (LC_IE || LC_N6) { + clockTags = '' + } else if (LC_NS) { + clockTags = '' + } if (!LC_Old) { document.write(clockTags) } else { From 254e57f809570224f3f32fe63c740a7bd57a704e Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:49:00 +0200 Subject: [PATCH 46/63] lib/clock_fr.js: LC_UpdateClock: extraction de la variable 'abbrev' --- lib/clock_fr.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index e0174be8a4..b6436bfa22 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -62,20 +62,21 @@ function LC_UpdateClock(Clock) { if (yr < 1900) { yr += 1900 } - if (c.DisplayDate >= 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" - } - } - } + let abbrev; + if (c.DisplayDate >= 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" + } + } + } let ampm = ""; if (c.Hour12 == 1) { ampm = "AM"; From 6d9d3ce0d986748c100c90ae429c1ecabbff2bca Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:49:57 +0200 Subject: [PATCH 47/63] lib/clock_fr.js: comparaisons 'stricte' --- lib/clock_fr.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index b6436bfa22..9ba4661bb3 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -66,25 +66,25 @@ function LC_UpdateClock(Clock) { if (c.DisplayDate >= 3) { md += ""; abbrev = "th"; - if (md.charAt(md.length - 2) != 1) { + if (md.charAt(md.length - 2) !== 1) { var tmp = md.charAt(md.length - 1); - if (tmp == 1) { + if (tmp === 1) { abbrev = "sd" - } else if (tmp == 2) { + } else if (tmp === 2) { abbrev = "nd" - } else if (tmp == 3) { + } else if (tmp === 3) { abbrev = "rd" } } } let ampm = ""; - if (c.Hour12 == 1) { + if (c.Hour12 === 1) { ampm = "AM"; if (hrs >= 12) { ampm = "PM"; hrs -= 12 } - if (hrs == 0) { + if (hrs === 0) { hrs = 12 } } @@ -99,10 +99,10 @@ function LC_UpdateClock(Clock) { if (LC_NS) { html += '
'; } - if (c.DisplayDate == 1) { + if (c.DisplayDate === 1) { html += ' ' + md + '/' + (mnth + 1) + '/' + yr } - if (c.DisplayDate == 2) { + if (c.DisplayDate === 2) { html += ' ' + (mnth + 1) + '/' + md + '/' + yr } if (c.DisplayDate >= 3) { @@ -116,7 +116,7 @@ function LC_UpdateClock(Clock) { html += ' - '; html += ''; html += hrs + ':' + mins; - if (c.Update == 1) { + if (c.Update === 1) { html += ':' + secs } if (c.Hour12) { From 68c6db79ae53c78179db13c5403dfcb835bb8df8 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:50:32 +0200 Subject: [PATCH 48/63] =?UTF-8?q?lib/clock=5Ffr.js:=20LC=5FUpdateClock:=20?= =?UTF-8?q?utilisation=20de=20'const'=20=C3=A0=20la=20place=20de=20'var'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/clock_fr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index 9ba4661bb3..3c721de087 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -67,7 +67,7 @@ function LC_UpdateClock(Clock) { md += ""; abbrev = "th"; if (md.charAt(md.length - 2) !== 1) { - var tmp = md.charAt(md.length - 1); + const tmp = md.charAt(md.length - 1); if (tmp === 1) { abbrev = "sd" } else if (tmp === 2) { From 643928025c94c78a4c1db27995d9141f07bea086 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:51:38 +0200 Subject: [PATCH 49/63] =?UTF-8?q?lib/clock=5Ffr.js:=20LC=5FCreateClock:=20?= =?UTF-8?q?d=C3=A9clarion=20explicite=20de=20la=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/clock_fr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/clock_fr.js b/lib/clock_fr.js index 3c721de087..ae29731076 100755 --- a/lib/clock_fr.js +++ b/lib/clock_fr.js @@ -41,7 +41,7 @@ function LC_InitializeClocks() { if (LC_Old) { return } - for (i = 0; i < LC_Clocks.length; i++) { + for (let i = 0; i < LC_Clocks.length; i++) { LC_UpdateClock(i); if (LC_Clocks[i].Update) { eval('var ' + LC_Clocks[i].Name + '=setInterval("LC_UpdateClock("+' + i + '+")",' + LC_ClockUpdate[LC_Clocks[i].Update] + ')'); From 4d3a7958148805f8d8327ca2088d5dccf852135a Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:52:13 +0200 Subject: [PATCH 50/63] lib/cookieClass.js: uniformisation --- lib/cookieClass.js | 102 ++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/lib/cookieClass.js b/lib/cookieClass.js index 1e270b556d..5e3fca7530 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -6,54 +6,54 @@ * *********************************************** */ var Cookies = Class.create({ - initialize: function(path, domain) { - this.path = path || '/'; - this.domain = domain || null; - }, - // Sets a cookie - set: function(key, value, days) { - if (typeof key != 'string') { - throw "Invalid key"; - } - if (typeof value != 'string' && typeof value != 'number') { - throw "Invalid value"; - } - if (days && typeof days != 'number') { - throw "Invalid expiration time"; - } - var setValue = key+'='+escape(new 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; - }, - // Returns a cookie value or false - get: function(key) { - var keyEquals = key+"="; - var value = false; - document.cookie.split(';').invoke('strip').each(function(s){ - if (s.startsWith(keyEquals)) { - value = unescape(s.substring(keyEquals.length, s.length)); - throw $break; - } - }); - return value; - }, - // Clears a cookie - clear: function(key) { - this.set(key,''); - }, - // Clears all cookies - clearAll: function() { - document.cookie.split(';').collect(function(s){ - return s.split('=').first().strip(); - }).each(function(key){ - this.clear(key); - }.bind(this)); - } -}); \ No newline at end of file + initialize: function (path, domain) { + this.path = path || '/'; + this.domain = domain || null; + }, + // Sets a cookie + set: function (key, value, days) { + if (typeof key != 'string') { + throw "Invalid key"; + } + if (typeof value != 'string' && typeof value != 'number') { + throw "Invalid value"; + } + if (days && typeof days != 'number') { + throw "Invalid expiration time"; + } + var setValue = key + '=' + escape(new 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; + }, + // Returns a cookie value or false + get: function (key) { + var keyEquals = key + "="; + var value = false; + document.cookie.split(';').invoke('strip').each(function (s) { + if (s.startsWith(keyEquals)) { + value = unescape(s.substring(keyEquals.length, s.length)); + throw $break; + } + }); + return value; + }, + // Clears a cookie + clear: function (key) { + this.set(key, ''); + }, + // Clears all cookies + clearAll: function () { + document.cookie.split(';').collect(function (s) { + return s.split('=').first().strip(); + }).each(function (key) { + this.clear(key); + }.bind(this)); + } +}); From 648e8e138f97188615d42f8f123862fc970d7020 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:53:18 +0200 Subject: [PATCH 51/63] lib/cookieClass.js: remplacement de l'utilisation de 'var' --- lib/cookieClass.js | 102 ++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/lib/cookieClass.js b/lib/cookieClass.js index 5e3fca7530..a1461b1445 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -5,55 +5,55 @@ * http://codeinthehole.com/archives/5-Javascript-cookie-objects-using-Prototype-and-JSON.html * *********************************************** */ -var Cookies = Class.create({ - initialize: function (path, domain) { - this.path = path || '/'; - this.domain = domain || null; - }, - // Sets a cookie - set: function (key, value, days) { - if (typeof key != 'string') { - throw "Invalid key"; - } - if (typeof value != 'string' && typeof value != 'number') { - throw "Invalid value"; - } - if (days && typeof days != 'number') { - throw "Invalid expiration time"; - } - var setValue = key + '=' + escape(new 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; - }, - // Returns a cookie value or false - get: function (key) { - var keyEquals = key + "="; - var value = false; - document.cookie.split(';').invoke('strip').each(function (s) { - if (s.startsWith(keyEquals)) { - value = unescape(s.substring(keyEquals.length, s.length)); - throw $break; - } - }); - return value; - }, - // Clears a cookie - clear: function (key) { - this.set(key, ''); - }, - // Clears all cookies - clearAll: function () { - document.cookie.split(';').collect(function (s) { - return s.split('=').first().strip(); - }).each(function (key) { - this.clear(key); - }.bind(this)); - } +const Cookies = Class.create({ + initialize: function (path, domain) { + this.path = path || '/'; + this.domain = domain || null; + }, + // Sets a cookie + set: function (key, value, days) { + if (typeof key != 'string') { + throw "Invalid key"; + } + if (typeof value != 'string' && typeof value != 'number') { + throw "Invalid value"; + } + if (days && typeof days != 'number') { + throw "Invalid expiration time"; + } + const setValue = key + '=' + escape(new String(value)); + if (days) { + const date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + var setExpiration = "; expires=" + date.toGMTString(); + } else var setExpiration = ""; + const setPath = '; path=' + ('/'); + const setDomain = (this.domain) ? '; domain=' + escape(this.domain) : ''; + var cookieString = setValue + setExpiration + setPath + setDomain; + document.cookie = cookieString; + }, + // Returns a cookie value or false + 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; + } + }); + return value; + }, + // Clears a cookie + clear: function (key) { + this.set(key, ''); + }, + // Clears all cookies + clearAll: function () { + document.cookie.split(';').collect(function (s) { + return s.split('=').first().strip(); + }).each(function (key) { + this.clear(key); + }.bind(this)); + } }); From 1c82e6b6b9707d643a2f7cedf48b184a16c978e1 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:53:53 +0200 Subject: [PATCH 52/63] lib/cookieClass.js: utilisation de la 'primitive' au lieu d'un objet --- lib/cookieClass.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cookieClass.js b/lib/cookieClass.js index a1461b1445..7eecefcd22 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -21,7 +21,7 @@ const Cookies = Class.create({ if (days && typeof days != 'number') { throw "Invalid expiration time"; } - const setValue = key + '=' + escape(new String(value)); + const setValue = key + '=' + escape(String(value)); if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); From 4197c5f8e4030d0f8761f416e06803e6a827413f Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:54:24 +0200 Subject: [PATCH 53/63] =?UTF-8?q?lib/cookieClass.js:=20meilleure=20d=C3=A9?= =?UTF-8?q?claration=20de=20'setExpiration'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/cookieClass.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/cookieClass.js b/lib/cookieClass.js index 7eecefcd22..347e9c30e6 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -12,6 +12,7 @@ const Cookies = Class.create({ }, // Sets a cookie set: function (key, value, days) { + let setExpiration; if (typeof key != 'string') { throw "Invalid key"; } @@ -25,8 +26,10 @@ const Cookies = Class.create({ if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - var setExpiration = "; expires=" + date.toGMTString(); - } else var setExpiration = ""; + setExpiration = "; expires=" + date.toGMTString(); + } else { + setExpiration = ""; + } const setPath = '; path=' + ('/'); const setDomain = (this.domain) ? '; domain=' + escape(this.domain) : ''; var cookieString = setValue + setExpiration + setPath + setDomain; From 96eae75301f15d3421280aa31e8f1abe9a036442 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:55:04 +0200 Subject: [PATCH 54/63] lib/cookieClass.js: variable 'inline' --- lib/cookieClass.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/cookieClass.js b/lib/cookieClass.js index 347e9c30e6..7605d4368b 100755 --- a/lib/cookieClass.js +++ b/lib/cookieClass.js @@ -32,8 +32,7 @@ const Cookies = Class.create({ } const setPath = '; path=' + ('/'); const setDomain = (this.domain) ? '; domain=' + escape(this.domain) : ''; - var cookieString = setValue + setExpiration + setPath + setDomain; - document.cookie = cookieString; + document.cookie = setValue + setExpiration + setPath + setDomain; }, // Returns a cookie value or false get: function (key) { From 1f17834e58083d55ea08a2a086026e0c16a5eae9 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:56:40 +0200 Subject: [PATCH 55/63] lib/CsvClass.php: uniformisation --- lib/CsvClass.php | 69 ++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/lib/CsvClass.php b/lib/CsvClass.php index 6d406353ed..553af9e3e6 100755 --- a/lib/CsvClass.php +++ b/lib/CsvClass.php @@ -26,43 +26,44 @@ class CsvClass { - private $name=Null; - private $path=Null; - private $delimiter=";"; - private $enclosure='"'; - private $filename=Null; - private $exists=false; + private $name = Null; + private $path = Null; + private $delimiter = ";"; + private $enclosure = '"'; + private $filename = Null; + private $exists = false; - public function __construct($name,$path,$delimiter=Null,$enclosure=Null) { + public function __construct($name, $path, $delimiter = Null, $enclosure = Null) { - $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; - } - } + $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) { - //if($this->exists) $this->rename(); - $fp = fopen($this->filename, 'w'); - foreach($data as $line) { - fputcsv($fp, split(';',$line),$this->delimiter,$this->enclosure); - } - 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++; + } + } } + ?> From ea5c0b8a06fd600ec533483fc5b1818b2070277e Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:57:13 +0200 Subject: [PATCH 56/63] lib/CsvClass.php: suppression des initialisations redondantes --- lib/CsvClass.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/CsvClass.php b/lib/CsvClass.php index 553af9e3e6..48e8a766e7 100755 --- a/lib/CsvClass.php +++ b/lib/CsvClass.php @@ -26,11 +26,11 @@ class CsvClass { - private $name = Null; - private $path = Null; + private $name; + private $path; private $delimiter = ";"; private $enclosure = '"'; - private $filename = Null; + private $filename; private $exists = false; public function __construct($name, $path, $delimiter = Null, $enclosure = Null) { From d403fd22a24fe0a8e7cea9cbc489cfe3985d2d4d Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 16:59:10 +0200 Subject: [PATCH 57/63] =?UTF-8?q?lib/CsvClass.php:=20utilisation=20de=20la?= =?UTF-8?q?=20fonction=20qui=20remplace=20la=20fonction=20d=C3=A9pr=C3=A9c?= =?UTF-8?q?i=C3=A9e=20'split'=20(A=20tester)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/CsvClass.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/CsvClass.php b/lib/CsvClass.php index 48e8a766e7..a42fc397d9 100755 --- a/lib/CsvClass.php +++ b/lib/CsvClass.php @@ -1,7 +1,7 @@ exists) $this->rename(); $fp = fopen($this->filename, 'w'); foreach ($data as $line) { - fputcsv($fp, split(';', $line), $this->delimiter, $this->enclosure); + fputcsv($fp, preg_split(';', $line), $this->delimiter, $this->enclosure); //Romain Neil: A tester: remplacement par la fonction non dépréciée } fclose($fp); } From 492717610fb1b9ead2adcf1ccb0458dd48f38ac8 Mon Sep 17 00:00:00 2001 From: Romain Date: Wed, 2 Jun 2021 17:00:06 +0200 Subject: [PATCH 58/63] =?UTF-8?q?lib/CsvClass.php:=20-=20uniformisation=20?= =?UTF-8?q?-=20ajout=20documentation=20phpdoc=20-=20suppression=20code=20i?= =?UTF-8?q?nutilis=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/CsvClass.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/CsvClass.php b/lib/CsvClass.php index a42fc397d9..44e087f9c8 100755 --- a/lib/CsvClass.php +++ b/lib/CsvClass.php @@ -20,10 +20,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +# -# Cette classe sert à manipuler ou creer des fichiers CSV. - - +/** + * Cette classe sert à manipuler ou creer des fichiers CSV. + */ class CsvClass { private $name; @@ -34,7 +35,6 @@ class CsvClass { private $exists = false; public function __construct($name, $path, $delimiter = Null, $enclosure = Null) { - $this->path = $path; $this->name = $name; $this->filename = $this->path . $this->name . '.csv'; @@ -46,7 +46,6 @@ public function __construct($name, $path, $delimiter = Null, $enclosure = Null) } public function set_data($data) { - //if($this->exists) $this->rename(); $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 From 872fae8ce8c4b3c8710d147d1d6992de11d286da Mon Sep 17 00:00:00 2001 From: Romain Date: Sat, 5 Jun 2021 17:15:20 +0200 Subject: [PATCH 59/63] edt_win.php: ajout tag "lang" manquant --- edt_gestion_gr/edt_win.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edt_gestion_gr/edt_win.php b/edt_gestion_gr/edt_win.php index d25434e0c0..d42fa925d5 100755 --- a/edt_gestion_gr/edt_win.php +++ b/edt_gestion_gr/edt_win.php @@ -163,7 +163,7 @@ ?> - +  - 
@@ -172,4 +172,4 @@
- \ No newline at end of file + From e43ee61328f68dae8a9cc780342cb304ce492fa7 Mon Sep 17 00:00:00 2001 From: Romain Date: Sat, 5 Jun 2021 17:17:11 +0200 Subject: [PATCH 60/63] edt_win.php: uniformisation --- edt_gestion_gr/edt_win.php | 87 ++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 51 deletions(-) diff --git a/edt_gestion_gr/edt_win.php b/edt_gestion_gr/edt_win.php index d42fa925d5..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.

'; @@ -166,10 +151,10 @@  -  -
+
- + -
+
From 3e63a8eb5d1c38ef3e7a7d4fc23d00201a7152b8 Mon Sep 17 00:00:00 2001 From: Romain Date: Sat, 5 Jun 2021 17:19:32 +0200 Subject: [PATCH 61/63] LDAPServer.class.php: - uniformisation - utilisation du nouveau style de tableau --- lib/LDAPServer.class.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 63abbdbd95..b74fef3878 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -111,7 +111,7 @@ public function get_user_profile($_login) { $user = array(); $user = ldap_get_entries($this->ds, $sr); if (array_key_exists(0, $user)) { - $infos = array(); + $infos = []; $infos["dn"] = $user[0]["dn"]; if ($this->champ_prenom == '' || !array_key_exists($this->champ_prenom, $user[0])) { @@ -163,7 +163,6 @@ public function get_user_profile($_login) { } - # 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. @@ -227,7 +226,6 @@ private function get_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)) { @@ -244,7 +242,6 @@ 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)) { @@ -357,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'] = ''; @@ -398,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; @@ -454,5 +450,3 @@ private function format_user_data($_login, $_nom, $_prenom, $_email, $_civilite, } } - -?> From 2c60d1fe132279365c88601e91a499c94686bbb4 Mon Sep 17 00:00:00 2001 From: Romain Date: Sat, 5 Jun 2021 17:20:34 +0200 Subject: [PATCH 62/63] LDAPServer.class.php: variable inutile mise 'en ligne' --- lib/LDAPServer.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index b74fef3878..8791b92dd7 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -250,8 +250,8 @@ public function update_user($_login, $_nom, $_prenom, $_email, $_civilite, $_pas # L'utilisateur existe, on formate les données, et on modifie l'annuaire. $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); } } From c781cdb175a0e76e77114188bf605208f8c1618e Mon Sep 17 00:00:00 2001 From: Romain Date: Sat, 5 Jun 2021 17:21:26 +0200 Subject: [PATCH 63/63] LDAPServer.class.php: suppression de la branche redondante --- lib/LDAPServer.class.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/LDAPServer.class.php b/lib/LDAPServer.class.php index 8791b92dd7..391c8d0d5a 100755 --- a/lib/LDAPServer.class.php +++ b/lib/LDAPServer.class.php @@ -421,9 +421,6 @@ 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;