Merge remote-tracking branch 'origin/master'
continuous-integration/drone/push Build is passing Details

# Conflicts:
#	Source/Config/config.php
interestingProfiles
johan 2 years ago
commit f2e61dfb1f

@ -0,0 +1,91 @@
<?php
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 Admin afin de gérer l'espace administrateur.
*/
class GatewayAdmin
{
/**
* @var Connection
*/
private Connection $connection;
public function __construct()
{
$this->connection = connect();
}
/**
* Permet d'ajouter un administrateur dans la base de données.
*
* @param string $login Login du nouvel adimin
* @param string $hash Mot de passe au format hash du nouvel admin
*
* @return void
*/
public function addAdmin(string $login, string $hash): void
{
$query = "INSERT INTO Admin(login, hash) VALUES(:login, :hash)";
$this->connection->executeQuery($query, array(
':login' => array($login, PDO::PARAM_STR),
':hash' => array($hash, PDO::PARAM_STR)
));
}
/**
* Permet de récupérer le mot de passe en format hash du login passé en argument,
* afin de vérifier si la connection de l'utilisateur.
*
* @param string $login Login du coup duquel on veut récupérer le hash associé
*
* @return array
*/
public function getPassword(string $login): array
{
$query = 'SELECT Hash FROM Admin WHERE Login = :login';
$this->connection->executeQuery($query, array(
':login' => array($login, PDO::PARAM_STR)
));
return $this->connection->getResults();
}
/**
* Permet de changer le mot de passe de l'administrateur dont le login
* et le nouveau mot de passe au format hash est passé en argument.
*
* @param string $login Login dont on change le mot de passe
* @param string $hash Nouveau mot de passe au format hash
*
* @return void
*/
public function changePassword(string $login, string $hash): void
{
$query = "UPDATE Admin SET hash = :hash WHERE login = :login";
$this->connection->executeQuery($query, array(
':login' => array($login, PDO::PARAM_STR),
':hash' => array($hash, PDO::PARAM_STR)
));
}
/**
* Permet de supprimer un administrateur de la base de donnée par un login passé en paramètre.
*
* @param string $login Login du compte qui sera supprimé
*
* @return void
*/
public function deleteAdmin(string $login): void
{
$query = "DELETE FROM Admin WHERE login = :login";
$this->connection->executeQuery($query, array(
':login' => array($login, PDO::PARAM_STR)
));
}
}

@ -0,0 +1,111 @@
<?php
namespace API\script\Gateway;
use API\script\Config\Connection;
use BusinessClass\Form;
use BusinessClass\Question;
use PDO;
class GatewayForm
{
private Connection $connection;
public function __construct()
{
$this->connection = connect();
}
public function insertForm(Form $form): void
{
if (empty($this->getForm())) {
$query = "INSERT INTO Form(title, description) VALUES(:title, :desc)";
$this->connection->executeQuery($query, array(
':title' => array($form->getTitle(), PDO::PARAM_STR),
':desc' => array($form->getDescription(), PDO::PARAM_STR)
));
}
}
public function getForm(): array
{
$query = "SELECT * FROM Form";
$this->connection->executeQuery($query);
return $this->connection->getResults();
}
public function deleteForm(Form $form): void
{
$query = "DELETE FROM Form WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($form->getId(), PDO::PARAM_INT)
));
}
public function assignKeywordToQuestion(string $keyword, string $response, int $idQuestion): void
{
$query = "SELECT pr.id
FROM Propose p, PossibleResponse pr
WHERE p.question = :id AND p.possibleResponse = pr.id
AND pr.content = :response";
$this->connection->executeQuery($query, array(
':id' => array($idQuestion, PDO::PARAM_INT),
':response' => array($response, PDO::PARAM_STR)
));
$idPossibleResponse = $this->connection->getResults()[0][0];
$query = "INSERT INTO Reference(possibleResponse, keyword) VALUES(:possibleResponse, :keyword)";
$this->connection->executeQuery($query, array(
':possibleResponse' => array($idPossibleResponse, PDO::PARAM_INT),
':keyword' => array($keyword, PDO::PARAM_STR)
));
}
public function deleteKeywordFromQuestion(string $keyword, string $response, Question $question): void
{
$query = "SELECT pr.id FROM Propose p, PossibleResponse r
WHERE p.question = :id AND p.possibleResponse = pr.id
AND pr.content = :response";
$this->connection->executeQuery($query, array(
':id' => array($question->getId(), PDO::PARAM_INT),
':response' => array($response, PDO::PARAM_STR)
));
$idPossibleResponse = $this->connection->getResults()[0][0];
$query = "DELETE FROM Reference WHERE response = :idResponse AND keyword = :idKeword";
$this->connection->executeQuery($query, array(
':idResponse' => array($idPossibleResponse, PDO::PARAM_INT),
':idKeword' => array($keyword, PDO::PARAM_INT)
));
}
public function updateTitleToForm(string $title, Form $form): void
{
$query = "UPDATE Form SET title = :title WHERE id = :id";
$this->connection->executeQuery($query, array(
':title' => array($title, PDO::PARAM_STR),
':id' => array($form->getId(), PDO::PARAM_INT)
));
}
public function updateDescriptionToForm(string $description, Form $form): void
{
$query = "UPDATE Form SET title = :title WHERE description = :description";
$this->connection->executeQuery($query, array(
':description' => array($description, PDO::PARAM_STR),
':id' => array($form->getId(), PDO::PARAM_INT)
));
}
public function deleteDescriptionToForm(Form $form): void
{
$query = "UPDATE Form SET title = :title WHERE description = :descript";
$this->connection->executeQuery($query, array(
':descript' => array('', PDO::PARAM_STR),
':id' => array($form->getId(), PDO::PARAM_INT)
));
}
}

