/** * 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(); }