Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gravity Forms custom validation filter

I have a function that processes sales via a third-party service, processes the result and returns an array with the Status "Success" or "Invalid." This sales call is made using the gform_after_submission hook applied to the specific form.

What I need to do is store the "Success" or "Invalid" result in the array as a variable that I can later pass to a function to validate or invalidate the credit card field, using gform_validation hook.

I'm declaring the variable in a function, like so:

function foo { 
...code to sell product through API...

$status = $checkoutShoppingCartRequest['Result']['Status'];
}

When I print the variable $status within the function, it is showing either Success or Invalid like it should.

Here is other function where I need to use this variable, passed to gform_validation, which fails every time regardless of Success or Invalid result:

function MBvalidate( $validation_result ) {
$form = $validation_result['form'];
if ( $status !== "Success") {
    $validation_result['is_valid'] = false;
    foreach( $form['fields'] as &$field ) {
        if ( $field->id == '34' ) {
            $field->failed_validation = true;
            $field->validation_message = 'Your credit card could not be processed.';
            break;
        }
    }
}
//Assign modified $form object back to the validation result
$validation_result['form'] = $form;
return $validation_result;

}

add_filter( 'gform_validation_47', 'MBvalidate' );

I have tried passing the variable a number of different ways, via globals and sessions, etc.

I am new to GF development so I am sure I'm missing something. I'd appreciate any direction.

like image 527
Nietzsche Avatar asked May 20 '15 14:05

Nietzsche


1 Answers

The gform_after_submission action hook runs after gform_validation.

Anyway, assuming you can find a hook that runs earlier, what I would do is store a unique variable for each submitted form using the Transients API's set_transient() and get_transient() functions. For example you can create a hidden field in every form which you populate with a random ID. Use this random ID as a key to store and retrieve the Success/Invalid result.

like image 52
Niklas Brunberg Avatar answered Sep 18 '22 07:09

Niklas Brunberg