From d0404cb9b35e1281a88c7c760758f58ae35eaccb Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 17 Feb 2021 19:04:57 -0800 Subject: [PATCH] Issue #4372 Contact page code cleanup and 'layout' template added. --- contact.php | 433 ++++++++++++----------- e107_core/templates/contact_template.php | 11 +- 2 files changed, 245 insertions(+), 199 deletions(-) diff --git a/contact.php b/contact.php index be6e3814d..169ee3c04 100644 --- a/contact.php +++ b/contact.php @@ -25,273 +25,310 @@ class contact_front { $active = varset($pref['contact_visibility'], e_UC_PUBLIC); $contactInfo = trim(SITECONTACTINFO); + $pref = e107::getPref(); if(!check_class($active) && empty($contactInfo) && empty($pref['contact_info'])) { e107::redirect(); } + if(isset($_POST['send-contactus'])) + { + $this->processFormSubmit($sql); + } + $form = ''; + $info = ''; + + if(deftrue('SITECONTACTINFO') || !empty($pref['contact_info'])) + { + $info = $this->renderContactInfo(); + } + if(check_class($active) && isset($pref['sitecontacts']) && $pref['sitecontacts'] != e_UC_NOBODY) + { + $form = $this->renderContactForm(); + } + elseif($active == e_UC_MEMBER && ($pref['sitecontacts'] != e_UC_NOBODY)) + { + $this->renderSignupRequired(); + } + + if(!$LAYOUT = e107::getCoreTemplate('contact', 'layout')) + { + $LAYOUT = '{---CONTACT-INFO---} {---CONTACT-FORM---} '; + } + + echo str_replace( + ['{---CONTACT-FORM---}', '{---CONTACT-INFO---}'], + [$form, $info], + $LAYOUT + ); + } + + /** + * @param $sql + * @return array + */ + private function processFormSubmit() + { + $sql = e107::getDb(); $sec_img = e107::getSecureImg(); $tp = e107::getParser(); $ns = e107::getRender(); $pref = e107::getPref(); - $CONTACT_FORM = varset($GLOBALS['CONTACT_FORM']); + $error = ""; + $ignore = false; - if (empty($CONTACT_FORM)) - { - /* if (file_exists(THEME."contact_template.php")) + + // Contact Form Filter ----- + + $contact_filter = e107::pref('core', 'contact_filter', ''); + + if(!empty($contact_filter)) + { + $tmp = explode("\n", $contact_filter); + + if(!empty($tmp)) { - require_once(THEME."contact_template.php"); - } - else*/ - { - $CONTACT_FORM = e107::getCoreTemplate('contact','form'); // require_once(e_THEME."templates/contact_template.php"); + foreach($tmp as $filterItem) + { + if(strpos($_POST['body'], $filterItem) !== false) + { + $ignore = true; + break; + } + + } } } - if(isset($_POST['send-contactus'])) - { - $error = ""; - $ignore = false; + // --------- + $sender_name = $tp->toEmail($_POST['author_name'], true, 'RAWTEXT'); + $sender = check_email($_POST['email_send']); + $subject = $tp->toEmail($_POST['subject'], true, 'RAWTEXT'); + $body = nl2br($tp->toEmail($_POST['body'], true, 'RAWTEXT')); - // Contact Form Filter ----- - - $contact_filter = e107::pref('core','contact_filter',''); - - if(!empty($contact_filter)) - { - $tmp = explode("\n", $contact_filter); - - if(!empty($tmp)) - { - foreach($tmp as $filterItem) - { - if(strpos($_POST['body'], $filterItem)!==false) - { - $ignore = true; - break; - } - - } - } - } - - // --------- - - $sender_name = $tp->toEmail($_POST['author_name'], true,'RAWTEXT'); - $sender = check_email($_POST['email_send']); - $subject = $tp->toEmail($_POST['subject'], true,'RAWTEXT'); - $body = nl2br($tp->toEmail($_POST['body'], true,'RAWTEXT')); - - $email_copy = !empty($_POST['email_copy']) ? 1 : 0; + $email_copy = !empty($_POST['email_copy']) ? 1 : 0; // Check Image-Code - if (isset($_POST['rand_num']) && !$sec_img->verify_code($_POST['rand_num'], $_POST['code_verify'])) - { - $error .= LANCONTACT_15."\\n"; - } + if(isset($_POST['rand_num']) && ($sec_img->invalidCode($_POST['rand_num'], $_POST['code_verify']))) + { + $error .= LANCONTACT_15 . "\\n"; + } // Check message body. - if(strlen(trim($body)) < 15) - { - $error .= LANCONTACT_12."\\n"; - } + if(strlen(trim($body)) < 15) + { + $error .= LANCONTACT_12 . "\\n"; + } // Check subject line. - if(isset($_POST['subject']) && strlen(trim($subject)) < 2) - { - $error .= LANCONTACT_13."\\n"; - } - - if(!strpos(trim($sender),"@")) - { - $error .= LANCONTACT_11."\\n"; - } + if(isset($_POST['subject']) && strlen(trim($subject)) < 2) + { + $error .= LANCONTACT_13 . "\\n"; + } + if(!strpos(trim($sender), "@")) + { + $error .= LANCONTACT_11 . "\\n"; + } // Check email address on remote server (if enabled). XXX Problematic! - /* - if ($pref['signup_remote_emailcheck'] && $error == '') + /* + if ($pref['signup_remote_emailcheck'] && $error == '') + { + require_once(e_HANDLER."mail_validation_class.php"); + list($adminuser,$adminhost) = explode('@', SITEADMINEMAIL, 2); + $validator = new email_validation_class; + $validator->localuser= $adminuser; + $validator->localhost= $adminhost; + $validator->timeout=3; + // $validator->debug=1; + // $validator->html_debug=1; + if($validator->ValidateEmailBox($sender) != 1) { - require_once(e_HANDLER."mail_validation_class.php"); - list($adminuser,$adminhost) = explode('@', SITEADMINEMAIL, 2); - $validator = new email_validation_class; - $validator->localuser= $adminuser; - $validator->localhost= $adminhost; - $validator->timeout=3; - // $validator->debug=1; - // $validator->html_debug=1; - if($validator->ValidateEmailBox($sender) != 1) - { - $error .= LANCONTACT_11."\\n"; - } - + $error .= LANCONTACT_11."\\n"; } - */ - // No errors - so proceed to email the admin and the user (if selected). - if($ignore === true) - { - $ns->tablerender('', "
".LANCONTACT_09."
"); // ignore and leave them none the wiser. - e107::getDebug()->log("Contact form post ignored"); - require_once(FOOTERF); - exit; - } - elseif(empty($error)) - { - $body .= "

