From 19632629c94551757dc845a515938e0e60a7148e Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 23 Nov 2015 23:37:23 +0100 Subject: [PATCH] =?UTF-8?q?Etape=201=20:=20d=C3=A9ploiement=20de=20l'ajout?= =?UTF-8?q?=20d'un=20module=20en=20tant=20que=20correcteur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manager/database.php | 52 +++++++++++++++++++++++ manager/repo/user.php | 99 +++++++++++++++++++++++++++++++++++++++++++ manager/user.php | 66 +++++++++++++++++++++++++++++ page/settings.php | 4 +- test.php | 18 +++++++- 5 files changed, 235 insertions(+), 4 deletions(-) diff --git a/manager/database.php b/manager/database.php index 8935548..01b1966 100755 --- a/manager/database.php +++ b/manager/database.php @@ -265,6 +265,58 @@ class DataBase{ return $listeAnnees; } + + /* modifie le caractère "admin" d'un utilisateur + * + * @utilisateur l'UID de l'utilisateur en question + * @admin VRAI si admin, FAUX sinon + * + * + * @return updated VRAI si la modification a été faite + * + */ + public function setAdmin($utilisateur, $admin){ + // on vérifie l'existence de l'utilisateur + if( !($utilisateurUID=userRepo::UID($utilisateur)) ) return 'unknown_user'; + + return userRepo::setAdmin($utilisateurUID, $admin); + } + + + /* modifie le caractère "référent" d'un utilisateur + * + * @utilisateur l'UID de l'utilisateur en question + * @master VRAI si master, FAUX sinon + * + * + * @return updated VRAI si la modification a été faite + * + */ + public function setMaster($utilisateur, $master){ + // on vérifie l'existence de l'utilisateur + if( !($utilisateurUID=userRepo::UID($utilisateur)) ) return 'unknown_user'; + + return userRepo::setMaster($utilisateurUID, $master); + } + + + /* ajoute un module qu'un utilisateur peut corriger + * + * @utilisateur l'UID de l'utilisateur en question + * @module l'UID du module à ajouter + * + * + * @return added VRAI si module ajouté, sinon FALSE + * + */ + public function correcteurAjouterModule($utilisateur, $module){ + // on vérifie l'existence de l'utilisateur + if( !($utilisateurUID=userRepo::UID($utilisateur)) ) return 'unknown_user'; + + return userRepo::addModule($utilisateurUID, $module); + + } + /**********************************************************/ /* _____ _____ ____ _ _ _____ ______ _____ */ /* / ____| __ \ / __ \| | | | __ \| ____|/ ____| */ diff --git a/manager/repo/user.php b/manager/repo/user.php index 7a95d92..4ea19a3 100755 --- a/manager/repo/user.php +++ b/manager/repo/user.php @@ -119,7 +119,106 @@ class userRepo extends DBAccess{ + /* modifie le caractère "admin" d'un utilisateur + * + * @utilisateur l'UID de l'utilisateur en question + * @admin VRAI si admin, FAUX sinon + * + * + * @return updated VRAI si la modification a été faite + * + */ + public static function setAdmin($utilisateur, $admin){ + /* [1] On récupère les droits actuels de l'utilisateur + =========================================================*/ + if( !($utilisateurInfo=userRepo::info($utilisateur)) ) return false; + $droitsArray = explode(',', $utilisateurInfo['droits'] ); + + /* [2] On modifie les droits en fonction des paramètres + =========================================================*/ + if( $admin && !in_array('admin', $droitsArray) ) // si on doit ajouter le droit et qu'il n'y est pas encore + array_push($droitsArray, 'admin'); // => on ajoute 'admin' + + if( !$admin && in_array('admin', $droitsArray) ) // si on doit enlever le droit et qu'il y est + array_splice($droitsArray, array_search('admin', $droitsArray), 1 ); // => on enleve 'admin' + + $droitsString = implode(',', $droitsArray); + + + /* [3] On modifie les droits dans la BDD + =========================================================*/ + $modifierAdmin = DataBase::getPDO()->prepare("UPDATE utilisateur SET droits = :droits WHERE identifiant = :identifiant"); + $modifierAdmin->execute(array( ':droits' => $droitsString, ':identifiant' => $utilisateur )); + + + /* [4] On vérifie que les changements on bien pris effet + =========================================================*/ + if( !($utilisateurInfoVerif=userRepo::info($utilisateur)) ) return false; + + return $utilisateurInfoVerif['droits'] == $droitsString; // si les droits de la BDD sont les mêmes que ceux calculés, c'est que c'est ok + } + + + + /* modifie le caractère "référent" d'un utilisateur + * + * @utilisateur l'UID de l'utilisateur en question + * @master VRAI si master, FAUX sinon + * + * + * @return updated VRAI si la modification a été faite + * + */ + public static function setMaster($utilisateur, $master){ + /* [1] On récupère les droits actuels de l'utilisateur + =========================================================*/ + if( !($utilisateurInfo=userRepo::info($utilisateur)) ) return false; + + $droitsArray = explode(',', $utilisateurInfo['droits'] ); + + /* [2] On modifie les droits en fonction des paramètres + =========================================================*/ + if( $master && !in_array('master', $droitsArray) ) // si on doit ajouter le droit et qu'il n'y est pas encore + array_push($droitsArray, 'master'); // => on ajoute 'master' + + if( !$master && in_array('master', $droitsArray) ) // si on doit enlever le droit et qu'il y est + array_splice($droitsArray, array_search('master', $droitsArray), 1 ); // => on enleve 'master' + + $droitsString = implode(',', $droitsArray); + + + /* [3] On modifie les droits dans la BDD + =========================================================*/ + $modifierAdmin = DataBase::getPDO()->prepare("UPDATE utilisateur SET droits = :droits WHERE identifiant = :identifiant"); + $modifierAdmin->execute(array( ':droits' => $droitsString, ':identifiant' => $utilisateur )); + + + /* [4] On vérifie que les changements on bien pris effet + =========================================================*/ + if( !($utilisateurInfoVerif=userRepo::info($utilisateur)) ) return false; + + return $utilisateurInfoVerif['droits'] == $droitsString; // si les droits de la BDD sont les mêmes que ceux calculés, c'est que c'est ok + } + + + + + + /* ajoute un module qu'un utilisateur peut corriger + * + * @utilisateur l'UID de l'utilisateur en question + * @module l'UID du module à ajouter + * + * + * @return added VRAI si module ajouté, sinon FALSE + * + */ + public function addModule($utilisateur, $module){ + /* [1] On vérifie s'il n'enseigne pas déjà pour ce module + ==============================================================*/ + + } diff --git a/manager/user.php b/manager/user.php index 3ccd3ad..07136c9 100755 --- a/manager/user.php +++ b/manager/user.php @@ -106,6 +106,72 @@ require_once __ROOT__.'/manager/database.php'; break; + /************************************/ + /* modifie le rôle d'un utilisateur */ + /************************************/ + /* + * identifiant l'UID de l'utilisateur à modifier + * + * admin VRAI si admin, FAUX sinon + * admin Si NULL, on ne modifie pas ce champ + * + * master VRAI si référent, FAUX sinon + * master Si NULL, on ne modifie pas ce champ + * + * addModule l'UID du module à lui ajouter en tant que correcteur + * addModule Si NULL, on n'ajoute aucun module + * + * delModule l'UID du module à enlever en tant que correcteur + * delModule 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; + + + /***********/ /* DEFAULT */ diff --git a/page/settings.php b/page/settings.php index fb7fcfb..d36148f 100755 --- a/page/settings.php +++ b/page/settings.php @@ -48,9 +48,9 @@ if( permission('admin') ){ // si l'utilisateur est admin if( in_array('admin', $user['role']) ) - echo " admin"; + echo " administrateur"; else - echo " admin"; + echo " administrateur"; // si l'utilisateur est référent if( in_array('master', $user['role']) ) diff --git a/test.php b/test.php index e9a00a7..7b52452 100755 --- a/test.php +++ b/test.php @@ -44,9 +44,23 @@ require_once __ROOT__.'/manager/security.php'; -require_once __ROOT__.'/manager/database.php'; - debug(); +require_once __ROOT__.'/manager/user.php'; + +$request = new stdClass(); $answer = new stdClass(); +$request->level_1 = 'updateRole'; +$request->identifiant = 'admin'; +$request->admin = null; +$request->master = null; +$request->addModule = null; +$request->delModule = null; + +user_switch_level_1($request, $answer); + +var_dump( $answer ); + + + // $_SESSION['semestre_pair'] = !$_SESSION['semestre_pair']; // var_dump( $_SESSION['semestre_pair'] );