diff --git a/Source/API/script/APIController.php b/Source/API/script/APIController.php index 19e2190..5119b57 100644 --- a/Source/API/script/APIController.php +++ b/Source/API/script/APIController.php @@ -1,5 +1,9 @@ stmt->execute(); } + + /** + * Permet de récupère le résultat de la dernière réquête éxecuté avec + * la fonction executeQuery(). + * + * @return array + */ public function getResults(): array { return $this->stmt->fetchAll(); diff --git a/Source/BusinessClass/BoxQuestion.php b/Source/BusinessClass/BoxQuestion.php index 0d77a56..bbf49d4 100644 --- a/Source/BusinessClass/BoxQuestion.php +++ b/Source/BusinessClass/BoxQuestion.php @@ -2,9 +2,18 @@ namespace BusinessClass; +/** + * Définit une question avec plusieurs réponses. + */ abstract class BoxQuestion extends Question { + /** + * @var array|mixed + */ private array $possibleResponses; + /** + * @var array|mixed + */ private array $categories; @@ -28,8 +37,19 @@ abstract class BoxQuestion extends Question } + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ abstract public function responseStrategy(); + + /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * + * @return string + */ abstract public function printStrategy(): string; /** diff --git a/Source/BusinessClass/CheckBoxQuestion.php b/Source/BusinessClass/CheckBoxQuestion.php index a12ac70..9f76d76 100644 --- a/Source/BusinessClass/CheckBoxQuestion.php +++ b/Source/BusinessClass/CheckBoxQuestion.php @@ -2,6 +2,9 @@ namespace BusinessClass; +/** + * Définit une question à choix multiples. + */ class CheckBoxQuestion extends BoxQuestion { public function __construct() @@ -21,11 +24,23 @@ class CheckBoxQuestion extends BoxQuestion } } + + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ public function responseStrategy(): void { echo "Implement responseStrategy() method."; } + + /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * + * @return string + */ public function printStrategy(): string { $id = $this->getId(); diff --git a/Source/BusinessClass/Form.php b/Source/BusinessClass/Form.php index 6254c22..d3c5cd0 100644 --- a/Source/BusinessClass/Form.php +++ b/Source/BusinessClass/Form.php @@ -2,11 +2,29 @@ namespace BusinessClass; +/** + * Définit un formulaire. + */ class Form { + /** + * @var int + */ private int $id; + + /** + * @var string + */ private string $title; + + /** + * @var string + */ private string $description; + + /** + * @var array + */ private array $questions; // La liste des questions dans un formulaire /** diff --git a/Source/BusinessClass/IPrintQuestionStrategy.php b/Source/BusinessClass/IPrintQuestionStrategy.php index 06b2d5c..bbfc35a 100644 --- a/Source/BusinessClass/IPrintQuestionStrategy.php +++ b/Source/BusinessClass/IPrintQuestionStrategy.php @@ -2,7 +2,15 @@ namespace BusinessClass; +/** + * Définit l'affiche d'une question. + */ interface IPrintQuestionStrategy { + /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * + * @return string + */ public function printStrategy(): string; } diff --git a/Source/BusinessClass/IResponseProcessingStrategy.php b/Source/BusinessClass/IResponseProcessingStrategy.php index c6bf1d2..51b60a9 100644 --- a/Source/BusinessClass/IResponseProcessingStrategy.php +++ b/Source/BusinessClass/IResponseProcessingStrategy.php @@ -2,7 +2,15 @@ namespace BusinessClass; +/** + * Définit la gestion des réponses à une question. + */ interface IResponseProcessingStrategy { + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ public function responseStrategy(); } diff --git a/Source/BusinessClass/Keyword.php b/Source/BusinessClass/Keyword.php index 5b6e572..cc4db26 100644 --- a/Source/BusinessClass/Keyword.php +++ b/Source/BusinessClass/Keyword.php @@ -2,9 +2,19 @@ namespace BusinessClass; +/** + * Définit une catégorie associable à une réponse. + */ class Keyword { + /** + * @var int + */ private int $id; + + /** + * @var string + */ private string $word; /** diff --git a/Source/BusinessClass/ListBoxQuestion.php b/Source/BusinessClass/ListBoxQuestion.php index c01c514..31a4809 100644 --- a/Source/BusinessClass/ListBoxQuestion.php +++ b/Source/BusinessClass/ListBoxQuestion.php @@ -2,6 +2,9 @@ namespace BusinessClass; +/** + * Définit une question avec plusieurs réponse mais une seule possible. + */ class ListBoxQuestion extends BoxQuestion { public function __construct() @@ -22,11 +25,22 @@ class ListBoxQuestion extends BoxQuestion } + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ public function responseStrategy(): void { echo "Implement responseStrategy() method."; } + + /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * + * @return string + */ public function printStrategy(): string { $id = $this->getId(); diff --git a/Source/BusinessClass/Question.php b/Source/BusinessClass/Question.php index 67dd266..ae9044c 100644 --- a/Source/BusinessClass/Question.php +++ b/Source/BusinessClass/Question.php @@ -2,11 +2,22 @@ namespace BusinessClass; +/** + * Définit une question. + */ abstract class Question implements IResponseProcessingStrategy, IPrintQuestionStrategy { + /** + * @var int + */ private int $id; + + /** + * @var string + */ private string $content; + /** * @param int $id * @param string $content @@ -17,8 +28,20 @@ abstract class Question implements IResponseProcessingStrategy, IPrintQuestionSt $this->content = $content; } + + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ abstract public function responseStrategy(); + + /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * + * @return string + */ abstract public function printStrategy(): string; /** diff --git a/Source/BusinessClass/Response.php b/Source/BusinessClass/Response.php index 74b05ee..27de529 100644 --- a/Source/BusinessClass/Response.php +++ b/Source/BusinessClass/Response.php @@ -2,11 +2,29 @@ namespace BusinessClass; +/** + * Définit une possibilité de réponse à une question. + */ class Response { + /** + * @var int + */ private int $id; + + /** + * @var string + */ private string $date; + + /** + * @var string + */ private string $titleForm; + + /** + * @var array + */ private array $questionsResponses; /** diff --git a/Source/BusinessClass/TextQuestion.php b/Source/BusinessClass/TextQuestion.php index da01010..039024e 100644 --- a/Source/BusinessClass/TextQuestion.php +++ b/Source/BusinessClass/TextQuestion.php @@ -2,6 +2,9 @@ namespace BusinessClass; +/** + * Définit une question qui propose d'écrire du texte en guise de réponse + */ class TextQuestion extends Question { /** @@ -13,12 +16,19 @@ class TextQuestion extends Question parent::__construct($id, $content); } + /** + * Permet de définir la manière donc la réponse doit être traitée + * + * @return void + */ public function responseStrategy(): void { echo "Implement responseStrategy() method."; } /** + * Permet de définir la manière dont la question doit s'afficher en HTML. + * * @return string */ public function printStrategy(): string diff --git a/Source/Config/Autoload.php b/Source/Config/Autoload.php index 72c9ecb..19baebe 100644 --- a/Source/Config/Autoload.php +++ b/Source/Config/Autoload.php @@ -1,9 +1,18 @@ addQuestion(); - $categories = (new ModelAdmin())->getCategories(); - $questionContent = $_POST['question']; $type = $_POST['type']; - - if(strcmp($type, "BusinessClass\TextQuestion") == 0) - { + if(strcmp($type, "BusinessClass\TextQuestion") == 0) { $this->goToAdminPage(); - } - else - { + } else { + $idQuestion = (new ModelAdmin())->addQuestion(); + $categories = (new ModelAdmin())->getCategories(); + $questionContent = $_POST['question']; + global $rep, $views; require_once($rep.$views['possibleResponsesForm']); } + } - } + /** + * Ajoute une possibilité de réponse à une question, on assige également cette réponse + * à des catégories. On propose ensuite à l'utilisateur de continuer l'ajout d'autre réponses. + * + * @return void + */ public function addResponse(): void { (new ModelAdmin())->addResponse(); - - global $rep, $views; - $idQuestion = $_POST['idQuestion']; $categories = (new ModelAdmin())->getCategories(); + $idQuestion = $_POST['idQuestion']; $questionContent = $_POST['question']; $type = $_POST['type']; + global $rep, $views; require_once($rep.$views['continue']); } + + /** + * Permet de proposer à l'utiliser de continuer ou non à ajouter des possibilités de réponses à l'aide + * de la fonction addResponse(). Si non, il retourne à la page d'admnistration. + * + * @return void + */ public function continueResponse(): void { - global $rep, $views; - $choose = $_POST['choose']; if($choose == "Oui") { $idQuestion = $_POST['idQuestion']; $categories = (new ModelAdmin())->getCategories(); $questionContent = $_POST['question']; $type = $_POST['type']; + global $rep, $views; require_once($rep.$views['possibleResponsesForm']); - } - else { + } else { $this->goToAdminPage(); } } + + /** + * Permet de créer un nouveau formulaire avec un titre et une description. + * + * @return void + */ public function createForm(): void { (new ModelAdmin())->createForm(); } + + /** + * Permet de naviguer jusqu'à la page d'admninistration principale. On retrouve la gestion + * des données de notre application + * + * @return void + */ public function goToAdminPage(): void { - global $rep, $views; - $categories = (new ModelAdmin())->getCategories(); $questions = (new ModelAdmin())->getQuestions(); - + global $rep, $views; require_once($rep.$views['admin']); } + + /** + * Permet d'ajouter une catégories (mot-clef) à notre application + * + * @return void + */ public function addKeyword(): void { (new ModelAdmin())->addKeyword(); diff --git a/Source/Controller/ControllerCandidate.php b/Source/Controller/ControllerCandidate.php index 016a017..1398c21 100644 --- a/Source/Controller/ControllerCandidate.php +++ b/Source/Controller/ControllerCandidate.php @@ -4,8 +4,17 @@ namespace Controller; use Model\ModelCandidate; +/** + * Permet de controller les réponses à fournir en fonction des actions passer dans l'URL + * par l'utilisateur + */ class ControllerCandidate { + /** + * Permet de naviguer jusqu'au formulaire. + * + * @return void + */ public function goToForm(): void { global $rep, $views; @@ -14,6 +23,11 @@ class ControllerCandidate require_once($rep.$views['form']); } + /** + * Permet de finaliser la saisie du formulaire et de le soumettre. + * + * @return void + */ public function submitForm(): void { (new ModelCandidate())->submitForm(); diff --git a/Source/Controller/FrontController.php b/Source/Controller/FrontController.php index b85279c..dec9e49 100644 --- a/Source/Controller/FrontController.php +++ b/Source/Controller/FrontController.php @@ -5,8 +5,15 @@ namespace Controller; use Exception; use PDOException; +/** + * Permet de gérer l'appel des controllers en fonction de l'action et du rôle de l'utilisateur + */ class FrontController { + /** + * Définit le comportement de la classe à sa création, on appelle le bon controller en fonction de l'action + * et du rôle de la personne qui souhaite réaliser cette action (utilisateur, administrateur...). + */ public function __construct() { $listControllers = array("\\Controller\\ControllerCandidate", "\\Controller\\ControllerAdmin"); diff --git a/Source/Model/Factory.php b/Source/Model/Factory.php index 1952aba..60093bf 100644 --- a/Source/Model/Factory.php +++ b/Source/Model/Factory.php @@ -4,10 +4,29 @@ namespace Model; use BusinessClass\Question; +/** + * Décrit les fonctionnalités principale d'une frabique + */ abstract class Factory { + /** + * Permet de créer un objet grâce au retour d'une Gateway. + * + * @param array $results + * + * @return array + */ abstract public function create(array $results): array; + + /** + * Permet de récupérer les objets créer par la fonction create(). + * + * @param array $results + * @param string $type + * + * @return array + */ public static function getBuiltObjects(array $results, string $type): array { $type = "\\Model\\Factory" . $type; diff --git a/Source/Model/FactoryQuestion.php b/Source/Model/FactoryQuestion.php index 9dda457..cc82f63 100644 --- a/Source/Model/FactoryQuestion.php +++ b/Source/Model/FactoryQuestion.php @@ -5,8 +5,19 @@ namespace Model; use BusinessClass\Question; use BusinessClass\TextQuestion; +/** + * Décrit une fabrique de questions + */ class FactoryQuestion extends Factory { + /** + * Permet de créer une liste de question en fonction du retour d'une gateway + * passer en paramètre. On prend en compte les différents type de question. + * + * @param array $results + * + * @return array + */ public function create(array $results): array { $questions = []; diff --git a/Source/Model/ModelAdmin.php b/Source/Model/ModelAdmin.php index 9c54a69..44b6ec2 100644 --- a/Source/Model/ModelAdmin.php +++ b/Source/Model/ModelAdmin.php @@ -7,39 +7,18 @@ use API\script\Gateway\GatewayKeyword; use API\script\Gateway\GatewayQuestion; use BusinessClass\Form; +/** + * Permet de développer les fonctions appelées par le controllerAdmin pour gérer + * les actions de l'administrateur + */ class ModelAdmin { - /*public function addQuestion(int|null $id): void - { - $questionContent = $_POST['question']; - $type = $_POST['type']; - $responses = $_POST['responses']; - $categories = $_POST['categories']; - - $responses = explode(";", $responses); - array_pop($responses); - $categories = explode(";", $categories); - - $tmp = []; - foreach ($categories as $category) { - $tmp[] = explode(",", $category); - } - $categories = $tmp; - array_pop($categories); - - if (strcmp($type, "BusinessClass\TextQuestion") == 0) { - $question = new $type($questionContent, 0); - } else { - $question = new $type($responses, $questionContent, $categories, 0); - } - - - $form = (new GatewayForm())->getForm(); - if (!empty($form)) { - (new GatewayQuestion())->insertQuestion($question, $form[0]['id']); - } - }*/ - + /** + * 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 + */ public function addQuestion(): int { $questionContent = $_POST['question']; @@ -55,6 +34,12 @@ class ModelAdmin return -1; } + + /** + * Permet d'ajouter une possibilité de réponse à une question en l'assignant à des catégories. + * + * @return void + */ public function addResponse(): void { $idQuestion = $_POST['idQuestion']; @@ -63,6 +48,12 @@ class ModelAdmin (new GatewayQuestion())->insertResponseInQuestion($response, $categories, $idQuestion); } + + /** + * Permet de créer un nouveau formulaire en précisant son titre et sa description. + * + * @return void + */ public function createForm(): void { if (empty((new GatewayForm())->getForm())) { @@ -71,12 +62,24 @@ class ModelAdmin } } + + /** + * Permet d'ajouter une nouvelle catégorie (mot-clef) + * + * @return void + */ public function addKeyword(): void { $keyword = $_POST['keyword']; (new GatewayKeyword())->insertKeyword($keyword); } + + /** + * Permet de récupérer toutes les catégories existantes. + * + * @return array + */ public function getCategories(): array { $categories = []; @@ -86,6 +89,12 @@ class ModelAdmin return $categories; } + + /** + * Permet de récupérer toutes les questions existantes. + * + * @return array + */ public function getQuestions(): array { $idForm = (new GatewayForm())->getForm()[0]["id"]; diff --git a/Source/Model/ModelCandidate.php b/Source/Model/ModelCandidate.php index 0bacf37..962e17b 100644 --- a/Source/Model/ModelCandidate.php +++ b/Source/Model/ModelCandidate.php @@ -6,8 +6,17 @@ use API\script\Gateway\GatewayForm; use API\script\Gateway\GatewayListResponseOfCandidate; use API\script\Gateway\GatewayQuestion; +/** + * Permet de développer les fonctions appelées par le controllerCandidate pour gérer + * les actions de l'utilisateur + */ class ModelCandidate { + /** + * Permet de soumettre et d'envoyer la réponse à un formulaire. + * + * @return void + */ public function submitForm(): void { $answersAndCategories = $_POST['answers']; @@ -29,6 +38,15 @@ class ModelCandidate (new GatewayListResponseOfCandidate())->insertListResponsesOfCandidate($id, $answer, $category, $titleForm); } + + /** + * 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 les traduits en code HTML puis on le retourne. On utilise une Factory + * pour récupèrer les questions. + * + * @return string + */ public function getForm(): string { $form = (new GatewayForm())->getForm(); @@ -42,7 +60,6 @@ class ModelCandidate $questions = Factory::getBuiltObjects($questionsTab, "Question"); - $html = "

$title

\n

$description

\n diff --git a/Source/Views/JS/constant.js b/Source/Views/JS/constant.js deleted file mode 100644 index 8b13789..0000000 --- a/Source/Views/JS/constant.js +++ /dev/null @@ -1 +0,0 @@ - diff --git a/Source/Views/JS/form_category.js b/Source/Views/JS/form_category.js index c39a6da..7d9679f 100644 --- a/Source/Views/JS/form_category.js +++ b/Source/Views/JS/form_category.js @@ -1,3 +1,7 @@ +/** + * Permet d'afficher la liste des catégories en fonction + * du choix de l'utilisateur (lorsqu'il clique sur le bouton) + */ function printCategories() { const printCategoryButton = document.querySelector('#printCategory'); const ul = document.querySelector("#listCategories"); diff --git a/Source/Views/JS/form_question.js b/Source/Views/JS/form_question.js index 5c10b26..dac4e7a 100644 --- a/Source/Views/JS/form_question.js +++ b/Source/Views/JS/form_question.js @@ -1,3 +1,7 @@ +/** + * Permet d'afficher ou non la liste des questions en fonction + * du choix de l'utilisateur. (lorsqu'il clique sur le bouton) + */ function printQuestion() { const printQuestionButton = document.querySelector('#printQuestion'); const ul = document.querySelector("#listQuestions"); @@ -11,6 +15,11 @@ function printQuestion() { } } + +/** + * Permet d'afficher le formulaire permettant d'ajouter une question + * si l'utilisateur clique sur le bouton. + */ function addQuestion() { const printAddQuestionFormButton = document.querySelector('#addNewQuestion'); const form = document.querySelector('#addQuestionForm');