-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathGravityForms.php
More file actions
124 lines (97 loc) · 3.34 KB
/
GravityForms.php
File metadata and controls
124 lines (97 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
namespace OWC\PrefillGravityForms\GravityForms;
use GF_Field;
use GFAPI;
use function OWC\PrefillGravityForms\Foundation\Helpers\get_supplier;
use function Yard\DigiD\Foundation\Helpers\decrypt;
use function Yard\DigiD\Foundation\Helpers\encrypt;
class GravityForms
{
protected string $supplier;
protected bool $shouldDecrypt;
public function preRender(array $form): array
{
$this->setSupplier($form);
if (empty($this->supplier)) {
return $form;
}
return $this->handleSupplier($form);
}
protected function setSupplier(array $form)
{
$this->supplier = get_supplier($form);
}
/**
* Compose method name based on supplier and execute.
*/
protected function handleSupplier(array $form): array
{
try {
$instance = $this->getController();
} catch(\Exception $e) {
return $form;
}
if (! method_exists($instance, 'handle')) {
return $form;
}
return $instance->handle($form);
}
/**
* Get controller class based on supplier.
*/
protected function getController(): object
{
$controller = sprintf('OWC\PrefillGravityForms\Controllers\%sController', $this->supplier);
if (! class_exists($controller)) {
throw new \Exception(sprintf('Class %s does not exists', $controller));
}
return new $controller();
}
/**
* For security reasons, when populating/prefilling a field with a BSN number, the value is encrypted and securely stored.
*/
public function saveFieldValue(string $value, $lead, GF_Field $field, array $form): string
{
if ('burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
return $value;
}
if (empty($value) || ! is_string($value)) {
return $value;
}
return encrypt($value);
}
/**
* Decrypts the value for display on the Entry list page, only for prepopulated fields containing a BSN number.
*/
public function modifyEntryValue(string $value, int $formID, int $fieldID): string
{
$field = GFAPI::get_field($formID, $fieldID);
if (empty($field->linkedFieldValue) || 'burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
return $value;
}
$shouldDecrypt = apply_filters('owc_prefill_gravityforms_use_value_bsn_decrypted', false);
if ($shouldDecrypt) {
$value = $this->decryptEncryptedBSN($value);
}
return esc_html($value);
}
/**
* Decrypts the value for display on the Entry detail page, only for prepopulated fields containing a BSN number.
*/
public function modifyEntryValueDetail($value, $field, $lead, $form): string
{
if (empty($field->linkedFieldValue) || 'burgerservicenummer' !== ($field->linkedFieldValue ?? '')) {
return $value;
}
$shouldDecrypt = apply_filters('owc_prefill_gravityforms_use_value_bsn_decrypted', false);
if ($shouldDecrypt) {
$value = $this->decryptEncryptedBSN($value);
}
return esc_html($value);
}
private function decryptEncryptedBSN(string $value): string
{
$decrypted = decrypt($value);
return $decrypted && is_string($decrypted) ? $decrypted : $value;
}
}