fix: allow hotel-less travel data
addresses #869ckkwh7
This commit is contained in:
@@ -91,6 +91,12 @@ class HotelLoader extends AbstractLoader
|
||||
public function patchHotelDetails(Travel $travel): void
|
||||
{
|
||||
$hotelId = $travel->hotelId;
|
||||
if (null === $hotelId) {
|
||||
$travel->hotel = null;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
$hotel = $this->loadById($hotelId);
|
||||
$travel->hotel = $hotel;
|
||||
|
||||
@@ -60,7 +60,9 @@ class TravelParser extends AbstractParser
|
||||
|
||||
$travel = new Travel();
|
||||
$travel->id = (int) $this->getRequiredAttrValue($node, 'idbuspro', 'travel termin node');
|
||||
$travel->hotelId = (int) $this->getRequiredAttrValue($hotelNode, 'idbuspro', 'travel hotel node');
|
||||
$travel->hotelId = null !== $hotelNode
|
||||
? (int) $this->getRequiredAttrValue($hotelNode, 'idbuspro', 'travel hotel node')
|
||||
: null;
|
||||
$travel->label = $this->getStringOrNullValue($node->filterXPath('.//text'));
|
||||
$travel->dateFrom = $dateFrom;
|
||||
$travel->dateTo = $dateTo;
|
||||
@@ -80,7 +82,7 @@ class TravelParser extends AbstractParser
|
||||
->getAdditionalServices($node->filterXPath('.//lei_sonstiges[not(ancestor::hotel)]/leistung'));
|
||||
$travel->transportationServices = $this
|
||||
->getTransportationServices($node->filterXPath('.//lei_befoerderung/leistung'));
|
||||
$travel->rooms = $this->getRooms($hotelNode);
|
||||
$travel->rooms = null !== $hotelNode ? $this->getRooms($hotelNode) : [];
|
||||
$travel->pickups = $this->getPickups($node->filterXPath('.//zustiege/zustieg'), $dateFrom, true);
|
||||
$travel->dropOffs = $this->getPickups($node->filterXPath('.//zustiege_rueck/zustieg_rueck'), $dateTo, false);
|
||||
|
||||
@@ -319,16 +321,16 @@ class TravelParser extends AbstractParser
|
||||
* @param Crawler $node The XML node containing hotel data
|
||||
* @param int|null $hotelId Optional hotel ID to filter by
|
||||
*
|
||||
* @return Crawler The hotel XML node
|
||||
* @return Crawler|null The hotel XML node or null if none exists and no specific hotel was requested
|
||||
*/
|
||||
public function getHotelNode(Crawler $node, ?int $hotelId): Crawler
|
||||
public function getHotelNode(Crawler $node, ?int $hotelId): ?Crawler
|
||||
{
|
||||
// In case not hotel id is provided, take the first hotel node (which is most probably the only one)
|
||||
if (null === $hotelId) {
|
||||
$hotelNode = $node->filterXPath('.//hotel');
|
||||
|
||||
if (0 === $hotelNode->count()) {
|
||||
throw new \InvalidArgumentException('No hotel node found in travel XML.');
|
||||
return null;
|
||||
}
|
||||
|
||||
return $hotelNode->first();
|
||||
|
||||
Reference in New Issue
Block a user