traitementAdhesion.php 13.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
<?php

/*
 * prendre en compte que :
 * l'utilisateur peut supprimer un champ
 * peut le rendre en non required
 * peut modifier le type de champ
 * peut renommer un champ et le rendre inconnu
 *
 */

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
//variables pour le mail
$adresseMailCible = "nathan.peraldi@adullact.org";
$subject = "Nouvelle demande de renouvellement d'adhésion";

//nombres maximum
$maxAddressCharacters = 255;
$maxNameCharacters = 255;
$maxCityCharacters = 255;

//Messages d'erreur
$tooLongAddress = "L'adresse que vous avez entrée est trop longue. Maximum : " . $maxAddressCharacters;
$tooLongName = "Le nom que vous avez entré est trop long. Maximum : " . $maxNameCharacters;
$postalCodeError = "Un code postal est composé de 5 chiffres.";
$tooLongCity = "Le nom de la ville est trop long. Maximum : " . $maxCityCharacters;
$errorInCityName = "Un caractère incorrect a été entré.";
$errorInTel = "Un numéro de téléphone se compose de 10 chiffres et commence par un zéro.";
$incorrectUrl = "L'URL est incorrecte.";
$errorInPeriodSelection = "Veuillez sélectionner une période d'adhésion.";
root's avatar
root committed
30
$errorInSiret = "Un numéro de SIRET est composé de 14 chiffres.";
31 32 33

$positiveNumberRequired = "Vous devez entrer un nombre positif.";
$numberRequired = "Vous devez entrer un nombre.";
34
$fieldRequired = "Vous devez compléter ce champ.";
35
$sizeRequired = "Vous devez sélectionner la taille de votre collectivité.";
36

37
$debug_mode_traitement = false;
root's avatar
root committed
38
$elementsOfPostToTrash = ["ancienSelectType", "ancienSelectSize", "ancienSelectPeriod"];
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

$replacements = array(
    "firstSelection" => "Type de collectivité",
    "secondSelection" => "Taille de la collectivité",
    "nombreHabitantsEPCI" => "Nombre d'habitants EPCI",
    "nombreCommunesMembresEPCI" => "Nombre de communes membres EPCI",
    "nomCollectivite" => "Nom de la collectivité",
    "adresseCollectivite" => "Adresse de la collectivité",
    "codePostalCollectivite" => "Code postal",
    "villeCollectivite" => "Ville",
    "telCollectivite" => "Téléphone",
    "siteCollectivite" => "Site internet",
    "periodeAdhesionCollectivite" => "Période d'adhésion",
    "siretCollectivite" => "N° de SIRET",
    "numeroEngagementCollectivite" => "Numéro d'engagement",
    "codeCollectivite" => "Code service"
);
56

Nathan Peraldi's avatar
Nathan Peraldi committed
57 58
function sendAdhesionMail($tab)
{
59 60 61 62 63
    //fonction utile pour l'envoi de mail grâce au $_POST
    //on étudie le $_POST et on transfère les lignes utiles à $tableauFinal
    global $adresseMailCible, $subject, $elementsOfPostToTrash, $replacements;
    $tableauFinal = array();

Nathan Peraldi's avatar
Nathan Peraldi committed
64 65 66
    foreach ($tab as $key => $value) {
        if (!isWordIn($key, $elementsOfPostToTrash)) {
            if ($value != "" && $value != "none") {
67

root's avatar
root committed
68
                //transformation du nom de la classe -> texte donné dans $replacements
69 70
                $key = $replacements[$key];

root's avatar
root committed
71 72 73
                //on évite faille XSS
                $value = htmlspecialchars($value);

Nathan Peraldi's avatar
Nathan Peraldi committed
74
                $tableauFinal[$key] = $value;
75 76 77 78 79
            }
        }
    }

    $message = "Nouvelle requête pour le formulaire d'adhésion : <br><table>";
root's avatar
root committed
80 81
    $logMessage = "\n";

82
    foreach ($tableauFinal as $key => $value) {
Nathan Peraldi's avatar
Nathan Peraldi committed
83 84
        $key = str_replace("\n", "", $key);
        $value = str_replace("\n", "", $value);
85 86

        $message = $message . "<tr><td>" . $key . " : </td> <td>" . $value . "</td>" . "</tr>";
root's avatar
root committed
87 88

        $logMessage = $logMessage . $key . " : " . $value . "\n";
89
    }
90 91
    $header = "Content-type: text/html; charset=utf-8 \r\n";

Nathan Peraldi's avatar
Nathan Peraldi committed
92
    if (mail($adresseMailCible, $subject, $message, $header)) {
Nathan Peraldi's avatar
Nathan Peraldi committed
93
        writeInLog("Nouvelle demande", $logMessage);
root's avatar
root committed
94

Nathan Peraldi's avatar
Nathan Peraldi committed
95 96
    } else {
        writeInLog("Erreur de l'envoi mail.", "Header : \n" . $header . "\nInfos :" . $logMessage);
root's avatar
root committed
97 98 99
    }
}

