$error)); } function get_form_response($success, $data) { if (!is_array($data)) die('data must be array'); $status = array(); $status[$success ? 'FormResponse' : 'MusePHPFormResponse'] = array_merge(array('success' => $success), $data); return json_serialize($status); } function check_required_fields($form) { $errors = array(); foreach ($form['fields'] as $field => $properties) { if (!$properties['required']) continue; if (!array_key_exists($field, $_REQUEST) || empty($_REQUEST[$field])) array_push($errors, array('field' => $field, 'message' => $properties['errors']['required'])); else if (!check_field_value_format($form, $field, $properties)) array_push($errors, array('field' => $field, 'message' => $properties['errors']['format'])); } if (!empty($errors)) die(get_form_error_response(array('fields' => $errors))); } function check_field_value_format($form, $field, $properties) { $value = get_form_field_value($field, $properties, $form['resources']); switch($properties['type']) { case 'checkbox': case 'string': case 'captcha': // no format to validate for those fields return true; case 'recaptcha': if (!array_key_exists('recaptcha', $form) || !array_key_exists('private_key', $form['recaptcha']) || empty($form['recaptcha']['private_key'])) die(get_form_error_response($form['resources']['invalid_reCAPTCHA_private_key'])); $resp = recaptcha_check_answer($form['recaptcha']['private_key'], $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); return $resp->is_valid; case 'email': return 1 == preg_match('/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i', $value); default: die(get_form_error_response(sprintf($form['resources']['invalid_field_type'], $properties['type']))); } } function email_form_submission($form) { if(!defined('PHP_EOL')) define('PHP_EOL', '\r\n'); $form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : ''); $to = $form['email']['to']; $subject = $form['subject']; $message = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']); $headers = get_email_headers($to, $form_email); $sent = @mail($to, $subject, $message, $headers); if(!$sent) die(get_form_error_response($form['resources']['failed_to_send_email'])); $success_data = array( 'redirect' => $form['success_redirect'] ); echo get_form_response(true, $success_data); } function get_email_headers($to_email, $form_email) { $headers = 'From: ' . $to_email . PHP_EOL; $headers .= 'Reply-To: ' . $form_email . PHP_EOL; $headers .= 'X-Mailer: Adobe Muse CC 2014.3.2.295 with PHP' . PHP_EOL; $headers .= 'Content-type: text/html; charset=utf-8' . PHP_EOL; return $headers; } function get_email_body($subject, $heading, $fields, $resources) { $message = ''; $message .= ''; $message .= '
' . encode_for_form($field_wrapper['properties']['label']) . ': | ' . get_form_field_value($field_wrapper['field'], $field_wrapper['properties'], $resources) . ' |