flatpress/contact.php
Fraenkiman c0e21ef0de Multilingual support for reporting to the site admin
fixes #205

fixes #207
Fixes the problem when the subject contains umlauts that the email cannot be delivered.
2023-02-18 23:35:37 +01:00

149 lines
3.8 KiB
PHP
Executable File

<?php
require_once 'defaults.php';
require_once INCLUDES_DIR . 'includes.php';
// contact form fields
$contactform_inputs = array(
'name',
'email',
'url',
'content'
);
/**
* Validates the POST data and returns a validated array (key=>value) - or <code>false</code> if validation failed
*
* @return boolean|array
*/
function contact_form_validate() {
global $smarty, $contactform_inputs, $lang;
// if the request does not contain all input fields, it might be forged
foreach ($contactform_inputs as $input) {
if (!array_key_exists($input, $_POST)) {
return false;
}
}
$errors = array();
$name = trim(htmlspecialchars($_POST ['name']));
$email = trim(htmlspecialchars($_POST ['email']));
$url = trim(stripslashes(htmlspecialchars($_POST ['url'])));
$content = trim(addslashes($_POST ['content']));
// check name
if (empty($name)) {
$errors ['name'] = $lang ['contact'] ['error'] ['name'];
}
// check email
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors ['email'] = $lang ['contact'] ['error'] ['email'];
}
// check url
if (!empty($url) && !filter_var($url, FILTER_VALIDATE_URL)) {
$errors ['url'] = $lang ['contact'] ['error'] ['www'];
}
// check content
if (empty($content)) {
$errors ['content'] = $lang ['contact'] ['error'] ['content'];
}
// assign error messages to template
if (!empty($errors)) {
$smarty->assign('error', $errors);
return false;
}
$arr ['version'] = system_ver();
$arr ['name'] = $name;
if (!empty($email)) {
($arr ['email'] = $email);
}
if (!empty($url)) {
($arr ['url'] = ($url));
}
$arr ['content'] = $content;
if ($v = utils_ipget()) {
$arr ['ip-address'] = $v;
}
return $arr;
}
function contact_form() {
global $smarty, $lang, $fp_config, $contactform_inputs;
// initial call of the contact form
if (empty($_POST)) {
$smarty->assign('success', system_geterr('contact'));
$smarty->assignByRef('panelstrings', $lang ['contact']);
return;
}
// new form, we (re)set the session data
utils_nocache_headers();
$validationResult = contact_form_validate();
// if validation failed
if ($validationResult === false) {
// assign given input values to the template, so they're prefilled again
$smarty->assign('values', $_POST);
return;
}
// okay, validation returned validated values
// now build the mail content
$msg = "{$lang['contact']['notification']['name']} \n{$validationResult['name']}\n\n";
if (isset($validationResult ['email'])) {
$msg .= "{$lang['contact']['notification']['email']} \n{$validationResult['email']}\n\n";
}
if (isset($validationResult ['url'])) {
$msg .= "{$lang['contact']['notification']['www']} \n{$validationResult['url']}\n\n";
}
$msg .= "{$lang['contact']['notification']['content']} \n{$validationResult['content']}\n";
// send notification mail to site admin
// for non-ASCII characters in the e-mail header, use RFC 1342 — Encodes data with MIME base64
$success = @utils_mail((isset($validationResult ['email']) ? $validationResult ['email'] : $fp_config ['general'] ['email']), "=?utf-8?B?" . base64_encode($lang ['contact'] ['notification'] ['subject']) . "?= =?utf-8?B?" . base64_encode($fp_config ['general'] ['title']) . "?=", $msg);
system_seterr('contact', $success ? 1 : -1);
utils_redirect(basename(__FILE__));
}
function contact_main() {
global $smarty;
// Initialize modifier functions
$smarty->registerPlugin('modifier', 'stripslashes', 'stripslashes');
$smarty->registerPlugin('modifier', 'wp_specialchars', 'wp_specialchars');
$lang = lang_load('contact');
$smarty->assign('subject', $lang ['contact'] ['head']);
$smarty->assign('content', 'shared:contact.tpl');
contact_form();
}
function contact_display() {
global $smarty;
contact_main();
theme_init($smarty);
$smarty->display('default.tpl');
unset($smarty);
do_action('shutdown');
}
system_init();
contact_display();