<?php
add_filter( 'em_booking_validate', 'custom_em_booking_validate', 10, 2 );
function custom_em_booking_validate( $result, $EM_Booking ) {
$EM_Event = $EM_Booking->get_event();
if ( empty( $EM_Event->event_attributes['dependent_event'] ) ) {
return $result;
}
// Example:
// 1,2,3
$dependent_events = preg_split(
'/\s*,\s*/',
$EM_Event->event_attributes['dependent_event']
);
$has_booked_parent_event = false;
$error_event = null;
foreach ( $dependent_events as $event_id ) {
$event_id = absint( trim( $event_id ) );
if ( ! $event_id ) {
continue;
}
$parent_event = em_get_event( $event_id );
if ( empty( $parent_event->event_id ) ) {
continue;
}
if ( ! $error_event ) {
$error_event = $parent_event;
}
// OR logic.
if ( static::has_booked( $parent_event ) ) {
$has_booked_parent_event = true;
break;
}
}
// None of the dependent events were booked.
if ( ! $has_booked_parent_event ) {
if ( $error_event ) {
$error = static::get_error_message( $error_event );
$EM_Booking->add_error( $error );
}
$result = false;
}
return $result;
}
Comments