@ -0,0 +1,124 @@
<?php
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 Keyword
* afin de gérer les catégories disponibles et associer aux différentes réponses des questions.
*/
class GatewayKeyword
{
/**
* @var Connection
*/
private Connection $connection;
/**
*
*/
public function __construct()
{
$this->connection = connect();
}
/**
* Permet d'ajouter un Keyword dans la base de donnée.
*
* @param string $keyword Keyword à ajouter
*
* @return void
*/
public function insertKeyword(string $keyword)
{
$query = "INSERT INTO Keyword(word) VALUES(:word)";
$this->connection->executeQuery($query, array(
':word' => array($keyword, PDO::PARAM_STR)
));
}
/**
* Permet de supprimer un keyword de la base de donnée.
*
* @param string $keyword Keyword à supprimer
*
* @return void
*/
public function deleteKeyword(string $keyword)
{
$query = "DELETE FROM Keyword WHERE word = :word";
$this->connection->executeQuery($query, array(
':word' => array($keyword, PDO::PARAM_STR)
));
}
/**
* Permet de récupérer l'ensemble des Keyword disponible.
*
* @return array Retourne la liste de l'ensemble des keyword sauvé dans la base de donnée
*/
public function getAllKeyword(): array
{
$query = "SELECT * FROM Keyword";
$this->connection->executeQuery($query);
return $this->connection->getResults();
}
/**
* Permet de récupérer tous les Keyword qui font référence à l'id de la réponse possible à une question passée en paramètre.
*
* @param int $id Id de la possible réponse que l'on veut connaitre ses catégories
*
* @return array Retourne l'ensemble de tous les Keyword associer à la réponse
*/
public function getKeywordsContentByReference(int $id): array
{
$query = "SELECT k.* FROM Keyword k, Reference r
WHERE k.word = r.keyword AND r.possibleResponse = :id";
$this->connection->executeQuery($query, array(
':id' => array($id, PDO::PARAM_STR)
));
return $this->getKeywordByAssotiation($id , $query);
}
/**
* Permet de récupérer tous les Keyword qui font référence à l'id de la réponse d'un candidat passée en paramètre.
*
* @param int $id Id de la réponse que l'on veut connaitre ses catégories
*
* @return array Retourne l'ensemble de tous les Keyword associer à la réponse
*/
public function getKeywordsContentByCategorieze(int $id): array
{
$query = "SELECT k.* FROM Keyword k, Categorize c
WHERE k.word = c.keyword AND c.response = :id";
return $this->getKeywordByAssotiation($id , $query);
}
/**
* Permet de récupérer une liste de Keyword selon une requête donnée et un id associé.
*
* @param int $id Id de l'objet dont on veut ses Keyword associé
* @param string $query Requête que l'on veut exécuter
*
* @return array Retourne la liste des différents Keyword associé à l'objet voulu
*/
private function getKeywordByAssotiation(int $id, string $query): array
{
$this->connection->executeQuery($query, array(
':id' => array($id, PDO::PARAM_STR)
));
$tab = [];
foreach ($this->connection->getResults() as $result) {
$tab[] = $result["word"];
}
return $tab;
}
}

