contact.php 16.6 KB
Newer Older
N. Peraldi's avatar
N. Peraldi committed
1
<?php
2 3 4
 /*
 Template Name: Test
 */
N. Peraldi's avatar
N. Peraldi committed
5 6


7
get_header();
N. Peraldi's avatar
N. Peraldi committed
8

9 10
//chemin d'accès de grille.csv
$grillePath = $_SERVER["CONTEXT_DOCUMENT_ROOT"] . '/wp-content/themes/twentyseventeen-child/twentynineteen-child/grille.csv';
N. Peraldi's avatar
N. Peraldi committed
11 12


13
$fichier = fopen($grillePath, 'r');
14
$ligne = fgetcsv($fichier, 1024, ";");
N. Peraldi's avatar
N. Peraldi committed
15 16

//on effectue de nouveau cette instruction pour sauter les titres du tableau
17
$ligne = fgetcsv($fichier, 1024, ";");
18

19
//------------------------Variables-------------------
N. Peraldi's avatar
N. Peraldi committed
20

21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
$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;
N. Peraldi's avatar
N. Peraldi committed
38 39 40
        }
    }

41
    return $listeTempo;
N. Peraldi's avatar
N. Peraldi committed
42 43
}

44 45
function createNameClass($variable)
{
46
    //fonction qui nettoie la chaine pour pouvoir l'utiliser en tant que nom de classe
N. Peraldi's avatar
N. Peraldi committed
47

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
    $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);
81

N. Peraldi's avatar
N. Peraldi committed
82 83 84
    return $variable;
}

85
function createSizeSelectList($liste)
86 87
{
    //fonction qui crée la liste des classes qui sert pour le 2e select
N. Peraldi's avatar
N. Peraldi committed
88
    $resultList = [];
89
    for ($a = 0; $a < count($liste); $a++) {
90 91
        $mot = createNameClass($liste[$a][0]);

N. Peraldi's avatar
N. Peraldi committed
92

N. Peraldi's avatar
N. Peraldi committed
93 94
        if (!isWordIn($mot, $resultList)) {
            $resultList[] = $mot;
N. Peraldi's avatar
N. Peraldi committed
95 96 97 98
        }

    }

N. Peraldi's avatar
N. Peraldi committed
99
    return $resultList;
N. Peraldi's avatar
N. Peraldi committed
100 101 102

}

103 104 105 106 107 108
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;
109 110 111
        }
    }

112
    return false;
113 114
}

115 116 117 118
while ($ligne) {
    //boucle qui va récupérer tout le contenu du fichier pour le stocker dans listeGrilleEntiere
    $listeGrilleEntiere[] = ($ligne);
    $ligne = fgetcsv($fichier, 1024, ";");
N. Peraldi's avatar
N. Peraldi committed
119 120
}

121

N. Peraldi's avatar
N. Peraldi committed
122 123
fclose($fichier);

124 125
//on crée la première liste qui gère les textes de la première liste, avec accents et espaces
$textsSelectMenu = createFirstSelectionList($listeGrilleEntiere);
126

127 128 129 130 131
//on ajoute "association", epci mutualisant et "individu" qui possèdent un traitement différent
$textsSelectMenuExtended = $textsSelectMenu;
$textsSelectMenuExtended[] = ("Association");
$textsSelectMenuExtended[] = ("Individu");
$textsSelectMenuExtended[] = ("EPCI Mutualisant");
132

133
//on crée la liste pour le 2e select qui contient le nom des classes gérés automatiquement
134
$classSelectMenu = createSizeSelectList($listeGrilleEntiere);
135

136 137
//classes gérées automatiquement + manuellement
$classSelectMenuExtended = $classSelectMenu;
138

139 140 141 142 143 144 145 146 147
$classSelectMenuExtended[] = ("Association");
$classSelectMenuExtended[] = ("Individu");
$classSelectMenuExtended[] = ("EPCIMutualisant");

//on trie par ordre alphabétique
sort($textsSelectMenu);
sort($textsSelectMenuExtended);
sort($classSelectMenu);
sort($classSelectMenuExtended);
148 149


150

151
?>
152

153 154 155
<script>
    var secondSelectList = [
        <?php
156

157
        //on génère la variable secondSelectList avec php
158
        for ($a = 0; $a < count($classSelectMenu); $a++) {
159

160 161
            echo "'" . $classSelectMenu[$a] . "'";
            if (($a + 1) < $classSelectMenu) {
162 163 164 165 166 167 168
                echo ",\n";
            }
        }
        ?>

    ];