Nathan Peraldi's avatar
Nathan Peraldi committed
100 101
function writeInLog($intitule, $text)
{
root's avatar
root committed
102 103 104 105 106 107
    global $workingDirectory, $debug_mode_traitement;

    date_default_timezone_set('Europe/Paris');

    $date = date("d-m-Y");
    $hour = date("H:i:s");
root's avatar
root committed
108 109
    $filePath = $workingDirectory . "logs/adhesion/logs.log";
    $beforeMessage = "\n--------------\nLe " . $date . ", à " . $hour . ", \n" . $intitule . " : \n";
root's avatar
root committed
110 111
    $finalMessage = $beforeMessage . $text;
    $fichier = fopen($filePath, "a");
root's avatar
root committed
112

Nathan Peraldi's avatar
Nathan Peraldi committed
113
    if ($debug_mode_traitement) {
root's avatar
root committed
114 115 116
        var_dump($fichier);
    }

Nathan Peraldi's avatar
Nathan Peraldi committed
117 118
    if (fwrite($fichier, $finalMessage)) {
        if ($debug_mode_traitement) {
root's avatar
root committed
119 120 121
            echo "fichier écrit";
        }

Nathan Peraldi's avatar
Nathan Peraldi committed
122 123
    } else {
        if ($debug_mode_traitement) {
root's avatar
root committed
124 125 126
            echo "fichier pas écrit";
            echo "<br> chemin accesz : <br>" . $filePath;
        }
127
    }
root's avatar
root committed
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
    fclose($fichier);
}

//-----------------------Toutes les fonctions de vérification de données------------------------

function verifFirstSelection($tab)
{
    //on vérifie si le first select est bien validé.

    if (isset($tab["firstSelection"])) {
        //première sélection présente
        if ($tab["firstSelection"] != "none" && $tab["firstSelection"] != "") {
            //l'utilisateur a sélectionné quelque chose. mais quoi ?
            return true;

        } else {
            //sélection égale à "none" ou ""
            return false;
        }
    } else {
        //première sélection absente du formulaire
        return false;
    }
151 152
}

root's avatar
root committed
153 154
function verifSecondSelection($tab, $errors)
{
155
    global $sizeRequired;
root's avatar
root committed
156 157

    if (isset($tab["secondSelection"])) {
158 159
        if ($tab["secondSelection"] == "" || $tab["secondSelection"] == "none") {
            $errors["second Selection"] = $sizeRequired;
root's avatar
root committed
160 161 162
        }

    } else {
163
        $errors["second Selection"] = $sizeRequired;
root's avatar
root committed
164 165 166
    }
    return $errors;
}
167 168 169

function verifEPCI($tab, $errors)
{
170 171
    //vérifie les deux nombres EPCI
    global $positiveNumberRequired, $numberRequired;
172 173 174 175 176 177 178 179 180 181
    if (isset($tab["nombreHabitantsEPCI"])) {
        if (isset($tab["nombreCommunesMembresEPCI"])) {
            $nombreHab = $tab["nombreHabitantsEPCI"];
            $nombreCom = $tab["nombreCommunesMembresEPCI"];

            if (is_numeric($nombreHab)) {
                if (is_numeric($nombreCom)) {
                    if ($nombreHab > 0) {
                        if ($nombreCom > 0) {

182
                        } else {
183
                            $errors["EPCI com"] = $positiveNumberRequired;
184
                        }
185
                    } else {
186
                        $errors["EPCI hab"] = $positiveNumberRequired;
187
                    }
188
                } else {
189
                    $errors["EPCI com"] = $numberRequired;
190
                }
191
            } else {
192
                $errors["EPCI hab"] = $numberRequired;
193
            }
Nathan Peraldi's avatar
Nathan Peraldi committed
194
        } else {
195
            $errors["EPCI hab"] = $numberRequired;
196
        }
Nathan Peraldi's avatar
Nathan Peraldi committed
197
    } else {
198
        $errors["EPCI hab"] = $numberRequired;
199 200 201 202 203 204 205
    }
    return $errors;
}

