Skip to content

Commit 45ef2b8

Browse files
author
Mike van den Hoek
committed
(feat): use decrypted value of prepopulated fields containing a BSN number when hook 'owc_prefill_gravityforms_use_value_bsn_decrypted' is used and set to true.
1 parent d5970f5 commit 45ef2b8

File tree

8 files changed

+86
-97
lines changed

8 files changed

+86
-97
lines changed

CHANGELOG.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
# Changelog
22

3-
- Tested up to: WordPress 6.3.2
3+
- Tested up to: WordPress 6.4.2
4+
5+
## v1.2
6+
7+
### Feat
8+
9+
- Use decrypted value of prepopulated fields containing a BSN number when hook 'owc_prefill_gravityforms_use_value_bsn_decrypted' is used and set to true.
410

511
## v1.1
612

713
### Feat
814

915
- Prefill all advanced date fields.
10-
- Small clean-up/refactoring & run composer format script.
16+
- Small clean-up/refactoring & run composer format script.
1117

1218
## v1.0.17
1319

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# BRP Prefill Gravity Forms
2+
3+
This plug-in facilitates editors to configure form completion by establishing a link between form fields and BRP API data. When prefilling fields with a BSN number, the value is saved encrypted in the database, ensuring the security of stored data. Consequently, both the list and detail pages displaying form entries utilize encrypted values. The behavior can be adjusted using the 'owc_prefill_gravityforms_use_value_bsn_decrypted' filter by setting the return value to true. By using this filter the encrypted values are displayed decrypted. The value is always saved encrypted in the database!
4+
5+
## Example
6+
7+
```
8+
add_filter('owc_prefill_gravityforms_use_value_bsn_decrypted', '__return_true');
9+
```

prefill-gravity-forms.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Plugin Name: Yard | BRP Prefill GravityForms
55
* Plugin URI: https://www.openwebconcept.nl/
66
* Description: Prefill GravityForms fields, based on the dutch BSN number. Retrieve personal information and place these values in the corrensponding fields.
7-
* Version: 1.1
7+
* Version: 1.2
88
* Author: Yard | Digital Agency
99
* Author URI: https://www.yard.nl/
1010
* License: GPL-3.0
@@ -20,7 +20,7 @@
2020
die;
2121
}
2222

23-
define('PG_VERSION', '1.1');
23+
define('PG_VERSION', '1.2');
2424
define('PG_DIR', basename(__DIR__));
2525
define('PG_ROOT_PATH', __DIR__);
2626
define('PG_PLUGIN_SLUG', 'prefill-gravity-forms');

src/PrefillGravityForms/Controllers/BaseController.php

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
namespace OWC\PrefillGravityForms\Controllers;
44

55
use DateTime;
6-
use GF_Field;
76
use Exception;
7+
use GF_Field;
8+
use function OWC\PrefillGravityForms\Foundation\Helpers\view;
89
use OWC\PrefillGravityForms\Foundation\TeamsLogger;
910
use OWC\PrefillGravityForms\GravityForms\GravityFormsSettings;
10-
11+
use function Yard\DigiD\Foundation\Helpers\decrypt;
1112
use function Yard\DigiD\Foundation\Helpers\resolve;
12-
use function OWC\PrefillGravityForms\Foundation\Helpers\view;
13-
use function OWC\PrefillGravityForms\Foundation\Helpers\decrypt;
1413

