PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.14.2
GiveWP – Donation Plugin and Fundraising Platform v3.14.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / PaymentGateways / DataTransferObjects / FormData.php
give / src / PaymentGateways / DataTransferObjects Last commit date
FormData.php 2 years ago GiveInsertPaymentData.php 3 years ago SubscriptionData.php 3 years ago
FormData.php
217 lines
1 <?php
2
3 namespace Give\PaymentGateways\DataTransferObjects;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use Give\Donations\Properties\BillingAddress;
8 use Give\Donations\ValueObjects\DonationStatus;
9 use Give\Framework\Support\ValueObjects\Money;
10 use Give\ValueObjects\Address;
11 use Give\ValueObjects\CardInfo;
12 use Give\ValueObjects\DonorInfo;
13
14 /**
15 * Class FormData
16 * @since 2.18.0
17 */
18 final class FormData
19 {
20 /**
21 * @var float
22 */
23 public $price;
24 /**
25 * @var string
26 */
27 public $formTitle;
28 /**
29 * @var string
30 */
31 public $date;
32 /**
33 * @var string
34 */
35 public $purchaseKey;
36 /**
37 * @var string
38 */
39 public $currency;
40 /**
41 * @var array
42 */
43 public $userInfo;
44 /**
45 * @var string
46 */
47 public $paymentGateway;
48 /**
49 * @var string
50 */
51 public $gatewayNonce;
52 /**
53 * @var array
54 */
55 public $postData;
56 /**
57 * @var CardInfo
58 */
59 public $cardInfo;
60 /**
61 * @var int
62 */
63 public $formId;
64 /**
65 * @var string
66 */
67 public $priceId;
68 /**
69 * @var string
70 */
71 public $formIdPrefix;
72 /**
73 * @var string
74 */
75 public $currentUrl;
76 /**
77 * @var string
78 */
79 public $formMinimum;
80 /**
81 * @var string
82 */
83 public $formMaximum;
84 /**
85 * @var string
86 */
87 public $formHash;
88 /**
89 * @var string
90 */
91 public $amount;
92 /**
93 * @var string
94 */
95 public $userId;
96 /**
97 * @var Address
98 */
99 public $billingAddress;
100 /**
101 * @var DonorInfo
102 */
103 public $donorInfo;
104
105 /** @var bool */
106 public $anonymous;
107 /**
108 * @var string|null
109 */
110 public $company;
111
112 /**
113 * Convert data from request into DTO
114 *
115 * @since 2.22.0 add support for company field
116 * @since 2.18.0
117 */
118 public static function fromRequest(array $request): FormData
119 {
120 $self = new static();
121
122 $self->price = $request['price'];
123 $self->date = $request['date'];
124 $self->purchaseKey = $request['purchase_key'];
125 $self->currency = give_get_currency($request['post_data']['give-form-id'], $request);
126 $self->userInfo = $request['user_info'];
127 $self->postData = $request['post_data'];
128 $self->formTitle = $request['post_data']['give-form-title'];
129 $self->formId = (int)$request['post_data']['give-form-id'];
130 $self->priceId = $request['post_data']['give-price-id'] ?? '';
131 $self->formIdPrefix = $request['post_data']['give-form-id-prefix'];
132 $self->currentUrl = $request['post_data']['give-current-url'];
133 $self->formMinimum = $request['post_data']['give-form-minimum'];
134 $self->formMaximum = $request['post_data']['give-form-maximum'];
135 $self->formHash = $request['post_data']['give-form-hash'];
136 $self->amount = $request['post_data']['give-amount'];
137 $self->paymentGateway = $request['post_data']['give-gateway'];
138 $self->gatewayNonce = $request['gateway_nonce'];
139 $self->donorInfo = DonorInfo::fromArray([
140 'wpUserId' => $request['user_info']['id'],
141 'firstName' => $request['user_info']['first_name'],
142 'lastName' => $request['user_info']['last_name'],
143 'email' => $request['user_info']['email'],
144 'honorific' => ! empty($request['user_info']['title']) ? $request['user_info']['title'] : '',
145 'address' => $request['user_info']['address'],
146 ]);
147 $self->cardInfo = CardInfo::fromArray([
148 'name' => $request['card_info']['card_name'],
149 'cvc' => $request['card_info']['card_cvc'],
150 'expMonth' => $request['card_info']['card_exp_month'],
151 'expYear' => $request['card_info']['card_exp_year'],
152 'number' => $request['card_info']['card_number'],
153 ]);
154 $self->billingAddress = Address::fromArray([
155 'line1' => $request['card_info']['card_address'],
156 'line2' => $request['card_info']['card_address_2'],
157 'city' => $request['card_info']['card_city'],
158 'state' => $request['card_info']['card_state'],
159 'country' => $request['card_info']['card_country'],
160 'postalCode' => $request['card_info']['card_zip'],
161 ]);
162
163 $self->anonymous = isset($request['post_data']['give_anonymous_donation']) && (bool)absint(
164 $request['post_data']['give_anonymous_donation']
165 );
166
167 $self->company = !empty($request['post_data']['give_company_name']) ? $request['post_data']['give_company_name'] : null;
168
169 return $self;
170 }
171
172 /**
173 * @since 3.2.0 added support for honorific field
174 * @since 2.22.0 add support for company field
175 * @since 2.19.6
176 * @throws Exception
177 */
178 public function toDonation($donorId): Donation
179 {
180 $donation = new Donation([
181 'status' => DonationStatus::PENDING(),
182 'gatewayId' => $this->paymentGateway,
183 'amount' => Money::fromDecimal($this->price, $this->currency),
184 'donorId' => $donorId,
185 'honorific' => $this->donorInfo->honorific,
186 'firstName' => $this->donorInfo->firstName,
187 'lastName' => $this->donorInfo->lastName,
188 'email' => $this->donorInfo->email,
189 'formId' => $this->formId,
190 'formTitle' => $this->formTitle,
191 'billingAddress' => BillingAddress::fromArray([
192 'country' => $this->billingAddress->country,
193 'city' => $this->billingAddress->city,
194 'state' => $this->billingAddress->state,
195 'zip' => $this->billingAddress->postalCode,
196 'address1' => $this->billingAddress->line1,
197 'address2' => $this->billingAddress->line2,
198 ]),
199 'levelId' => $this->priceId,
200 'anonymous' => $this->anonymous,
201 'company' => $this->company
202 ]);
203
204 /**
205 * Since 2018, we have been updating the donor's company field based on their donation.
206 * The company in donation meta never changes, but the company in donor meta gets updated based on the most recent donation in which that donor supplied a company.
207 *
208 * @see https://github.com/impress-org/givewp/issues/2453#issuecomment-373103211
209 */
210 if ($donation->company) {
211 give()->donor_meta->update_meta($donorId, '_give_donor_company', $donation->company);
212 }
213
214 return $donation;
215 }
216 }
217