WIP: Extend and improve profile editing
This commit is contained in:
@@ -3,16 +3,15 @@
|
||||
namespace App\BusProNet;
|
||||
|
||||
use App\BusProNet\Model\Address;
|
||||
use App\BusProNet\Model\BaseDataResponse;
|
||||
use App\BusProNet\Model\NotificationResponse;
|
||||
use App\BusProNet\Model\Communication;
|
||||
use App\BusProNet\Model\CountriesResponse;
|
||||
use App\BusProNet\Model\Country;
|
||||
use App\BusProNet\Model\CrmAttribute;
|
||||
use App\BusProNet\Model\CrmAttributesResponse;
|
||||
use App\BusProNet\Model\CrmAttributeGroup;
|
||||
use App\BusProNet\Model\CrmAttributesResponse;
|
||||
use App\BusProNet\Model\Pickup;
|
||||
use App\BusProNet\Model\PickupsResponse;
|
||||
use App\BusProNet\Model\ProfileResponse;
|
||||
use App\BusProNet\Model\BaseResponse;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class ResponseParser
|
||||
@@ -27,37 +26,46 @@ class ResponseParser
|
||||
/**
|
||||
* @throws ResponseParserException
|
||||
*/
|
||||
public function parseXmlString(string $content): BaseResponse
|
||||
public function parseXmlString(string $type, string $content): mixed
|
||||
{
|
||||
$xml = simplexml_load_string($content);
|
||||
$type = (string)$xml->xpath('satz/@typ')[0];
|
||||
|
||||
switch ($type) {
|
||||
case 'HINWEIS':
|
||||
return $this->createBaseResponse($xml);
|
||||
case 'KUNDENKONTO':
|
||||
// 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 $this->createNotificationResponse($xml);
|
||||
case ApiClient::TYPE_CUSTOMER_DATA:
|
||||
$subType = (string) $xml->xpath('art')[0];
|
||||
switch ($subType) {
|
||||
case 'Adressdaten':
|
||||
case 'Adressdaten_Ändern':
|
||||
return $this->createProfileResponse($xml);
|
||||
case 'SelektionCRM':
|
||||
case 'SelektionCRM_Ändern':
|
||||
return $this->createCrmAttributesResponse($xml);
|
||||
}
|
||||
case 'STAMMLAENDER':
|
||||
break;
|
||||
case ApiClient::TYPE_BASE_DATA_COUNTRIES:
|
||||
return $this->createCountriesResponse($xml);
|
||||
case 'STAMMZUSTIEGE':
|
||||
case ApiClient::TYPE_BASE_DATA_PICKUPS:
|
||||
return $this->createPickupsResponse($xml);
|
||||
}
|
||||
|
||||
throw new ResponseParserException('Unable to parse XML response');
|
||||
}
|
||||
|
||||
public function createBaseResponse(\SimpleXMLElement $xml): BaseResponse
|
||||
public function createNotificationResponse(\SimpleXMLElement $xml): NotificationResponse
|
||||
{
|
||||
$code = (int) $xml->xpath('satz/nr')[0];
|
||||
$message = (string) $xml->xpath('satz/text')[0];
|
||||
|
||||
return new BaseResponse($code, $message);
|
||||
return new NotificationResponse($code, $message);
|
||||
}
|
||||
|
||||
public function createProfileResponse(\SimpleXMLElement $xml): ProfileResponse
|
||||
@@ -163,7 +171,7 @@ class ResponseParser
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function createCountriesResponse(\SimpleXMLElement $xml): CountriesResponse
|
||||
public function createCountriesResponse(\SimpleXMLElement $xml): BaseDataResponse
|
||||
{
|
||||
$countries = [];
|
||||
|
||||
@@ -178,17 +186,17 @@ class ResponseParser
|
||||
$countries[] = $country;
|
||||
}
|
||||
|
||||
$response = new CountriesResponse();
|
||||
$response->setCountries($countries);
|
||||
$response = new BaseDataResponse();
|
||||
$response->setItems($countries);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function createPickupsResponse(\SimpleXMLElement $xml): PickupsResponse
|
||||
public function createPickupsResponse(\SimpleXMLElement $xml): BaseDataResponse
|
||||
{
|
||||
$pickups = [];
|
||||
|
||||
foreach ($xml->xpath('zustiege/zustieg') as $item) {
|
||||
foreach ($xml->xpath('zustieg') as $item) {
|
||||
$pickup = new Pickup();
|
||||
$pickup
|
||||
->setId((int)$item->attributes()['id'])
|
||||
@@ -200,8 +208,8 @@ class ResponseParser
|
||||
$pickups[] = $pickup;
|
||||
}
|
||||
|
||||
$response = new PickupsResponse();
|
||||
$response->setPickups($pickups);
|
||||
$response = new BaseDataResponse();
|
||||
$response->setItems($pickups);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user