diff --git a/README.md b/README.md index 4747f6a..8b40fd2 100644 --- a/README.md +++ b/README.md @@ -120,3 +120,15 @@ do_action('pg::exception/intercept', $exception, $method) ``` The `$exception` parameter contains the caught exception object. + +### Provide Custom Mapping Options from a Theme Directory + +This plugin includes supplier-specific mapping option files. In version 1 of the "HaalCentraal API", all available fields were returned, even when only a subset was needed. + +Since version 2 of HaalCentraal, this has changed: the goal binding (doelbinding) now determines which fields are returned. This results in a more concise dataset that contains only the necessary fields. Because each municipality (gemeente) can define its own unique goal bindings and corresponding fields, this plugin cannot include all possible mapping configurations by default. + +```php +add_filter('pg::theme/dir_mapping_options', function ($value) { + return __DIR__ . '/templates/owc-prefill/'; +}, 10, 1); +``` diff --git a/config/suppliers.php b/config/suppliers.php index e87bbce..eaf9f5f 100644 --- a/config/suppliers.php +++ b/config/suppliers.php @@ -3,9 +3,12 @@ declare(strict_types=1); return [ - 'enable-u' => 'EnableU', - 'openzaak' => 'OpenZaak', - 'pink-roccade' => 'PinkRoccade', - 'vrij-brp' => 'VrijBRP', - 'we-are-frank' => 'WeAreFrank' + 'mapping' => [ + 'enable-u' => 'EnableU', + 'openzaak' => 'OpenZaak', + 'pink-roccade' => 'PinkRoccade', + 'pink-roccade-v2' => 'PinkRoccadeV2', + 'vrij-brp' => 'VrijBRP', + 'we-are-frank' => 'WeAreFrank', + ] ]; diff --git a/languages/prefill-gravity-forms.pot b/languages/prefill-gravity-forms.pot index 978386a..ed57121 100644 --- a/languages/prefill-gravity-forms.pot +++ b/languages/prefill-gravity-forms.pot @@ -9,7 +9,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-01-08T15:38:42+00:00\n" +"POT-Creation-Date: 2026-01-09T09:41:51+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: prefill-gravity-forms\n" @@ -717,104 +717,120 @@ msgid "Basis URL" msgstr "" #: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:99 +msgid "Verwerking" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:100 +msgid "Uitleg nog te bepalen..." +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:107 +msgid "Gebruiker" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:108 +msgid "Gebruiker die de \"HaalCentraal\" aanroept, meestal \"BurgerZelf\"." +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:115 msgid "Leverancier" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:112 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:128 msgid "Gebruik API authenticatie" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:113 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:129 msgid "Deze authenticatie zal gebruikt worden naast de gebruikelijke authenticatie middels certificaten." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:120 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:136 msgid "Gebruik SSL certificaten" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:121 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:137 msgid "Schakel deze optie in om SSL certificaten te gebruiken voor de communicatie met de API van de leverancier." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:130 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:146 msgid "API sleutel" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:132 -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:162 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:148 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:178 msgid "Vul alleen in als de API van de leverancier dit gebruikt." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:135 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:151 msgid "Sleutel" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:141 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:157 msgid "Header naam" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:146 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:162 msgid "Is vereist als header in HTTP verzoeken." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:160 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:176 msgid "API OAuth 2.0" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:165 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:181 msgid "Gebruikersnaam" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:171 -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:243 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:187 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:259 msgid "Wachtwoord" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:189 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:205 msgid "Gebruikersmodel" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:192 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:208 msgid "Activeer gebruikersmodel" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:193 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:209 msgid "Het Gebruikersmodel (UserModel) bevat gegevens van de ingelogde burger die beschikbaar worden gesteld voor gebruik in templates en weergaven. Meer informatie is te vinden in de README van deze plugin." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:205 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:221 msgid "Berichtenverkeer logboek" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:209 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:225 msgid "Logging inschakelen" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:213 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:229 msgid "Schakel deze optie in om het loggen van foutmeldingen te activeren. Dit kan nuttig zijn voor het opsporen en oplossen van problemen binnen de plug-in." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:218 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:234 msgid "Certificaten" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:221 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:237 msgid "Certificaten hoofd locatie" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:229 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:245 msgid "Publieke locatie certificaten" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:236 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:252 msgid "Privé locatie certificaten" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:248 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:264 msgid "Dit veld mag leeg gelaten worden als er geen wachtwoord vereist is voor het maken van de verzoeken naar de \"Haalcentraal\" API." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:271 +#: src/PrefillGravityForms/GravityForms/GravityFormsAddon.php:287 msgid "Geen certificaat geselecteerd" msgstr "" @@ -822,40 +838,68 @@ msgstr "" msgid "OWC Prefill" msgstr "" +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:17 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:19 #: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:23 -msgid "Breid de resultaten uit met andere entiteiten. Kommagescheiden waardes in vullen. Bijvoorbeeld: 'ouders,partners,kinderen'" -msgstr "" - -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:28 -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:30 -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:34 msgid "Selecteer een leverancier" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:28 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:17 msgid "Kies een leverancier. Let op dat je de inloggegevens ook moet configureren in de algemene instellingen van Gravity Forms." msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:39 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:28 msgid "OpenZaak" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:44 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:33 msgid "EnableU" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:49 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:38 msgid "PinkRoccade" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:54 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:43 msgid "VrijBRP" msgstr "" -#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:59 +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:48 msgid "WeAreFrank!" msgstr "" +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:55 +msgid "Verwerking (V2)" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:56 +msgid "Schrijf de globale instelling over op formulier niveau." +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:62 +msgid "Doelbinding" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:68 +msgid "Uitbreiden (V1)" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:70 +msgid "Breidt de resultaten uit met andere entiteiten. Kommagescheiden waardes in vullen. Bijvoorbeeld: 'ouders,partners,kinderen'. Alleen gebruiken wanneer de doelbinding niet verantwoordelijk is voor het ophalen van extra velden. (vaak alleen voor versie 1 van de HaalCentraal)" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:91 +msgid "Selecteer een mappingbestand uit het thema" +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:92 +msgid "Gebruik een eigen bestand vanuit bijv. een thema om formuliervelden te kunnen mappen." +msgstr "" + +#: src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php:125 +msgid "Selecteer een bestand" +msgstr "" + #: src/PrefillGravityForms/Providers/GravityFormsServiceProvider.php:90 msgid "BRP Prefill velden" msgstr "" diff --git a/resources/js/blocks/personal-data-table/personal-data-row/block.json b/resources/js/blocks/personal-data-table/personal-data-row/block.json index 8208405..add7a7b 100644 --- a/resources/js/blocks/personal-data-table/personal-data-row/block.json +++ b/resources/js/blocks/personal-data-table/personal-data-row/block.json @@ -18,6 +18,10 @@ "label": "" } }, + "goalBinding": { + "type": "string", + "default": "" + }, "selectedOption": { "type": "object", "default": { diff --git a/resources/js/blocks/personal-data-table/personal-data-row/config/supplierOptions.js b/resources/js/blocks/personal-data-table/personal-data-row/config/supplierOptions.js index f02c4f6..83b50e9 100644 --- a/resources/js/blocks/personal-data-table/personal-data-row/config/supplierOptions.js +++ b/resources/js/blocks/personal-data-table/personal-data-row/config/supplierOptions.js @@ -16,6 +16,10 @@ const supplierOptions = [ label: 'PinkRoccade', value: 'PinkRoccade', }, + { + label: 'PinkRoccadeV2', + value: 'PinkRoccadeV2', + }, { label: 'VrijBRP', value: 'VrijBRP', diff --git a/resources/js/blocks/personal-data-table/personal-data-row/edit.js b/resources/js/blocks/personal-data-table/personal-data-row/edit.js index fc3a818..7c10031 100644 --- a/resources/js/blocks/personal-data-table/personal-data-row/edit.js +++ b/resources/js/blocks/personal-data-table/personal-data-row/edit.js @@ -19,7 +19,7 @@ import personalDataOptions from './config/personalDataOptions'; import supplierOptions from './config/supplierOptions'; export default function Edit( { attributes, setAttributes, clientId } ) { - const { selectedSupplier, selectedOption, htmlElement, isChildOfTable } = + const { selectedSupplier, goalBinding, selectedOption, htmlElement, isChildOfTable } = attributes; const { blockParents } = useSelect( ( select ) => ( { @@ -78,6 +78,16 @@ export default function Edit( { attributes, setAttributes, clientId } ) { /> ); + const goalBindingControl = ( + { + setAttributes( { goalBinding: value } ); + } } + /> + ); + const selectPersonalDataControl = ( { selectSupplierControl } + { goalBindingControl } { selectPersonalDataControl } { ! isChildOfTable && selectHtmlElementControl } diff --git a/resources/js/blocks/personal-data-table/personal-data-row/render.php b/resources/js/blocks/personal-data-table/personal-data-row/render.php index fa1eaaa..3001f07 100644 --- a/resources/js/blocks/personal-data-table/personal-data-row/render.php +++ b/resources/js/blocks/personal-data-table/personal-data-row/render.php @@ -2,7 +2,7 @@ use OWC\PrefillGravityForms\Services\PersonalDataService; -$retrievedValue = (new PersonalDataService($attributes['selectedSupplier']['value'] ?? ''))->get($attributes['selectedOption']['value'] ?? ''); +$retrievedValue = (new PersonalDataService($attributes['selectedSupplier']['value'] ?? ''))->get($attributes['selectedOption']['value'] ?? '', $attributes['goalBinding'] ?? ''); if ($attributes['isChildOfTable'] && ! empty($retrievedValue)) : ?> diff --git a/src/PrefillGravityForms/Controllers/BaseController.php b/src/PrefillGravityForms/Controllers/BaseController.php index 6bd7967..3f1aa74 100644 --- a/src/PrefillGravityForms/Controllers/BaseController.php +++ b/src/PrefillGravityForms/Controllers/BaseController.php @@ -46,12 +46,12 @@ protected function isBlockEditor(): bool return method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor(); } - public function get(): array + public function get(string $doelBindig = ''): array { - return static::makeRequest(); + return static::makeRequest($doelBindig); } - abstract protected function makeRequest(): array; + abstract protected function makeRequest(string $doelBindig = ''): array; protected function preFillFields(array $form, array $response): array { @@ -321,18 +321,18 @@ protected function handleCurl(array $args, string $transientKey): array throw new Exception(curl_error($curl)); } - $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE); - - if (200 !== $httpStatus) { - throw new Exception('Request failed', is_int($httpStatus) ? $httpStatus : 500); - } - $response = json_decode($output, true); if (! is_array($response) || [] === $response || json_last_error() !== JSON_ERROR_NONE) { throw new Exception('Something went wrong with decoding of the JSON output.', 500); } + $httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE); + + if (200 !== $httpStatus) { + throw new Exception(sprintf('%s', $decoded['detail'] ?? ($decoded['Error Details'] ?? 'Request failed, error unknown')), is_int($httpStatus) ? $httpStatus : 500); + } + $this->handleTransient($response, $transientKey); return $response; diff --git a/src/PrefillGravityForms/Controllers/EnableUController.php b/src/PrefillGravityForms/Controllers/EnableUController.php index 6a47797..a280a3d 100644 --- a/src/PrefillGravityForms/Controllers/EnableUController.php +++ b/src/PrefillGravityForms/Controllers/EnableUController.php @@ -39,7 +39,7 @@ public function handle(array $form): array return $this->preFillFields($form, $apiResponse); } - protected function makeRequest(): array + protected function makeRequest(string $doelBinding = ''): array { $bsn = $this->getBSN(); @@ -47,7 +47,7 @@ protected function makeRequest(): array return []; } - return $this->fetchApiResponse($bsn); + return $this->fetchApiResponse($bsn, $doelBinding); } protected function fetchApiResponse(string $bsn, string $doelBinding = '', string $expand = ''): array diff --git a/src/PrefillGravityForms/Controllers/PinkRoccadeController.php b/src/PrefillGravityForms/Controllers/PinkRoccadeController.php index 3e14110..c692fcf 100644 --- a/src/PrefillGravityForms/Controllers/PinkRoccadeController.php +++ b/src/PrefillGravityForms/Controllers/PinkRoccadeController.php @@ -39,7 +39,7 @@ public function handle(array $form): array return $this->preFillFields($form, $apiResponse); } - protected function makeRequest(): array + protected function makeRequest(string $doelBinding = ''): array { $bsn = $this->getBSN(); @@ -47,7 +47,7 @@ protected function makeRequest(): array return []; } - return $this->fetchApiResponse($bsn); + return $this->fetchApiResponse($bsn, $doelBinding); } protected function fetchApiResponse(string $bsn, string $doelBinding = '', string $expand = ''): array diff --git a/src/PrefillGravityForms/Controllers/PinkRoccadeV2Controller.php b/src/PrefillGravityForms/Controllers/PinkRoccadeV2Controller.php new file mode 100644 index 0000000..1721727 --- /dev/null +++ b/src/PrefillGravityForms/Controllers/PinkRoccadeV2Controller.php @@ -0,0 +1,126 @@ +getBSN(); + + if (empty($bsn)) { + return $form; + } + + $doelBinding = rgar($form, 'owc-iconnect-doelbinding', ''); + $processing = rgar($form, 'owc-iconnect-processing', ''); + $expand = rgar($form, 'owc-iconnect-expand', ''); + + if (! is_string($doelBinding)) { + $doelBinding = (string) $doelBinding; + } + + $preparedData = $this->prepareData($bsn, $expand); + $apiResponse = $this->fetchApiResponse($preparedData, $doelBinding, $processing); + + if (empty($apiResponse)) { + return $form; + } + + echo $this->disableFormFields(); + + return $this->preFillFields($form, $apiResponse); + } + + protected function makeRequest(string $doelBinding = ''): array + { + $bsn = $this->getBSN(); + + if (empty($bsn)) { + return []; + } + + $preparedData = $this->prepareData($bsn); + + return $this->fetchApiResponse($preparedData, $doelBinding); + } + + /** + * Prepares the data payload for querying a citizen's information using their BSN (Burgerservicenummer). + * + * This method constructs a data array containing the necessary fields for a query. + */ + protected function prepareData(string $bsn): array + { + return [ + 'type' => 'RaadpleegMetBurgerservicenummer', + 'fields' => ['burgerservicenummer'], + 'burgerservicenummer' => [$bsn], + ]; + } + + /** + * Splits the expand parameter into an array of fields. + * + * @param string $expand Comma-separated list of additional fields. + * + * @return array An array of expanded fields. + */ + protected function getExpandFields(string $expand): array + { + return array_filter(explode(',', $expand)); + } + + protected function fetchApiResponse(array $preparedData, string $doelBinding, $processing = ''): array + { + $apiResponse = $this->request($preparedData, $doelBinding, $processing); + $personData = $apiResponse['personen'] ?? []; + $firstPerson = reset($personData); // Response is in a multidimensional array which differs from other suppliers. + + if (isset($apiResponse['status']) || ! is_array($firstPerson) || ! count($firstPerson)) { + $message = 'Retrieving prefill data failed'; + + if (isset($apiResponse['message'])) { + $message = sprintf('%s: %s', $message, $apiResponse['message']); + } + + $this->logError($message, $apiResponse['status'] ?? 500); + + return []; + } + + return $firstPerson; + } + + protected function request(array $data, string $doelBinding, string $processing = ''): array + { + $processing = 0 < strlen($processing) ? $processing : $this->settings->getProcessing(); + + $curlArgs = [ + CURLOPT_URL => $this->settings->getBaseURL(), + CURLOPT_POSTFIELDS => json_encode($data), + CURLOPT_HTTPHEADER => [ + 'Content-Type: application/json', + 'Accept: application/json', + 'x-doelbinding: ' . $doelBinding, + 'x-origin-oin: ' . $this->settings->getNumberOIN(), + 'x-verwerking: ' . $processing, + 'x-gebruiker: ' . $this->settings->getUser(), + ], + ]; + + return $this->handleCurl($curlArgs); + } + + protected function getDefaultCurlArgs(): array + { + return [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => '', + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 0, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => 'POST', + ]; + } diff --git a/src/PrefillGravityForms/Controllers/VrijBRPController.php b/src/PrefillGravityForms/Controllers/VrijBRPController.php index d3082f0..4da71a4 100644 --- a/src/PrefillGravityForms/Controllers/VrijBRPController.php +++ b/src/PrefillGravityForms/Controllers/VrijBRPController.php @@ -39,7 +39,7 @@ public function handle(array $form): array return $this->preFillFields($form, $apiResponse); } - protected function makeRequest(): array + protected function makeRequest(string $doelBinding = ''): array { $bsn = $this->getBSN(); @@ -47,7 +47,7 @@ protected function makeRequest(): array return []; } - return $this->fetchApiResponse($bsn); + return $this->fetchApiResponse($bsn, $doelBinding); } protected function fetchApiResponse(string $bsn, string $doelBinding = '', string $expand = ''): array diff --git a/src/PrefillGravityForms/Controllers/WeAreFrankController.php b/src/PrefillGravityForms/Controllers/WeAreFrankController.php index d88951d..fc9e749 100644 --- a/src/PrefillGravityForms/Controllers/WeAreFrankController.php +++ b/src/PrefillGravityForms/Controllers/WeAreFrankController.php @@ -35,7 +35,7 @@ public function handle(array $form): array return $this->preFillFields($form, $firstPerson); } - protected function makeRequest(): array + protected function makeRequest(string $doelBinding = ''): array { $bsn = $this->getBSN(); diff --git a/src/PrefillGravityForms/Foundation/Helpers.php b/src/PrefillGravityForms/Foundation/Helpers.php index 75ee50e..871f07c 100644 --- a/src/PrefillGravityForms/Foundation/Helpers.php +++ b/src/PrefillGravityForms/Foundation/Helpers.php @@ -75,8 +75,8 @@ function view(string $template, array $vars = []): string */ function get_supplier(array $form, bool $getKey = false): string { - $allowed = config('suppliers', []); - $supplier = $form[sprintf('%s-form-setting-supplier', 'owc')] ?? ''; + $allowed = config('suppliers.mapping', []); + $supplier = $form['owc-form-setting-supplier'] ?? ''; if (! is_array($allowed) || empty($allowed) || empty($supplier)) { return ''; diff --git a/src/PrefillGravityForms/GravityForms/GravityFormsAddon.php b/src/PrefillGravityForms/GravityForms/GravityFormsAddon.php index db8c9b8..2ad0d3f 100644 --- a/src/PrefillGravityForms/GravityForms/GravityFormsAddon.php +++ b/src/PrefillGravityForms/GravityForms/GravityFormsAddon.php @@ -79,24 +79,40 @@ public function plugin_settings_fields(): array return [ [ - 'title' => __('Algemeen', 'prefill-gravity-forms'), + 'title' => esc_html__('Algemeen', 'prefill-gravity-forms'), 'fields' => [ [ - 'label' => __('OIN nummer', 'prefill-gravity-forms'), + 'label' => esc_html__('OIN nummer', 'prefill-gravity-forms'), 'type' => 'text', 'class' => 'medium', 'name' => "{$prefix}oin-number", 'required' => true, ], [ - 'label' => __('Basis URL', 'prefill-gravity-forms'), + 'label' => esc_html__('Basis URL', 'prefill-gravity-forms'), 'type' => 'text', 'class' => 'medium', 'name' => "{$prefix}base-url", 'required' => true, ], [ - 'label' => __('Leverancier', 'prefill-gravity-forms'), + 'label' => esc_html__('Verwerking', 'prefill-gravity-forms'), + 'description' => esc_html__('Uitleg nog te bepalen...', 'prefill-gravity-forms'), + 'type' => 'text', + 'class' => 'medium', + 'name' => "{$prefix}processing", + 'required' => false, + ], + [ + 'label' => esc_html__('Gebruiker', 'prefill-gravity-forms'), + 'description' => esc_html__('Gebruiker die de "HaalCentraal" aanroept, meestal "BurgerZelf".', 'prefill-gravity-forms'), + 'type' => 'text', + 'class' => 'medium', + 'name' => "{$prefix}user", + 'required' => false, + ], + [ + 'label' => esc_html__('Leverancier', 'prefill-gravity-forms'), 'type' => 'select', 'class' => 'medium', 'name' => "{$prefix}supplier", @@ -106,19 +122,19 @@ public function plugin_settings_fields(): array 'label' => $supplier, 'value' => $supplier, ]; - }, array_values(config('suppliers', [])))), + }, array_values(config('suppliers.mapping', [])))), ], [ - 'label' => __('Gebruik API authenticatie', 'prefill-gravity-forms'), - 'description' => __('Deze authenticatie zal gebruikt worden naast de gebruikelijke authenticatie middels certificaten.', 'prefill-gravity-forms'), + 'label' => esc_html__('Gebruik API authenticatie', 'prefill-gravity-forms'), + 'description' => esc_html__('Deze authenticatie zal gebruikt worden naast de gebruikelijke authenticatie middels certificaten.', 'prefill-gravity-forms'), 'type' => 'toggle', 'name' => "{$prefix}api-use-authentication", 'required' => false, 'default_value' => false, ], [ - 'label' => __('Gebruik SSL certificaten', 'prefill-gravity-forms'), - 'description' => __('Schakel deze optie in om SSL certificaten te gebruiken voor de communicatie met de API van de leverancier.', 'prefill-gravity-forms'), + 'label' => esc_html__('Gebruik SSL certificaten', 'prefill-gravity-forms'), + 'description' => esc_html__('Schakel deze optie in om SSL certificaten te gebruiken voor de communicatie met de API van de leverancier.', 'prefill-gravity-forms'), 'type' => 'toggle', 'name' => "{$prefix}use-ssl-certificates", 'required' => false, @@ -127,23 +143,23 @@ public function plugin_settings_fields(): array ], ], [ - 'title' => __('API sleutel', 'prefill-gravity-forms'), + 'title' => esc_html__('API sleutel', 'prefill-gravity-forms'), 'class' => 'gform-settings-panel--half', - 'description' => __('Vul alleen in als de API van de leverancier dit gebruikt.', 'prefill-gravity-forms'), + 'description' => esc_html__('Vul alleen in als de API van de leverancier dit gebruikt.', 'prefill-gravity-forms'), 'fields' => [ [ - 'label' => __('Sleutel', 'prefill-gravity-forms'), + 'label' => esc_html__('Sleutel', 'prefill-gravity-forms'), 'type' => 'text', 'class' => 'medium', 'name' => "{$prefix}api-key", ], [ - 'label' => __('Header naam', 'prefill-gravity-forms'), + 'label' => esc_html__('Header naam', 'prefill-gravity-forms'), 'type' => 'text', 'class' => 'medium', 'name' => "{$prefix}api-key-header-name", 'default_value' => 'x-api-key', - 'description' => __('Is vereist als header in HTTP verzoeken.', 'prefill-gravity-forms'), + 'description' => esc_html__('Is vereist als header in HTTP verzoeken.', 'prefill-gravity-forms'), ], ], 'dependency' => [ @@ -157,9 +173,9 @@ public function plugin_settings_fields(): array ], ], [ - 'title' => __('API OAuth 2.0', 'prefill-gravity-forms'), + 'title' => esc_html__('API OAuth 2.0', 'prefill-gravity-forms'), 'class' => 'gform-settings-panel--half', - 'description' => __('Vul alleen in als de API van de leverancier dit gebruikt.', 'prefill-gravity-forms'), + 'description' => esc_html__('Vul alleen in als de API van de leverancier dit gebruikt.', 'prefill-gravity-forms'), 'fields' => [ [ 'label' => esc_html__('Gebruikersnaam', 'prefill-gravity-forms'), @@ -189,7 +205,7 @@ public function plugin_settings_fields(): array 'title' => esc_html__('Gebruikersmodel', 'prefill-gravity-forms'), 'fields' => [ [ - 'label' => __('Activeer gebruikersmodel', 'prefill-gravity-forms'), + 'label' => esc_html__('Activeer gebruikersmodel', 'prefill-gravity-forms'), 'description' => __( 'Het Gebruikersmodel (UserModel) bevat gegevens van de ingelogde burger die beschikbaar worden gesteld voor gebruik in templates en weergaven. Meer informatie is te vinden in de README van deze plugin.', 'prefill-gravity-forms' @@ -206,7 +222,7 @@ public function plugin_settings_fields(): array 'fields' => [ [ 'name' => "{$prefix}logging-enabled", - 'label' => __('Logging inschakelen', 'prefill-gravity-forms'), + 'label' => esc_html__('Logging inschakelen', 'prefill-gravity-forms'), 'type' => 'toggle', 'required' => false, 'default_value' => false, @@ -215,7 +231,7 @@ public function plugin_settings_fields(): array ], ], [ - 'title' => __('Certificaten', 'prefill-gravity-forms'), + 'title' => esc_html__('Certificaten', 'prefill-gravity-forms'), 'fields' => [ [ 'label' => esc_html__('Certificaten hoofd locatie', 'prefill-gravity-forms'), @@ -240,7 +256,7 @@ public function plugin_settings_fields(): array 'required' => true, ], [ - 'label' => __('Wachtwoord', 'prefill-gravity-forms'), + 'label' => esc_html__('Wachtwoord', 'prefill-gravity-forms'), 'type' => 'text', 'class' => 'medium', 'name' => "{$prefix}passphrase", diff --git a/src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php b/src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php index 3af61e0..9e28719 100644 --- a/src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php +++ b/src/PrefillGravityForms/GravityForms/GravityFormsFormSettings.php @@ -10,18 +10,7 @@ public function addFormSettings(array $fields): array { $fields[] = [ 'title' => esc_html__('OWC Prefill', 'prefill-gravity-forms'), - 'fields' => [ - [ - 'name' => 'owc-iconnect-doelbinding', - 'label' => 'Doelbinding', - 'type' => 'text', - ], - [ - 'name' => 'owc-iconnect-expand', - 'label' => 'Breidt uit', - 'type' => 'text', - 'description' => __('Breid de resultaten uit met andere entiteiten. Kommagescheiden waardes in vullen. Bijvoorbeeld: \'ouders,partners,kinderen\'', 'prefill-gravity-forms'), - ], + 'fields' => array_filter([ [ 'name' => "owc-form-setting-supplier", 'default_value' => "owc-form-setting-supplier-none", @@ -49,6 +38,11 @@ public function addFormSettings(array $fields): array 'label' => __('PinkRoccade', 'prefill-gravity-forms'), 'value' => 'pink-roccade', ], + [ + 'name' => 'owc-form-setting-supplier-pink-roccade-v2', + 'label' => esc_html__('PinkRoccadeV2', 'prefill-gravity-forms'), + 'value' => 'pink-roccade-v2', + ], [ 'name' => "owc-form-setting-supplier-vrij-brp", 'label' => __('VrijBRP', 'prefill-gravity-forms'), @@ -61,9 +55,79 @@ public function addFormSettings(array $fields): array ], ], ], - ], + [ + 'name' => 'owc-iconnect-processing', + 'label' => esc_html__('Verwerking (V2)', 'prefill-gravity-forms'), + 'description' => esc_html__('Schrijf de globale instelling over op formulier niveau.', 'prefill-gravity-forms'), + 'type' => 'text', + 'required' => false, + ], + [ + 'name' => 'owc-iconnect-doelbinding', + 'label' => esc_html__('Doelbinding', 'prefill-gravity-forms'), + 'type' => 'text', + ], + $this->themeMappingOptionsField(), + [ + 'name' => 'owc-iconnect-expand', + 'label' => esc_html__('Uitbreiden (V1)', 'prefill-gravity-forms'), + 'type' => 'text', + 'description' => esc_html__('Breidt de resultaten uit met andere entiteiten. Kommagescheiden waardes in vullen. Bijvoorbeeld: \'ouders,partners,kinderen\'. Alleen gebruiken wanneer de doelbinding niet verantwoordelijk is voor het ophalen van extra velden. (vaak alleen voor versie 1 van de HaalCentraal)', 'prefill-gravity-forms'), + ], + ]), ]; return $fields; } + + /** + * Get the theme mapping options field when there are options available. + */ + private function themeMappingOptionsField(): array + { + $options = $this->getThemeMappingOptions(); + if (is_null($options)) { + return []; + } + + return [ + 'name' => 'owc-iconnect-theme-mapping-options-file', + 'label' => esc_html__('Selecteer een mappingbestand uit het thema', 'prefill-gravity-forms'), + 'description' => esc_html__('Gebruik een eigen bestand vanuit bijv. een thema om formuliervelden te kunnen mappen.', 'prefill-gravity-forms'), + 'type' => 'select', + 'choices' => $options, + 'required' => true, + ]; + } + + /** + * Retrieve theme mapping options (which are file paths) if a directory is provided via the filter. + * The options are derived from the files within the specified directory. + */ + protected function getThemeMappingOptions(): ?array + { + $themeDir = apply_filters('pg::theme/dir_mapping_options', null); + + if (is_null($themeDir) || ! is_dir($themeDir)) { + return null; + } + + $mappingOptions = glob(trailingslashit($themeDir) . '*.php'); + + if (! is_array($mappingOptions) || ! count($mappingOptions)) { + return null; + } + + $mappingOptions = array_map(function ($file) { + return [ + 'label' => basename($file, '.php'), + 'value' => $file, + ]; + }, $mappingOptions); + + return array_merge( + [['label' => esc_html__('Selecteer een bestand', 'prefill-gravity-forms'), 'value' => '0']], + $mappingOptions + ); + } } diff --git a/src/PrefillGravityForms/GravityForms/GravityFormsSettings.php b/src/PrefillGravityForms/GravityForms/GravityFormsSettings.php index 4adb638..2842013 100644 --- a/src/PrefillGravityForms/GravityForms/GravityFormsSettings.php +++ b/src/PrefillGravityForms/GravityForms/GravityFormsSettings.php @@ -62,6 +62,16 @@ public function getNumberOIN(): string return $this->options[$this->prefix . 'oin-number'] ?? ''; } + public function getProcessing(): string + { + return $this->options[$this->prefix . 'processing'] ?? ''; + } + + public function getUser(): string + { + return $this->options[$this->prefix . 'user'] ?? ''; + } + public function useAPIAuthentication(): bool { $value = $this->options[$this->prefix . 'api-use-authentication'] ?? '0'; diff --git a/src/PrefillGravityForms/Services/PersonalDataService.php b/src/PrefillGravityForms/Services/PersonalDataService.php index c1d4692..1bc981c 100644 --- a/src/PrefillGravityForms/Services/PersonalDataService.php +++ b/src/PrefillGravityForms/Services/PersonalDataService.php @@ -32,13 +32,13 @@ private function handleController(): ?BaseController } } - public function get(string $key): string + public function get(string $key, string $doelBinding): string { if (! $this->controller instanceof BaseController || 1 > strlen($key)) { return ''; } - $data = $this->controller->get(); + $data = $this->controller->get($doelBinding); $value = $this->getValueFromNestedArray($this->key($key), $data); return $this->format($key, $value); diff --git a/src/PrefillGravityForms/Traits/Logger.php b/src/PrefillGravityForms/Traits/Logger.php index 1533bcc..ffbc9df 100644 --- a/src/PrefillGravityForms/Traits/Logger.php +++ b/src/PrefillGravityForms/Traits/Logger.php @@ -41,6 +41,6 @@ public function logException(Exception $exception, array $context = []): void return; } - $logger->$method($exception->getMessage(), $context); + $logger->$method(sprintf('Yard | BRP Prefill GravityForms: %s', $exception->getMessage()), $context); } }