page: maintain all placeholder includes in widget/
[minimedit.git] / widget / contact.php
diff --git a/widget/contact.php b/widget/contact.php
new file mode 100644 (file)
index 0000000..b505375
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+$error = NULL;
+if ($_POST) {
+       global $User;
+       if ($User) {
+               $_REQUEST['login'] = $User->login;
+       }
+       $error = mailform($_REQUEST);
+       if (!empty($error)) {
+               print "<p class=warn>$error</p>\n\n";
+       }
+}
+
+function mailform($input = [])
+{
+       $source = empty($input['subject']) ? 'reactie' : $input['subject'];
+       $domain = preg_replace('/^www\./', '', $_SERVER['HTTP_HOST']);
+       $rcpt = "info@$domain";
+       $subject = "Formulier {$_SERVER['HTTP_HOST']}: $source";
+
+       if (!$input) {
+               return 'Geen gegevens ontvangen. Probeer het nog eens.';
+       }
+
+switch ($source) {
+       case 'melding':
+               if (empty($input['login'])) {
+                       return "Inloggen is verplicht om een melding te plaatsen.";
+               }
+               if (empty($input['body'])) {
+                       return "Geen bericht opgegeven.";
+               }
+               break;
+       case 'bbq':
+               if (empty($input['naam']) or empty($input['huis'])) {
+                       return 'De bedoeling is juist dat je opgeeft wie er komt.';
+               }
+               $rcpt .= ', Heleen <heleen.terlouw.2910@gmail.com>';
+               break;
+       default:
+       if (empty($input['email']) or !preg_match('/.+@.+\..+/', $input['email'])) {
+               return 'Een geldig e-mailadres is verplicht zodat we antwoord kunnen geven.';
+       }
+       if (isset($input['naam']) and empty($input['naam'])) {
+               return 'Geef ook een naam waarmee we u kunnen aanspreken.';
+       }
+}
+
+       $reply = preg_match('/\A\w+@\w+\.[a-z]+\z/', @$input['email'])
+               ? $input['email'] : "noreply@$domain";
+       $header = "From: $reply";
+
+       foreach (array(
+               'X-Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
+               'User-Agent'        => 'HTTP_USER_AGENT',
+       ) as $mailhdr => $serverhdr) {
+               if (!$_SERVER[$serverhdr]) continue;
+               $header .= "\r\n$mailhdr: ".$_SERVER[$serverhdr];
+       }
+
+       $origin = $_SERVER['REMOTE_ADDR'];
+       if ($resolved = @gethostbyaddr($origin) and $resolved !== $origin) {
+               $origin .= sprintf(' (%s)', gethostbyaddr($origin));
+       }
+       $body = "Ingevuld vanaf $origin:\r\n\r\n";
+
+       foreach ($input as $k => $v) {
+               $body .= "$k: $v\r\n";
+       }
+
+       $sent = mail($rcpt, $subject, $body, $header);
+       if (!$sent)
+               return 'Helaas ging er iets mis bij het doorvoeren. Probeer het later nog eens.';
+
+       switch ($source) {
+       case 'bestelling':
+               print '<p>Bedankt voor uw bestelling. U ontvangt z.s.m. de bevestiging van deze bestelling via uw opgegeven e-mailadres.</p>';
+               break;
+       case 'bbq':
+               print "<p>Bedankt voor je deelname. Tot ziens!</p>";
+               break;
+       case 'melding':
+               print "<p>Bedankt voor de melding. Na goedkeuring zal het hier geplaatst worden.</p>";
+               break;
+       default:
+               print '<p>Bedankt voor uw reactie!</p>';
+       }
+       return;
+}