diff --git a/config/repositories.json b/config/repositories.json index 1577f5d..e0e64df 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -14,7 +14,8 @@ "getAll", "create", "merge", - "remove" + "remove", + "link" ], "Personnes": [ diff --git a/manager/repo/subject.php b/manager/repo/subject.php index a5f00f4..e59cb78 100644 --- a/manager/repo/subject.php +++ b/manager/repo/subject.php @@ -162,12 +162,134 @@ * */ public static function remove($id_subject){ + /* [0] Vérification des INPUT + =========================================================*/ + if( !Database::check('id', $id_subject) ) + return false; + /* [1] On effectue la suppression =========================================================*/ $delSubject = Database::getPDO()->prepare("DELETE FROM sujets WHERE idSujet = :id_subject"); return $delSubject->execute(array( ':id_subject' => $id_subject )); } + + + + + + /* CREER UNE RELATION ENTRE 2 SUJETS + * + * @A UID du premier sujet + * @B UID du second sujet + * @category Intitulé du type de relation + * + * @return id_relation Renvoie l'id de la relation crée, sinon FALSE si erreur + * + */ + public static function link($A, $B, $category){ + /* [0] Vérification des INPUT + =========================================================*/ + $checkInput = Database::check('id', $A); + $checkInput = $checkInput && Database::check('id', $B); + $checkInput = $checkInput && Database::check('varchar(3,40)', $category); + + // Si erreur de type de paramètre, on retourne FALSE + if( !$checkInput ) + return false; + + + /* [1] On vérifie l'existence de la catégorie + =========================================================*/ + $category_exists_req = Database::getPDO()->prepare("SELECT idCategorie as id + FROM categories + WHERE intitule = :category + "); + $cat_ex_status = $category_exists_req->execute( array( ':category' => $category ) ); + + // 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, :category)"); + $create_cat_status = $create_category_req->execute( 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 = :category"); + $get_cat_status = $get_category_id->execute( 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 + )); + + // Si erreur de requête -> FALSE + if( $create_rel_status === false ) + return false; + + + /* [4] On vérifie que la relation est crée + =========================================================*/ + $check_relation = Database::getPDO()->prepare("SELECT idPersonnA, idPersonneB, idCategorie + FROM relations + WHERE idPersonneA = :A + AND idPersonneB = :B + AND idCategorie = :category"); + + $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 ) + return false; + + + // Si tout s'est bien passé, on retourne TRUE + return true; + } + }