@ -0,0 +1,129 @@
<?php
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();
$gatewayKeyword = new GatewayKeyword();
$tabKeywords = [];
$query = "SELECT * FROM ListResponsesOfCandidate WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($idListResponse, PDO::PARAM_INT)
));
$questionList = $this->connection->getResults()[0];
$responses = $gatewayResponse->getResponsesByIdListCandidate($questionList['id']);
foreach ($responses as $row) {
$tabKeywords[] = $gatewayKeyword->getKeywordsContentByCategorieze($row['id']);
}
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";
$this->connection->executeQuery($query);
return $this->connection->getResults();
}
/**
* 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();
foreach ($gatewayResponse->getResponsesIdByIdListCandidate($id) as $response) {
$gatewayResponse->deleteResponseById($response);
}
$query = "DELETE FROM ListResponsesOfCandidate WHERE id = :id";
$this->connection->executeQuery($query, array(
'id' => array($id, PDO::PARAM_INT)
));
}
/**
* 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();
$query = "INSERT INTO ListResponsesOfCandidate(date, titleForm) VALUES(:date, :titleForm)";
$this->connection->executeQuery($query, array(
':date' => array(date('Y-m-d H:i:s'), PDO::PARAM_STR),
':titleForm' => array($titleForm, PDO::PARAM_STR)
));
$idListQuestion = $this->connection->lastInsertId();
for ($i = 0; $i < count($answer); $i++) {
$question = $gatewayQuestion->getQuestionContentById($id[$i]);
$idResponse = $gatewayResponse->insertResponse($question, $answer[$i], $category[$i]);
$query = "INSERT INTO Submit (responsesCandidate, response) VALUES(:responsesCandidate, :response)";
$this->connection->executeQuery($query, array(
':responsesCandidate' => array($idListQuestion, PDO::PARAM_STR),
':response' => array($idResponse, PDO::PARAM_STR)
));
}
}
}

@ -0,0 +1,79 @@
<?php
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
WHERE p.question = :questionId AND p.possibleResponse = pr.id";
$this->connection->executeQuery($query, array(
':questionId' => array($idQuestion, PDO::PARAM_INT)
));
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)";
$this->connection->executeQuery($query, array(
':content' => array($contentPossibleResponse, PDO::PARAM_STR)
));
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)
));
}
}

@ -0,0 +1,193 @@
<?php
namespace API\script\Gateway;
use API\script\Config\Connection;
use BusinessClass\BoxQuestion;
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)";
$this->connection->executeQuery($query, array(
':content' => array($question->getContent(), PDO::PARAM_STR),
':type' => array(get_class($question), 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 Question $question Information de la question à supprimer
*
* @return void
*/
public function deleteQuestion(Question $question): void
{
if (get_class($question) == BoxQuestion::class) {
$query = "DELETE FROM Propose WHERE question = :id";
$this->connection->executeQuery($query, array(
':id' => array($question->getId(), PDO::PARAM_INT)
));
$listPossibleResponse = $question->getPossibleResponses();
for ($i = 0; $i < count($listPossibleResponse); $i++) {
$gatewayPossibleResponse = new GatewayPossibleResponse();
$gatewayPossibleResponse->deletePossibleResponse($listPossibleResponse[$i]->getId());
}
}
$query = "DELETE FROM Question WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($question->getId(), PDO::PARAM_INT)
));
}
/**
* 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";
$this->connection->executeQuery($query, array(
':content' => array($question->getContent(), PDO::PARAM_STR),
':type' => array(get_class($question), PDO::PARAM_STR),
':frm' => array($question->getForm(), PDO::PARAM_STR),
':id' => array($question->getId(), 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];
}
}

@ -0,0 +1,142 @@
<?php
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 Response
* afin de récupérer les réponses d'un utilisateur.
*/
class GatewayResponse
{
/**
* @var Connection
*/
private Connection $connection;
public function __construct()
{
$this->connection = connect();
}
/**
* Permet de récupérer la liste des réponses d'un candidat ainsi que les Keyword couvert pour chaque réponse.
*
* @param int $listResponsesOfCandidateId Id du candidat
*
* @return array Retourne une liste contenant à l'indice 0 la liste de réponse
* et à l'indice 1 une liste de liste de Keword,
* où chaque indice d'une liste de question est associé au même indice une réponse
*/
public function getCatgoriezeOfResponsesIdByIdListCandidate(int $listResponsesOfCandidateId): array
{
$result = $this->getResponsesByIdListCandidate($listResponsesOfCandidateId);
$tab = [];
foreach ($result as $row) {
$tab[] = (new GatewayKeyword())->getKeywordsContentByCategorieze($row['id']);
}
return array($result, $tab);
}
/**
* Permet de récupérer la liste des réponses d'un candidat par son id.
*
* @param int $listResponsesOfCandidateId Id du candidat
*
* @return array Retourne la list des réponses du candidat
*/
public function getResponsesByIdListCandidate(int $listResponsesOfCandidateId): array
{
$query = "SELECT r.* FROM Response r, Submit s WHERE s.responsesCandidate = :id AND r.id = s.response";
return $this->getResponsesByQueryAndIdListCandidate($query, $listResponsesOfCandidateId);
}
/**
* Permet de récupérer la liste des id des réponses d'un candidat par son id.
*
* @param int $listResponsesOfCandidateId Id du candidat
*
* @return array Retourne la list des id des réponses du candidat
*/
public function getResponsesIdByIdListCandidate(int $listResponsesOfCandidateId): array
{
$query = "SELECT r.id FROM Response r, Submit s WHERE s.responseCandidate = :id AND r.id = s.response";
return $this->getResponsesByQueryAndIdListCandidate($query, $listResponsesOfCandidateId);
}
/**
* Permet de récupérer une liste de format de réponse définit par la commande sql passé en paramètre,
* dont l'id du candidat, ayant formulé ces réponses, est passé en paramètre.
*
* @param string $query Requête du format de liste de réponse voulu
* @param int $id Id du candidat cible
*
* @return array Retourne la liste des réponses d'un candidat selon le format voulu
*/
private function getResponsesByQueryAndIdListCandidate(string $query, int $id): array
{
$this->connection->executeQuery($query, array(
':id' => array($id, PDO::PARAM_INT)
));
return $this->connection->getResults();
}
/**
* Permet de supprimer la réponse et ses liens avec les différents Keyword
* selon l'id de la réponse passée en paramêtre
*
* @param int $responseId Id de la réponse à supprimer
*
* @return void
*/
public function deleteResponseById(int $responseId): void
{
$query = "DELETE FROM Categorize WHERE response = :id";
$this->connection->executeQuery($query, array(
':id' => array($responseId, PDO::PARAM_INT)
));
$query = "DELETE FROM Submit WHERE response = :id";
$this->connection->executeQuery($query, array(
':id' => array($responseId, PDO::PARAM_INT)
));
$query = "DELETE FROM Response WHERE id = :id";
$this->connection->executeQuery($query, array(
':id' => array($responseId, PDO::PARAM_INT)
));
}
/**
* Permet d'insérer une réponse ainsi que de la lier avec les Keywords passés en paramètre.
*
* @param string $content Contenu de la réponse
* @param string $questionContent Contenu de la question, dans le cas où la question viendra à changer dans le futur
* @param array $category Liste des Keyword associé à la réponse
*
* @return int Retourne l'Id de la réponse insérée
*/
public function insertResponse(string $content, string $questionContent, array $category): int
{
$query = "INSERT INTO Response(content, questionContent) VALUES (:content, :questionContent)";
$this->connection->executeQuery($query, array(
':content' => array($content, PDO::PARAM_STR),
':questionContent' => array($questionContent, PDO::PARAM_STR)
));
$idResponse = $this->connection->lastInsertId();
foreach ($category as $keyword) {
$query = "INSERT INTO Categorize (response, keyword) VALUES(:response, :keyword)";
$this->connection->executeQuery($query, array(
':response' => array($idResponse, PDO::PARAM_STR),
':keyword' => array($keyword, PDO::PARAM_STR)
));
}
return $idResponse;
}
}

