contact.php 16.3 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
47 48 49 50 51
    $variable = str_replace("é", "e", $variable);
    $variable = str_replace("è", "e", $variable);
    $variable = str_replace("à", "a", $variable);
    $variable = str_replace("ç", "c", $variable);
    $variable = str_replace("ù", "u", $variable);
N. Peraldi's avatar
N. Peraldi committed
52

53
    $variable = str_replace(" ", "_", $variable);
54

N. Peraldi's avatar
N. Peraldi committed
55 56 57
    return $variable;
}

58
function createSizeSelectList($liste)
59 60
{
    //fonction qui crée la liste des classes qui sert pour le 2e select
N. Peraldi's avatar
N. Peraldi committed
61
    $resultList = [];
62
    for ($a = 0; $a < count($liste); $a++) {
63 64
        $mot = createNameClass($liste[$a][0]);

N. Peraldi's avatar
N. Peraldi committed
65

N. Peraldi's avatar
N. Peraldi committed
66 67
        if (!isWordIn($mot, $resultList)) {
            $resultList[] = $mot;
N. Peraldi's avatar
N. Peraldi committed
68 69 70 71
        }

    }

N. Peraldi's avatar
N. Peraldi committed
72
    return $resultList;
N. Peraldi's avatar
N. Peraldi committed
73 74 75

}

76 77 78 79 80 81
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;
82 83 84
        }
    }

85
    return false;
86 87
}

88 89 90 91
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
92 93
}

94

N. Peraldi's avatar
N. Peraldi committed
95 96
fclose($fichier);

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

100 101 102 103 104
//on ajoute "association", epci mutualisant et "individu" qui possèdent un traitement différent
$textsSelectMenuExtended = $textsSelectMenu;
$textsSelectMenuExtended[] = ("Association");
$textsSelectMenuExtended[] = ("Individu");
$textsSelectMenuExtended[] = ("EPCI Mutualisant");
105

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

109 110
//classes gérées automatiquement + manuellement
$classSelectMenuExtended = $classSelectMenu;
111

112 113 114 115 116 117 118 119 120
$classSelectMenuExtended[] = ("Association");
$classSelectMenuExtended[] = ("Individu");
$classSelectMenuExtended[] = ("EPCIMutualisant");

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


123

124
?>
125

126 127 128
<script>
    var secondSelectList = [
        <?php
129

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

133 134
            echo "'" . $classSelectMenu[$a] . "'";
            if (($a + 1) < $classSelectMenu) {
135 136 137 138 139 140 141
                echo ",\n";
            }
        }
        ?>

    ];

142

143
    //liste des blocs qui peuvent être affichés / cachés
144
    var blocks = ["link", "paraSecondSelection", "cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"];
145 146


147
    function displayMask(display) {
148
        //fonction qui affiche / cache les formulaires / informations en fonction des données entrées dans les formulaires
149

150 151
        for (var h = 0; h < blocks.length; h++) {
            if (isWordIn(blocks[h], display)) {
152
                document.getElementById(blocks[h]).style.display = "block";
153
            } else {
154
                document.getElementById(blocks[h]).style.display = "none";
155 156 157
            }


158 159
        }
    }
160

161
    function displayMaskOptions(display) {
162
        //sert à afficher / cacher les options du 2e select menu
163

164
        var tousLesElements = undefined;
165 166


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

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

173
                tousLesElements = document.getElementsByClassName(display);
174

175 176
                for (var g = 0; g < tousLesElements.length; g++) {
                    if (g === 0) {
177
                        //on passe la première option disponible en selected pour éviter un bug d'affichage
178
                        tousLesElements[g].selected = true;
179 180
                    }

181
                    tousLesElements[g].hidden = false;
182 183 184


                }
185
            } else {
186 187


188
                tousLesElements = document.getElementsByClassName(secondSelectList[j]);
189

190
                for (var h = 0; h < tousLesElements.length; h++) {
191 192
                    tousLesElements[h].hidden = true;
                }
193
            }
194
        }
195

196
    }
197

