wip: initial commit
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\BusProNet\ApiResponseParser;
|
||||
|
||||
use App\BusProNet\ApiClient;
|
||||
use App\BusProNet\Exception\ResponseParserException;
|
||||
|
||||
class ResponseParser
|
||||
{
|
||||
/**
|
||||
* @throws ResponseParserException
|
||||
*/
|
||||
public function parseXmlString(string $type, string $content): mixed
|
||||
{
|
||||
$xml = simplexml_load_string($content);
|
||||
|
||||
// Override type when present in XML to catch error responses
|
||||
$responseType = $type;
|
||||
$responseTypeXml = $xml->xpath('satz/@typ');
|
||||
if (0 < count($responseTypeXml)) {
|
||||
$responseType = (string) $xml->xpath('satz/@typ')[0];
|
||||
}
|
||||
|
||||
switch ($responseType) {
|
||||
case ApiClient::TYPE_NOTIFICATION:
|
||||
return (new NotificationResponseParser())->parse($xml);
|
||||
case ApiClient::TYPE_CUSTOMER_DATA:
|
||||
$subType = (string) $xml->art;
|
||||
switch ($subType) {
|
||||
case 'Adressdaten':
|
||||
case 'Adressdaten_Ändern':
|
||||
return (new PersonalDataResponseParser())->parse($xml);
|
||||
case 'SelektionCRM':
|
||||
case 'SelektionCRM_Ändern':
|
||||
return (new CrmAttributesResponseParser())->parse($xml);
|
||||
case 'Vorgänge':
|
||||
return (new BookingsResponseParser())->parse($xml);
|
||||
case 'Vorgang_Details':
|
||||
return (new BookingResponseParser())->parse($xml);
|
||||
case 'Dokumentdruck':
|
||||
return (new DocumentsResponseParser())->parseDocuments($xml);
|
||||
case 'Vorgangdruck':
|
||||
return (new DocumentsResponseParser())->parseConfirmation($xml);
|
||||
}
|
||||
break;
|
||||
case ApiClient::TYPE_BASE_DATA_COUNTRIES:
|
||||
return (new CountriesResponseParser())->parse($xml);
|
||||
case ApiClient::TYPE_MUTABLE_FIELDS:
|
||||
return (new MutableFieldsResponseParser())->parse($xml);
|
||||
case ApiClient::TYPE_AVAILABILITY:
|
||||
return (new AvailabilitiesResponseParser())->parse($xml);
|
||||
}
|
||||
|
||||
throw new ResponseParserException('Unable to parse XML response');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user