From 5e6861d9ad3650cc6000659d37f6eea53204af28 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 9 May 2016 15:29:56 +0200 Subject: [PATCH] =?UTF-8?q?Gestion=20compl=C3=A8te=20niveau=20=20et=20=20d?= =?UTF-8?q?u=20formulaire=20t=C3=A9l=C3=A9phonique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/repositories.json | 4 +- manager/module/input.php | 3 +- manager/repo/category.php | 62 ++++++++++++++++++++++++ manager/repo/relation.php | 60 +++++++++++++++++++++++- manager/repo/subject.php | 99 +++++---------------------------------- 5 files changed, 135 insertions(+), 93 deletions(-) create mode 100644 manager/repo/category.php diff --git a/config/repositories.json b/config/repositories.json index 46abb77..13239c6 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -27,9 +27,9 @@ "category": [ "getAll", + "getById", "getByIntitule", - "create", - "remove" + "getOrCreate" ], "Personnes": [ diff --git a/manager/module/input.php b/manager/module/input.php index 39ce6e5..b3cab40 100644 --- a/manager/module/input.php +++ b/manager/module/input.php @@ -129,12 +129,11 @@ // Pour chaque relation avec le contact actuel (s'il y en a) if( isset($matrice[$A]) && is_array($matrice[$A]) ){ foreach($matrice[$A] as $B){ - $relation_request = new Repo('subject/link', array( $A, $B, null )); + $relation_request = new Repo('subject/link', array( $closest_id[$A], $closest_id[$B], '' )); $relation_response = $relation_request->answer(); // Si erreur de création de relation - return array( 'ModuleError' => $relation_response ); if( $relation_response === false ) return array( 'ModuleError' => ManagerError::ModuleError ); diff --git a/manager/repo/category.php b/manager/repo/category.php new file mode 100644 index 0000000..3a21c2f --- /dev/null +++ b/manager/repo/category.php @@ -0,0 +1,62 @@ + Nom de la catégorie + * + * @return id Retourne l'id de la catégorie crée, FALSE si erreur + * + */ + public static function getOrCreate($intitule){ + /* [0] Vérification des INPUT + =========================================================*/ + // Si erreur de type de paramètre, on retourne FALSE + if( !Database::check('varchar(0,40)', $intitule) ) + return false; + + /* [1] Vérification qu'aucune n'a cet intitulé + =========================================================*/ + $existing = self::getByIntitule($intitule); + + /* (1) Si existe déja avec cet intitulé, on récupère l'id */ + if( is_array($existing) && count($existing) > 0 ) + return $existing[0]['idCategorie']; + + + /* [2] Création si l'intitulé n'est pas déja utilisé + =========================================================*/ + $create_r = Database::getPDO()->prepare("INSERT INTO categories(idCategorie, intitule) + VALUES(DEFAULT, :intitule)"); + $create_r_status = $create_r->execute( array( ':intitule' => $intitule ) ); + + // Si erreur de requête + if( $create_r_status === false ) + return false; + + + /* [3] On vérifie et renvoie l'id + =========================================================*/ + $created = self::getByIntitule($intitule); + + /* (1) Si existe déja avec cet intitulé, on récupère l'id */ + if( is_array($created) && count($created) > 0 ) + return $created[0]['idCategorie']; + + // Sinon, c'est qu'il y a une erreur + return false; + } + + + } + + +?> diff --git a/manager/repo/relation.php b/manager/repo/relation.php index 2453849..1abd3f2 100644 --- a/manager/repo/relation.php +++ b/manager/repo/relation.php @@ -9,13 +9,69 @@ protected static function table_name(){ static $table_name = 'relations'; return $table_name; } - public static function create(){ + /* CREATION D'UNE RELATION ENTRE @A ET @B DE TYPE @category + * + * @A UID du sujet A + * @B UID du sujet B + * @category UID de la categorie en question + * + * @return status On retourne TRUE si tout s'est bien passé, sinon FALSE si erreur + * + */ + public static function create($A, $B, $category){ + /* [0] Vérification des INPUT + =========================================================*/ + $checkInput = Database::check('id', $A); + $checkInput = $checkInput && Database::check('id', $B); + $checkInput = $checkInput && Database::check('id', $category); + // Si erreur de type de paramètre, on retourne FALSE + if( !$checkInput ) + return false; + + + + /* [1] On vérifie que la relation n'existe pas déja + =========================================================*/ + $exists = self::getById($A, $B, $category); + + // Si la relation existe, on retourne TRUE + if( is_array($exists) && count($exists) > 0 ) + return true; + + + /* [2] Création de la relation + =========================================================*/ + $create_relation = Database::getPDO()->prepare("INSERT INTO relations(idPersonneA, idPersonneB, idCategorie) + VALUES(:A, :B, :category)"); + $create_rel_status = $create_relation->execute( array( + ':A' => $A, + ':B' => $B, + ':category' => $category + )); + + + // Si erreur de requête -> FALSE + if( $create_rel_status === false ) + return false; + + + /* [3] On vérifie que la relation est crée + =========================================================*/ + $get_relation = self::getById($A, $B, $category); + + // Si la relation n'existe pas, on renvoie une erreur + if( !is_array($get_relation) || is_array($get_relation) && count($get_relation) == 0 ) + return false; + + + // Si tout s'est bien passé, on retourne TRUE + return true; } public static function remove(){ - + } } diff --git a/manager/repo/subject.php b/manager/repo/subject.php index 4b67936..02f2693 100644 --- a/manager/repo/subject.php +++ b/manager/repo/subject.php @@ -3,6 +3,7 @@ namespace manager\repo; use \manager\Database; use \manager\sessionManager; + use \manager\Repo; class subject extends parentRepo{ @@ -192,105 +193,29 @@ =========================================================*/ $checkInput = Database::check('id', $A); $checkInput = $checkInput && Database::check('id', $B); - $checkInput = $checkInput && ( Database::check('varchar(0,40)', $category) || is_null($category) ); + $checkInput = $checkInput && Database::check('varchar(0,40)', $category); // Si erreur de type de paramètre, on retourne FALSE if( !$checkInput ) return false; - $nullCat = is_null($category); - - /* [1] On vérifie l'existence de la catégorie + /* [1] On récupère ou crée la catégorie =========================================================*/ - $category_exists_req = Database::getPDO()->prepare("SELECT idCategorie as id - FROM categories - WHERE intitule ". - ( $nullCat ? "is NULL" : "= :category" ) - ); - $cat_ex_status = $category_exists_req->execute( ($nullCat) ? null : array( ':category' => $category ) ); + $category_id_req = new Repo('category/getOrCreate', array($category)); + $category_id = $category_id_req->answer(); - // Si erreur de requête -> FALSE - if( $cat_ex_status === false ) - return false; - - // On récupère l'id de la catégorie, sinon NULL - $category_id = is_array($category_exists_req->fetch()) ? $category_exists_req->fetch()['id'] : null; - - - /* [2] On crée la catégorie si elle n'existe pas - =========================================================*/ - if( $category_id === null ){ - - $create_category_req = Database::getPDO()->prepare("INSERT INTO categories(idCategorie, intitule) - VALUES(DEFAULT, ". - ( $nullCat ? "NULL" : ":category" ) - .")"); - $create_cat_status = $create_category_req->execute( ($nullCat) ? null : array( ':category' => $category ) ); - - // Si erreur de requête -> FALSE - if( $create_cat_status === false ) - return false; - - // On récupère l'id de la catégorie - $get_category_id = Database::getPDO()->prepare("SELECT idCategorie as id - FROM categories - WHERE intitule ". - ( $nullCat ? "is NULL" : "= :category" ) - ); - $get_cat_status = $get_category_id->execute( ($nullCat) ? null : array( ':category' => $category ) ); - - // Si erreur de requête -> FALSE - if( $get_cat_status === false ) - return false; - - // Si on a toujours rien, on retourne FALSE - if( !is_array($get_category_id->fetch()) ) - return false; - - // On récupère l'id de la catégorie - $category_id = $get_category_id->fetch()['id']; - - } - - - /* [3] On crée la relation - =========================================================*/ - $create_relation = Database::getPDO()->prepare("INSERT INTO relations(idPersonneA, idPersonneB, idCategorie) - VALUES(:A, :B, :category)"); - $create_rel_status = $create_relation->execute( array( - ':A' => $A, - ':B' => $B, - ':category' => $category_id - )); - - return $B; - - // Si erreur de requête -> FALSE - if( $create_rel_status === false ) + // Si erreur -> FALSE + if( $category_id === false ) return false; - /* [4] On vérifie que la relation est crée + /* [2] On crée la relation =========================================================*/ - $check_relation = Database::getPDO()->prepare("SELECT idPersonneA, idPersonneB, idCategorie - FROM relations - WHERE idPersonneA = :A - AND idPersonneB = :B - AND idCategorie = :category"); + $relation_req = new Repo('relation/create', array($A, $B, $category_id)); + $relation = $relation_req->answer(); - $check_rel_status = $check_relation->execute( array( - ':A' => $A, - ':B' => $B, - ':category' => $category_id - )); - - // Si erreur de requête -> FALSE - if( $check_rel_status === false ) - return false; - - - // Si on ne trouve pas, on retourne une erreur - if( $check_relation->fetch() === false ) + // Si erreur de création -> FALSE + if( $relation === false ) return false; // Si tout s'est bien passé, on retourne TRUE