169

170
    //liste des blocs qui peuvent être affichés / cachés
171
    var blocks = ["link", "paraSecondSelection", "cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"];
172 173


174
    function displayMask(display) {
175
        //fonction qui affiche / cache les formulaires / informations en fonction des données entrées dans les formulaires
176

177 178
        for (var h = 0; h < blocks.length; h++) {
            if (isWordIn(blocks[h], display)) {
179
                document.getElementById(blocks[h]).style.display = "block";
180
            } else {
181
                document.getElementById(blocks[h]).style.display = "none";
182 183 184
            }


185 186
        }
    }
187

188
    function displayMaskOptions(display) {
189
        //sert à afficher / cacher les options du 2e select menu
190

191
        var tousLesElements = undefined;
192 193


194
        for (var j = 0; j < secondSelectList.length; j++) {
195
            //boucle for qui va parcourir la liste des classes des options disponibles
196

197
            if (display === secondSelectList[j]) {
198
                //si l'element en cours est celui de la classe recherchée
199

200
                tousLesElements = document.getElementsByClassName(display);
201

202 203
                for (var g = 0; g < tousLesElements.length; g++) {
                    if (g === 0) {
204
                        //on passe la première option disponible en selected pour éviter un bug d'affichage
205
                        tousLesElements[g].selected = true;
206 207
                    }

208
                    tousLesElements[g].hidden = false;
209 210 211


                }
212
            } else {
213 214


215
                tousLesElements = document.getElementsByClassName(secondSelectList[j]);
216

217
                for (var h = 0; h < tousLesElements.length; h++) {
218 219
                    tousLesElements[h].hidden = true;
                }
220
            }
221
        }
222

223
    }
224

225 226
    function firstAction() {
        //fonction effectuée lorsque le premier select est validé
227

228 229 230
        //on recup ce qui a été cliqué
        var e = document.getElementById("firstSelect");
        var strUser = e.options[e.selectedIndex].value;
231

232
        //on reagit en fonction
233

234
        //si il a cliqué sur individu, redirigé vers helloasso
235 236
        if (strUser === "Individu") {
            linkRedirection("https://helloasso.com", "Redirection vers HelloAsso");
237 238
            displayMask(["link"]);
        }
239

240
        //si il a cliqué sur association
241
        else if (strUser === "Association") {
242

243
            setCotisation("Association");
244 245


246 247 248 249 250
            displayMask(["cotisation", "informationsCollectivite", "boutonEnvoyer"]);
            document.getElementById("secondSelection").required = false;
            setEPCIRequired(false);

        } else if (strUser === "EPCIMutualisant") {
251 252 253
            //formulaire contenant la formule spécifique à EPCI mutualisant
            displayMask(["formulaireEPCIMutualisant"]);
            setEPCIRequired(true);
254

255
        } else if (strUser === "none") {
256 257 258
            //premier choix avec des tirets
            displayMask([""]);
        }
259

260
        //si il a cliqué sur autre chose : on cherche à connaitre la taille de la collectivité, on affiche le 2e select
261
        else {
262

263 264
            displayMaskOptions(strUser);
            document.getElementById("secondSelection").required = true;
265

266 267
            displayMask(["paraSecondSelection"]);
            setEPCIRequired(false);
268 269

        }
270
    }
271

272
    function isWordIn(word, list) {
273
        //le word est il contenu dans list ?
274 275
        for (a = 0; a < list.length; a++) {
            if (word === list[a]) {
276
                return true
277 278 279
            }
        }

280 281
        return false
    }
282

283
    function linkRedirection(link, title) {
284
        //définit le lien de redirection et son titre
285 286
        document.getElementById("linkRedirection").setAttribute("href", link);
        document.getElementById("linkRedirection").setAttribute("title", title);
287
    }
288

289
    function secondAction() {
290 291
        //fonction exécutée lorsque le 2e select est cliqué
        var e = document.getElementById("secondSelection");
292

293 294 295 296 297 298 299 300 301 302
        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"]);
        }
303

304
    }
305

306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
    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);
            }
        }

329
    }
330

331
    function setEPCIRequired(boolean) {
332 333 334 335
        //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;
    }
336 337


