Correction de bug de l'insertion des réponses dans la base de donnée
continuous-integration/drone/push Build is passing Details

interestingProfiles
Ness Gaster 2 years ago
parent 9f728edf8a
commit 2765111df8

@ -5,15 +5,36 @@ namespace API\script\Gateway;
use API\script\Config\Connection; use API\script\Config\Connection;
use PDO; use PDO;
/**
* Permet d'accéder, d'écrire ou de modifier les données contenues dans la table PossibleResponse
* afin de gérer la liste des réponses et les catégories associer d'un candidat.
*/
class GatewayListResponseOfCandidate class GatewayListResponseOfCandidate
{ {
/**
* @var Connection
*/
private Connection $connection; private Connection $connection;
/**
*
*/
public function __construct() public function __construct()
{ {
$this->connection = connect(); $this->connection = connect();
} }
/**
* Permet de récupérer la liste détaillée des réponses avec leurs catégories associer
* aux différentes questions qu'un candidat cible a répondu
*
* @param int $idListResponse Id du candidat pour lequel on veut récupérer ses réponses
*
* @return array Retourne une liste qui pour
* l'indice 0 a la liste des infos du candidat
* l'indice 1 la liste des réponses
* l'indice 2 une liste de liste de catégories, qui pour chaque même indice correspont à la liste des catégories de la réponse
*/
public function getDetailsListResponsesOfCandidate(int $idListResponse) public function getDetailsListResponsesOfCandidate(int $idListResponse)
{ {
$gatewayResponse = new GatewayResponse(); $gatewayResponse = new GatewayResponse();
@ -36,6 +57,11 @@ class GatewayListResponseOfCandidate
return array($questionList, $responses, $tabKeywords); return array($questionList, $responses, $tabKeywords);
} }
/**
* Permet de récupérer la liste des personnes ayant répondu aux formulaire
*
* @return array Retourne la liste brute des informations de tous les candidats ayant répondu au formulaire
*/
public function getAllListResponsesOfCandidate(): array public function getAllListResponsesOfCandidate(): array
{ {
$query = "SELECT * FROM ListResponsesOfCandidate"; $query = "SELECT * FROM ListResponsesOfCandidate";
@ -44,7 +70,14 @@ class GatewayListResponseOfCandidate
return $this->connection->getResults(); return $this->connection->getResults();
} }
public function deleteListResponseOfCandidate($id): void /**
* Permet de supprimer la liste des réponses d'un candidat de la base de donnée
*
* @param int $id Id du candidat à supprimer
*
* @return void
*/
public function deleteListResponseOfCandidate(int $id): void
{ {
$gatewayResponse = new GatewayResponse(); $gatewayResponse = new GatewayResponse();
@ -54,11 +87,22 @@ class GatewayListResponseOfCandidate
$query = "DELETE FROM ListResponsesOfCandidate WHERE id = :id"; $query = "DELETE FROM ListResponsesOfCandidate WHERE id = :id";
$this->connection->executeQuery($query, array( $this->connection->executeQuery($query, array(
'id' => array($id, PDO::PARAM_STR) 'id' => array($id, PDO::PARAM_INT)
)); ));
} }
public function insertListResponsesOfCandidate($id, $answer, $category, $titleForm) /**
* Permet d'insérer dans la base de données les réponses aux questions d'un candidat
* ainsi que les catégories associées à chaque réponse
*
* @param array $id Liste des id des questions répondue
* @param array $answer Liste des réponses à chaque question
* @param array $category Liste des catégories attribuées à chaque réponse
* @param string $titleForm Titre du formulaire
*
* @return void
*/
public function insertListResponsesOfCandidate(array $id, array $answer, array $category, string $titleForm): void
{ {
$gatewayResponse = new GatewayResponse(); $gatewayResponse = new GatewayResponse();
$gatewayQuestion = new GatewayQuestion(); $gatewayQuestion = new GatewayQuestion();

@ -5,15 +5,31 @@ namespace API\script\Gateway;
use API\script\Config\Connection; use API\script\Config\Connection;
use PDO; use PDO;
/**
* Permet d'accéder, d'écrire ou de modifier les données contenues dans la table PossibleResponse.
*/
class GatewayPossibleResponse class GatewayPossibleResponse
{ {
/**
* @var Connection
*/
private Connection $connection; private Connection $connection;
/**
*
*/
public function __construct() public function __construct()
{ {
$this->connection = connect(); $this->connection = connect();
} }
/**
* Permet de récupérer les différentes réponses possibles à une question donnée.
*
* @param string $idQuestion Id de la question pour laquelle on veut récupérer les réponses possibles
*
* @return array Retourne la liste de possibles réponses
*/
public function getPossibleResponseByQuestion(string $idQuestion): array public function getPossibleResponseByQuestion(string $idQuestion): array
{ {
$query = "SELECT pr.* FROM Propose p, PossibleResponse pr $query = "SELECT pr.* FROM Propose p, PossibleResponse pr
@ -25,6 +41,12 @@ class GatewayPossibleResponse
return $this->connection->getResults(); return $this->connection->getResults();
} }
/**
* Permet d'insérer une possible réponse dans la base de donnée.
*
* @param string $contentPossibleResponse Contenu de la possible réponse
* @return int
*/
public function insertPossibleResponse(string $contentPossibleResponse): int public function insertPossibleResponse(string $contentPossibleResponse): int
{ {
$query = "INSERT INTO PossibleResponse(content) VALUES(:content)"; $query = "INSERT INTO PossibleResponse(content) VALUES(:content)";
@ -34,4 +56,24 @@ class GatewayPossibleResponse
return $this->connection->lastInsertId(); return $this->connection->lastInsertId();
} }
/**
* Permet de supprimer une possible réponse de la base de donnée par son id.
*
* @param int $id Id de la possible réponse à supprimer
*
* @return void
*/
public function deletePossibleResponse(int $id): void
{
$query = "DELETE FROM Reference WHERE response = :id";
$this->connection->executeQuery($query, array(
':id' => array($id, PDO::PARAM_INT)
));
$query = "DELETE FROM PossibleResponse WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($id, PDO::PARAM_INT)
));
}
} }

@ -8,15 +8,33 @@ use BusinessClass\Question;
use BusinessClass\TextQuestion; use BusinessClass\TextQuestion;
use PDO; use PDO;
/**
* Permet d'accéder, d'écrire ou de modifier les données contenues dans la table Question
* afin de rendre le formulaire modulable.
*/
class GatewayQuestion class GatewayQuestion
{ {
/**
* @var Connection
*/
private Connection $connection; private Connection $connection;
/**
*
*/
public function __construct() public function __construct()
{ {
$this->connection = connect(); $this->connection = connect();
} }
/**
* Permet d'ajouter une question dans la base de donnée.
*
* @param Question $question Information sur la question ajouter
* @param int $idForm Id du formulaire associer
*
* @return int Id de la question ajouté en base
*/
public function addQuestion(Question $question, int $idForm): int public function addQuestion(Question $question, int $idForm): int
{ {
$query = "INSERT INTO Question(content, type, form) VALUES(:content, :type, :form)"; $query = "INSERT INTO Question(content, type, form) VALUES(:content, :type, :form)";
@ -29,6 +47,15 @@ class GatewayQuestion
return $this->connection->lastInsertId(); return $this->connection->lastInsertId();
} }
/**
* Ajoute une possible réponse à une question cible et associe à la possible réponse des catégories.
*
* @param string $response Contenu de la réponse possible
* @param array $categories Liste des catégories attribuées à la possible réponse
* @param int $idQuestion Id de la question associée à cette possible réponse
*
* @return int Retourne l'id de la possible réponse insérée en base
*/
public function insertResponseInQuestion(string $response, array $categories, int $idQuestion): int public function insertResponseInQuestion(string $response, array $categories, int $idQuestion): int
{ {
$gatewayPossibleResponse = new GatewayPossibleResponse(); $gatewayPossibleResponse = new GatewayPossibleResponse();
@ -49,6 +76,13 @@ class GatewayQuestion
return $idQuestion; return $idQuestion;
} }
/**
* Permet de supprimer une question dans la base ainsi que ses dépendances
*
* @param Question $question Information de la question à supprimer
*
* @return void
*/
public function deleteQuestion(Question $question): void public function deleteQuestion(Question $question): void
{ {
if (get_class($question) == BoxQuestion::class) { if (get_class($question) == BoxQuestion::class) {
@ -59,15 +93,8 @@ class GatewayQuestion
$listPossibleResponse = $question->getPossibleResponses(); $listPossibleResponse = $question->getPossibleResponses();
for ($i = 0; $i < count($listPossibleResponse); $i++) { for ($i = 0; $i < count($listPossibleResponse); $i++) {
$query = "DELETE FROM Reference WHERE response = :id"; $gatewayPossibleResponse = new GatewayPossibleResponse();
$this->connection->executeQuery($query, array( $gatewayPossibleResponse->deletePossibleResponse($listPossibleResponse[$i]->getId());
':id' => array($listPossibleResponse[$i]->getId(), PDO::PARAM_INT)
));
$query = "DELETE FROM PossibleResponse WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($listPossibleResponse[$i]->getId(), PDO::PARAM_INT)
));
} }
} }
@ -77,6 +104,13 @@ class GatewayQuestion
)); ));
} }
/**
* Permet de modifier dans la base de données les informations de la question.
*
* @param Question $question Question modifier à changer en base
*
* @return void
*/
public function updateQuestion(Question $question): void public function updateQuestion(Question $question): void
{ {
$query = "UPDATE Question SET content = :content, type = :type, form = :frm WHERE id = :id"; $query = "UPDATE Question SET content = :content, type = :type, form = :frm WHERE id = :id";
@ -88,6 +122,18 @@ class GatewayQuestion
)); ));
} }
/**
* Permet de récupérer toutes les questions, possibles réponses et catégories associées d'un formualire cible.
*
* @param string $idForm Id du formulaire
*
* @return array Retourne une liste qui pour
* l'indice 0 la liste des questions
* l'indice 1 une liste de liste de réponses, qui pour chaque même indice correspond à la liste des réponses possibles de la question
* l'indice 2 une liste de liste de liste de catégories qui pour chaque indice de questions,
* on a une liste de liste de catégories qui pour chaque indice de réponses est associer une liste de catégories
* Ou vide s'il n'y a pas de question dans la base
*/
public function getAllQuestions(string $idForm): array public function getAllQuestions(string $idForm): array
{ {
$query = "SELECT * FROM Question WHERE form = :fom"; $query = "SELECT * FROM Question WHERE form = :fom";
@ -128,6 +174,13 @@ class GatewayQuestion
return array(); return array();
} }
/**
* Permet de récupérer le contenu d'une réponse à une question par son id.
*
* @param string $id Id de la question cible
*
* @return string Retourne le contenu de la question ciblé
*/
public function getQuestionContentById(string $id): string public function getQuestionContentById(string $id): string
{ {
$query = "SELECT content FROM Question WHERE id = :id"; $query = "SELECT content FROM Question WHERE id = :id";

@ -25,11 +25,11 @@ class CheckBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses(); $possibleResponses = $this->getPossibleResponses();
$categories = $this->getCategories(); $categories = $this->getCategories();
$html = "\t\t\t<div data-id='$id' class='question'> $html = "\t\t\t<div id='$id' class='question'>
<label><strong>$content</strong></label>\n"; <label><strong>$content</strong></label>\n";
for ($i = 0; $i < count($possibleResponses); $i++) { for ($i = 0; $i < count($possibleResponses); $i++) {
$categoriesSplit = $possibleResponses[$i]."||"; $categoriesSplit = $id."||".$possibleResponses[$i]."||";
foreach ($categories[$i] as $category) { foreach ($categories[$i] as $category) {
$categoriesSplit.= $category."_"; $categoriesSplit.= $category."_";
} }

@ -25,12 +25,12 @@ class ListBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses(); $possibleResponses = $this->getPossibleResponses();
$categories = $this->getCategories(); $categories = $this->getCategories();
$html = "\t\t\t<div data-id='$id' class='question'> $html = "\t\t\t<div id='$id' class='question'>
<label><strong>$content</strong></label> <label><strong>$content</strong></label>
<br><select name='answers[]'>\n"; <br><select name='answers[]'>\n";
for ($i = 0; $i < count($possibleResponses); $i++) { for ($i = 0; $i < count($possibleResponses); $i++) {
$categoriesSplit = $possibleResponses[$i]."||"; $categoriesSplit = $id."||".$possibleResponses[$i]."||";
foreach ($categories[$i] as $category) { foreach ($categories[$i] as $category) {
$categoriesSplit.= $category."_"; $categoriesSplit.= $category."_";
} }

@ -29,19 +29,29 @@ class ModelCandidate
$answer = []; $answer = [];
$category = []; $category = [];
$questionsId = [];
var_dump($answersAndCategories);
foreach ($answersAndCategories as $answerAndCategory) { foreach ($answersAndCategories as $answerAndCategory) {
$answer[] = explode("||", $answerAndCategory)[0]; $exploded = explode("||",$answerAndCategory);
$categs = explode("||", $answerAndCategory)[1]; if( count($exploded) == 3 ){
$categs = explode("_", $categs); $questionsId[] = $exploded[0];
array_pop($categs); $answer[] = $exploded[1];
$category[] = $categs; $categs = $exploded[2];
$categs = explode("_", $categs);
array_pop($categs);
$category[] = $categs;
}
else {
$questionsId[] = array_shift($dataIds);
$answer[] = $answerAndCategory;
$category[] = [];
}
} }
$title = (new GatewayForm())->getForm()[0]["title"]; $title = (new GatewayForm())->getForm()[0]["title"];
(new GatewayListResponseOfCandidate())->insertListResponsesOfCandidate($dataIds, $answer, $category, $title); (new GatewayListResponseOfCandidate())->insertListResponsesOfCandidate($questionsId, $answer, $category, $title);
} }
/** /**
* Permet de récupérer le code html à afficher dans la page du formulaire, * Permet de récupérer le code html à afficher dans la page du formulaire,
* on récupère donc le formulaire et toutes les questions qu'il contient. * on récupère donc le formulaire et toutes les questions qu'il contient.

Loading…
Cancel
Save