getParticipant($bookingDto, $participantIndex); if (null === $participant) { return; } // Check if either outbound or inbound transportation is bus $hasOutboundBus = null !== $participant->transportationOutbound && DirectionMapper::SUBTYPE_BUS_API === $participant->transportationOutbound->subType; $hasInboundBus = null !== $participant->transportationInbound && DirectionMapper::SUBTYPE_BUS_API === $participant->transportationInbound->subType; // Only process pickup if at least one direction has bus transport if (false === $hasOutboundBus && false === $hasInboundBus) { $participant->pickup = null; // Clear pickup for non-bus transport return; } $selectedPickup = $this->getFieldValue($submittedData, $this->getFieldName()); // Validate pickup selection against available outbound pickups $validSelection = null; if (null !== $selectedPickup) { $validSelection = $this->findValidPickup($selectedPickup, $bookingDto->travel->pickupsOutbound); } $participant->pickup = $validSelection; } /** * Finds a valid pickup from available pickups. * * @param mixed $selectedPickupId The submitted pickup ID * @param array $availablePickups Array of available pickup locations * * @return Pickup|null The valid pickup object, or null if invalid */ private function findValidPickup(mixed $selectedPickupId, array $availablePickups): ?Pickup { if (null === $selectedPickupId || false === is_string($selectedPickupId) && false === is_int($selectedPickupId)) { return null; } $pickupId = (int) $selectedPickupId; foreach ($availablePickups as $pickup) { if ($pickup->id === $pickupId) { return $pickup; } } return null; } }