Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# TODO

- Remove deceased related entity by form setting.
- Refactor to PHP8 branch.
38 changes: 38 additions & 0 deletions src/PrefillGravityForms/Abstracts/GetController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace OWC\PrefillGravityForms\Abstracts;

use OWC\PrefillGravityForms\Controllers\BaseController;

abstract class GetController extends BaseController
{
/**
* 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['_embedded'][$embedType])) {
return $apiResponse;
}

foreach ($apiResponse['_embedded'][$embedType] as $key => $embeddedItem) {
if (! isset($embeddedItem['_links']['ingeschrevenPersoon']['href'])) {
continue;
}

$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['_links']['ingeschrevenPersoon']['href']), $doelBinding);

// @todo: do this conditionally based on setting.
if (true === ($response['overlijden']['indicatieOverleden'] ?? false)) {
unset($apiResponse['_embedded'][$embedType][$key]);
}
}

return $apiResponse;
}

abstract protected function requestEmbedded(string $url, string $doelBinding): array;
}
44 changes: 44 additions & 0 deletions src/PrefillGravityForms/Abstracts/PostController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

declare(strict_types=1);

namespace OWC\PrefillGravityForms\Abstracts;

use OWC\PrefillGravityForms\Controllers\BaseController;

abstract class PostController extends BaseController
{
/**
* 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 = ''): array
{
if (! isset($apiResponse[$embedType])) {
return $apiResponse;
}

foreach ($apiResponse[$embedType] as $key => $embeddedItem) {
if (! isset($embeddedItem['burgerservicenummer']) || ! is_numeric($embeddedItem['burgerservicenummer'])) {
continue;
}

$response = $this->requestEmbedded((string) $embeddedItem['burgerservicenummer']);
$personData = $response['personen'] ?? [];
$firstPerson = reset($personData); // Response is in a multidimensional array which differs from other suppliers.

if (! is_array($firstPerson) || 0 === count($firstPerson)) {
continue;
}

// @todo: do this conditionally based on setting.
if ('overlijden' === ($firstPerson['opschortingBijhouding']['reden']['omschrijving'] ?? '')) {
unset($apiResponse[$embedType][$key]);
}
}

return $apiResponse;
}

abstract protected function requestEmbedded(string $bsn): array;
}
20 changes: 19 additions & 1 deletion src/PrefillGravityForms/Controllers/EnableUController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

namespace OWC\PrefillGravityForms\Controllers;

use OWC\PrefillGravityForms\Abstracts\GetController;
use OWC\PrefillGravityForms\Services\CacheService;

class EnableUController extends BaseController
class EnableUController extends GetController
{
public function handle(array $form): array
{
Expand Down Expand Up @@ -65,6 +66,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;
}

Expand All @@ -77,4 +82,17 @@ 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),
];

$urlParts = explode('/', $url);
$bsn = is_array($urlParts) && 0 < count($urlParts) ? end($urlParts) : '';

return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn));
}
}
22 changes: 21 additions & 1 deletion src/PrefillGravityForms/Controllers/PinkRoccadeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

namespace OWC\PrefillGravityForms\Controllers;

use OWC\PrefillGravityForms\Abstracts\GetController;
use OWC\PrefillGravityForms\Services\CacheService;

class PinkRoccadeController extends BaseController
class PinkRoccadeController extends GetController
{
public function handle(array $form): array
{
Expand Down Expand Up @@ -65,6 +66,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;
}

Expand All @@ -79,4 +84,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
{
$curlArgs = [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $this->getCurlHeaders($doelBinding),
CURLOPT_SSLCERT => $this->settings->getPublicCertificate(),
CURLOPT_SSLKEY => $this->settings->getPrivateCertificate(),
];

$urlParts = explode('/', $url);
$bsn = is_array($urlParts) && 0 < count($urlParts) ? end($urlParts) : '';

return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn));
}
}
23 changes: 22 additions & 1 deletion src/PrefillGravityForms/Controllers/VrijBRPController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

namespace OWC\PrefillGravityForms\Controllers;

use OWC\PrefillGravityForms\Abstracts\GetController;
use OWC\PrefillGravityForms\Services\CacheService;

class VrijBRPController extends BaseController
class VrijBRPController extends GetController
{
public function handle(array $form): array
{
Expand All @@ -15,6 +16,7 @@ public function handle(array $form): array
}

$bsn = $this->getBSN();
// $bsn = '900231038';

if ('' === $bsn) {
return $form;
Expand Down Expand Up @@ -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;
}

Expand All @@ -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
{
$curlArgs = [
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $this->getCurlHeaders($doelBinding),
CURLOPT_SSLCERT => $this->settings->getPublicCertificate(),
CURLOPT_SSLKEY => $this->settings->getPrivateCertificate(),
];

$urlParts = explode('/', $url);
$bsn = is_array($urlParts) && 0 < count($urlParts) ? end($urlParts) : '';

return $this->handleCurl($curlArgs, CacheService::formatTransientKey($bsn));
}
}
39 changes: 30 additions & 9 deletions src/PrefillGravityForms/Controllers/WeAreFrankController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
namespace OWC\PrefillGravityForms\Controllers;

use Exception;
use OWC\PrefillGravityForms\Abstracts\PostController;
use OWC\PrefillGravityForms\Services\CacheService;

class WeAreFrankController extends BaseController
class WeAreFrankController extends PostController
{
public function handle(array $form): array
{
Expand All @@ -22,9 +23,7 @@ public function handle(array $form): array
}

$expand = rgar($form, 'owc-iconnect-expand', '');
$preparedData = $this->prepareData($bsn, $expand);

$firstPerson = $this->fetchPersonData($preparedData, $bsn);
$firstPerson = $this->fetchPersonData($bsn, $expand);

if (empty($firstPerson)) {
return $form;
Expand All @@ -45,7 +44,7 @@ protected function makeRequest(): array

$preparedData = $this->prepareData($bsn);

return $this->fetchPersonData($preparedData, $bsn);
return $this->fetchPersonData($bsn);
}

/**
Expand Down Expand Up @@ -120,9 +119,9 @@ protected function extractBSN(array $response): string
return (string) $bsn;
}

protected function fetchPersonData(array $preparedData, string $bsn): array
protected function fetchPersonData(string $bsn, string $expand = ''): array
{
$apiResponse = $this->request($preparedData, $bsn);
$apiResponse = $this->request($bsn, $expand);
$personData = $apiResponse['personen'] ?? [];
$firstPerson = reset($personData); // Response is in a multidimensional array which differs from other suppliers.

Expand All @@ -138,14 +137,36 @@ protected function fetchPersonData(array $preparedData, string $bsn): array
return [];
}

foreach (array_filter(explode(',', $expand)) as $expandItem) {
$firstPerson = $this->supplementEmbeddedByLinks($firstPerson, trim($expandItem));
}

return $firstPerson;
}

protected function request(array $data = [], string $bsn = ''): array
protected function request(string $bsn = '', string $expand = ''): array
{
$curlArgs = [
CURLOPT_URL => $this->settings->getBaseURL(),
CURLOPT_POSTFIELDS => json_encode($this->prepareData($bsn, $expand)),
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));
}

/**
* This one breaks the contract, fix later.
*/
protected function requestEmbedded(string $bsn = ''): array
{
$curlArgs = [
CURLOPT_URL => $this->settings->getBaseURL(),
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_POSTFIELDS => json_encode($this->prepareData($bsn)),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Accept: application/json',
Expand Down