1514
abstract class BaseController
1615
{
@@ -59,7 +58,7 @@ protected function supplementBSN(string $bsn): string
5958
$requiredLength = 9;
6059
$difference = $requiredLength - $bsnLength;
6160

62-
if ($difference < 1 || $difference > $requiredLength) {
61+
if (1 > $difference || $difference > $requiredLength) {
6362
return $bsn;
6463
}
6564

@@ -83,13 +82,13 @@ protected function preFillFields(array $form, array $response): array
8382
continue;
8483
}
8584

86-
if ($field->type === 'text') {
85+
if ('text' === $field->type) {
8786
$this->handleFieldText($field, $foundValue);
8887

8988
continue;
9089
}
9190

92-
if ($field->type === 'date') {
91+
if ('date' === $field->type) {
9392
$this->handleFieldDate($field, $foundValue);
9493

9594
continue;
@@ -118,7 +117,7 @@ public function explodeDotNotationValue(string $dotNotationString, array $respon
118117
$holder = [];
119118

120119
foreach ($exploded as $key => $item) {
121-
if ($key === 0) {
120+
if (0 === $key) {
122121
// Place the wanted part of the response in $holder.
123122
$holder = $response[$item] ?? '';
124123

@@ -178,7 +177,7 @@ protected function handleFieldDate(GF_Field $field, string $foundValue): void
178177
}
179178

180179
// Field consists of 1 part.
181-
if (empty($field->inputs) || $field->dateType === 'datepicker') {
180+
if (empty($field->inputs) || 'datepicker' === $field->dateType) {
182181
$field->defaultValue = $date->format('d-m-Y');
183182
$field->displayOnly = true;
184183
$field->cssClass = 'owc_prefilled';
@@ -187,7 +186,7 @@ protected function handleFieldDate(GF_Field $field, string $foundValue): void
187186
}
188187

189188
// Field consists of 3 parts which are represented by the input attribute.
190-
if (! empty($field->inputs) && ($field->dateType === 'datefield' || $field->dateType === 'datedropdown')) {
189+
if (! empty($field->inputs) && ('datefield' === $field->dateType || 'datedropdown' === $field->dateType)) {
191190
$field->inputs[0]['defaultValue'] = $date->format('m');
192191
$field->inputs[1]['defaultValue'] = $date->format('d');
193192
$field->inputs[2]['defaultValue'] = $date->format('Y');
@@ -226,7 +225,7 @@ protected function getCurlHeaders(string $doelBinding = ''): array
226225
{
227226
$headers = [
228227
'x-doelbinding: ' . $doelBinding,
229-
'x-origin-oin: ' . $this->settings->getNumberOIN()
228+
'x-origin-oin: ' . $this->settings->getNumberOIN(),
230229
];
231230

232231
if (! empty($this->settings->getAPIKey())) {
@@ -265,7 +264,7 @@ protected function handleCurl(array $args): array
265264
return $decoded;
266265
} catch (\Exception $e) {
267266
return [
268-
'status' => $e->getMessage()
267+
'status' => $e->getMessage(),
269268
];
270269
}
271270
}

src/PrefillGravityForms/Foundation/Cryptor.php

Lines changed: 0 additions & 52 deletions
This file was deleted.

src/PrefillGravityForms/Foundation/Helpers.php

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,6 @@ function resolve($container, $arguments = [])
2424
return \OWC\PrefillGravityForms\Foundation\Plugin::getInstance()->getContainer()->get($container, $arguments);
2525
}
2626

27-
/**
28-
* Encrypt a string.
29-
*/
30-
function encrypt($string): string
31-
{
32-
try {
33-
$encrypted = resolve(\OWC\PrefillGravityForms\Foundation\Cryptor::class)->encrypt($string);
34-
} catch(\Exception $e) {
35-
$encrypted = '';
36-
}
37-
38-
return $encrypted;
39-
}
40-
41-
/**
42-
* Decrypt a string.
43-
*/
44-
function decrypt($string): string
45-
{
46-
try {
47-
$decrypted = resolve(\OWC\PrefillGravityForms\Foundation\Cryptor::class)->decrypt($string);
48-
} catch(\Exception $e) {
49-
$decrypted = '';
50-
}
51-
52-
return $decrypted ?: '';
53-
}
54-
5527
function config(string $setting, $default = '')
5628
{
5729
return resolve('config')->get($setting, $default);

src/PrefillGravityForms/GravityForms/GravityForms.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
namespace OWC\PrefillGravityForms\GravityForms;
44

5+
use GF_Field;
6+
use GFAPI;
57
use function OWC\PrefillGravityForms\Foundation\Helpers\get_supplier;
8+
use function Yard\DigiD\Foundation\Helpers\decrypt;
9+
use function Yard\DigiD\Foundation\Helpers\encrypt;
610

711
class GravityForms
812
{
913
protected string $supplier;
14+
protected bool $shouldDecrypt;
1015

1116
public function preRender(array $form): array
1217
{
@@ -55,4 +60,50 @@ protected function getController(): object
5560

5661
return new $controller();
5762
}
63+
64+
/**
65+
* For security reasons, when populating/prefilling a field with a BSN number, the value is encrypted and securely stored.
66+
*/
67+
public function saveFieldValue(string $value, $lead, GF_Field $field, array $form): string
68+
{
69+
if ('burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
70+
return $value;
71+
}
72+
73+
if (empty($value) || ! is_string($value)) {
74+
return $value;
75+
}
76+
77+
return encrypt($value);
78+
}
79+
80+
/**
81+
* Decrypts the value for display on the Entry list page, only for prepopulated fields containing a BSN number.
82+
*/
83+
public function modifyEntryValue(string $value, int $formID, int $fieldID): string
84+
{
85+
$field = GFAPI::get_field($formID, $fieldID);
86+
87+
if (empty($field->linkedFieldValue) || 'burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
88+
return $value;
89+
}
90+
91+
$shouldDecrypt = apply_filters('owc_prefill_gravityforms_use_value_bsn_decrypted', false);
92+
93+
return $shouldDecrypt ? esc_html(decrypt($value)) : esc_html($value);
94+
}
95+
96+
/**
97+
* Decrypts the value for display on the Entry detail page, only for prepopulated fields containing a BSN number.
98+
*/
99+
public function modifyEntryValueDetail($value, $field, $lead, $form): string
100+
{
101+
if (empty($field->linkedFieldValue) || 'burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
102+
return $value;
103+
}
104+
105+
$shouldDecrypt = apply_filters('owc_prefill_gravityforms_use_value_bsn_decrypted', false);
106+
107+
return $shouldDecrypt ? esc_html(decrypt($value)) : esc_html($value);
108+
}
58109
}

src/PrefillGravityForms/GravityForms/GravityFormsServiceProvider.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@ protected function loadHooks(): void
2020
{
2121
$gravityFormsFieldSettings = new GravityFormsFieldSettings();
2222
$gravityFormsFormSettings = new GravityFormsFormSettings();
23+
$gravityForms = new GravityForms();
2324

24-
$this->plugin->loader->addFilter('gform_pre_render', new GravityForms(), 'preRender');
25+
$this->plugin->loader->addFilter('gform_pre_render', $gravityForms, 'preRender');
2526
$this->plugin->loader->addAction('gform_field_standard_settings', $gravityFormsFieldSettings, 'addSelect', 10, 2);
2627
$this->plugin->loader->addAction('gform_editor_js', $gravityFormsFieldSettings, 'addSelectScript', 10, 0);
2728
$this->plugin->loader->addFilter('gform_form_settings_fields', $gravityFormsFormSettings, 'addFormSettings', 9999, 2);
29+
$this->plugin->loader->addAction('gform_save_field_value', $gravityForms, 'saveFieldValue', 10, 4);
30+
$this->plugin->loader->addFilter('gform_entries_field_value', $gravityForms, 'modifyEntryValue', 10, 3);
31+
$this->plugin->loader->addFilter('gform_entry_field_value', $gravityForms, 'modifyEntryValueDetail', 10, 4);
2832
}
2933

3034
private function registerSettingsAddon(): void

0 commit comments

Comments
 (0)