function verifNom($tab)
{
    //vérifie si le nom de la collectivité est correct
206
    global $maxNameCharacters, $tooLongName, $fieldRequired;
207

208 209 210 211 212 213
    if (isset($tab["nomCollectivite"])) {

        $nom = $tab["nomCollectivite"];

        if (strlen($nom) > 0) {

214
            if (strlen($nom) < $maxNameCharacters) {
215 216
                return "";
            } else {
217
                return $tooLongName;
218 219
            }
        } else {
220
            return $fieldRequired;
221 222
        }
    }
223
    return $fieldRequired;
224 225 226 227 228
}

function verifAdresse($tab)
{
    //vérifie si l'adresse est correcte
229
    global $tooLongAddress, $maxAddressCharacters, $fieldRequired;
230

231 232 233 234 235 236
    if (isset($tab["adresseCollectivite"])) {

        $adresse = $tab["adresseCollectivite"];

        if (strlen($adresse) > 0) {

237
            if (strlen($adresse) < $maxAddressCharacters) {
238 239
                return "";
            } else {
240
                return $tooLongAddress;
241 242
            }
        } else {
243
            return $fieldRequired;
244 245
        }
    } else {
246
        return $fieldRequired;
247 248 249 250 251 252
    }
}

function verifCodePostal($tab)
{
    //vérifie si le code postal a été correctement entré
253
    global $debug_mode_traitement, $postalCodeError, $fieldRequired;
254 255 256 257
    if (isset($tab["codePostalCollectivite"])) {

        $CP = $tab["codePostalCollectivite"];

258 259 260 261
        if ($debug_mode_traitement) {
            echo "<br> code postal entré : " . $tab["codePostalCollectivite"] . " <br>";
        }

262 263 264 265 266 267
        if (strlen($CP) > 0) {

            if (strlen($CP) == 5 && is_numeric($CP)) {
                return "";

            } else {
268
                return $postalCodeError;
269 270
            }
        } else {
271
            return $fieldRequired;
272 273
        }
    } else {
274
        return $fieldRequired;
275 276 277 278 279
    }
}

function verifVille($tab)
{
280
    //vérifie la ville
281
    global $maxCityCharacters, $tooLongCity, $errorInCityName, $fieldRequired;
282 283 284 285
    //vérifie si la ville est correcte
    if (isset($tab["villeCollectivite"])) {
        $ville = $tab["villeCollectivite"];
        if (strlen($ville) > 0) {
286
            if (strlen($ville) < $maxCityCharacters) {
287 288 289 290 291

                $ville = strtolower($ville);
                for ($a = 0; $a < strlen($ville); $a++) {

                    if (!strpos("azertyuiopqsdfghjklmwxcvbnéèàçùâêîôûäëïöü-", $ville[$a])) {
292
                        return $errorInCityName;
293 294 295 296 297
                    }
                }
                return "";

            } else {
298
                return $tooLongCity;
299 300
            }
        } else {
301
            return $fieldRequired;
302 303
        }
    } else {
304
        return $fieldRequired;
305 306 307 308 309
    }
}

function verifTel($tab)
{
310
    //vérifie le numéro de téléphone. il n'est pas obligatoire, on ne retourne pas d'erreur si vide.
root's avatar
root committed
311
    global $errorInTel;
312 313 314 315 316 317 318 319 320 321 322
    if (isset($tab["telCollectivite"])) {

        $tel = $tab["telCollectivite"];
        if (strlen($tel) > 0) {


            //vérifie si le téléphone a été correctement entré
            if ((strlen($tel) == 10 && is_numeric($tel)) && $tel[0] == "0") {
                return "";

            } else {
323
                return $errorInTel;
324 325
            }
        } else {
326
            return "";
327 328
        }
    } else {
329
        return "";
330 331 332 333 334
    }
}

function verifUrl($tab)
{
335
    //vérifie l'Url du site internet grâce à un filter var. pas obligatoire, ne retourne pas d'erreurs si vide.
root's avatar
root committed
336
    global $incorrectUrl;
337 338 339 340 341 342

    if (isset($tab["siteCollectivite"])) {
        $url = $tab["siteCollectivite"];

        if (strlen($url) > 0) {

343
            if (filter_var($url, FILTER_VALIDATE_URL) == true) {
344 345 346
                return "";
            } else {

347
                return $incorrectUrl;
348 349
            }
        } else {
350
            return "";
351 352
        }
    } else {
353
        return "";
354 355 356 357 358
    }
}

function verifPeriodeAdhesion($tab)
{
359 360
    //vérifie que la période d'adhésion est OK
    global $errorInPeriodSelection;
361 362 363 364 365
    if (isset($tab["periodeAdhesionCollectivite"])) {
        if (strlen($tab["siteCollectivite"]) > 0) {
            return "";

        } else {
366
            return $errorInPeriodSelection;
367 368
        }
    } else {
369
        return $errorInPeriodSelection;
370 371 372 373 374
    }
}

