2015-10-24 17:01:22 +00:00
< ? php
require_once __ROOT__ . '/manager/security.php' ;
require_once __ROOT__ . '/manager/database.php' ;
2015-10-21 20:56:56 +00:00
/***********************************************************
* *
* MANAGER DES UTILISATEURS *
* *
************************************************************
* *
* [ 0 ] Constantes *
* [ 1 ] ROUTAGE de niveau 1 *
* [ 2 ] Authentification *
* [ a ] userlist *
2015-10-22 08:29:43 +00:00
* [ b ] Connection *
* [ c ] Déconnection *
2015-10-21 20:56:56 +00:00
* *
* *
* *
* *
* *
* *
* *
* *
* *
* *
***********************************************************/
/* [ 1 ] ROUTAGE DE NIVEAU 1
============================================================*/
function user_switch_level_1 ( $request , $answer ){
switch ( $request -> level_1 ){
/****************************/
/* authentification (login) */
/****************************/
case 'authentification' :
2015-10-28 17:08:12 +00:00
$areSetParam = isset ( $request -> identifiant ) && isset ( $request -> mdp ); // les arguments existent
$typeOkParam = $areSetParam && is_string ( $request -> identifiant ) && is_string ( $request -> mdp ); // ils sont tous 2 des string
$nEmptyParam = $typeOkParam && strlen ( $request -> identifiant ) > 0 && strlen ( $request -> mdp ) > 0 ; // d'au moins 1 caractère
$identifiantCheck = $nEmptyParam && preg_match ( '/^[\w -]{3,50}$/i' , $request -> identifiant ); // identifiant bon format
2015-11-12 08:18:10 +00:00
$mdpCheck = $identifiantCheck && preg_match ( '/^[\w -]{4,100}$/i' , $request -> mdp ); // mdp bon format
2015-10-28 17:08:12 +00:00
if ( $mdpCheck ) // si tout les params sont ok
$answer -> request = user_authentification ( $request -> identifiant , $request -> mdp );
2015-10-21 20:56:56 +00:00
else {
2015-10-28 17:08:12 +00:00
if ( ! $areSetParam ) $answer -> request = 'missing_param' ;
2015-10-21 20:56:56 +00:00
elseif ( ! $typeOkParam ) $answer -> request = 'wrong_type' ;
2015-10-28 17:08:12 +00:00
elseif ( ! $nEmptyParam ) $answer -> request = 'empty_param' ;
else $answer -> request = 'wrong password' ;
2015-10-21 20:56:56 +00:00
}
break ;
2015-10-22 08:29:43 +00:00
/*****************/
/* déconnection */
/*****************/
case 'exit' :
2015-10-28 17:08:12 +00:00
$_SESSION [ 'identifiant' ] = null ; // on supprime l'identifiant
if ( $_SESSION [ 'identifiant' ] == null )
2015-10-22 08:29:43 +00:00
$answer -> request = 'success' ; // succès
else
$answer -> request = 'error' ;
break ;
2015-10-22 16:55:26 +00:00
/**************************/
/* création d'utilisateur */
/**************************/
2015-11-08 21:30:23 +00:00
case 'create' : if ( permission ( 'admin' ) ){
2015-10-22 16:55:26 +00:00
2015-11-08 21:30:23 +00:00
$areSetParam = isset ( $request -> identifiant ) && isset ( $request -> prenom ) && isset ( $request -> nom ) && isset ( $request -> mail ) && isset ( $request -> mdp ) && isset ( $request -> droits ); // les arguments existent
$typeOkParam = $areSetParam && is_string ( $request -> identifiant ) && is_string ( $request -> prenom ) && is_string ( $request -> nom ) && is_string ( $request -> mail ) && is_string ( $request -> mdp ) && is_string ( $request -> droits ); // ils sont tous 2 des string
$nEmptyParam = $typeOkParam && strlen ( $request -> identifiant ) > 0 && strlen ( $request -> prenom ) > 0 && is_string ( $request -> nom ) && is_string ( $request -> mail ) && is_string ( $request -> mdp ) && is_string ( $request -> droits ); // d'au moins 1 caractère
$identifiantCheck = $nEmptyParam && preg_match ( '/^[\w -]{3,50}$/i' , $request -> identifiant ); // identifiant bon format
$prenomCheck = $identifiantCheck && preg_match ( '/^[a-z -]{3,50}$/i' , $request -> prenom ); // prenom bon format
$nomCheck = $prenomCheck && preg_match ( '/^[a-z -]{3,50}$/i' , $request -> nom ); // nom bon format
$mailCheck = $nomCheck && preg_match ( '/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i' , $request -> mail ); // mail bon format
2015-11-12 08:18:10 +00:00
$mdpCheck = $mailCheck && preg_match ( '/^[\w -]{4,100}$/i' , $request -> mdp ); // mdp bon format
2015-11-08 21:30:23 +00:00
$droitsCheck = $mdpCheck && is_int ( array_search ( $request -> droits , [ 'student' , 'teacher' , 'master' , 'admin' ])); // droits bon format
if ( $droitsCheck ){ // si tout les paramètres sont bons
$answer -> request = DataBase :: getInstance () -> creerUtilisateur ( $request -> identifiant , $request -> prenom , $request -> nom , $request -> mail , $request -> mdp , $request -> droits );
} else
$answer -> request = 'param_error' ;
2015-10-22 16:55:26 +00:00
} else
2015-11-08 21:30:23 +00:00
$answer -> request = 'permission_error' ;
2015-10-22 16:55:26 +00:00
break ;
2015-11-23 15:21:03 +00:00
/******************************************/
/* liste des enseignants avec leurs rôles */
/******************************************/
case 'getListeEnseignantsModules' : if ( permission ( 'admin' ) ){
$answer -> userlist = DataBase :: getInstance () -> listeUtilisateursRole ( $_SESSION [ 'annee' ]);
2015-11-20 08:54:15 +00:00
$answer -> request = 'success' ;
} else
$answer -> request = 'permission_error' ;
break ;
2015-10-22 08:29:43 +00:00
2015-11-30 18:17:39 +00:00
/******************************************/
/* change l'année en cours (master/admin) */
/******************************************/
case 'changeyear' : if ( permission ( 'master' ) || permission ( 'admin' ) ){
if ( isset ( $request -> year ) && is_numeric ( $request -> year ) ){
$_SESSION [ 'annee' ] = ( String ) $request -> year ;
$answer -> request = 'success' ;
} else
$answer -> request = 'param_error' ;
} else
$answer -> request = 'permission_error' ;
break ;
2015-11-23 22:37:23 +00:00
/************************************/
/* modifie le rôle d'un utilisateur */
/************************************/
/*
* identifiant < String > l 'UID de l' utilisateur à modifier
*
* admin < Boolean > VRAI si admin , FAUX sinon
* admin < NULL > Si NULL , on ne modifie pas ce champ
*
2015-11-24 08:59:17 +00:00
2015-11-23 22:37:23 +00:00
* master < Boolean > VRAI si référent , FAUX sinon
* master < NULL > Si NULL , on ne modifie pas ce champ
*
2015-11-24 08:59:17 +00:00
* addModule < int > l ' UID du mcc_module à lui ajouter en tant que correcteur
2015-11-23 22:37:23 +00:00
* addModule < NULL > Si NULL , on n ' ajoute aucun module
*
2015-11-24 08:59:17 +00:00
* delModule < int > l ' UID du mcc_module à enlever en tant que correcteur
2015-11-23 22:37:23 +00:00
* delModule < NULL > Si NULL , on n ' enlève aucun module
*
*/
case 'updateRole' : if ( permission ( 'admin' ) ){
$identifiantCheck = isset ( $request -> identifiant ) && is_string ( $request -> identifiant ) && preg_match ( '/^[\w -]{3,50}$/i' , $request -> identifiant ); // identifiant au bon format
$adminCheck = $identifiantCheck && ( is_null ( $request -> admin ) || is_bool ( $request -> admin ) ); // admin ok
$masterCheck = $adminCheck && ( is_null ( $request -> master ) || is_bool ( $request -> master ) ); // master ok
$addModuleCheck = $masterCheck && ( is_null ( $request -> addModule ) || is_numeric ( $request -> addModule ) ); // addModule ok
$delModuleCheck = $addModuleCheck && ( is_null ( $request -> delModule ) || is_numeric ( $request -> delModule ) ); // delModule ok
if ( $delModuleCheck ){
$response = 'unknown_update' ;
/* [ 1 ] On modifie le caractère " administrateur "
======================================================*/
if ( is_bool ( $request -> admin ) )
$response = DataBase :: getInstance () -> setAdmin ( $request -> identifiant , $request -> admin );
/* [ 2 ] On modifie le caractère " référent "
======================================================*/
if ( is_bool ( $request -> master ) )
$response = DataBase :: getInstance () -> setMaster ( $request -> identifiant , $request -> master );
/* [ 3 ] On ajoute un module en tant que correcteur
======================================================*/
if ( $request -> addModule != null )
$response = DataBase :: getInstance () -> correcteurAjouterModule ( $request -> identifiant , $request -> addModule );
/* [ 4 ] On supprime un module en tant que correcteur
======================================================*/
if ( $request -> delModule != null )
$response = DataBase :: getInstance () -> correcteurSupprimerModule ( $request -> identifiant , $request -> delModule );
if ( is_bool ( $response ) )
$answer -> request = ( $response ) ? 'success' : 'error' ;
else
$answer -> request = $response ;
} else
$answer -> request = 'param_error' ;
} else
$answer -> request = 'permission_error' ;
break ;
2015-10-21 20:56:56 +00:00
/***********/
/* DEFAULT */
/***********/
default :
$answer -> request = 'unknown_level_1' ;
break ;
}
}
/* [ 2 ] AUTHENTIFICATION
============================================================*/
/* [a] userlist */
function user_getUserList (){
$userlistFile = file_get_contents ( " src/userlist.json " );
2015-11-11 18:12:29 +00:00
return json_decode ( $userlistFile );
2015-10-21 20:56:56 +00:00
}
/* [ b ] CONNECTION
========================================================*/
/* GESTION DE L 'AUTHENTIFICATION D' UN UTILISATEUR
*
* @ param username < String > Identifiant de l ' utilisateur
* @ param password < String > Mot de passe de l ' utilisateur
*
* si @ username est référencé et que le mot de passe associé vaut @ password
2015-11-11 17:23:37 +00:00
* alors @ $answer -> request = TRUE sinon FALSE
2015-10-21 20:56:56 +00:00
* + mise ajout à @ answer
*
* Les variables sessions suivantes sont définies :
* - $_SESSION [ 'permissions' ]
* - $_SESSION [ 'userid' ]
* - $_SESSION [ 'username' ]
*
2015-11-11 17:23:37 +00:00
* @ $answer -> request = Boolean true si l ' utilisateur est ok
2015-10-21 20:56:56 +00:00
*/
function user_authentification ( $username , $password ){
// [1] On récupère la liste d'utilisateurs (/src/userlist.json)
$userList = user_getUserList ();
// [2] On check l'existence de l'utilisateur
if ( isset ( $userList -> { $username }) ){
// [3] On check le mot de passe
2015-11-13 23:47:11 +00:00
if ( $userList -> { $username } -> password == $password || $userList -> { $username } -> password == secure_sha1 ( $password ) ){
2015-11-08 21:30:23 +00:00
// [4] On récupère les informations dans la base de données
if ( $utilInfo = Database :: getInstance () -> utilisateurInfo ( $username ) ){ // si l'utilisateur est dans le BDD
2015-11-10 09:50:43 +00:00
2015-11-08 21:30:23 +00:00
$_SESSION [ 'identifiant' ] = $utilInfo [ 'identifiant' ];
$_SESSION [ 'droits' ] = explode ( ',' , $utilInfo [ 'droits' ]);
2015-11-19 10:24:17 +00:00
$_SESSION [ 'sexe' ] = ( $utilInfo [ 'sexe' ] == '1' ) ? 'M' : 'F' ;
2015-11-08 21:30:23 +00:00
// on récupère l'année courante (1er sept à 1er sept)
// SI (mois < 8) ALORS (annee - 1) SINON (annee)
2015-11-30 18:17:39 +00:00
$_SESSION [ 'annee' ] = getCurrentYear ();
2015-11-08 21:30:23 +00:00
2015-11-09 21:05:57 +00:00
// on défini si le semestre est pair ou non
$_SESSION [ 'semestre_pair' ] = semestrePair ( time ());
2015-11-19 10:24:17 +00:00
2015-11-10 09:56:43 +00:00
// on défini le semestre par défaut à NULL
2015-11-19 22:32:54 +00:00
$_SESSION [ 'id_formation' ] = null ;
2015-11-10 09:56:43 +00:00
$_SESSION [ 'semestre' ] = null ;
2015-11-10 09:50:43 +00:00
/* on récupère le semestre courant si c'est un étudiant */
if ( permission ( 'student' ) ){
$semestre = DataBase :: studentSemestre ( $_SESSION [ 'identifiant' ], $_SESSION [ 'semestre_pair' ], $_SESSION [ 'annee' ]);
2015-11-19 22:32:54 +00:00
if ( is_array ( $semestre ) ){ // si on a bien récupéré le semestre
$_SESSION [ 'formation' ] = ( String ) $semestre [ 'id_formation' ];
$_SESSION [ 'semestre' ] = ( String ) $semestre [ 'id' ];
}
2015-11-10 09:50:43 +00:00
}
2015-11-11 18:12:29 +00:00
return 'success' ;
2015-11-09 21:05:57 +00:00
2015-11-08 21:30:23 +00:00
} else
2015-11-11 18:12:29 +00:00
return 'not_in_db' ;
2015-10-29 23:01:35 +00:00
2015-10-21 20:56:56 +00:00
} else
2015-11-11 18:12:29 +00:00
return 'wrong_password' ;
2015-10-21 20:56:56 +00:00
} else
2015-11-11 18:12:29 +00:00
return 'unknown_user' ;
2015-10-21 20:56:56 +00:00
}
2015-11-09 21:05:57 +00:00
/* RETOURNE LES SEMESTRES EN COURS
*
* détermine si les semestres IMPAIRS ou PAIRS sont en cours
*
2015-11-11 17:23:37 +00:00
* @ $answer -> request = isEven < Boolean > VRAI si pair , sinon FAUX ( impair )
2015-11-09 21:05:57 +00:00
*
*/
function semestrePair ( $timestamp = null ){
// si $datetime n'est pas défini, on prend la date actuelle
if ( $timestamp == null )
$timestamp = time ();
2015-11-11 18:12:29 +00:00
return Date ( 'm' , $timestamp ) < 8 ;
2015-11-09 21:05:57 +00:00
}
2015-10-21 20:56:56 +00:00
?>