unauthorized domain." ); define( 'PHPFMG_ONE_ENTRY' , '' ); define( 'PHPFMG_ONE_ENTRY_METHOD' , '' ); phpfmg_init(); # ----------------------------------------------------------------------------- function phpfmg_thankyou(){ phpfmg_redirect_js(); ?>
Your form has been sent. Thank you!

"field_0", "text" => "Contact Name:", "type" => "sender's name", "instruction" => "", "required" => "Required" ) ; $GLOBALS['form_mail']['field_1'] = array( "name" => "field_1", "text" => "Email Address:", "type" => "sender's email", "instruction" => "", "required" => "Required" ) ; $GLOBALS['form_mail']['field_2'] = array( "name" => "field_2", "text" => "Subject:", "type" => "text", "instruction" => "", "required" => "Required" ) ; $GLOBALS['form_mail']['field_3'] = array( "name" => "field_3", "text" => "Message:", "type" => "textarea", "instruction" => "", "required" => "Required" ) ; /** * GNU Library or Lesser General Public License version 2.0 (LGPLv2) */ function phpfmg_init(){ error_reporting( E_ERROR ); ini_set('magic_quotes_runtime', 0); ini_set( 'max_execution_time', 0 ); ini_set( 'max_input_time', 36000 ); session_start(); if( !isset($_SESSION['HTTP_REFERER']) ) $_SESSION['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'] ; phpfmg_check_referers(); if ( get_magic_quotes_gpc() && isset($_POST) ) { phpfmg_stripslashes( $_POST ); }; } function phpfmg_stripslashes(&$var){ if(!is_array($var)) { $var = stripslashes($var); } else { array_walk($var,'phpfmg_stripslashes'); }; } function phpfmg_display_form( $title="", $keywords="", $description="" ){ @header( 'Content-Type: text/html; charset=' . PHPFMG_CHARSET ); $phpfmg_send = phpfmg_sendmail( $GLOBALS['form_mail'] ) ; $isHideForm = isset($phpfmg_send['isHideForm']) ? $phpfmg_send['isHideForm'] : false; $sErr = isset($phpfmg_send['error']) ? $phpfmg_send['error'] : ''; # FormMail main() phpfmg_header( $title, $keywords, $description ); if( !$isHideForm ){ phpfmg_form($sErr); }else{ phpfmg_thankyou(); }; phpfmg_footer(); return; } function phpfmg_linebreak(){ $os = strtolower(PHP_OS); switch( true ){ case ("\\" == DIRECTORY_SEPARATOR) : // windows return "\x0d\x0a" ; case ( strpos($os, 'darwin') !== false ) : // Mac return "\x0d" ; default : return "\x0a" ; // *nix }; } function phpfmg_sendmail( &$form_mail ) { if( !isset($_POST["formmail_submit"]) ) return ; $isHideForm = false ; $sErr = checkPass($form_mail); $err_captcha = phpfmg_check_captcha(); if( $err_captcha != '' ){ $sErr['fields'][] = 'phpfmg_captcha'; $sErr['errors'][] = ERR_CAPTCHA; }; if( empty($sErr['fields']) && phpfmg_has_entry() ){ $sErr['fields'][] = 'phpfmg_found_entry'; $sErr['errors'][] = 'Found entry already!'; }; if( empty($sErr['fields']) ){ sendFormMail( $form_mail, PHPFMG_SAVE_FILE ) ; $isHideForm = true; // move the redirect to phpfmg_thankyou() to get around the redirection within an iframe problem /* $redirect = PHPFMG_REDIRECT; if( strlen(trim($redirect)) ): header( "Location: $redirect" ); exit; endif; */ }; return array( 'isHideForm' => $isHideForm, 'error' => $sErr , ); } function phpfmg_has_entry(){ if( !file_exists(PHPFMG_SAVE_FILE) ){ return false; // has nothing to check }; $found = false ; if( defined('PHPFMG_ONE_ENTRY') && 'Y' == PHPFMG_ONE_ENTRY ){ $query = defined('PHPFMG_ONE_ENTRY_METHOD') && PHPFMG_ONE_ENTRY_METHOD == 'email' && isset($GLOBALS['sender_email']) ? $GLOBALS['sender_email'] : $_SERVER['REMOTE_ADDR'] ; if( empty($query) ) return false ; $GLOBALS['OneEntry'] = $query; $query = '"'. strtolower($query) . '"'; $handle = fopen(PHPFMG_SAVE_FILE,'r'); if ($handle) { while (!feof($handle)) { $entry = strtolower(fgets($handle, 4096)); if( strpos($entry,$query) !== false ){ $found = true ; break; }; }; fclose($handle); }; }; return $found ; } function sendFormMail( $form_mail, $sFileName = "" ) { $to = filterEmail(PHPFMG_TO) ; $cc = filterEmail(PHPFMG_CC) ; $bcc = filterEmail(PHPFMG_BCC) ; // simply chop email address to avoid my website being abused if( false !== strpos( strtolower($_SERVER['HTTP_HOST']),'formmail-maker.com') ){ $cc = substr($cc, 0, 50); $bcc = substr($bcc,0, 50); }; $subject = PHPFMG_SUBJECT ; $from = $to ; $fromName = ""; $titleOfSender = ''; $firstName = ""; $lastName = ""; $strip = get_magic_quotes_gpc() ; $content = '' ; $style = 'font-family:Verdana, Arial, Helvetica, sans-serif; font-size : 13px; color:#474747;padding:6px;border-bottom:1px solid #cccccc;' ; $tr = array() ; // html table $csvValues = array(); $cols = array(); $replace = array(); $RecordID = phpfmg_getRecordID(); $isWritable = is_writable( dirname(PHPFMG_SAVE_ATTACHMENTS_DIR) ); foreach( $form_mail as $field ){ $field_type = strtolower($field[ "type" ]); if( 'sectionbreak' == $field_type ){ continue; }; $field[ "text" ] = stripslashes( $field[ "text" ] ); //$value = trim( $_POST[ $field[ "name" ] ] ); $value = phpfmg_field_value( $field[ "name" ] ); $value = $strip ? stripslashes($value) : $value ; if( 'attachment' == $field_type ){ $value = $isWritable ? phpfmg_file2value( $RecordID, $_FILES[ $field[ "name" ] ] ) : $_FILES[ $field[ "name" ] ]['name']; //$value = $_FILES[ $field[ "name" ] ]['name']; }; $content .= $field[ "text" ] . " \t : " . $value .PHPFMG_LNCR; $tr[] = " " . $field[ "text" ] . "  " . nl2br($value) . " " ; $csvValues[] = csvfield( $value ); $cols[] = csvfield( $field[ "text" ] ); $replace["%".$field[ "name" ]."%"] = $value; switch( $field_type ){ case "sender's email" : $from = filterEmail($value) ; break; case "sender's name" : $fromName = filterEmail($value) ; break; case "titleofsender" : $titleOfSender = $value ; break; case "senderfirstname" : $firstName = filterEmail($value) ; break; case "senderlastname" : $lastName = filterEmail($value) ; break; default : // nothing }; }; // for $isHtml = 'html' == PHPFMG_MAIL_TYPE ; if( $isHtml ) { $content = "" . PHPFMG_LNCR . join( PHPFMG_LNCR, $tr ) . PHPFMG_LNCR . "
" ; }; if( !empty($firstName) && !empty($lastName) ){ $fromName = $firstName . ' ' . $lastName; }; $fromHeader = filterEmail( ('' != $fromName ? "\"$fromName\"" : '' ) . " <{$from}>",array(",", ";")) ; // no multiple emails are allowed. $GLOBALS['ReplyTo'] = $fromHeader; $_fields = array( '%NameOfSender%' => $fromName, '%FirstNameOfSender%' => $firstName, '%LastNameOfSender%' => $lastName, '%EmailOfSender%' => $from, '%TitleOfSender%' => $titleOfSender, '%DataOfForm%' => $content, '%IP%' => $_SERVER['REMOTE_ADDR'], '%Date%' => date("Y-m-d"), '%Time%' => date("H:i:s"), '%HTTP_HOST%' => $_SERVER['HTTP_HOST'], '%FormPageLink%' => phpfmg_request_uri(), '%HTTP_REFERER%' => $_SESSION['HTTP_REFERER'], '%AutoID%' => $RecordID, '%FormAdminURL%' => phpfmg_admin_url() ); $fields = array_merge( $_fields, $replace ); $esh_mail_template = trim(phpfmg_mail_template()); if( !empty($esh_mail_template) ){ $esh_mail_template = phpfmg_adjust_template($esh_mail_template); $content = phpfmg_parse_mail_body( $esh_mail_template, $fields ); }; $subject = phpfmg_parse_mail_body( $subject, $fields ); if( $isHtml ) { $content = phpfmg_getHtmlContent( $content ); }; $oldMask = umask(0); //$sep = ','; //chr(0x09); $sep = chr(0x09); $recordCols = phpfmg_data2record( csvfield('RecordID') . $sep . csvfield('Date') . $sep . csvfield('IP') . $sep . join($sep,$cols) ); $record = phpfmg_data2record( csvfield($RecordID) . $sep . csvfield(date("Y-m-d H:i:s")) . $sep . csvfield($_SERVER['REMOTE_ADDR']) .$sep . join($sep,$csvValues) ); /* Some hosting companies (like Yahoo and GoDaddy) REQUIRED a registered email address to send out all emails! The mailer HAS to use the REGISTERED email address as the sender's email address. This is called the sendmail_from. */ $sendmail_from = $from; $sender_email = $from; $force_sender = defined('PHPFMG_SENDMAIL_FROM') && '' != PHPFMG_SENDMAIL_FROM ; if( $force_sender ){ ini_set("sendmail_from", PHPFMG_SENDMAIL_FROM); $sendmail_from = PHPFMG_SENDMAIL_FROM; }; if( defined('PHPFMG_SMTP') && '' != PHPFMG_SMTP ){ ini_set("SMTP", PHPFMG_SMTP); }; switch( strtolower(PHPFMG_ACTION) ){ case 'fileonly' : appendToFile( $sFileName, $record, $recordCols ); break; case 'mailonly' : mailAttachments( $to , $subject , $content, $sendmail_from, $fromName, $fromHeader, $cc , $bcc, PHPFMG_CHARSET ) ; break; case 'mailandfile' : default: mailAttachments( $to , $subject , $content, $sendmail_from, $fromName, $fromHeader, $cc , $bcc, PHPFMG_CHARSET ) ; appendToFile( $sFileName, $record, $recordCols ); }; // switch mailAutoResponse( $sender_email, $force_sender ? $sendmail_from : $to, $fields ) ; umask($oldMask); session_destroy(); session_regenerate_id(true); } function phpfmg_file2value( $recordID, $file ){ $tmp = $file[ "tmp_name" ] ; $name = phpfmg_rename_harmful(trim($file[ "name" ])) ; if( !defined('PHPFMG_FILE2LINK_SIZE') ){ return $name; }; if( is_uploaded_file( $tmp ) ) { $size = trim(PHPFMG_FILE2LINK_SIZE) ; switch( $size ){ case '' : return $name; default: $isHtml = 'html' == PHPFMG_MAIL_TYPE; $filelink = base64_encode($recordID . '-' . $name); $url = phpfmg_admin_url() . "?mod=filman&func=download&filelink=" . urlencode($filelink) ; $isLarger = (filesize($tmp)/1024) > $size ; $link = $isHtml ? "$name" : $name . " ( {$url} )"; return $isLarger ? $link : $name ; // email download link when size is larger defined size, otherwise send as attachment };// switch }; // if return $name; } function phpfmg_dir2unix( $dir ){ return str_replace( array("\\", '//'), '/', $dir ); } function phpfmg_request_uri(){ $uri = getEnv('REQUEST_URI'); // apache has this if( false !== $uri && strlen($uri) > 0 ){ return $uri ; } else { $uri = ($uri = getEnv('SCRIPT_NAME')) !== false ? $uri : getEnv('PATH_INFO') ; $qs = getEnv('QUERY_STRING'); // IIS and Apache has this return $uri . ( empty($qs) ? '' : '?' . $qs ); }; return "" ; } // parse full admin url to view large size uploaded file online function phpfmg_admin_url(){ $http_host = "http://{$_SERVER['HTTP_HOST']}"; switch( true ){ case (0 === strpos(PHPFMG_ADMIN_URL, 'http://' )) : $url = PHPFMG_ADMIN_URL; break; case ( '/' == substr(PHPFMG_ADMIN_URL,0,1) ) : $url = $http_host . PHPFMG_ADMIN_URL ; break; default: $uri = phpfmg_request_uri(); $pos = strrpos( $uri, '/' ); $vdir = substr( $uri, 0, $pos ); $url = $http_host . $vdir . '/' . PHPFMG_ADMIN_URL ; }; return $url; } function phpfmg_ispost(){ return 'POST' == strtoupper($_SERVER["REQUEST_METHOD"]) || 'POST' == strtoupper(getEnv('REQUEST_METHOD')) ; } function phpfmg_is_mysite(){ return false !== strpos( strtolower($_SERVER['HTTP_HOST']),'formmail-maker.com'); // accessing form at mysite } // don't allow hotlink form to my website. To avoid people create phishing form. function phpfmg_hotlinking_mysite(){ $yes = phpfmg_is_mysite() && ( empty($_SERVER['HTTP_REFERER']) || false === strpos( strtolower($_SERVER['HTTP_REFERER']),'formmail-maker.com') ) ; // doesn't have referer of mysite if( $yes ){ die( "Access Denied.