@ -25,18 +25,18 @@ class CheckBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses();
$categories = $this->getCategories();
$html = "\t\t\t<div data-id='$id' class='question'>
<label>$content</label>\n";
$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."_";
}
$html.= "\t\t\t\t<input type='checkbox' name='answers[]' value='$categoriesSplit' />
$html.= "\t\t\t\t<br><li><input type='checkbox' name='answers[]' value='$categoriesSplit' />
<label>$possibleResponses[$i]</label>\n";
}
$html.= "\t\t\t</div>\n";
$html.= "\t\t\t</div><br>\n";
return $html;
}

@ -25,19 +25,19 @@ class ListBoxQuestion extends BoxQuestion
$possibleResponses = $this->getPossibleResponses();
$categories = $this->getCategories();
$html = "\t\t\t<div data-id='$id' class='question'>
<label>$content</label>
<select name='answers[]'>\n";
$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."_";
}
$html.= "\t\t\t\t\t<option value='$categoriesSplit'>$possibleResponses[$i]</option>\n";
}
$html.= "\t\t\t\t</select>
</div>\n";
</div><br>\n";
return $html;
}

@ -18,8 +18,8 @@ class TextQuestion extends Question
$id = $this->getId();
return "\t\t\t<div class='question'>
<label>$content</label>
<input data-id='$id' type='text' name='answers[]' />
</div>\n";
<label><strong>$content</strong></label>
<br><input data-id='$id' type='text' name='answers[]' />
</div><br>\n";
}
}