198 199
    function firstAction() {
        //fonction effectuée lorsque le premier select est validé
200

201 202 203
        //on recup ce qui a été cliqué
        var e = document.getElementById("firstSelect");
        var strUser = e.options[e.selectedIndex].value;
204

205
        //on reagit en fonction
206

207
        //si il a cliqué sur individu, redirigé vers helloasso
208 209
        if (strUser === "Individu") {
            linkRedirection("https://helloasso.com", "Redirection vers HelloAsso");
210 211
            displayMask(["link"]);
        }
212

213
        //si il a cliqué sur association
214
        else if (strUser === "Association") {
215

216
            setCotisation("Association");
217 218


219 220 221 222 223
            displayMask(["cotisation", "informationsCollectivite", "boutonEnvoyer"]);
            document.getElementById("secondSelection").required = false;
            setEPCIRequired(false);

        } else if (strUser === "EPCIMutualisant") {
224 225 226
            //formulaire contenant la formule spécifique à EPCI mutualisant
            displayMask(["formulaireEPCIMutualisant"]);
            setEPCIRequired(true);
227

228
        } else if (strUser === "none") {
229 230 231
            //premier choix avec des tirets
            displayMask([""]);
        }
232

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

236 237
            displayMaskOptions(strUser);
            document.getElementById("secondSelection").required = true;
238

239 240
            displayMask(["paraSecondSelection"]);
            setEPCIRequired(false);
241 242

        }
243
    }
244

245
    function isWordIn(word, list) {
246
        //le word est il contenu dans list ?
247 248
        for (a = 0; a < list.length; a++) {
            if (word === list[a]) {
249
                return true
250 251 252
            }
        }

253 254
        return false
    }
255

256
    function linkRedirection(link, title) {
257
        //définit le lien de redirection et son titre
258 259
        document.getElementById("linkRedirection").setAttribute("href", link);
        document.getElementById("linkRedirection").setAttribute("title", title);
260
    }
261

262
    function secondAction() {
263 264
        //fonction exécutée lorsque le 2e select est cliqué
        var e = document.getElementById("secondSelection");
265

266 267 268 269 270 271 272 273 274 275
        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"]);
        }
276

277
    }
278

279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
    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);
            }
        }

302
    }
303

304
    function setEPCIRequired(boolean) {
305 306 307 308
        //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;
    }
309 310


311
    function traitementEPCIMutualisant() {
312 313 314
        //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;
315 316


317 318
        if (nombreHabitants !== "") {
            if (nombreCommunesMembres !== "") {
319
                var resultat = (0.035 * nombreHabitants) + (15 * nombreCommunesMembres) + 1200;
320

321 322 323 324 325
                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
326 327


328
                if (resultat > 15000) {
329 330
                    //le plafond est fixé à 15000
                    resultat = 15000;
331
                }
332

333 334
                setCotisation("EPCIMutualisant", resultat);
                displayMask(["cotisation", "informationsCollectivite", "formulaireEPCIMutualisant", "boutonEnvoyer"]);
335

336 337
            }
        }
338
    }
339

340
</script>
N. Peraldi's avatar
N. Peraldi committed
341

342 343 344 345 346
<h1>Formulaire de renouvellement d'adhésion</h1>
<p>
    <b>Votre catégorie :</b>

</p>
347
<form action="contact.php" method="post">
348 349 350 351 352
    <p>
        <label for="firstSelect">Veuillez sélectionner le type de collectivité :</label>

        <select id="firstSelect" required="" name="firstSelection">
            <option value="none">---</option>
353 354 355 356 357 358 359 360 361 362 363 364 365

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


            ?>

366 367 368 369 370

        </select>
    </p>

    <div id="link">
371
        <a href="contact.php" id="linkRedirection" title="Page par défaut">Valider</a>
372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
    </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
389
        <select id="secondSelection" name="secondSelection">
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419

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


422 423 424 425 426 427 428
                $counter += 1;


            }

            ?>

429 430 431 432 433

        </select>
    </p>

    <div id="cotisation">
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469

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

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 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514
    </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([""]);
515 516 517 518
    document.getElementById("firstSelect").setAttribute("onchange", "firstAction()");
    document.getElementById("boutonValiderNombresEPCI").setAttribute("onclick", "traitementEPCIMutualisant()");
    document.getElementById("secondSelection").setAttribute("onchange", "secondAction()");
    setCotisation("");
519 520

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

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