From 243e9cad63a6dd72e772a318c79a9cdee92376bd Mon Sep 17 00:00:00 2001 From: Mike van den Hoek Date: Wed, 3 Dec 2025 15:36:51 +0100 Subject: [PATCH] feat: supplement embedded data --- .../Controllers/BaseController.php | 20 ++++++++++++++++++ .../Controllers/EnableUController.php | 15 +++++++++++++ .../Controllers/PinkRoccadeController.php | 17 +++++++++++++++ .../Controllers/VrijBRPController.php | 21 +++++++++++++++++++ .../Controllers/WeAreFrankController.php | 18 ++++++++++++++++ 5 files changed, 91 insertions(+) diff --git a/src/PrefillGravityForms/Controllers/BaseController.php b/src/PrefillGravityForms/Controllers/BaseController.php index 5c2b7e0..937a046 100644 --- a/src/PrefillGravityForms/Controllers/BaseController.php +++ b/src/PrefillGravityForms/Controllers/BaseController.php @@ -278,6 +278,26 @@ protected function createExpandArguments(string $expand): string return urldecode(http_build_query(['expand' => $imploded], '', ',')); } + /** + * Supplements the '_embedded' array with additional data retrieved via the '_links' array, + * using the configured expand arguments to fetch and merge related resources. + */ + protected function supplementEmbeddedByLinks(array $apiResponse, string $embedType = '', string $doelBinding = ''): array + { + if (! isset($apiResponse['_links'][$embedType])) { + return $apiResponse; + } + + foreach ($apiResponse['_links'][$embedType] as $key => $embeddedItem) { + $response = $this->requestEmbedded(str_replace('https://api.acc-vrijbrp-hoeksche-waard.commonground.nu/haal-centraal-brp-bevragen/api/v1.3/ingeschrevenpersonen', 'https://api.acc-vrijbrp-hoeksche-waard.commonground.nu/api/haalcentraal-brp-bevragen/api/v1.3/ingeschrevenpersonen', $embeddedItem['href']), $doelBinding); + $apiResponse['_embedded'][$embedType][$key] = array_merge($apiResponse['_embedded'][$embedType][$key], $response); + } + + return $apiResponse; + } + + abstract protected function requestEmbedded(string $url, string $doelBinding): array; + protected function getCurlHeaders(string $doelBinding = ''): array { $headers = [ diff --git a/src/PrefillGravityForms/Controllers/EnableUController.php b/src/PrefillGravityForms/Controllers/EnableUController.php index 6c84d9d..7f0c8a6 100644 --- a/src/PrefillGravityForms/Controllers/EnableUController.php +++ b/src/PrefillGravityForms/Controllers/EnableUController.php @@ -65,6 +65,11 @@ protected function fetchApiResponse(string $bsn, string $doelBinding = '', strin return []; } + foreach (array_filter(explode(',', $expand)) as $expandItem) { + $apiResponse = $this->supplementEmbeddedByLinks($apiResponse, trim($expandItem), $doelBinding); + } + dd($apiResponse); + return $apiResponse; } @@ -77,4 +82,14 @@ protected function request(string $bsn = '', string $doelBinding = '', string $e return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn)); } + + protected function requestEmbedded(string $url, string $doelBinding): array + { + $curlArgs = [ + CURLOPT_URL => $url, + CURLOPT_HTTPHEADER => $this->getCurlHeaders($doelBinding), + ]; + + return $this->handleCurl($curlArgs, CacheService::formatTransientKey($url)); + } } diff --git a/src/PrefillGravityForms/Controllers/PinkRoccadeController.php b/src/PrefillGravityForms/Controllers/PinkRoccadeController.php index e56c0c6..b80784c 100644 --- a/src/PrefillGravityForms/Controllers/PinkRoccadeController.php +++ b/src/PrefillGravityForms/Controllers/PinkRoccadeController.php @@ -65,6 +65,11 @@ protected function fetchApiResponse(string $bsn, string $doelBinding = '', strin return []; } + foreach (array_filter(explode(',', $expand)) as $expandItem) { + $apiResponse = $this->supplementEmbeddedByLinks($apiResponse, trim($expandItem), $doelBinding); + } + dd($apiResponse); + return $apiResponse; } @@ -79,4 +84,16 @@ protected function request(string $bsn = '', string $doelBinding = '', string $e return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn)); } + + protected function requestEmbedded(string $url, string $doelBinding): array + { + $curlArgs = [ + CURLOPT_URL => $url, + CURLOPT_HTTPHEADER => $this->getCurlHeaders($doelBinding), + CURLOPT_SSLCERT => $this->settings->getPublicCertificate(), + CURLOPT_SSLKEY => $this->settings->getPrivateCertificate(), + ]; + + return $this->handleCurl($curlArgs, CacheService::formatTransientKey($url)); + } } diff --git a/src/PrefillGravityForms/Controllers/VrijBRPController.php b/src/PrefillGravityForms/Controllers/VrijBRPController.php index 770cbbe..cf2a7f5 100644 --- a/src/PrefillGravityForms/Controllers/VrijBRPController.php +++ b/src/PrefillGravityForms/Controllers/VrijBRPController.php @@ -15,6 +15,8 @@ public function handle(array $form): array } $bsn = $this->getBSN(); + $bsn = '900231038'; + // $bsn = '311204557'; if ('' === $bsn) { return $form; @@ -65,6 +67,10 @@ protected function fetchApiResponse(string $bsn, string $doelBinding = '', strin return []; } + foreach (array_filter(explode(',', $expand)) as $expandItem) { + $apiResponse = $this->supplementEmbeddedByLinks($apiResponse, trim($expandItem), $doelBinding); + } + return $apiResponse; } @@ -79,4 +85,19 @@ protected function request(string $bsn = '', string $doelBinding = '', string $e return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn)); } + + protected function requestEmbedded(string $url, string $doelBinding): array + { + // return ['overleden' => true]; + $curlArgs = [ + CURLOPT_URL => $url, + CURLOPT_HTTPHEADER => $this->getCurlHeaders($doelBinding), + CURLOPT_SSLCERT => $this->settings->getPublicCertificate(), + CURLOPT_SSLKEY => $this->settings->getPrivateCertificate(), + ]; + + $urlParts = explode('/', $url); + + return $this->handleCurl($curlArgs, CacheService::formatTransientKey($urlParts[8])); + } } diff --git a/src/PrefillGravityForms/Controllers/WeAreFrankController.php b/src/PrefillGravityForms/Controllers/WeAreFrankController.php index c9ba2ee..4d27172 100644 --- a/src/PrefillGravityForms/Controllers/WeAreFrankController.php +++ b/src/PrefillGravityForms/Controllers/WeAreFrankController.php @@ -156,6 +156,24 @@ protected function request(array $data = [], string $bsn = ''): array return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn)); } + /** + * This one breaks the contract, fix later. + */ + protected function requestEmbedded(array $data = [], string $bsn = ''): array + { + $curlArgs = [ + CURLOPT_URL => $this->settings->getBaseURL(), + CURLOPT_POSTFIELDS => json_encode($data), + CURLOPT_HTTPHEADER => [ + 'Content-Type: application/json', + 'Accept: application/json', + sprintf('%s: %s', $this->settings->getAPITokenUsername(), $this->settings->getAPITokenPassword()), + ], + ]; + + return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn)); + } + protected function getDefaultCurlArgs(): array { return [