Merge branch 'JS_addQuestion'

# Conflicts:
#	Source/Config/Autoload.php
LoginModification
alexi 2 years ago
commit f2853c65f6

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

@ -17,10 +17,8 @@ class GatewayQuestion
$this->connection = connect();
}
public function insertQuestion(Question $question, int $idForm): void
public function addQuestion(Question $question, int $idForm): int
{
$gatewayPossibleResponse = new GatewayPossibleResponse();
$query = "INSERT INTO Question(content, type, form) VALUES(:content, :type, :form)";
$this->connection->executeQuery($query, array(
':content' => array($question->getContent(), PDO::PARAM_STR),
@ -28,29 +26,27 @@ class GatewayQuestion
':form' => array($idForm, PDO::PARAM_INT)
));
$idQuestion = $this->connection->lastInsertId();
if (get_class($question) != TextQuestion::class) {
$listPossibleResponse = $question->getPossibleResponses();
for ($i = 0; $i < count($listPossibleResponse); $i++) {
return $this->connection->lastInsertId();
}
$idPossibleResponse = $gatewayPossibleResponse->insertPossibleResponse($listPossibleResponse[$i]);
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)
));
$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 ($question->getCategories()[$i] as $keyword) {
$gatewayForm = new GatewayForm();
$gatewayForm->assignKeywordToQuestion($keyword, $listPossibleResponse[$i], $idQuestion);
}
}
foreach ($categories as $keyword) {
$gatewayForm = new GatewayForm();
$gatewayForm->assignKeywordToQuestion($keyword, $response, $idQuestion);
}
return $idQuestion;
}
public function deleteQuestion(Question $question): void

