} if ($_SESSION['SESAMATH_ID'] == ID_DEMO) { exit('Action désactivée pour la démo...'); } $action = isset($_POST['f_action']) ? Clean::texte($_POST['f_action']) : ''; $check = isset($_POST['f_check']) ? Clean::entier($_POST['f_check']) : 0; $id = isset($_POST['f_id']) ? Clean::entier($_POST['f_id']) : 0; $id_ent = isset($_POST['f_id_ent']) ? Clean::texte($_POST['f_id_ent']) : ''; $id_gepi = isset($_POST['f_id_gepi']) ? Clean::texte($_POST['f_id_gepi']) : ''; $sconet_id = isset($_POST['f_sconet_id']) ? Clean::entier($_POST['f_sconet_id']) : 0; $reference = isset($_POST['f_reference']) ? Clean::ref($_POST['f_reference']) : ''; $profil = isset($_POST['f_profil']) ? Clean::texte($_POST['f_profil']) : ''; $genre = isset($_POST['f_genre']) ? Clean::texte($_POST['f_genre']) : ''; $nom = isset($_POST['f_nom']) ? Clean::nom($_POST['f_nom']) : ''; $prenom = isset($_POST['f_prenom']) ? Clean::prenom($_POST['f_prenom']) : ''; $login = isset($_POST['f_login']) ? Clean::login($_POST['f_login']) : ''; $password = isset($_POST['f_password']) ? Clean::password($_POST['f_password']) : ''; $sortie_date = isset($_POST['f_sortie_date']) ? Clean::date_fr($_POST['f_sortie_date']) : ''; $box_login = isset($_POST['box_login']) ? Clean::entier($_POST['box_login']) : 0; $box_password = isset($_POST['box_password']) ? Clean::entier($_POST['box_password']) : 0; $box_date = isset($_POST['box_date']) ? Clean::entier($_POST['box_date']) : 0; $courriel = isset($_POST['f_courriel']) ? Clean::courriel($_POST['f_courriel']) : ''; // //////////////////////////////////////////////////////////////////////////////////////////////////// // Ajouter un nouveau personnel // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'ajouter' && $profil && isset(Html::$tab_genre['adulte'][$genre]) && $nom && $prenom && ($box_login || $login) && ($box_password || $password) && ($box_date || $sortie_date)) { // Vérifier le profil if (!isset($_SESSION['TAB_PROFILS_ADMIN']['TYPE'][$profil]) || !in_array($_SESSION['TAB_PROFILS_ADMIN']['TYPE'][$profil], array('professeur', 'directeur'))) { exit('Erreur : profil incorrect !'); } // Vérifier que l'identifiant ENT est disponible (parmi tous les utilisateurs de l'établissement)
// // On passe les utilisateurs en revue : on mémorise leurs infos, les classes trouvées // Attention : en l'absence de donnée, un champ peut contenir la valeur "Non saisi" // $tab_genre = array('' => 'I', 'Masculin' => 'M', 'Féminin' => 'F'); foreach ($tab_lignes as $ligne_contenu) { $tab_elements = str_getcsv($ligne_contenu, $separateur); if (count($tab_elements) > $numero_max) { $sconet_num = $tab_elements[$tab_numero_colonne['sconet_num']] != "Non saisi" ? $tab_elements[$tab_numero_colonne['sconet_num']] : ''; $nom = $tab_elements[$tab_numero_colonne['nom']] != "Non saisi" ? $tab_elements[$tab_numero_colonne['nom']] : ''; $prenom = $tab_elements[$tab_numero_colonne['prenom']] != "Non saisi" ? $tab_elements[$tab_numero_colonne['prenom']] : ''; $genre = isset($tab_genre[$tab_elements[$tab_numero_colonne['genre']]]) ? $tab_genre[$tab_elements[$tab_numero_colonne['genre']]] : 'I'; $birth_date = $tab_elements[$tab_numero_colonne['birth_date']] != "Non saisi" ? $tab_elements[$tab_numero_colonne['birth_date']] : ''; $classe = $tab_elements[$tab_numero_colonne['classe']] != "Non saisi" ? $tab_elements[$tab_numero_colonne['classe']] : ''; if ($nom != '' && $prenom != '' && $classe != '') { $i_classe = 'i' . Clean::login($classe); // 'i' car la référence peut être numérique (ex : 61) et cela pose problème que l'indice du tableau soit un entier (ajouter (string) n'y change rien) lors du array_multisort(). $tab_users_fichier['sconet_id'][] = 0; $tab_users_fichier['sconet_num'][] = Clean::entier($sconet_num); $tab_users_fichier['reference'][] = ''; $tab_users_fichier['profil_sigle'][] = 'ELV'; $tab_users_fichier['genre'][] = $genre; $tab_users_fichier['nom'][] = Clean::nom($nom); $tab_users_fichier['prenom'][] = Clean::prenom($prenom); $tab_users_fichier['birth_date'][] = Clean::texte($birth_date); $tab_users_fichier['courriel'][] = ''; $tab_users_fichier['classe'][] = $i_classe; if (!isset($tab_classes_fichier['ref'][$i_classe])) { $tab_classes_fichier['ref'][$i_classe] = mb_substr(Clean::ref($classe), 0, 8); $tab_classes_fichier['nom'][$i_classe] = mb_substr(Clean::texte($classe), 0, 20); $tab_classes_fichier['niveau'][$i_classe] = '';
/** * Fabriquer un login à partir de nom/prénom selon le format paramétré par l'administrateur (reste à tester sa disponibilité). * Cette fonction n'est appelée que depuis un espace administrateur ; $_SESSION['TAB_PROFILS_ADMIN']['LOGIN_MODELE'] est donc défini. * * @param string $prenom * @param string $nom * @param string $profil_sigle * @return string */ function fabriquer_login($prenom,$nom,$profil_sigle) { $modele = $_SESSION['TAB_PROFILS_ADMIN']['LOGIN_MODELE'][$profil_sigle]; $login_prenom = mb_substr( str_replace(array('.','-','_'),'',Clean::login($prenom)) , 0 , mb_substr_count($modele,'p') ); $login_nom = mb_substr( str_replace(array('.','-','_'),'',Clean::login($nom)) , 0 , mb_substr_count($modele,'n') ); $login_separe = str_replace(array('p','n'),'',$modele); $login = ($modele{0}=='p') ? $login_prenom.$login_separe.$login_nom : $login_nom.$login_separe.$login_prenom ; return $login; }
$contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT . $fichier_nom); $contenu = To::deleteBOM(To::utf8($contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel $tab_lignes = extraire_lignes($contenu); // Extraire les lignes du fichier $separateur = extraire_separateur_csv($tab_lignes[0]); // Déterminer la nature du séparateur unset($tab_lignes[0]); // Supprimer la 1e ligne foreach ($tab_lignes as $ligne_contenu) { $tab_elements = str_getcsv($ligne_contenu, $separateur); $tab_elements = array_slice($tab_elements, 0, 4); if (count($tab_elements) == 4) { list($login, $mdp, $nom, $prenom) = $tab_elements; if ($nom != '' && $prenom != '') { $tab_users_fichier['login'][] = mb_substr(Clean::login($login), 0, 20); $tab_users_fichier['mdp'][] = $mdp != 'inchangé' ? mb_substr(Clean::password($mdp), 0, 20) : ''; $tab_users_fichier['nom'][] = Clean::nom($nom); $tab_users_fichier['prenom'][] = Clean::prenom($prenom); } } } // On trie array_multisort($tab_users_fichier['nom'], SORT_ASC, SORT_STRING, $tab_users_fichier['prenom'], SORT_ASC, SORT_STRING, $tab_users_fichier['login'], $tab_users_fichier['mdp']); // On récupère le contenu de la base pour comparer, y compris les professeurs afin de comparer avec leurs logins, et y compris les classes pour les étiquettes pdf $tab_users_base = array(); $tab_users_base['login'] = array(); $tab_users_base['mdp'] = array(); $tab_users_base['nom'] = array(); $tab_users_base['prenom'] = array(); $tab_users_base['info'] = array();
* Donc imagecolorallocatealpha() a été remplacé par imagecolorallocate() et imagealphablending($image_finale, false); + imagesavealpha($image_finale, true); ont été retirés. */ // Ce fichier est directement appelé par le navigateur et n'inclut pas tous les fichiers habituels. header("Content-type: image/png"); // Constantes / Configuration serveur / Autoload classes / Fonction de sortie require '../../_inc/_loader.php'; // Non chargé par le loader dont on ne prend que le début require CHEMIN_DOSSIER_INCLUDE . 'class.Clean.php'; $dossier = isset($_GET['dossier']) ? Clean::entier($_GET['dossier']) : 'x'; $nom = isset($_GET['nom']) ? Clean::nom($_GET['nom']) : ' '; $prenom = isset($_GET['prenom']) ? Clean::prenom($_GET['prenom']) : ' '; $br_line = isset($_GET['br']) ? 2 : 1; // 2 pour nom / retour à la ligne / prénom ; 1 pour nom / prénom à la suite $font_size = isset($_GET['size']) ? Clean::entier($_GET['size']) : 10; $chemin = CHEMIN_DOSSIER_BADGE . $dossier . DS; $fichier = $chemin . Clean::login($nom . '_' . $prenom) . '_' . $br_line . '_' . $font_size . '.png'; // //////////////////////////////////////////////////////////////////////////////////////////////////// // Créer l'image si elle n'existe pas // //////////////////////////////////////////////////////////////////////////////////////////////////// if (!file_exists($fichier)) { // S'assurer que le dossier, lui, existe bien au moins, sinon ce n'est pas la peine de poursuivre if (!is_dir($chemin)) { header('Status: 404 Not Found', true, 404); exit; } // On commence par créer une image temporaire plus large et plus haute que nécessaire $interligne = $font_size * 1.2; $hauteur_tmp = $font_size * 2 * $br_line; $largeur_tmp = $font_size * 40; // imagecreatetruecolor() n'est pas utilisé ici sinon imagecopy() utilisé ensuite peut faire apparaitre une bande noire... // $image_tmp = function_exists('imagecreatetruecolor') ? imagecreatetruecolor($largeur_tmp,$hauteur_tmp) : imagecreate($largeur_tmp,$hauteur_tmp) ;
* */ if (!defined('SACoche')) { exit('Ce fichier ne peut être appelé directement !'); } if ($_SESSION['SESAMATH_ID'] == ID_DEMO) { exit('Action désactivée pour la démo...'); } $BASE = isset($_POST['f_base']) ? Clean::entier($_POST['f_base']) : 0; $nom = isset($_POST['f_nom']) ? Clean::nom($_POST['f_nom']) : ''; $prenom = isset($_POST['f_prenom']) ? Clean::prenom($_POST['f_prenom']) : ''; $courriel = isset($_POST['f_courriel']) ? Clean::courriel($_POST['f_courriel']) : ''; $message = isset($_POST['f_message']) ? Clean::texte($_POST['f_message']) : ''; $captcha = isset($_POST['f_captcha']) ? Clean::texte($_POST['f_captcha']) : ''; $code = isset($_POST['f_code']) ? Clean::entier($_POST['f_code']) : 0; $md5 = isset($_POST['f_md5']) ? Clean::login($_POST['f_md5']) : ''; if (!$nom || !$prenom || !$courriel || !$message || HEBERGEUR_INSTALLATION == 'multi-structures' && !$BASE || $code && !$md5 || $md5 && !$code) { exit_json(FALSE, 'Erreur avec les données transmises !'); } // Protection contre les robots (pour éviter des envois intempestifs de courriels) if (!isset($_SESSION['TMP']['CAPTCHA'])) { exit_json(FALSE, 'Session perdue ou absence de cookie : merci d\'actualiser la page.'); } else { if ($_SERVER['REQUEST_TIME'] - $_SESSION['TMP']['CAPTCHA']['TIME'] < $_SESSION['TMP']['CAPTCHA']['DELAI']) { $_SESSION['TMP']['CAPTCHA']['TIME'] = $_SERVER['REQUEST_TIME']; exit_json(FALSE, 'Sécurité : patienter ' . $_SESSION['TMP']['CAPTCHA']['DELAI'] . 's avant une nouvelle tentative.'); } } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Première soumission : envoyer un code de confirmation par courriel et conserver un code de contrôle // ////////////////////////////////////////////////////////////////////////////////////////////////////
$tab_users_fichier['prenom'] = array(); $contenu = file_get_contents(CHEMIN_DOSSIER_IMPORT.$fichier_nom); $contenu = To::deleteBOM(To::utf8($contenu)); // Mettre en UTF-8 si besoin et retirer le BOM éventuel $tab_lignes = extraire_lignes($contenu); // Extraire les lignes du fichier $separateur = extraire_separateur_csv($tab_lignes[0]); // Déterminer la nature du séparateur unset($tab_lignes[0]); // Supprimer la 1e ligne foreach ($tab_lignes as $ligne_contenu) { $tab_elements = str_getcsv($ligne_contenu,$separateur); $tab_elements = array_slice($tab_elements,0,4); if(count($tab_elements)==4) { list($login,$mdp,$nom,$prenom) = $tab_elements; if( ($nom!='') && ($prenom!='') ) { $tab_users_fichier['login'][] = mb_substr(Clean::login($login),0,LOGIN_LONGUEUR_MAX); $tab_users_fichier['mdp'][] = ($mdp!='inchangé') ? mb_substr(Clean::password($mdp),0,PASSWORD_LONGUEUR_MAX) : ''; $tab_users_fichier['nom'][] = Clean::nom($nom); $tab_users_fichier['prenom'][] = Clean::prenom($prenom); } } } // On trie array_multisort( $tab_users_fichier['nom'] , SORT_ASC,SORT_STRING, $tab_users_fichier['prenom'], SORT_ASC,SORT_STRING, $tab_users_fichier['login'], $tab_users_fichier['mdp'] ); // On récupère le contenu de la base pour comparer, y compris les professeurs afin de comparer avec leurs logins, et y compris les classes pour les étiquettes pdf $tab_users_base = array();
// $tab_genre = array( ''=>'I' , 'Non saisi'=>'I' , 'Masculin'=>'M' , 'Féminin'=>'F' ); foreach ($tab_lignes as $ligne_contenu) { $tab_elements = str_getcsv($ligne_contenu,$separateur); if(count($tab_elements)>$numero_max) { $sconet_num = ($tab_elements[$tab_numero_colonne['sconet_num']]!="Non saisi") ? $tab_elements[$tab_numero_colonne['sconet_num']] : '' ; $nom = ($tab_elements[$tab_numero_colonne['nom' ]]!="Non saisi") ? $tab_elements[$tab_numero_colonne['nom' ]] : '' ; $prenom = ($tab_elements[$tab_numero_colonne['prenom' ]]!="Non saisi") ? $tab_elements[$tab_numero_colonne['prenom' ]] : '' ; $genre = isset($tab_genre[$tab_elements[$tab_numero_colonne['genre']]]) ? $tab_genre[$tab_elements[$tab_numero_colonne['genre']]] : 'I' ; $birth_date = ($tab_elements[$tab_numero_colonne['birth_date']]!="Non saisi") ? $tab_elements[$tab_numero_colonne['birth_date']] : '' ; $classe = ($tab_elements[$tab_numero_colonne['classe' ]]!="Non saisi") ? $tab_elements[$tab_numero_colonne['classe' ]] : '' ; if( ($nom!='') && ($prenom!='') && ($classe!='') ) { $i_classe = 'i'.Clean::login($classe); // 'i' car la référence peut être numérique (ex : 61) et cela pose problème que l'indice du tableau soit un entier (ajouter (string) n'y change rien) lors du array_multisort(). $tab_users_fichier['sconet_id' ][] = 0; $tab_users_fichier['sconet_num' ][] = Clean::entier($sconet_num); $tab_users_fichier['reference' ][] = ''; $tab_users_fichier['profil_sigle'][] = 'ELV' ; $tab_users_fichier['genre' ][] = $genre; $tab_users_fichier['nom' ][] = Clean::nom($nom); $tab_users_fichier['prenom' ][] = Clean::prenom($prenom); $tab_users_fichier['birth_date' ][] = Clean::texte($birth_date); $tab_users_fichier['courriel' ][] = ''; $tab_users_fichier['classe' ][] = $i_classe; if( !isset($tab_classes_fichier['ref'][$i_classe])) { $tab_classes_fichier['ref' ][$i_classe] = mb_substr(Clean::ref($classe),0,8); $tab_classes_fichier['nom' ][$i_classe] = mb_substr(Clean::texte($classe),0,20); $tab_classes_fichier['niveau'][$i_classe] = '';