function verifSiret($tab)
{
375
    global $debug_mode_traitement, $errorInSiret, $fieldRequired;
Nathan Peraldi's avatar
Nathan Peraldi committed
376
    if ($debug_mode_traitement) {
377 378 379
        echo "<br> on vérifie le siret <br> ";
    }

380 381 382 383 384 385 386 387 388 389
    if (isset($tab["siretCollectivite"])) {

        $siret = $tab["siretCollectivite"];

        if (strlen($siret) > 0) {

            if (strlen($siret) == 14 && is_numeric($siret)) {
                return "";

            } else {
390
                return $errorInSiret;
391 392
            }
        } else {
393
            return $fieldRequired;
394 395
        }
    } else {
396
        return $fieldRequired;
397 398 399 400 401
    }
}

function verifNumeroEngagement($tab)
{
402
    //vérifie si le numéro engagement a été correctement entré
403 404
    global $fieldRequired;

405 406 407 408
    if (isset($tab["numeroEngagementCollectivite"])) {
        $numero = $tab["numeroEngagementCollectivite"];

        if (strlen($numero) > 0) {
409
            return "";
410 411

        } else {
412
            return $fieldRequired;
413 414
        }
    } else {
415
        return $fieldRequired;
416 417 418 419 420
    }
}

function verifCode($tab)
{
421
    //vérifie si le code service a été correctement entré
422
    global $fieldRequired;
423 424 425 426 427
    if (isset($tab["codeCollectivite"])) {

        $code = $tab["codeCollectivite"];

        if (strlen($code) > 0) {
428
            return "";
429 430

        } else {
431
            return $fieldRequired;
432 433
        }
    } else {
434
        return $fieldRequired;
435 436 437 438 439 440 441 442
    }
}

function traitementInformations($tab, $errors)
{
    //vérifie tous les champs texte
    //ces infos sont toujours obligatoires en fin de formulaire donc on fait une fonction tout en un

443 444
    global $debug_mode_traitement;

445 446 447 448 449 450
    $errors["nom"] = verifNom($tab);
    $errors["adresse"] = verifAdresse($tab);
    $errors["CP"] = verifCodePostal($tab);
    $errors["ville"] = verifVille($tab);
    $errors["tel"] = verifTel($tab);
    $errors["site"] = verifUrl($tab);
Nathan Peraldi's avatar
Nathan Peraldi committed
451
    if ($tab["firstSelection"] != "Association") {
452 453 454
        if ($debug_mode_traitement) {
            echo "tab[firstselection] = " . $tab["firstSelection"] . "\n";
        }
455

456 457 458 459
        $errors["siret"] = verifSiret($tab);
        $errors["numeroEngagement"] = verifNumeroEngagement($tab);
        $errors["code"] = verifCode($tab);
    }
460

461
    return $errors;
462 463
}

464
function traitement($tab, $errors)
465
{
Nathan Peraldi's avatar
Nathan Peraldi committed
466
    //traitement principal, liste des actions à effectuer dans un certain ordre
root's avatar
root committed
467
    global $debug_mode_traitement;
Nathan Peraldi's avatar
Nathan Peraldi committed
468
    if ($debug_mode_traitement) {
469 470
        echo "début du traitement ";
    }
471 472 473 474

    //le résultat du premier select
    if (verifFirstSelection($tab)) {

Nathan Peraldi's avatar
Nathan Peraldi committed
475
        if ($debug_mode_traitement) {
476 477 478
            echo "<br> le first select est OK <br>";
        }

479 480 481
        if ($tab["firstSelection"] == "Association") {
            //il n'y a besoin que de traiter les dernières infos
            $errors = traitementInformations($tab, $errors);
482
        } elseif ($tab["firstSelection"] == "EPCIMutualisant") {
483 484
            $errors = verifEPCI($tab, $errors);
            $errors = traitementInformations($tab, $errors);
485
        } else {
486
            //taille
487
            $errors = verifSecondSelection($tab, $errors);
488
            $errors = traitementInformations($tab, $errors);
489 490 491
        }

    } else {
root's avatar
root committed
492
        $errors["first selection"] = "Veuillez préciser le type de collectivité.";
493 494

    }
Nathan Peraldi's avatar
Nathan Peraldi committed
495
    if ($debug_mode_traitement) {
496 497 498
        echo "errors : <br>";
        var_dump($errors);
    }
499 500
    return $errors;

501
}