public static function validate($params, $fields, $form, $title, $description) { global $frm_vars; $frm_settings = FrmAppHelper::get_settings(); if (($_POST && isset($_POST['frm_page_order_' . $form->id]) || FrmProFormsHelper::going_to_prev($form->id)) && !FrmProFormsHelper::saving_draft()) { $errors = ''; $fields = FrmFieldsHelper::get_form_fields($form->id); $submit = isset($form->options['submit_value']) ? $form->options['submit_value'] : $frm_settings->submit_value; $values = $fields ? FrmEntriesHelper::setup_new_vars($fields, $form) : array(); require FrmAppHelper::plugin_path() . '/classes/views/frm-entries/new.php'; add_filter('frm_continue_to_create', '__return_false'); } else { if ($form->editable && isset($form->options['single_entry']) && $form->options['single_entry'] && $form->options['single_entry_type'] == 'user') { $user_ID = get_current_user_id(); if ($user_ID) { $entry = FrmEntry::getAll(array('it.user_id' => $user_ID, 'it.form_id' => $form->id), '', 1, true); if ($entry) { $entry = reset($entry); } } else { $entry = false; } if ($entry && !empty($entry) && (!isset($frm_vars['created_entries'][$form->id]) || !isset($frm_vars['created_entries'][$form->id]['entry_id']) || $entry->id != $frm_vars['created_entries'][$form->id]['entry_id'])) { FrmProEntriesController::show_responses($entry, $fields, $form, $title, $description); } else { $record = $frm_vars['created_entries'][$form->id]['entry_id']; $saved_message = isset($form->options['success_msg']) ? $form->options['success_msg'] : $frm_settings->success_msg; if (FrmProFormsHelper::saving_draft()) { $saved_message = isset($form->options['draft_msg']) ? $form->options['draft_msg'] : __('Your draft has been saved.', 'formidable'); } $saved_message = apply_filters('frm_content', $saved_message, $form, $record ? $record : false); $message = wpautop(do_shortcode($record ? $saved_message : $frm_settings->failed_msg)); $message = '<div class="frm_message" id="message">' . $message . '</div>'; FrmProEntriesController::show_responses($record, $fields, $form, $title, $description, $message); } add_filter('frm_continue_to_create', '__return_false'); } else { if (FrmProFormsHelper::saving_draft()) { $record = isset($frm_vars['created_entries']) && isset($frm_vars['created_entries'][$form->id]) ? $frm_vars['created_entries'][$form->id]['entry_id'] : 0; if (!$record) { return; } $saved_message = ''; FrmProFormsHelper::save_draft_msg($saved_message, $form, $record); $message = FrmFormsHelper::get_success_message(array('message' => $saved_message, 'form' => $form, 'entry_id' => $record, 'class' => 'frm_message')); FrmProEntriesController::show_responses($record, $fields, $form, $title, $description, $message); add_filter('frm_continue_to_create', '__return_false'); } } } }
function validate($params, $fields, $form, $title, $description) { global $frm_entry, $frm_settings, $frm_vars; if (($_POST and isset($_POST['frm_page_order_' . $form->id]) or FrmProFormsHelper::going_to_prev($form->id)) and !FrmProFormsHelper::saving_draft($form->id)) { $errors = ''; $fields = FrmFieldsHelper::get_form_fields($form->id); $form_name = $form->name; $submit = isset($form->options['submit_value']) ? $form->options['submit_value'] : $frm_settings->submit_value; $values = $fields ? FrmEntriesHelper::setup_new_vars($fields, $form) : array(); require FrmAppHelper::plugin_path() . '/classes/views/frm-entries/new.php'; add_filter('frm_continue_to_create', '__return_false'); } else { if ($form->editable and isset($form->options['single_entry']) and $form->options['single_entry'] and $form->options['single_entry_type'] == 'user') { $user_ID = get_current_user_id(); if ($user_ID) { $entry = $frm_entry->getAll(array('it.user_id' => $user_ID, 'it.form_id' => $form->id), '', 1, true); if ($entry) { $entry = reset($entry); } } else { $entry = false; } if ($entry and !empty($entry) and (!isset($frm_vars['created_entries'][$form->id]) or !isset($frm_vars['created_entries'][$form->id]['entry_id']) or $entry->id != $frm_vars['created_entries'][$form->id]['entry_id'])) { FrmProEntriesController::show_responses($entry, $fields, $form, $title, $description); } else { $record = $frm_vars['created_entries'][$form->id]['entry_id']; $saved_message = isset($form->options['success_msg']) ? $form->options['success_msg'] : $frm_settings->success_msg; if (FrmProFormsHelper::saving_draft($form->id)) { global $frmpro_settings; $saved_message = isset($form->options['draft_msg']) ? $form->options['draft_msg'] : $frmpro_settings->draft_msg; } $saved_message = apply_filters('frm_content', $saved_message, $form, $record ? $record : false); $message = wpautop(do_shortcode($record ? $saved_message : $frm_settings->failed_msg)); $message = '<div class="frm_message" id="message">' . $message . '</div>'; FrmProEntriesController::show_responses($record, $fields, $form, $title, $description, $message, '', $form->options); } add_filter('frm_continue_to_create', '__return_false'); } else { if (FrmProFormsHelper::saving_draft($form->id)) { global $frmpro_settings; $record = (isset($frm_vars['created_entries']) and isset($frm_vars['created_entries'][$form->id])) ? $frm_vars['created_entries'][$form->id]['entry_id'] : 0; if ($record) { $saved_message = isset($form->options['draft_msg']) ? $form->options['draft_msg'] : $frmpro_settings->draft_msg; $saved_message = apply_filters('frm_content', $saved_message, $form, $record); $message = '<div class="frm_message" id="message">' . wpautop(do_shortcode($saved_message)) . '</div>'; FrmProEntriesController::show_responses($record, $fields, $form, $title, $description, $message, '', $form->options); add_filter('frm_continue_to_create', '__return_false'); } } } } }
/** * @param array $atts - includes form_id, error, fields */ public static function get_base_page_info($atts) { $page_numbers = array('page_breaks' => array(), 'go_back' => false, 'next_page' => false, 'set_prev' => 0, 'set_next' => false, 'get_last' => false, 'prev_page_obj' => false, 'prev_page' => FrmAppHelper::get_param('frm_page_order_' . $atts['form_id'], false, 'get', 'absint')); if (FrmProFormsHelper::going_to_prev($atts['form_id'])) { $page_numbers['go_back'] = true; $page_numbers['next_page'] = FrmAppHelper::get_param('frm_next_page'); $page_numbers['prev_page'] = $page_numbers['set_prev'] = $page_numbers['next_page'] - 1; } else { if (FrmProFormsHelper::saving_draft() && !$atts['error']) { $page_numbers['next_page'] = FrmAppHelper::get_param('frm_page_order_' . $atts['form_id'], false); // If next_page is zero, assume user clicked "Save Draft" on last page of form if ($page_numbers['next_page'] == 0) { $page_numbers['next_page'] = count($atts['fields']); } $page_numbers['prev_page'] = $page_numbers['set_prev'] = $page_numbers['next_page'] - 1; } } if ($atts['error']) { $page_numbers['set_prev'] = $page_numbers['prev_page']; if ($page_numbers['prev_page']) { $page_numbers['prev_page'] = $page_numbers['prev_page'] - 1; } else { $page_numbers['prev_page'] = 999; $page_numbers['get_last'] = true; } } return $page_numbers; }
function validate($errors, $field) { if ($field->type == 'user_id') { // make sure we have a user ID if (!is_numeric($_POST['item_meta'][$field->id])) { $_POST['item_meta'][$field->id] = FrmProAppHelper::get_user_id_param($_POST['item_meta'][$field->id]); } //add user id to post variables to be saved with entry $_POST['frm_user_id'] = $_POST['item_meta'][$field->id]; } else { if ($field->type == 'time' and is_array($_POST['item_meta'][$field->id])) { $_POST['item_meta'][$field->id] = $value = $_POST['item_meta'][$field->id]['H'] . ':' . $_POST['item_meta'][$field->id]['m'] . (isset($_POST['item_meta'][$field->id]['A']) ? ' ' . $_POST['item_meta'][$field->id]['A'] : ''); } } // don't validate if going backwards if (FrmProFormsHelper::going_to_prev($field->form_id)) { return array(); } // clear any existing errors if draft if (FrmProFormsHelper::saving_draft($field->form_id) && isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } //if the field is a file upload, check for a file if ($field->type == 'file' && isset($_FILES['file' . $field->id]) && !empty($_FILES['file' . $field->id]['name'])) { $filled = true; if (is_array($_FILES['file' . $field->id]['name'])) { $filled = false; foreach ($_FILES['file' . $field->id]['name'] as $n) { if (!empty($n)) { $filled = true; } } } if ($filled) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } if (isset($field->field_options['restrict']) && $field->field_options['restrict'] && isset($field->field_options['ftypes']) && !empty($field->field_options['ftypes'])) { $mimes = $field->field_options['ftypes']; } else { $mimes = null; } //check allowed mime types for this field if (is_array($_FILES['file' . $field->id]['name'])) { foreach ($_FILES['file' . $field->id]['name'] as $name) { if (empty($name)) { continue; } $file_type = wp_check_filetype($name, $mimes); unset($name); if (!$file_type['ext']) { break; } } } else { $file_type = wp_check_filetype($_FILES['file' . $field->id]['name'], $mimes); } if (isset($file_type) && !$file_type['ext']) { $errors['field' . $field->id] = $field->field_options['invalid'] == __('This field is invalid', 'formidable') || $field->field_options['invalid'] == '' || $field->field_options['invalid'] == $field->name . ' ' . __('is invalid', 'formidable') ? __('Sorry, this file type is not permitted for security reasons.', 'formidable') : $field->field_options['invalid']; } unset($file_type); } unset($filled); } // if saving draft, only check file type since it won't be checked later if (FrmProFormsHelper::saving_draft($field->form_id)) { return $errors; } if (in_array($field->type, array('break', 'html', 'divider'))) { $hidden = FrmProFieldsHelper::is_field_hidden($field, stripslashes_deep($_POST)); global $frm_hidden_break, $frm_hidden_divider; if ($field->type == 'break') { $frm_hidden_break = array('field_order' => $field->field_order, 'hidden' => $hidden); } else { if ($field->type == 'divider') { $frm_hidden_divider = array('field_order' => $field->field_order, 'hidden' => $hidden); } } if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } } $value = $_POST['item_meta'][$field->id]; if (($field->type != 'tag' and $value == 0 or $field->type == 'tag' and $value == '') and isset($field->field_options['post_field']) and $field->field_options['post_field'] == 'post_category' and $field->required == '1') { global $frm_settings; $errors['field' . $field->id] = (!isset($field->field_options['blank']) or $field->field_options['blank'] == '' or $field->field_options['blank'] == 'Untitled cannot be blank') ? $frm_settings->blank_msg : $field->field_options['blank']; } //Don't require fields hidden with shortcode fields="25,26,27" global $frm_vars; if (isset($frm_vars['show_fields']) and !empty($frm_vars['show_fields']) and is_array($frm_vars['show_fields']) and $field->required == '1' and isset($errors['field' . $field->id]) and !in_array($field->id, $frm_vars['show_fields']) and !in_array($field->field_key, $frm_vars['show_fields'])) { unset($errors['field' . $field->id]); $_POST['item_meta'][$field->id] = $value = ''; } //Don't require a conditionally hidden field if (isset($field->field_options['hide_field']) and !empty($field->field_options['hide_field'])) { if (FrmProFieldsHelper::is_field_hidden($field, stripslashes_deep($_POST))) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } $_POST['item_meta'][$field->id] = $value = ''; } } //Don't require a field hidden in a conditional page or section heading if (isset($errors['field' . $field->id]) or $_POST['item_meta'][$field->id] != '') { global $frm_hidden_break, $frm_hidden_divider; if ($frm_hidden_break and $frm_hidden_break['hidden'] or $frm_hidden_divider and $frm_hidden_divider['hidden'] and (!$frm_hidden_break or $frm_hidden_break['field_order'] < $frm_hidden_divider['field_order'])) { if (isset($errors['field' . $field->id])) { unset($errors['field' . $field->id]); } $_POST['item_meta'][$field->id] = $value = ''; } } //make sure the [auto_id] is still unique if (!empty($field->default_value) and !is_array($field->default_value) and !empty($value) and is_numeric($value) and strpos($field->default_value, '[auto_id') !== false) { //make sure we are not editing if (isset($_POST) and !isset($_POST['id']) or !is_numeric($_POST['id'])) { $_POST['item_meta'][$field->id] = $value = FrmProFieldsHelper::get_default_value($field->default_value, $field); } } //check uniqueness if ($value and !empty($value) and isset($field->field_options['unique']) and $field->field_options['unique']) { $entry_id = (isset($_POST) and isset($_POST['id'])) ? $_POST['id'] : false; if ($field->type == 'time') { //TODO: add server-side validation for unique date-time } else { if ($field->type == 'date') { global $frmpro_settings; $old_value = $value; if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', trim($value))) { $value = FrmProAppHelper::convert_date($value, $frmpro_settings->date_format, 'Y-m-d'); } if (FrmProEntryMetaHelper::value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'unique_msg'); } $value = $old_value; } else { if (FrmProEntryMetaHelper::value_exists($field->id, $value, $entry_id)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'unique_msg'); } } } unset($entry_id); } // validate number settings if ('number' == $field->type && $value != '') { global $frm_settings; // only check if options are available in settings if ($frm_settings->use_html && isset($field->field_options['minnum']) && isset($field->field_options['maxnum'])) { //minnum maxnum if ((double) $value < $field->field_options['minnum']) { $errors['field' . $field->id] = __('Please select a higher number', 'formidable'); } else { if ((double) $value > $field->field_options['maxnum']) { $errors['field' . $field->id] = __('Please select a lower number', 'formidable'); } } } } if (!empty($value) and ($field->type == 'website' or $field->type == 'url' or $field->type == 'image')) { if (trim($value) == 'http://') { $_POST['item_meta'][$field->id] = $value = ''; } else { $value = esc_url_raw($value); $_POST['item_meta'][$field->id] = $value = preg_match('/^(https?|ftps?|mailto|news|feed|telnet):/is', $value) ? $value : 'http://' . $value; } } $errors = FrmProEntryMetaHelper::set_post_fields($field, $value, $errors); if (!FrmProFieldsHelper::is_field_visible_to_user($field)) { //don't validate admin only fields that can't be seen unset($errors['field' . $field->id]); return $errors; } if (false and isset($field->field_options['use_calc']) and !empty($field->field_options['use_calc']) and !empty($field->field_options['calc'])) { $field->field_options['calc'] = trim($field->field_options['calc']); preg_match_all("/\\[(.*?)\\]/s", $field->field_options['calc'], $calc_matches, PREG_PATTERN_ORDER); if (isset($calc_matches[1])) { foreach ($calc_matches[1] as $c) { if (is_numeric($c)) { $c_id = $c; } else { global $frm_field; $c_field = $frm_field->getOne($c); if (!$c_field) { $field->field_options['calc'] = str_replace('[' . $c . ']', 0, $field->field_options['calc']); continue; } $c_id = $c_field->id; unset($c_field); } $c_val = trim($_POST['item_meta'][$c_id]); if (!is_numeric($c_val)) { preg_match_all('/[0-9,]*\\.?[0-9]+/', $c_val, $c_matches); $c_val = $c_matches ? end($c_matches[0]) : 0; unset($c_matches); } if ($c_val == '') { $c_val = 0; } $field->field_options['calc'] = str_replace('[' . $c . ']', $c_val, $field->field_options['calc']); unset($c); unset($c_id); } include FrmAppHelper::plugin_path() . '/pro/classes/helpers/FrmProMathHelper.php'; $m = new EvalMath(); if (strpos($field->field_options['calc'], ').toFixed(')) { $field->field_options['calc'] = str_replace(').toFixed(2', '', $field->field_options['calc']); $round = 2; } $result = $m->evaluate(str_replace('Math.', '', '(' . $field->field_options['calc'] . ')')); if (isset($round) and $round) { $result = sprintf('%.' . $round . 'f', $result); } unset($m); $_POST['item_meta'][$field->id] = $value = $result; unset($result); } unset($calc_matches); } //Don't validate the format if field is blank if ($value == '' or is_array($value)) { return $errors; } $value = trim($value); //validate the format if ($field->type == 'number' and !is_numeric($value) or $field->type == 'email' and !is_email($value) or ($field->type == 'website' or $field->type == 'url' or $field->type == 'image') and !preg_match('/^http(s)?:\\/\\/([\\da-z\\.-]+)\\.([\\da-z\\.-]+)/i', $value)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } if ($field->type == 'phone') { $pattern = (isset($field->field_options['format']) and !empty($field->field_options['format'])) ? $field->field_options['format'] : '^((\\+\\d{1,3}(-|.| )?\\(?\\d\\)?(-| |.)?\\d{1,5})|(\\(?\\d{2,6}\\)?))(-|.| )?(\\d{3,4})(-|.| )?(\\d{4})(( x| ext)\\d{1,5}){0,1}$'; $pattern = apply_filters('frm_phone_pattern', $pattern, $field); //check if format is already a regular expression if (strpos($pattern, '^') !== 0) { //if not, create a regular expression $pattern = preg_replace('/\\d/', '\\d', preg_quote($pattern)); $pattern = '/^' . $pattern . '$/'; } else { $pattern = '/' . $pattern . '/'; } if (!preg_match($pattern, $value)) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } unset($pattern); } if ($field->type == 'date') { if (!preg_match('/^\\d{4}-\\d{2}-\\d{2}$/', $value)) { global $frmpro_settings; $formated_date = FrmProAppHelper::convert_date($value, $frmpro_settings->date_format, 'Y-m-d'); //check format before converting if ($value != date($frmpro_settings->date_format, strtotime($formated_date))) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } $value = $formated_date; unset($formated_date); } $date = explode('-', $value); if (count($date) != 3 or !checkdate((int) $date[1], (int) $date[2], (int) $date[0])) { $errors['field' . $field->id] = FrmProFieldsHelper::get_error_msg($field, 'invalid'); } } return $errors; }
public static function ajax_create() { if (!FrmAppHelper::doing_ajax() || !isset($_POST['form_id'])) { // normally, this function would be triggered with the wp_ajax hook, but we need it fired sooner return; } $allowed_actions = array('frm_entries_create', 'frm_entries_update'); if (!in_array(FrmAppHelper::get_post_param('action', '', 'sanitize_title'), $allowed_actions)) { // allow ajax creating and updating return; } $form = FrmForm::getOne((int) $_POST['form_id']); if (!$form) { echo false; wp_die(); } $no_ajax_fields = array('file'); $errors = FrmEntryValidate::validate($_POST, $no_ajax_fields); if (empty($errors)) { if (FrmProForm::is_ajax_on($form)) { global $frm_vars; $frm_vars['ajax'] = true; $frm_vars['css_loaded'] = true; // don't load scripts if we are going backwards in the form $going_backwards = FrmProFormsHelper::going_to_prev($form->id); // save the entry if there is not another page or when saving a draft if (!isset($_POST['frm_page_order_' . $form->id]) && !$going_backwards || FrmProFormsHelper::saving_draft()) { $processed = true; FrmEntriesController::process_entry($errors, true); } echo FrmFormsController::show_form($form->id); // trigger the footer scripts if there is a form to show if ($errors || !isset($processed) || !empty($frm_vars['forms_loaded'])) { self::print_ajax_scripts($going_backwards ? 'none' : ''); } } else { echo false; } } else { $obj = array(); foreach ($errors as $field => $error) { $field_id = str_replace('field', '', $field); $obj[$field_id] = $error; } echo json_encode($obj); } wp_die(); }
public static function get_form_fields($fields, $form_id, $error = false) { global $frm_field, $frm_vars, $frm_page_num; $prev_page = (int) FrmAppHelper::get_param('frm_page_order_' . $form_id, false); $go_back = $next_page = false; if (FrmProFormsHelper::going_to_prev($form_id)) { $go_back = true; $next_page = FrmAppHelper::get_param('frm_next_page'); $prev_page = $set_prev = $next_page - 1; } else { if (FrmProFormsHelper::saving_draft($form_id) and !$error) { $next_page = FrmAppHelper::get_param('frm_page_order_' . $form_id, false); $prev_page = $set_prev = $next_page - 1; } } //$current_form_id = FrmAppHelper::get_param('form_id', false); //if (is_numeric($current_form_id) and $current_form_id != $form_id) // return $fields; $get_last = false; if ($error) { $set_prev = $prev_page; if ($prev_page) { $prev_page = $prev_page - 1; } else { $prev_page = 999; $get_last = true; } } $frm_form = new FrmForm(); $form = $frm_form->getOne($form_id); $ajax = (isset($form->options['ajax_submit']) and $form->options['ajax_submit']) ? true : false; unset($form); $ajax_now = (!defined('DOING_AJAX') or isset($frm_vars['preview']) and $frm_vars['preview']); $page_breaks = array(); foreach ((array) $fields as $f) { if ($f->type == 'captcha') { $recap = $f; } if ($ajax) { switch ($f->type) { case 'date': if (!isset($frm_vars['datepicker_loaded']) or !is_array($frm_vars['datepicker_loaded'])) { $frm_vars['datepicker_loaded'] = array(); } $frm_vars['datepicker_loaded']['field_' . $f->field_key] = $ajax_now; break; case 'time': if (isset($f->field_options['unique']) and $f->field_options['unique']) { if (!isset($frm_vars['timepicker_loaded'])) { $frm_vars['timepicker_loaded'] = array(); } $frm_vars['timepicker_loaded']['field_' . $f->field_key] = $ajax_now; } break; case 'phone': if (isset($f->field_options['format']) and !empty($f->field_options['format']) and strpos($f->field_options['format'], '^') !== 0) { global $frm_input_masks; $frm_input_masks[$f->id] = $ajax_now ? preg_replace('/\\d/', '9', $f->field_options['format']) : false; } break; default: //do_action('frm_check_ajax_js_load', $f, $ajax_now); break; } } if ($f->type != 'break') { continue; } $page_breaks[$f->field_order] = $f; if (($prev_page or $go_back) and !$get_last) { if (($error or $go_back) and $f->field_order < $prev_page or !$error and !$go_back and !isset($prev_page_obj) and $f->field_order == $prev_page) { $prev_page_obj = true; $prev_page = $f->field_order; } else { if (isset($set_prev) and $f->field_order < $set_prev) { $prev_page_obj = true; $prev_page = $f->field_order; } else { if ($f->field_order > $prev_page and !isset($set_next) and (!$next_page or is_numeric($next_page))) { $next_page = $f; $set_next = true; } } } } else { if ($get_last) { $prev_page_obj = true; $prev_page = $f->field_order; $next_page = false; } else { if (!$next_page) { $next_page = $f; } else { if (is_numeric($next_page) and $f->field_order == $next_page) { $next_page = $f; } } } } unset($f); } unset($ajax); if (!isset($prev_page_obj) and $prev_page) { $prev_page = 0; } if ($prev_page) { $current_page = $page_breaks[$prev_page]; if (self::is_field_hidden($current_page, stripslashes_deep($_POST))) { $current_page = apply_filters('frm_get_current_page', $current_page, $page_breaks, $go_back); if (!$current_page or $current_page->field_order != $prev_page) { $prev_page = $current_page ? $current_page->field_order : 0; foreach ($page_breaks as $o => $pb) { if ($o > $prev_page) { $next_page = $pb; break; } } if ($next_page->field_order <= $prev_page) { $next_page = false; } } } } if ($prev_page) { $frm_vars['prev_page'][$form_id] = $prev_page; } else { unset($frm_vars['prev_page'][$form_id]); } if (!isset($next_page)) { $next_page = false; } if ($next_page) { if (is_numeric($next_page) && isset($page_breaks[$next_page])) { $next_page = $page_breaks[$next_page]; } if (!is_numeric($next_page)) { $frm_vars['next_page'][$form_id] = $next_page; $next_page = $next_page->field_order; } } else { unset($frm_vars['next_page'][$form_id]); } $pages = array_keys($page_breaks); $frm_page_num = $prev_page ? array_search($prev_page, $pages) + 2 : 1; unset($page_breaks); if ($next_page or $prev_page) { foreach ($fields as $f) { if ($f->type == 'hidden' or $f->type == 'user_id') { continue; } if ($prev_page and $next_page and $f->field_order < $prev_page and $f->field_order > $next_page) { $f->type = 'hidden'; } else { if ($prev_page and $f->field_order < $prev_page) { $f->type = 'hidden'; } else { if ($next_page and $f->field_order > $next_page) { $f->type = 'hidden'; } } } unset($f); } global $frm_settings; if (isset($recap) and $recap and !empty($frm_settings->pubkey)) { //check to see if recaptcha script should be loaded on this page $frm_vars['recap_script'] = true; } } return $fields; }
public static function ajax_create() { global $frm_entry; $frm_form = new FrmForm(); $form = $frm_form->getOne($_POST['form_id']); if (!$form) { echo false; die; } $no_ajax_fields = array('file'); $errors = $frm_entry->validate($_POST, $no_ajax_fields); if (empty($errors)) { global $wpdb; $where = $wpdb->prepare("form_id=%d", $form->id); if (isset($_POST['frm_page_order_' . $form->id])) { $where .= $wpdb->prepare(" AND field_order < %d", $_POST['frm_page_order_' . $form->id]); } $ajax = isset($form->options['ajax_submit']) ? $form->options['ajax_submit'] : 0; //ajax submit if no file, rte, captcha if ($ajax) { $no_ajax = $wpdb->get_var("SELECT id FROM {$wpdb->prefix}frm_fields WHERE type in ('" . implode("','", $no_ajax_fields) . "') AND {$where} LIMIT 1"); if ($no_ajax) { $ajax = false; } } if ($ajax) { global $frm_vars; $frm_vars['ajax'] = true; $frm_vars['css_loaded'] = true; if (!isset($_POST['frm_page_order_' . $form->id]) && !FrmProFormsHelper::going_to_prev($form->id) || FrmProFormsHelper::saving_draft($form->id)) { $processed = true; FrmEntriesController::process_entry($errors, true); } echo FrmFormsController::show_form($form->id); // trigger the footer scripts if there is a form to show if ($errors || !isset($form->options['show_form']) || $form->options['show_form'] || !isset($processed)) { self::register_scripts(); FrmProEntriesController::enqueue_footer_js(); wp_deregister_script('formidable'); global $wp_scripts, $wp_styles; foreach (array('jquery', 'jquery-ui-core', 'jquery-migrate', 'thickbox') as $s) { if (isset($wp_scripts->registered[$s])) { $wp_scripts->done[] = $s; } unset($s); } $keep_styles = apply_filters('frm_ajax_load_styles', array('dashicons', 'jquery-theme')); foreach ($wp_styles->registered as $s => $info) { if (!is_array($keep_styles) || !in_array($s, $keep_styles)) { $wp_styles->done[] = $s; } unset($s); } wp_print_footer_scripts(); FrmProEntriesController::footer_js(); } } else { echo false; } } else { $errors = str_replace('"', '"', $errors); $obj = array(); foreach ($errors as $field => $error) { $field_id = str_replace('field', '', $field); $obj[$field_id] = $error; } echo json_encode($obj); } die; }
public static function validate($errors, $field, $value, $args) { $field->temp_id = $args['id']; // Keep current value for "Other" fields because it is needed for correct validation if (!$args['other']) { FrmEntriesHelper::get_posted_value($field, $value, $args); } if ($field->type == 'form' || FrmField::is_repeating_field($field)) { self::validate_embedded_form($errors, $field, $args['exclude']); } else { if ($field->type == 'user_id') { // make sure we have a user ID if (!is_numeric($value)) { $value = FrmAppHelper::get_user_id_param($value); FrmEntriesHelper::set_posted_value($field, $value, $args); } //add user id to post variables to be saved with entry $_POST['frm_user_id'] = $value; } else { if ($field->type == 'time' && is_array($value)) { $value = $value['H'] . ':' . $value['m'] . (isset($value['A']) ? ' ' . $value['A'] : ''); FrmEntriesHelper::set_posted_value($field, $value, $args); } } } // don't validate if going backwards if (FrmProFormsHelper::going_to_prev($field->form_id)) { return array(); } // clear any existing errors if draft if (FrmProFormsHelper::saving_draft() && isset($errors['field' . $field->temp_id])) { unset($errors['field' . $field->temp_id]); } self::validate_file_upload($errors, $field, $args); // if saving draft, only check file type since it won't be checked later // and confirmation field since the confirmation field value is not saved if (FrmProFormsHelper::saving_draft()) { //Check confirmation field if saving a draft self::validate_confirmation_field($errors, $field, $value, $args); return $errors; } self::validate_no_input_fields($errors, $field); if (empty($args['parent_field_id']) && !isset($_POST['item_meta'][$field->id])) { return $errors; } if (($field->type != 'tag' && $value == 0 || $field->type == 'tag' && $value == '') && isset($field->field_options['post_field']) && $field->field_options['post_field'] == 'post_category' && $field->required == '1') { $frm_settings = FrmAppHelper::get_settings(); $errors['field' . $field->temp_id] = !isset($field->field_options['blank']) || $field->field_options['blank'] == '' || $field->field_options['blank'] == 'Untitled cannot be blank' ? $frm_settings->blank_msg : $field->field_options['blank']; } //Don't require fields hidden with shortcode fields="25,26,27" global $frm_vars; if (self::is_field_hidden_by_shortcode($field, $errors)) { unset($errors['field' . $field->temp_id]); $value = ''; } //Don't require a conditionally hidden field self::validate_conditional_field($errors, $field, $value); //Don't require a field hidden in a conditional page or section heading self::validate_child_conditional_field($errors, $field, $value); //make sure the [auto_id] is still unique self::validate_auto_id($field, $value); //check uniqueness self::validate_unique_field($errors, $field, $value); self::set_post_fields($field, $value, $errors); if (!FrmProFieldsHelper::is_field_visible_to_user($field)) { //don't validate admin only fields that can't be seen unset($errors['field' . $field->temp_id]); FrmEntriesHelper::set_posted_value($field, $value, $args); return $errors; } self::validate_confirmation_field($errors, $field, $value, $args); //Don't validate the format if field is blank if (FrmAppHelper::is_empty_value($value)) { FrmEntriesHelper::set_posted_value($field, $value, $args); return $errors; } if (!is_array($value)) { $value = trim($value); } $validate_fields = array('number', 'phone', 'date'); if (in_array($field->type, $validate_fields)) { $function = 'validate_' . $field->type . '_field'; self::$function($errors, $field, $value); } FrmEntriesHelper::set_posted_value($field, $value, $args); return $errors; }