add documentation

LoginModification
alexi 2 years ago
parent cbb9677250
commit 8df64ef1e1

@ -1,5 +1,9 @@
<?php
/**
* Permet de choisir quelle Gateway appeller en fonction de la
* requête de notre utilisateur.
*/
class APIController
{
public function __construct()

@ -5,8 +5,14 @@ namespace API\script\Config;
use PDO;
use PDOStatement;
/**
* Définit une connection à la base de données.
*/
class Connection extends PDO
{
/**
* @var PDOStatement
*/
private PDOStatement $stmt;
public function __construct(string $dsn, string $username, string $password)
@ -16,8 +22,11 @@ class Connection extends PDO
}
/** * @param string $query
* @param array $parameters *
/**
* Éxécute une réquête SQL.
*
* @param string $query
* @param array $parameters
* @return bool Returns `true` on success, `false` otherwise
*/
public function executeQuery(string $query, array $parameters = []): bool
@ -30,6 +39,13 @@ class Connection extends PDO
return $this->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();

@ -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;
/**

@ -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();

@ -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
/**

@ -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;
}

@ -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();
}

@ -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;
/**

@ -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();

@ -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;
/**

@ -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;
/**

@ -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

@ -1,9 +1,18 @@
<?php
/**
* Permet de charger automatiquement les pages de notre application.
*/
class Autoload
{
/**
* @var null
*/
private static $instance = null;
/**
* @return void
*/
public static function charger()
{
if (null !== self::$instance) {
@ -18,6 +27,9 @@ class Autoload
}
}
/**
* @return void
*/
public static function shutDown()
{
if (null !== self::$instance) {
@ -30,6 +42,10 @@ class Autoload
}
}
/**
* @param $className
* @return void
*/
private static function autoloader($className)
{
$folder = "./";

@ -2,7 +2,6 @@
$rep = __DIR__ . '/../';
// Vues
$views['form'] = 'Views/HTML/form.php';
$views['admin'] = 'Views/HTML/admin.php';
$views['possibleResponsesForm'] = 'Views/HTML/possibleResponsesForm.php';

@ -4,73 +4,105 @@ namespace Controller;
use Model\ModelAdmin;
/**
* Permet de controller les réponses à fournir en fonction des actions passer dans l'URL
* par l'administrateur
*/
class ControllerAdmin
{
/**
* Ajoute une question grâce à son contenu et son type récupéré dans le tableau $_POST
* Si la question n'est pas une question texte, on appelle un nouveau formulaire permettant
* d'ajouter des réponses prédéfinies à la question.
*
* @return void
*/
public function addQuestion(): void
{
global $rep, $views;
$idQuestion = (new ModelAdmin())->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();

@ -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();

@ -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");

@ -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;

@ -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 = [];

@ -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"];

@ -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 = "
<h1>$title</h1>\n
<h3>$description</h3>\n

@ -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");

@ -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');

Loading…
Cancel
Save