/** * DB_STRUCTURE_modifier_mdp_utilisateur * Remarque : cette fonction n'est pas appelée pour un professeur ou un élève si le mode de connexion est SSO * * @param int $user_id * @param string $password_ancien * @param string $password_nouveau * @return string 'ok' ou 'Le mot de passe actuel est incorrect !' */ function DB_STRUCTURE_modifier_mdp_utilisateur($user_id,$password_ancien,$password_nouveau) { // Tester si l'ancien mot de passe correspond à celui enregistré $password_ancien_crypte = crypter_mdp($password_ancien); $DB_SQL = 'SELECT user_id FROM sacoche_user '; $DB_SQL.= 'WHERE user_id=:user_id AND user_password=:password_crypte '; $DB_SQL.= 'LIMIT 1'; $DB_VAR = array(':user_id'=>$user_id,':password_crypte'=>$password_ancien_crypte); $DB_ROW = DB::queryRow(SACOCHE_STRUCTURE_BD_NAME , $DB_SQL , $DB_VAR); if(!count($DB_ROW)) { return 'Le mot de passe actuel est incorrect !'; } // Remplacer par le nouveau mot de passe $password_nouveau_crypte = crypter_mdp($password_nouveau); $DB_SQL = 'UPDATE sacoche_user '; $DB_SQL.= 'SET user_password=:password_crypte '; $DB_SQL.= 'WHERE user_id=:user_id '; $DB_SQL.= 'LIMIT 1'; $DB_VAR = array(':user_id'=>$user_id,':password_crypte'=>$password_nouveau_crypte); DB::query(SACOCHE_STRUCTURE_BD_NAME , $DB_SQL , $DB_VAR); return 'ok'; }
/** * Enregistrer le (nouveau) mot de passe du webmestre. * * @param string $password_ancien * @param string $password_nouveau * @return string 'ok' | 'Le mot de passe actuel est incorrect !' */ public static function modifier_mdp_webmestre($password_ancien, $password_nouveau) { // Tester si l'ancien mot de passe correspond à celui enregistré $password_ancien_crypte = crypter_mdp($password_ancien); if ($password_ancien_crypte != WEBMESTRE_PASSWORD_MD5) { return 'Le mot de passe actuel est incorrect !'; } // Remplacer par le nouveau mot de passe $password_nouveau_crypte = crypter_mdp($password_nouveau); FileSystem::fabriquer_fichier_hebergeur_info(array('WEBMESTRE_PASSWORD_MD5' => $password_nouveau_crypte)); return 'ok'; }
} // Vérifier le domaine du serveur mail seulement en mode multi-structures car ce peut être sinon une installation sur un serveur local non ouvert sur l'extérieur. if ($courriel) { if (HEBERGEUR_INSTALLATION == 'multi-structures') { list($mail_domaine, $is_domaine_valide) = tester_domaine_courriel_valide($courriel); if (!$is_domaine_valide) { exit('Erreur avec le domaine "' . $mail_domaine . '" !'); } } $tab_donnees[':email_origine'] = 'admin'; } else { $tab_donnees[':email_origine'] = ''; } // Cas du mot de passe if (!$box_password) { $tab_donnees[':password'] = crypter_mdp($password); } // Cas de la date de sortie if ($box_date) { $sortie_date = '-'; $sortie_date_mysql = SORTIE_DEFAUT_MYSQL; } else { $sortie_date_mysql = convert_date_french_to_mysql($sortie_date); } // Mettre à jour l'enregistrement $tab_donnees += array(':sconet_id' => $sconet_id, ':reference' => $reference, ':profil_sigle' => $profil, ':genre' => $genre, ':nom' => $nom, ':prenom' => $prenom, ':courriel' => $courriel, ':id_ent' => $id_ent, ':id_gepi' => $id_gepi, ':sortie_date' => $sortie_date_mysql); DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id, $tab_donnees); // Afficher le retour $checked = $check ? ' checked' : ''; echo '<td class="nu"><input type="checkbox" name="f_ids" value="' . $id . '"' . $checked . ' /></td>'; echo '<td class="label">' . html($id_ent) . '</td>';
if (!$result) { exit_error($TITRE, 'Le code transmis est invalide ou périmé (base inexistante).'); } } // Récupération des données de l'utilisateur $DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_pass_key', $user_pass_key); if (empty($DB_ROW)) { exit_error($TITRE, 'Le code transmis est invalide ou périmé (absence de correspondance).'); } if (crypter_mdp($DB_ROW['user_id'] . $DB_ROW['user_email'] . $DB_ROW['user_password'] . $DB_ROW['user_connexion_date']) != $user_pass_key) { exit_error($TITRE, 'Le code transmis est périmé (incompatible avec les données actuelles).'); } // Prendre en compte la demande de changement de mdp $newpass = fabriquer_mdp(); // On ne transmet pas de profil car necessite sinon une variable de session non définie à ce stade. DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key($DB_ROW['user_id'], crypter_mdp($newpass), ''); // Affichage du résultat (confirmation + identifiants) ?> <p><label class="valide">Nouveau mot de passe généré avec succès !</label></p> <p>Veuillez noter vos identifiants de connexion :</p> <form> <label class="tab">Nom d'utilisateur :</label><b><?php echo html($DB_ROW['user_login']); ?> </b><br /> <label class="tab">Mot de passe :</label><b><?php echo $newpass; ?> </b> </form> <p><span class="astuce">Le code transmis étant à usage unique, il ne peut pas être utilisé de nouveau.</span></p>
} // On récupère les données de l'utilisateur $DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_user_for_new_mdp('user_id', $user_id); if (empty($DB_ROW)) { $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++; $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME']; exit_json(FALSE, 'Utilisateur inconnu ! Nouvelle tentative autorisée dans ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's.'); } // On vérifie que l'adresse mail concorde if ($DB_ROW['user_email'] != $courriel) { $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++; $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME']; exit_json(FALSE, 'Adresse mail non concordante ! Nouvelle tentative autorisée dans ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's.'); } // On enregistre un ticket pour cette demande $user_pass_key = crypter_mdp($DB_ROW['user_id'] . $DB_ROW['user_email'] . $DB_ROW['user_password'] . $DB_ROW['user_connexion_date']); $code_mdp = $BASE ? $user_pass_key . 'g' . $BASE : $user_pass_key; DB_STRUCTURE_PUBLIC::DB_modifier_user_password_or_key($DB_ROW['user_id'], '', $user_pass_key); // On envoi le courriel à l'utilisateur $mail_contenu = 'Bonjour,' . "\r\n"; $mail_contenu .= "\r\n"; $mail_contenu .= 'Une demande de nouveaux identifiants a été formulée pour le compte SACoche de ' . $DB_ROW['user_prenom'] . ' ' . $DB_ROW['user_nom'] . '.' . "\r\n"; $mail_contenu .= "\r\n"; $mail_contenu .= 'Pour confirmer la génération d\'un nouveau mot de passe, veuillez cliquer sur ce lien :' . "\r\n"; $mail_contenu .= URL_DIR_SACOCHE . '?code_mdp=' . $code_mdp . "\r\n"; $mail_contenu .= Sesamail::texte_pied_courriel(array('excuses_derangement', 'info_connexion', 'no_reply', 'signature'), $DB_ROW['user_email']); $courriel_bilan = Sesamail::mail($DB_ROW['user_email'], 'Demande de nouveaux identifiants', $mail_contenu, $DB_ROW['user_email']); if (!$courriel_bilan) { exit_json(FALSE, 'Erreur lors de l\'envoi du courriel !'); } // OK !
if (in_array($tab_users_fichier['login'][$i_fichier], $tab_users_base['login'])) { // Contenu du fichier à problème : login déjà pris $lignes_pb .= '<tr><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier]) . '</td><td colspan="2">nom d\'utilisateur proposé déjà affecté à un autre utilisateur</td></tr>' . NL; } elseif ($tab_users_fichier['mdp'][$i_fichier] == '' || crypter_mdp($tab_users_fichier['mdp'][$i_fichier]) == $tab_users_base['mdp'][$id_base]) { // Contenu du fichier à modifier : logins différents et mdp identiques on non imposé $login = $tab_users_fichier['login'][$i_fichier]; DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id_base, array(':login' => $login)); $lignes_mod .= '<tr class="new"><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier] . ' (' . $tab_users_base['info'][$id_base] . ')') . '</td><td class="b">Utilisateur : ' . html($login) . '</td><td class="i">Mot de passe : inchangé</td></tr>' . NL; $fcontenu_pdf_tab[] = $tab_users_base['info'][$id_base] . "\r\n" . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . "\r\n" . 'Utilisateur : ' . $login . "\r\n" . 'Mot de passe : inchangé'; $tab_users_base['login'][$id_base] = $login; // Prendre en compte cette modif de login dans les comparaisons futures } else { // Contenu du fichier à modifier : logins différents et mdp différents $login = $tab_users_fichier['login'][$i_fichier]; $password = $tab_users_fichier['mdp'][$i_fichier]; DB_STRUCTURE_ADMINISTRATEUR::DB_modifier_user($id_base, array(':login' => $login, ':password' => crypter_mdp($password))); $lignes_mod .= '<tr class="new"><td>' . html($tab_users_fichier['nom'][$i_fichier] . ' ' . $tab_users_fichier['prenom'][$i_fichier] . ' (' . $tab_users_base['info'][$id_base] . ')') . '</td><td class="b">Utilisateur : ' . html($login) . '</td><td class="b">Mot de passe : ' . html($password) . '</td></tr>' . NL; $fcontenu_pdf_tab[] = $tab_users_base['info'][$id_base] . "\r\n" . $tab_users_base['nom'][$id_base] . ' ' . $tab_users_base['prenom'][$id_base] . "\r\n" . 'Utilisateur : ' . $login . "\r\n" . 'Mot de passe : ' . $password; $tab_users_base['login'][$id_base] = $login; // Prendre en compte cette modif de login dans les comparaisons futures } } } } // On archive les nouveaux identifiants dans un fichier pdf (classe fpdf + script étiquettes) echo '<ul class="puce">' . NL; if (count($fcontenu_pdf_tab)) { $fnom = 'identifiants_' . $_SESSION['BASE'] . '_' . fabriquer_fin_nom_fichier__date_et_alea(); $pdf = new PDF_Label(array('paper-size' => 'A4', 'metric' => 'mm', 'marginLeft' => 5, 'marginTop' => 5, 'NX' => 3, 'NY' => 8, 'SpaceX' => 7, 'SpaceY' => 5, 'width' => 60, 'height' => 30, 'font-size' => 11)); $pdf->AddFont('Arial', '', 'arial.php'); $pdf->SetFont('Arial');
$denomination = $DB_ROW['structure_denomination']; $contact_nom = $DB_ROW['structure_contact_nom']; $contact_prenom = $DB_ROW['structure_contact_prenom']; $contact_courriel = $DB_ROW['structure_contact_courriel']; // Informations sur l'admin : nom / prénom / login. $DB_ROW = DB_STRUCTURE_WEBMESTRE::DB_recuperer_admin_identite($admin_id); if(empty($DB_ROW)) { exit('Erreur : administrateur introuvable !'); } $admin_nom = $DB_ROW['user_nom']; $admin_prenom = $DB_ROW['user_prenom']; $admin_login = $DB_ROW['user_login']; // Générer un nouveau mdp de l'admin $admin_password = fabriquer_mdp(); DB_STRUCTURE_WEBMESTRE::DB_modifier_admin_mdp($admin_id,crypter_mdp($admin_password)); // Envoyer un courriel au contact et éventuellement une copie du courriel au webmestre $courriel_contenu = Webmestre::contenu_courriel_nouveau_mdp( $base_id , $denomination , $contact_nom , $contact_prenom , $admin_nom , $admin_prenom , $admin_login , $admin_password , URL_DIR_SACOCHE ); $courriel_titre = 'Modification mdp administrateur - Inscription n°'.$base_id; $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu ); if(!$courriel_bilan) { exit('Erreur lors de l\'envoi du courriel !'); } if($courriel_copie) { $introduction = '================================================================================'."\r\n".'Copie pour information du courriel adressé à '.$contact_courriel."\r\n".'================================================================================'."\r\n\r\n"; $courriel_bilan = Sesamail::mail( WEBMESTRE_COURRIEL , $courriel_titre , $introduction.$courriel_contenu ); if(!$courriel_bilan) { exit('Erreur lors de l\'envoi du courriel !');
echo '<q class="initialiser_mdp" title="Générer un nouveau mdp pour ce partenaire."></q>'; echo '<q class="supprimer" title="Retirer ce partenaire."></q>'; echo'</td>'; exit(); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Générer un nouveau mdp d'un partenaire conventionné et lui envoyer par courriel // //////////////////////////////////////////////////////////////////////////////////////////////////// if( ($action=='initialiser_mdp') && $partenaire_id && $denomination && $nom && $prenom && $courriel ) { // Générer un nouveau mdp $password = fabriquer_mdp(); // Mettre à jour l'enregistrement DB_WEBMESTRE_WEBMESTRE::DB_modifier_partenaire_conventionne_mdp($partenaire_id,crypter_mdp($password)); // Envoyer un courriel $courriel_contenu = Webmestre::contenu_courriel_partenaire_nouveau_mdp( $denomination , $nom , $prenom , $password , URL_DIR_SACOCHE ); $courriel_bilan = Sesamail::mail( $courriel , 'Modification mdp compte partenaire ENT' , $courriel_contenu ); if(!$courriel_bilan) { exit('Erreur lors de l\'envoi du courriel !'); } // On affiche le retour echo'<ok>'; echo'Le mot de passe de<BR />'.html($prenom.' '.$nom).',<BR />partenaire conventionné<BR />"'.html($denomination).'",<BR />vient d\'être réinitialisé.<BR /><BR />'; echo'Les nouveaux identifiants<BR />ont été envoyés<BR />à son adresse de courriel<BR />'.html($courriel).'.'; exit(); } // ////////////////////////////////////////////////////////////////////////////////////////////////////
* sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. * Consultez la Licence Publique Générale GNU Affero pour plus de détails. * * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ; * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>. * */ 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...'); } $password_ancien = isset($_POST['f_password0']) ? Clean::password($_POST['f_password0']) : ''; $password_nouveau = isset($_POST['f_password1']) ? Clean::password($_POST['f_password1']) : ''; // //////////////////////////////////////////////////////////////////////////////////////////////////// // Mettre à jour son mdp // //////////////////////////////////////////////////////////////////////////////////////////////////// if ($password_ancien != '' && $password_nouveau != '') { if ($_SESSION['USER_PROFIL_TYPE'] == 'webmestre') { exit(Webmestre::modifier_mdp_webmestre($password_ancien, $password_nouveau)); } elseif ($_SESSION['USER_PROFIL_TYPE'] == 'partenaire') { exit(DB_WEBMESTRE_PARTENAIRE::DB_modifier_mdp_partenaire($_SESSION['USER_ID'], crypter_mdp($password_ancien), crypter_mdp($password_nouveau))); } else { exit(DB_STRUCTURE_COMMUN::DB_modifier_mdp_utilisateur($_SESSION['USER_ID'], crypter_mdp($password_ancien), crypter_mdp($password_nouveau))); } } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là ! // //////////////////////////////////////////////////////////////////////////////////////////////////// exit('Erreur avec les données transmises !');
DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure(); // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas. // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là). // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ? // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider... @sleep(1); // Personnaliser certains paramètres de la structure $tab_parametres = array(); $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE; $tab_parametres['webmestre_uai'] = $uai; $tab_parametres['webmestre_denomination'] = $denomination; $tab_parametres['etablissement_denomination'] = $denomination; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // Insérer le compte administrateur dans la base de cette structure $password = fabriquer_mdp(); $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , $contact_nom , $contact_prenom , NULL /*user_naissance_date*/ , $contact_courriel , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ ); // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' ); // Envoyer un courriel au contact et / ou une copie du courriel au webmestre $courriel_contenu = ( $courriel_envoi || $courriel_copie ) ? Webmestre::contenu_courriel_inscription( $base_id , $denomination , $contact_nom , $contact_prenom , 'admin' , $password , URL_DIR_SACOCHE ) : '' ; $courriel_titre = ( $courriel_envoi || $courriel_copie ) ? 'Création compte - Inscription n°'.$base_id : '' ; if($courriel_envoi) { $courriel_bilan = Sesamail::mail( $contact_courriel , $courriel_titre , $courriel_contenu ); if(!$courriel_bilan) { exit('Erreur lors de l\'envoi du courriel !'); } } if($courriel_copie) {
DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure(); // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas. // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là). // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ? // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider... @sleep(1); // Personnaliser certains paramètres de la structure $tab_parametres = array(); $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE; $tab_parametres['webmestre_uai'] = HEBERGEUR_UAI; $tab_parametres['webmestre_denomination'] = HEBERGEUR_DENOMINATION; $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // Insérer un compte administrateur dans la base de la structure $password = fabriquer_mdp(); $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( 0 /*user_sconet_id*/ , 0 /*user_sconet_elenoet*/ , '' /*reference*/ , 'ADM' , 'I' /*user_genre*/ , WEBMESTRE_NOM , WEBMESTRE_PRENOM , NULL /*user_naissance_date*/ , WEBMESTRE_COURRIEL , 'user' /*user_email_origine*/ , 'admin' /*login*/ , crypter_mdp($password) , 0 /*classe_id*/ , '' /*id_ent*/ , '' /*id_gepi*/ ); // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'contact_externe' , 'accueil' ); // Affichage du retour $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>'.NL; $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>'.NL; $affichage .= '<ul class="puce">'; $affichage .= '<li>nom d\'utilisateur " admin "</li>'; $affichage .= '<li>mot de passe " '.$password.' "</li>'; $affichage .= '</ul>'.NL; $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>'.NL; $affichage .= '<hr />'.NL; $affichage .= '<h2>Installation logicielle terminée</h2>'.NL; $affichage .= '<p>Se connecter avec le compte webmestre : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL; $affichage .= '<p>Se connecter avec le compte administrateur : <a href="'.URL_DIR_SACOCHE.'">'.URL_INSTALL_SACOCHE.'</a></p>'.NL; }
$login = fabriquer_login($tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']); // Puis tester le login (parmi tout le personnel de l'établissement) if (DB_STRUCTURE_ADMINISTRATEUR::DB_tester_utilisateur_identifiant('login', $login)) { // Login pris : en chercher un autre en remplaçant la fin par des chiffres si besoin $login = DB_STRUCTURE_ADMINISTRATEUR::DB_rechercher_login_disponible($login); } // Construire le password if ($import_profil != 'eleve' || !$_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI']['ELV'] || empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date'])) { $password = fabriquer_mdp($tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']); } else { $password = str_replace('/', '', $tab_memo_analyse['ajouter'][$i_fichier]['birth_date']); } // Attention à la date de naissance, définie seulement pour les élèves $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']); // Ajouter l'utilisateur $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur($tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'], $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'], $tab_memo_analyse['ajouter'][$i_fichier]['reference'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'], $tab_memo_analyse['ajouter'][$i_fichier]['genre'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $birth_date, $tab_memo_analyse['ajouter'][$i_fichier]['courriel'], $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'], $login, crypter_mdp($password), $tab_memo_analyse['ajouter'][$i_fichier]['classe']); if ($import_profil == 'professeur') { // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'bilan_officiel_appreciation', 'accueil'); } $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id; $nb_add++; $tab_password[$user_id] = $password; $classe_ou_profil = $import_profil == 'eleve' ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle']; $fcontenu_csv .= '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'] . '"' . $separateur . '"' . $tab_memo_analyse['ajouter'][$i_fichier]['reference'] . '"' . $separateur . $classe_ou_profil . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . $separateur . $tab_memo_analyse['ajouter'][$i_fichier]['prenom'] . $separateur . $login . $separateur . '"' . $password . '"' . "\r\n"; $ligne1 = $classe_ou_profil; $ligne2 = $tab_memo_analyse['ajouter'][$i_fichier]['nom'] . ' ' . $tab_memo_analyse['ajouter'][$i_fichier]['prenom']; $ligne3 = 'Utilisateur : ' . $login; $ligne4 = 'Mot de passe : ' . $password; $fcontenu_pdf_tab[] = $ligne1 . "\r\n" . $ligne2 . "\r\n" . $ligne3 . "\r\n" . $ligne4; }
/** * Tester si les données transmises permettent d'authentifier un utilisateur (sauf webmestre & développeur). * * En cas de connexion avec les identifiants SACoche, la reconnaissance s'effectue sur le couple login/password. * En cas de connexion depuis un service SSO extérieur type CAS, la reconnaissance s'effectue en comparant l'identifiant transmis (via $login) avec l'id ENT de jointure connu de SACoche. * En cas de connexion utilisant GEPI, la reconnaissance s'effectue en comparant le login GEPI transmis avec l'id Gepi de jointure connu de SACoche. * * @param int $BASE * @param string $login * @param string $password * @param string $mode_connection 'normal' | 'cas' | 'shibboleth' | 'siecle' | 'vecteur_parent' | 'gepi' | 'ldap' (?) * @param string $parent_nom facultatif, seulement pour $mode_connection = 'vecteur_parent' * @param string $parent_prenom facultatif, seulement pour $mode_connection = 'vecteur_parent' * @return array(string,array) ('ok',$DB_ROW) ou (message_d_erreur,tableau_vide) */ public static function tester_authentification_utilisateur($BASE,$login,$password,$mode_connection,$parent_nom='',$parent_prenom='') { // En cas de multi-structures, il faut charger les paramètres de connexion à la base concernée // Sauf pour une connexion à un ENT, car alors il a déjà fallu les charger pour récupérer les paramètres de connexion à l'ENT if( ($BASE) && ($mode_connection=='normal') ) { charger_parametres_mysql_supplementaires($BASE); } // Récupérer les données associées à l'utilisateur. $DB_ROW = DB_STRUCTURE_PUBLIC::DB_recuperer_donnees_utilisateur($mode_connection,$login,$parent_nom,$parent_prenom); // Si login (ou identifiant SSO) non trouvé... if(empty($DB_ROW)) { switch($mode_connection) { case 'normal' : $message = 'Nom d\'utilisateur incorrect !'; break; case 'cas' : $message = 'Identification réussie mais identifiant CAS "' .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant ENT associé à votre compte SACoche est "' .$login.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. ENT] la valeur "' .$login.'".'; break; case 'shibboleth' : $message = 'Identification réussie mais identifiant Shibboleth "'.$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant ENT associé à votre compte SACoche est "' .$login.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. ENT] la valeur "' .$login.'".'; break; case 'siecle' : $message = 'Identification réussie mais identifiant Sconet "' .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant Sconet associé à votre compte SACoche est "' .$login.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. Sconet] la valeur "' .$login.'".'; break; case 'vecteur_parent' : $message = 'Identification réussie mais compte parent introuvable dans SACoche !<br />Le compte SACoche d\'un responsable légal dont le nom est "' .$parent_nom.'", le prénom est "' .$parent_prenom.'", et ayant la charge d\'un enfant dont l\'identifiant Sconet est "' .$login.'", n\'a pas été trouvé.'; break; case 'gepi' : $message = 'Identification réussie mais login GEPI "' .$login.'" inconnu dans SACoche !<br />Un administrateur doit renseigner que l\'identifiant GEPI associé à votre compte SACoche est "'.$login.'"…<br />Il doit pour cela se connecter à SACoche, menu [Gestion courante], et indiquer pour votre compte dans le champ [Id. Gepi] la valeur "'.$login.'".'; break; } return array($message,array()); } // Blocage éventuel par le webmestre ou un administrateur ou l'automate LockAcces::stopper_si_blocage( $BASE , $DB_ROW['user_profil_sigle'] ); // Si mdp incorrect... if( ($mode_connection=='normal') && ($DB_ROW['user_password']!=crypter_mdp($password)) ) { global $PAGE; return array( 'Mot de passe incorrect ! Nouvelle tentative autorisée dans '.$_SESSION['FORCEBRUTE'][$PAGE]['DELAI'].'s.' , array() ); } // Si compte desactivé... if($DB_ROW['user_sortie_date']<=TODAY_MYSQL) { return array( 'Identification réussie mais ce compte est desactivé !' , array() ); } // Mémoriser la date de la (dernière) connexion (pour les autres cas, sera enregistré lors de la confirmation de la prise en compte des infos CNIL). if( ($DB_ROW['user_connexion_date']!==NULL) || in_array($DB_ROW['user_profil_type'],array('webmestre','administrateur')) ) { DB_STRUCTURE_PUBLIC::DB_enregistrer_date_connexion($DB_ROW['user_id']); } // Enregistrement d'un cookie sur le poste client servant à retenir le dernier établissement sélectionné si identification avec succès Cookie::definir( COOKIE_STRUCTURE , $BASE , 31536000 /* 60*60*24*365 = 1 an */ ); // Enregistrement d'un cookie sur le poste client servant à retenir le dernier mode de connexion utilisé si identification avec succès Cookie::definir( COOKIE_AUTHMODE , $mode_connection ); // Si on arrive ici c'est que l'identification s'est bien effectuée ! return array( 'ok' , $DB_ROW ); }
DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure(); // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas. // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là). // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ? // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider... @sleep(1); // Personnaliser certains paramètres de la structure $tab_parametres = array(); $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE; $tab_parametres['webmestre_uai'] = HEBERGEUR_UAI; $tab_parametres['webmestre_denomination'] = HEBERGEUR_DENOMINATION; $tab_parametres['etablissement_denomination'] = HEBERGEUR_DENOMINATION; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // Insérer un compte administrateur dans la base de la structure $password = fabriquer_mdp(); $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', WEBMESTRE_NOM, WEBMESTRE_PRENOM, NULL, WEBMESTRE_COURRIEL, 'user', 'admin', crypter_mdp($password), 0, '', ''); // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil'); // Affichage du retour $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>' . NL; $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>' . NL; $affichage .= '<ul class="puce">'; $affichage .= '<li>nom d\'utilisateur " admin "</li>'; $affichage .= '<li>mot de passe " ' . $password . ' "</li>'; $affichage .= '</ul>' . NL; $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>' . NL; $affichage .= '<hr />' . NL; $affichage .= '<h2>Installation logicielle terminée</h2>' . NL; $affichage .= '<p>Se connecter avec le compte webmestre : <a href="' . URL_DIR_SACOCHE . '?webmestre">' . URL_DIR_SACOCHE . '?webmestre</a></p>' . NL; $affichage .= '<p>Se connecter avec le compte administrateur : <a href="' . URL_DIR_SACOCHE . '">' . URL_INSTALL_SACOCHE . '</a></p>' . NL; } elseif (HEBERGEUR_INSTALLATION == 'multi-structures') {
DB_STRUCTURE_COMMUN::DB_creer_remplir_tables_structure(); // Il est arrivé que la fonction DB_modifier_parametres() retourne une erreur disant que la table n'existe pas. // Comme si les requêtes de DB_creer_remplir_tables_structure() étaient en cache, et pas encore toutes passées (parcequ'au final, quand on va voir la base, toutes les tables sont bien là). // Est-ce que c'est possible au vu du fonctionnement de la classe de connexion ? Et, bien sûr, y a-t-il quelque chose à faire pour éviter ce problème ? // En attendant une réponse de SebR, j'ai mis ce sleep(1)... sans trop savoir si cela pouvait aider... @sleep(1); // Personnaliser certains paramètres de la structure $tab_parametres = array(); $tab_parametres['version_base'] = VERSION_BASE_STRUCTURE; $tab_parametres['webmestre_uai'] = $uai; $tab_parametres['webmestre_denomination'] = $denomination; $tab_parametres['etablissement_denomination'] = $denomination; DB_STRUCTURE_COMMUN::DB_modifier_parametres($tab_parametres); // Insérer le compte administrateur dans la base de cette structure $password = fabriquer_mdp(); $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur(0, 0, '', 'ADM', 'I', $contact_nom, $contact_prenom, NULL, $contact_courriel, 'user', 'admin', crypter_mdp($password), 0, '', ''); // Pour les admins, abonnement obligatoire aux contacts effectués depuis la page d'authentification DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement($user_id, 'contact_externe', 'accueil'); // Envoyer un courriel au contact et / ou une copie du courriel au webmestre $courriel_contenu = $courriel_envoi || $courriel_copie ? Webmestre::contenu_courriel_inscription($base_id, $denomination, $contact_nom, $contact_prenom, 'admin', $password, URL_DIR_SACOCHE) : ''; $courriel_titre = $courriel_envoi || $courriel_copie ? 'Création compte - Inscription n°' . $base_id : ''; if ($courriel_envoi) { $courriel_bilan = Sesamail::mail($contact_courriel, $courriel_titre, $courriel_contenu); if (!$courriel_bilan) { exit('Erreur lors de l\'envoi du courriel !'); } } if ($courriel_copie) { $introduction = '================================================================================' . "\r\n" . 'Copie pour information du courriel adressé à ' . $contact_courriel . "\r\n" . '================================================================================' . "\r\n\r\n"; $courriel_bilan = Sesamail::mail(WEBMESTRE_COURRIEL, $courriel_titre, $introduction . $courriel_contenu); if (!$courriel_bilan) {
// Attention à la date de naissance, définie seulement pour les élèves $birth_date = empty($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ? NULL : convert_date_french_to_mysql($tab_memo_analyse['ajouter'][$i_fichier]['birth_date']) ; // Ajouter l'utilisateur $user_id = DB_STRUCTURE_COMMUN::DB_ajouter_utilisateur( $tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'], $tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'], $tab_memo_analyse['ajouter'][$i_fichier]['reference'], $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'], $tab_memo_analyse['ajouter'][$i_fichier]['genre'], $tab_memo_analyse['ajouter'][$i_fichier]['nom'], $tab_memo_analyse['ajouter'][$i_fichier]['prenom'], $birth_date, $tab_memo_analyse['ajouter'][$i_fichier]['courriel'], $tab_memo_analyse['ajouter'][$i_fichier]['email_origine'], $login, crypter_mdp($password), $tab_memo_analyse['ajouter'][$i_fichier]['classe'] ); if($import_profil=='professeur') { // Pour les professeurs et directeurs, abonnement obligatoire aux signalements d'un souci pour une appréciation d'un bilan officiel DB_STRUCTURE_NOTIFICATION::DB_ajouter_abonnement( $user_id , 'bilan_officiel_appreciation' , 'accueil' ); } $tab_i_fichier_TO_id_base[$i_fichier] = (int) $user_id; $nb_add++; $tab_password[$user_id] = $password; $classe_ou_profil = ($import_profil=='eleve') ? $tab_nom_classe[$tab_memo_analyse['ajouter'][$i_fichier]['classe']] : $tab_memo_analyse['ajouter'][$i_fichier]['profil_sigle'] ; $fcontenu_csv .= '"'.$tab_memo_analyse['ajouter'][$i_fichier]['sconet_id'].'"'.$separateur.'"'.$tab_memo_analyse['ajouter'][$i_fichier]['sconet_num'].'"'.$separateur.'"'.$tab_memo_analyse['ajouter'][$i_fichier]['reference'].'"'.$separateur.$classe_ou_profil.$separateur.$tab_memo_analyse['ajouter'][$i_fichier]['nom'].$separateur.$tab_memo_analyse['ajouter'][$i_fichier]['prenom'].$separateur.$login.$separateur.'"'.$password.'"'."\r\n"; $ligne1 = $classe_ou_profil; $ligne2 = $tab_memo_analyse['ajouter'][$i_fichier]['nom'].' '.$tab_memo_analyse['ajouter'][$i_fichier]['prenom']; $ligne3 = 'Utilisateur : '.$login;