I have this filter set in my functions.php file on WordPress that validates the date, so the pickup date time and is earlier than the return date and time. When the dates and times are entered correctly it should pass the validation but it keeps failing and I just can't fathom this out. It's just stopped working all of a sudden. I can only pinpoint this to set the date/time on the server to Greenwich time.
add_filter( 'gform_validation', 'custom_validation' );
function custom_validation( $validation_result ) {
$form = $validation_result['form'];
$pickupDate = null;
$returnDate = null;
foreach( $form['fields'] as & $field ) {
if ( $field->label == 'Pickup Date' ) {
$pickupDate = rgpost('input_' . $field->id);
//var_dump("Pickup Date:" . $pickupDate);
}
if ( $field->label == 'Pickup Time' ) {
$pickupDate .= ' ' . rgpost('input_' . $field->id);
//var_dump("Pickup Time:" . $pickupDate);
}
if ( $field->label == 'Return Date' ) {
$returnDate = rgpost('input_' . $field->id);
//var_dump("Return Date:" . $returnDate);
}
if ( $field->label == 'Return Time' ) {
$returnDate .= ' ' . rgpost('input_' . $field->id);
//var_dump("Return Time:" . $returnDate);
if (strtotime($returnDate) <= strtotime($pickupDate)) {
//var_dump($returnDate);
//var_dump($pickupDate);
$validation_result['is_valid'] = false;
$field->failed_validation = true;
$field->validation_message = 'Please ensure your selected Pickup Date and time is earlier than your Return Date and Time';
break;
}
}
}
//Assign modified $form object back to the validation result
$validation_result['form'] = $form;
return $validation_result;
}
add_filter( 'gform_pre_send_email', function ( $email, $message_format ) {
if ( $message_format != 'html' ) {
return $email;
}
if (strpos($email['message'], 'Pickup Date') !== false) {
$email['message'] = explode('Pickup Date', $email['message']);
$email['message'][1] = str_replace('/', ', ', $email['message'][1]);
$email['message'][1] = str_replace('<, ', '</', $email['message'][1]);
$email['message'] = implode('Pickup Date', $email['message']);
}
$email['message'] = '<html>' . $email['message'] . '</html>';
return $email;
}, 10, 2 );
The dates are getting dumped out in this format.
string(22) "Pickup Date:25/06/2020"
string(28) "Pickup Time:25/06/2020 08:00"
string(22) "Return Date:26/06/2020"
string(28) "Return Time:26/06/2020 08:00"
Can anyone even spot where the problem is at?
When you access this URL you need to click on the "Quotation Needed" button.
You just need to remove = from your validation condition.
add_filter( 'gform_validation', 'custom_validation' );
function custom_validation( $validation_result ) {
$form = $validation_result['form'];
$pickupDate = null;
$returnDate = null;
foreach( $form['fields'] as & $field ) {
if ( $field->label == 'Pickup Date' ) {
$pickupDate = rgpost('input_' . $field->id);
//var_dump("Pickup Date:" . $pickupDate);
}
if ( $field->label == 'Pickup Time' ) {
$pickupDate .= ' ' . rgpost('input_' . $field->id);
//var_dump("Pickup Time:" . $pickupDate);
}
if ( $field->label == 'Return Date' ) {
$returnDate = rgpost('input_' . $field->id);
//var_dump("Return Date:" . $returnDate);
}
if ( $field->label == 'Return Time' ) {
$returnDate .= ' ' . rgpost('input_' . $field->id);
//var_dump("Return Time:" . $returnDate);
if (strtotime($returnDate) < strtotime($pickupDate)) {
//var_dump($returnDate);
//var_dump($pickupDate);
$validation_result['is_valid'] = false;
$field->failed_validation = true;
$field->validation_message = 'Please ensure your selected Pickup Date and time is earlier than your Return Date and Time';
break;
}
}
}
//Assign modified $form object back to the validation result
$validation_result['form'] = $form;
return $validation_result;
}