@ -8,6 +8,9 @@ $views['admin'] = 'Views/HTML/admin.php';
$views['adminLogin'] = 'Views/HTML/adminLogin.php';
$views['possibleResponsesForm'] = 'Views/HTML/possibleResponsesForm.php';
$views['continue'] = 'Views/HTML/continue.php';
$views['categories'] = 'Views/HTML/categories.php';
$views['questions'] = 'Views/HTML/questions.php';
$views['responses'] = 'Views/HTML/responses.php';
$views['error'] = 'Views/HTML/error.php';
$controller['Candidate'] = 'ControllerCandidate';
@ -23,8 +26,6 @@ $poppins = "https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=sw
$icon = "https://cdn.uca.fr/images/favicon/favicon.ico";
$logoUCA = "https://cdn.uca.fr/images/logos/logo_uca_mini_light.png";
$_SERVER['BASE_URI'] = "";
$emailMaxLength=150;
$pseudoMaxLength=50;
$passwordMaxLength=500;

@ -22,7 +22,7 @@ class ControllerAdmin
$type = $_POST['type'];
$idQuestion = (new ModelAdmin())->addQuestion();
if (strcmp($type, "BusinessClass\TextQuestion") == 0) {
$this->goToAdminPage();
$this->goToQuestions();
} else {
$categories = (new ModelAdmin())->getCategories();
$questionContent = $_POST['question'];
@ -67,7 +67,7 @@ class ControllerAdmin
global $rep, $views;
require_once($rep.$views['possibleResponsesForm']);
} else {
$this->goToAdminPage();
$this->goToQuestions();
}
}
@ -84,28 +84,52 @@ class ControllerAdmin
/**
* Permet de naviguer jusqu'à la page d'admninistration principale. On retrouve la gestion
* des données de notre application
* Permet d'ajouter une catégories (mot-clef) à notre application
*
* @return void
*/
public function addKeyword(): void
{
(new ModelAdmin())->addKeyword();
$this->goToCategories();
}
/**
* Permet de naviguer jusqu'à la page de gestion des catégories
*
* @return void
*/
public function goToAdminPage(): void
public function goToCategories(): void
{
$categories = (new ModelAdmin())->getCategories();
global $rep, $views;
require_once($rep.$views['categories']);
}
/**
* Permet de naviguer jusqu'à la page de gestion des questions
*
* @return void
*/
public function goToQuestions(): void
{
$questions = (new ModelAdmin())->getQuestions();
global $rep, $views;
require_once($rep.$views['admin']);
require_once($rep.$views['questions']);
}
/**
* Permet d'ajouter une catégories (mot-clef) à notre application
* Permet de naviguer jusqu'à la page de gestion des réponses
*
* @return void
*/
public function addKeyword(): void
public function goToResponses(): void
{
(new ModelAdmin())->addKeyword();
$this->goToAdminPage();
$responsesCandidate = (new ModelAdmin())->getResponsesCandidate();
global $rep, $views;
require_once($rep.$views['responses']);
}
}

@ -4,6 +4,7 @@ namespace Model;
use API\script\Gateway\GatewayForm;
use API\script\Gateway\GatewayKeyword;
use API\script\Gateway\GatewayListResponseOfCandidate;
use API\script\Gateway\GatewayQuestion;
use BusinessClass\Form;
@ -23,8 +24,8 @@ class ModelAdmin
require_once($rep . $views['form']);
}
/**
* Permet de créer et d'ajouter une question et de retourner son ID afin de la reconnaitre facilement dans
* la suite du code.
* Permet de créer et d'ajouter une question et de retourner son ID afin de la
* reconnaitre facilement dans la suite du code.
*
* @return int
*/
@ -114,4 +115,21 @@ class ModelAdmin
$questionsArray = (new GatewayQuestion())->getAllQuestions($idForm);
return Factory::getBuiltObjects($questionsArray, "Question");
}
/**
* Permet de récupérer toutes les réponses existantes.
*
* @return array
*/
public function getResponsesCandidate(): array
{
$responsesCandidate = (new GatewayListResponseOfCandidate())->getAllListResponsesOfCandidate();
$results = [];
foreach ($responsesCandidate as $response) {
$results[] = (new GatewayListResponseOfCandidate())->getDetailsListResponsesOfCandidate($response["id"]);
}
return $results;
}
}

@ -20,8 +20,8 @@ class ModelCandidate
public function submitForm(): void
{
$answersAndCategories = $_POST['answers'];
$dataIds = null;
$dataIds = null;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'submitForm') {
$dataIdsJson = $_POST['data_ids'];
$dataIds = json_decode($dataIdsJson);
@ -29,19 +29,29 @@ class ModelCandidate
$answer = [];
$category = [];
$questionsId = [];
var_dump($answersAndCategories);
foreach ($answersAndCategories as $answerAndCategory) {
$answer[] = explode("||", $answerAndCategory)[0];
$categs = explode("||", $answerAndCategory)[1];
$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.
@ -61,11 +71,17 @@ class ModelCandidate
$description = $form[0]['description'];
$questionsTab = (new GatewayQuestion())->getAllQuestions($form[0]['id']);
$questions = Factory::getBuiltObjects($questionsTab, "Question");
$nbQuestions = count($questions);
$time = round(($nbQuestions * 20)/60);
$html = "
<h1>$title</h1>\n
<br>
<h3>$description</h3>\n
<br>
<h4><i>Temps estimé</i> : $time minutes</h4>
<div id='container_form'>\n
<form method='post'>\n";
@ -74,11 +90,11 @@ class ModelCandidate
}
if (count($questions) > 0) {
$html.= "\t\t\t<input type='submit'>\n
$html.= "\t\t\t<input type='submit' value='Envoyer' id='button' style='margin-left: 45%'>\n
\t\t\t<input type='hidden' name='data_ids' value=''>
\t\t\t<input type='hidden' name='action' value='submitForm'>
\t\t</form>\n
\t</div>\n";
\t</div><br><br><br>\n";
} else {
$html.= "\t\t</form>\n
\t</div>\n";

@ -1,18 +1,27 @@
h3 {
text-align: center;
}
h4 {
text-align: center;
font-weight: normal;
}
#container_form {
display: flex;
flex-direction: row;
justify-content: center;
margin-top: 5%;
margin-top: 3%;
}
#container_form h2{
padding-top: 1%;
}
#container_form #button {
#button {
margin-top: 5%;
width: 20%;
height: 5%;
width: 15%;
height: 3%;
margin-left: 79%;
margin-bottom: 10%;
cursor: pointer;
@ -21,8 +30,8 @@
border-radius: 20px;
}
#container_form #button:hover {
background-color: rgb(23,143,150);
#button:hover {
background-color: rgba(23, 143, 150, 0.7);
}
#container_testimony, #container_personalInfos {

