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