contact: exceptional parsing and delivery for bbq
[minimedit.git] / contact.php
1 <?php
2 $error = NULL;
3 if ($_POST) {
4         if (!empty($User)) {
5                 $_REQUEST['login'] = $User['name'];
6         }
7         $error = mailform($_REQUEST);
8         if (!empty($error)) {
9                 print "<p class=warn>$error</p>\n\n";
10         }
11 }
12
13 function mailform($input = [])
14 {
15         $source = empty($input['subject']) ? 'reactie' : $input['subject'];
16         $rcpt = 'info@'.$_SERVER['HTTP_HOST'];
17         $subject = "Formulier {$_SERVER['HTTP_HOST']}: $source";
18
19         if (!$input) {
20                 return 'Geen gegevens ontvangen. Probeer het nog eens.';
21         }
22
23 switch ($source) {
24         case 'bbq':
25                 if (empty($input['naam']) or empty($input['huis'])) {
26                         return 'De bedoeling is juist dat je opgeeft wie er komt.';
27                 }
28                 $rcpt .= ', Heleen <heleen.terlouw.2910@gmail.com>';
29                 break;
30         default:
31         if (empty($input['email']) or !preg_match('/.+@.+\..+/', $input['email'])) {
32                 return 'Een geldig e-mailadres is verplicht zodat we antwoord kunnen geven.';
33         }
34         if (isset($input['naam']) and empty($input['naam'])) {
35                 return 'Geef ook een naam waarmee we u kunnen aanspreken.';
36         }
37 }
38
39         $reply = preg_match('/\A\w+@\w+\.[a-z]+\z/', @$input['email'])
40                 ? $input['email'] : 'noreply@'.$_SERVER['HTTP_HOST'];
41         $header = "From: $reply";
42
43         foreach (array(
44                 'X-Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
45                 'User-Agent'        => 'HTTP_USER_AGENT',
46         ) as $mailhdr => $serverhdr) {
47                 if (!$_SERVER[$serverhdr]) continue;
48                 $header .= "\r\n$mailhdr: ".$_SERVER[$serverhdr];
49         }
50
51         $origin = $_SERVER['REMOTE_ADDR'];
52         $origin .= sprintf(' (%s)', gethostbyaddr($origin));
53         $body = "Ingevuld vanaf $origin:\r\n\r\n";
54
55         foreach ($input as $k => $v) {
56                 $body .= "$k: $v\r\n";
57         }
58
59         $sent = mail($rcpt, $subject, $body, $header);
60         if (!$sent)
61                 return 'Helaas ging er iets mis bij het doorvoeren. Probeer het later nog eens.';
62
63         switch ($source) {
64         case 'bestelling':
65                 print '<p>Bedankt voor uw bestelling. U ontvangt z.s.m. de bevestiging van deze bestelling via uw opgegeven e-mailadres.</p>';
66                 break;
67         case 'bbq':
68                 print "<p>Bedankt voor je deelname. Tot ziens!</p>";
69                 break;
70         default:
71                 print '<p>Bedankt voor uw reactie!</p>';
72         }
73         return;
74 }