Instantly share code, notes, and snippets.

Embed
What would you like to do?
<?php
/**
* Gravity Forms : Check if file is attached
*
* Send a different notification email depending on whether a file is attached or not.
*
* For some reason the file upload field is not available to use with conditional logic
* when processing a gravity forms submission. So you cannot by default do something
* like perform one action if a file is attached and perform another if it is not.
*
* A work around is to se the form up with with a hidden administrative field, type radio
* button, choices Yes or No, default No.
*
* The field is set as administrative so it is hidden on the front end, and it is set to
* allow auto-population.
*
* This function uses the gform_pre_submission_filter hook to check if a file has been
* uploaded, if there is a file it sets the hidden radio button to Yes.
*
* Conditional logic can be based on this field.
*
* @param $form
*
* @return mixed
*
* @see https://docs.gravityforms.com/gform_pre_submission_filter/
*/
add_filter('gform_pre_submission_filter', function ($form) {
// Go through any available file fields.
// There is only 1 available per form, and it would have been
// possible to just target the file upload field by ID, but this
// seemed a *little* more future proof as it'll catch the file upload fields
// regardless of ID.
foreach ($_FILES as $file) {
// See if a file is attached.
// if the size variable is 0, no file is attached, otherwise a file is attached
$file['size'] === 0 ? $resume_attached = false : $resume_attached = true;
}
// go through the available fields
foreach ($form['fields'] as $field) {
// we are looking for a field with the ID 5
// it's an administrative field, so will not appear on the front end
$field_id = 7;
if ($field->id != $field_id) {
// move on if no match
continue;
}
// This is the choices array from the $form object
$choices = $field['choices'];
// we need to switch up if a resume is attached
if ($resume_attached) {
// Resume is attached, so update values in the choices array
$choices[0]['isSelected'] = true;
$choices[1]['isSelected'] = false;
// Changing the above doesn't seem to do much, but I'm leaving it as is regardless.
// Now update the value of this field in the $_POST variable
$_POST['input_7'] = "Yes";
} else {
// Otherwise make sure $_POST is set to No
$_POST['input_7'] = "No";
}
}
// send the form back to finish processing
return $form;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment