function gffd_is_valid_pre_format_feed_data($gffd_index, $value)
{
    $gffd_get_purchase_field_requirements = gffd_get_purchase_field_requirements($gffd_index);
    if (is_callable($gffd_get_purchase_field_requirements['validate_pre_format'])) {
        return call_user_func($gffd_get_purchase_field_requirements['validate_pre_format'], $value);
    } else {
        return false;
    }
}
					<h2 id="gffd_feed_settings_area">Feed</h2>
					<p class="description">
						<?php 
_e("The below fields are required to perform a purchase.\n\t\t\t\t\t\tPlease select the field from your form that will be <em>fed</em>\n\t\t\t\t\t\tinto " . gffd_glossary('service_name') . ". ");
?>
					</p>
				</td>
			</tr>

			<tr valign="top" class="gffd_header">
				<th scope="row"><strong>Required Field</strong></th>
				<td><strong>Where will the data come from?</strong></td>
			</tr>

			<?php 
foreach (gffd_is_array(gffd_get_purchase_field_requirements()) as $required_field) {
    ?>
				<tr valign="top">
					<th scope="row">
						<?php 
    _e($required_field['label']);
    ?>
					</th>
					<td>
						<select class="feed-dropdown" id="feed-dropdown-<?php 
    echo $required_field['gffd_index'];
    ?>
" name="gffd_form_feed_indexes[<?php 
    echo $required_field['gffd_index'];
    ?>
]" style="width:300px;">
function gffd_validation_and_payment($validation_result)
{
    $form_id = $validation_result['form']['id'];
    $the_submitted_form = $_REQUEST;
    //for easier reading.
    // Is this form supposed to be used by gffd?
    if (gffd_feed_is_active($form_id)) {
        // Validate all the fields.
        foreach (gffd_is_array(gffd_get_purchase_field_requirements()) as $required_field) {
            $gffd_feeds_get_form_feed_settings = gffd_feeds_get_form_feed_settings($form_id);
            // Get the feed index
            $gf_form_feed_index = $gffd_feeds_get_form_feed_settings['feed_indexes'][$required_field['gffd_index']];
            // Get the $_POST index by using value_to_post_input
            // so we can pull input_3_4 in GF style
            $gffd_convert_float_value_to_post_input = gffd_convert_float_value_to_post_input($gf_form_feed_index);
            // In the case when a required field is removed,
            // we need to test for it's value in $_POST.
            //
            // Test $required_field for it's $_POST
            // counterpart.
            if (isset($the_submitted_form[$gffd_convert_float_value_to_post_input])) {
                $gffd_is_valid_pre_format_feed_data = gffd_is_valid_pre_format_feed_data($required_field['gffd_index'], $the_submitted_form[$gffd_convert_float_value_to_post_input]);
                // If we have a good result, set the value to pass
                // to the purchasing functions.
                if ($gffd_is_valid_pre_format_feed_data) {
                    $gffd_fd_form_info[$required_field['gffd_index']] = $gffd_is_valid_pre_format_feed_data;
                    // If even one of the items fail, jump out,
                    // thrown an error and try again.
                } else {
                    // Fail the form.
                    $validation_result["is_valid"] = false;
                    $validation_result["form"] = gffd_get_form($form_id);
                    // Let's try and find out what failed by going through the
                    // form's fields.
                    foreach ($validation_result['form']['fields'] as &$field) {
                        if ($field['id'] == floor($gf_form_feed_index)) {
                            $field["failed_validation"] = true;
                            $field["validation_message"] = gffd_get_validation_message_feed_data($required_field['gffd_index']);
                        }
                    }
                    // Let's not return the validation result here,
                    // instead let's test for it after it's added
                    // messages to all fields.
                }
                // Okay, one of the fields were missing.
            } else {
                // If a field is missing, let's just do nothing and submit
                // the form. But, we will at least email the admin about it,
                // because we did not do the purchase.
            }
        }
        //end foreach
        // If something did not validate, throw the error
        // back to GF.
        if ($validation_result["is_valid"] == false) {
            return $validation_result;
            // If everything validated, let's try
            // and perform the purchase.
        } else {
            // Set the customer reference number on FD
            $gffd_fd_form_info['gffd_fd_customer_ref'] = gffd_fd_customer_ref($form_id);
            // Save the reference number to the DB temporarily so we can
            // get it later.
            update_option("gffd_fd_{$form_id}" . "_" . $_SERVER['REMOTE_ADDR'], $gffd_fd_form_info['gffd_fd_customer_ref']);
            // Run a purchase by form
            $result = gffd_fd_purchase_by_form($gffd_fd_form_info, 'as_original');
            if (gffd_is_array($result) && !$result['error_message'] && !defined('GFFD_DEBUG_FORM_SUBMIT') && $result['error']) {
                // Just show a simple error.
                wp_die(__("There was an error, but FirstData didn't\n\t\t\t\t\t\tsend back an error message."));
                // Want to see what the error is? Just set
                // define('GFFD_DEBUG_FORM_SUBMIT', true);
                // in wp-config.php and try again
            } else {
                // To debug just use define('GFFD_DEBUG_FORM_SUBMIT', true);
                // in wp-config.php
                if (defined('GFFD_DEBUG_FORM_SUBMIT')) {
                    echo "<pre>";
                    var_dump($result);
                    echo "</pre>";
                    exit;
                    // If the dev doesn't want to GFFD_DEBUG_FORM_SUBMIT
                } else {
                    // If there was an error, and we've submitted
                    // the data for purchase, let's see what the
                    // bank or FirstData class said.
                    if ($result['error'] === true) {
                        // Don't submit the entry.
                        $validation_result["is_valid"] = false;
                        // If there is a bank response, let's
                        // pass that to the CC field
                        if ($result['gffd_fd_instance']->getBankResponseMessage()) {
                            $validation_result = gffd_wp_die_by_fd_response($result, 'getBankResponseMessage');
                        } elseif ($result['gffd_fd_instance']->getErrorMessage()) {
                            // Try and see if there is just a generic
                            // error message.
                            $validation_result = gffd_wp_die_by_fd_response($result, 'getErrorMessage');
                        }
                        return $validation_result;
                        // If there was no bank response, but an error,
                        // we don't know what is wrong!
                    } else {
                        // Throw a general error message.
                        foreach ($validation_result['form']['fields'] as &$field) {
                            if ($field['type'] == 'creditcard') {
                                // Tell GF what field failed. Here,
                                // always the CC.
                                $field["failed_validation"] = true;
                                // Pass the bank response back to
                                // GF validation_message.
                                $field["validation_message"] = __("Sorry, but there was an error with the" . "information provided. Please correct and try again. " . "If this persists, contact the site owner.");
                            }
                        }
                        return $validation_result;
                    }
                }
            }
        }
    } else {
        // If the form is not a form with a feed, just ignore
        // and continue.
        return $validation_result;
    }
}