コード例 #1
0
ファイル: class.SessionUser.php プロジェクト: rhertzog/lcs
 /**
  * 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();
 }