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 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
{
/**
* @var Connection
*/
private Connection $connection;
/**
*
*/
public function __construct()
{
$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)
{
$gatewayResponse = new GatewayResponse();
@ -36,6 +57,11 @@ class GatewayListResponseOfCandidate
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
{
$query = "SELECT * FROM ListResponsesOfCandidate";
@ -44,7 +70,14 @@ class GatewayListResponseOfCandidate
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();
@ -54,11 +87,22 @@ class GatewayListResponseOfCandidate
$query = "DELETE FROM ListResponsesOfCandidate WHERE id = :id";
$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();
$gatewayQuestion = new GatewayQuestion();

@ -5,15 +5,31 @@ namespace API\script\Gateway;
use API\script\Config\Connection;
use PDO;
/**
* Permet d'accéder, d'écrire ou de modifier les données contenues dans la table PossibleResponse.
*/
class GatewayPossibleResponse
{
/**
* @var Connection
*/
private Connection $connection;
/**
*
*/
public function __construct()
{
$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
{
$query = "SELECT pr.* FROM Propose p, PossibleResponse pr
@ -25,6 +41,12 @@ class GatewayPossibleResponse
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
{
$query = "INSERT INTO PossibleResponse(content) VALUES(:content)";
@ -34,4 +56,24 @@ class GatewayPossibleResponse
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 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
{
/**
* @var Connection
*/
private Connection $connection;
/**
*
*/
public function __construct()
{
$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
{
$query = "INSERT INTO Question(content, type, form) VALUES(:content, :type, :form)";
@ -29,6 +47,15 @@ class GatewayQuestion
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
{
$gatewayPossibleResponse = new GatewayPossibleResponse();
@ -49,6 +76,13 @@ class GatewayQuestion
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
{
if (get_class($question) == BoxQuestion::class) {
@ -59,15 +93,8 @@ class GatewayQuestion
$listPossibleResponse = $question->getPossibleResponses();
for ($i = 0; $i < count($listPossibleResponse); $i++) {
$query = "DELETE FROM Reference WHERE response = :id";
$this->connection->executeQuery($query, array(
':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)
));
$gatewayPossibleResponse = new GatewayPossibleResponse();
$gatewayPossibleResponse->deletePossibleResponse($listPossibleResponse[$i]->getId());
}
}
@ -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
{
$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
{
$query = "SELECT * FROM Question WHERE form = :fom";
@ -128,6 +174,13 @@ class GatewayQuestion
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
{
$query = "SELECT content FROM Question WHERE id = :id";

@ -25,11 +25,11 @@ class CheckBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses();
$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";
for ($i = 0; $i < count($possibleResponses); $i++) {
$categoriesSplit = $possibleResponses[$i]."||";
$categoriesSplit = $id."||".$possibleResponses[$i]."||";
foreach ($categories[$i] as $category) {
$categoriesSplit.= $category."_";
}

@ -25,12 +25,12 @@ class ListBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses();
$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>
<br><select name='answers[]'>\n";
for ($i = 0; $i < count($possibleResponses); $i++) {
$categoriesSplit = $possibleResponses[$i]."||";
$categoriesSplit = $id."||".$possibleResponses[$i]."||";
foreach ($categories[$i] as $category) {
$categoriesSplit.= $category."_";
}

@ -29,19 +29,29 @@ class ModelCandidate
$answer = [];
$category = [];
$questionsId = [];
var_dump($answersAndCategories);
foreach ($answersAndCategories as $answerAndCategory) {
$answer[] = explode("||", $answerAndCategory)[0];
$categs = explode("||", $answerAndCategory)[1];
$categs = explode("_", $categs);
array_pop($categs);
$category[] = $categs;
$exploded = explode("||",$answerAndCategory);
if( count($exploded) == 3 ){
$questionsId[] = $exploded[0];
$answer[] = $exploded[1];
$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"];
(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,
* on récupère donc le formulaire et toutes les questions qu'il contient.

Loading…
Cancel
Save