gravityflow_validation_user_input

The gravityflow_validation_user_input is used to validate whether the user input step form is valid. You might use it when you require an equivalent to gform_validation. Note that gform_field_validation does fire for user input steps, and is generally the better filter to hook your custom logic to.

Parameters

$validation_result array
The validation result and form currently being processed

$step object
The current user input step

$new_status string
The new status for the current step

Examples

Example 1 - Prevent users with specific meta data from completing a user input

add_filter( 'gravityflow_validation_user_input', 'sh_custom_user_input_validation', 10,3 );

function sh_custom_user_input_validation( $validation_result, $step, $new_status ) {

    $current_user = wp_get_current_user();
    if ( 0 !== $current_user->ID ) {
        $level = get_user_meta( $current_user->ID, 'employee_level', true );
        if ( isset( $level ) && (int) $level < 5 ) {
            return new WP_Error( 'validation_result', esc_html__( 'Only Level 5+ employees can complete this step', 'gravityflow' ), $validation_result );
        }
    }

    return $validation_result;
}

Example 2 - Prevent all validation from failing on a particular user input step

add_filter( 'gravityflow_validation_user_input', 'sh_custom_user_input_validation', 10,3 );

function sh_custom_user_input_validation( $validation_result, $step, $new_status ) {
    if ( $step->get_id() == '223' ) {
        $validation_result['is_valid'] = false;
    }
    return $validation_result;
}

Example 3 - Validate for a field to be required only on a specific step

Setting a field to be required via the form editor will validate that it is not blank on every step. This example shows how you could leave the required field setting off and still validate that it is required on a specific step. It could easily be customized in the opposite way to allow a field set as required on all steps be excluded on a single step as well.

add_filter( 'gravityflow_validation_user_input', 'jo_custom_user_input_validation', 10, 3 );
function jo_custom_user_input_validation( $validation_result, $step, $new_status ) {
	if ( $step->get_id() == '229' ) {

		if ( empty( rgpost( 'input_1' ) ) ) {
			// set the form validation to false
			$validation_result['is_valid'] = false;

			//finding Field with ID of 1 and marking it as failed validation
			$form = $validation_result['form'];
			foreach( $form['fields'] as &$field ) {

				//NOTE: replace 1 with the field you would like to validate
				if ( $field->id == '1' ) {
					$field->failed_validation = true;
					$field->validation_message = 'Fill in the required field for this step';
					break;
				}
			}

			return new WP_Error( <br>				'validation_result', 
				esc_html__( 'Required field(s) for this step are incomplete.', 'gravityflow' ), 
				$validation_result
			);
		}
	}
	return $validation_result;
}

Example 4 - Prevent the entry creator from completing a user input step

add_filter( 'gravityflow_validation_user_input', 'validate_entry_creator_conflict', 10, 2 );
function validate_entry_creator_conflict( $validation_result, $step ) {

	// Only check for a specific step ID
	if ( $step->get_id() != 443 ) {
		return $validation_result;
	}
	//Only apply for logged in  user
	$current_user = wp_get_current_user();
	if ( 0 == $current_user->ID ) {
		return $validation_result;
	}

	$entry = $step->get_entry();
	$created_by_user_id = $entry['created_by'];
	$error = new WP_Error( 'validation_result', esc_html__( 'You cannot action a step for an entry that you submit.', 'gravityflow' ), $validation_result );
	// if current user is the entry creator
	if ( $created_by_user_id == $current_user->ID ) {
		$assignees = $step->get_assignees();

		$matched = false;
		// loop through all assignees
		foreach ( $assignees as $assignee ) {
			switch ( $assignee->get_type() ) {
				case 'user_id':
					// remove when user id match
					return $error;
					break;
				case 'role':
					// remove when user role match
					$assignee_role = $assignee->get_id();
					if ( in_array( $assignee_role, $current_user->roles ) ) {
						return $error;
					}
					break;
				case 'email':
					// remove when user email match
					$assignee_email = $assignee->get_id();
					if ( $assignee_email == $current_user->user_email ) {
						return $error;
					}
					break;
			}
		}
	}
	return $validation_result;
}

Placement

This code should be placed in the functions.php file of your active theme.