Commit 918d4e21 authored by Matthieu FAURE's avatar Matthieu FAURE

Merge branch '2-creation-du-theme-enfant' into 'master'

Resolve "Création du thème enfant"

Closes #2

See merge request !1
parents 3403f184 5e704d10
//liste des blocs qui peuvent être affichés / cachés
var blocks = ["link", "paraSecondSelection", "cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"];
var maxCotisation = 12000;
function displayMask(display) {
//fonction qui affiche / cache les formulaires / informations en fonction des données entrées dans les formulaires
for (var h = 0; h < blocks.length; h++) {
if (isWordIn(blocks[h], display)) {
document.getElementById(blocks[h]).style.display = "block";
} else {
document.getElementById(blocks[h]).style.display = "none";
}
}
}
function displayMaskOptions(display) {
//sert à afficher / cacher les options du 2e select menu
var toutesLesOptions = document.getElementsByName("optionSelect2");
for (var j = 0; j < toutesLesOptions.length; j++) {
//boucle for qui va parcourir la liste des classes des options disponibles
if (display === toutesLesOptions[j].getAttribute("class")) {
//si l'element en cours est celui de la classe recherchée
console.log(display + "===" + toutesLesOptions[j].getAttribute("class"));
if (toutesLesOptions[j].getAttribute("value") === "none") {
toutesLesOptions[j].selected = true;
}
toutesLesOptions[j].hidden = false;
} else {
console.log(display + "=/=" + toutesLesOptions[j].getAttribute("class"));
toutesLesOptions[j].hidden = true;
}
}
}
function firstAction() {
//fonction effectuée lorsque le premier select est validé
//on recup ce qui a été cliqué
var e = document.getElementById("firstSelect");
var strUser = e.options[e.selectedIndex].value;
//on reagit en fonction
//si il a cliqué sur individu, redirigé vers helloasso
if (strUser === "Individu") {
linkRedirection("https://helloasso.com", "Redirection vers HelloAsso");
displayMask(["link"]);
}
//si il a cliqué sur association
else if (strUser === "Association") {
setCotisation("Association");
displayMask(["cotisation", "informationsCollectivite", "boutonEnvoyer"]);
document.getElementById("secondSelection").required = false;
setEPCIRequired(false);
} else if (strUser === "EPCIMutualisant") {
//formulaire contenant la formule spécifique à EPCI mutualisant
displayMask(["formulaireEPCIMutualisant"]);
setEPCIRequired(true);
} else if (strUser === "none") {
//premier choix avec des tirets
displayMask([""]);
}
//si il a cliqué sur autre chose : on cherche à connaitre la taille de la collectivité, on affiche le 2e select
else {
displayMaskOptions(strUser);
document.getElementById("secondSelection").required = true;
displayMask(["paraSecondSelection"]);
setEPCIRequired(false);
}
}
function isWordIn(word, list) {
//le word est il contenu dans list ?
for (a = 0; a < list.length; a++) {
if (word === list[a]) {
return true
}
}
return false
}
function linkRedirection(link, title) {
//définit le lien de redirection et son titre
document.getElementById("linkRedirection").setAttribute("href", link);
document.getElementById("linkRedirection").setAttribute("title", title);
}
function prepareDocument() {
//prépare la page html en ajoutant les event listener
displayMask([""]);
document.getElementById("firstSelect").addEventListener("change", firstAction, false);
document.getElementById("boutonValiderNombresEPCI").addEventListener("click", traitementEPCIMutualisant, false);
document.getElementById("secondSelection").addEventListener("change", secondAction, false);
setCotisation("");
//si le formulaire a échoué, il y a probablement des zones à afficher en fonction de ce qui a été rempli
var choiceType = document.getElementById("ancienSelectType").getAttribute("value");
if (choiceType.length > 0) {
var listOfFirstOptions = document.getElementsByClassName("optionFirstSelect");
for (var a = 0; a < listOfFirstOptions.length; a++) {
if (listOfFirstOptions[a].getAttribute("value") === choiceType) {
listOfFirstOptions[a].selected = true;
break;
}
}
firstAction();
if (choiceType === "EPCIMutualisant") {
traitementEPCIMutualisant();
} else {
var choiceSize = document.getElementById("ancienSelectSize").getAttribute("value");
if (choiceSize.length > 0 && choiceSize !== "none") {
var listOfSizeOptions = document.getElementsByClassName(choiceType);
for (var b = 0; b < listOfSizeOptions.length; b++) {
if (listOfSizeOptions[b].getAttribute("value") === choiceSize) {
listOfSizeOptions[b].selected = true;
break;
}
}
secondAction();
}
}
}
var choicePeriod = document.getElementById("ancienSelectPeriod").getAttribute("value");
var listOfPeriodOptions = document.getElementsByClassName("optionPeriod");
for (var c = 0; c < listOfPeriodOptions.length; c++) {
if (listOfPeriodOptions[c].getAttribute("value") === choicePeriod) {
listOfPeriodOptions[c].selected = true;
}
}
}
function secondAction() {
//fonction exécutée lorsque le 2e select est cliqué
var e = document.getElementById("secondSelection");
if (e.options[e.selectedIndex].value !== "none") {
//s'il a sélectionné autre chose que les tirets
var selectedTranch = e.options[e.selectedIndex].getAttribute("id");
setCotisation(selectedTranch);
displayMask(["paraSecondSelection", "cotisation", "informationsCollectivite", "boutonEnvoyer"]);
} else {
displayMask(["paraSecondSelection"]);
}
}
function setCotisation(id, x = 0) {
//définit la cotisation à afficher, l'option x sert uniquement pour le tarif EPCI mutualisant qui varie.
var paragraphCotList = document.getElementsByClassName("PCOT");
var research = "PCOT-" + id;
for (var b = 0; b < paragraphCotList.length; b++) {
if (paragraphCotList[b].getAttribute("id") === research) {
console.log(paragraphCotList[b].getAttribute("id") + "===" + research);
paragraphCotList[b].style.display = "block";
if (x > 0) {
document.getElementById("montantCotisation").innerHTML = x;
}
} else {
paragraphCotList[b].style.display = "none";
console.log(paragraphCotList[b].getAttribute("id") + "=/=" + research);
}
}
}
function setEPCIRequired(boolean) {
//le formulaire EPCI est il requis ? cela varie selon les choix faits par l'utilisateur
document.getElementById("nombreHabitantsEPCI").required = boolean;
document.getElementById("nombreCommunesMembresEPCI").required = boolean;
}
function traitementEPCIMutualisant() {
//lorsque l'utilisateur valide les 2 nombres entrés pour l'EPCI, les traitements nécessaires sont ici
var nombreHabitants = document.getElementById("nombreHabitantsEPCI").value;
var nombreCommunesMembres = document.getElementById("nombreCommunesMembresEPCI").value;
if (nombreHabitants !== "") {
if (nombreCommunesMembres !== "") {
var resultat = (0.035 * nombreHabitants) + (15 * nombreCommunesMembres) + 1200;
resultat = Math.round(resultat);
//cette fonction arrondit le nombre en fonction du nombre après la virgule.
//exemple :
// Math.round(20,4999) donnera 20
// Math.round(20,5) donnera 21
if (resultat > maxCotisation) {
//valeur fixée en haut du document
resultat = maxCotisation;
}
setCotisation("EPCIMutualisant", resultat);
displayMask(["cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"]);
}
}
}
<?php
$errors = array(
//Liste des éléments pouvant avoir une erreur
"first selection" => "",
"second Selection" => "",
"EPCI com" => "",
"EPCI hab" => "",
"nom" => "",
"adresse" => "",
"CP" => "",
"ville" => "",
"tel" => "",
"site" => "",
"periode" => "",
"siret" => "",
"numeroEngagement" => "",
"code" => ""
);
//le dossier où se trouvent les fichiers
$workingDirectory = $_SERVER["CONTEXT_DOCUMENT_ROOT"] . '/wp-content/themes/twentyseventeen-child/twentynineteen-child/';
$grillePath = $workingDirectory . 'grille.csv';
$periodSelectionPath = $workingDirectory . "periodSelection.php";
$JSPath = '/wp-content/themes/twentyseventeen-child/twentynineteen-child/adhesionForm.js';
$debug_mode = false;
$resultat = false;
function tryToEcho($var)
{
if (isset($_POST[$var])) {
echo $_POST[$var];
}
}
function tryToSetInputSelect($key, $value)
{
//fonction utilisée pour définir l'option sélectionnée lorsque l'envoi du formulaire a échoué.
if (isset($_POST[$key])) {
if ($_POST[$key] == $value) {
echo "selected";
}
}
}
function tryToShowError($var)
{
global $errors;
if (strlen($errors[$var]) > 0) {
echo "<p class='error'> " . $errors[$var] . "</p>";
}
}
$numberOfErrors = 0;
if (isset($_POST)) {
if (isset($_POST["firstSelection"])) {
include "traitementAdhesion.php";
if ($debug_mode) {
echo "<br> début du traitement <br>";
}
$errors = traitement($_POST, $errors);
if ($debug_mode) {
echo "<br> fin du traitement <br>";
}
foreach ($errors as $key => $value) {
if ($debug_mode) {
echo $key . " : " . $value . "<br>";
}
if (strlen($value) > 0) {
$numberOfErrors += 1;
}
}
if ($debug_mode) {
echo "<br> nombre d'erreurs : " . $numberOfErrors . " <br>";
var_dump($errors);
}
if ($numberOfErrors == 0) {
sendAdhesionMail($_POST);
header("Location:");
}
}
}
?>
<html lang="fr">
<head>
<title>Renouvellement d'adhésion</title>
<meta charset="UTF-8">
<script type="text/javascript" src="<?php echo $JSPath ?>"></script>
</head>
<body>
<?php
/*
Template Name: Test
*/
get_header();
include_once $periodSelectionPath;
$fichier = fopen($grillePath, 'r');
$ligne = fgetcsv($fichier, 1024, ";");
//on effectue de nouveau cette instruction pour sauter les titres du tableau
$ligne = fgetcsv($fichier, 1024, ";");
//------------------------Variables-------------------
$listeGrilleEntiere = []; //contiendra l'intégralité des données dans grille.csv
$textsSelectMenu = []; //contiendra les textes du premier select option gérés automatiquement
$textsSelectMenuExtended = []; //même rôle qu'au dessus mais en ajoutant les options gérées automatiquement + manuellement
$classSelectMenu = []; //contiendra les classes des option menu gérés automatiquement
$classSelectMenuExtended = []; //contiendra les classes des option menu gérés automatiquement + manuellement
function createFirstSelectionList($liste)
{
//fonction qui crée la première liste de sélection sans modifier les textes
$listeTempo = [];
for ($a = 0; $a < count($liste); $a++) {
$mot = $liste[$a][0];
if (!isWordIn($mot, $listeTempo)) {
$listeTempo[] = $mot;
}
}
return $listeTempo;
}
function createNameClass($variable)
{
//fonction qui nettoie la chaine pour pouvoir l'utiliser en tant que nom de classe
$chars = array(
//tous les caractères susceptibles d'être remplacés
"é" => "e",
"è" => "e",
"ê" => "e",
"ë" => "e",
"à" => "a",
"â" => "a",
"ù" => "u",
"û" => "u",
"î" => "i",
"ï" => "i",
"ç" => "c",
"É" => "e",
"È" => "e",
"Ê" => "e",
"Ë" => "e",
"À" => "a",
"Â" => "a",
"Ù" => "u",
"Û" => "u",
"Î" => "i",
"Ï" => "i",
"Ç" => "c",
" " => "_"
);
$variable = strtr($variable, $chars);
return $variable;
}
function createSizeSelectList($liste)
{
//fonction qui crée la liste des classes qui sert pour le 2e select
$resultList = [];
for ($a = 0; $a < count($liste); $a++) {
$mot = createNameClass($liste[$a][0]);
if (!isWordIn($mot, $resultList)) {
$resultList[] = $mot;
}
}
return $resultList;
}
function isWordIn($word, $list)
{
//on vérifie si word est contenu dans list
for ($a = 0; $a < count($list); $a++) {
if ($word == $list[$a]) {
return true;
}
}
return false;
}
while ($ligne) {
//boucle qui va récupérer tout le contenu du fichier pour le stocker dans listeGrilleEntiere
$listeGrilleEntiere[] = ($ligne);
$ligne = fgetcsv($fichier, 1024, ";");
}
fclose($fichier);
//on crée la première liste qui gère les textes de la première liste, avec accents et espaces
$textsSelectMenu = createFirstSelectionList($listeGrilleEntiere);
//on ajoute "association", epci mutualisant et "individu" qui possèdent un traitement différent
$textsSelectMenuExtended = $textsSelectMenu;
$textsSelectMenuExtended[] = ("Association");
$textsSelectMenuExtended[] = ("Individu");
$textsSelectMenuExtended[] = ("EPCI Mutualisant");
//on crée la liste pour le 2e select qui contient le nom des classes gérés automatiquement
$classSelectMenu = createSizeSelectList($listeGrilleEntiere);
//classes gérées automatiquement + manuellement
$classSelectMenuExtended = $classSelectMenu;
$classSelectMenuExtended[] = ("Association");
$classSelectMenuExtended[] = ("Individu");
$classSelectMenuExtended[] = ("EPCIMutualisant");
//on trie par ordre alphabétique
sort($textsSelectMenu);
sort($textsSelectMenuExtended);
sort($classSelectMenu);
sort($classSelectMenuExtended);
?>
<h1>Formulaire de renouvellement d'adhésion</h1>
<p>
<?php
if ($numberOfErrors == 1) {
echo "Une erreur est survenue lors de l'envoi du formulaire. Veuillez vérifier vos informations";
} elseif ($numberOfErrors > 1) {
echo "Plusieurs erreurs sont survenues lors de l'envoi du formulaire. Veuillez vérifier vos informations";
}
?>
</p>
<form action="" method="post">
<p>
<input id="ancienSelectType" type="hidden" name="ancienSelectType" value="<?php tryToEcho("firstSelection") ?>">
<input id="ancienSelectSize" type="hidden" name="ancienSelectSize"
value="<?php tryToEcho("secondSelection") ?>">
<input id="ancienSelectPeriod" type="hidden" name="ancienSelectPeriod"
value="<?php tryToEcho("periodeAdhesionCollectivite") ?>">
<label for="firstSelect">Veuillez sélectionner le type de collectivité :</label>
<select id="firstSelect" required="" name="firstSelection">
<option value="none">---</option>
<?php
//on génère les options en fonction du fichier et des valeurs par défaut.
for ($i = 0; $i < count($textsSelectMenuExtended); $i++) {
?>
<option class="optionFirstSelect"
value="<?php echo $classSelectMenuExtended[$i] ?>"><?php echo $textsSelectMenuExtended[$i] ?></option>
<?php
}
?>
</select>
<?php tryToShowError("first selection"); ?>
</p>
<div id="link">
<a href="contact.php" id="linkRedirection" title="Page par défaut">Valider</a>
</div>
<div id="formulaireEPCIMutualisant">
<label for="nombreHabitantsEPCI">Nombre d'habitants de l'EPCI :</label>
<input type="number" name="nombreHabitantsEPCI" id="nombreHabitantsEPCI"
value="<?php tryToEcho("nombreHabitantsEPCI"); ?>"><br>
<?php tryToShowError("EPCI com"); ?>
<label for="nombreCommunesMembresEPCI">Nombre de communes membres :</label>
<input type="number" name="nombreCommunesMembresEPCI" id="nombreCommunesMembresEPCI"
value="<?php tryToEcho("nombreCommunesMembresEPCI"); ?>"><br>
<?php tryToShowError("EPCI hab"); ?>
<input type="button" value="Valider" id="boutonValiderNombresEPCI">
</div>
<p id="paraSecondSelection">
<label for="secondSelection">Veuillez sélectionner la taille :</label>
<select id="secondSelection" name="secondSelection">
<?php
$classInTreatment = "";
$counter = 1;
for ($a = 0; $a < count($listeGrilleEntiere); $a++) {
//boucle qui génère les options du second select
//on récupère la ligne
$actualLine = $listeGrilleEntiere[$a];
$actualClass = createNameClass($actualLine[0]);
//on vérifie si on change de classe ou non pour remettre le compteur à 1
if ($classInTreatment != $actualClass) {
$counter = 1;
$classInTreatment = $actualClass;
?>
<option class="<?php echo $classInTreatment ?>" value="none" name="optionSelect2">---</option>
<?php
}
//la tranche pour la cotisation
$tranch = $classInTreatment . "-T" . $counter;
?>
<option class="<?php echo $classInTreatment ?>" id="<?php echo $tranch ?>"
value="<?php echo $actualLine[1] ?>" name="optionSelect2"><?php echo $actualLine[1] ?></option>
<?php
$counter += 1;
}
?>
</select>
<?php tryToShowError("second Selection"); ?>
</p>
<div id="cotisation">
<?php
$classInTreatment = "";
$counter = 1;
for ($a = 0; $a < count($listeGrilleEntiere); $a++) {
//boucle qui génère les montants des cotisations
//on récupère la ligne
$actualLine = $listeGrilleEntiere[$a];
$actualClass = createNameClass($actualLine[0]);
//on vérifie si on change de classe ou non pour remettre le compteur à 1
if ($classInTreatment != $actualClass) {
$counter = 1;
$classInTreatment = $actualClass;
}
//la tranche pour la cotisation
$id = "PCOT-" . $classInTreatment . "-T" . $counter;
?>
<p id="<?php echo $id ?>" class="PCOT">Montant de la cotisation : <?php echo $actualLine[2] ?></p>
<?php
$counter += 1;
}
?>
<p id="PCOT-EPCIMutualisant" class="PCOT">Montant de la cotisation : <span id="montantCotisation"></span></p>
<p id="PCOT-Association" class="PCOT">Montant de la cotisation : 15€</p>
</div>
<div id="informationsCollectivite">
<h3>Informations obligatoires :</h3>
<label for="nomCollectivite">Nom de la collectivité :</label>
<input type="text" name="nomCollectivite" id="nomCollectivite" required=""
value="<?php tryToEcho("nomCollectivite"); ?>"><br>
<?php tryToShowError("nom"); ?>
<label for="adresseCollectivite">Adresse :</label>
<input type="text" name="adresseCollectivite" id="adresseCollectivite" required=""
value="<?php tryToEcho("adresseCollectivite"); ?>"><br>
<?php tryToShowError("adresse"); ?>
<label for="codePostalCollectivite">Code postal :</label>
<input type="text" name="codePostalCollectivite" id="codePostalCollectivite" required=""
value="<?php tryToEcho("codePostalCollectivite"); ?>"><br>
<?php tryToShowError("CP"); ?>
<label for="villeCollectivite">Ville :</label>
<input type="text" name="villeCollectivite" id="villeCollectivite" required=""
value="<?php tryToEcho("villeCollectivite"); ?>"><br>
<?php tryToShowError("ville"); ?>
<label for="telCollectivite">Téléphone :</label>
<input type="tel" name="telCollectivite" id="telCollectivite" required=""
value="<?php tryToEcho("telCollectivite"); ?>"><br>
<?php tryToShowError("tel"); ?>
<label for="siteCollectivite">Site internet :</label>
<input type="url" name="siteCollectivite" id="siteCollectivite" required=""
value="<?php tryToEcho("siteCollectivite"); ?>"><br>
<?php tryToShowError("site"); ?>
<label for="periodeAdhesionCollectivite">Période d'adhésion :</label>
<select name="periodeAdhesionCollectivite" id="periodeAdhesionCollectivite" required="">
<option class="optionPeriod" value="" selected>---</option>
<?php generateDates(); ?>
<