@ -15,73 +15,14 @@
</head>
<body>
<img id="logoUCA" src="<?php echo $logoUCA; ?>" height="35px" width="auto" alt="logo UCA">
<h1>Administration</h1>
<div id="container">
<div>
<form method="post">
<label for="keyword"></label><input id="keyword" name="keyword" type="text" size="25" placeholder="...">
<input type="submit" value="Ajouter">
<input type="hidden" name="action" value="addKeyword">
</form>
<button id="printCategory">Les catégories ▼</button>
<ul id="listCategories" class="hidden-content">
<?php
foreach ($categories as $category) {
?> <li><?php echo $category; ?></li> <?php
}
?>
</ul>
</div>
<div>
<button id="printQuestion">Les questions ▼</button>
<ul id="listQuestions" class="hidden-content">
<?php
foreach ($questions as $question) {
?>
<hr>
<li><?php echo $question->printStrategy(); ?></li>
<?php
}
?>
</ul>
</div>
</div>
<div class="form-center">
<button id="addNewQuestion">Ajouter une question ▼</button>
<form id="addQuestionForm" method="post" class="hidden-content">
<div id="questionText">
<label for="question">Écrivez la question : </label>
<br>
<input id="question" name="question" type="text" size="100">
<a href="index.php?action=goToCategories">Les catégories</a>
<a href="index.php?action=goToQuestions">Les questions</a>
<a href="index.php?action=goToResponses">Les réponses</a>
</div>
<div>
<br><br>
<label for="type">Séléctionnez le type de question souhaitée :
<br>- Text permet d'écrire la réponse librement.
<br>- ListBox permet de choisir une réponse parmi plusieurs possibilités.
<br>- CheckBox permet de choisir une ou plusieurs réponses parmi plusieurs possibilités.
</label>
<br>
<select id="type" name="type">
<option value="BusinessClass\TextQuestion">Text</option>
<option value="BusinessClass\ListBoxQuestion">ListBox</option>
<option value="BusinessClass\CheckBoxQuestion">CheckBox</option>
</select>
</div>
<br><br>
<input type="submit" value="Confirmer">
<input type="hidden" name="action" value="addQuestion">
</form>
</div>
</body>
<script src="Views/JS/form_category.js"></script>

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php
global $googleApis, $googleStatic, $poppins, $icon, $logoUCA;
?>
<meta charset="UTF-8">
<link rel="stylesheet" href="Views/CSS/base.css" />
<link rel="preconnect" href="<?php echo $googleApis; ?>">
<link rel="preconnect" href="<?php echo $googleStatic; ?>" crossorigin>
<link href="<?php echo $poppins; ?>" rel="stylesheet">
<title>Formulaire de témoignage</title>
<link rel="shortcut icon" href="<?php echo $icon; ?>" type="image/x-icon">
<link rel="icon" href="<?php echo $icon; ?>" type="image/x-icon">
</head>
<body>
<img id="logoUCA" src="<?php echo $logoUCA; ?>" height="35px" width="auto" alt="logo UCA">
<h1>Administration</h1>
<div class="form-center">
<a href="index.php?action=goToCategories">Les catégories</a>
<a href="index.php?action=goToQuestions">Les questions</a>
<a href="index.php?action=goToResponses">Les réponses</a>
</div>
<br>
<div class="form-center">
<h3>Les catégories :</h3>
<form method="post">
<label for="keyword"></label><input id="keyword" name="keyword" type="text" size="25" placeholder="...">
<input type="submit" value="Ajouter">
<input type="hidden" name="action" value="addKeyword">
</form>
<br>
<ul class="form-center">
<?php
foreach ($categories as $category) {
?> <li><?php echo $category; ?></li> <?php
}
?>
</ul>
</div>
</body>
</html>

