connection = connect(); } /** * Permet d'ajouter une question dans la base de donnée. * * @param array $question Information sur la question ajouter [type, content] * @param int $idForm Id du formulaire associer * * @return int Id de la question ajouté en base */ public function addQuestion(array $question, int $idForm): int { $query = "INSERT INTO Question(content, type, form) VALUES(:content, :type, :form)"; $this->connection->executeQuery($query, array( ':content' => array($question[1], PDO::PARAM_STR), ':type' => array($question[0], PDO::PARAM_STR), ':form' => array($idForm, PDO::PARAM_INT) )); 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(); $idPossibleResponse = $gatewayPossibleResponse->insertPossibleResponse($response); $query = "INSERT INTO Propose(question, possibleResponse) VALUES(:question, :possibleResponse)"; $this->connection->executeQuery($query, array( ':question' => array($idQuestion, PDO::PARAM_INT), ':possibleResponse' => array($idPossibleResponse, PDO::PARAM_INT) )); foreach ($categories as $keyword) { $gatewayForm = new GatewayForm(); $gatewayForm->assignKeywordToQuestion($keyword, $response, $idQuestion); } return $idQuestion; } /** * Permet de supprimer une question dans la base ainsi que ses dépendances * * @param int $idQuestion Id de la question à supprimer * @param string $type Type de la question à supprimer * * @return void */ public function deleteQuestion(int $idQuestion, string $type): void { if ($type != "BusinessClass\TextQuestion") { $query = "DELETE FROM Propose WHERE question = :id"; $this->connection->executeQuery($query, array( ':id' => array($idQuestion, PDO::PARAM_INT) )); $gatewayPossibleResponse = new GatewayPossibleResponse(); $listPossibleResponse = $gatewayPossibleResponse->getPossibleResponseByQuestion($idQuestion); foreach ($listPossibleResponse as $row) { $gatewayPossibleResponse->deletePossibleResponse($row["id"]); } } $query = "DELETE FROM Question WHERE id = :id"; $this->connection->executeQuery($query, array( ':id' => array($idQuestion, PDO::PARAM_INT) )); } /** * Permet de modifier dans la base de données les informations de la question. * * @param array $question Question modifier à changer en base [id, type, contente] * * @return void */ public function updateQuestion(array $question): void { $query = "UPDATE Question SET content = :content, type = :type WHERE id = :id"; $this->connection->executeQuery($query, array( ':content' => array($question[2], PDO::PARAM_STR), ':type' => array($question[1], PDO::PARAM_STR), ':id' => array($question[0], PDO::PARAM_STR) )); } /** * 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"; $this->connection->executeQuery($query, array( ':fom' => array($idForm, PDO::PARAM_INT) )); $listQuestions = $this->connection->getResults(); $possibleResponsesContent = []; $keywordsResponses = []; $gatewayKeyword = new GatewayKeyword(); $gatewayPossibleResponse = new GatewayPossibleResponse(); if (!empty($listQuestions)) { for ($i = 0; $i < count($listQuestions); $i++) { if ($listQuestions[$i]["type"] != "BusinessClass/TextQuestion") { $idQuestion = $listQuestions[$i]["id"]; $possibleResponses = $gatewayPossibleResponse->getPossibleResponseByQuestion($idQuestion); $tmpTabKeyword = []; $tmpTabPossibleResponse = []; foreach ($possibleResponses as $row) { $tmpTabKeyword[] = $gatewayKeyword->getKeywordsContentByReference($row["id"]); $tmpTabPossibleResponse[] = $row["content"]; } $possibleResponsesContent[] = $tmpTabPossibleResponse; $keywordsResponses[] = $tmpTabKeyword; } else { $possibleResponsesContent[] = null; $keywordsResponses[] = null; } } return array($listQuestions, $possibleResponsesContent, $keywordsResponses); } 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"; $this->connection->executeQuery($query, array( ':id' => array($id, PDO::PARAM_INT) )); return $this->connection->getResults()[0][0]; } }