Ejemplo n.º 1
0
 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');
             }
         }
     }
 }
Ejemplo n.º 2
0
 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');
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * @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;
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 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();
 }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 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('"', '&quot;', $errors);
         $obj = array();
         foreach ($errors as $field => $error) {
             $field_id = str_replace('field', '', $field);
             $obj[$field_id] = $error;
         }
         echo json_encode($obj);
     }
     die;
 }
Ejemplo n.º 8
0
 public static function validate_confirmation_field(&$errors, $field, $value, $args)
 {
     //Make sure confirmation field matches original field
     if (!FrmField::is_option_true($field, 'conf_field')) {
         return;
     }
     if (FrmProFormsHelper::saving_draft()) {
         //Check confirmation field if saving a draft
         $args['action'] = $_POST['frm_action'] == 'create' ? 'create' : 'update';
         self::validate_check_confirmation_field($errors, $field, $value, $args);
         return;
     }
     $args['action'] = $_POST['frm_action'] == 'update' ? 'update' : 'create';
     self::validate_check_confirmation_field($errors, $field, $value, $args);
 }