PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.23.2
GiveWP – Donation Plugin and Fundraising Platform v2.23.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 3 years ago GiveInsertPaymentData.php 3 years ago SubscriptionData.php 3 years ago
FormData.php
215 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 2.22.0 add support for company field
174 * @since 2.19.6
175 * @throws Exception
176 */
177 public function toDonation($donorId): Donation
178 {
179 $donation = new Donation([
180 'status' => DonationStatus::PENDING(),
181 'gatewayId' => $this->paymentGateway,
182 'amount' => Money::fromDecimal($this->price, $this->currency),
183 'donorId' => $donorId,
184 'firstName' => $this->donorInfo->firstName,
185 'lastName' => $this->donorInfo->lastName,
186 'email' => $this->donorInfo->email,
187 'formId' => $this->formId,
188 'formTitle' => $this->formTitle,
189 'billingAddress' => BillingAddress::fromArray([
190 'country' => $this->billingAddress->country,
191 'city' => $this->billingAddress->city,
192 'state' => $this->billingAddress->state,
193 'zip' => $this->billingAddress->postalCode,
194 'address1' => $this->billingAddress->line1,
195 'address2' => $this->billingAddress->line2,
196 ]),
197 'levelId' => $this->priceId,
198 'anonymous' => $this->anonymous,
199 'company' => $this->company
200 ]);
201
202 /**
203 * Since 2018, we have been updating the donor's company field based on their donation.
204 * 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.
205 *
206 * @see https://github.com/impress-org/givewp/issues/2453#issuecomment-373103211
207 */
208 if ($donation->company) {
209 give()->donor_meta->update_meta($donorId, '_give_donor_company', $donation->company);
210 }
211
212 return $donation;
213 }
214 }
215