CCCPaste

Custom em_booking_validate for dependent_even...

<?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;
}