booking.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. $FILENAME = '../private/bookings.csv';
  3. // Success and error messages
  4. $responses = [
  5. 'bot' => ['danger' => 'bip, bap, booop'],
  6. 'required' => ['danger' => 'Todos los campos son requeridos'],
  7. 'email' => ['danger' => 'Email inválido'],
  8. 'ip_flood' => [
  9. 'danger' => 'Hay demasiada gente registrada desde esta IP, lo siento '.
  10. 'pero es suficiente. ¿Problemas? <a href="./contacto">contáctanos</a>'
  11. ],
  12. 'dupe_mail' => [
  13. 'danger' => 'Este correo ya está registrado. ¿Problemas? '.
  14. '<a href="./contacto">contáctanos</a>'
  15. ],
  16. 'success' => [
  17. 'success' => '<strong>¡Has reservado un cupo exitosamente!</strong>. '.
  18. 'Si por cualquier motivo no puedes asistir, recuerda anular tu '.
  19. 'reserva (al fondo de esta página) para liberar tu cupo. ¡Nos vemos!'
  20. ]
  21. ];
  22. if (file_exists($FILENAME)) {
  23. $fp = fopen($FILENAME, 'r+');
  24. fgetcsv($fp); // Jump over first line
  25. } else {
  26. $fp = fopen($FILENAME, 'w');
  27. fputcsv($fp, ['ip', 'name', 'email', 'mailing', 'reserves', 'aborts']);
  28. }
  29. /**
  30. * Validation */
  31. // Anti-spam
  32. if ($_POST['message'])
  33. $response = $responses['bot'];
  34. // Required fields
  35. foreach (['name', 'email', 'reserves'] as $field) {
  36. if (!isset($response) && empty($_POST[$field])) {
  37. $response = $responses['required'];
  38. break;
  39. }
  40. }
  41. // Valid email
  42. if (!isset($response) && !strpos($_POST['email'], '@'))
  43. $response = $responses['email'];
  44. if (!isset($response)) {
  45. $dupe_ips = 0;
  46. while (($line = fgetcsv($fp)) !== false) {
  47. // Anti-flood
  48. if ($line[0] === $_SERVER['REMOTE_ADDR'])
  49. $dupe_ips++;
  50. // No mail dupes
  51. if ($line[2] === strtolower($_POST['email']))
  52. $dupe_mail = true;
  53. };
  54. if ($dupe_ips > 2)
  55. $response = $responses['ip_flood'];
  56. else if (isset($dupe_mail))
  57. $response = $responses['dupe_mail'];
  58. }
  59. /**
  60. * Write file */
  61. // All good, let's write it
  62. if (!isset($response)) {
  63. fputcsv(
  64. $fp,
  65. [
  66. $_SERVER['REMOTE_ADDR'],
  67. $_POST['name'],
  68. strtolower($_POST['email']),
  69. (!empty($_POST['mailing']) ? 'y' : 'n'),
  70. implode(' ', $_POST['reserves']),
  71. 'n'
  72. ]
  73. );
  74. $response = $responses['success'];
  75. }
  76. fclose($fp);
  77. /**
  78. * Response */
  79. // If using AJAX return a direct JSON response, else save response in SESSION
  80. if (isset($_POST['fetch'])) {
  81. print json_encode($response);
  82. } else {
  83. session_start();
  84. $_SESSION['response'] = json_encode($response);
  85. header('Location: ./');
  86. }