contact.php 16.2 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 11 12


<?php

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

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

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

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
$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
37
        }
38

N. Peraldi's avatar
N. Peraldi committed
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 59 60
function createSecondSelectList($liste)
{
    //fonction qui crée la liste des classes qui sert pour le 2e select
N. Peraldi's avatar
N. Peraldi committed
61
    $listeTempo = [];
62
    for ($a = 0; $a < count($liste); $a++) {
63 64
        $mot = createNameClass($liste[$a][0]);

N. Peraldi's avatar
N. Peraldi committed
65

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

    }

    return $listeTempo;

}

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 107
//on crée la liste pour le 2e select qui contient le nom des classes gérés automatiquement
$classSelectMenu = createSecondSelectList($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
<script>
    var secondSelectList = [
        <?php
128

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

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

    ];

141

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


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

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


157 158
        }
    }
159

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

163
        var tousLesElements = undefined;
164 165


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

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

172
                tousLesElements = document.getElementsByClassName(display);
173

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

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


                }
184
            } else {
185 186


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

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

195
    }
196

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

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

204
        //on reagit en fonction
205

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

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

215
            setCotisation("Association");
216 217


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

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

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

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

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

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

        }
242
    }
243

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

252 253
        return false
    }
254

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

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

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

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

301
    }
302

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


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


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

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


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

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

335 336
            }
        }
337
    }
338

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

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

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

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

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


            ?>

365 366 367 368 369

        </select>
    </p>

    <div id="link">
370
        <a href="contact.php" id="linkRedirection" title="Page par défaut">Valider</a>
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
    </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
388
        <select id="secondSelection" name="secondSelection">
389 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

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


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


            }

            ?>

428 429 430 431 432

        </select>
    </p>

    <div id="cotisation">
433 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

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

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

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

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