+ } + */ + + // No errors - so proceed to email the admin and the user (if selected). + if($ignore === true) + { + $ns->tablerender('', "
" . LANCONTACT_09 . "
"); // ignore and leave them none the wiser. + e107::getDebug()->log("Contact form post ignored"); + require_once(FOOTERF); + exit; + } + elseif(empty($error)) + { + $body .= "

- "; + "; - if (USER) + if(USER) + { + $body .= ""; + } + + if(empty($_POST['contact_person']) && !empty($pref['sitecontacts'])) // only 1 person, so contact_person not posted. + { + if($pref['sitecontacts'] == e_UC_MAINADMIN) { - $body .= ""; + $query = "user_perms = '0' OR user_perms = '0.' "; } - - if(empty($_POST['contact_person']) && !empty($pref['sitecontacts'])) // only 1 person, so contact_person not posted. + elseif($pref['sitecontacts'] == e_UC_ADMIN) { - if($pref['sitecontacts'] == e_UC_MAINADMIN) - { - $query = "user_perms = '0' OR user_perms = '0.' "; - } - elseif($pref['sitecontacts'] == e_UC_ADMIN) - { - $query = "user_admin = 1 "; - } - else - { - $query = "FIND_IN_SET(".$pref['sitecontacts'].",user_class) "; - } + $query = "user_admin = 1 "; } else { - $query = "user_id = ".intval($_POST['contact_person']); + $query = "FIND_IN_SET(" . $pref['sitecontacts'] . ",user_class) "; } + } + else + { + $query = "user_id = " . intval($_POST['contact_person']); + } - if($sql->gen("SELECT user_name,user_email FROM `#user` WHERE ".$query." LIMIT 1")) + if($sql->gen("SELECT user_name,user_email FROM `#user` WHERE " . $query . " LIMIT 1")) + { + $row = $sql->fetch(); + $send_to = $row['user_email']; + $send_to_name = $row['user_name']; + } + else + { + $send_to = SITEADMINEMAIL; + $send_to_name = ADMIN; + } + + + // ---------------------- + + $CONTACT_EMAIL = e107::getCoreTemplate('contact', 'email'); + + unset($_POST['contact_person'], $_POST['author_name'], $_POST['email_send'], $_POST['subject'], $_POST['body'], $_POST['rand_num'], $_POST['code_verify'], $_POST['send-contactus']); + + if(!empty($_POST)) // support for custom fields in contact template. + { + foreach($_POST as $k => $v) { - $row = $sql->fetch(); - $send_to = $row['user_email']; - $send_to_name = $row['user_name']; - } - else - { - $send_to = SITEADMINEMAIL; - $send_to_name = ADMIN; + $body .= ""; } + } + $body .= "
IP:".e107::getIPHandler()->getIP(TRUE)."
IP:" . e107::getIPHandler()->getIP(true) . "
User:#" . USERID . " " . USERNAME . "
User:#".USERID." ".USERNAME."
" . $k . ":" . $tp->toEmail($v, true, 'RAWTEXT') . "
"; - // ---------------------- - - $CONTACT_EMAIL = e107::getCoreTemplate('contact','email'); - - unset($_POST['contact_person'], $_POST['author_name'], $_POST['email_send'] , $_POST['subject'], $_POST['body'], $_POST['rand_num'], $_POST['code_verify'], $_POST['send-contactus']); + if(!empty($CONTACT_EMAIL['subject'])) + { + $vars = array('CONTACT_SUBJECT' => $subject, 'CONTACT_PERSON' => $send_to_name); if(!empty($_POST)) // support for custom fields in contact template. { - foreach($_POST as $k=>$v) + foreach($_POST as $k => $v) { - $body .= "".$k.":".$tp->toEmail($v, true,'RAWTEXT').""; + $scKey = strtoupper($k); + $vars[$scKey] = $tp->toEmail($v, true, 'RAWTEXT'); } } - $body .= ""; - - if(!empty($CONTACT_EMAIL['subject'])) - { - $vars = array('CONTACT_SUBJECT'=>$subject,'CONTACT_PERSON'=>$send_to_name); - - if(!empty($_POST)) // support for custom fields in contact template. - { - foreach($_POST as $k=>$v) - { - $scKey = strtoupper($k); - $vars[$scKey] =$tp->toEmail($v, true,'RAWTEXT'); - } - } - - $subject = $tp->simpleParse($CONTACT_EMAIL['subject'],$vars); - } - - // ----------------------- - - // Send as default sender to avoid spam issues. Use 'replyto' instead. - $eml = array( - 'subject' => $subject, - 'sender_name' => $sender_name, - 'body' => $body, - 'replyto' => $sender, - 'replytonames' => $sender_name, - 'template' => 'default' - ); - - - - $message = e107::getEmail()->sendEmail($send_to, $send_to_name, $eml, false) ? LANCONTACT_09 : LANCONTACT_10; - - // $message = (sendemail($send_to,"[".SITENAME."] ".$subject, $body,$send_to_name,$sender,$sender_name)) ? LANCONTACT_09 : LANCONTACT_10; - - if(isset($pref['contact_emailcopy']) && $pref['contact_emailcopy'] && $email_copy == 1) - { - require_once(e_HANDLER."mail.php"); - sendemail($sender,"[".SITENAME."] ".$subject, $body,ADMIN,$sender,$sender_name); - } - - - $ns->tablerender('', "
".$message."
"); - require_once(FOOTERF); - exit; - } - else - { - message_handler("P_ALERT", $error); + $subject = $tp->simpleParse($CONTACT_EMAIL['subject'], $vars); } + // ----------------------- + + // Send as default sender to avoid spam issues. Use 'replyto' instead. + $eml = array( + 'subject' => $subject, + 'sender_name' => $sender_name, + 'body' => $body, + 'replyto' => $sender, + 'replytonames' => $sender_name, + 'template' => 'default' + ); + + + $message = e107::getEmail()->sendEmail($send_to, $send_to_name, $eml) ? LANCONTACT_09 : LANCONTACT_10; + + // $message = (sendemail($send_to,"[".SITENAME."] ".$subject, $body,$send_to_name,$sender,$sender_name)) ? LANCONTACT_09 : LANCONTACT_10; + + if(isset($pref['contact_emailcopy']) && $pref['contact_emailcopy'] && $email_copy == 1) + { + require_once(e_HANDLER . "mail.php"); + sendemail($sender, "[" . SITENAME . "] " . $subject, $body, ADMIN, $sender, $sender_name); + } + + + $ns->tablerender('', "
" . $message . "
"); + } + else + { + message_handler("P_ALERT", $error); + } + + } + /** + * @return string html + */ + private function renderContactInfo() + { + $contact_shortcodes = e107::getScBatch('contact'); - if(deftrue('SITECONTACTINFO') || !empty($pref['contact_info'])) + $CONTACT_INFO = varset($GLOBALS['CONTACT_INFO']); + + if(empty($CONTACT_INFO)) { - if(!isset($CONTACT_INFO)) - { - $CONTACT_INFO = e107::getCoreTemplate('contact','info'); - } - - - $contact_shortcodes->wrapper('contact/info'); - $text = $tp->parseTemplate($CONTACT_INFO, true, $contact_shortcodes); - $ns->tablerender(LANCONTACT_01, $text,"contact-info"); + $CONTACT_INFO = e107::getCoreTemplate('contact', 'info'); } + $contact_shortcodes->wrapper('contact/info'); + $text = e107::getParser()->parseTemplate($CONTACT_INFO, true, $contact_shortcodes); + return e107::getRender()->tablerender(LANCONTACT_01, $text, "contact-info", true); - if(check_class($active) && isset($pref['sitecontacts']) && $pref['sitecontacts'] != e_UC_NOBODY) + } + + + private function renderContactForm() + { + + $CONTACT_FORM = varset($GLOBALS['CONTACT_FORM']); + + if(empty($CONTACT_FORM)) { - - // Wrapper support - $contact_shortcodes->wrapper('contact/form'); - - $text = $tp->parseTemplate($CONTACT_FORM, true, $contact_shortcodes); - - if(trim($text) != "") - { - $ns->tablerender(LANCONTACT_02, $text, "contact-form"); - } + $CONTACT_FORM = e107::getCoreTemplate('contact', 'form'); // require_once(e_THEME."templates/contact_template.php"); } - elseif($active == e_UC_MEMBER && ($pref['sitecontacts'] != e_UC_NOBODY)) - { - $srch = array("[","]"); - $repl = array("",""); - $message = LANCONTACT_16; // "You must be [registered] and signed-in to use this form."; - $ns->tablerender(LANCONTACT_02, "
".str_replace($srch, $repl, $message)."
", "contact"); + $contact_shortcodes = e107::getScBatch('contact'); + $contact_shortcodes->wrapper('contact/form'); + + $text = e107::getParser()->parseTemplate($CONTACT_FORM, true, $contact_shortcodes); + + if(trim($text) !== '') + { + return e107::getRender()->tablerender(LANCONTACT_02, $text, "contact-form", true); } } + + + private function renderSignupRequired() + { + + $srch = array("[", "]"); + $repl = array("", ""); + $message = LANCONTACT_16; // "You must be [registered] and signed-in to use this form."; + + e107::getRender()->tablerender(LANCONTACT_02, "
" . str_replace($srch, $repl, $message) . "
", "contact"); + } + } diff --git a/e107_core/templates/contact_template.php b/e107_core/templates/contact_template.php index 836793ab5..654567832 100644 --- a/e107_core/templates/contact_template.php +++ b/e107_core/templates/contact_template.php @@ -130,10 +130,19 @@ $CONTACT_TEMPLATE['form'] = " "; + +// Set the layout and order of the info and form. +$CONTACT_TEMPLATE['layout'] = '{---CONTACT-INFO---} + {---CONTACT-FORM---} + '; + + + // Customize the email subject // Variables: CONTACT_SUBJECT and CONTACT_PERSON as well as any custom fields set in the form. ) $CONTACT_TEMPLATE['email']['subject'] = "{CONTACT_SUBJECT}"; - + +