public function getReCaptchaImage() { $fontsDirectory = __DIR__ . '/../../../../include/captcha/'; $aFonts = array($fontsDirectory . 'fonts/VeraBd.ttf', $fontsDirectory . 'fonts/VeraIt.ttf', $fontsDirectory . 'fonts/Vera.ttf'); $oVisualCaptcha = new \PhpCaptcha($aFonts, 200, 60); $oVisualCaptcha->Create(__DIR__ . '/../../../../images/cache/recaptcha.png'); return '/images/cache/recaptcha.png'; }
function image() { $imagesPath = ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'PhpCaptcha' . DS . 'fonts' . DS; $aFonts = array($imagesPath . 'VeraBd.ttf', $imagesPath . 'VeraIt.ttf', $imagesPath . 'Vera.ttf'); $oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60); $oVisualCaptcha->UseColour(true); //$oVisualCaptcha->SetOwnerText('Source: '.FULL_BASE_URL); $oVisualCaptcha->SetNumChars(6); $oVisualCaptcha->Create(); }
function image() { $imagesPath = realpath(VENDORS . 'phpcaptcha') . '/fonts/'; $aFonts = array($imagesPath . 'VeraBd.ttf', $imagesPath . 'VeraIt.ttf', $imagesPath . 'Vera.ttf'); $oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60); $oVisualCaptcha->UseColour(true); //$oVisualCaptcha->SetOwnerText('Source: '.FULL_BASE_URL); $oVisualCaptcha->SetNumChars(6); $oVisualCaptcha->Create(); }
public function executeImage() { $theme = sfConfig::get("app_phpcaptcha_theme", "Small"); if (class_exists("PHPCaptcha" . $theme . "Theme")) { eval("\$theme = new PHPCaptcha" . $theme . "Theme();"); } else { $theme = new PHPCaptchaSmallTheme(); } $oVisualCaptcha = new PhpCaptcha($theme); $oVisualCaptcha->setOwnerText(sfConfig::get("app_phpcaptcha_ownertext", "")); $oVisualCaptcha->setHeight(sfConfig::get("app_phpcaptcha_height", $theme->getOption('height'))); $oVisualCaptcha->setWidth(sfConfig::get("app_phpcaptcha_width", $theme->getOption('width'))); $oVisualCaptcha->Create(); return sfView::NONE; }
public function isFlooding() { $uid = GWF_Session::getUserID(); $uname = GWF_Shoutbox::generateUsername(); $euname = GDO::escape($uname); $table = GDO::table('GWF_Shoutbox'); $max = $uid === 0 ? $this->module->cfgMaxPerDayGuest() : $this->module->cfgMaxPerDayUser(); // $cut = GWF_Time::getDate(GWF_Time::LEN_SECOND, time()-$this->module->cfgTimeout()); // $cnt = $table->countRows("shout_uname='$euname' AND shout_date>'$cut'"); # Check captcha if ($this->module->cfgCaptcha()) { require_once GWF_CORE_PATH . 'inc/3p/Class_Captcha.php'; if (!PhpCaptcha::Validate(Common::getPostString('captcha'), true)) { return GWF_HTML::err('ERR_WRONG_CAPTCHA'); } } # Check date $timeout = $this->module->cfgTimeout(); $last_date = $table->selectVar('MAX(shout_date)', "shout_uid={$uid} AND shout_uname='{$euname}'"); $last_time = $last_date === NULL ? 0 : GWF_Time::getTimestamp($last_date); $next_time = $last_time + $timeout; if ($last_time + $timeout > time()) { return $this->module->error('err_flood_time', array(GWF_Time::humanDuration($next_time - time()))); } # Check amount $today = GWF_Time::getDate(GWF_Date::LEN_SECOND, time() - $timeout); $count = $table->countRows("shout_uid={$uid} AND shout_date>='{$today}'"); if ($count >= $max) { return $this->module->error('err_flood_limit', array($max)); } # All fine return false; }
/** * @return void */ private function _processCaptcha() { @session_start(); $captchaHandler = CampRequest::GetVar('f_captcha_handler', '', 'POST'); if (!empty($captchaHandler)) { $captcha = Captcha::factory($captchaHandler); if (!$captcha->validate()) { $this->m_error = new PEAR_Error('The code you entered is not the same as the one shown.', ACTION_SUBMIT_COMMENT_ERR_INVALID_CAPTCHA_CODE); return FALSE; } } else { $f_captcha_code = CampRequest::GetVar('f_captcha_code'); if (is_null($f_captcha_code) || empty($f_captcha_code)) { $this->m_error = new PEAR_Error('Please enter the code shown in the image.', ACTION_SUBMIT_COMMENT_ERR_NO_CAPTCHA_CODE); return FALSE; } if (!PhpCaptcha::Validate($f_captcha_code, true)) { $this->m_error = new PEAR_Error('The code you entered is not the same with the one shown in the image.', ACTION_SUBMIT_COMMENT_ERR_INVALID_CAPTCHA_CODE); return FALSE; } } return TRUE; }
protected function doClean($value) { $clean = (string) $value; if (!PhpCaptcha::Validate($clean)) { throw new sfValidatorError($this, 'invalid', array('value' => $value)); } return $clean; }
public function execute() { # Don't store this url. GWF3::setConfig('store_last_url', false); # Load the Captcha class require GWF_CORE_PATH . 'inc/3p/Class_Captcha.php'; # disable Logging GWF3::setConfig('log_request', false); # disable HTTP Caching GWF_HTTP::noCache(); # Setup Font, Color, Size $aFonts = $this->module->cfgCaptchaFont(); $rgbcolor = $this->module->cfgCaptchaBG(); $width = $this->module->cfgCaptchaWidth(); $height = $this->module->cfgCaptchaHeight(); $oVisualCaptcha = new PhpCaptcha($aFonts, $width, $height, $rgbcolor); # Output the captcha die($oVisualCaptcha->Create('', Common::getGetString('chars', true))); }
function crackcha_next(WC_Challenge $chall) { if (crackcha_round_over()) { header('Content-Type: text/plain'); if (false === crackcha_insert_high($chall)) { echo GWF_HTML::lang('ERR_DATABASE', array(__FILE__, __LINE__)); return; } else { echo $chall->lang('msg_insert_high') . PHP_EOL; echo crackcha_reset($chall); return; } } require_once GWF_CORE_PATH . 'inc/3p/Class_Captcha.php'; $chars = GWF_Random::randomKey(5, GWF_Random::ALPHAUP); crackcha_increase_count(); GWF_Session::set('WCC_CRACKCHA_CHARS', $chars); $aFonts = array(GWF_PATH . 'extra/font/teen.ttf'); $rgbcolor = GWF_CAPTCHA_COLOR_BG; $oVisualCaptcha = new PhpCaptcha($aFonts, 210, 42, $rgbcolor); $oVisualCaptcha->Create('', $chars); }
function image() { $imagesPath = APP . 'vendors' . DS . 'phpcaptcha' . '/fonts/'; $aFonts = array($imagesPath . 'VeraBd.ttf', $imagesPath . 'VeraIt.ttf', $imagesPath . 'Vera.ttf'); $oVisualCaptcha = new PhpCaptcha($aFonts, 220, 60); $oVisualCaptcha->UseColour(true); $oVisualCaptcha->SetNumLines(false); $oVisualCaptcha->DisplayShadow(false); //$oVisualCaptcha->SetOwnerText('Source: '.FULL_BASE_URL); $oVisualCaptcha->SetNumChars(5); $oVisualCaptcha->Create(); }
/** * Reads the input parameters and sets up the blogcomment action. * * @param array $p_input */ public function __construct(array $p_input) { $this->m_name = 'submit_blogcomment'; $this->m_defined = true; $this->m_properties['blogentry_id'] = $p_input['f_blogentry_id']; $BlogEntry = new BlogEntry($this->m_properties['blogentry_id']); if (!$BlogEntry->exists()) { $this->m_error = new PEAR_Error('None or invalid blogentry was given.', ACTION_BLOGCOMMENT_ERR_INVALID_ENTRY); return; } /* if (!isset($p_input['f_blogcomment_title']) || empty($p_input['f_blogcomment_title'])) { $this->m_error = new PEAR_Error('The comment subject was not filled in.', ACTION_BLOGCOMMENT_ERR_NO_TITLE); return; } */ if (!isset($p_input['f_blogcomment_content']) || empty($p_input['f_blogcomment_content'])) { $this->m_error = new PEAR_Error('The comment content was not filled in.', ACTION_BLOGCOMMENT_ERR_NO_CONTENT); return; } if (SystemPref::Get('PLUGIN_BLOGCOMMENT_USE_CAPTCHA') == 'Y') { @session_start(); $f_captcha_code = $p_input['f_captcha_code']; if (is_null($f_captcha_code) || empty($f_captcha_code)) { $this->m_error = new PEAR_Error('Please enter the code shown in the image.', ACTION_BLOGCOMMENT_ERR_NO_CAPTCHA_CODE); return false; } if (!PhpCaptcha::Validate($f_captcha_code, true)) { $this->m_error = new PEAR_Error('The code you entered is not the same with the one shown in the image.', ACTION_BLOGCOMMENT_ERR_INVALID_CAPTCHA_CODE); return false; } } $this->m_properties['title'] = $p_input['f_blogcomment_title']; $this->m_properties['content'] = $p_input['f_blogcomment_content']; $this->m_properties['mood_id'] = $p_input['f_blogcomment_mood_id']; $this->m_properties['user_name'] = $p_input['f_blogcomment_user_name']; $this->m_properties['user_email'] = $p_input['f_blogcomment_user_email']; $this->m_blogcomment = new BlogComment($p_input['f_blogcomment_id']); }
public static function validate($checkType, $value) { $blnReturn = FALSE; if (array_key_exists($checkType, self::$checks)) { if (empty(self::$checks[$checkType])) { $blnReturn = TRUE; } else { switch ($checkType) { case VFORM_CAPTCHA: $blnReturn = PhpCaptcha::Validate(ValidForm::get($value)); break; default: $blnReturn = preg_match(self::$checks[$checkType], $value); } } } else { $blnReturn = preg_match($checkType, $value); } return $blnReturn; }
/** * Check posted comment with CAPTCHA */ function checkCommentWithCaptcha() { global $config, $pathToIndex, $userName, $sessionState, $app; require $pathToIndex . '/plugins/captcha/php-captcha.inc.php'; switch ($config['language']) { case 'japanese': $textParts = array('コメント認証', 'コメント内容が認証出来ません。'); break; default: $textParts = array('Not Allowed', 'Request Not Allowed.'); break; } if (PhpCaptcha::Validate($_POST['captcha_phrase'])) { return true; } else { $additionalTitle = $textParts[0]; $content = '<h2>' . $textParts[0] . '</h2>' . "\n" . '<div class="important warning">' . "\n" . '<p>' . $textParts[1] . '</p>' . "\n" . '</div>' . "\n"; $item = array('title' => $app->setTitle($additionalTitle), 'contents' => $content, 'result' => '', 'pager' => ''); $app->display($item, $sessionState); exit; } }
static function CaptchaCheck($text) { return PhpCaptcha::Validate($text); }
function PhpCaptchaColour($aFonts, $iWidth = CAPTCHA_WIDTH, $iHeight = CAPTCHA_HEIGHT) { // call parent constructor parent::PhpCaptcha($aFonts, $iWidth, $iHeight); // set options $this->UseColour(true); }
<?php // ini_set('display_errors', 1); define('MODX_API_MODE', true); // initialize $modx require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; define('CAPTCHA_SESSION_ID', $modx->getOption('modcaptcha.session_id', null, 'php_captcha')); // include captcha class require MODX_CORE_PATH . 'components/modcaptcha/php-captcha.inc.php'; $fonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf'); $width = $modx->getOption('modcaptcha.width', null, 150); $height = $modx->getOption('modcaptcha.height', null, 38); $chars = $modx->getOption('modcaptcha.chars', null, 'a-z,A-Z,1-9'); $captcha = new PhpCaptcha($fonts, $width, $height); $captcha->SetCharSet($chars); $captcha->SetNumChars($modx->getOption('modcaptcha.num_chars', null, 5)); $captcha->SetNumLines($modx->getOption('modcaptcha.num_lines', null, 2)); $captcha->Create();
/** * This function returns true if the variable matches captcha image * * @param $val The value to test. * @param $opts (not required) * @param $formelement (not required) */ function captcha($val, $opts = '', $formelement = null) { include_once YD_DIR_HOME . '/3rdparty/captcha/php-captcha.inc.php'; return PhpCaptcha::Validate($val); }
function fn_image_verification($condition, $req) { if (fn_needs_image_verification($condition) == false) { return true; } $verification_id = !empty($req['verification_id']) ? $req['verification_id'] : ''; $verification_answer = !empty($req['verification_answer']) ? $req['verification_answer'] : ''; if (PhpCaptcha::Validate($verification_id, $verification_answer) == false) { fn_set_notification('E', __('error'), __('error_confirmation_code_invalid')); return false; } // Do no use verification after first correct validation if (Registry::get('settings.Image_verification.hide_after_validation') == 'Y') { $_SESSION['image_verification_ok'] = true; } return true; }
<?php /************************* Coppermine Photo Gallery ************************ Copyright (c) 2003-2014 Coppermine Dev Team v1.0 originally written by Gregory Demar This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation. ******************************************** Coppermine version: 1.6.01 $HeadURL$ $Revision$ **********************************************/ define("IN_COPPERMINE", true); require "include/init.inc.php"; require "include/captcha.inc.php"; /** * Fonts to create the captcha image */ $aFonts = array('images/fonts/acidic.ttf', 'images/fonts/hurryup.ttf'); // create new image $oPhpCaptcha = new PhpCaptcha($aFonts, 150, 30, 5, 20, false); $oPhpCaptcha->Create();
public function verify() { $response = PhpCaptcha::Validate($this->trellis->input['antispam']); if (!$response) { $this->error = 'antispam_phpcaptcha_fail'; } return $response; }
function check($val, $label) { if (!PhpCaptcha::Validate($val)) { $this->errors[] = sprintf(NOT_IN_LIST, $label); } }
function validateCaptcha() { if ($this->hasCaptcha()) { include_once GORUM_DIR . '/captcha/php-captcha.inc.php'; if (!PhpCaptcha::Validate($_POST['captchaField'])) { return Roll::setFormInvalid("invalidCaptcha"); } } return TRUE; }
function check_user_info(&$error) { // function check_user_info - start global $CONFIG; //, $PHP_SELF; global $lang_register_php, $lang_register_confirm_email, $lang_common, $lang_register_approve_email; global $lang_register_activated_email, $lang_register_user_login, $lang_errors; $superCage = Inspekt::makeSuperCage(); //$CONFIG['admin_activation'] = FALSE; //$CONFIG['admin_activation'] = TRUE; $user_name = trim(get_post_var('username')); $password = trim(get_post_var('password')); $password_again = trim(get_post_var('password_verification')); $email = trim(get_post_var('email')); $profile1 = $superCage->post->getEscaped('user_profile1'); $profile2 = $superCage->post->getEscaped('user_profile2'); $profile3 = $superCage->post->getEscaped('user_profile3'); $profile4 = $superCage->post->getEscaped('user_profile4'); $profile5 = $superCage->post->getEscaped('user_profile5'); $profile6 = $superCage->post->getEscaped('user_profile6'); $agree_disclaimer = $superCage->post->getEscaped('agree'); $captcha_confirmation = $superCage->post->getEscaped('confirmCode'); $sql = "SELECT user_id " . "FROM {$CONFIG['TABLE_USERS']} " . "WHERE user_name = '" . $user_name . "'"; $result = cpg_db_query($sql); if (mysql_num_rows($result)) { $error = '<li>' . $lang_register_php['err_user_exists'] . '</li>'; return false; } mysql_free_result($result); if (utf_strlen($user_name) < 2) { $error .= '<li>' . $lang_register_php['err_uname_short'] . '</li>'; } if (!empty($CONFIG['global_registration_pw'])) { $global_registration_pw = get_post_var('global_registration_pw'); if ($global_registration_pw != $CONFIG['global_registration_pw']) { $error .= '<li>' . $lang_register_php['err_global_pw'] . '</li>'; } elseif ($password == $CONFIG['global_registration_pw']) { $error .= '<li>' . $lang_register_php['err_global_pass_same'] . '</li>'; } } if (utf_strlen($password) < 2) { $error .= '<li>' . $lang_register_php['err_password_short'] . '</li>'; } if ($password == $user_name) { $error .= '<li>' . $lang_register_php['err_uname_pass_diff'] . '</li>'; } if ($password != $password_again) { $error .= '<li>' . $lang_register_php['err_password_mismatch'] . '</li>'; } if (!eregi("^[_\\.0-9a-z\\-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,6}\$", $email)) { $error .= '<li>' . $lang_register_php['err_invalid_email'] . '</li>'; } if ($CONFIG['user_registration_disclaimer'] == 2 && $agree_disclaimer != 1) { $error .= '<li>' . $lang_register_php['err_disclaimer'] . '</li>'; } // check captcha if ($CONFIG['registration_captcha'] != 0) { require "include/captcha.inc.php"; if (!PhpCaptcha::Validate($captcha_confirmation)) { $error .= '<li>' . $lang_errors['captcha_error'] . '</li>'; } } if ($error != '') { return false; } if (!$CONFIG['allow_duplicate_emails_addr']) { $sql = "SELECT user_id " . "FROM {$CONFIG['TABLE_USERS']} " . "WHERE user_email = '" . addslashes($email) . "'"; $result = cpg_db_query($sql); if (mysql_num_rows($result)) { $error = '<li>' . $lang_register_php['err_duplicate_email'] . '</li>'; return false; } mysql_free_result($result); } if ($CONFIG['reg_requires_valid_email'] || $CONFIG['admin_activation']) { $active = 'NO'; list($usec, $sec) = explode(' ', microtime()); $seed = (double) $sec + (double) $usec * 100000; srand($seed); $act_key = md5(uniqid(rand(), 1)); } else { $active = 'YES'; $act_key = ''; } if ($CONFIG['enable_encrypted_passwords']) { $encpassword = md5($password); } else { $encpassword = $password; } $sql = "INSERT INTO {$CONFIG['TABLE_USERS']} " . "(user_regdate, user_active, user_actkey, user_name, user_password, user_email, user_profile1, user_profile2, user_profile3, user_profile4, user_profile5, user_profile6) " . "VALUES (NOW(), '{$active}', '{$act_key}', '{$user_name}', '{$encpassword}', '{$email}', '{$profile1}', '{$profile2}', '{$profile3}', '{$profile4}', '{$profile5}', '{$profile6}')"; if ($CONFIG['log_mode']) { log_write('New user "$user_name" created on ' . date("F j, Y, g:i a"), CPG_ACCESS_LOG); } $result = cpg_db_query($sql); // Create a personal album if corresponding option is enabled if ($CONFIG['personal_album_on_registration'] == 1) { print 'sub<br />'; $catid = mysql_insert_id() + FIRST_USER_CAT; print $catid; cpg_db_query("INSERT INTO {$CONFIG['TABLE_ALBUMS']} (`title`, `category`) VALUES ('{$user_name}', {$catid})"); print "INSERT INTO {$CONFIG['TABLE_ALBUMS']} (`title`, `category`) VALUES ('{$user_name}', {$catid})"; } if ($CONFIG['reg_requires_valid_email']) { if (!$CONFIG['admin_activation'] == 1) { //user gets activation email $act_link = rtrim($CONFIG['site_url'], '/') . '/register.php?activate=' . $act_key; $template_vars = array('{SITE_NAME}' => $CONFIG['gallery_name'], '{USER_NAME}' => $user_name, '{ACT_LINK}' => $act_link); if (!cpg_mail($email, sprintf($lang_register_php['confirm_email_subject'], $CONFIG['gallery_name']), nl2br(strtr($lang_register_confirm_email, $template_vars)))) { cpg_die(CRITICAL_ERROR, $lang_register_php['failed_sending_email'], __FILE__, __LINE__); } } if ($CONFIG['admin_activation'] == 1) { msg_box($lang_register_php['information'], $lang_register_php['thank_you_admin_activation'], $lang_common['continue'], 'index.php'); } else { msg_box($lang_register_php['information'], $lang_register_php['thank_you'], $lang_common['continue'], 'index.php'); } } else { msg_box($lang_register_php['information'], $lang_register_php['acct_active'], $lang_common['continue'], 'index.php'); } // email notification to admin if ($CONFIG['reg_notify_admin_email']) { // get default language in which to inform the admin $lang_register_php_def = cpg_get_default_lang_var('lang_register_php'); $lang_register_approve_email_def = cpg_get_default_lang_var('lang_register_approve_email'); if ($CONFIG['admin_activation'] == 1) { $act_link = rtrim($CONFIG['site_url'], '/') . '/register.php?activate=' . $act_key; $template_vars = array('{SITE_NAME}' => $CONFIG['gallery_name'], '{USER_NAME}' => $user_name, '{ACT_LINK}' => $act_link); cpg_mail('admin', sprintf($lang_register_php_def['notify_admin_request_email_subject'], $CONFIG['gallery_name']), nl2br(strtr($lang_register_approve_email_def, $template_vars))); } else { cpg_mail('admin', sprintf($lang_register_php_def['notify_admin_email_subject'], $CONFIG['gallery_name']), sprintf($lang_register_php_def['notify_admin_email_body'], $user_name)); } } return true; }
$recipient_email_warning = '<div class="cpg_message_error">' . $lang_ecard_php['invalid_email'] . ' (' . $recipient_email . ')</div>'; } $gallery_url_prefix = $CONFIG['ecards_more_pic_target'] . (substr($CONFIG['ecards_more_pic_target'], -1) == '/' ? '' : '/'); pageheader($lang_ecard_php['title']); if ($superCage->post->keyExists('submit')) { //Check if the form token is valid if (!checkFormToken()) { cpg_die(ERROR, $lang_errors['invalid_form_token'], __FILE__, __LINE__); } // Create and send the e-card if ($superCage->post->keyExists('sender_name') && $valid_sender_email && $valid_recipient_email) { if ($CONFIG['ecard_captcha'] == 1 || $CONFIG['ecard_captcha'] == 2 && !USER_ID) { if (!captcha_plugin_enabled('ecard')) { require "include/captcha.inc.php"; $matches = $superCage->post->getMatched('confirmCode', '/^[a-zA-Z0-9]+$/'); if (!$matches[0] || !PhpCaptcha::Validate($matches[0])) { if ($CONFIG['log_mode'] != 0) { log_write('Captcha authentication for ecard failed for user ' . $USER_DATA['user_name'] . ' at ' . $hdr_ip, CPG_SECURITY_LOG); } cpg_die(ERROR, $lang_errors['captcha_error'], __FILE__, __LINE__); } } else { CPGPluginAPI::action('captcha_ecard_validate', null); } } require 'include/mailer.inc.php'; if ($CONFIG['make_intermediate'] && max($row['pwidth'], $row['pheight']) > $CONFIG['picture_width']) { $n_picname = get_pic_url($row, 'normal'); } else { $n_picname = get_pic_url($row, 'fullsize'); }
if (defined('AJAX_REQUEST')) { Registry::get('ajax')->assign('deleted', true); } } exit; } return; } if ($mode == 'captcha') { $verification_id = $_REQUEST['verification_id']; if (empty($verification_id)) { $verification_id = 'common'; } $verification_settings = Settings::instance()->getValues('Image_verification'); $fonts = array(Registry::get('config.dir.lib') . 'other/captcha/verdana.ttf'); $c = new PhpCaptcha($verification_id, $fonts, $verification_settings['width'], $verification_settings['height']); // Set string length $c->SetNumChars($verification_settings['string_length']); // Set number of distortion lines $c->SetNumLines($verification_settings['lines_number']); // Set minimal font size $c->SetMinFontSize($verification_settings['min_font_size']); // Set maximal font size $c->SetMaxFontSize($verification_settings['max_font_size']); $c->SetGridColour($verification_settings['grid_color']); if ($verification_settings['char_shadow'] == 'Y') { $c->DisplayShadow(true); } if ($verification_settings['colour'] == 'Y') { $c->UseColour(true); }
static function CaptchaCheck($text, $unset_session = true) { return PhpCaptcha::Validate($text, true, $unset_session); }
<?php require 'php-captcha.inc.php'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Prova Form con Captcha</title> </head> <body> <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!PhpCaptcha::Validate($_POST['captcha'])) { echo 'Codice captcha errato!<hr />'; } else { echo 'Hai inviato i seguenti dati:<br />', 'Nome: ', $_POST['nome'], '<br />', 'Email: ', $_POST['email'], '<br />', 'Messaggio: ', $_POST['messaggio'], '<hr />'; } } ?> <form method="post" action="index.php"> <label for="nome">Nome</label><br /> <input name="nome" id="nome" type="text" size="25" /><br /> <label for="email">Email</label><br /> <input name="email" id="email" type="text" size="25" /><br /> <label for="messaggio">Messaggio</label><br /> <textarea rows="7" cols="25" name="messaggio" id="messaggio"> </textarea><br /> <img style="border:1px solid" src="captcha.php" alt="captcha" /><br /> <div style="font-size:70%">Inserisci il codice che vedi nell'immagine sopra.</div> <input name="captcha" type="text" size="6" /><br />
function mf_process_form($dbh, $input) { global $mf_lang; $form_id = (int) trim($input['form_id']); $edit_id = (int) trim($input['edit_id']); if (empty($input['page_number'])) { $page_number = 1; } else { $page_number = (int) $input['page_number']; } $is_committed = false; $mf_settings = mf_get_settings($dbh); //this function handle password submission and general form submission //check for password requirement $query = "select \r\n\t\t\t\t\t\tform_password,\r\n\t\t\t\t\t\tform_language,\r\n\t\t\t\t\t\tform_review,\r\n\t\t\t\t\t\tform_page_total,\r\n\t\t\t\t\t\tlogic_field_enable,\r\n\t\t\t\t\t\tlogic_page_enable \r\n\t\t\t\t\tfrom \r\n\t\t\t\t\t\t`" . MF_TABLE_PREFIX . "forms` where form_id=?"; $params = array($form_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $form_review = $row['form_review']; $form_page_total = (int) $row['form_page_total']; $logic_field_enable = (int) $row['logic_field_enable']; $logic_page_enable = (int) $row['logic_page_enable']; if (!empty($row['form_password'])) { $require_password = true; } else { $require_password = false; } if (!empty($row['form_language'])) { mf_set_language($row['form_language']); } //if this form require password and no session has been set if ($require_password && (empty($_SESSION['user_authenticated']) || $_SESSION['user_authenticated'] != $form_id)) { $query = "select count(form_id) valid_password from `" . MF_TABLE_PREFIX . "forms` where form_id=? and form_password=?"; $params = array($form_id, $input['password']); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); if (!empty($row['valid_password'])) { $process_result['status'] = true; $_SESSION['user_authenticated'] = $form_id; } else { $process_result['status'] = false; $process_result['custom_error'] = $mf_lang['form_pass_invalid']; } return $process_result; } $delay_notifications = false; $form_properties = array(); $form_properties = mf_get_form_properties($dbh, $form_id, array('payment_enable_merchant', 'payment_delay_notifications', 'payment_merchant_type')); //at this moment, delay notification only available for stripe if ($form_properties['payment_enable_merchant'] == 1 && !empty($form_properties['payment_delay_notifications']) && in_array($form_properties['payment_merchant_type'], array('stripe'))) { $delay_notifications = true; } $element_child_lookup['address'] = 5; $element_child_lookup['simple_name'] = 1; $element_child_lookup['simple_name_wmiddle'] = 2; $element_child_lookup['name'] = 3; $element_child_lookup['name_wmiddle'] = 4; $element_child_lookup['phone'] = 2; $element_child_lookup['date'] = 2; $element_child_lookup['europe_date'] = 2; $element_child_lookup['time'] = 3; $element_child_lookup['money'] = 1; //this applies to dollar,euro and pound. yen don't have child $element_child_lookup['checkbox'] = 1; //this is just a dumb value $element_child_lookup['matrix'] = 1; //this is just a dumb value //never trust user input, get a list of input fields based on info stored on table //element has real child -> address, simple_name, name, simple_name_wmiddle, name_wmiddle //element has virtual child -> phone, date, europe_date, time, money $is_edit_page = false; if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { //if this is edit_entry page, process all elements on all pages at once $page_number_clause = ''; $params = array($form_id); $is_edit_page = true; } else { $page_number_clause = 'and element_page_number =?'; $params = array($form_id, $page_number); } $query = "SELECT \r\n\t\t\t\t\t\telement_id,\r\n \t\t\t\t\telement_title,\r\n \t\t\t\t\telement_is_required,\r\n \t\t\t\t\telement_is_unique,\r\n \t\t\t\t\telement_is_private,\r\n \t\t\t\t\telement_type, \r\n \t\t\t\t\telement_constraint,\r\n \t\t\t\t\telement_total_child,\r\n \t\t\t\t\telement_file_enable_multi_upload,\r\n \t\t\t\t\telement_file_max_selection,\r\n \t\t\t\t\telement_file_enable_type_limit,\r\n \t\t\t\t\telement_file_block_or_allow,\r\n \t\t\t\t\telement_file_type_list,\r\n \t\t\t\t\telement_range_max,\r\n \t\t\t\t\telement_range_min,\r\n \t\t\t\t\telement_range_limit_by,\r\n \t\t\t\t\telement_choice_has_other,\r\n \t\t\t\t\telement_time_showsecond,\r\n \t\t\t\t\telement_time_24hour,\r\n \t\t\t\t\telement_matrix_parent_id,\r\n \t\t\t\t\telement_matrix_allow_multiselect,\r\n \t\t\t\t\telement_date_enable_range,\r\n \t\t\t\t\telement_date_range_min,\r\n \t\t\t\t\telement_date_range_max,\r\n \t\t\t\t\telement_date_past_future,\r\n \t\t\t\t\telement_date_disable_past_future,\r\n \t\t\t\t\telement_date_enable_selection_limit,\r\n\t\t\t\t\t\telement_date_selection_max,\r\n\t\t\t\t\t\telement_date_disable_weekend,\r\n\t\t\t\t\t\telement_date_disable_specific,\r\n\t\t\t\t\t\telement_date_disabled_list\r\n\t\t\t\t\tFROM \r\n\t\t\t\t\t\t" . MF_TABLE_PREFIX . "form_elements \r\n\t\t\t\t WHERE \r\n\t\t\t\t \t\tform_id=? and element_status = '1' {$page_number_clause} and element_type <> 'page_break' and element_type <> 'section'\r\n\t\t\t\tORDER BY \r\n\t\t\t\t\t\telement_id asc"; $sth = mf_do_query($query, $params, $dbh); $element_to_get = array(); $private_elements = array(); //admin-only fields $matrix_childs_array = array(); while ($row = mf_do_fetch_result($sth)) { if ($row['element_type'] == 'section') { continue; } //store element info $element_info[$row['element_id']]['title'] = $row['element_title']; $element_info[$row['element_id']]['type'] = $row['element_type']; $element_info[$row['element_id']]['is_required'] = $row['element_is_required']; $element_info[$row['element_id']]['is_unique'] = $row['element_is_unique']; $element_info[$row['element_id']]['is_private'] = $row['element_is_private']; $element_info[$row['element_id']]['constraint'] = $row['element_constraint']; $element_info[$row['element_id']]['file_enable_multi_upload'] = $row['element_file_enable_multi_upload']; $element_info[$row['element_id']]['file_max_selection'] = $row['element_file_max_selection']; $element_info[$row['element_id']]['file_enable_type_limit'] = $row['element_file_enable_type_limit']; $element_info[$row['element_id']]['file_block_or_allow'] = $row['element_file_block_or_allow']; $element_info[$row['element_id']]['file_type_list'] = $row['element_file_type_list']; $element_info[$row['element_id']]['range_min'] = $row['element_range_min']; $element_info[$row['element_id']]['range_max'] = $row['element_range_max']; $element_info[$row['element_id']]['range_limit_by'] = $row['element_range_limit_by']; $element_info[$row['element_id']]['choice_has_other'] = $row['element_choice_has_other']; $element_info[$row['element_id']]['time_showsecond'] = (int) $row['element_time_showsecond']; $element_info[$row['element_id']]['time_24hour'] = (int) $row['element_time_24hour']; $element_info[$row['element_id']]['matrix_parent_id'] = (int) $row['element_matrix_parent_id']; $element_info[$row['element_id']]['matrix_allow_multiselect'] = (int) $row['element_matrix_allow_multiselect']; $element_info[$row['element_id']]['date_enable_range'] = (int) $row['element_date_enable_range']; $element_info[$row['element_id']]['date_range_max'] = $row['element_date_range_max']; $element_info[$row['element_id']]['date_range_min'] = $row['element_date_range_min']; $element_info[$row['element_id']]['date_past_future'] = $row['element_date_past_future']; $element_info[$row['element_id']]['date_disable_past_future'] = (int) $row['element_date_disable_past_future']; $element_info[$row['element_id']]['date_enable_selection_limit'] = (int) $row['element_date_enable_selection_limit']; $element_info[$row['element_id']]['date_selection_max'] = (int) $row['element_date_selection_max']; $element_info[$row['element_id']]['date_disable_weekend'] = (int) $row['element_date_disable_weekend']; $element_info[$row['element_id']]['date_disable_specific'] = (int) $row['element_date_disable_specific']; $element_info[$row['element_id']]['date_disabled_list'] = $row['element_date_disabled_list']; //get element form name, complete with the childs if (empty($element_child_lookup[$row['element_type']]) || $row['element_constraint'] == 'yen') { //elements with no child $element_to_get[] = 'element_' . $row['element_id']; } else { //elements with child if ($row['element_type'] == 'checkbox' || $row['element_type'] == 'matrix' && !empty($row['element_matrix_allow_multiselect'])) { //for checkbox, get childs elements from ap_element_options table $sub_query = "select \r\n\t\t\t\t\t\t\t\t\t\toption_id \r\n\t\t\t\t\t\t\t\t\tfrom \r\n\t\t\t\t\t\t\t\t\t\t" . MF_TABLE_PREFIX . "element_options \r\n\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t \t\tform_id=? and element_id=? and live=1 \r\n\t\t\t\t\t\t\t\torder by \r\n\t\t\t\t\t\t\t\t\t\t`position` asc"; $params = array($form_id, $row['element_id']); $sub_sth = mf_do_query($sub_query, $params, $dbh); while ($sub_row = mf_do_fetch_result($sub_sth)) { $element_to_get[] = "element_{$row['element_id']}_{$sub_row['option_id']}"; $checkbox_childs[$row['element_id']][] = $sub_row['option_id']; //store the child into array for further reference } //if this is the parent of the matrix (checkbox matrix only), get the child as well if ($row['element_type'] == 'matrix' && !empty($row['element_matrix_allow_multiselect'])) { $temp_matrix_child_element_id_array = explode(',', trim($row['element_constraint'])); foreach ($temp_matrix_child_element_id_array as $mc_element_id) { $sub_query = "select \r\n\t\t\t\t\t\t\t\t\t\t\toption_id \r\n\t\t\t\t\t\t\t\t\t\tfrom \r\n\t\t\t\t\t\t\t\t\t\t\t" . MF_TABLE_PREFIX . "element_options \r\n\t\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t \t\tform_id=? and element_id=? and live=1 \r\n\t\t\t\t\t\t\t\t\torder by \r\n\t\t\t\t\t\t\t\t\t\t\t`position` asc"; $params = array($form_id, $mc_element_id); $sub_sth = mf_do_query($sub_query, $params, $dbh); while ($sub_row = mf_do_fetch_result($sub_sth)) { $element_to_get[] = "element_{$mc_element_id}_{$sub_row['option_id']}"; $checkbox_childs[$mc_element_id][] = $sub_row['option_id']; //store the child into array for further reference } } } } else { if ($row['element_type'] == 'matrix' && empty($row['element_matrix_allow_multiselect'])) { //radio button matrix, each row doesn't have childs $element_to_get[] = 'element_' . $row['element_id']; } else { $max = $element_child_lookup[$row['element_type']] + 1; for ($j = 1; $j <= $max; $j++) { $element_to_get[] = "element_{$row['element_id']}_{$j}"; } } } } //if the back button pressed after review page, or this is multipage form, we need to store the file info if (!empty($_SESSION['review_id']) && !empty($form_review) || $form_page_total > 1 || $is_edit_page === true) { if ($row['element_type'] == 'file') { $existing_file_id[] = $row['element_id']; } } //if this is matrix field, particularly the child rows, we need to store the id into temporary array //we need to loop through it later, to set the "required" property based on the matrix parent value if ($row['element_type'] == 'matrix' && !empty($row['element_matrix_parent_id'])) { $matrix_childs_array[$row['element_id']] = $row['element_matrix_parent_id']; } //extra security measure for file upload //even though the user disabled 'file type limit', we need to enforce it here and block dangerous files if ($row['element_type'] == 'file') { //if the 'Limit File Upload Type' disabled by user, enable it here and check for dangerous files if (empty($row['element_file_enable_type_limit'])) { $element_info[$row['element_id']]['file_enable_type_limit'] = 1; $element_info[$row['element_id']]['file_block_or_allow'] = 'b'; //block $element_info[$row['element_id']]['file_type_list'] = 'php,php3,php4,php5,phtml,exe,pl,cgi,html,htm,js'; } else { //if the limit being enabled but the list type is empty if (empty($element_info[$row['element_id']]['file_type_list'])) { $element_info[$row['element_id']]['file_block_or_allow'] = 'b'; //block $element_info[$row['element_id']]['file_type_list'] = 'php,php3,php4,php5,phtml,exe,pl,cgi,html,htm,js'; } else { //if the list is not empty, and it set to block files, make sure to add dangerous file types into the list if ($element_info[$row['element_id']]['file_block_or_allow'] == 'b') { $element_info[$row['element_id']]['file_type_list'] .= ',php,php3,php4,php5,phtml,exe,pl,cgi,html,htm,js'; } } } } } //loop through each matrix childs array //if the parent matrix has required=1, the child need to be set the same //if the parent matrix allow multi select, the child need to be set the same if (!empty($matrix_childs_array)) { foreach ($matrix_childs_array as $matrix_child_element_id => $matrix_parent_element_id) { if (!empty($element_info[$matrix_parent_element_id]['is_required'])) { $element_info[$matrix_child_element_id]['is_required'] = 1; } if (!empty($element_info[$matrix_parent_element_id]['matrix_allow_multiselect'])) { $element_info[$matrix_child_element_id]['matrix_allow_multiselect'] = 1; } } } if (!empty($existing_file_id)) { $existing_file_id_list = ''; foreach ($existing_file_id as $value) { $existing_file_id_list .= 'element_' . $value . ','; } $existing_file_id_list = rtrim($existing_file_id_list, ','); if (!empty($_SESSION['review_id'])) { $current_session_id = $_SESSION['review_id']; $query = "select {$existing_file_id_list} from " . MF_TABLE_PREFIX . "form_{$form_id}_review where `id`=?"; } else { if ($is_edit_page === true) { //if this is edit_entry.php page $current_session_id = $edit_id; $query = "select {$existing_file_id_list} from " . MF_TABLE_PREFIX . "form_{$form_id} where `id`=?"; } else { $current_session_id = session_id(); $query = "select {$existing_file_id_list} from " . MF_TABLE_PREFIX . "form_{$form_id}_review where `session_id`=?"; } } $params = array($current_session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); foreach ($existing_file_id as $value) { if (!empty($row['element_' . $value])) { $element_info[$value]['existing_file'] = $row['element_' . $value]; } } } //pick user input $user_input = array(); foreach ($element_to_get as $element_name) { $user_input[$element_name] = @$input[$element_name]; } //if conditional logic for field is being enabled, and this is not edit entry page //we need to check the status of all elements which has "required" property //the "required" status might be disabled, depend on the condition if (!empty($logic_field_enable) && $is_edit_page === false) { $required_elements_status = array(); $required_elements_status = mf_get_required_elements_status($dbh, $form_id, $page_number, $input); if (!empty($required_elements_status)) { foreach ($required_elements_status as $element_id => $required_status) { $element_info[$element_id]['is_required'] = $required_status; } } } else { if (!empty($logic_field_enable) && $is_edit_page === true) { //if this edit entry page and has logic enabled, disable all "required" fields foreach ($element_info as $element_id => $value) { $element_info[$element_id]['is_required'] = 0; } } } $error_elements = array(); $table_data = array(); //validate input based on rules specified for each field foreach ($user_input as $element_name => $element_data) { //get element_id from element_name $exploded = array(); $exploded = explode('_', $element_name); $element_id = $exploded[1]; $rules = array(); $target_input = array(); $element_type = $element_info[$element_id]['type']; //if this is private fields and not logged-in as admin, bypass operation below, just supply the default value if any if ($element_info[$element_id]['is_private'] == 1 && empty($_SESSION['mf_logged_in'])) { if (!empty($element_info[$element_id]['default_value'])) { $table_data['element_' . $element_id] = $element_info[$element_id]['default_value']; } continue; } //if this is matrix field, we need to convert the field type into radio button or checkbox if ('matrix' == $element_type) { $is_matrix_field = true; if (!empty($element_info[$element_id]['matrix_allow_multiselect'])) { $element_type = 'checkbox'; } else { $element_type = 'radio'; } } else { $is_matrix_field = false; } if ('text' == $element_type) { //Single Line Text if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } if (!empty($user_input[$element_name]) || is_numeric($user_input[$element_name])) { if (!empty($element_info[$element_id]['range_max']) && !empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['range_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_max'])) { $rules[$element_name]['max_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['min_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min']; } } } } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data); //prepare data for table column $table_data[$element_name] = $element_data; } elseif ('textarea' == $element_type) { //Paragraph if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } if (!empty($user_input[$element_name]) || is_numeric($user_input[$element_name])) { if (!empty($element_info[$element_id]['range_max']) && !empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['range_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_max'])) { $rules[$element_name]['max_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['min_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min']; } } } } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data); //prepare data for table column $table_data[$element_name] = $element_data; } elseif ('signature' == $element_type) { //Signature if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } $target_input[$element_name] = $element_data; if ($target_input[$element_name] == '[]') { //this is considered as empty signature $target_input[$element_name] = ''; } $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data, ENT_NOQUOTES); //prepare data for table column $table_data[$element_name] = $element_data; } elseif ('radio' == $element_type) { //Multiple Choice if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } //if this field has 'other' label if (!empty($element_info[$element_id]['choice_has_other'])) { if (empty($element_data) && !empty($input[$element_name . '_other'])) { $element_data = $input[$element_name . '_other']; //save old data into array, for form redisplay in case errors occured $form_data[$element_name . '_other']['default_value'] = $element_data; $table_data[$element_name . '_other'] = $element_data; //make sure to set the main element value to 0 $form_data[$element_name]['default_value'] = 0; $table_data[$element_name] = 0; } } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { if ($is_matrix_field && !empty($matrix_childs_array[$element_id])) { $error_elements[$matrix_childs_array[$element_id]] = $validation_result; } else { $error_elements[$element_id] = $validation_result; } } //save old data into array, for form redisplay in case errors occured if (empty($form_data[$element_name . '_other']['default_value'])) { $form_data[$element_name]['default_value'] = $element_data; } //prepare data for table column if (empty($table_data[$element_name . '_other'])) { $table_data[$element_name] = $element_data; } } elseif ('number' == $element_type) { //Number if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } //check for numeric if not empty if (!empty($user_input[$element_name])) { $rules[$element_name]['numeric'] = true; } if ((!empty($user_input[$element_name]) || is_numeric($user_input[$element_name])) && $element_info[$element_id]['range_limit_by'] == 'd') { if (!empty($element_info[$element_id]['range_max']) && !empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['range_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_max'])) { $rules[$element_name]['max_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['min_length'] = $element_info[$element_id]['range_limit_by'] . '#' . $element_info[$element_id]['range_min']; } } } } else { if ((!empty($user_input[$element_name]) || is_numeric($user_input[$element_name])) && $element_info[$element_id]['range_limit_by'] == 'v') { if (!empty($element_info[$element_id]['range_max']) && !empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['range_value'] = $element_info[$element_id]['range_min'] . '#' . $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_max'])) { $rules[$element_name]['max_value'] = $element_info[$element_id]['range_max']; } else { if (!empty($element_info[$element_id]['range_min'])) { $rules[$element_name]['min_value'] = $element_info[$element_id]['range_min']; } } } } } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data); //prepare data for table column $table_data[$element_name] = $element_data; //if the user removed the number, set the value to null if ($table_data[$element_name] == "") { $table_data[$element_name] = null; } } elseif ('url' == $element_type) { //Website if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $rules[$element_name]['website'] = true; if ($element_data == 'http://') { $element_data = ''; } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data); //prepare data for table column $table_data[$element_name] = $element_data; } elseif ('email' == $element_type) { //Email if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $rules[$element_name]['email'] = true; $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($element_data); //prepare data for table column $table_data[$element_name] = $element_data; } elseif ('simple_name' == $element_type) { //Simple Name if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 2 elements total $element_name_2 = substr($element_name, 0, -1) . '2'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed on next loop if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; $rules[$element_name_2]['required'] = true; } $target_input[$element_name] = $user_input[$element_name]; $target_input[$element_name_2] = $user_input[$element_name_2]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; $table_data[$element_name_2] = $user_input[$element_name_2]; } elseif ('simple_name_wmiddle' == $element_type) { //Simple Name with Middle if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other elements, 3 elements total $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed on next loop $processed_elements[] = $element_name_3; if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; $rules[$element_name_3]['required'] = true; } $target_input[$element_name] = $user_input[$element_name]; $target_input[$element_name_3] = $user_input[$element_name_3]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; $table_data[$element_name_2] = $user_input[$element_name_2]; $table_data[$element_name_3] = $user_input[$element_name_3]; } elseif ('name' == $element_type) { //Name - Extended if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 4 elements total //only element no 2&3 matters (first and last name) $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $element_name_4 = substr($element_name, 0, -1) . '4'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; $processed_elements[] = $element_name_4; if ($element_info[$element_id]['is_required']) { $rules[$element_name_2]['required'] = true; $rules[$element_name_3]['required'] = true; } $target_input[$element_name_2] = $user_input[$element_name_2]; $target_input[$element_name_3] = $user_input[$element_name_3]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); $form_data[$element_name_4]['default_value'] = htmlspecialchars($user_input[$element_name_4]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; $table_data[$element_name_2] = $user_input[$element_name_2]; $table_data[$element_name_3] = $user_input[$element_name_3]; $table_data[$element_name_4] = $user_input[$element_name_4]; } elseif ('name_wmiddle' == $element_type) { //Name - Extended, with Middle if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 5 elements total //only element no 2,3,4 matters (first, middle, last name) $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $element_name_4 = substr($element_name, 0, -1) . '4'; $element_name_5 = substr($element_name, 0, -1) . '5'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; $processed_elements[] = $element_name_4; $processed_elements[] = $element_name_5; if ($element_info[$element_id]['is_required']) { $rules[$element_name_2]['required'] = true; $rules[$element_name_4]['required'] = true; } $target_input[$element_name_2] = $user_input[$element_name_2]; $target_input[$element_name_4] = $user_input[$element_name_4]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); $form_data[$element_name_4]['default_value'] = htmlspecialchars($user_input[$element_name_4]); $form_data[$element_name_5]['default_value'] = htmlspecialchars($user_input[$element_name_5]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; $table_data[$element_name_2] = $user_input[$element_name_2]; $table_data[$element_name_3] = $user_input[$element_name_3]; $table_data[$element_name_4] = $user_input[$element_name_4]; $table_data[$element_name_5] = $user_input[$element_name_5]; } elseif ('time' == $element_type) { //Time if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 4 elements total $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $element_name_4 = substr($element_name, 0, -1) . '4'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; $processed_elements[] = $element_name_4; if ($element_info[$element_id]['is_required']) { $rules[$element_name_2]['required'] = true; $rules[$element_name_3]['required'] = true; if (empty($element_info[$element_id]['time_24hour'])) { $rules[$element_name_4]['required'] = true; } } //check time validity if any of the compound field entered $time_entry_exist = false; if (!empty($user_input[$element_name]) || !empty($user_input[$element_name_2]) || !empty($user_input[$element_name_3])) { $rules['element_time']['time'] = true; $time_entry_exist = true; } //for backward compatibility with machform v2 and beyond if ($element_info[$element_id]['constraint'] == 'show_seconds') { $element_info[$element_id]['time_showsecond'] = 1; } if ($time_entry_exist && empty($element_info[$element_id]['time_showsecond'])) { $user_input[$element_name_3] = '00'; } if ($element_info[$element_id]['is_unique']) { $rules['element_time_no_meridiem']['unique'] = $form_id . '#' . substr($element_name, 0, -2); //to check uniquenes we need to use 24 hours HH:MM:SS format $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $target_input[$element_name_2] = $user_input[$element_name_2]; $target_input[$element_name_3] = $user_input[$element_name_3]; $target_input[$element_name_4] = $user_input[$element_name_4]; if ($time_entry_exist) { $target_input['element_time'] = trim($user_input[$element_name] . ':' . $user_input[$element_name_2] . ':' . $user_input[$element_name_3] . ' ' . $user_input[$element_name_4]); $target_input['element_time_no_meridiem'] = @date("G:i:s", strtotime($target_input['element_time'])); } $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); $form_data[$element_name_4]['default_value'] = htmlspecialchars($user_input[$element_name_4]); //prepare data for table column $table_data[substr($element_name, 0, -2)] = @$target_input['element_time_no_meridiem']; } elseif ('address' == $element_type) { //Address if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 6 elements total, element #2 (address line 2) is optional $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $element_name_4 = substr($element_name, 0, -1) . '4'; $element_name_5 = substr($element_name, 0, -1) . '5'; $element_name_6 = substr($element_name, 0, -1) . '6'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; $processed_elements[] = $element_name_4; $processed_elements[] = $element_name_5; $processed_elements[] = $element_name_6; if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; $rules[$element_name_3]['required'] = true; $rules[$element_name_4]['required'] = true; $rules[$element_name_5]['required'] = true; $rules[$element_name_6]['required'] = true; } $target_input[$element_name] = $user_input[$element_name]; $target_input[$element_name_3] = $user_input[$element_name_3]; $target_input[$element_name_4] = $user_input[$element_name_4]; $target_input[$element_name_5] = $user_input[$element_name_5]; $target_input[$element_name_6] = $user_input[$element_name_6]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); $form_data[$element_name_4]['default_value'] = htmlspecialchars($user_input[$element_name_4]); $form_data[$element_name_5]['default_value'] = htmlspecialchars($user_input[$element_name_5]); $form_data[$element_name_6]['default_value'] = htmlspecialchars($user_input[$element_name_6]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; $table_data[$element_name_2] = $user_input[$element_name_2]; $table_data[$element_name_3] = $user_input[$element_name_3]; $table_data[$element_name_4] = $user_input[$element_name_4]; $table_data[$element_name_5] = $user_input[$element_name_5]; $table_data[$element_name_6] = $user_input[$element_name_6]; } elseif ('money' == $element_type) { //Price if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 2 elements total (for currency other than yen) if ($element_info[$element_id]['constraint'] != 'yen') { //if other than yen $base_element_name = substr($element_name, 0, -1); $element_name_2 = $base_element_name . '2'; $processed_elements[] = $element_name_2; if ($element_info[$element_id]['is_required']) { $rules[$base_element_name]['required'] = true; } //check for numeric if not empty if (!empty($user_input[$element_name]) || !empty($user_input[$element_name_2])) { $rules[$base_element_name]['numeric'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$base_element_name]['unique'] = $form_id . '#' . substr($element_name, 0, -2); $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $target_input[$base_element_name] = $user_input[$element_name] . '.' . $user_input[$element_name_2]; //join dollar+cent if ($target_input[$base_element_name] == '.') { $target_input[$base_element_name] = ''; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); //prepare data for table column if (!empty($user_input[$element_name]) || !empty($user_input[$element_name_2]) || $user_input[$element_name] === '0' || $user_input[$element_name_2] === '0') { $table_data[substr($element_name, 0, -2)] = $user_input[$element_name] . '.' . $user_input[$element_name_2]; } //if the user removed the number, set the value to null if ($user_input[$element_name] == "" && $user_input[$element_name_2] == "") { $table_data[substr($element_name, 0, -2)] = null; } } else { if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } //check for numeric if not empty if (!empty($user_input[$element_name])) { $rules[$element_name]['numeric'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $target_input[$element_name] = $user_input[$element_name]; //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; //if the user removed the number, set the value to null if ($table_data[$element_name] == "") { $table_data[$element_name] = null; } } $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } } elseif ('checkbox' == $element_type) { //Checkboxes if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } $all_child_array = array(); $all_child_array = $checkbox_childs[$element_id]; $base_element_name = 'element_' . $element_id . '_'; if (!empty($element_info[$element_id]['choice_has_other'])) { $all_checkbox_value = $input[$base_element_name . 'other']; //save old data into array, for form redisplay in case errors occured $form_data[$base_element_name . 'other']['default_value'] = $input[$base_element_name . 'other']; $table_data[$base_element_name . 'other'] = $input[$base_element_name . 'other']; } else { $all_checkbox_value = ''; } if ($element_info[$element_id]['is_required']) { //checking 'required' for checkboxes is more complex //we need to get total child, and join it into one element //only one element is required to be checked foreach ($all_child_array as $i) { $all_checkbox_value .= $user_input[$base_element_name . $i]; $processed_elements[] = $base_element_name . $i; //save old data into array, for form redisplay in case errors occured $form_data[$base_element_name . $i]['default_value'] = $user_input[$base_element_name . $i]; //prepare data for table column $table_data[$base_element_name . $i] = $user_input[$base_element_name . $i]; } $rules[$base_element_name]['required'] = true; $target_input[$base_element_name] = $all_checkbox_value; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { if ($is_matrix_field && !empty($matrix_childs_array[$element_id])) { $error_elements[$matrix_childs_array[$element_id]] = $validation_result; } else { $error_elements[$element_id] = $validation_result; } } } else { //if not required, we only need to capture all data foreach ($all_child_array as $i) { //save old data into array, for form redisplay in case errors occured $form_data[$base_element_name . $i]['default_value'] = $user_input[$base_element_name . $i]; //prepare data for table column $table_data[$base_element_name . $i] = $user_input[$base_element_name . $i]; } } } elseif ('select' == $element_type) { //Drop Down if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = $user_input[$element_name]; //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; } elseif ('date' == $element_type || 'europe_date' == $element_type) { //Date if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 3 elements total $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; if (!empty($element_info[$element_id]['is_required'])) { $rules[$element_name]['required'] = true; $rules[$element_name_2]['required'] = true; $rules[$element_name_3]['required'] = true; } $rules['element_date']['date'] = 'yyyy/mm/dd'; if (!empty($element_info[$element_id]['is_unique'])) { $rules['element_date']['unique'] = $form_id . '#' . substr($element_name, 0, -2); $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } if (!empty($element_info[$element_id]['date_enable_range'])) { if (!empty($element_info[$element_id]['date_range_max']) || !empty($element_info[$element_id]['date_range_min'])) { $rules['element_date']['date_range'] = $element_info[$element_id]['date_range_min'] . '#' . $element_info[$element_id]['date_range_max']; } } //disable past/future dates, if enabled. this rule override the date range rule being set above if (!empty($element_info[$element_id]['date_disable_past_future'])) { $today_date = date('Y-m-d', time()); if ($element_info[$element_id]['date_past_future'] == 'p') { //disable past dates $rules['element_date']['date_range'] = $today_date . '#0000-00-00'; } else { if ($element_info[$element_id]['date_past_future'] == 'f') { //disable future dates $rules['element_date']['date_range'] = '0000-00-00#' . $today_date; } } } //check for weekend dates rule if (!empty($element_info[$element_id]['date_disable_weekend'])) { $rules['element_date']['date_weekend'] = true; } //get disabled dates (either coming from 'date selection limit' or 'disable specific dates' rules) $disabled_dates = array(); //get disabled dates from 'date selection limit' rule if (!empty($element_info[$element_id]['date_enable_selection_limit']) && !empty($element_info[$element_id]['date_selection_max'])) { $sub_query = "select \r\n\t\t\t\t\t\t\t\t\t\tselected_date \r\n\t\t\t\t\t\t\t\t\tfrom (\r\n\t\t\t\t\t\t\t\t\t\t\tselect \r\n\t\t\t\t\t\t\t\t\t\t\t\t date_format(element_{$element_id},'%Y-%c-%e') as selected_date,\r\n\t\t\t\t\t\t\t\t\t\t\t\t count(element_{$element_id}) as total_selection \r\n\t\t\t\t\t\t\t\t\t\t from \r\n\t\t\t\t\t\t\t\t\t\t \t " . MF_TABLE_PREFIX . "form_{$form_id} \r\n\t\t\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t\t \t status=1 and element_{$element_id} is not null \r\n\t\t\t\t\t\t\t\t\t\t group by \r\n\t\t\t\t\t\t\t\t\t\t \t\t element_{$element_id}\r\n\t\t\t\t\t\t\t\t\t\t ) as A\r\n\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t\t A.total_selection >= ?"; $params = array($element_info[$element_id]['date_selection_max']); $sub_sth = mf_do_query($sub_query, $params, $dbh); while ($sub_row = mf_do_fetch_result($sub_sth)) { $disabled_dates[] = $sub_row['selected_date']; } } //get disabled dates from 'disable specific dates' rules if (!empty($element_info[$element_id]['date_disable_specific']) && !empty($element_info[$element_id]['date_disabled_list'])) { $exploded = array(); $exploded = explode(',', $element_info[$element_id]['date_disabled_list']); foreach ($exploded as $date_value) { $disabled_dates[] = date('Y-n-j', strtotime(trim($date_value))); } } if (!empty($disabled_dates)) { $rules['element_date']['disabled_dates'] = $disabled_dates; } $target_input[$element_name] = $user_input[$element_name]; $target_input[$element_name_2] = $user_input[$element_name_2]; $target_input[$element_name_3] = $user_input[$element_name_3]; $base_element_name = substr($element_name, 0, -2); if ('date' == $element_type) { //MM/DD/YYYY $target_input['element_date'] = $user_input[$element_name_3] . '-' . $user_input[$element_name] . '-' . $user_input[$element_name_2]; //prepare data for table column $table_data[$base_element_name] = $user_input[$element_name_3] . '-' . $user_input[$element_name] . '-' . $user_input[$element_name_2]; } else { //DD/MM/YYYY $target_input['element_date'] = $user_input[$element_name_3] . '-' . $user_input[$element_name_2] . '-' . $user_input[$element_name]; //prepare data for table column $table_data[$base_element_name] = $user_input[$element_name_3] . '-' . $user_input[$element_name_2] . '-' . $user_input[$element_name]; } $test_empty = str_replace('-', '', $target_input['element_date']); //if user not submitting any entry, remove the dashes if (empty($test_empty)) { unset($target_input['element_date']); $table_data[$base_element_name] = ''; } $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); } elseif ('simple_phone' == $element_type) { //Simple Phone if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if (!empty($user_input[$element_name])) { $rules[$element_name]['simple_phone'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $target_input[$element_name] = $user_input[$element_name]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; } elseif ('phone' == $element_type) { //Phone - US format if (!empty($processed_elements) && is_array($processed_elements) && in_array($element_name, $processed_elements)) { continue; } //compound element, grab the other element, 3 elements total $element_name_2 = substr($element_name, 0, -1) . '2'; $element_name_3 = substr($element_name, 0, -1) . '3'; $processed_elements[] = $element_name_2; //put this element into array so that it won't be processed next $processed_elements[] = $element_name_3; if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; $rules[$element_name_2]['required'] = true; $rules[$element_name_3]['required'] = true; } $rules['element_phone']['phone'] = true; if ($element_info[$element_id]['is_unique']) { $rules['element_phone']['unique'] = $form_id . '#' . substr($element_name, 0, -2); $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $target_input[$element_name] = $user_input[$element_name]; $target_input[$element_name_2] = $user_input[$element_name_2]; $target_input[$element_name_3] = $user_input[$element_name_3]; $target_input['element_phone'] = $user_input[$element_name] . $user_input[$element_name_2] . $user_input[$element_name_3]; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); $form_data[$element_name_2]['default_value'] = htmlspecialchars($user_input[$element_name_2]); $form_data[$element_name_3]['default_value'] = htmlspecialchars($user_input[$element_name_3]); //prepare data for table column $table_data[substr($element_name, 0, -2)] = $user_input[$element_name] . $user_input[$element_name_2] . $user_input[$element_name_3]; } elseif ('email' == $element_type) { //Email if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required'] = true; } if ($element_info[$element_id]['is_unique']) { $rules[$element_name]['unique'] = $form_id . '#' . $element_name; $target_input['dbh'] = $dbh; //we need to pass the $dbh for this 'unique' rule } $rules[$element_name]['email'] = true; $target_input[$element_name] = $element_data; $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } //save old data into array, for form redisplay in case errors occured $form_data[$element_name]['default_value'] = htmlspecialchars($user_input[$element_name]); //prepare data for table column $table_data[$element_name] = $user_input[$element_name]; } elseif ('file' == $element_type) { //File $listfile_name = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/listfile_{$input[$element_name . '_token']}.php"; if (!file_exists($listfile_name)) { $check_filetype = false; if ($element_info[$element_id]['is_required']) { $rules[$element_name]['required_file'] = true; $rules[$element_name]['filetype'] = true; $check_filetype = true; //if form review enabled, and user pressed back button after going to review page //or if this is multipage form //disable the required file checking if file already uploaded if (!empty($_SESSION['review_id']) || $form_page_total > 1 || $is_edit_page === true) { if (!empty($element_info[$element_id]['existing_file'])) { unset($rules[$element_name]['required_file']); unset($rules[$element_name]['filetype']); $check_filetype = false; } } } else { if ($_FILES[$element_name]['size'] > 0) { $rules[$element_name]['filetype'] = true; $check_filetype = true; } } if ($check_filetype == true && !empty($element_info[$element_id]['file_enable_type_limit'])) { if ($element_info[$element_id]['file_block_or_allow'] == 'b') { //block file type $target_input['file_block_or_allow'] = 'b'; } elseif ($element_info[$element_id]['file_block_or_allow'] == 'a') { $target_input['file_block_or_allow'] = 'a'; } $target_input['file_type_list'] = $element_info[$element_id]['file_type_list']; } $target_input[$element_name] = $element_name; //special for file, only need to pass input name $validation_result = mf_validate_element($target_input, $rules); if ($validation_result !== true) { $error_elements[$element_id] = $validation_result; } else { //if validation passed, store uploaded file info into array if ($_FILES[$element_name]['size'] > 0) { $uploaded_files[] = $element_name; } } } else { //if files were uploaded using advance uploader //file type validation already done in upload.php, so we don't need to do validation again here //store uploaded file list into array $current_element_uploaded_files_advance = array(); $current_element_uploaded_files_advance = file($listfile_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); array_shift($current_element_uploaded_files_advance); //remove the first index of the array array_pop($current_element_uploaded_files_advance); //remove the last index of the array $uploaded_files_advance[$element_id]['listfile_name'] = $listfile_name; $uploaded_files_advance[$element_id]['listfile_content'] = $current_element_uploaded_files_advance; //save old token into array, for form redisplay in case errors occured $form_data[$element_name]['file_token'] = $input[$element_name . '_token']; } } } //get form redirect info, if any //get form properties data $query = "select \r\n\t\t\t\t\t\t form_redirect,\r\n\t\t\t\t\t\t form_redirect_enable,\r\n\t\t\t\t\t\t form_email,\r\n\t\t\t\t\t\t form_unique_ip,\r\n\t\t\t\t\t\t form_captcha,\r\n\t\t\t\t\t\t form_captcha_type,\r\n\t\t\t\t\t\t form_review,\r\n\t\t\t\t\t\t form_page_total,\r\n\t\t\t\t\t\t form_resume_enable,\r\n\t\t\t\t\t\t form_name,\r\n\t\t\t\t\t\t esl_enable,\r\n\t\t\t\t\t\t esl_from_name,\r\n\t\t\t\t\t\t esl_from_email_address,\r\n\t\t\t\t\t\t esl_subject,\r\n\t\t\t\t\t\t esl_content,\r\n\t\t\t\t\t\t esl_plain_text,\r\n\t\t\t\t\t\t esr_enable,\r\n\t\t\t\t\t\t esr_email_address,\r\n\t\t\t\t\t\t esr_from_name,\r\n\t\t\t\t\t\t esr_from_email_address,\r\n\t\t\t\t\t\t esr_subject,\r\n\t\t\t\t\t\t esr_content,\r\n\t\t\t\t\t\t esr_plain_text,\r\n\t\t\t\t\t\t payment_enable_merchant,\r\n\t\t\t\t\t\t payment_merchant_type,\r\n\t\t\t\t\t\t ifnull(payment_paypal_email,'') payment_paypal_email,\r\n\t\t\t\t\t\t payment_paypal_language,\r\n\t\t\t\t\t\t payment_currency,\r\n\t\t\t\t\t\t payment_show_total,\r\n\t\t\t\t\t\t payment_total_location,\r\n\t\t\t\t\t\t payment_enable_recurring,\r\n\t\t\t\t\t\t payment_recurring_cycle,\r\n\t\t\t\t\t\t payment_recurring_unit,\r\n\t\t\t\t\t\t payment_price_type,\r\n\t\t\t\t\t\t payment_price_amount,\r\n\t\t\t\t\t\t payment_price_name\r\n\t\t\t\t from \r\n\t\t\t\t \t `" . MF_TABLE_PREFIX . "forms` \r\n\t\t\t\t where \r\n\t\t\t\t \t form_id=?"; $params = array($form_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); if (!empty($row['form_redirect_enable'])) { $form_redirect = $row['form_redirect']; } $form_unique_ip = $row['form_unique_ip']; $form_email = $row['form_email']; $form_captcha = $row['form_captcha']; $form_captcha_type = $row['form_captcha_type']; $form_review = $row['form_review']; $form_page_total = $row['form_page_total']; $form_name = $row['form_name']; $user_ip_address = $_SERVER['REMOTE_ADDR']; $esl_enable = $row['esl_enable']; $esl_from_name = $row['esl_from_name']; $esl_from_email_address = $row['esl_from_email_address']; $esl_subject = $row['esl_subject']; $esl_content = $row['esl_content']; $esl_plain_text = $row['esl_plain_text']; $esr_enable = $row['esr_enable']; $esr_email_address = $row['esr_email_address']; $esr_from_name = $row['esr_from_name']; $esr_from_email_address = $row['esr_from_email_address']; $esr_subject = $row['esr_subject']; $esr_content = $row['esr_content']; $esr_plain_text = $row['esr_plain_text']; $payment_enable_merchant = (int) $row['payment_enable_merchant']; if ($payment_enable_merchant < 1) { $payment_enable_merchant = 0; } $payment_merchant_type = $row['payment_merchant_type']; $payment_paypal_email = $row['payment_paypal_email']; $payment_paypal_language = $row['payment_paypal_language']; $payment_currency = $row['payment_currency']; $payment_show_total = (int) $row['payment_show_total']; $payment_total_location = $row['payment_total_location']; $payment_enable_recurring = (int) $row['payment_enable_recurring']; $payment_recurring_cycle = (int) $row['payment_recurring_cycle']; $payment_recurring_unit = $row['payment_recurring_unit']; $payment_price_type = $row['payment_price_type']; $payment_price_amount = (double) $row['payment_price_amount']; $payment_price_name = $row['payment_price_name']; //if the user is saving a form to resume later, we need to discard all validation errors if (!empty($input['generate_resume_url']) && !empty($row['form_resume_enable']) && $form_page_total > 1) { $is_saving_form_resume = true; $error_elements = array(); } else { $is_saving_form_resume = false; } $process_result['form_redirect'] = $form_redirect; $process_result['old_values'] = $form_data; $process_result['error_elements'] = $error_elements; //if this is edit_entry page, unique ip address validation should be bypassed $check_unique_ip = false; if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { $check_unique_ip = false; } else { if (!empty($form_unique_ip)) { $check_unique_ip = true; } } //check for ip address if ($check_unique_ip === true) { //if ip address checking enabled, compare user ip address with value in db $query = "select count(id) total_ip from `" . MF_TABLE_PREFIX . "form_{$form_id}` where ip_address=?"; $params = array($user_ip_address); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); if (!empty($row['total_ip'])) { $process_result['custom_error'] = 'Sorry, but this form is limited to one submission per user.'; } } if (!empty($_SESSION['edit_entry']['form_id']) && $_SESSION['edit_entry']['form_id'] === $form_id) { //when editing an entry, the captcha shouldn't be checked $is_bypass_captcha = true; } else { if (!empty($_SESSION['captcha_passed'][$form_id]) && $_SESSION['captcha_passed'][$form_id] === true) { //if the user already validated the captcha once for that session (e.g. on multi-page form), no need to check it again $is_bypass_captcha = true; } else { $is_bypass_captcha = false; } } //check for captcha if enabled and there is no errors from previous fields //on multipage form, captcha should be validated on the last page only if (!empty($form_captcha) && empty($error_elements) && $is_bypass_captcha !== true) { if ($form_page_total == 1 || $form_page_total == $page_number) { if ($form_captcha_type == 'i') { //if simple image captcha is being used if (!empty($_POST['captcha_response_field'])) { $captcha_response_field = trim($_POST['captcha_response_field']); if (PhpCaptcha::Validate($captcha_response_field) !== true) { $error_elements['element_captcha'] = 'incorrect-captcha-sol'; $process_result['error_elements'] = $error_elements; } else { //captcha succesfully validated //set a session variable, so that the user won't need to fill it again, if this is a multi-page form $_SESSION['captcha_passed'][$form_id] = true; } } else { //user not entered the words at all $error_elements['element_captcha'] = 'el-required'; $process_result['error_elements'] = $error_elements; } } else { if ($form_captcha_type == 't') { //if simple text captcha is being used if (!empty($_POST['captcha_response_field'])) { $captcha_response_field = strtolower(trim($_POST['captcha_response_field'])); if ($captcha_response_field != strtolower($_SESSION['MF_TEXT_CAPTCHA_ANSWER'])) { $error_elements['element_captcha'] = 'incorrect-text-captcha-sol'; $process_result['error_elements'] = $error_elements; } else { unset($_SESSION['MF_TEXT_CAPTCHA_ANSWER']); //captcha succesfully validated //set a session variable, so that the user won't need to fill it again, if this is a multi-page form $_SESSION['captcha_passed'][$form_id] = true; } } else { //user not entered the words at all $error_elements['element_captcha'] = 'el-text-required'; $process_result['error_elements'] = $error_elements; } } else { if ($form_captcha_type == 'r') { //otherwise reCaptcha is being used if (!empty($_POST['recaptcha_response_field'])) { $recaptcha_response = recaptcha_check_answer(RECAPTCHA_PRIVATE_KEY, $user_ip_address, $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if ($recaptcha_response !== false) { //if false, then we can't connect to captcha server, bypass captcha checking if ($recaptcha_response->is_valid === false) { $error_elements['element_captcha'] = $recaptcha_response->error; $process_result['error_elements'] = $error_elements; } else { //captcha succesfully validated //set a session variable, so that the user won't need to fill it again, if this is a multi-page form $_SESSION['captcha_passed'][$form_id] = true; } } } else { //user not entered the words at all $error_elements['element_captcha'] = 'el-required'; $process_result['error_elements'] = $error_elements; } } } } } } //if the 'previous' button being clicked, we need to discard any validation errors if (!empty($input['submit_secondary']) || !empty($input['submit_secondary_x'])) { $process_result['error_elements'] = ''; $process_result['custom_error'] = ''; $error_elements = array(); } //insert ip address and date created $table_data['ip_address'] = $user_ip_address; $table_data['date_created'] = date("Y-m-d H:i:s"); $is_inserted = false; //start insert data into table ---------------------- //dynamically create the field list and field values, based on the input given if (!empty($table_data) && empty($error_elements) && empty($process_result['custom_error'])) { $has_value = false; $field_list = ''; $field_values = ''; foreach ($table_data as $key => $value) { if ($value == '') { //don't insert blank entry continue; } $field_list .= "`{$key}`,"; $field_values .= ":{$key},"; $params_table_data[':' . $key] = $value; if (!empty($value)) { $has_value = true; } } //add session_id to query if 'form review' enabled or this is multipage forms if (!empty($form_review) || $form_page_total > 1) { //save previously uploaded file list, so users don't need to reupload files //get all file uploads elements first $session_id = session_id(); $file_uploads_array = array(); $query = "SELECT \r\n\t\t\t\t\t\t\t\t\telement_id \r\n\t\t\t\t\t\t\t\tFROM \r\n\t\t\t\t\t\t\t\t\t" . MF_TABLE_PREFIX . "form_elements \r\n\t\t\t\t\t\t\t WHERE \r\n\t\t\t\t\t\t\t \t\tform_id=? AND \r\n\t\t\t\t\t\t\t \t\telement_type='file' AND \r\n\t\t\t\t\t\t\t \t\telement_is_private=0"; $params = array($form_id); $sth = mf_do_query($query, $params, $dbh); while ($row = mf_do_fetch_result($sth)) { $file_uploads_array[] = 'element_' . $row['element_id']; } $file_uploads_column = implode('`,`', $file_uploads_array); $file_uploads_column = '`' . $file_uploads_column . '`'; if (!empty($file_uploads_array)) { if (!empty($_SESSION['review_id'])) { //if this is single page form and has review enabled $query = "SELECT {$file_uploads_column} FROM `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where id=?"; $params = array($_SESSION['review_id']); } elseif ($form_page_total > 1) { //if this is multi page form $query = "SELECT {$file_uploads_column} FROM `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where session_id=?"; $params = array($session_id); } $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); foreach ($file_uploads_array as $element_name) { if (!empty($row[$element_name])) { $uploaded_file_lookup[$element_name] = $row[$element_name]; } } } //add session_id to query if 'form review' enabled $field_list .= "`session_id`,"; $field_values .= ":session_id,"; $params_table_data[':session_id'] = $session_id; } if ($has_value) { //if blank form submitted, dont insert anything //start insert query ---------------------------------------- $field_list = substr($field_list, 0, -1); $field_values = substr($field_values, 0, -1); if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { //if this is edit_entry page submission, update the table $update_values = ''; $params_update = array(); unset($table_data['date_created']); $table_data['date_updated'] = date("Y-m-d H:i:s"); foreach ($table_data as $key => $value) { $update_values .= "`{$key}`=:{$key},"; $params_update[':' . $key] = $value; } $params_update[':id'] = $edit_id; $update_values = substr($update_values, 0, -1); $query = "UPDATE `" . MF_TABLE_PREFIX . "form_{$form_id}` set \r\n\t\t\t\t\t\t\t\t\t\t\t\t{$update_values}\r\n\t\t\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t \t \t\t`id`=:id;"; mf_do_query($query, $params_update, $dbh); $record_insert_id = $edit_id; } else { //insert to temporary table, if form review is enabled or this is multipage form if (!empty($form_review) || $form_page_total > 1) { if ($form_page_total > 1) { //if this is the first page and the first time being submitted, do insert table //otherwise, do update table $do_review_insert = false; if ($input['page_number'] == 1) { $session_id = session_id(); $query = "SELECT count(`id`) as total_row from " . MF_TABLE_PREFIX . "form_{$form_id}_review where session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); if ($row['total_row'] == 0) { $do_review_insert = true; } } //if this is the first page, do insert if ($do_review_insert) { $query = "INSERT INTO `" . MF_TABLE_PREFIX . "form_{$form_id}_review` ({$field_list}) VALUES ({$field_values});"; mf_do_query($query, $params_table_data, $dbh); $record_insert_id = (int) $dbh->lastInsertId(); } else { //otherwise, do update //dynamically create the sql update string, based on the input given $update_values = ''; $params_update = array(); foreach ($table_data as $key => $value) { $update_values .= "`{$key}`=:{$key},"; $params_update[':' . $key] = $value; } $update_values = substr($update_values, 0, -1); $params_update[':session_id'] = $session_id; $query = "UPDATE `" . MF_TABLE_PREFIX . "form_{$form_id}_review` set \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{$update_values}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t\t\t\t \t \t\tsession_id=:session_id;"; mf_do_query($query, $params_update, $dbh); $query = "SELECT `id` from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $record_insert_id = $row['id']; //if this is the last page of the form, check if form review enabled or not //if enabled, simply get the record_insert_id and send it as review_id //otherwise, commit form review if ($input['page_number'] == $form_page_total && (!empty($input['submit_primary']) || !empty($input['submit_primary_x'])) && !$is_saving_form_resume) { if (!empty($form_review)) { //pass the current page number, so the user could go back from the preview page $process_result['origin_page_number'] = $input['page_number']; } else { $query = "SELECT `id` from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $commit_options = array(); $commit_options['send_notification'] = false; $commit_result = mf_commit_form_review($dbh, $form_id, $row['id'], $commit_options); $record_insert_id = $commit_result['record_insert_id']; $is_committed = true; $process_result['entry_id'] = $record_insert_id; $_SESSION['mf_form_completed'][$form_id] = true; } } } } else { $query = "SELECT `id` from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $record_insert_id = $row['id']; if (empty($record_insert_id)) { $query = "INSERT INTO `" . MF_TABLE_PREFIX . "form_{$form_id}_review` ({$field_list}) VALUES ({$field_values});"; mf_do_query($query, $params_table_data, $dbh); $record_insert_id = (int) $dbh->lastInsertId(); } else { $update_values = ''; $params_update = array(); foreach ($table_data as $key => $value) { $update_values .= "`{$key}`=:{$key},"; $params_update[':' . $key] = $value; } $params_update[':id'] = $record_insert_id; $update_values = substr($update_values, 0, -1); $query = "UPDATE `" . MF_TABLE_PREFIX . "form_{$form_id}_review` set \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{$update_values}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t where \r\n\t\t\t\t\t\t\t\t\t\t\t\t \t \t\t`id`=:id;"; mf_do_query($query, $params_update, $dbh); } } } else { $query = "INSERT INTO `" . MF_TABLE_PREFIX . "form_{$form_id}` ({$field_list}) VALUES ({$field_values});"; mf_do_query($query, $params_table_data, $dbh); $record_insert_id = (int) $dbh->lastInsertId(); } } //end insert query ------------------------------------------ $is_inserted = true; } } //end insert data into table ------------------------- //upload the files $write_to_permanent_file = false; $write_to_temporary_file = false; if ($is_inserted) { if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { //if this ie edit_entry page, always write to permanent file $write_to_permanent_file = true; } else { if ($form_page_total <= 1) { //if this is single page form if (empty($form_review)) { //if review disabled, upload the files into permanent filename $write_to_permanent_file = true; } else { //if this single form has review enabled $write_to_temporary_file = true; } } else { //if this is multipage form if ($input['page_number'] == $form_page_total && (!empty($input['submit_primary']) || !empty($input['submit_primary_x'])) && $is_committed) { $write_to_permanent_file = true; } else { $write_to_temporary_file = true; } } } } if ($write_to_permanent_file === true) { //START writing into permanent file ------------------------ //within one form, it is possible to use a mix of standard file upload field and the advanced/ajax uploader //we need to be able processing both at the same time //if files were uploaded using standard file upload fields if (!empty($uploaded_files)) { foreach ($uploaded_files as $element_name) { $file_token = md5(uniqid(rand(), true)); //add random token to uploaded filename, to increase security //move file and check for invalid file $destination_file = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/{$element_name}_{$file_token}-{$record_insert_id}-{$_FILES[$element_name]['name']}"; $destination_file = mf_sanitize($destination_file); if (move_uploaded_file($_FILES[$element_name]['tmp_name'], $destination_file)) { $query = "update " . MF_TABLE_PREFIX . "form_{$form_id} set {$element_name}=? where id=?"; $file_element = "{$element_name}_{$file_token}-{$record_insert_id}-{$_FILES[$element_name]['name']}"; $file_element = mf_sanitize($file_element); $params = array($file_element, $record_insert_id); mf_do_query($query, $params, $dbh); } } } //if files were uploaded using advance uploader if (!empty($uploaded_files_advance)) { if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { //if this is edit_entry, we need to get existing file records and merge the data with the new uploaded files $uploaded_element_names = array(); $uploaded_element_ids = array_keys($uploaded_files_advance); foreach ($uploaded_element_ids as $element_id) { $uploaded_element_names[] = 'element_' . $element_id; } $uploaded_element_names_joined = implode(',', $uploaded_element_names); $query = "SELECT {$uploaded_element_names_joined} from `" . MF_TABLE_PREFIX . "form_{$form_id}` where `id`=?"; $params = array($edit_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $existing_files_data = array(); $multi_upload_info = array(); foreach ($uploaded_element_names as $element_name) { $existing_files_data[$element_name] = trim($row[$element_name]); $element_name_exploded = explode('_', $element_name); $multi_upload_info[$element_name] = $element_info[$element_name_exploded[1]]['file_enable_multi_upload']; } } //loop through each list foreach ($uploaded_files_advance as $element_id => $values) { $current_listfile_name = $values['listfile_name']; $current_listfile_content = $values['listfile_content']; $file_list_array = array(); foreach ($current_listfile_content as $tmp_filename_path) { $tmp_filename_only = basename($tmp_filename_path); $filename_value = substr($tmp_filename_only, strpos($tmp_filename_only, '-') + 1); $filename_value = str_replace('|', '', str_replace('.tmp', '', $filename_value)); $new_file_token = md5(uniqid(rand(), true)); //add random token to uploaded filename, to increase security $new_filename = "element_{$element_id}_{$new_file_token}-{$record_insert_id}-{$filename_value}"; $destination_filename = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/" . $new_filename; //remove tmp name and change it into permanent name //store all the permanent name into a variable if (file_exists($tmp_filename_path)) { rename($tmp_filename_path, $destination_filename); } $file_list_array[] = $new_filename; } //delete the listfile for the current element_id unlink($current_listfile_name); //update the table with the file name list if (!empty($edit_id) && $_SESSION['mf_logged_in'] === true) { //if this is edit_entry, we need to get existing file records and merge the data with the new uploaded files //which depends on the multi upload setting for each file upload field //if multi upload enabled, we need to merge the data. otherwise, replace the old data if (!empty($multi_upload_info['element_' . $element_id])) { //if multi upload enabled, merge the data $new_files_array = $file_list_array; if (!empty($existing_files_data['element_' . $element_id])) { $old_files_array = explode('|', $existing_files_data['element_' . $element_id]); $merged_files_array = array_merge($new_files_array, $old_files_array); $merged_files_array = array_unique($merged_files_array); } else { $merged_files_array = $new_files_array; } $file_list_joined[$element_id] = implode('|', $merged_files_array); } else { //replace the old data with the new file $file_list_joined[$element_id] = implode('|', $file_list_array); } } else { $file_list_joined[$element_id] = implode('|', $file_list_array); } } //update the table with the file name list $update_values = ''; $params_update = array(); foreach ($file_list_joined as $element_id => $file_joined) { $file_joined = mf_sanitize($file_joined); $update_values .= "element_{$element_id}=:element_{$element_id},"; $params_update[':element_' . $element_id] = $file_joined; } $update_values = rtrim($update_values, ','); $params_update[':id'] = $record_insert_id; $query = "update " . MF_TABLE_PREFIX . "form_{$form_id} set {$update_values} where id=:id"; mf_do_query($query, $params_update, $dbh); } //END writing into permanent file ------------------------ } else { if ($write_to_temporary_file === true) { //START writing into temporary file ------------------------ //if files were uploaded using standard file upload fields if (!empty($uploaded_files)) { $record_review_id = session_id(); foreach ($uploaded_files as $element_name) { $file_token = md5(uniqid(rand(), true)); //add random token to uploaded filename, to increase security //move file and check for invalid file $destination_file = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/{$element_name}_{$file_token}-{$record_insert_id}-{$_FILES[$element_name]['name']}.tmp"; $destination_file = mf_sanitize($destination_file); if (move_uploaded_file($_FILES[$element_name]['tmp_name'], $destination_file)) { $query = "update " . MF_TABLE_PREFIX . "form_{$form_id}_review set {$element_name}=? where session_id=?"; $file_element = "{$element_name}_{$file_token}-{$record_insert_id}-{$_FILES[$element_name]['name']}"; $file_element = mf_sanitize($file_element); $params = array($file_element, $record_review_id); mf_do_query($query, $params, $dbh); } if (!empty($uploaded_file_lookup[$element_name])) { unset($uploaded_file_lookup[$element_name]); } } } //if files were uploaded using advance uploader if (!empty($uploaded_files_advance)) { //loop through each list foreach ($uploaded_files_advance as $element_id => $values) { $current_listfile_name = $values['listfile_name']; $current_listfile_content = $values['listfile_content']; $file_list_array = array(); foreach ($current_listfile_content as $tmp_filename_path) { $tmp_filename_only = basename($tmp_filename_path); $filename_value = substr($tmp_filename_only, strpos($tmp_filename_only, '-') + 1); $filename_value = str_replace('|', '', str_replace('.tmp', '', $filename_value)); $new_file_token = md5(uniqid(rand(), true)); //add random token to uploaded filename, to increase security $new_filename = "element_{$element_id}_{$new_file_token}-{$record_insert_id}-{$filename_value}"; $destination_filename = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/" . $new_filename . ".tmp"; //assign new temporary name, using new token and record id //store all the temporary name into a variable if (file_exists($tmp_filename_path)) { rename($tmp_filename_path, $destination_filename); } $file_list_array[] = $new_filename; } //delete the listfile for the current element_id unlink($current_listfile_name); //update the table with the file name list $file_list_joined[$element_id] = implode('|', $file_list_array); } //update the table with the file name list $update_values = ''; $params_update = array(); foreach ($file_list_joined as $element_id => $file_joined) { $file_joined = mf_sanitize($file_joined); $update_values .= "element_{$element_id}=:element_{$element_id},"; $params_update[':element_' . $element_id] = $file_joined; } $update_values = rtrim($update_values, ','); $params_update[':id'] = $record_insert_id; $query = "update " . MF_TABLE_PREFIX . "form_{$form_id}_review set {$update_values} where id=:id"; mf_do_query($query, $params_update, $dbh); } //if the user goes to review page and then go back to the form page or navigate within multipage form, $uploaded_file_lookup will contain the list of the previously submitted files //if the multi upload option enabled, make sure to update the previouly uploaded file to the current record during form submit //when updating the table, make sure to MERGE existing data within the table and the new one //otherwise, if the multi upload is not enabled, we need to delete previous files and don't update the table with the old files data if (!empty($uploaded_file_lookup)) { //get the existing data within the table $uploaded_element_names = array_keys($uploaded_file_lookup); $uploaded_element_names_joined = implode(',', $uploaded_element_names); $query = "SELECT {$uploaded_element_names_joined} from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where `id`=?"; $params = array($record_insert_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $existing_files_data = array(); $multi_upload_info = array(); foreach ($uploaded_element_names as $element_name) { $existing_files_data[$element_name] = $row[$element_name]; $element_name_exploded = explode('_', $element_name); $multi_upload_info[$element_name] = $element_info[$element_name_exploded[1]]['file_enable_multi_upload']; } //merge the data foreach ($uploaded_file_lookup as $element_name => $filename) { $new_files_array = array(); $old_files_array = array(); $new_files_array = explode('|', $filename); $old_files_array = explode('|', $existing_files_data[$element_name]); if (!empty($multi_upload_info[$element_name])) { //if multi upload enabled, merge the data $merged_files_array = array_merge($new_files_array, $old_files_array); $merged_files_array = array_unique($merged_files_array); } else { //otherwise, just use the new one $merged_files_array = $old_files_array; //delete the old files as well, if the files aren't the same with the new one if ($filename != $existing_files_data[$element_name]) { foreach ($new_files_array as $filename) { $filename = $input['machform_data_path'] . $mf_settings['upload_dir'] . "/form_{$form_id}/files/{$filename}.tmp"; if (file_exists($filename)) { unlink($filename); } } } } $merged_files_joined = implode('|', $merged_files_array); $merged_files_data[$element_name] = $merged_files_joined; } $update_clause = ''; foreach ($merged_files_data as $element_name => $filename) { $filename = addslashes(mf_sanitize($filename)); $update_clause .= "`{$element_name}`='{$filename}',"; } $update_clause = rtrim($update_clause, ","); $query = "UPDATE `" . MF_TABLE_PREFIX . "form_{$form_id}_review` SET {$update_clause} WHERE id=?"; $params = array($record_insert_id); mf_do_query($query, $params, $dbh); } //END writing into temporary file ------------------------ } } //process any rules to skip pages, if this functionality is being enabled $process_result['logic_page_enable'] = false; if ($is_inserted === true && $is_edit_page === false && $is_saving_form_resume === false && !empty($logic_page_enable)) { //if the back button being clicked, don't evaluate the logic conditions //simply get the previous page from the array if (!empty($input['submit_secondary']) || !empty($input['submit_secondary_x'])) { $pages_history = array(); $pages_history = $_SESSION['mf_pages_history'][$form_id]; $page_number_array_index = array_search($page_number, $pages_history); $previous_page_number = $pages_history[$page_number_array_index - 1]; $process_result['logic_page_enable'] = true; $process_result['target_page_id'] = $previous_page_number; } else { //submit/continue button being clicked //get all the destination pages from ap_page_logic //only get pages with larger page number. the skip page logic can't move backward $query = "SELECT \r\n\t\t\t\t\t\t\t\tpage_id,\r\n\t\t\t\t\t\t\t\trule_all_any \r\n\t\t\t\t\t\t\tFROM \r\n\t\t\t\t\t\t\t\t" . MF_TABLE_PREFIX . "page_logic \r\n\t\t\t\t\t\t WHERE \r\n\t\t\t\t\t\t\t\tform_id = ? and (page_id > ? or page_id in('payment','review','success')) \r\n\t\t\t\t\t\tORDER BY \r\n\t\t\t\t\t\t\t\tpage_id asc"; $params = array($form_id, $page_number); $sth = mf_do_query($query, $params, $dbh); $page_logic_array = array(); $i = 0; while ($row = mf_do_fetch_result($sth)) { $page_logic_array[$i]['page_id'] = $row['page_id']; $page_logic_array[$i]['rule_all_any'] = $row['rule_all_any']; $i++; } //evaluate the condition for each destination page //once a condition results true, break the loop and send the result if (!empty($page_logic_array)) { foreach ($page_logic_array as $value) { $target_page_id = $value['page_id']; $rule_all_any = $value['rule_all_any']; $current_page_conditions_status = array(); $query = "SELECT \r\n\t\t\t\t\t\t\t\t\t\telement_name,\r\n\t\t\t\t\t\t\t\t\t\trule_condition,\r\n\t\t\t\t\t\t\t\t\t\trule_keyword \r\n\t\t\t\t\t\t\t\t\tFROM \r\n\t\t\t\t\t\t\t\t\t\t" . MF_TABLE_PREFIX . "page_logic_conditions \r\n\t\t\t\t\t\t\t\t WHERE \r\n\t\t\t\t\t\t\t\t \t\tform_id = ? AND target_page_id = ?"; $params = array($form_id, $target_page_id); $sth = mf_do_query($query, $params, $dbh); while ($row = mf_do_fetch_result($sth)) { $condition_params = array(); $condition_params['form_id'] = $form_id; $condition_params['element_name'] = $row['element_name']; $condition_params['rule_condition'] = $row['rule_condition']; $condition_params['rule_keyword'] = $row['rule_keyword']; $current_page_conditions_status[] = mf_get_condition_status_from_table($dbh, $condition_params); } if ($rule_all_any == 'all') { if (in_array(false, $current_page_conditions_status)) { $all_conditions_status = false; } else { $all_conditions_status = true; } } else { if ($rule_all_any == 'any') { if (in_array(true, $current_page_conditions_status)) { $all_conditions_status = true; } else { $all_conditions_status = false; } } } if ($all_conditions_status === true) { //all conditions for this target page has been met, break the loop and send it to $process_result $process_result['logic_page_enable'] = true; $process_result['target_page_id'] = $target_page_id; //allow access to the next destination page if (is_numeric($target_page_id)) { $_SESSION['mf_form_access'][$form_id][$target_page_id] = true; } else { if ($target_page_id == 'review') { $process_result['review_id'] = $record_insert_id; $process_result['origin_page_number'] = $input['page_number']; } else { if ($target_page_id == 'payment' || $target_page_id == 'success') { //if the destination is payment page or success page, we need to commit the data first $commit_options = array(); if ($delay_notifications) { $commit_options['send_notification'] = false; } $session_id = session_id(); $query = "SELECT `id` from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` where session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $commit_result = mf_commit_form_review($dbh, $form_id, $row['id'], $commit_options); $process_result['entry_id'] = $commit_result['record_insert_id']; if ($target_page_id == 'success') { $_SESSION['mf_form_completed'][$form_id] = true; $bypass_merchant_redirect_url = true; } } } } break; } } //end foreach page_logic_array } } } //start sending notification email to admin ------------------------------------------ if ($is_inserted && !empty($esl_enable) && !empty($form_email) && empty($form_review) && $form_page_total == 1 && empty($edit_id) && $delay_notifications === false || $is_inserted && !empty($esl_enable) && !empty($form_email) && $is_committed && empty($edit_id) && $delay_notifications === false) { //get parameters for the email //from name if (!empty($esl_from_name)) { if (is_numeric($esl_from_name)) { $admin_email_param['from_name'] = '{element_' . $esl_from_name . '}'; } else { $admin_email_param['from_name'] = $esl_from_name; } } else { $admin_email_param['from_name'] = 'MachForm'; } //from email address if (!empty($esl_from_email_address)) { if (is_numeric($esl_from_email_address)) { $admin_email_param['from_email'] = '{element_' . $esl_from_email_address . '}'; } else { $admin_email_param['from_email'] = $esl_from_email_address; } } else { $domain = str_replace('www.', '', $_SERVER['SERVER_NAME']); $admin_email_param['from_email'] = "no-reply@{$domain}"; } //subject if (!empty($esl_subject)) { $admin_email_param['subject'] = $esl_subject; } else { $admin_email_param['subject'] = '{form_name} [#{entry_no}]'; } //content if (!empty($esl_content)) { $admin_email_param['content'] = $esl_content; } else { $admin_email_param['content'] = '{entry_data}'; } $admin_email_param['as_plain_text'] = $esl_plain_text; $admin_email_param['target_is_admin'] = true; $admin_email_param['machform_base_path'] = $input['machform_base_path']; $admin_email_param['check_hook_file'] = true; mf_send_notification($dbh, $form_id, $record_insert_id, $form_email, $admin_email_param); } //end emailing notifications to admin ---------------------------------------------- //start sending notification email to user ------------------------------------------ if ($is_inserted && !empty($esr_enable) && !empty($esr_email_address) && empty($form_review) && $form_page_total == 1 && empty($edit_id) && $delay_notifications === false || $is_inserted && !empty($esr_enable) && !empty($esr_email_address) && $is_committed && empty($edit_id) && $delay_notifications === false) { //get parameters for the email //to email if (is_numeric($esr_email_address)) { $esr_email_address = '{element_' . $esr_email_address . '}'; } //from name if (!empty($esr_from_name)) { if (is_numeric($esr_from_name)) { $user_email_param['from_name'] = '{element_' . $esr_from_name . '}'; } else { $user_email_param['from_name'] = $esr_from_name; } } else { $user_email_param['from_name'] = 'MachForm'; } //from email address if (!empty($esr_from_email_address)) { if (is_numeric($esr_from_email_address)) { $user_email_param['from_email'] = '{element_' . $esr_from_email_address . '}'; } else { $user_email_param['from_email'] = $esr_from_email_address; } } else { $domain = str_replace('www.', '', $_SERVER['SERVER_NAME']); $user_email_param['from_email'] = "no-reply@{$domain}"; } //subject if (!empty($esr_subject)) { $user_email_param['subject'] = $esr_subject; } else { $user_email_param['subject'] = '{form_name} - Receipt'; } //content if (!empty($esr_content)) { $user_email_param['content'] = $esr_content; } else { $user_email_param['content'] = '{entry_data}'; } $user_email_param['as_plain_text'] = $esr_plain_text; $user_email_param['target_is_admin'] = false; $user_email_param['machform_base_path'] = $input['machform_base_path']; mf_send_notification($dbh, $form_id, $record_insert_id, $esr_email_address, $user_email_param); } //end emailing notifications to user --------------------------------------------- //if there is no error message or elements, send true as status if (empty($error_elements) && empty($process_result['custom_error'])) { $process_result['status'] = true; if ($form_page_total > 1) { //if this is multipage form $_SESSION['mf_form_loaded'][$form_id][$page_number] = true; if ($is_saving_form_resume) { //if the user is saving his progress instead of submitting the form //copy the record from review table into main form table and set the status to incomplete (status=2) //also generate resume url $has_invalid_resume_email = false; //validate the email address first, if the user entered invalid email address, display error message if (!empty($input['element_resume_email'])) { $regex = '/^[A-z0-9][\\w.-]*@[A-z0-9][\\w\\-\\.]+\\.[A-z0-9]{2,6}$/'; $resume_email = trim($input['element_resume_email']); $preg_result = preg_match($regex, $resume_email); if (empty($preg_result)) { $has_invalid_resume_email = true; $error_elements['element_resume_email'] = $mf_lang['val_email']; $process_result['status'] = false; $process_result['error_elements'] = $error_elements; $process_result['old_values']['element_resume_email'] = $input['element_resume_email']; } } if (!$has_invalid_resume_email) { //get all column name except session_id and id $query = "SELECT * FROM `" . MF_TABLE_PREFIX . "form_{$form_id}_review` WHERE session_id=?"; $params = array($session_id); $sth = mf_do_query($query, $params, $dbh); $row = mf_do_fetch_result($sth); $columns = array(); foreach ($row as $column_name => $column_data) { if ($column_name != 'id' && $column_name != 'session_id') { $columns[] = $column_name; } } $columns_joined = implode("`,`", $columns); $columns_joined = '`' . $columns_joined . '`'; //if there is no resume key, generate new one if (empty($row['resume_key'])) { $form_resume_key = substr(strtolower(md5(uniqid(rand(), true))), 0, 10); } else { $form_resume_key = $row['resume_key']; } //delete previous entry on ap_form_x table $query = "DELETE from `" . MF_TABLE_PREFIX . "form_{$form_id}` WHERE resume_key=? and status=2"; $params = array($form_resume_key); mf_do_query($query, $params, $dbh); //copy from ap_form_x_review to ap_form_x $query = "INSERT INTO `" . MF_TABLE_PREFIX . "form_{$form_id}`({$columns_joined}) SELECT {$columns_joined} from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` WHERE session_id=?"; $params = array($session_id); mf_do_query($query, $params, $dbh); $new_record_id = (int) $dbh->lastInsertId(); $query = "UPDATE `" . MF_TABLE_PREFIX . "form_{$form_id}` set `status`=2,resume_key='{$form_resume_key}' where `id`=?"; $params = array($new_record_id); mf_do_query($query, $params, $dbh); //delete from ap_form_x_review table $query = "DELETE from `" . MF_TABLE_PREFIX . "form_{$form_id}_review` WHERE session_id=?"; $params = array($session_id); mf_do_query($query, $params, $dbh); //pass form resume key $process_result['form_resume_key'] = $form_resume_key; //pass form resume url $form_resume_url = $mf_settings['base_url'] . "view.php?id={$form_id}&mf_resume={$form_resume_key}"; $process_result['form_resume_url'] = $form_resume_url; if (!empty($resume_email)) { //send the resume link to the provided email mf_send_resume_link($dbh, $form_name, $form_resume_url, $resume_email); } } } else { //get the next page number and send it //don't send page number if this is already the last page, unless back button being clicked if ($input['page_number'] < $form_page_total) { if (!empty($input['submit_primary']) || !empty($input['submit_primary_x'])) { $process_result['next_page_number'] = $page_number + 1; } elseif (!empty($input['submit_secondary']) || !empty($input['submit_secondary_x'])) { $process_result['next_page_number'] = $page_number - 1; } else { $process_result['next_page_number'] = $page_number + 1; } } else { //if this is the last page if (!empty($input['submit_primary']) || !empty($input['submit_primary_x'])) { if (!empty($form_review)) { $process_result['review_id'] = $record_insert_id; } } elseif (!empty($input['submit_secondary']) || !empty($input['submit_secondary_x'])) { $process_result['next_page_number'] = $page_number - 1; } else { if (!empty($form_review)) { $process_result['review_id'] = $record_insert_id; } } } } } else { //if this is single page form //if 'form review' enabled, send review_id if (!empty($form_review)) { $process_result['review_id'] = $record_insert_id; } else { //form submitted successfully, set the session to display success page $_SESSION['mf_form_completed'][$form_id] = true; $process_result['entry_id'] = $record_insert_id; } } } else { $process_result['status'] = false; } //get payment processor URL, if applicable for this form if ($process_result['status'] === true) { $merchant_redirect_url = mf_get_merchant_redirect_url($dbh, $form_id, $record_insert_id); if (!empty($merchant_redirect_url) && $bypass_merchant_redirect_url !== true) { $process_result['form_redirect'] = $merchant_redirect_url; } } return $process_result; }
<?php /******************************************************************************** MachForm Copyright 2007-2012 Appnitro Software. This code cannot be redistributed without permission from http://www.appnitro.com/ More info at: http://www.appnitro.com/ ********************************************************************************/ header("p3p: CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""); session_start(); require 'lib/php-captcha/php-captcha.inc.php'; $fonts = array('lib/php-captcha/VeraSeBd.ttf', 'lib/php-captcha/VeraBd.ttf'); $captcha = new PhpCaptcha($fonts, 200, 60); $captcha->Create();
public function __construct($aFonts, $iWidth = CAPTCHA_WIDTH, $iHeight = CAPTCHA_HEIGHT) { parent::__construct('', $aFonts, $iWidth, $iHeight); $this->PhpCaptchaColour($aFonts, $iWidth, $iHeight); }