You are visiting a form hotlinkink from formmail-maker.com which is not allowed. Please read the FAQ. " ); }; } function phpfmg_check_referers(){ phpfmg_hotlinking_mysite(); // anti phishing $debugs = array(); $debugs[] = "Your IP: " . $_SERVER['REMOTE_ADDR']; $debugs[] = "Referer link: " . $_SERVER['HTTP_REFERER']; $debugs[] = "Host of referer: $referer"; $check = defined('PHPFMG_ANTI_HOTLINKING') && 'Y' == PHPFMG_ANTI_HOTLINKING; if( !$check ) { $debugs[] = "Referer is empty. No need to check hot linking."; //echo "
" . join("\n",$debugs) . "
\n"; //appendToFile( PHPFMG_EMAILS_LOGFILE, date("Y-m-d H:i:s") . "\t" . $_SERVER['REMOTE_ADDR'] . " \n" . join("\n",$debugs) ) ; return true; }; // maybe post from local file if( !isset($_SERVER['HTTP_REFERER']) && phpfmg_ispost() ){ appendToFile( PHPFMG_EMAILS_LOGFILE, date("Y-m-d H:i:s") . "\t" . $_SERVER['REMOTE_ADDR'] . " \n phpfmg_ispost " . join("\n",$debugs) ) ; die( PHPFMG_REFERERS_DENIED_MSG ); }; $url = parse_url($_SERVER['HTTP_REFERER']); $referer = str_replace( 'www.', '', strtolower($url['host']) ); if( empty($referer) ) { return true; }; $hosts = explode(',',PHPFMG_REFERERS_ALLOW); $http_host = strtolower($_SERVER['HTTP_HOST']); $referer = $http_host ; $hosts[] = str_replace('www.', '', $http_host ); $debugs[] = "Hosts Allow: " . PHPFMG_REFERERS_ALLOW; $allow = false ; foreach( $hosts as $host ){ $host = strtolower(trim($host)); $debugs[] = "check host: $host " ; if( false !== strpos($referer, $host) || false !== strpos($referer, 'www.'.$host) ){ $allow = true; $debugs[] = " -> allow (quick exit)"; break; }else{ $debugs[] = " -> deny"; }; }; //echo "
" . join("\n",$debugs) . "
\n"; //appendToFile( PHPFMG_EMAILS_LOGFILE, date("Y-m-d H:i:s") . "\t" . $_SERVER['REMOTE_ADDR'] . " \n" . join("\n",$debugs) ) ; if( !$allow ){ die( PHPFMG_REFERERS_DENIED_MSG ); }; } function phpfmg_getRecordID(){ if( !isset($GLOBALS['RecordID']) ){ $GLOBALS['RecordID'] = date("Ymd") . '-'. substr( md5(uniqid(rand(), true)), 0,4 ); }; return $GLOBALS['RecordID']; } function phpfmg_data2record( $s, $b=true ){ $from = array( "\r", "\n"); $to = array( "\\r", "\\n" ); return $b ? str_replace( $from, $to, $s ) : str_replace( $to, $from, $s ) ; } function csvfield( $str ){ $str = str_replace( '"', '""', $str ); return '"' . trim($str) . '"'; } function mailAttachments( $to = "" , $subject = "" , $message = "" , $from="", $fromName = "" , $fromHeader ="", $cc = "" , $bcc = "", $charset = "UTF-8", $type = 'FormMail' ){ if( ! strlen( trim( $to ) ) ) return "Missing \"To\" Field." ; $isAutoResponse = $type == 'AutoResponseEmail' ; // added PHPMailer SMTP support at Mar 12, 2011 $isSMTP = defined('PHPFMG_USE_SMTP') && 'Y' == PHPFMG_USE_SMTP && defined('PHPFMG_SMTP_HOST') && '' != PHPFMG_SMTP_HOST; // due to security issues, in most case, the smtp will fail on my website. It only works on user's own server // so just disable the smtp here if( phpfmg_is_mysite() ){ $isSMTP = false ; }; $attachments = array(); $noAutoAttachements = $isAutoResponse && defined('PHPFMG_RETURN_NO_ATTACHMENT') && 'Y' == PHPFMG_RETURN_NO_ATTACHMENT ; $use_phpmailer = defined('PHPFMG_USE_PHPMAILER') && 'Y' == PHPFMG_USE_PHPMAILER ; $boundary = "====_My_PHP_Form_Generator_" . md5( uniqid( srand( time() ) ) ) . "===="; $content_type = 'html' == PHPFMG_MAIL_TYPE ? "text/html" : "text/plain" ; // setup mail header infomation $headers = 'Y' == PHPFMG_NO_FROM_HEADER ? '' : "From: {$fromHeader}" .PHPFMG_LNCR; $headers .= "Reply-To: {$GLOBALS['ReplyTo']}" .PHPFMG_LNCR; if ($cc) $headers .= "CC: $cc".PHPFMG_LNCR; if ($bcc) $headers .= "BCC: $bcc".PHPFMG_LNCR; //$headers .= "Content-type: {$content_type}; charset={$charset}" .PHPFMG_LNCR ; $plainHeaders = $headers ; // for no attachments header $plainHeaders .= 'MIME-Version: 1.0' . PHPFMG_LNCR; $plainHeaders .= "Content-type: {$content_type}; charset={$charset}" ; //create mulitipart attachments boundary $sError = "" ; $nFound = 0; if( false && isset($GLOBALS['phpfmg_files_content']) && '' != $GLOBALS['phpfmg_files_content'] ){ // use previous encoded content $sEncodeBody = $GLOBALS['phpfmg_files_content'] ; $nFound = $GLOBALS['phpfmg_nFound'] ; }else{ $file2link_size = trim(PHPFMG_FILE2LINK_SIZE) ; $isSave = ('' != $file2link_size || defined('PHPFMG_SAVE_ATTACHMENTS') && 'Y' == PHPFMG_SAVE_ATTACHMENTS); if( $isSave ){ if( defined('PHPFMG_SAVE_ATTACHMENTS_DIR') ){ if( !is_dir(PHPFMG_SAVE_ATTACHMENTS_DIR) ){ $ok = @mkdir( PHPFMG_SAVE_ATTACHMENTS_DIR, 0777 ); if( !$ok ) $isSave = false; }; }; }; $isWritable = is_writable( dirname(PHPFMG_SAVE_ATTACHMENTS_DIR) ); // parse attachments content foreach( $_FILES as $aFile ){ $sFileName = $aFile[ "tmp_name" ] ; $sFileRealName = phpfmg_rename_harmful($aFile[ "name" ]) ; if( is_uploaded_file( $sFileName ) ): $isSkip = '' != $file2link_size && ( (filesize($sFileName)/1024) > $file2link_size ); // save uploaded file if( $isWritable && $isSave ){ $tofile = PHPFMG_SAVE_ATTACHMENTS_DIR . phpfmg_getRecordID() . '-' . basename($sFileRealName); if( @copy( $sFileName, $tofile) ) { $sFileName = $tofile; // to fix problem : in some windows php, the uploaded temp file might not be mailed as attachment chmod($tofile,0777); }; }; if( $isSkip ) continue; // mail file as link $attachments[] = array('file' => $sFileName, 'name' => $aFile[ "name" ] ); if( !$use_phpmailer && !$isSMTP && ($fp = @fopen( $sFileName, "rb" )) ) : $sContent = fread( $fp, filesize( $sFileName ) ); fclose($fp); $sFName = basename( $sFileRealName ) ; $sMIME = getMIMEType( $sFName ) ; $bPlainText = ( $sMIME == "text/plain" ) ; if( $bPlainText ) : $encoding = "" ; else: $encoding = "Content-Transfer-Encoding: base64".PHPFMG_LNCR; $sContent = chunk_split( base64_encode( $sContent ) ); endif; $sEncodeBody .= PHPFMG_LNCR."--$boundary" .PHPFMG_LNCR. "Content-Type: $sMIME;" . PHPFMG_LNCR. "\tname=\"$sFName\"" . PHPFMG_LNCR. $encoding . "Content-Disposition: attachment;" . PHPFMG_LNCR. "\tfilename=\"$sFName\"" . PHPFMG_LNCR. PHPFMG_LNCR. $sContent . PHPFMG_LNCR ; $nFound ++; else: $sError .= "
Failed to open file $sFileName.\n" ; endif; // if( $fp = fopen( $sFileName, "rb" ) ) : else: $sError .= "
File $sFileName doesn't exist.\n" ; endif; //if( file_exists( $sFileName ) ): }; // end foreach $sEncodeBody .= PHPFMG_LNCR.PHPFMG_LNCR."--$boundary--" ; $GLOBALS['phpfmg_files_content'] = $sEncodeBody ; $GLOBALS['phpfmg_nFound'] = $nFound ; }; // if $headers .= "MIME-Version: 1.0".PHPFMG_LNCR."Content-type: multipart/mixed;".PHPFMG_LNCR."\tboundary=\"$boundary\""; $txtMsg = PHPFMG_LNCR."This is a multi-part message in MIME format." .PHPFMG_LNCR . PHPFMG_LNCR."--$boundary" .PHPFMG_LNCR . "Content-Type: {$content_type};".PHPFMG_LNCR. "\tcharset=\"$charset\"" .PHPFMG_LNCR.PHPFMG_LNCR . $message . PHPFMG_LNCR; if( $noAutoAttachements ) $sEncodeBody = '' ; $body = $nFound ? $txtMsg . $sEncodeBody : $message ; $headers = $nFound ? $headers : $plainHeaders ; $errmsg = ""; if( $isSMTP || $use_phpmailer ){ if( $noAutoAttachements ) $attachments = false ; $errmsg = phpfmg_phpmailer( $to, $subject, $body, $from, $fromName, $cc , $bcc , $charset, $attachments ); }else{ if ( !mail( $to, $subject, $body, $headers ) ) $errmsg = "Failed to send mail"; }; $ok = $errmsg == "" ; $status = $ok ? "\n[Email sent]" : "\n[{$errmsg}]" ; phpfmg_log_mail( $to, $subject, ($ok ? 'Email sent' : 'Failed to send mail') . "\n" . ($nFound ? $headers . $txtMsg : $headers . $message), '', $type . $status ); // no log for attachments return $sError ; } function phpfmg_phpmailer( $to, $subject, $message, $from, $fromName, $cc = "" , $bcc = "", $charset = "UTF-8",$attachments = false ){ $mail = new PHPMailer(); $mail->Host = PHPFMG_SMTP_HOST; // SMTP server $mail->Username = PHPFMG_SMTP_USER; $mail->Password = PHPFMG_SMTP_PLAIN_PASSWORD != '' ? PHPFMG_SMTP_PLAIN_PASSWORD : base64_decode(PHPFMG_SMTP_PASSWORD); $mail->SMTPAuth = PHPFMG_SMTP_PASSWORD != ""; $mail->SMTPSecure = PHPFMG_SMTP_SECURE; $mail->Port = PHPFMG_SMTP_PORT == "" ? 25 : PHPFMG_SMTP_PORT; if( defined('PHPFMG_SMTP_DEBUG_LEVEL') && PHPFMG_SMTP_DEBUG_LEVEL != "" ){ $mail->SMTPDebug = (int)PHPFMG_SMTP_DEBUG_LEVEL ; }; if( isset($GLOBALS['ReplyTo']) ) $mail->AddReplyTo($GLOBALS['ReplyTo']); $mail->From = $from; $mail->FromName = $fromName; $mail->Subject = $subject; $mail->Body = $message; $mail->CharSet = $charset; if( !phpfmg_is_mysite() && (defined('PHPFMG_USE_SMTP') && 'Y' == PHPFMG_USE_SMTP) ){ $mail->IsSMTP(); }; $mail->IsHTML('html' == PHPFMG_MAIL_TYPE); $mail->AddAddress($to); if( ''!= $cc ){ $CCs = explode(',',$cc); foreach($CCs as $c){ $mail->AddCC( $c ); }; }; if( ''!= $bcc ){ $BCCs = explode(',',$bcc); foreach($BCCs as $b){ $mail->AddBCC( $b ); }; }; if( is_array($attachments) ){ foreach($attachments as $f){ $mail->AddAttachment( $f['file'], basename($f['name']) ); }; }; return $mail->Send() ? "" : $mail->ErrorInfo; } function mailAutoResponse( $to, $from, $fields = false ){ if( !formIsEMail($to) ) return ERR_EMAIL ; // one more check for spam robot $enable = defined('PHPFMG_RETURN_ENABLE') && PHPFMG_RETURN_ENABLE === 'Y'; $body = trim(phpfmg_auto_response_message()); if( !$enable || empty($body) ){ return false ; }; $subject = PHPFMG_RETURN_SUBJECT; $isHtml = 'html' == PHPFMG_MAIL_TYPE ; $body = phpfmg_adjust_template($body); $body = phpfmg_parse_mail_body($body,$fields); $subject = phpfmg_parse_mail_body( $subject, $fields ); if( $isHtml ) { $body = phpfmg_getHtmlContent( $body ); }; $body = str_replace( "0x0d", '', $body ); $body = str_replace( "0x0a", PHPFMG_LNCR, $body ); if( defined('PHPFMG_RETURN_EMAIL') && formIsEMail(PHPFMG_RETURN_EMAIL) ){ $from = PHPFMG_RETURN_EMAIL; }; $fromHeader = ( PHPFMG_YOUR_NAME == "" ? "" : "\"".PHPFMG_YOUR_NAME . "\"" ) . " <{$from}>"; return mailAttachments( $to , $subject , $body, filterEmail($from), PHPFMG_YOUR_NAME, $fromHeader, '' , '', PHPFMG_CHARSET, 'AutoResponseEmail' ); } function phpfmg_log_mail( $to='', $subject='', $body='', $headers = '', $type='' ){ $sep = PHPFMG_LNCR . str_repeat('----',20) . PHPFMG_LNCR ; appendToFile( PHPFMG_EMAILS_LOGFILE, date("Y-m-d H:i:s") . "\t" . $_SERVER['REMOTE_ADDR'] . "\t{$type}" . $sep . "To: {$to}\r\nSubject: {$subject}\r\n" . $headers . $body . "
" . PHPFMG_LNCR . $sep . PHPFMG_LNCR ) ; } function phpfmg_getHtmlContent( $body ){ $html = "Your Form Mail Content | htttp://phpfmg.sourceforge.net" . $body .""; return $html ; } function phpfmg_adjust_template( $body ){ $isHtml = 'html' == PHPFMG_MAIL_TYPE ; if( $isHtml ){ $body = preg_match( "/<[^<>]+>/", $body ) ? $body : nl2br($body); }; return $body; } function phpfmg_parse_mail_body( $body, $fields = false ){ if( !is_array($fields) ) return $body ; $yes = function_exists( 'str_ireplace' ); foreach( $fields as $name => $value ){ $body = $yes ? str_ireplace( $name, $value ,$body ) : str_replace ( $name, $value ,$body ); }; return trim($body); } # filter line breaks to avoid emails injecting function filterEmail($email, $chars = ''){ $email = trim(str_replace( array("\r","\n"), '', $email )); if( is_array($chars) ) $email = str_replace( $chars, '', $email ); $email = preg_replace( '/(cc\s*\:|bcc\s*\:)/i', '', $email ); return $email; } function mailReport( $content = "", $file = '' ){ $content = " Dear Sir or Madam, Your online form at " . HOST_NAME . PHP_SELF . " failed to save data to file. Please make sure the web user has permission to write to file \"{$file}\". If you don't know how to fix it, please forward this email to technical support team of your web hosting company or your Administrator. PHPFMG - PHP FormMail Generator "; mail(PHPFMG_TO, "Error@" . HOST_NAME . PHP_SELF, $content ); } function remove_newline( $str = "" ){ return str_replace( array("\r\n", "\r", "\n"), array('\r\n', '\r', '\n'), $str ); } function checkPass( $form_mail = array() ) { $names = array(); $labels = array(); foreach( $form_mail as $field ){ $type = strtolower( $field[ "type" ] ); //$value = trim( $_POST[ $field[ "name" ] ] ); $value = phpfmg_field_value( $field[ "name" ] ); $required = strtolower($field[ "required" ]) ; $text = stripslashes( $field[ "text" ] ); // simple check the field has something keyed in. if( !strlen($value) && ( $required == "required" ) && $type != "attachment" ){ $names[] = $field[ "name" ]; $labels[] = $text; //return ERR_MISSING . $text ; continue; }; // verify the special case if( ( strlen($value) || $type == "attachment" ) && $required == "required" ): switch( $type ){ case strtolower("Sender's Name") : break; case strtolower("Generic email"): case strtolower("Sender's email"): if( ! formIsEMail($value) ) { $names[] = $field[ "name" ]; $labels[] = $text . ERR_EMAIL; //return ERR_EMAIL . $text ; }; // for checking entry limitation if( $type == "sender's email" ){ $GLOBALS['sender_email'] = $value; }; break; case "text" : break; case "textarea" : break; case "checkbox" : case "radio" : break; case "select" : break; case "attachment" : $upload_file = $_FILES[ $field["name"] ][ "tmp_name" ] ; if( ! is_uploaded_file($upload_file) ){ $names[] = $field[ "name" ]; $labels[] = $text; //return ERR_SELECT_UPLOAD . $text; }; break; case strtolower("Date(MM-DD-YYYY)"): break; case strtolower("Date(MM-YYYY)"): break; case strtolower("CreditCard(MM-YYYY)"): if( $value < date("Y-m") ) { $names[] = $field[ "name" ]; $labels[] = $text; //return ERR_CREDIT_CARD_EXPIRED . $text; }; break; case strtolower("CreditCard#"): if( !formIsCreditNumber( $value ) ) { $names[] = $field[ "name" ]; $labels[] = $text; //return ERR_CREDIT_CARD_NUMBER . $text ; }; break; case strtolower("Time(HH:MM:SS)"): break; case strtolower("Time(HH:MM)"): break; default : //return $sErrRequired . $form_mail[ $i ][ "text" ]; }; // switch endif; }; // for return array( 'fields' => $names, 'errors' => $labels, ); } function formSelected( $var, $val ) { echo ( $var == $val ) ? "selected" : ""; } function formChecked( $var, $val ) { echo ( $var == $val ) ? "checked" : ""; } function formIsEMail( $email ){ return preg_match( "/^(.+)@(.+)\\.(.+)$/", $email ); } function selectList( $name, $selectedValue, $start, $end, $prompt = "-Select-", $style = "" ) { $tab = "\t" ; print "\n\n" ; } # something like CreditCard.pm in perl CPAN function formIsCreditNumber( $number ) { $tmp = $number; $number = preg_replace( "/[^0-9]/", "", $tmp ); if ( preg_match( "/[^\d\s]/", $number ) ) return 0; if ( strlen($number) < 13 && 0+$number ) return 0; for ($i = 0; $i < strlen($number) - 1; $i++) { $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2)); $sum += (($weight < 10) ? $weight : ($weight - 9)); } if ( substr($number, -1) == (10 - $sum % 10) % 10 ) return $number; return $number; } /* --------------------------------------------------------------------------------------------------- Parameters: $sFileName Return : 1. "" : no extendsion name, or sFileName is empty 2. string: MIME Type name of array aMimeType's definition. ---------------------------------------------------------------------------------------------------*/ function getMIMEType( $sFileName = "" ) { $sFileName = strtolower( trim( $sFileName ) ); if( ! strlen( $sFileName ) ) return ""; $aMimeType = array( "txt" => "text/plain" , "pdf" => "application/pdf" , "zip" => "application/x-compressed" , "html" => "text/html" , "htm" => "text/html" , "avi" => "video/avi" , "mpg" => "video/mpeg " , "wav" => "audio/wav" , "jpg" => "image/jpeg " , "gif" => "image/gif" , "tif" => "image/tiff " , "png" => "image/x-png" , "bmp" => "image/bmp" ); $aFile = explode( "\.", basename( $sFileName ) ) ; $nDiminson = count( $aFile ) ; $sExt = $aFile[ $nDiminson - 1 ] ; // get last part: like ".tar.zip", return "zip" return ( $nDiminson > 1 ) ? $aMimeType[ $sExt ] : ""; } function appendToFile( $sFileName = "", $line = "", $dataColumnsLine = '' ){ $obey = defined('PHPFMG_GDPR') && 'Y' == PHPFMG_GDPR; // obey General Data Protection Regulation (GDPR)? if( $obey ) return 0; if( !$sFileName || !$line ) return 0; $isExists = file_exists( $sFileName ); $hFile = @fopen( "$sFileName", "a+w" ); $nBytes = 0; if( $hFile ){ if( !$isExists && false !== strpos(strtolower(basename($sFileName)), '.php') ){ fputs( $hFile, "\r\n"); if( !empty($dataColumnsLine) ){ fputs($hFile,$dataColumnsLine."\r\n"); }; }; $nBytes = fputs( $hFile , trim($line)."\r\n" ); fclose( $hFile ); }; return $nBytes ; } function phpfmg_get_csv_header(){ $csvValues = array(); foreach( $GLOBALS['form_mail'] as $field ){ $csvValues[] = csvfield( $field[ "text" ] ); }; return join(chr(0x09),/*","*/$csvValues) ; } /* function phpfmg_field_instruction($name, $show = true ){ global $form_mail, $sErr; $isError = in_array($name,$sErr['fields']); $class = $isError ? 'instruction_error' : 'instruction' ; if( $show || $isError ) echo "
". htmlspecialchars_decode($form_mail[ $name ]['instruction']) . "
"; } */ function phpfmg_rand( $len = 4 ){ $md5 = md5( uniqid(rand()) ); return $len > 0 ? substr($md5,0,$len) : $md5 ; } // use a random name for stopping spam bot bypass the form.php, and post raw data directly function phpfmg_captcha_name(){ if( !isset($_SESSION['captcha_name']) ){ $_SESSION['captcha_name'] = phpfmg_rand(8); //PHPFMG_ID.'fmgCaptchCode'; }; return $_SESSION['captcha_name']; } function phpfmg_check_recaptcha(){ $errmsg = ERR_CAPTCHA; if( isset($_POST['g-recaptcha-response']) ){ $get = 'https://www.google.com/recaptcha/api/siteverify?secret=' . phpfmg_reCAPTCHA_key('secret_key'). '&response=' . $_POST['g-recaptcha-response']; $response = file_get_contents($get); echo $response; $success = false; if( function_exists('json_decode') ){ $json = json_decode( $response, true ); var_dump($json); $success = $json['success'] === true; }else{ $success = preg_match( '/success[\"\']*\\:\\s*(true|1|y)/i', $response ); }; return $success ? '' : $errmsg; } return $errmsg; } function phpfmg_check_captcha(){ $errmsg = ''; if( phpfmg_is_reCAPTCHA() ){ $errmsg = phpfmg_check_recaptcha(); }else{ $name = phpfmg_captcha_name(); if( (defined('PHPFMG_SIMPLE_CAPTCHA_NAME') && PHPFMG_SIMPLE_CAPTCHA_NAME != '') && ( !isset( $_POST[$name] ) || // maybe sutmited by spam bot strtoupper($_POST[$name]) != strtoupper($_SESSION[$name]) // or user didn't type correct code ) ){ $errmsg = ERR_CAPTCHA ; }; }; return $errmsg ; } function phpfmg_reCAPTCHA_key( $type ){ $isSitekey = $type == 'site_key'; // this keys are for formmail-maker.com domain only $phpfmgSiteKey = '6LcQuv8SAAAAAKSvNHfF5gQuW9WIpcualeEYllCn'; $phpfmgSecretKey = '6LcQuv8SAAAAABczBmLx85TQfdlkeMkjhz4Hzv5D'; if( $isSitekey ){ return phpfmg_is_mysite() ? $phpfmgSiteKey : RECAP_SITE_KEY; }else{ return phpfmg_is_mysite() ? $phpfmgSecretKey : RECAP_SECRET_KEY; } } function phpfmg_is_reCAPTCHA(){ return (defined('RECAP_SITE_KEY') && '' != RECAP_SITE_KEY && defined('RECAP_SECRET_KEY') && '' != RECAP_SECRET_KEY) || (phpfmg_is_mysite() && defined('RECAP_SITE_KEY') ) ; } function phpfmg_get_reCAPTCHA_html(){ return "
"; } function phpfmg_show_captcha(){ if( phpfmg_is_reCAPTCHA() ){ echo phpfmg_get_reCAPTCHA_html(); return ; }; $url = PHPFMG_ADMIN_URL . '?mod=captcha&func=get&tid=' ; $onclick= "onclick=\"document.getElementById('phpfmg_captcha_image').src='{$url}'+Math.random();return false;\" " ; echo "\"Click\n"; echo "Reload Verification Image
\n"; echo "\n"; } function phpfmg_hsc($field, $default = false){ echo isset($_POST[ $field ]) ? HtmlSpecialChars( $_POST[ $field ] ) : $default; } function phpfmg_dropdown( $name, $options, $showInputbox = false, $isMultiple = false, $extra = '', $isReturn = false, $class = 'text_select' ){ //$showInputbox = true; $displayLast = 'none' ; $onchange = $showInputbox ? " onchange=\"toggleOtherInputBox('{$name}','select','{$name}');\" " : "" ; $sMultiple = $isMultiple ? 'multiple="multiple"' : '' ; $other = "{$name}_other" ; $dropdown = array(); $list = explode( '|', $options ); $dropdown[] = "\n"; if( $showInputbox ){ $dropdown[] = "" ; $dropdown[] = "
" ; }; $s = join("\t\n",$dropdown); if( $isReturn ) return $s; else echo $s ; } function phpfmg_date_dropdown( $cfgDate, $showSep = true ){ $sep = $showSep ? $cfgDate['separator'] . " " : ""; $field_name = $cfgDate['field_name']; if( !isset($cfgDate['yyyy']) ){ $startYear = $cfgDate['startYear']; $endYear = $cfgDate['endYear']; $year = range( $startYear, $endYear ); $cfgDate['yyyy'] = $cfgDate['yearPrompt'] . '=,|' . join("|",$year); }; switch( $cfgDate['format'] ){ case 'mm/dd/yyyy' : phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_day', $cfgDate['day'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_yyyy', $cfgDate['yyyy'], false, false, '', false, '' ); break; case 'dd/mm/yyyy' : phpfmg_dropdown( $field_name.'_day', $cfgDate['day'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_yyyy', $cfgDate['yyyy'], false, false, '', false, '' ); break; case 'yyyy/mm/dd' : phpfmg_dropdown( $field_name.'_yyyy', $cfgDate['yyyy'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_day', $cfgDate['day'], false, false, '', false, '' ); break; case 'mm/yyyy' : phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_yyyy', $cfgDate['yyyy'], false, false, '', false, '' ); break; case 'yyyy/mm' : phpfmg_dropdown( $field_name.'_yyyy', $cfgDate['yyyy'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); break; case 'mm/dd' : phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_day', $cfgDate['day'], false, false, '', false, '' ); break; case 'dd/mm' : phpfmg_dropdown( $field_name.'_day', $cfgDate['day'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_month', $cfgDate['month'], false, false, '', false, '' ); break; }; echo "\n\n"; echo "\n"; } function phpfmg_date_dropdown_require( $field_name ){ if( !isset($_POST) ) return ; $month = $_POST[$field_name.'_month']; $day = $_POST[$field_name.'_day']; $yyyy = $_POST[$field_name.'_yyyy']; $format = $_POST[$field_name.'_format']; $sep = isset($_POST[$field_name.'_separator']) ? $_POST[$field_name.'_separator'] : '/'; // make up $_POST[$field_name] value $_POST[$field_name] = ''; switch( $format ){ case 'mm/dd/yyyy' : if( !empty($month) && !empty($day) && !empty($yyyy) ) $_POST[$field_name] = $month . $sep . $day . $sep . $yyyy; break; case 'dd/mm/yyyy' : if( !empty($month) && !empty($day) && !empty($yyyy) ) $_POST[$field_name] = $day . $sep . $month . $sep . $yyyy; break; case 'yyyy/mm/dd' : if( !empty($month) && !empty($day) && !empty($yyyy) ) $_POST[$field_name] = $yyyy . $sep . $month . $sep . $day; break; case 'mm/yyyy' : if( !empty($month) && !empty($yyyy) ) $_POST[$field_name] = $month . $sep . $yyyy; break; case 'yyyy/mm' : if( !empty($month) && !empty($yyyy) ) $_POST[$field_name] = $month . $sep . $yyyy; break; case 'mm/dd' : if( !empty($month) && !empty($day) ) $_POST[$field_name] = $month . $sep . $day; break; case 'dd/mm' : if( !empty($month) && !empty($day) ) $_POST[$field_name] = $day . $sep . $month; break; }; } function phpfmg_time_dropdown( $cfgTime ){ $field_name = $cfgTime['field_name']; $sep =": "; switch( $cfgTime['hourOpt'] ){ case 'h12' : phpfmg_dropdown( $field_name.'_hour', $cfgTime['hour'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_minute', $cfgTime['minute'], false, false, '', false, '' ); phpfmg_dropdown( $field_name.'_amfm', $cfgTime['amfm'], false, false, '', false, '' ); break; case 'h24' : phpfmg_dropdown( $field_name.'_hour', $cfgTime['hour'], false, false, '', false, '' ); echo $sep; phpfmg_dropdown( $field_name.'_minute', $cfgTime['minute'], false, false, '', false, '' ); break; }; echo "\n\n"; } function phpfmg_time_dropdown_require( $field_name ){ if( !isset($_POST) ) return ; $hour = $_POST[$field_name.'_hour']; $minute = $_POST[$field_name.'_minute']; $amfm = $_POST[$field_name.'_amfm']; $format = $_POST[$field_name.'_format']; $sep = ':'; // make up $_POST[$field_name] value $_POST[$field_name] = ""; switch( $format ){ case 'h12' : if( !empty($hour) && !empty($minute) && !empty($amfm) ) $_POST[$field_name] = $hour . $sep . $minute . ' ' . $amfm; break; case 'h24' : if( !empty($hour) && !empty($minute) ) $_POST[$field_name] = $hour . $sep . $minute; break; }; } function phpfmg_dependent_dropdown( $field_name ){ $field = phpfmg_dependent_dropdown_get_field( $field_name ); $dd = new DependantDropdown(); $dd->parseFmgField($field); $html = $dd->getHtml(); echo $html; } function phpfmg_dependent_dropdown_dynamic_require( $field_name ){ $field = phpfmg_dependent_dropdown_get_field( $field_name ); $dd = new DependantDropdown(); $dd->parseFmgField($field); $dd->dynamicRequired(); } function phpfmg_dependent_dropdown_get_field( $field_name ){ if( !isset($_SESSION[PHPFMG_ID]) ){ $_SESSION[PHPFMG_ID] = array(); }; if( !isset($_SESSION[PHPFMG_ID]['DD_DATA_' . $field_name]) ){ $base64 = phpfmg_dependent_dropdown_data(); $data = @unserialize( base64_decode($base64) ); $_SESSION[PHPFMG_ID]['DD_DATA_' . $field_name] = $data; }else{ $data = $_SESSION[PHPFMG_ID]['DD_DATA_' . $field_name]; }; if( !is_array($data) ){ return ; }; foreach( $data as $field ){ if( $field['name'] == $field_name ){ return $field; }; }; } # ------------------------------------------------------ class DependantDropdown { var $data = ''; var $sheet = array(); var $fields = array(); var $fieldInfo = array( 'label', 'instruction', 'required', 'prompt' ); // describe field information from the first N rows of data var $prefix = 'dd'; // in case there is no name for dropdown, it will name the dropdown like dd_0, dd_1, ... var $fmgField = false; var $newliner = "" ; // replace \r\n with $newliner ; var $newtaber = "" ; // replace \t with $newtaber ; function __construct(){ } function DependantDropdown(){ } function lookupFieldColumn( $field, $column, $lookup, $contentType='text/plain', $charset='utf-8' ){ $this->parseFmgField( $field ); $this->nocache_headers( $contentType, $charset ); return join( "\n", $this->getColumn( $column, $lookup ) ); } function parseFmgField( $field ){ if( !isset($_SESSION[PHPFMG_ID]) ){ $_SESSION[PHPFMG_ID] = array(); }; $this->fmgField = $field; $value = $this->newline_back($field['value']); $this->data = explode("\r\n",$value); if( !isset($_SESSION[PHPFMG_ID][ "DD_".$field['name'] ]) ){ $this->parseData($field); $_SESSION[PHPFMG_ID][ "DD_".$field['name'] ] = $this->fields; }else{ $this->fields = $_SESSION[PHPFMG_ID][ "DD_".$field['name'] ]; }; $this->makeupFieldsName(); } function newline_back( $str = "" ){ return str_replace( array($this->newtaber, $this->newliner), array("\t","\r\n"), $str ); } function nocache_headers($contentType='text/plain', $charset='utf-8'){ header("Expires: Mon, 01 Jan 1970 00:00:01 GMT"); header("Cache-Control: max-age=0, no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header( "Content-Type: {$contentType}; charset={$charset}" ); } function setData( $s ){ $this->data = $s ; } function setPrefix( $s ){ $this->prefix = $s; } function parseData(){ $tab = chr(0x09); $nFieldInfoRows = count( $this->fieldInfo ); for( $i = 0, $n = count($this->data); $i < $n; $i ++ ){ $line = str_replace('"', '', $this->data[$i] ); //$line = stripslashes( $line ); $cols = explode( $tab, $line ); if( is_array($cols) && count($cols) > 1 ){ if( $i < $nFieldInfoRows ){ $trims = array(); foreach( $cols as $col ){ $trims[] = trim($col); }; $this->fields[ $this->fieldInfo[$i] ] = $trims; } else $this->fields['data'][] = $cols; }; // if //if ( $i > 1000 ) break; }; // for } // $quickTest : to see whether a column contains data function getColumn( $n, $lookup = array(), $quickTest = false ){ $count = count($lookup); if( $n > 0 && empty($count) ){ return array(); // can not get column without search query }; $col = array(); $lastValue = $lookup[ $count - 1 ]; $flatLookup = join( '|', $lookup ); // when using ajax GET method, use utf8 to encoude the lookup query. otherwise, some special chars like France characters might not work if( !$this->isPost() ){ $lastValue = utf8_encode( $lastValue ); $flatLookup = utf8_encode( $flatLookup ); }; foreach( $this->fields['data'] as $r ){ if( !isset($r[$n]) ) continue; $value = trim($r[$n]); if( $value == '' ) continue; if( $n == 0 ){ $col[] = $value; }else{ //if( trim($r[$n-1]) == $lastValue ){ // quick check to improve performance if( $r[$n-1] == $lastValue ){ // quick check the last value to improve performance $leftCols = array_slice( $r, 0, $n ); $flatLeftValues = join( '|', $leftCols ); if( $flatLeftValues == $flatLookup ){ // show value only by lookuping by joining all its parents' values $col[] = $value; }; }; // if }; // if $n == 0 if( $quickTest && count($col) > 0 ) break; }; // foreach return array_unique($col); } function getColumnOptions( $n, $lookup = array(), $default = '' ){ $opts = array(); foreach( $this->getColumn($n, $lookup) as $v ){ $selected = $default == $v ? 'selected' : '' ; $opts[] = ""; }; return join("\n",$opts); } function hsc($s){ return str_replace ( array ( '&', '"', "'", '<', '>' ), array ( '&' , '"', ''' , '<' , '>' ), $s ); } function isPost(){ return isset($_POST[ $this->fields['name'][0] ]); } function getHtml(){ $html = array(); $field_name = $this->fmgField['name']; $this->prefix = $field_name; $count = count($this->fields['label']); // prepare for getting column options after form submitted $lookup = array(); $isPost = $this->isPost(); // isset($_POST[ $this->fields['name'][0] ]); if( $isPost ){ for( $i = 0; $i < $count; $i++ ){ $label = $this->fields['label'][$i]; if( empty($label) ) continue; $lookup[] = $_POST[ $this->fields['name'][$i] ]; }; }; for( $i = 0; $i < $count; $i++ ){ $label = stripslashes( $this->fields['label'][$i] ); if( empty($label) ) continue; $name = $this->fields['name'][$i]; $instruction = $this->fields['instruction'][$i]; $prompt = $this->fields['prompt'][$i]; $required = $this->fields['required'][$i]; $promptOption = empty($prompt) ? "" : ""; if( $isPost ) $options = $this->getColumnOptions( $i, array_slice($lookup,0,$i), $_POST[$name] ); else $options = $this->getColumnOptions( $i, array(), '' ); $select = ""; $sRequired = "" ; $li = "
  • {$sRequired}
    {$select}
    {$instruction}
  • "; $html[] = $li; }; echo join("\n\n",$html); } function dynamicRequired(){ if( !isset($_POST) ){ return ; }; $field_name = $this->fmgField['name']; $this->prefix = $field_name; $count = count($this->fields['label']); $lookup = array(); $isPost = isset($_POST[ $this->fields['name'][0] ]); if( $isPost ){ for( $i = 0; $i < $count; $i++ ){ $label = $this->fields['label'][$i]; if( empty($label) ) continue; $lookup[] = $_POST[ $this->fields['name'][$i] ]; }; }; for( $i = 0; $i < $count; $i++ ){ $label = $this->fields['label'][$i]; if( empty($label) ) continue; $name = $this->fields['name'][$i]; $required = $this->fields['required'][$i]; if( strtolower($required) == 'required' ){ $rows = $this->getColumn( $i, array_slice($lookup,0,$i), true ); if( empty($rows) ) { $GLOBALS['form_mail'][ $name ]['required'] = '' ; // }; }else{ $GLOBALS['form_mail'][ $name ]['required'] = '' ; }; }; } function getFormMailArrayCode(){ $code = array(); for( $i = 0, $n = count($this->fields['label']); $i < $n; $i++ ){ $label = $this->fields['label'][$i]; if( empty($label) ) continue; $name = $this->fields['name'][$i]; $instruction = $this->fields['instruction'][$i]; $prompt = $this->fields['prompt'][$i]; $required = $this->fields['required'][$i]; $code[] = "\$GLOBALS['form_mail']['{$name}'] = array( \"name\" => \"$name\", \"text\" => \"" . addslashes( $label ) . "\", \"type\" => \"select\", \"instruction\" => \"$instruction\", \"required\" => \"$required\" ) ;" ; }; return join("\n",$code); } function makeupFieldsName($default='field_99'){ $field_name = isset($this->fmgField['name']) ? $this->fmgField['name'] : $default; $this->prefix = $field_name; for( $i = 0, $n = count($this->fields['label']); $i < $n; $i++ ){ $this->fields['name'][$i] = $this->prefix . '_' . $i; }; } } function phpfmg_parse_option( $opt ){ $opt = $opt; $a = array( 'text' => $opt, 'value' => $opt, 'default' => false, ); $pos = strrpos( $opt, '=' ); if( false !== $pos ){ $a['text'] = substr($opt,0,$pos); $part = substr($opt,$pos+1); $nv = strrpos( $part, ',' ); if( false !== $nv ){ $a['value'] = substr($part,0,$nv); $a['default'] = 'default' == strtolower(substr($part,$nv+1)); }else{ $a['value'] = $part; }; }; $a['text'] = trim($a['text']); $a['value'] = trim($a['value']); return $a ; } function phpfmg_field_value( $name ){ $value = "" ; if( isset($GLOBALS[$name."_value"]) ) return $GLOBALS[$name."_value"] ; $field = $GLOBALS['form_mail'][$name]; $checkOther = isset( $_POST[$name.'_other_check'] ) && 1 == $_POST[$name.'_other_check'] ; $otherInputValue = $checkOther ? $_POST[$name.'_other'] : '' ; switch( $field['type'] ){ case 'select' : if( $checkOther && $otherInputValue == "" ){ return $value; }; if( is_array($_POST[$name]) ){ //array_pop( $_POST[$name] ); // pop the last "other" element $value = join(PHPFMG_LNCR,$_POST[$name]) . PHPFMG_LNCR. $otherInputValue ; $value = str_replace( PHPFMG_LNCR . "other", "", $value ); }else{ $value = $checkOther ? $otherInputValue : $_POST[ $name ]; }; break; case 'radio' : if( $checkOther ){ $value = $otherInputValue == '' ? '' : $otherInputValue; }else{ $value = $_POST[ $name ]; }; break; case 'checkbox' : if( $checkOther && $otherInputValue == "" ){ return $value; }; $length = isset($_POST[$name.'_length']) ? $_POST[$name.'_length'] : 100; $values = array(); for( $i = 1; $i <= $length; $i ++){ $newName = 'Checkbox' . ($i<10 ? '0' .$i : $i ) . "_" . $name; if( $_POST[ $newName ] != "" && $_POST[ $newName ] != 'other' ) $values[] = $_POST[ $newName ]; }; $value = ( empty($values) ? "" : join( PHPFMG_LNCR, $values ) ) . ( $otherInputValue != "" ? PHPFMG_LNCR . $otherInputValue : "" ); break; default: $value = $_POST[ $name ]; break; }; $value = phpfmg_stripTags( $value ); $GLOBALS[$name."_value"] = $value ; return $value; } function phpfmg_stripTags($str){ $allowable_tags = "