338
    function traitementEPCIMutualisant() {
339 340 341
        //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;
342 343


344 345
        if (nombreHabitants !== "") {
            if (nombreCommunesMembres !== "") {
346
                var resultat = (0.035 * nombreHabitants) + (15 * nombreCommunesMembres) + 1200;
347

348 349 350 351 352
                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
353 354


355
                if (resultat > 15000) {
356 357
                    //le plafond est fixé à 15000
                    resultat = 15000;
358
                }
359

360 361
                setCotisation("EPCIMutualisant", resultat);
                displayMask(["cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"]);
362

363 364
            }
        }
365
    }
366

367
</script>
N. Peraldi's avatar
N. Peraldi committed
368

369 370 371 372 373
<h1>Formulaire de renouvellement d'adhésion</h1>
<p>
    <b>Votre catégorie :</b>

</p>
374
<form action="contact.php" method="post">
375 376 377 378 379
    <p>
        <label for="firstSelect">Veuillez sélectionner le type de collectivité :</label>

        <select id="firstSelect" required="" name="firstSelection">
            <option value="none">---</option>
380 381 382 383 384 385 386 387 388 389 390 391 392

            <?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
            }


            ?>

393 394 395 396 397

        </select>
    </p>

    <div id="link">
398
        <a href="contact.php" id="linkRedirection" title="Page par défaut">Valider</a>
399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415
    </div>

    <div id="formulaireEPCIMutualisant">
        <label for="nombreHabitantsEPCI">Nombre d'habitants de l'EPCI :</label>
        <input type="number" name="nombreHabitantsEPCI" id="nombreHabitantsEPCI"><br>

        <label for="nombreCommunesMembresEPCI">Nombre de communes membres :</label>
        <input type="number" name="nombreCommunesMembresEPCI" id="nombreCommunesMembresEPCI"><br>

        <input type="button" value="Valider" id="boutonValiderNombresEPCI">


    </div>

    <p id="paraSecondSelection">
        <label for="secondSelection">Veuillez sélectionner la taille :</label>

N. Peraldi's avatar
N. Peraldi committed
416
        <select id="secondSelection" name="secondSelection">
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446

            <?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">---</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] ?>"><?php echo $actualLine[1] ?></option>
                <?php
447 448


449 450 451 452 453 454 455
                $counter += 1;


            }

            ?>

456 457 458 459 460

        </select>
    </p>

    <div id="cotisation">
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496

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

497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
    </div>


    <div id="informationsCollectivite">
        <h3>Informations obligatoires :</h3>

        <label for="nomCollectivite">Nom de la collectivité :</label>
        <input type="text" name="nomCollectivite" id="nomCollectivite" required=""><br>

        <label for="adresseCollectivite">Adresse :</label>
        <input type="text" name="adresseCollectivite" id="adresseCollectivite" required=""><br>

        <label for="codePostalCollectivite">Code postal :</label>
        <input type="text" name="codePostalCollectivite" id="codePostalCollectivite" required=""><br>

        <label for="villeCollectivite">Ville :</label>
        <input type="text" name="villeCollectivite" id="villeCollectivite" required=""><br>

        <label for="telCollectivite">Téléphone :</label>
        <input type="tel" name="telCollectivite" id="telCollectivite" required=""><br>

        <label for="siteCollectivite">Site internet :</label>
        <input type="url" name="siteCollectivite" id="siteCollectivite" required=""><br>

        <h3>Informations relatives à Chorus Pro</h3>

        <label for="siretCollectivite">SIRET :</label>
        <input type="text" name="siretCollectivite" id="siretCollectivite" required=""><br>

        <label for="numeroEngagementCollectivite">N° d'engagement :</label>
        <input type="text" name="numeroEngagementCollectivite" id="numeroEngagementCollectivite" required=""><br>

        <label for="codeCollectivite">Code :</label>
        <input type="text" name="codeCollectivite" id="codeCollectivite" required=""><br>


    </div>


    <input type="submit" id="boutonEnvoyer">
</form>

<script>

    displayMask([""]);
542 543 544 545
    document.getElementById("firstSelect").setAttribute("onchange", "firstAction()");
    document.getElementById("boutonValiderNombresEPCI").setAttribute("onclick", "traitementEPCIMutualisant()");
    document.getElementById("secondSelection").setAttribute("onchange", "secondAction()");
    setCotisation("");
546 547

</script>
N. Peraldi's avatar
N. Peraldi committed
548

549
<?php /*get_footer();*/?>