Пример #1
0
    $BASE = isset($_GET['uai']) ? DB_WEBMESTRE_PUBLIC::DB_recuperer_structure_id_base_for_UAI(Clean::uai($_GET['uai'])) : $BASE;
    if (!$BASE) {
        if (isset($_GET['uai'])) {
            exit_error('Paramètre incorrect', 'Le numéro UAI transmis n\'est pas référencé sur cette installation de SACoche : vérifiez son exactitude et si cet établissement est bien inscrit sur ce serveur.');
        } else {
            exit_error('Donnée manquante', 'Référence de base manquante (le paramètre "base" ou "id" n\'a pas été transmis en GET ou n\'est pas un entier et n\'a pas non plus été trouvé dans un Cookie).');
        }
    }
    charger_parametres_mysql_supplementaires($BASE);
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Connexion à la base pour charger les paramètres du SSO demandé
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Mettre à jour la base si nécessaire
maj_base_structure_si_besoin($BASE);
$DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres('"connexion_mode","cas_serveur_host","cas_serveur_port","cas_serveur_root","cas_serveur_url_login","cas_serveur_url_logout","cas_serveur_url_validate","gepi_url","gepi_rne","gepi_certificat_empreinte"');
// A compléter
foreach ($DB_TAB as $DB_ROW) {
    ${$DB_ROW['parametre_nom']} = $DB_ROW['parametre_valeur'];
}
if ($connexion_mode == 'normal') {
    exit_error('Configuration manquante', 'Etablissement non paramétré par l\'administrateur pour utiliser un service d\'authentification externe.<br />Un administrateur doit renseigner cette configuration dans le menu [Paramétrages][Mode&nbsp;d\'identification].');
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Déconnexion avec le protocole CAS
// ////////////////////////////////////////////////////////////////////////////////////////////////////
if ($connexion_mode == 'cas') {
    // Pour tester, cette méthode statique créé un fichier de log sur ce qui se passe avec CAS
    if (DEBUG_PHPCAS) {
        if (HEBERGEUR_INSTALLATION == 'mono-structure' || !PHPCAS_ETABL_ID_LISTING || strpos(PHPCAS_ETABL_ID_LISTING, ',' . $BASE . ',') !== FALSE) {
            $fichier_nom_debut = 'debugcas_' . $BASE;
Пример #2
0
$tab_parametres = array(
  '"connexion_departement"',
  '"connexion_mode"',
  '"connexion_nom"',
  '"cas_serveur_host"',
  '"cas_serveur_port"',
  '"cas_serveur_root"',
  '"cas_serveur_url_login"',
  '"cas_serveur_url_logout"',
  '"cas_serveur_url_validate"',
  '"cas_serveur_verif_certif_ssl"',
  '"gepi_url"',
  '"gepi_rne"',
  '"gepi_certificat_empreinte"',
);
$DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres( implode(',',$tab_parametres) );
foreach($DB_TAB as $DB_ROW)
{
  ${$DB_ROW['parametre_nom']} = $DB_ROW['parametre_valeur'];
}
if($connexion_mode=='normal')
{
  exit_error( 'Configuration manquante' /*titre*/ , 'Etablissement non paramétré par l\'administrateur pour utiliser un service d\'authentification externe.<br />Un administrateur doit renseigner cette configuration dans le menu [Paramétrages][Mode&nbsp;d\'identification].' /*contenu*/ );
}

// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Identification avec le protocole CAS
// ////////////////////////////////////////////////////////////////////////////////////////////////////

if($connexion_mode=='cas')
{
Пример #3
0
    exit_json(TRUE, afficher_formulaire_etablissement($BASE, $profil));
}
// Charger le formulaire pour un établissement donné (installation multi-structures)
if ($action == 'initialiser' && $BASE > 0 && HEBERGEUR_INSTALLATION == 'multi-structures' || $action == 'charger' && $profil) {
    // Une première requête sur SACOCHE_WEBMESTRE_BD_NAME pour vérifier que la structure est référencée
    $structure_denomination = DB_WEBMESTRE_PUBLIC::DB_recuperer_structure_nom_for_Id($BASE);
    if ($structure_denomination === NULL) {
        // Sans doute un établissement supprimé, mais le cookie est encore là
        Cookie::effacer(COOKIE_STRUCTURE);
        exit_json(FALSE, 'Établissement non trouvé dans la base d\'administration !');
    }
    // Mettre à jour la base si nécessaire
    charger_parametres_mysql_supplementaires($BASE);
    maj_base_structure_si_besoin($BASE);
    // Une deuxième requête sur SACOCHE_STRUCTURE_BD_NAME pour savoir si le mode de connexion est SSO ou pas
    $DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres('"connexion_mode","connexion_nom"');
    foreach ($DB_TAB as $DB_ROW) {
        ${$DB_ROW['parametre_nom']} = $DB_ROW['parametre_valeur'];
    }
    if (isset($connexion_mode, $connexion_nom) == FALSE) {
        exit_json(FALSE, 'Base de l\'établissement incomplète !');
    }
    exit_json(TRUE, afficher_nom_etablissement($BASE, $structure_denomination) . afficher_formulaire_identification($profil, $connexion_mode, $connexion_nom));
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////
// Traiter une demande d'identification
// ////////////////////////////////////////////////////////////////////////////////////////////////////
function adresse_redirection_apres_authentification()
{
    if (empty($_SESSION['MEMO_GET']) || !isset($_SESSION['MEMO_GET']['page'])) {
        $_SESSION['MEMO_GET']['page'] = 'compte_accueil';
    exit_error('Information manquante', 'Profil incorrect ou non transmis dans l\'adresse.');
}
// Récupération du numéro de base
$BASE = isset($_GET['base']) ? Clean::entier($_GET['base']) : 0;
if ($PROFIL == 'structure' && HEBERGEUR_INSTALLATION == 'multi-structures' && !$BASE) {
    exit_error('Information manquante', 'Numéro de base incorrect ou non transmis dans l\'adresse.');
}
// Récupérer la dénomination de l'établissement
if ($PROFIL == 'structure') {
    if (HEBERGEUR_INSTALLATION == 'multi-structures') {
        $structure_denomination = DB_WEBMESTRE_PUBLIC::DB_recuperer_structure_nom_for_Id($BASE);
        if ($structure_denomination === NULL) {
            exit_error('Établissement manquant', 'Établissement non trouvé dans la base d\'administration !');
        }
    } else {
        $DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres('"webmestre_denomination"');
        if (!empty($DB_TAB)) {
            $structure_denomination = $DB_TAB[0]['parametre_valeur'];
        } else {
            exit_error('Base incomplète', 'Base de l\'établissement incomplète ou non encore installée !');
        }
    }
}
// Protection contre les attaques par force brute des robots (piratage compte ou envoi intempestif de courriels)
list($html_imgs, $captcha_soluce) = captcha();
$_SESSION['FORCEBRUTE'][$PAGE] = array('TIME' => $_SERVER['REQUEST_TIME'], 'DELAI' => 5, 'CAPTCHA' => $captcha_soluce);
$is_etablissement_virtuel = IS_HEBERGEMENT_SESAMATH && ($BASE == ID_DEMO || $BASE >= CONVENTION_ENT_ID_ETABL_MAXI || substr($structure_denomination, 0, 5) == 'Voir ') ? TRUE : FALSE;
?>

<?php 
if ($PROFIL == 'structure' && !$is_etablissement_virtuel) {
Пример #5
0
 /**
  * Enregistrer en session les informations authentifiant un utilisateur (sauf profils webmestre / développeur / partenaire).
  * 
  * @param int     $BASE
  * @param array   $DB_ROW   ligne issue de la table sacoche_user correspondant à l'utilisateur qui se connecte.
  * @return void
  */
 public static function initialiser_utilisateur($BASE,$DB_ROW)
 {
   // Récupérer et Enregistrer en session les données associées à l'établissement (indices du tableau de session en majuscules).
   $DB_TAB_PARAM = DB_STRUCTURE_PUBLIC::DB_lister_parametres();
   $tab_type_entier  = array(
     'SESAMATH_ID',
     'MOIS_BASCULE_ANNEE_SCOLAIRE',
     'DROIT_ELEVE_DEMANDES',
     'CALCUL_VALEUR_RR',
     'CALCUL_VALEUR_R',
     'CALCUL_VALEUR_V',
     'CALCUL_VALEUR_VV',
     'CALCUL_SEUIL_R',
     'CALCUL_SEUIL_V',
     'CALCUL_LIMITE',
     'CAS_SERVEUR_PORT',
     'CAS_SERVEUR_VERIF_CERTIF_SSL',
     'ENVELOPPE_HORIZONTAL_GAUCHE',
     'ENVELOPPE_HORIZONTAL_MILIEU',
     'ENVELOPPE_HORIZONTAL_DROITE',
     'ENVELOPPE_VERTICAL_HAUT',
     'ENVELOPPE_VERTICAL_MILIEU',
     'ENVELOPPE_VERTICAL_BAS',
     'ETABLISSEMENT_IP_VARIABLE',
     'OFFICIEL_ARCHIVE_AJOUT_MESSAGE_COPIE',
     'OFFICIEL_ARCHIVE_RETRAIT_TAMPON_SIGNATURE',
     'OFFICIEL_BULLETIN_ONLY_SOCLE',
     'OFFICIEL_BULLETIN_APPRECIATION_RUBRIQUE_LONGUEUR',
     'OFFICIEL_BULLETIN_APPRECIATION_RUBRIQUE_REPORT',
     'OFFICIEL_BULLETIN_APPRECIATION_GENERALE_LONGUEUR',
     'OFFICIEL_BULLETIN_APPRECIATION_GENERALE_REPORT',
     'OFFICIEL_BULLETIN_ASSIDUITE',
     'OFFICIEL_BULLETIN_BARRE_ACQUISITIONS',
     'OFFICIEL_BULLETIN_ACQUIS_TEXTE_NOMBRE',
     'OFFICIEL_BULLETIN_ACQUIS_TEXTE_CODE',
     'OFFICIEL_BULLETIN_MOYENNE_SCORES',
     'OFFICIEL_BULLETIN_CONVERSION_SUR_20',
     'OFFICIEL_BULLETIN_MOYENNE_CLASSE',
     'OFFICIEL_BULLETIN_MOYENNE_GENERALE',
     'OFFICIEL_BULLETIN_FUSION_NIVEAUX',
     'OFFICIEL_MARGE_GAUCHE',
     'OFFICIEL_MARGE_DROITE',
     'OFFICIEL_MARGE_HAUT',
     'OFFICIEL_MARGE_BAS',
     'OFFICIEL_RELEVE_ONLY_SOCLE',
     'OFFICIEL_RELEVE_APPRECIATION_RUBRIQUE_LONGUEUR',
     'OFFICIEL_RELEVE_APPRECIATION_RUBRIQUE_REPORT',
     'OFFICIEL_RELEVE_APPRECIATION_GENERALE_LONGUEUR',
     'OFFICIEL_RELEVE_APPRECIATION_GENERALE_REPORT',
     'OFFICIEL_RELEVE_ASSIDUITE',
     'OFFICIEL_RELEVE_ETAT_ACQUISITION',
     'OFFICIEL_RELEVE_MOYENNE_SCORES',
     'OFFICIEL_RELEVE_POURCENTAGE_ACQUIS',
     'OFFICIEL_RELEVE_CONVERSION_SUR_20',
     'OFFICIEL_RELEVE_CASES_NB',
     'OFFICIEL_RELEVE_AFF_COEF',
     'OFFICIEL_RELEVE_AFF_SOCLE',
     'OFFICIEL_RELEVE_AFF_DOMAINE',
     'OFFICIEL_RELEVE_AFF_THEME',
     'OFFICIEL_SOCLE_APPRECIATION_RUBRIQUE_LONGUEUR',
     'OFFICIEL_SOCLE_APPRECIATION_RUBRIQUE_REPORT',
     'OFFICIEL_SOCLE_APPRECIATION_GENERALE_LONGUEUR',
     'OFFICIEL_SOCLE_APPRECIATION_GENERALE_REPORT',
     'OFFICIEL_SOCLE_ASSIDUITE',
     'OFFICIEL_SOCLE_ONLY_PRESENCE',
     'OFFICIEL_SOCLE_POURCENTAGE_ACQUIS',
     'OFFICIEL_SOCLE_ETAT_VALIDATION',
     'USER_DALTONISME',
   );
   $tab_type_tableau = array(
     'CSS_BACKGROUND-COLOR',
     'CALCUL_VALEUR',
     'CALCUL_SEUIL',
     'NOTE_IMAGE',
     'NOTE_TEXTE',
     'NOTE_LEGENDE',
     'ACQUIS_TEXTE',
     'ACQUIS_LEGENDE',
     'ETABLISSEMENT',
     'ENVELOPPE',
     'OFFICIEL',
     'CAS_SERVEUR',
   );
   foreach($DB_TAB_PARAM as $DB_ROW_PARAM)
   {
     $parametre_nom = strtoupper($DB_ROW_PARAM['parametre_nom']);
     // Certains paramètres sont de type entier.
     $parametre_valeur = (in_array($parametre_nom,$tab_type_entier)) ? (int) $DB_ROW_PARAM['parametre_valeur'] : $DB_ROW_PARAM['parametre_valeur'] ;
     // Certains paramètres sont à enregistrer sous forme de tableau.
     $find = FALSE;
     foreach($tab_type_tableau as $key1)
     {
       $longueur_key1 = strlen($key1);
       if(substr($parametre_nom,0,$longueur_key1)==$key1)
       {
         $key2 = substr($parametre_nom,$longueur_key1+1);
         $_SESSION[$key1][$key2] = $parametre_valeur ;
         $find = TRUE;
         break;
       }
     }
     // Les autres paramètres sont à enregistrer tels quels.
     if(!$find)
     {
       $_SESSION[$parametre_nom] = $parametre_valeur ;
     }
   }
   // Enregistrer en session le numéro de la base.
   $_SESSION['BASE']                   = $BASE;
   // C'est un utilisateur d'un établissement.
   $_SESSION['USER_ETABLISSEMENT']     = TRUE;
   // Enregistrer en session les données associées au profil de l'utilisateur.
   $_SESSION['USER_PROFIL_SIGLE']      = $DB_ROW['user_profil_sigle'];
   $_SESSION['USER_PROFIL_TYPE']       = $DB_ROW['user_profil_type'];
   $_SESSION['USER_PROFIL_NOM_COURT']  = $DB_ROW['user_profil_nom_court_singulier'];
   $_SESSION['USER_PROFIL_NOM_LONG']   = $DB_ROW['user_profil_nom_long_singulier'];
   $_SESSION['USER_JOIN_GROUPES']      = $DB_ROW['user_profil_join_groupes'];   // Seuls les enseignants sont rattachés à des classes et groupes définis ; les autres le sont à tout l'établissement.
   $_SESSION['USER_JOIN_MATIERES']     = $DB_ROW['user_profil_join_matieres'] ; // Seuls les directeurs sont rattachés à toutes les matières ; les autres le sont à des matières définies.
   $_SESSION['USER_MDP_LONGUEUR_MINI'] = (int) $DB_ROW['user_profil_mdp_longueur_mini'];
   $_SESSION['USER_DUREE_INACTIVITE']  = (int) $DB_ROW['user_profil_duree_inactivite'];
   // Enregistrer en session les données personnelles de l'utilisateur.
   $_SESSION['USER_ID']                = (int) $DB_ROW['user_id'];
   $_SESSION['USER_SWITCH_ID']         = $DB_ROW['user_switch_id'];
   $_SESSION['USER_GENRE']             = $DB_ROW['user_genre'];
   $_SESSION['USER_NOM']               = $DB_ROW['user_nom'];
   $_SESSION['USER_PRENOM']            = $DB_ROW['user_prenom'];
   $_SESSION['USER_NAISSANCE_DATE']    = $DB_ROW['user_naissance_date'];
   $_SESSION['USER_EMAIL']             = $DB_ROW['user_email'];
   $_SESSION['USER_EMAIL_ORIGINE']     = $DB_ROW['user_email_origine'];
   $_SESSION['USER_LOGIN']             = $DB_ROW['user_login'];
   $_SESSION['USER_LANGUE']            = $DB_ROW['user_langue'];
   $_SESSION['USER_DALTONISME']        = $DB_ROW['user_daltonisme'];
   $_SESSION['USER_ID_ENT']            = $DB_ROW['user_id_ent'];
   $_SESSION['USER_ID_GEPI']           = $DB_ROW['user_id_gepi'];
   $_SESSION['USER_PARAM_ACCUEIL']     = $DB_ROW['user_param_accueil'];
   $_SESSION['ELEVE_CLASSE_ID']        = (int) $DB_ROW['eleve_classe_id'];
   $_SESSION['ELEVE_CLASSE_NOM']       = $DB_ROW['groupe_nom'];
   $_SESSION['ELEVE_LANGUE']           = (int) $DB_ROW['eleve_langue'];
   $_SESSION['DELAI_CONNEXION']        = (int) $DB_ROW['delai_connexion_secondes']; // Vaut (int)NULL = 0 à la 1e connexion, mais dans ce cas $_SESSION['FIRST_CONNEXION'] est testé avant.
   $_SESSION['FIRST_CONNEXION']        = ($DB_ROW['user_connexion_date']===NULL) ? TRUE : FALSE ;
   if( ($DB_ROW['user_connexion_date']===NULL) && ($DB_ROW['user_profil_type']!='administrateur') )
   {
     $_SESSION['STOP_CNIL'] = TRUE;
   }
   // Récupérer et Enregistrer en session les données des élèves associées à un responsable légal.
   if($_SESSION['USER_PROFIL_TYPE']=='parent')
   {
     $_SESSION['OPT_PARENT_ENFANTS']   = DB_STRUCTURE_COMMUN::DB_OPT_enfants_parent($_SESSION['USER_ID']);
     $_SESSION['OPT_PARENT_CLASSES']   = DB_STRUCTURE_COMMUN::DB_OPT_classes_parent($_SESSION['USER_ID']);
     $_SESSION['NB_ENFANTS'] = (is_array($_SESSION['OPT_PARENT_ENFANTS'])) ? count($_SESSION['OPT_PARENT_ENFANTS']) : 0 ;
     if( ($_SESSION['NB_ENFANTS']==1) && (is_array($_SESSION['OPT_PARENT_CLASSES'])) )
     {
       $_SESSION['ELEVE_CLASSE_ID']    = (int) $_SESSION['OPT_PARENT_CLASSES'][0]['valeur'];
       $_SESSION['ELEVE_CLASSE_NOM']   = $_SESSION['OPT_PARENT_CLASSES'][0]['texte'];
     }
   }
   // Récupérer et Enregistrer en session les données associées aux profils utilisateurs d'un établissement, activés ou non.
   if($_SESSION['USER_PROFIL_TYPE']=='administrateur')
   {
     $_SESSION['TAB_PROFILS_ADMIN'] = array( 'TYPE'=>array() , 'LOGIN_MODELE'=>array() , 'MDP_LONGUEUR_MINI'=>array() , 'DUREE_INACTIVITE'=>array() );
     $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_profils_parametres( 'user_profil_type,user_profil_login_modele,user_profil_mdp_longueur_mini,user_profil_mdp_date_naissance,user_profil_duree_inactivite' /*listing_champs*/ , FALSE /*only_actif*/ );
     foreach($DB_TAB as $DB_ROW)
     {
       $_SESSION['TAB_PROFILS_ADMIN']['TYPE']              [$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_type'];
       $_SESSION['TAB_PROFILS_ADMIN']['LOGIN_MODELE']      [$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_login_modele'];
       $_SESSION['TAB_PROFILS_ADMIN']['MDP_LONGUEUR_MINI'] [$DB_ROW['user_profil_sigle']] = (int) $DB_ROW['user_profil_mdp_longueur_mini'];
       $_SESSION['TAB_PROFILS_ADMIN']['MDP_DATE_NAISSANCE'][$DB_ROW['user_profil_sigle']] = (int) $DB_ROW['user_profil_mdp_date_naissance'];
       $_SESSION['TAB_PROFILS_ADMIN']['DUREE_INACTIVITE']  [$DB_ROW['user_profil_sigle']] = (int) $DB_ROW['user_profil_duree_inactivite'];
     }
   }
   // Récupérer et Enregistrer en session les noms des profils utilisateurs d'un établissement (activés) pour afficher les droits de certaines pages.
   else
   {
     $_SESSION['TAB_PROFILS_DROIT'] = array( 'TYPE'=>array() , 'JOIN_GROUPES'=>array() , 'JOIN_MATIERES'=>array() , 'NOM_LONG_PLURIEL'=>array() );
     $DB_TAB = DB_STRUCTURE_ADMINISTRATEUR::DB_lister_profils_parametres( 'user_profil_type,user_profil_join_groupes,user_profil_join_matieres,user_profil_nom_long_pluriel' /*listing_champs*/ , TRUE /*only_actif*/ );
     foreach($DB_TAB as $DB_ROW)
     {
       $_SESSION['TAB_PROFILS_DROIT']['TYPE']            [$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_type'];
       $_SESSION['TAB_PROFILS_DROIT']['JOIN_GROUPES']    [$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_join_groupes'];
       $_SESSION['TAB_PROFILS_DROIT']['JOIN_MATIERES']   [$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_join_matieres'];
       $_SESSION['TAB_PROFILS_DROIT']['NOM_LONG_PLURIEL'][$DB_ROW['user_profil_sigle']] = $DB_ROW['user_profil_nom_long_pluriel'];
     }
   }
   // Fabriquer $_SESSION['IMG_...'] et $_SESSION['BACKGROUND_...'] en fonction de $_SESSION['USER_DALTONISME'] à partir de $_SESSION['NOTE_IMAGE_...'] et $_SESSION['CSS_BACKGROUND-COLOR']['...']
   // remarque : $_SESSION['USER_DALTONISME'] ne peut être utilisé que pour les profils élèves/parents/profs/directeurs, pas les admins ni le webmestre
   SessionUser::adapter_daltonisme() ;
   // Enregistrer en session le CSS personnalisé
   SessionUser::actualiser_style();
   // Enregistrer en session le menu personnalisé ; détection de la langue remis ici pour le cas de bascule entre comptes.
   Lang::setlocale( LC_MESSAGES, Lang::get_locale_used() );
   SessionUser::memoriser_menu();
   // Juste pour davantage de lisibilité si besoin de debug...
   ksort($_SESSION);
   // Enfin, on profite de cet événement pour faire du ménage ou simuler une tâche planifiée
   SessionUser::cron();
 }