@ -36,7 +36,7 @@
<?php
foreach ($categories as $category) {
?>
<label for="category"><?php echo $category ?></label>
<li><label for="category"><?php echo $category ?></label>
<input id="category" type="checkbox" name="categories[]" value="<?php echo $category ?>">
<?php
}

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php
global $googleApis, $googleStatic, $poppins, $icon, $logoUCA;
?>
<meta charset="UTF-8">
<link rel="stylesheet" href="Views/CSS/base.css" />
<link rel="preconnect" href="<?php echo $googleApis; ?>">
<link rel="preconnect" href="<?php echo $googleStatic; ?>" crossorigin>
<link href="<?php echo $poppins; ?>" rel="stylesheet">
<title>Formulaire de témoignage</title>
<link rel="shortcut icon" href="<?php echo $icon; ?>" type="image/x-icon">
<link rel="icon" href="<?php echo $icon; ?>" type="image/x-icon">
</head>
<body>
<img id="logoUCA" src="<?php echo $logoUCA; ?>" height="35px" width="auto" alt="logo UCA">
<h1>Administration</h1>
<div class="form-center">
<a href="index.php?action=goToCategories">Les catégories</a>
<a href="index.php?action=goToQuestions">Les questions</a>
<a href="index.php?action=goToResponses">Les réponses</a>
</div>
<br>
<div class="form-center">
<h3>Les questions :</h3>
<br>
<form method="post">
<div>
<label for="question">Écrivez la question : </label>
<br>
<input id="question" name="question" type="text" size="70">
</div>
<div>
<br>
<label for="type">Séléctionnez le type de question souhaitée :
<br>- Text permet d'écrire la réponse librement.
<br>- ListBox permet de choisir une réponse parmi plusieurs possibilités.
<br>- CheckBox permet de choisir une ou plusieurs réponses parmi plusieurs possibilités.
</label>
<br>
<select id="type" name="type">
<option value="BusinessClass\TextQuestion">Text</option>
<option value="BusinessClass\ListBoxQuestion">ListBox</option>
<option value="BusinessClass\CheckBoxQuestion">CheckBox</option>
</select>
</div>
<br>
<input type="submit" value="Ajouter">
<input type="hidden" name="action" value="addQuestion">
</form>
<br>
<hr>
<br>
<ul class="form-center">
<?php
foreach ($questions as $question) {
?>
<?php echo $question->printStrategy() ?>
<?php
}
?>
</ul>
</div>
</body>
</html>

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php
global $googleApis, $googleStatic, $poppins, $icon, $logoUCA;
?>
<meta charset="UTF-8">
<link rel="stylesheet" href="Views/CSS/base.css" />
<link rel="preconnect" href="<?php echo $googleApis; ?>">
<link rel="preconnect" href="<?php echo $googleStatic; ?>" crossorigin>
<link href="<?php echo $poppins; ?>" rel="stylesheet">
<title>Formulaire de témoignage</title>
<link rel="shortcut icon" href="<?php echo $icon; ?>" type="image/x-icon">
<link rel="icon" href="<?php echo $icon; ?>" type="image/x-icon">
</head>
<body>
<img id="logoUCA" src="<?php echo $logoUCA; ?>" height="35px" width="auto" alt="logo UCA">
<h1>Administration</h1>
<div class="form-center">
<a href="index.php?action=goToCategories">Les catégories</a>
<a href="index.php?action=goToQuestions">Les questions</a>
<a href="index.php?action=goToResponses">Les réponses</a>
</div>
<br>
<div class="form-center">
<h3>Les réponses :</h3>
<br>
<div id="listResponses">
<?php
foreach ($responsesCandidate as $response) { ?>
<i><?php echo $response[0]["date"]; ?></i>
<p>Catégories associées :
<?php
echo " | ";
foreach ($response[2] as $category)
if(!empty($category)) {
echo $category[0] . " | ";
}
?>
</p>
<?php foreach ($response[1] as $questionResponses) { ?>
<p><i>Question : </i><?php echo $questionResponses["content"]; ?></p>
<p><i>Réponse : </i><?php echo $questionResponses["questionContent"]; ?></p>
<?php
} ?>
<hr><br>
<?php
}
?>
</div>
</div>
</body>
</html>

@ -1,9 +1,9 @@
let dataIds = [];
let elements = document.querySelectorAll('[data-id]');
elements.forEach(function(element) {
dataIds.push(element.getAttribute('data-id'));
});
let dataIdsInput = document.querySelector('input[name="data_ids"]');
dataIdsInput.value = JSON.stringify(dataIds);

Loading…
Cancel
Save