widget/contact: reduce code indentation of post check
[minimedit.git] / widget / contact.php
1 <?php
2 if (!$_POST) {
3         return;
4 }
5
6 $error = NULL;
7 global $User;
8 if ($User->login) {
9         $_REQUEST['login'] = $User->login;
10         $_REQUEST['email'] = $_REQUEST['email'] ?: $User->email;
11 }
12 else {
13         unset($_REQUEST['login']);
14 }
15 $error = mailform($_REQUEST, $Page->place);
16 if (!empty($error)) {
17         print "<p class=warn>$error</p>\n\n";
18 }
19
20 function mailform($input = [], $config = [])
21 {
22         $source = $config['subject'] ??
23                 (empty($input['subject']) ? 'reactie' : $input['subject']);
24         $domain = preg_replace('/^www\./', '', $_SERVER['HTTP_HOST']);
25         $rcpt = $config['rcpt'] ?? "info@$domain";
26         $subject = "Formulier {$_SERVER['HTTP_HOST']}: $source";
27
28         if (!$input) {
29                 return 'Geen gegevens ontvangen. Probeer het nog eens.';
30         }
31
32 switch ($source) {
33         case 'melding':
34                 if (empty($input['login'])) {
35                         return "Inloggen is verplicht om een melding te plaatsen.";
36                 }
37                 if (empty($input['body'])) {
38                         return "Geen bericht opgegeven.";
39                 }
40                 break;
41         case 'bbq':
42                 if (empty($input['naam']) or empty($input['huis'])) {
43                         return 'De bedoeling is juist dat je opgeeft wie er komt.';
44                 }
45                 break;
46         default:
47         if (empty($input['email']) or !preg_match('/.+@.+\..+/', $input['email'])) {
48                 return 'Een geldig e-mailadres is verplicht zodat we antwoord kunnen geven.';
49         }
50         if (isset($input['naam']) and empty($input['naam'])) {
51                 return 'Geef ook een naam waarmee we u kunnen aanspreken.';
52         }
53 }
54
55         $reply = preg_match('/\A[^\s\'@]{1,64}@[.a-zA-Z0-9-]{4,63}\z/', @$input['email'])
56                 ? $input['email'] : "noreply@$domain";
57         if ($displayname = @$input['naam']) {
58                 $reply = sprintf('"%s" <%s>', addcslashes($displayname, "\\\"\0..\37"), $reply);
59         }
60         $header = "From: $reply";
61
62         foreach (array(
63                 'X-Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
64                 'User-Agent'        => 'HTTP_USER_AGENT',
65         ) as $mailhdr => $serverhdr) {
66                 if (empty($_SERVER[$serverhdr])) continue;
67                 $header .= "\r\n$mailhdr: ".$_SERVER[$serverhdr];
68         }
69
70         $origin = $_SERVER['REMOTE_ADDR'];
71         if ($resolved = @gethostbyaddr($origin) and $resolved !== $origin) {
72                 $origin .= sprintf(' (%s)', gethostbyaddr($origin));
73         }
74         $body = "Ingevuld vanaf $origin:\r\n\r\n";
75
76         foreach ($input as $k => $v) {
77                 $body .= "$k: $v\r\n";
78         }
79
80         $sent = mail($rcpt, $subject, $body, $header);
81         if (!$sent)
82                 return 'Helaas ging er iets mis bij het doorvoeren. Probeer het later nog eens.';
83
84         switch ($source) {
85         case 'bestelling':
86                 print '<p>Bedankt voor uw bestelling. U ontvangt z.s.m. de bevestiging van deze bestelling via uw opgegeven e-mailadres.</p>';
87                 break;
88         case 'bbq':
89                 print "<p>Bedankt voor je deelname. Tot ziens!</p>";
90                 break;
91         case 'melding':
92                 print "<p>Bedankt voor de melding. Na goedkeuring zal het hier geplaatst worden.</p>";
93                 break;
94         default:
95                 print '<p>Bedankt voor uw reactie!</p>';
96         }
97         return;
98 }