public static function validate($values, $exclude = false) { global $wpdb; FrmEntry::sanitize_entry_post($values); $errors = array(); if (!isset($values['form_id']) || !isset($values['item_meta'])) { $errors['form'] = __('There was a problem with your submission. Please try again.', 'formidable'); return $errors; } if (FrmAppHelper::is_admin() && is_user_logged_in() && (!isset($values['frm_submit_entry_' . $values['form_id']]) || !wp_verify_nonce($values['frm_submit_entry_' . $values['form_id']], 'frm_submit_entry_nonce'))) { $errors['form'] = __('You do not have permission to do that', 'formidable'); } if (!isset($values['item_key']) || $values['item_key'] == '') { $_POST['item_key'] = $values['item_key'] = FrmAppHelper::get_unique_key('', $wpdb->prefix . 'frm_items', 'item_key'); } $where = apply_filters('frm_posted_field_ids', array('fi.form_id' => $values['form_id'])); // Don't get subfields $where['fr.parent_form_id'] = array(null, 0); // Don't get excluded fields (like file upload fields in the ajax validation) if (!empty($exclude)) { $where['fi.type not'] = $exclude; } $posted_fields = FrmField::getAll($where, 'field_order'); // Pass exclude value to validate_field function so it can be used for repeating sections $args = array('exclude' => $exclude); foreach ($posted_fields as $posted_field) { self::validate_field($posted_field, $errors, $values, $args); unset($posted_field); } // check for spam self::spam_check($exclude, $values, $errors); $errors = apply_filters('frm_validate_entry', $errors, $values, compact('exclude')); return $errors; }