PluginProbe
The Innovative Form Builder – IvyForms / 1.5
The Innovative Form Builder – IvyForms v1.5
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / backend / src / Services / Payment / SquareBuyerInfoBuilder.php

SquareBuyerInfoBuilder.php in The Innovative Form Builder – IvyForms 1.5, at backend/src/Services/Payment/SquareBuyerInfoBuilder.php

159 lines 4.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace IvyForms\Services\Payment;
4
5 /**
6 * Builds Square buyer payload fields from form submission values.
7 */
8 class SquareBuyerInfoBuilder
9 {
10 /**
11 * @param array<string, mixed> $squareFormSettings
12 * @param array<string, mixed> $submissionByTypeIndex
13 * @param array<int, object> $formFields
14 * @param array<int|string, mixed> $submissionData Field-id keyed submission values
15 * @return array<string, mixed>
16 */
17 public static function build(
18 array $squareFormSettings,
19 array $submissionByTypeIndex,
20 array $formFields = [],
21 array $submissionData = []
22 ): array {
23 $buyerInfo = [];
24 $source = $submissionData !== [] ? $submissionData : $submissionByTypeIndex;
25
26 $email = self::mappedEmail(
27 $squareFormSettings,
28 $submissionByTypeIndex,
29 $formFields,
30 $source
31 );
32 if ($email !== '') {
33 $buyerInfo['email'] = $email;
34 }
35
36 $nameParts = self::mappedNameParts(
37 $squareFormSettings,
38 $submissionByTypeIndex,
39 $formFields,
40 $source
41 );
42 if ($nameParts !== null) {
43 $buyerInfo['billingAddress'] = $nameParts;
44 }
45
46 $addressValue = SquareBuyerSubmissionValues::mappedValue(
47 (string) ($squareFormSettings['billingAddressField'] ?? ''),
48 $submissionByTypeIndex,
49 $formFields,
50 $source
51 );
52 if (is_array($addressValue)) {
53 $buyerInfo['billingAddress'] = self::mergeBillingAddress(
54 $buyerInfo['billingAddress'] ?? [],
55 $addressValue
56 );
57 }
58
59 return $buyerInfo;
60 }
61
62 /**
63 * @param array<string, mixed> $buyerInfo
64 */
65 public static function customerName(array $buyerInfo): ?string
66 {
67 $fromAddress = self::billingFullName($buyerInfo);
68 if ($fromAddress !== null) {
69 return $fromAddress;
70 }
71
72 $email = sanitize_email((string) ($buyerInfo['email'] ?? ''));
73
74 return $email !== '' ? $email : null;
75 }
76
77 /**
78 * @param array<string, mixed> $squareFormSettings
79 * @param array<string, mixed> $submissionByTypeIndex
80 * @param array<int, object> $formFields
81 * @param array<int|string, mixed> $source
82 */
83 private static function mappedEmail(
84 array $squareFormSettings,
85 array $submissionByTypeIndex,
86 array $formFields,
87 array $source
88 ): string {
89 return sanitize_email((string) (SquareBuyerSubmissionValues::mappedValue(
90 (string) ($squareFormSettings['buyerEmailField'] ?? ''),
91 $submissionByTypeIndex,
92 $formFields,
93 $source
94 ) ?? ''));
95 }
96
97 /**
98 * @param array<string, mixed> $squareFormSettings
99 * @param array<string, mixed> $submissionByTypeIndex
100 * @param array<int, object> $formFields
101 * @param array<int|string, mixed> $source
102 * @return array{first_name: string, last_name: string}|null
103 */
104 private static function mappedNameParts(
105 array $squareFormSettings,
106 array $submissionByTypeIndex,
107 array $formFields,
108 array $source
109 ): ?array {
110 $nameKey = (string) ($squareFormSettings['billingNameField'] ?? '');
111
112 return SquareBuyerSubmissionValues::nameParts(
113 SquareBuyerSubmissionValues::mappedValue(
114 $nameKey,
115 $submissionByTypeIndex,
116 $formFields,
117 $source
118 ),
119 $nameKey,
120 $formFields,
121 $source
122 );
123 }
124
125 /**
126 * @param array<string, mixed> $billingAddress
127 * @param array<string, mixed> $addressValue
128 * @return array<string, mixed>
129 */
130 private static function mergeBillingAddress(array $billingAddress, array $addressValue): array
131 {
132 return array_merge($billingAddress, [
133 'address_line_1' => sanitize_text_field((string) ($addressValue['streetAddress'] ?? '')),
134 'address_line_2' => sanitize_text_field((string) ($addressValue['addressLine2'] ?? '')),
135 'locality' => sanitize_text_field((string) ($addressValue['city'] ?? '')),
136 'administrative_district_level_1' => sanitize_text_field((string) ($addressValue['state'] ?? '')),
137 'postal_code' => sanitize_text_field((string) ($addressValue['zip'] ?? '')),
138 'country' => sanitize_text_field((string) ($addressValue['country'] ?? '')),
139 ]);
140 }
141
142 /**
143 * @param array<string, mixed> $buyerInfo
144 */
145 private static function billingFullName(array $buyerInfo): ?string
146 {
147 $billing = $buyerInfo['billingAddress'] ?? null;
148 if (!is_array($billing)) {
149 return null;
150 }
151
152 $name = trim(
153 (string) ($billing['first_name'] ?? '') . ' ' . (string) ($billing['last_name'] ?? '')
154 );
155
156 return $name !== '' ? $name : null;
157 }
158 }
159