* * 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 !');} $TITRE = html(Lang::_("Mode d'identification / Connecteur ENT")); require(CHEMIN_DOSSIER_INCLUDE.'tableau_sso.php'); if(IS_HEBERGEMENT_SESAMATH) { if(!is_file(CHEMIN_FICHIER_WS_SESAMATH_ENT)) { echo'<p class="danger">Le fichier « <b>'.FileSystem::fin_chemin(CHEMIN_FICHIER_WS_SESAMATH_ENT).'</b> » (uniquement présent sur le serveur Sésamath) n\'a pas été détecté !</p>'.NL; return; // Ne pas exécuter la suite de ce fichier inclus. } require(CHEMIN_FICHIER_WS_SESAMATH_ENT); // Charge les tableaux $tab_connecteurs_hebergement & $tab_connecteurs_convention } else { $tab_connecteurs_hebergement = $tab_connecteurs_convention = array(); } // Javascript Layout::add( 'js_inline_before' , 'var IS_HEBERGEMENT_SESAMATH = '.(int)IS_HEBERGEMENT_SESAMATH.';' ); Layout::add( 'js_inline_before' , 'var CONVENTION_ENT_REQUISE = '.(int)CONVENTION_ENT_REQUISE.';' ); Layout::add( 'js_inline_before' , 'var tab_param = new Array();' ); // Séparer le sous-domaine et le domaine du HOST (besoin pour les ENT avec un serveur par établissement, comme ceux du projet ENVOLE sur serveur SCRIBE).
require(CHEMIN_DOSSIER_INCLUDE.'tableau_sso.php'); if(!isset($tab_connexion_info[$connexion_mode][$connexion_ref])) { exit_error( 'Paramètres CAS anormaux' /*titre*/ , 'Les paramètres CAS sont anormaux (connexion_mode vaut "'.$connexion_mode.'" ; connexion_departement vaut "'.$connexion_departement.'" ; connexion_nom vaut "'.$connexion_nom.'") !<br />Un administrateur doit sélectionner l\'ENT concerné depuis son menu [Paramétrage établissement] [Mode d\'identification].' /*contenu*/ ); } $tab_info = $tab_connexion_info[$connexion_mode][$connexion_ref]; if($connexion_nom!='perso') { if( (strpos($cas_serveur_host,$tab_info['serveur_host_domain'])===FALSE) || ( ($tab_info['serveur_port']!=$cas_serveur_port) && ($tab_info['serveur_port']!='*') ) || ($tab_info['serveur_root']!=$cas_serveur_root) || ($tab_info['serveur_url_login']!=$cas_serveur_url_login) || ($tab_info['serveur_url_logout']!=$cas_serveur_url_logout) || ($tab_info['serveur_url_validate']!=$cas_serveur_url_validate) ) { exit_error( 'Paramètres CAS anormaux' /*titre*/ , 'Les paramètres CAS enregistrés ne correspondent pas à ceux attendus pour la référence "'.$connexion_ref.'" !<br />Un administrateur doit revalider la sélection depuis son menu [Paramétrage établissement] [Mode d\'identification].' /*contenu*/ ); } } if(!is_file(CHEMIN_FICHIER_WS_SESAMATH_ENT)) { exit_error( 'Fichier manquant' /*titre*/ , 'Le fichier « <b>'.FileSystem::fin_chemin(CHEMIN_FICHIER_WS_SESAMATH_ENT).'</b> » (uniquement présent sur le serveur Sésamath) n\'a pas été détecté !' /*contenu*/ ); } // Normalement les hébergements académiques ne sont pas concernés require(CHEMIN_FICHIER_WS_SESAMATH_ENT); // Charge les tableaux $tab_connecteurs_hebergement & $tab_connecteurs_convention if( isset($tab_connecteurs_hebergement[$connexion_ref]) ) { exit_error( 'Mode d\'authentification anormal' /*titre*/ , 'Le mode d\'authentification sélectionné ('.$connexion_nom.') doit être utilisé sur l\'hébergement académique dédié (département '.$connexion_departement.') !' /*contenu*/ ); } // Pas besoin de vérification si convention signée à un plus haut niveau if( isset($tab_connecteurs_convention[$connexion_ref]) && $tab_ent_convention_infos[$tab_connecteurs_convention[$connexion_ref]]['actif'] ) { // Cas d'une convention signée par un partenaire ENT => Mettre en session l'affichage de sa communication en page d'accueil. $partenaire_id = DB_WEBMESTRE_PUBLIC::DB_recuperer_id_partenaire_for_connecteur($connexion_ref); $fichier_chemin = 'info_'.$partenaire_id.'.php'; if( $partenaire_id && is_file(CHEMIN_DOSSIER_PARTENARIAT.$fichier_chemin) ) {
/** * Charger les parametres mysql de connexion d'un établissement qui n'auraient pas été chargé par le fichier index ou ajax. * * Dans le cas d'une installation de type multi-structures, on peut avoir besoin d'effectuer une requête sur une base d'établissement sans y être connecté : * => pour savoir si le mode de connexion est SSO ou pas (./pages/public_*.php) * => pour l'identification (méthode SessionUser::tester_authentification_utilisateur()) * => pour le webmestre (création d'un admin, info sur les admins, initialisation du mdp...) * Dans le cas d'une installation de type multi-structures, on peut avoir besoin d'effectuer une requête sur la base du webmestre : * => pour avoir des infos sur le contact référent, ou l'état d'une convention ENT * * @param int $BASE 0 pour celle du webmestre * @param bool $exit TRUE par défaut (arrêt si erreur) * @return bool | exit */ function charger_parametres_mysql_supplementaires( $BASE , $exit=TRUE ) { $fichier_mysql_config_supplementaire = ($BASE) ? CHEMIN_DOSSIER_MYSQL.'serveur_sacoche_structure_'.$BASE.'.php' : CHEMIN_DOSSIER_MYSQL.'serveur_sacoche_webmestre.php' ; $fichier_class_config_supplementaire = ($BASE) ? CHEMIN_DOSSIER_INCLUDE.'class.DB.config.sacoche_structure.php' : CHEMIN_DOSSIER_INCLUDE.'class.DB.config.sacoche_webmestre.php' ; if(is_file($fichier_mysql_config_supplementaire)) { global $_CONST; // Car si on charge les paramètres dans une fonction, ensuite ils ne sont pas trouvés par la classe de connexion. require($fichier_mysql_config_supplementaire); require($fichier_class_config_supplementaire); return TRUE; } else { if($exit) { exit_error( 'Paramètres BDD manquants' /*titre*/ , 'Les paramètres de connexion à la base de données n\'ont pas été trouvés.<br />Le fichier "'.FileSystem::fin_chemin($fichier_mysql_config_supplementaire).'" (base n°'.$BASE.') est manquant !' /*contenu*/ ); } else { return FALSE; } } }
if (is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { // Choix des paramètres de connexion à la base de données adaptée... // ...multi-structures ; base sacoche_structure_*** (si connecté sur un établissement) if (HEBERGEUR_INSTALLATION == 'multi-structures' && $_SESSION['BASE'] > 0) { $fichier_mysql_config = 'serveur_sacoche_structure_' . $_SESSION['BASE']; $fichier_class_config = 'class.DB.config.sacoche_structure'; } elseif (HEBERGEUR_INSTALLATION == 'multi-structures') { $fichier_mysql_config = 'serveur_sacoche_webmestre'; $fichier_class_config = 'class.DB.config.sacoche_webmestre'; } elseif (HEBERGEUR_INSTALLATION == 'mono-structure') { $fichier_mysql_config = 'serveur_sacoche_structure'; $fichier_class_config = 'class.DB.config.sacoche_structure'; } else { exit_error('Configuration anormale', 'Une anomalie dans les données d\'hébergement empêche l\'application de se poursuivre.<br />HEBERGEUR_INSTALLATION vaut ' . HEBERGEUR_INSTALLATION); } // Chargement du fichier de connexion à la BDD define('CHEMIN_FICHIER_CONFIG_MYSQL', CHEMIN_DOSSIER_MYSQL . $fichier_mysql_config . '.php'); if (is_file(CHEMIN_FICHIER_CONFIG_MYSQL)) { require CHEMIN_FICHIER_CONFIG_MYSQL; require CHEMIN_DOSSIER_INCLUDE . $fichier_class_config . '.php'; } elseif ($PAGE != 'public_installation') { exit_error('Paramètres BDD manquants', 'Les paramètres de connexion à la base de données n\'ont pas été trouvés.<br />C\'est probablement votre première installation de SACoche, ou bien le fichier "' . FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_MYSQL) . '" a été supprimé.<br />Cliquer sur le lien ci-dessous.', 'install'); } } // Chargement de la page concernée $filename_php = CHEMIN_DOSSIER_PAGES . $PAGE . '.ajax.php'; if (is_file($filename_php)) { require $filename_php; } else { echo 'Page "' . $filename_php . '" manquante.'; }
// User connecté -> Redirection vers l'application, avec une clef (ticket) pour attester du login et permettre de récupérer ses infos $clef = FileSystem::fabriquer_fichier_user_infos_for_appli_externe(); unset($_SESSION['MEMO_GET']); $separateur = strpos($url_redirection, '?') === FALSE ? '?' : '&'; exit_redirection($url_redirection . $separateur . 'clef=' . $clef); } } // Page CNIL si message d'information CNIL non validé. if (isset($_SESSION['STOP_CNIL'])) { Session::$tab_message_erreur[] = 'Avant d\'utiliser <em>SACoche</em>, vous devez valider le formulaire ci-dessous.'; $PAGE = 'compte_cnil'; } // Fichier de données de la page concernée $filename_php = CHEMIN_DOSSIER_PAGES . $PAGE . '.php'; if (!is_file($filename_php)) { Session::$tab_message_erreur[] = 'Fichier ' . FileSystem::fin_chemin($filename_php) . ' manquant ; redirection vers une page d\'accueil.'; $PAGE = $_SESSION['USER_PROFIL_TYPE'] == 'public' ? 'public_accueil' : (isset($_SESSION['STOP_CNIL']) ? 'compte_cnil' : 'compte_accueil'); $filename_php = CHEMIN_DOSSIER_PAGES . $PAGE . '.php'; } // Contenu à afficher récupéré dans une variable ob_start(); require $filename_php; $CONTENU_PAGE = ob_get_contents(); ob_end_clean(); // Jeton CSRF ; ne peut pas être généré avant car $PAGE peut être changé par le code inclus ci-dessus. Session::generer_jeton_anti_CSRF($PAGE); // Titre du navigateur $browser_title = $TITRE ? $TITRE : 'Évaluer par compétences et valider le socle commun'; Layout::add('browser_title', $browser_title); // Css personnalisé if (!empty($_SESSION['CSS'])) {
echo '</tbody>' . NL; echo '</table>' . NL; exit; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Récupérer l'identifiant ENT de Laclasse.com (COPY_id_laclasse_TO_id_ent) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if ($action == 'COPY_id_laclasse_TO_id_ent') { if (IS_HEBERGEMENT_SESAMATH) { exit('Erreur : cette fonctionnalité est sans objet sur le serveur Sésamath !'); } if (substr($_SESSION['WEBMESTRE_UAI'], 0, 3) != '069') { exit('Erreur : cette fonctionnalité est réservée aux établissements du département du Rhône (et votre numéro UAI n\'y correspond pas) !'); } if (!is_file(CHEMIN_FICHIER_WS_LACLASSE)) { exit('Erreur : le fichier "' . FileSystem::fin_chemin(CHEMIN_FICHIER_WS_LACLASSE) . '" n\'a pas été trouvé !'); } require CHEMIN_FICHIER_WS_LACLASSE; // Charge la fonction "recuperer_infos_Laclasse()" // Appelle l'annuaire ENT Laclasse.com et retourne un tableau [ ['profil'][i] , ['id_ent'][i] , ['nom'][i] , ['prenom'][i] , ['id_sconet'][i] ] $tab_users_ENT = recuperer_infos_Laclasse('0693331W'); // $tab_users_ENT = recuperer_infos_Laclasse($_SESSION['WEBMESTRE_UAI']); // **************************************************************************** // On récupère le contenu de la base pour comparer $tab_users_base = array(); $tab_users_base['id'] = array(); $tab_users_base['ordre'] = array(); $tab_users_base['profil'] = array(); $tab_users_base['id_ent'] = array(); $tab_users_base['nom'] = array(); $tab_users_base['prenom'] = array(); $tab_users_base['id_sconet'] = array();
<fieldset id="fieldset_import_id_laclasse" class="hide"> <hr /> <p><span class="manuel"><a class="pop_up" href="<?php echo SERVEUR_DOCUMENTAIRE ?>?fichier=support_administrateur__gestion_mode_identification__laclasse">DOC : Intégration de SACoche dans Laclasse.com</a></span></p> <?php if(IS_HEBERGEMENT_SESAMATH) { echo'<div class="danger">Cette fonctionnalité, réservée à l\'installation départementale Laclasse.com, est sans objet sur le serveur Sésamath !</div>'.NL; } else if(substr($_SESSION['WEBMESTRE_UAI'],0,3)!='069') { echo'<div class="danger">Cette fonctionnalité est réservée aux établissements du département du Rhône (et votre numéro UAI n\'y correspond pas) !</div>'.NL; } else if(!is_file(CHEMIN_FICHIER_WS_LACLASSE)) { echo'<div class="danger">Le fichier « <b>'.FileSystem::fin_chemin(CHEMIN_FICHIER_WS_LACLASSE).'</b> » (uniquement présent sur l\'installation départementale Laclasse.com) n\'a pas été détecté !</div>'.NL; } else { echo'<button name="dupliquer" id="COPY_id_laclasse_TO_id_ent" type="button" class="mdp_groupe">Récupérer l\'identifiant ENT de Laclasse.com</button> pour tous les utilisateurs.'.NL; } ?> </fieldset> <fieldset id="fieldset_import_id_ent_normal" class="hide"> <hr /> <div class="astuce">Vous devez commencer par sélectionner votre ENT depuis la page "<a href="./index.php?page=administrateur_etabl_connexion">Mode d'identification / Connecteur ENT</a>".</div> </fieldset> <fieldset id="fieldset_import_id_ent_cas" class="hide"> <hr />
* */ // Fichier appelé pour l'affichage d'une archive PDF d'un bilan officiel. // Passage en GET d'un paramètre pour savoir quelle page charger. // Constantes / Configuration serveur / Autoload classes / Fonction de sortie require('./_inc/_loader.php'); // Fichier d'informations sur l'hébergement (requis avant la gestion de la session). require(CHEMIN_FICHIER_CONFIG_INSTALL); // Ouverture de la session et gestion des droits d'accès if(!Session::verif_droit_acces(SACoche)) { exit_error( 'Droits manquants' /*titre*/ , 'Droits de la page "'.SACoche.'" manquants.<br />Les droits de cette page n\'ont pas été attribués dans le fichier "'.FileSystem::fin_chemin(CHEMIN_DOSSIER_INCLUDE.'tableau_droits.php').'".' /*contenu*/ , '' /*lien*/ ); } Session::execute(); // Autres fonctions à charger require(CHEMIN_DOSSIER_INCLUDE.'fonction_divers.php'); // Paramètre transmis $FICHIER = (isset($_GET['fichier'])) ? $_GET['fichier'] : ''; // Extraction des infos list( $eleve_id , $bilan_type , $periode_id ) = explode( '_' , $FICHIER) + Array( NULL , NULL , NULL ); $bilan_type = Clean::texte($bilan_type); $periode_id = Clean::entier($periode_id); $eleve_id = Clean::entier($eleve_id);
// //////////////////////////////////////////////////////////////////////////////////////////////////// // Étape 6 - Installation des tables de la base de données // //////////////////////////////////////////////////////////////////////////////////////////////////// if( $step==6 ) { // A ce niveau, le fichier d'informations sur l'hébergement doit exister. if(!is_file(CHEMIN_FICHIER_CONFIG_INSTALL)) { exit('Erreur : problème avec le fichier : '.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_INSTALL).' !'); } // A ce niveau, le fichier de connexion à la base de données doit exister. if(!is_file(CHEMIN_FICHIER_CONFIG_MYSQL)) { exit('Erreur : problème avec le fichier : '.FileSystem::fin_chemin(CHEMIN_FICHIER_CONFIG_MYSQL).' !'); } // Créer les dossiers de fichiers temporaires par établissement if(HEBERGEUR_INSTALLATION=='mono-structure') { foreach(FileSystem::$tab_dossier_tmp_structure as $dossier) { FileSystem::creer_dossier($dossier.'0' , $affichage ); FileSystem::ecrire_fichier_index($dossier.'0'); } } // On cherche d'éventuelles tables existantes de SACoche. $DB_TAB = (HEBERGEUR_INSTALLATION=='mono-structure') ? DB_STRUCTURE_COMMUN::DB_recuperer_tables_informations() : DB_WEBMESTRE_PUBLIC::DB_recuperer_tables_informations() ; $nb_tables_presentes = !empty($DB_TAB) ? count($DB_TAB) : 0 ; if($nb_tables_presentes) {
// Ne pas dupliquer en paramétrage CAS-perso un paramétrage CAS-ENT existant (utiliser la connexion CAS officielle) if ($f_connexion_nom == 'perso') { foreach ($tab_serveur_cas as $cas_nom => $tab_cas_param) { if ($cas_nom) { $is_param_defaut_identiques = strpos($cas_serveur_host, $tab_cas_param['serveur_host_domain']) !== FALSE && $cas_serveur_root == $tab_cas_param['serveur_root'] ? TRUE : FALSE; // Pas de test sur le sous-domaine ni le port car ils peuvent varier $is_param_force_identiques = $cas_serveur_url_login != '' && ($cas_serveur_url_login == $tab_cas_param['serveur_url_login'] || strpos($cas_serveur_url_login, $tab_cas_param['serveur_host_domain'] . ':' . $tab_cas_param['serveur_port'] . '/' . $tab_cas_param['serveur_root']) !== FALSE) ? TRUE : FALSE; if ($is_param_defaut_identiques || $is_param_force_identiques) { exit_json(FALSE, 'Paramètres d\'un ENT référencé : sélectionnez-le !'); } } } } else { if (IS_HEBERGEMENT_SESAMATH) { if (!is_file(CHEMIN_FICHIER_WS_SESAMATH_ENT)) { exit_json(FALSE, 'Le fichier « <b>' . FileSystem::fin_chemin(CHEMIN_FICHIER_WS_SESAMATH_ENT) . '</b> » (uniquement présent sur le serveur Sésamath) n\'a pas été détecté !'); } require CHEMIN_FICHIER_WS_SESAMATH_ENT; // Charge les tableaux $tab_connecteurs_hebergement & $tab_connecteurs_convention if (isset($tab_connecteurs_hebergement[$f_connexion_ref])) { exit_json(FALSE, 'Paramètres d\'un serveur CAS à utiliser sur l\'hébergement académique dédié !'); } } } } // C'est ok DB_STRUCTURE_COMMUN::DB_modifier_parametres(array('connexion_mode' => $f_connexion_mode, 'connexion_nom' => $f_connexion_nom, 'connexion_departement' => $f_connexion_departement, 'cas_serveur_host' => $cas_serveur_host, 'cas_serveur_port' => $cas_serveur_port, 'cas_serveur_root' => $cas_serveur_root, 'cas_serveur_url_login' => $cas_serveur_url_login, 'cas_serveur_url_logout' => $cas_serveur_url_logout, 'cas_serveur_url_validate' => $cas_serveur_url_validate)); // ne pas oublier de mettre aussi à jour la session (normalement faudrait pas car connecté avec l'ancien mode, mais sinon pb d'initalisation du formulaire) $_SESSION['CONNEXION_MODE'] = $f_connexion_mode; $_SESSION['CONNEXION_NOM'] = $f_connexion_nom; $_SESSION['CONNEXION_DEPARTEMENT'] = $f_connexion_departement;
/** * Ecrire du contenu dans un fichier, exit() en cas d'erreur * * @param string $fichier_chemin * @param string $fichier_contenu * @param int facultatif ; si constante FILE_APPEND envoyée, alors ajoute en fin de fichier au lieu d'écraser le contenu * @return TRUE par compatibilité avec ecrire_fichier_si_possible() */ public static function ecrire_fichier($fichier_chemin,$fichier_contenu,$file_append=0) { @umask(FileSystem::systeme_umask()); $test_ecriture = @file_put_contents($fichier_chemin,$fichier_contenu,$file_append); if($test_ecriture===FALSE) { exit('Erreur : problème lors de l\'écriture du fichier '.FileSystem::fin_chemin($fichier_chemin).' !'); } return TRUE; }