@ -2,26 +2,54 @@
namespace BusinessClass;
/**
* Définit une question avec plusieurs réponses.
*/
abstract class BoxQuestion extends Question
{
/**
* @var array|mixed
*/
private array $possibleResponses;
private array $categories;
/**
* @param array $possibleResponses
* @param string $content
* @param array $categories
* @param int $id
* @var array|mixed
*/
public function __construct(array $possibleResponses, string $content, array $categories, int $id)
private array $categories;
public function __construct()
{
parent::__construct($id, $content);
$this->categories = $categories;
$this->possibleResponses = $possibleResponses;
$ctp = func_num_args();
$args = func_get_args();
switch($ctp)
{
case 4:
parent::__construct($args[3], $args[1]);
$this->categories = $args[2];
$this->possibleResponses = $args[0];
break;
case 2:
parent::__construct($args[0], $args[1]);
break;
default:
break;
}
}
/**
* 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,13 +2,45 @@
namespace BusinessClass;
/**
* Définit une question à choix multiples.
*/
class CheckBoxQuestion extends BoxQuestion
{
public function __construct()
{
$ctp = func_num_args();
$args = func_get_args();
switch($ctp)
{
case 4:
parent::__construct($args[0], $args[1], $args[2], $args[3]);
break;
case 2:
parent::__construct($args[0], $args[1]);
break;
default:
break;
}
}
/**
* 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,13 +2,45 @@
namespace BusinessClass;
/**
* Définit une question avec plusieurs réponse mais une seule possible.
*/
class ListBoxQuestion extends BoxQuestion
{
public function __construct()
{
$ctp = func_num_args();
$args = func_get_args();
switch($ctp)
{
case 4:
parent::__construct($args[0], $args[1], $args[2], $args[3]);
break;
case 2:
parent::__construct($args[0], $args[1]);
break;
default:
break;
}
}
/**
* 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,23 +2,33 @@
namespace BusinessClass;
/**
* Définit une question qui propose d'écrire du texte en guise de réponse
*/
class TextQuestion extends Question
{
/**
* @param string $content
* @param int $id
*/
public function __construct(string $content, int $id)
public function __construct(int $id, string $content)
{
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

@ -4,33 +4,33 @@ class Autoload
{
private static $instance = null;
public static function charger(): void
public static function charger()
{
if (null !== self::$instance) {
throw new RuntimeException(sprintf('%s is already started', __CLASS__));
throw RuntimeException(sprintf('%s is already started', __CLASS__));
}
self::$instance = new self();
if (!spl_autoload_register(array(self::$instance, 'autoloader'), false)) {
throw new RuntimeException(sprintf('%s : Could not start the autoload', __CLASS__));
throw RuntimeException(sprintf('%s : Could not start the autoload', __CLASS__));
}
}
public static function shutDown(): void
public static function shutDown()
{
if (null !== self::$instance) {
if (!spl_autoload_unregister(array(self::$instance, 'autoloader'))) {
throw new RuntimeException('Could not stop the autoload');
throw RuntimeException('Could not stop the autoload');
}
self::$instance = null;
}
}
private static function autoloader($className): void
private static function autoloader($className)
{
$folder = "./";
$className = ltrim($className, '\\');

@ -3,9 +3,10 @@
$rep = __DIR__ . '/../';
// Vues
$views['form'] = 'Views/HTML/form.php';
$views['admin'] = 'Views/HTML/admin.php';
$views['possibleResponsesForm'] = 'Views/HTML/possibleResponsesForm.php';
$views['continue'] = 'Views/HTML/continue.php';
$emailMaxLength=150;
$pseudoMaxLength=50;

@ -4,24 +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
{
(new ModelAdmin())->addQuestion();
$type = $_POST['type'];
if(strcmp($type, "BusinessClass\TextQuestion") == 0) {
$this->goToAdminPage();
} 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();
$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
{
$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 {
$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
{
$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,15 +5,26 @@ 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 = [];
if ($results[0] != null) {
for ($i = 0; $i < count($results[0]); $i++) {
if (strcmp($results[0][$i]['type'], "BusinessClass\TextQuestion") == 0) {
$questions[] = new TextQuestion($results[0][$i]['content'], $results[0][$i]['id']);
$questions[] = new TextQuestion($results[0][$i]['id'], $results[0][$i]['content']);
} else {
$possiblesResponses = $results[1][$i];
$content = $results[0][$i]['content'];

@ -7,39 +7,53 @@ 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(): void
/**
* 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'];
$type = $_POST['type'];
$responses = $_POST['responses'];
$categories = $_POST['categories'];
$responses = explode(";", $responses);
array_pop($responses);
$categories = explode(";", $categories);
$question = new $type(0, $questionContent);
$tmp = [];
foreach ($categories as $category) {
$tmp[] = explode(",", $category);
$form = (new GatewayForm())->getForm();
if (!empty($form)) {
return (new GatewayQuestion())->addQuestion($question, $form[0]['id']);
}
$categories = $tmp;
array_pop($categories);
if (strcmp($type, "BusinessClass\TextQuestion") == 0) {
$question = new $type($questionContent, 0);
} else {
$question = new $type($responses, $questionContent, $categories, 0);
}
return -1;
}
$form = (new GatewayForm())->getForm();
if (!empty($form)) {
(new GatewayQuestion())->insertQuestion($question, $form[0]['id']);
}
/**
* 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'];
$response = $_POST['response'];
$categories = $_POST['categories'];
(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())) {
@ -48,9 +62,43 @@ 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 = [];
foreach ((new GatewayKeyword())->getAllKeyword() as $category)
$categories[] = $category["word"];
return $categories;
}
/**
* Permet de récupérer toutes les questions existantes.
*
* @return array
*/
public function getQuestions(): array
{
$idForm = (new GatewayForm())->getForm()[0]["id"];
$questionsArray = (new GatewayQuestion())->getAllQuestions($idForm);
return Factory::getBuiltObjects($questionsArray, "Question");
}
}

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

@ -29,3 +29,9 @@ h1 {
padding-left: 3%;
padding-top: 2%;
}
#container {
display: flex;
flex-direction: row;
justify-content: space-around;
}

@ -19,7 +19,7 @@
<img id="logoUCA" src="<?php echo $logoUCA; ?>" height="35px" width="auto" alt="logo UCA">
<h1>Administration</h1>
<h2>Ajouter une catégories :</h2>
<!--
<form method="post">
<label for="keyword">Écrivez la catégorie : </label>
<input id="keyword" name="keyword" type="text" size="50">
@ -27,6 +27,7 @@
<input type="hidden" name="action" value="addKeyword">
</form>
<h2>Ajouter une question :</h2>
<form method="post">
@ -66,7 +67,85 @@
<input type="submit" value="Confirmer">
<input type="hidden" name="action" value="addQuestion">
</form>
-->
<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" style="visibility: hidden">
<?php
foreach ($categories as $category) {
?> <li><?php echo $category; ?></li> <?php
}
?>
</ul>
</div>
<div>
<button id="printQuestion">Les questions ▼</button>
<ul id="listQuestions" style="visibility: hidden">
<?php
foreach ($questions as $question) {
?>
<hr>
<li><?php echo $question->printStrategy(); ?></li>
<?php
}
?>
</ul>
</div>
</div>
<div style="text-align: center">
<button id="addNewQuestion">Ajouter une question ▼</button>
<form id="addQuestionForm" method="post" style="visibility: hidden">
<div id="questionText">
<label for="question">Écrivez la question : </label>
<br>
<input id="question" name="question" type="text" size="100">
</div>
<div>
<br><br>
<label for="type">Séléctionnez le type de question souhaitée :
<br>- Text permet à l'utilisateur d'écrire lui même la réponse.
<br>- ListBox permet à l'utilisateur de choisir une réponse parmi plusieurs possibilités.
<br>- CheckBox permet à l'utilisateur 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>
<script src="Views/JS/form_question.js"></script>
<script>
const printCategoryButton = document.querySelector('#printCategory');
printCategoryButton.addEventListener('click', printCategories);
const printQuestionButton = document.querySelector('#printQuestion');
printQuestionButton.addEventListener('click', printQuestion);
const printFormQuestionButton = document.querySelector('#addNewQuestion');
printFormQuestionButton.addEventListener('click', addQuestion);
</script>
</html>

@ -0,0 +1,87 @@
<!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>
<!--
<form method="post">
<label for="keyword">Écrivez la catégorie : </label>
<input id="keyword" name="keyword" type="text" size="50">
<input type="submit" value="Ajouter">
<input type="hidden" name="action" value="addKeyword">
</form>
<h2>Ajouter une question :</h2>
<form method="post">
<label for="question">Écrivez la question : </label>
<br>
<input id="question" name="question" type="text" size="100">
<br><br>
<label for="type">Séléctionnez le type de question souhaitée :
<br>- Text permet à l'utilisateur d'écrire lui même la réponse.
<br>- ListBox permet à l'utilisateur de choisir une réponse parmi plusieurs possibilités.
<br>- CheckBox permet à l'utilisateur de choisir une ou plusieurs réponses parmi plusieurs possibilités.
</label>
<br>
<select id="type" name="type">
<option value="BusinessClass\ListBoxQuestion">ListBox</option>
<option value="BusinessClass\CheckBoxQuestion">CheckBox</option>
<option value="BusinessClass\TextQuestion">Text</option>
</select>
<br><br>
<label for="responses">Écrivez la liste des réponses possibles en les séparant comme cela :
<br>Réponse1; Réponse2; Réponse3;
</label>
<br>
<input id="responses" name="responses" type="text" size="100">
<br><br>
<label for="categories">Écrivez la liste des catégories associée à chaque question comme cela :
<br>Catégorie1.1,Catégorié1.2; Catégorie2.1; Catégorié3.1,Catégorie3.2,Catégorie3.3;
</label>
<br>
<input id="categories" name="categories" type="text" size="100">
<br><br>
<input type="submit" value="Confirmer">
<input type="hidden" name="action" value="addQuestion">
</form>
-->
<div style="text-align: center">
<h2>Continuer d'ajouter des possibilités de réponses ?</h2>
<form method="post">
<input name="idQuestion" type="hidden" value="<?php echo $idQuestion; ?>">
<input name="question" type="hidden" value="<?php echo $questionContent; ?>">
<input name="type" type="hidden" value="<?php echo $type; ?>">
<input type="submit" name="choose" value="Oui">
<input type="submit" name="choose" value="Non">
<input type="hidden" name="action" value="continueResponse">
</form>
</div>
</body>
</html>

@ -0,0 +1,119 @@
<!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>
<!--
<form method="post">
<label for="keyword">Écrivez la catégorie : </label>
<input id="keyword" name="keyword" type="text" size="50">
<input type="submit" value="Ajouter">
<input type="hidden" name="action" value="addKeyword">
</form>
<h2>Ajouter une question :</h2>
<form method="post">
<label for="question">Écrivez la question : </label>
<br>
<input id="question" name="question" type="text" size="100">
<br><br>
<label for="type">Séléctionnez le type de question souhaitée :
<br>- Text permet à l'utilisateur d'écrire lui même la réponse.
<br>- ListBox permet à l'utilisateur de choisir une réponse parmi plusieurs possibilités.
<br>- CheckBox permet à l'utilisateur de choisir une ou plusieurs réponses parmi plusieurs possibilités.
</label>
<br>
<select id="type" name="type">
<option value="BusinessClass\ListBoxQuestion">ListBox</option>
<option value="BusinessClass\CheckBoxQuestion">CheckBox</option>
<option value="BusinessClass\TextQuestion">Text</option>
</select>
<br><br>
<label for="responses">Écrivez la liste des réponses possibles en les séparant comme cela :
<br>Réponse1; Réponse2; Réponse3;
</label>
<br>
<input id="responses" name="responses" type="text" size="100">
<br><br>
<label for="categories">Écrivez la liste des catégories associée à chaque question comme cela :
<br>Catégorie1.1,Catégorié1.2; Catégorie2.1; Catégorié3.1,Catégorie3.2,Catégorie3.3;
</label>
<br>
<input id="categories" name="categories" type="text" size="100">
<br><br>
<input type="submit" value="Confirmer">
<input type="hidden" name="action" value="addQuestion">
</form>
-->
<div style="text-align: center">
<form method="post">
<input name="idQuestion" type="hidden" value="<?php echo $idQuestion; ?>">
<input name="question" type="hidden" value="<?php echo $questionContent; ?>">
<input name="type" type="hidden" value="<?php echo $type; ?>">
<p>Votre question : <?php echo $questionContent; ?></p>
<br><br>
<label>Entrez une réponse : </label>
<input name="response" type="text" size="50">
<br><br><br>
<label>Séléctionnez les catégories associées à cette réponse : </label>
<br><br>
<?php
foreach ($categories as $category) {
?>
<label><?php echo $category ?></label>
<input type="checkbox" name="categories[]" value="<?php echo $category ?>">
<?php
}
?>
<br><br>
<input type="submit" value="Ajouter la réponse">
<input type="hidden" name="action" value="addResponse">
</form>
</div>
</body>
<script>
let responsesAndCategories = new Map();
function addResponse() {
const response = document.querySelector('#response');
const categories = document.querySelectorAll(".categories");
responsesAndCategories.set(response.value, categories.forEach(category => console.log(category.value)));
}
const addPossiblesResponsesButton = document.querySelector('#addNewResponse');
addPossiblesResponsesButton.addEventListener('click', addResponse);
</script>
</html>

@ -0,0 +1,16 @@
/**
* 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");
if(printCategoryButton.innerText === "Les catégories ▲") {
printCategoryButton.innerText = "Les catégories ▼";
ul.style.visibility = "hidden";
} else {
printCategoryButton.innerText = "Les catégories ▲";
ul.style.visibility = "visible";
}
}

@ -0,0 +1,34 @@
/**
* 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");
if(printQuestionButton.innerText === "Les questions ▲") {
printQuestionButton.innerText = "Les questions ▼";
ul.style.visibility = "hidden";
} else {
printQuestionButton.innerText = "Les questions ▲";
ul.style.visibility = "visible";
}
}
/**
* 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');
if(printAddQuestionFormButton.innerText === "Ajouter une question ▲") {
printAddQuestionFormButton.innerText = "Ajouter une question ▼";
form.style.visibility = "hidden";
} else {
printAddQuestionFormButton.innerText = "Ajouter une question ▲";
form.style.visibility = "visible";
}
}
Loading…
Cancel
Save