Completed
Branch fix-dummy-related-question-qst... (e5efcf)
by
unknown
07:49 queued 03:45
created
payment_methods/Invoice/templates/invoice_intro.template.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 esc_html_e(
4
-    'Invoice is an offline payment method for accepting payments. Payments are processed manually by providing your registrants/attendees with information on how to pay their invoice.',
5
-    'event_espresso'
4
+	'Invoice is an offline payment method for accepting payments. Payments are processed manually by providing your registrants/attendees with information on how to pay their invoice.',
5
+	'event_espresso'
6 6
 );
Please login to merge, or discard this patch.
payment_methods/Paypal_Express/EEG_Paypal_Express.gateway.php 2 patches
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -13,677 +13,677 @@
 block discarded – undo
13 13
 
14 14
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
15 15
 if (! function_exists('mb_strcut')) {
16
-    /**
17
-     * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18
-     * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
19
-     * @param $string
20
-     * @param $start
21
-     * @param $length
22
-     * @return bool|string
23
-     */
24
-    function mb_strcut($string, $start, $length = null)
25
-    {
26
-        return mb_substr($string, $start, $length);
27
-    }
16
+	/**
17
+	 * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18
+	 * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
19
+	 * @param $string
20
+	 * @param $start
21
+	 * @param $length
22
+	 * @return bool|string
23
+	 */
24
+	function mb_strcut($string, $start, $length = null)
25
+	{
26
+		return mb_substr($string, $start, $length);
27
+	}
28 28
 }
29 29
 class EEG_Paypal_Express extends EE_Offsite_Gateway
30 30
 {
31 31
 
32
-    /**
33
-     * Merchant API Username.
34
-     *
35
-     * @var string
36
-     */
37
-    protected $_api_username;
38
-
39
-    /**
40
-     * Merchant API Password.
41
-     *
42
-     * @var string
43
-     */
44
-    protected $_api_password;
45
-
46
-    /**
47
-     * API Signature.
48
-     *
49
-     * @var string
50
-     */
51
-    protected $_api_signature;
52
-
53
-    /**
54
-     * Request Shipping address on PP checkout page.
55
-     *
56
-     * @var string
57
-     */
58
-    protected $_request_shipping_addr;
59
-
60
-    /**
61
-     * Business/personal logo.
62
-     *
63
-     * @var string
64
-     */
65
-    protected $_image_url;
66
-
67
-    /**
68
-     * gateway URL variable
69
-     *
70
-     * @var string
71
-     */
72
-    protected $_base_gateway_url = '';
73
-
74
-
75
-
76
-    /**
77
-     * EEG_Paypal_Express constructor.
78
-     */
79
-    public function __construct()
80
-    {
81
-        $this->_currencies_supported = array(
82
-            'USD',
83
-            'AUD',
84
-            'BRL',
85
-            'CAD',
86
-            'CZK',
87
-            'DKK',
88
-            'EUR',
89
-            'HKD',
90
-            'HUF',
91
-            'ILS',
92
-            'JPY',
93
-            'MYR',
94
-            'MXN',
95
-            'NOK',
96
-            'NZD',
97
-            'PHP',
98
-            'PLN',
99
-            'GBP',
100
-            'RUB',
101
-            'SGD',
102
-            'SEK',
103
-            'CHF',
104
-            'TWD',
105
-            'THB',
106
-            'TRY',
107
-            'INR',
108
-        );
109
-        parent::__construct();
110
-    }
111
-
112
-
113
-
114
-    /**
115
-     * Sets the gateway URL variable based on whether debug mode is enabled or not.
116
-     *
117
-     * @param array $settings_array
118
-     */
119
-    public function set_settings($settings_array)
120
-    {
121
-        parent::set_settings($settings_array);
122
-        // Redirect URL.
123
-        $this->_base_gateway_url = $this->_debug_mode
124
-            ? 'https://api-3t.sandbox.paypal.com/nvp'
125
-            : 'https://api-3t.paypal.com/nvp';
126
-    }
127
-
128
-
129
-
130
-    /**
131
-     * @param EEI_Payment $payment
132
-     * @param array       $billing_info
133
-     * @param string      $return_url
134
-     * @param string      $notify_url
135
-     * @param string      $cancel_url
136
-     * @return \EE_Payment|\EEI_Payment
137
-     * @throws \EE_Error
138
-     */
139
-    public function set_redirection_info(
140
-        $payment,
141
-        $billing_info = array(),
142
-        $return_url = null,
143
-        $notify_url = null,
144
-        $cancel_url = null
145
-    ) {
146
-        if (! $payment instanceof EEI_Payment) {
147
-            $payment->set_gateway_response(
148
-                esc_html__(
149
-                    'Error. No associated payment was found.',
150
-                    'event_espresso'
151
-                )
152
-            );
153
-            $payment->set_status($this->_pay_model->failed_status());
154
-            return $payment;
155
-        }
156
-        $transaction = $payment->transaction();
157
-        if (! $transaction instanceof EEI_Transaction) {
158
-            $payment->set_gateway_response(
159
-                esc_html__(
160
-                    'Could not process this payment because it has no associated transaction.',
161
-                    'event_espresso'
162
-                )
163
-            );
164
-            $payment->set_status($this->_pay_model->failed_status());
165
-            return $payment;
166
-        }
167
-        $gateway_formatter = $this->_get_gateway_formatter();
168
-        $order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
169
-        $primary_registration = $transaction->primary_registration();
170
-        $primary_attendee = $primary_registration instanceof EE_Registration
171
-            ? $primary_registration->attendee()
172
-            : false;
173
-        $locale = explode('-', get_bloginfo('language'));
174
-        // Gather request parameters.
175
-        $token_request_dtls = array(
176
-            'METHOD'                         => 'SetExpressCheckout',
177
-            'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
178
-            'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
179
-            'PAYMENTREQUEST_0_DESC'          => $order_description,
180
-            'RETURNURL'                      => $return_url,
181
-            'CANCELURL'                      => $cancel_url,
182
-            'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
183
-            // Buyer does not need to create a PayPal account to check out.
184
-            // This is referred to as PayPal Account Optional.
185
-            'SOLUTIONTYPE'                   => 'Sole',
186
-            // Locale of the pages displayed by PayPal during Express Checkout.
187
-            'LOCALECODE'                     => $locale[1]
188
-        );
189
-        // Show itemized list.
190
-        $itemized_list = $this->itemize_list($payment, $transaction);
191
-        $token_request_dtls = array_merge($token_request_dtls, $itemized_list);
192
-        // Automatically filling out shipping and contact information.
193
-        if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
194
-            // If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
195
-            $token_request_dtls['NOSHIPPING'] = '2';
196
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
197
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
198
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
199
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
200
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
201
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202
-            $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203
-            $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
-        } elseif (! $this->_request_shipping_addr) {
205
-            // Do not request shipping details on the PP Checkout page.
206
-            $token_request_dtls['NOSHIPPING'] = '1';
207
-            $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208
-        }
209
-        // Used a business/personal logo on the PayPal page.
210
-        if (! empty($this->_image_url)) {
211
-            $token_request_dtls['LOGOIMG'] = $this->_image_url;
212
-        }
213
-        $token_request_dtls = apply_filters(
214
-            'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
215
-            $token_request_dtls,
216
-            $this
217
-        );
218
-        // Request PayPal token.
219
-        $token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
220
-        $token_rstatus = $this->_ppExpress_check_response($token_request_response);
221
-        $response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
222
-            ? $token_rstatus['args']
223
-            : array();
224
-        if ($token_rstatus['status']) {
225
-            // We got the Token so we may continue with the payment and redirect the client.
226
-            $payment->set_details($response_args);
227
-            $gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
228
-            $payment->set_redirect_url(
229
-                $gateway_url
230
-                . '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
231
-                . $response_args['TOKEN']
232
-            );
233
-        } else {
234
-            if (isset($response_args['L_ERRORCODE'])) {
235
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
236
-            } else {
237
-                $payment->set_gateway_response(
238
-                    esc_html__(
239
-                        'Error occurred while trying to setup the Express Checkout.',
240
-                        'event_espresso'
241
-                    )
242
-                );
243
-            }
244
-            $payment->set_details($response_args);
245
-            $payment->set_status($this->_pay_model->failed_status());
246
-        }
247
-        return $payment;
248
-    }
249
-
250
-
251
-
252
-    /**
253
-     * @param array           $update_info {
254
-     * @type string           $gateway_txn_id
255
-     * @type string status an EEMI_Payment status
256
-     *                                     }
257
-     * @param EEI_Transaction $transaction
258
-     * @return EEI_Payment
259
-     */
260
-    public function handle_payment_update($update_info, $transaction)
261
-    {
262
-        $payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
263
-        if ($payment instanceof EEI_Payment) {
264
-            $this->log(array('Return from Authorization' => $update_info), $payment);
265
-            $transaction = $payment->transaction();
266
-            if (! $transaction instanceof EEI_Transaction) {
267
-                $payment->set_gateway_response(
268
-                    esc_html__(
269
-                        'Could not process this payment because it has no associated transaction.',
270
-                        'event_espresso'
271
-                    )
272
-                );
273
-                $payment->set_status($this->_pay_model->failed_status());
274
-                return $payment;
275
-            }
276
-            $primary_registrant = $transaction->primary_registration();
277
-            $payment_details = $payment->details();
278
-            // Check if we still have the token.
279
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280
-                $payment->set_status($this->_pay_model->failed_status());
281
-                return $payment;
282
-            }
283
-            $cdetails_request_dtls = array(
284
-                'METHOD' => 'GetExpressCheckoutDetails',
285
-                'TOKEN'  => $payment_details['TOKEN'],
286
-            );
287
-            // Request Customer Details.
288
-            $cdetails_request_response = $this->_ppExpress_request(
289
-                $cdetails_request_dtls,
290
-                'Customer Details',
291
-                $payment
292
-            );
293
-            $cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
294
-            $cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
295
-                ? $cdetails_rstatus['args']
296
-                : array();
297
-            if ($cdetails_rstatus['status']) {
298
-                // We got the PayerID so now we can Complete the transaction.
299
-                $docheckout_request_dtls = array(
300
-                    'METHOD'                         => 'DoExpressCheckoutPayment',
301
-                    'PAYERID'                        => $cdata_response_args['PAYERID'],
302
-                    'TOKEN'                          => $payment_details['TOKEN'],
303
-                    'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
304
-                    'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
305
-                    'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
306
-                );
307
-                 // Include itemized list.
308
-                $itemized_list = $this->itemize_list(
309
-                    $payment,
310
-                    $transaction,
311
-                    $cdata_response_args
312
-                );
313
-                $docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
314
-                // Payment Checkout/Capture.
315
-                $docheckout_request_response = $this->_ppExpress_request(
316
-                    $docheckout_request_dtls,
317
-                    'Do Payment',
318
-                    $payment
319
-                );
320
-                $docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
321
-                $docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
322
-                    ? $docheckout_rstatus['args']
323
-                    : array();
324
-                if ($docheckout_rstatus['status']) {
325
-                    // All is well, payment approved.
326
-                    $primary_registration_code = $primary_registrant instanceof EE_Registration ?
327
-                        $primary_registrant->reg_code()
328
-                        : '';
329
-                    $payment->set_extra_accntng($primary_registration_code);
330
-                    $payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
331
-                        ? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
332
-                        : 0);
333
-                    $payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
334
-                        ? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
335
-                        : null);
336
-                    $payment->set_details($cdata_response_args);
337
-                    $payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
338
-                        ? $docheckout_response_args['PAYMENTINFO_0_ACK']
339
-                        : '');
340
-                    $payment->set_status($this->_pay_model->approved_status());
341
-                } else {
342
-                    if (isset($docheckout_response_args['L_ERRORCODE'])) {
343
-                        $payment->set_gateway_response(
344
-                            $docheckout_response_args['L_ERRORCODE']
345
-                            . '; '
346
-                            . $docheckout_response_args['L_SHORTMESSAGE']
347
-                        );
348
-                    } else {
349
-                        $payment->set_gateway_response(
350
-                            esc_html__(
351
-                                'Error occurred while trying to Capture the funds.',
352
-                                'event_espresso'
353
-                            )
354
-                        );
355
-                    }
356
-                    $payment->set_details($docheckout_response_args);
357
-                    $payment->set_status($this->_pay_model->declined_status());
358
-                }
359
-            } else {
360
-                if (isset($cdata_response_args['L_ERRORCODE'])) {
361
-                    $payment->set_gateway_response(
362
-                        $cdata_response_args['L_ERRORCODE']
363
-                        . '; '
364
-                        . $cdata_response_args['L_SHORTMESSAGE']
365
-                    );
366
-                } else {
367
-                    $payment->set_gateway_response(
368
-                        esc_html__(
369
-                            'Error occurred while trying to get payment Details from PayPal.',
370
-                            'event_espresso'
371
-                        )
372
-                    );
373
-                }
374
-                $payment->set_details($cdata_response_args);
375
-                $payment->set_status($this->_pay_model->failed_status());
376
-            }
377
-        } else {
378
-            $payment->set_gateway_response(
379
-                esc_html__(
380
-                    'Error occurred while trying to process the payment.',
381
-                    'event_espresso'
382
-                )
383
-            );
384
-            $payment->set_status($this->_pay_model->failed_status());
385
-        }
386
-        return $payment;
387
-    }
388
-
389
-
390
-
391
-    /**
392
-     *  Make a list of items that are in the giver transaction.
393
-     *
394
-     * @param EEI_Payment     $payment
395
-     * @param EEI_Transaction $transaction
396
-     * @param array           $request_response_args Data from a previous communication with PP.
397
-     * @return array
398
-     */
399
-    public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
400
-    {
401
-        $itemized_list = array();
402
-        $gateway_formatter = $this->_get_gateway_formatter();
403
-        // If we have data from a previous communication with PP (on this transaction) we may use that for our list...
404
-        if (
405
-            ! empty($request_response_args)
406
-            && array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
407
-            && array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
408
-        ) {
409
-            foreach ($request_response_args as $arg_key => $arg_val) {
410
-                if (
411
-                    strpos($arg_key, 'PAYMENTREQUEST_') !== false
412
-                    && strpos($arg_key, 'NOTIFYURL') === false
413
-                ) {
414
-                    $itemized_list[ $arg_key ] = $arg_val;
415
-                }
416
-            }
417
-            // If we got only a few Items then something is not right.
418
-            if (count($itemized_list) > 2) {
419
-                return $itemized_list;
420
-            } else {
421
-                if (WP_DEBUG) {
422
-                    throw new EE_Error(
423
-                        sprintf(
424
-                            esc_html__(
425
-                                // @codingStandardsIgnoreStart
426
-                                'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
427
-                                // @codingStandardsIgnoreEnd
428
-                                'event_espresso'
429
-                            ),
430
-                            wp_json_encode($itemized_list)
431
-                        )
432
-                    );
433
-                }
434
-                // Reset the list and log an error, maybe allow to try and generate a new list (below).
435
-                $itemized_list = array();
436
-                $this->log(
437
-                    array(
438
-                        (string) esc_html__(
439
-                            'Could not generate a proper item list with:',
440
-                            'event_espresso'
441
-                        ) => $request_response_args
442
-                    ),
443
-                    $payment
444
-                );
445
-            }
446
-        }
447
-        // ...otherwise we generate a new list for this transaction.
448
-        if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
449
-            $item_num = 0;
450
-            $itemized_sum = 0;
451
-            $total_line_items = $transaction->total_line_item();
452
-            // Go through each item in the list.
453
-            foreach ($total_line_items->get_items() as $line_item) {
454
-                if ($line_item instanceof EE_Line_Item) {
455
-                    // PayPal doesn't like line items with 0.00 amount, so we may skip those.
456
-                    if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
457
-                        continue;
458
-                    }
459
-                    $unit_price = $line_item->unit_price();
460
-                    $line_item_quantity = $line_item->quantity();
461
-                    // This is a discount.
462
-                    if ($line_item->is_percent()) {
463
-                        $unit_price = $line_item->total();
464
-                        $line_item_quantity = 1;
465
-                    }
466
-                    // Item Name.
467
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
468
-                        $gateway_formatter->formatLineItemName($line_item, $payment),
469
-                        0,
470
-                        127
471
-                    );
472
-                    // Item description.
473
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
474
-                        $gateway_formatter->formatLineItemDesc($line_item, $payment),
475
-                        0,
476
-                        127
477
-                    );
478
-                    // Cost of individual item.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
480
-                    // Item Number.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
482
-                    // Item quantity.
483
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
484
-                    // Digital item is sold.
485
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
486
-                    $itemized_sum += $line_item->total();
487
-                    ++$item_num;
488
-                }
489
-            }
490
-            // Item's sales S/H and tax amount.
491
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
492
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
493
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
494
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
495
-            $itemized_sum_diff_from_txn_total = round(
496
-                $transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
497
-                2
498
-            );
499
-            // If we were not able to recognize some item like promotion, surcharge or cancellation,
500
-            // add the difference as an extra line item.
501
-            if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502
-                // Item Name.
503
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
504
-                    esc_html__(
505
-                        'Other (promotion/surcharge/cancellation)',
506
-                        'event_espresso'
507
-                    ),
508
-                    0,
509
-                    127
510
-                );
511
-                // Item description.
512
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
513
-                // Cost of individual item.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
515
-                    $itemized_sum_diff_from_txn_total
516
-                );
517
-                // Item Number.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
519
-                // Item quantity.
520
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
521
-                // Digital item is sold.
522
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
523
-                $item_num++;
524
-            }
525
-        } else {
526
-            // Just one Item.
527
-            // Item Name.
528
-            $itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
529
-                $gateway_formatter->formatPartialPaymentLineItemName($payment),
530
-                0,
531
-                127
532
-            );
533
-            // Item description.
534
-            $itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
535
-                $gateway_formatter->formatPartialPaymentLineItemDesc($payment),
536
-                0,
537
-                127
538
-            );
539
-            // Cost of individual item.
540
-            $itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
541
-            // Item Number.
542
-            $itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
543
-            // Item quantity.
544
-            $itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
545
-            // Digital item is sold.
546
-            $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
547
-            // Item's sales S/H and tax amount.
548
-            $itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
549
-            $itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
550
-            $itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
551
-            $itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
552
-        }
553
-        return $itemized_list;
554
-    }
555
-
556
-
557
-
558
-    /**
559
-     *  Make the Express checkout request.
560
-     *
561
-     * @param array       $request_params
562
-     * @param string      $request_text
563
-     * @param EEI_Payment $payment
564
-     * @return mixed
565
-     */
566
-    public function _ppExpress_request($request_params, $request_text, $payment)
567
-    {
568
-        $request_dtls = array(
569
-            'VERSION' => '204.0',
570
-            'USER' => $this->_api_username,
571
-            'PWD' => $this->_api_password,
572
-            'SIGNATURE' => $this->_api_signature,
573
-            // EE will blow up if you change this
574
-            'BUTTONSOURCE' => 'EventEspresso_SP',
575
-        );
576
-        $dtls = array_merge($request_dtls, $request_params);
577
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
578
-        // Request Customer Details.
579
-        $request_response = wp_remote_post(
580
-            $this->_base_gateway_url,
581
-            array(
582
-                'method'      => 'POST',
583
-                'timeout'     => 45,
584
-                'httpversion' => '1.1',
585
-                'cookies'     => array(),
586
-                'headers'     => array(),
587
-                'body'        => http_build_query($dtls, '', '&'),
588
-            )
589
-        );
590
-        // Log the response.
591
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
592
-        return $request_response;
593
-    }
594
-
595
-
596
-
597
-    /**
598
-     *  Check the response status.
599
-     *
600
-     * @param mixed $request_response
601
-     * @return array
602
-     */
603
-    public function _ppExpress_check_response($request_response)
604
-    {
605
-        if (is_wp_error($request_response) || empty($request_response['body'])) {
606
-            // If we got here then there was an error in this request.
607
-            return array('status' => false, 'args' => $request_response);
608
-        }
609
-        $response_args = array();
610
-        parse_str(urldecode($request_response['body']), $response_args);
611
-        if (! isset($response_args['ACK'])) {
612
-            return array('status' => false, 'args' => $request_response);
613
-        }
614
-        if (
615
-            (
616
-                isset($response_args['PAYERID'])
617
-                || isset($response_args['TOKEN'])
618
-                || isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
619
-                || (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
620
-            )
621
-            && in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
622
-        ) {
623
-            // Response status OK, return response parameters for further processing.
624
-            return array('status' => true, 'args' => $response_args);
625
-        }
626
-        $errors = $this->_get_errors($response_args);
627
-        return array('status' => false, 'args' => $errors);
628
-    }
629
-
630
-
631
-
632
-    /**
633
-     *  Log a "Cleared" request.
634
-     *
635
-     * @param array       $request
636
-     * @param EEI_Payment $payment
637
-     * @param string      $info
638
-     * @return void
639
-     */
640
-    private function _log_clean_request($request, $payment, $info)
641
-    {
642
-        $cleaned_request_data = $request;
643
-        unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
644
-        $this->log(array($info => $cleaned_request_data), $payment);
645
-    }
646
-
647
-
648
-
649
-    /**
650
-     *  Get error from the response data.
651
-     *
652
-     * @param array $data_array
653
-     * @return array
654
-     */
655
-    private function _get_errors($data_array)
656
-    {
657
-        $errors = array();
658
-        $n = 0;
659
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
-                ? $data_array[ "L_ERRORCODE{$n}" ]
662
-                : '';
663
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
665
-                : '';
666
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
668
-                : '';
669
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
671
-                : '';
672
-            if ($n === 0) {
673
-                $errors = array(
674
-                    'L_ERRORCODE'    => $l_error_code,
675
-                    'L_SHORTMESSAGE' => $l_short_message,
676
-                    'L_LONGMESSAGE'  => $l_long_message,
677
-                    'L_SEVERITYCODE' => $l_severity_code,
678
-                );
679
-            } else {
680
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
684
-            }
685
-            $n++;
686
-        }
687
-        return $errors;
688
-    }
32
+	/**
33
+	 * Merchant API Username.
34
+	 *
35
+	 * @var string
36
+	 */
37
+	protected $_api_username;
38
+
39
+	/**
40
+	 * Merchant API Password.
41
+	 *
42
+	 * @var string
43
+	 */
44
+	protected $_api_password;
45
+
46
+	/**
47
+	 * API Signature.
48
+	 *
49
+	 * @var string
50
+	 */
51
+	protected $_api_signature;
52
+
53
+	/**
54
+	 * Request Shipping address on PP checkout page.
55
+	 *
56
+	 * @var string
57
+	 */
58
+	protected $_request_shipping_addr;
59
+
60
+	/**
61
+	 * Business/personal logo.
62
+	 *
63
+	 * @var string
64
+	 */
65
+	protected $_image_url;
66
+
67
+	/**
68
+	 * gateway URL variable
69
+	 *
70
+	 * @var string
71
+	 */
72
+	protected $_base_gateway_url = '';
73
+
74
+
75
+
76
+	/**
77
+	 * EEG_Paypal_Express constructor.
78
+	 */
79
+	public function __construct()
80
+	{
81
+		$this->_currencies_supported = array(
82
+			'USD',
83
+			'AUD',
84
+			'BRL',
85
+			'CAD',
86
+			'CZK',
87
+			'DKK',
88
+			'EUR',
89
+			'HKD',
90
+			'HUF',
91
+			'ILS',
92
+			'JPY',
93
+			'MYR',
94
+			'MXN',
95
+			'NOK',
96
+			'NZD',
97
+			'PHP',
98
+			'PLN',
99
+			'GBP',
100
+			'RUB',
101
+			'SGD',
102
+			'SEK',
103
+			'CHF',
104
+			'TWD',
105
+			'THB',
106
+			'TRY',
107
+			'INR',
108
+		);
109
+		parent::__construct();
110
+	}
111
+
112
+
113
+
114
+	/**
115
+	 * Sets the gateway URL variable based on whether debug mode is enabled or not.
116
+	 *
117
+	 * @param array $settings_array
118
+	 */
119
+	public function set_settings($settings_array)
120
+	{
121
+		parent::set_settings($settings_array);
122
+		// Redirect URL.
123
+		$this->_base_gateway_url = $this->_debug_mode
124
+			? 'https://api-3t.sandbox.paypal.com/nvp'
125
+			: 'https://api-3t.paypal.com/nvp';
126
+	}
127
+
128
+
129
+
130
+	/**
131
+	 * @param EEI_Payment $payment
132
+	 * @param array       $billing_info
133
+	 * @param string      $return_url
134
+	 * @param string      $notify_url
135
+	 * @param string      $cancel_url
136
+	 * @return \EE_Payment|\EEI_Payment
137
+	 * @throws \EE_Error
138
+	 */
139
+	public function set_redirection_info(
140
+		$payment,
141
+		$billing_info = array(),
142
+		$return_url = null,
143
+		$notify_url = null,
144
+		$cancel_url = null
145
+	) {
146
+		if (! $payment instanceof EEI_Payment) {
147
+			$payment->set_gateway_response(
148
+				esc_html__(
149
+					'Error. No associated payment was found.',
150
+					'event_espresso'
151
+				)
152
+			);
153
+			$payment->set_status($this->_pay_model->failed_status());
154
+			return $payment;
155
+		}
156
+		$transaction = $payment->transaction();
157
+		if (! $transaction instanceof EEI_Transaction) {
158
+			$payment->set_gateway_response(
159
+				esc_html__(
160
+					'Could not process this payment because it has no associated transaction.',
161
+					'event_espresso'
162
+				)
163
+			);
164
+			$payment->set_status($this->_pay_model->failed_status());
165
+			return $payment;
166
+		}
167
+		$gateway_formatter = $this->_get_gateway_formatter();
168
+		$order_description = mb_strcut($gateway_formatter->formatOrderDescription($payment), 0, 127);
169
+		$primary_registration = $transaction->primary_registration();
170
+		$primary_attendee = $primary_registration instanceof EE_Registration
171
+			? $primary_registration->attendee()
172
+			: false;
173
+		$locale = explode('-', get_bloginfo('language'));
174
+		// Gather request parameters.
175
+		$token_request_dtls = array(
176
+			'METHOD'                         => 'SetExpressCheckout',
177
+			'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
178
+			'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
179
+			'PAYMENTREQUEST_0_DESC'          => $order_description,
180
+			'RETURNURL'                      => $return_url,
181
+			'CANCELURL'                      => $cancel_url,
182
+			'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
183
+			// Buyer does not need to create a PayPal account to check out.
184
+			// This is referred to as PayPal Account Optional.
185
+			'SOLUTIONTYPE'                   => 'Sole',
186
+			// Locale of the pages displayed by PayPal during Express Checkout.
187
+			'LOCALECODE'                     => $locale[1]
188
+		);
189
+		// Show itemized list.
190
+		$itemized_list = $this->itemize_list($payment, $transaction);
191
+		$token_request_dtls = array_merge($token_request_dtls, $itemized_list);
192
+		// Automatically filling out shipping and contact information.
193
+		if ($this->_request_shipping_addr && $primary_attendee instanceof EEI_Attendee) {
194
+			// If you do not pass the shipping address, PayPal obtains it from the buyer's account profile.
195
+			$token_request_dtls['NOSHIPPING'] = '2';
196
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET'] = $primary_attendee->address();
197
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTREET2'] = $primary_attendee->address2();
198
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCITY'] = $primary_attendee->city();
199
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOSTATE'] = $primary_attendee->state_abbrev();
200
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $primary_attendee->country_ID();
201
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202
+			$token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203
+			$token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
+		} elseif (! $this->_request_shipping_addr) {
205
+			// Do not request shipping details on the PP Checkout page.
206
+			$token_request_dtls['NOSHIPPING'] = '1';
207
+			$token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208
+		}
209
+		// Used a business/personal logo on the PayPal page.
210
+		if (! empty($this->_image_url)) {
211
+			$token_request_dtls['LOGOIMG'] = $this->_image_url;
212
+		}
213
+		$token_request_dtls = apply_filters(
214
+			'FHEE__EEG_Paypal_Express__set_redirection_info__arguments',
215
+			$token_request_dtls,
216
+			$this
217
+		);
218
+		// Request PayPal token.
219
+		$token_request_response = $this->_ppExpress_request($token_request_dtls, 'Payment Token', $payment);
220
+		$token_rstatus = $this->_ppExpress_check_response($token_request_response);
221
+		$response_args = (isset($token_rstatus['args']) && is_array($token_rstatus['args']))
222
+			? $token_rstatus['args']
223
+			: array();
224
+		if ($token_rstatus['status']) {
225
+			// We got the Token so we may continue with the payment and redirect the client.
226
+			$payment->set_details($response_args);
227
+			$gateway_url = $this->_debug_mode ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com';
228
+			$payment->set_redirect_url(
229
+				$gateway_url
230
+				. '/checkoutnow?useraction=commit&cmd=_express-checkout&token='
231
+				. $response_args['TOKEN']
232
+			);
233
+		} else {
234
+			if (isset($response_args['L_ERRORCODE'])) {
235
+				$payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
236
+			} else {
237
+				$payment->set_gateway_response(
238
+					esc_html__(
239
+						'Error occurred while trying to setup the Express Checkout.',
240
+						'event_espresso'
241
+					)
242
+				);
243
+			}
244
+			$payment->set_details($response_args);
245
+			$payment->set_status($this->_pay_model->failed_status());
246
+		}
247
+		return $payment;
248
+	}
249
+
250
+
251
+
252
+	/**
253
+	 * @param array           $update_info {
254
+	 * @type string           $gateway_txn_id
255
+	 * @type string status an EEMI_Payment status
256
+	 *                                     }
257
+	 * @param EEI_Transaction $transaction
258
+	 * @return EEI_Payment
259
+	 */
260
+	public function handle_payment_update($update_info, $transaction)
261
+	{
262
+		$payment = $transaction instanceof EEI_Transaction ? $transaction->last_payment() : null;
263
+		if ($payment instanceof EEI_Payment) {
264
+			$this->log(array('Return from Authorization' => $update_info), $payment);
265
+			$transaction = $payment->transaction();
266
+			if (! $transaction instanceof EEI_Transaction) {
267
+				$payment->set_gateway_response(
268
+					esc_html__(
269
+						'Could not process this payment because it has no associated transaction.',
270
+						'event_espresso'
271
+					)
272
+				);
273
+				$payment->set_status($this->_pay_model->failed_status());
274
+				return $payment;
275
+			}
276
+			$primary_registrant = $transaction->primary_registration();
277
+			$payment_details = $payment->details();
278
+			// Check if we still have the token.
279
+			if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280
+				$payment->set_status($this->_pay_model->failed_status());
281
+				return $payment;
282
+			}
283
+			$cdetails_request_dtls = array(
284
+				'METHOD' => 'GetExpressCheckoutDetails',
285
+				'TOKEN'  => $payment_details['TOKEN'],
286
+			);
287
+			// Request Customer Details.
288
+			$cdetails_request_response = $this->_ppExpress_request(
289
+				$cdetails_request_dtls,
290
+				'Customer Details',
291
+				$payment
292
+			);
293
+			$cdetails_rstatus = $this->_ppExpress_check_response($cdetails_request_response);
294
+			$cdata_response_args = (isset($cdetails_rstatus['args']) && is_array($cdetails_rstatus['args']))
295
+				? $cdetails_rstatus['args']
296
+				: array();
297
+			if ($cdetails_rstatus['status']) {
298
+				// We got the PayerID so now we can Complete the transaction.
299
+				$docheckout_request_dtls = array(
300
+					'METHOD'                         => 'DoExpressCheckoutPayment',
301
+					'PAYERID'                        => $cdata_response_args['PAYERID'],
302
+					'TOKEN'                          => $payment_details['TOKEN'],
303
+					'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale',
304
+					'PAYMENTREQUEST_0_AMT'           => $payment->amount(),
305
+					'PAYMENTREQUEST_0_CURRENCYCODE'  => $payment->currency_code(),
306
+				);
307
+				 // Include itemized list.
308
+				$itemized_list = $this->itemize_list(
309
+					$payment,
310
+					$transaction,
311
+					$cdata_response_args
312
+				);
313
+				$docheckout_request_dtls = array_merge($docheckout_request_dtls, $itemized_list);
314
+				// Payment Checkout/Capture.
315
+				$docheckout_request_response = $this->_ppExpress_request(
316
+					$docheckout_request_dtls,
317
+					'Do Payment',
318
+					$payment
319
+				);
320
+				$docheckout_rstatus = $this->_ppExpress_check_response($docheckout_request_response);
321
+				$docheckout_response_args = (isset($docheckout_rstatus['args']) && is_array($docheckout_rstatus['args']))
322
+					? $docheckout_rstatus['args']
323
+					: array();
324
+				if ($docheckout_rstatus['status']) {
325
+					// All is well, payment approved.
326
+					$primary_registration_code = $primary_registrant instanceof EE_Registration ?
327
+						$primary_registrant->reg_code()
328
+						: '';
329
+					$payment->set_extra_accntng($primary_registration_code);
330
+					$payment->set_amount(isset($docheckout_response_args['PAYMENTINFO_0_AMT'])
331
+						? (float) $docheckout_response_args['PAYMENTINFO_0_AMT']
332
+						: 0);
333
+					$payment->set_txn_id_chq_nmbr(isset($docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID'])
334
+						? $docheckout_response_args['PAYMENTINFO_0_TRANSACTIONID']
335
+						: null);
336
+					$payment->set_details($cdata_response_args);
337
+					$payment->set_gateway_response(isset($docheckout_response_args['PAYMENTINFO_0_ACK'])
338
+						? $docheckout_response_args['PAYMENTINFO_0_ACK']
339
+						: '');
340
+					$payment->set_status($this->_pay_model->approved_status());
341
+				} else {
342
+					if (isset($docheckout_response_args['L_ERRORCODE'])) {
343
+						$payment->set_gateway_response(
344
+							$docheckout_response_args['L_ERRORCODE']
345
+							. '; '
346
+							. $docheckout_response_args['L_SHORTMESSAGE']
347
+						);
348
+					} else {
349
+						$payment->set_gateway_response(
350
+							esc_html__(
351
+								'Error occurred while trying to Capture the funds.',
352
+								'event_espresso'
353
+							)
354
+						);
355
+					}
356
+					$payment->set_details($docheckout_response_args);
357
+					$payment->set_status($this->_pay_model->declined_status());
358
+				}
359
+			} else {
360
+				if (isset($cdata_response_args['L_ERRORCODE'])) {
361
+					$payment->set_gateway_response(
362
+						$cdata_response_args['L_ERRORCODE']
363
+						. '; '
364
+						. $cdata_response_args['L_SHORTMESSAGE']
365
+					);
366
+				} else {
367
+					$payment->set_gateway_response(
368
+						esc_html__(
369
+							'Error occurred while trying to get payment Details from PayPal.',
370
+							'event_espresso'
371
+						)
372
+					);
373
+				}
374
+				$payment->set_details($cdata_response_args);
375
+				$payment->set_status($this->_pay_model->failed_status());
376
+			}
377
+		} else {
378
+			$payment->set_gateway_response(
379
+				esc_html__(
380
+					'Error occurred while trying to process the payment.',
381
+					'event_espresso'
382
+				)
383
+			);
384
+			$payment->set_status($this->_pay_model->failed_status());
385
+		}
386
+		return $payment;
387
+	}
388
+
389
+
390
+
391
+	/**
392
+	 *  Make a list of items that are in the giver transaction.
393
+	 *
394
+	 * @param EEI_Payment     $payment
395
+	 * @param EEI_Transaction $transaction
396
+	 * @param array           $request_response_args Data from a previous communication with PP.
397
+	 * @return array
398
+	 */
399
+	public function itemize_list(EEI_Payment $payment, EEI_Transaction $transaction, $request_response_args = array())
400
+	{
401
+		$itemized_list = array();
402
+		$gateway_formatter = $this->_get_gateway_formatter();
403
+		// If we have data from a previous communication with PP (on this transaction) we may use that for our list...
404
+		if (
405
+			! empty($request_response_args)
406
+			&& array_key_exists('L_PAYMENTREQUEST_0_AMT0', $request_response_args)
407
+			&& array_key_exists('PAYMENTREQUEST_0_ITEMAMT', $request_response_args)
408
+		) {
409
+			foreach ($request_response_args as $arg_key => $arg_val) {
410
+				if (
411
+					strpos($arg_key, 'PAYMENTREQUEST_') !== false
412
+					&& strpos($arg_key, 'NOTIFYURL') === false
413
+				) {
414
+					$itemized_list[ $arg_key ] = $arg_val;
415
+				}
416
+			}
417
+			// If we got only a few Items then something is not right.
418
+			if (count($itemized_list) > 2) {
419
+				return $itemized_list;
420
+			} else {
421
+				if (WP_DEBUG) {
422
+					throw new EE_Error(
423
+						sprintf(
424
+							esc_html__(
425
+								// @codingStandardsIgnoreStart
426
+								'Unable to continue with the checkout because a proper purchase list could not be generated. The purchased list we could have sent was %1$s',
427
+								// @codingStandardsIgnoreEnd
428
+								'event_espresso'
429
+							),
430
+							wp_json_encode($itemized_list)
431
+						)
432
+					);
433
+				}
434
+				// Reset the list and log an error, maybe allow to try and generate a new list (below).
435
+				$itemized_list = array();
436
+				$this->log(
437
+					array(
438
+						(string) esc_html__(
439
+							'Could not generate a proper item list with:',
440
+							'event_espresso'
441
+						) => $request_response_args
442
+					),
443
+					$payment
444
+				);
445
+			}
446
+		}
447
+		// ...otherwise we generate a new list for this transaction.
448
+		if ($this->_money->compare_floats($payment->amount(), $transaction->total(), '==')) {
449
+			$item_num = 0;
450
+			$itemized_sum = 0;
451
+			$total_line_items = $transaction->total_line_item();
452
+			// Go through each item in the list.
453
+			foreach ($total_line_items->get_items() as $line_item) {
454
+				if ($line_item instanceof EE_Line_Item) {
455
+					// PayPal doesn't like line items with 0.00 amount, so we may skip those.
456
+					if (EEH_Money::compare_floats($line_item->total(), '0.00', '==')) {
457
+						continue;
458
+					}
459
+					$unit_price = $line_item->unit_price();
460
+					$line_item_quantity = $line_item->quantity();
461
+					// This is a discount.
462
+					if ($line_item->is_percent()) {
463
+						$unit_price = $line_item->total();
464
+						$line_item_quantity = 1;
465
+					}
466
+					// Item Name.
467
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
468
+						$gateway_formatter->formatLineItemName($line_item, $payment),
469
+						0,
470
+						127
471
+					);
472
+					// Item description.
473
+					$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
474
+						$gateway_formatter->formatLineItemDesc($line_item, $payment),
475
+						0,
476
+						127
477
+					);
478
+					// Cost of individual item.
479
+					$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
480
+					// Item Number.
481
+					$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
482
+					// Item quantity.
483
+					$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
484
+					// Digital item is sold.
485
+					$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
486
+					$itemized_sum += $line_item->total();
487
+					++$item_num;
488
+				}
489
+			}
490
+			// Item's sales S/H and tax amount.
491
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $total_line_items->get_items_total();
492
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = $total_line_items->get_total_tax();
493
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
494
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
495
+			$itemized_sum_diff_from_txn_total = round(
496
+				$transaction->total() - $itemized_sum - $total_line_items->get_total_tax(),
497
+				2
498
+			);
499
+			// If we were not able to recognize some item like promotion, surcharge or cancellation,
500
+			// add the difference as an extra line item.
501
+			if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502
+				// Item Name.
503
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
504
+					esc_html__(
505
+						'Other (promotion/surcharge/cancellation)',
506
+						'event_espresso'
507
+					),
508
+					0,
509
+					127
510
+				);
511
+				// Item description.
512
+				$itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
513
+				// Cost of individual item.
514
+				$itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
515
+					$itemized_sum_diff_from_txn_total
516
+				);
517
+				// Item Number.
518
+				$itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
519
+				// Item quantity.
520
+				$itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
521
+				// Digital item is sold.
522
+				$itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
523
+				$item_num++;
524
+			}
525
+		} else {
526
+			// Just one Item.
527
+			// Item Name.
528
+			$itemized_list['L_PAYMENTREQUEST_0_NAME0'] = mb_strcut(
529
+				$gateway_formatter->formatPartialPaymentLineItemName($payment),
530
+				0,
531
+				127
532
+			);
533
+			// Item description.
534
+			$itemized_list['L_PAYMENTREQUEST_0_DESC0'] = mb_strcut(
535
+				$gateway_formatter->formatPartialPaymentLineItemDesc($payment),
536
+				0,
537
+				127
538
+			);
539
+			// Cost of individual item.
540
+			$itemized_list['L_PAYMENTREQUEST_0_AMT0'] = $gateway_formatter->formatCurrency($payment->amount());
541
+			// Item Number.
542
+			$itemized_list['L_PAYMENTREQUEST_0_NUMBER0'] = 1;
543
+			// Item quantity.
544
+			$itemized_list['L_PAYMENTREQUEST_0_QTY0'] = 1;
545
+			// Digital item is sold.
546
+			$itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Physical';
547
+			// Item's sales S/H and tax amount.
548
+			$itemized_list['PAYMENTREQUEST_0_ITEMAMT'] = $gateway_formatter->formatCurrency($payment->amount());
549
+			$itemized_list['PAYMENTREQUEST_0_TAXAMT'] = '0';
550
+			$itemized_list['PAYMENTREQUEST_0_SHIPPINGAMT'] = '0';
551
+			$itemized_list['PAYMENTREQUEST_0_HANDLINGAMT'] = '0';
552
+		}
553
+		return $itemized_list;
554
+	}
555
+
556
+
557
+
558
+	/**
559
+	 *  Make the Express checkout request.
560
+	 *
561
+	 * @param array       $request_params
562
+	 * @param string      $request_text
563
+	 * @param EEI_Payment $payment
564
+	 * @return mixed
565
+	 */
566
+	public function _ppExpress_request($request_params, $request_text, $payment)
567
+	{
568
+		$request_dtls = array(
569
+			'VERSION' => '204.0',
570
+			'USER' => $this->_api_username,
571
+			'PWD' => $this->_api_password,
572
+			'SIGNATURE' => $this->_api_signature,
573
+			// EE will blow up if you change this
574
+			'BUTTONSOURCE' => 'EventEspresso_SP',
575
+		);
576
+		$dtls = array_merge($request_dtls, $request_params);
577
+		$this->_log_clean_request($dtls, $payment, $request_text . ' Request');
578
+		// Request Customer Details.
579
+		$request_response = wp_remote_post(
580
+			$this->_base_gateway_url,
581
+			array(
582
+				'method'      => 'POST',
583
+				'timeout'     => 45,
584
+				'httpversion' => '1.1',
585
+				'cookies'     => array(),
586
+				'headers'     => array(),
587
+				'body'        => http_build_query($dtls, '', '&'),
588
+			)
589
+		);
590
+		// Log the response.
591
+		$this->log(array($request_text . ' Response' => $request_response), $payment);
592
+		return $request_response;
593
+	}
594
+
595
+
596
+
597
+	/**
598
+	 *  Check the response status.
599
+	 *
600
+	 * @param mixed $request_response
601
+	 * @return array
602
+	 */
603
+	public function _ppExpress_check_response($request_response)
604
+	{
605
+		if (is_wp_error($request_response) || empty($request_response['body'])) {
606
+			// If we got here then there was an error in this request.
607
+			return array('status' => false, 'args' => $request_response);
608
+		}
609
+		$response_args = array();
610
+		parse_str(urldecode($request_response['body']), $response_args);
611
+		if (! isset($response_args['ACK'])) {
612
+			return array('status' => false, 'args' => $request_response);
613
+		}
614
+		if (
615
+			(
616
+				isset($response_args['PAYERID'])
617
+				|| isset($response_args['TOKEN'])
618
+				|| isset($response_args['PAYMENTINFO_0_TRANSACTIONID'])
619
+				|| (isset($response_args['PAYMENTSTATUS']) && $response_args['PAYMENTSTATUS'] === 'Completed')
620
+			)
621
+			&& in_array($response_args['ACK'], array('Success', 'SuccessWithWarning'), true)
622
+		) {
623
+			// Response status OK, return response parameters for further processing.
624
+			return array('status' => true, 'args' => $response_args);
625
+		}
626
+		$errors = $this->_get_errors($response_args);
627
+		return array('status' => false, 'args' => $errors);
628
+	}
629
+
630
+
631
+
632
+	/**
633
+	 *  Log a "Cleared" request.
634
+	 *
635
+	 * @param array       $request
636
+	 * @param EEI_Payment $payment
637
+	 * @param string      $info
638
+	 * @return void
639
+	 */
640
+	private function _log_clean_request($request, $payment, $info)
641
+	{
642
+		$cleaned_request_data = $request;
643
+		unset($cleaned_request_data['PWD'], $cleaned_request_data['USER'], $cleaned_request_data['SIGNATURE']);
644
+		$this->log(array($info => $cleaned_request_data), $payment);
645
+	}
646
+
647
+
648
+
649
+	/**
650
+	 *  Get error from the response data.
651
+	 *
652
+	 * @param array $data_array
653
+	 * @return array
654
+	 */
655
+	private function _get_errors($data_array)
656
+	{
657
+		$errors = array();
658
+		$n = 0;
659
+		while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
+			$l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
+				? $data_array[ "L_ERRORCODE{$n}" ]
662
+				: '';
663
+			$l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
+				? $data_array[ "L_SEVERITYCODE{$n}" ]
665
+				: '';
666
+			$l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
+				? $data_array[ "L_SHORTMESSAGE{$n}" ]
668
+				: '';
669
+			$l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
+				? $data_array[ "L_LONGMESSAGE{$n}" ]
671
+				: '';
672
+			if ($n === 0) {
673
+				$errors = array(
674
+					'L_ERRORCODE'    => $l_error_code,
675
+					'L_SHORTMESSAGE' => $l_short_message,
676
+					'L_LONGMESSAGE'  => $l_long_message,
677
+					'L_SEVERITYCODE' => $l_severity_code,
678
+				);
679
+			} else {
680
+				$errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
+				$errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
+				$errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
+				$errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
684
+			}
685
+			$n++;
686
+		}
687
+		return $errors;
688
+	}
689 689
 }
Please login to merge, or discard this patch.
Spacing   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@  discard block
 block discarded – undo
12 12
  */
13 13
 
14 14
 // Quickfix to address https://events.codebasehq.com/projects/event-espresso/tickets/11089 ASAP
15
-if (! function_exists('mb_strcut')) {
15
+if ( ! function_exists('mb_strcut')) {
16 16
     /**
17 17
      * Very simple mimic of mb_substr (which WP ensures exists in wp-includes/compat.php). Still has all the problems of mb_substr
18 18
      * (namely, that we might send too many characters to PayPal; however in this case they just issue a warning but nothing breaks)
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
         $notify_url = null,
144 144
         $cancel_url = null
145 145
     ) {
146
-        if (! $payment instanceof EEI_Payment) {
146
+        if ( ! $payment instanceof EEI_Payment) {
147 147
             $payment->set_gateway_response(
148 148
                 esc_html__(
149 149
                     'Error. No associated payment was found.',
@@ -154,7 +154,7 @@  discard block
 block discarded – undo
154 154
             return $payment;
155 155
         }
156 156
         $transaction = $payment->transaction();
157
-        if (! $transaction instanceof EEI_Transaction) {
157
+        if ( ! $transaction instanceof EEI_Transaction) {
158 158
             $payment->set_gateway_response(
159 159
                 esc_html__(
160 160
                     'Could not process this payment because it has no associated transaction.',
@@ -201,13 +201,13 @@  discard block
 block discarded – undo
201 201
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOZIP'] = $primary_attendee->zip();
202 202
             $token_request_dtls['PAYMENTREQUEST_0_EMAIL'] = $primary_attendee->email();
203 203
             $token_request_dtls['PAYMENTREQUEST_0_SHIPTOPHONENUM'] = $primary_attendee->phone();
204
-        } elseif (! $this->_request_shipping_addr) {
204
+        } elseif ( ! $this->_request_shipping_addr) {
205 205
             // Do not request shipping details on the PP Checkout page.
206 206
             $token_request_dtls['NOSHIPPING'] = '1';
207 207
             $token_request_dtls['REQCONFIRMSHIPPING'] = '0';
208 208
         }
209 209
         // Used a business/personal logo on the PayPal page.
210
-        if (! empty($this->_image_url)) {
210
+        if ( ! empty($this->_image_url)) {
211 211
             $token_request_dtls['LOGOIMG'] = $this->_image_url;
212 212
         }
213 213
         $token_request_dtls = apply_filters(
@@ -232,7 +232,7 @@  discard block
 block discarded – undo
232 232
             );
233 233
         } else {
234 234
             if (isset($response_args['L_ERRORCODE'])) {
235
-                $payment->set_gateway_response($response_args['L_ERRORCODE'] . '; ' . $response_args['L_SHORTMESSAGE']);
235
+                $payment->set_gateway_response($response_args['L_ERRORCODE'].'; '.$response_args['L_SHORTMESSAGE']);
236 236
             } else {
237 237
                 $payment->set_gateway_response(
238 238
                     esc_html__(
@@ -263,7 +263,7 @@  discard block
 block discarded – undo
263 263
         if ($payment instanceof EEI_Payment) {
264 264
             $this->log(array('Return from Authorization' => $update_info), $payment);
265 265
             $transaction = $payment->transaction();
266
-            if (! $transaction instanceof EEI_Transaction) {
266
+            if ( ! $transaction instanceof EEI_Transaction) {
267 267
                 $payment->set_gateway_response(
268 268
                     esc_html__(
269 269
                         'Could not process this payment because it has no associated transaction.',
@@ -276,7 +276,7 @@  discard block
 block discarded – undo
276 276
             $primary_registrant = $transaction->primary_registration();
277 277
             $payment_details = $payment->details();
278 278
             // Check if we still have the token.
279
-            if (! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
279
+            if ( ! isset($payment_details['TOKEN']) || empty($payment_details['TOKEN'])) {
280 280
                 $payment->set_status($this->_pay_model->failed_status());
281 281
                 return $payment;
282 282
             }
@@ -411,7 +411,7 @@  discard block
 block discarded – undo
411 411
                     strpos($arg_key, 'PAYMENTREQUEST_') !== false
412 412
                     && strpos($arg_key, 'NOTIFYURL') === false
413 413
                 ) {
414
-                    $itemized_list[ $arg_key ] = $arg_val;
414
+                    $itemized_list[$arg_key] = $arg_val;
415 415
                 }
416 416
             }
417 417
             // If we got only a few Items then something is not right.
@@ -464,25 +464,25 @@  discard block
 block discarded – undo
464 464
                         $line_item_quantity = 1;
465 465
                     }
466 466
                     // Item Name.
467
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
467
+                    $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
468 468
                         $gateway_formatter->formatLineItemName($line_item, $payment),
469 469
                         0,
470 470
                         127
471 471
                     );
472 472
                     // Item description.
473
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = mb_strcut(
473
+                    $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = mb_strcut(
474 474
                         $gateway_formatter->formatLineItemDesc($line_item, $payment),
475 475
                         0,
476 476
                         127
477 477
                     );
478 478
                     // Cost of individual item.
479
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency($unit_price);
479
+                    $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency($unit_price);
480 480
                     // Item Number.
481
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
481
+                    $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
482 482
                     // Item quantity.
483
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = $line_item_quantity;
483
+                    $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = $line_item_quantity;
484 484
                     // Digital item is sold.
485
-                    $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
485
+                    $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
486 486
                     $itemized_sum += $line_item->total();
487 487
                     ++$item_num;
488 488
                 }
@@ -500,7 +500,7 @@  discard block
 block discarded – undo
500 500
             // add the difference as an extra line item.
501 501
             if ($this->_money->compare_floats($itemized_sum_diff_from_txn_total, 0, '!=')) {
502 502
                 // Item Name.
503
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NAME' . $item_num ] = mb_strcut(
503
+                $itemized_list['L_PAYMENTREQUEST_0_NAME'.$item_num] = mb_strcut(
504 504
                     esc_html__(
505 505
                         'Other (promotion/surcharge/cancellation)',
506 506
                         'event_espresso'
@@ -509,17 +509,17 @@  discard block
 block discarded – undo
509 509
                     127
510 510
                 );
511 511
                 // Item description.
512
-                $itemized_list[ 'L_PAYMENTREQUEST_0_DESC' . $item_num ] = '';
512
+                $itemized_list['L_PAYMENTREQUEST_0_DESC'.$item_num] = '';
513 513
                 // Cost of individual item.
514
-                $itemized_list[ 'L_PAYMENTREQUEST_0_AMT' . $item_num ] = $gateway_formatter->formatCurrency(
514
+                $itemized_list['L_PAYMENTREQUEST_0_AMT'.$item_num] = $gateway_formatter->formatCurrency(
515 515
                     $itemized_sum_diff_from_txn_total
516 516
                 );
517 517
                 // Item Number.
518
-                $itemized_list[ 'L_PAYMENTREQUEST_0_NUMBER' . $item_num ] = $item_num + 1;
518
+                $itemized_list['L_PAYMENTREQUEST_0_NUMBER'.$item_num] = $item_num + 1;
519 519
                 // Item quantity.
520
-                $itemized_list[ 'L_PAYMENTREQUEST_0_QTY' . $item_num ] = 1;
520
+                $itemized_list['L_PAYMENTREQUEST_0_QTY'.$item_num] = 1;
521 521
                 // Digital item is sold.
522
-                $itemized_list[ 'L_PAYMENTREQUEST_0_ITEMCATEGORY' . $item_num ] = 'Physical';
522
+                $itemized_list['L_PAYMENTREQUEST_0_ITEMCATEGORY'.$item_num] = 'Physical';
523 523
                 $item_num++;
524 524
             }
525 525
         } else {
@@ -574,7 +574,7 @@  discard block
 block discarded – undo
574 574
             'BUTTONSOURCE' => 'EventEspresso_SP',
575 575
         );
576 576
         $dtls = array_merge($request_dtls, $request_params);
577
-        $this->_log_clean_request($dtls, $payment, $request_text . ' Request');
577
+        $this->_log_clean_request($dtls, $payment, $request_text.' Request');
578 578
         // Request Customer Details.
579 579
         $request_response = wp_remote_post(
580 580
             $this->_base_gateway_url,
@@ -588,7 +588,7 @@  discard block
 block discarded – undo
588 588
             )
589 589
         );
590 590
         // Log the response.
591
-        $this->log(array($request_text . ' Response' => $request_response), $payment);
591
+        $this->log(array($request_text.' Response' => $request_response), $payment);
592 592
         return $request_response;
593 593
     }
594 594
 
@@ -608,7 +608,7 @@  discard block
 block discarded – undo
608 608
         }
609 609
         $response_args = array();
610 610
         parse_str(urldecode($request_response['body']), $response_args);
611
-        if (! isset($response_args['ACK'])) {
611
+        if ( ! isset($response_args['ACK'])) {
612 612
             return array('status' => false, 'args' => $request_response);
613 613
         }
614 614
         if (
@@ -656,18 +656,18 @@  discard block
 block discarded – undo
656 656
     {
657 657
         $errors = array();
658 658
         $n = 0;
659
-        while (isset($data_array[ "L_ERRORCODE{$n}" ])) {
660
-            $l_error_code = isset($data_array[ "L_ERRORCODE{$n}" ])
661
-                ? $data_array[ "L_ERRORCODE{$n}" ]
659
+        while (isset($data_array["L_ERRORCODE{$n}"])) {
660
+            $l_error_code = isset($data_array["L_ERRORCODE{$n}"])
661
+                ? $data_array["L_ERRORCODE{$n}"]
662 662
                 : '';
663
-            $l_severity_code = isset($data_array[ "L_SEVERITYCODE{$n}" ])
664
-                ? $data_array[ "L_SEVERITYCODE{$n}" ]
663
+            $l_severity_code = isset($data_array["L_SEVERITYCODE{$n}"])
664
+                ? $data_array["L_SEVERITYCODE{$n}"]
665 665
                 : '';
666
-            $l_short_message = isset($data_array[ "L_SHORTMESSAGE{$n}" ])
667
-                ? $data_array[ "L_SHORTMESSAGE{$n}" ]
666
+            $l_short_message = isset($data_array["L_SHORTMESSAGE{$n}"])
667
+                ? $data_array["L_SHORTMESSAGE{$n}"]
668 668
                 : '';
669
-            $l_long_message = isset($data_array[ "L_LONGMESSAGE{$n}" ])
670
-                ? $data_array[ "L_LONGMESSAGE{$n}" ]
669
+            $l_long_message = isset($data_array["L_LONGMESSAGE{$n}"])
670
+                ? $data_array["L_LONGMESSAGE{$n}"]
671 671
                 : '';
672 672
             if ($n === 0) {
673 673
                 $errors = array(
@@ -677,10 +677,10 @@  discard block
 block discarded – undo
677 677
                     'L_SEVERITYCODE' => $l_severity_code,
678 678
                 );
679 679
             } else {
680
-                $errors['L_ERRORCODE'] .= ', ' . $l_error_code;
681
-                $errors['L_SHORTMESSAGE'] .= ', ' . $l_short_message;
682
-                $errors['L_LONGMESSAGE'] .= ', ' . $l_long_message;
683
-                $errors['L_SEVERITYCODE'] .= ', ' . $l_severity_code;
680
+                $errors['L_ERRORCODE'] .= ', '.$l_error_code;
681
+                $errors['L_SHORTMESSAGE'] .= ', '.$l_short_message;
682
+                $errors['L_LONGMESSAGE'] .= ', '.$l_long_message;
683
+                $errors['L_SEVERITYCODE'] .= ', '.$l_severity_code;
684 684
             }
685 685
             $n++;
686 686
         }
Please login to merge, or discard this patch.
caffeinated/admin/new/pricing/Price_Types_List_Table.class.php 2 patches
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
     public function __construct($admin_page)
20 20
     {
21 21
         parent::__construct($admin_page);
22
-        require_once(EE_MODELS . 'EEM_Price_Type.model.php');
22
+        require_once(EE_MODELS.'EEM_Price_Type.model.php');
23 23
         $this->_PRT = EEM_Price_Type::instance();
24 24
     }
25 25
 
@@ -45,7 +45,7 @@  discard block
 block discarded – undo
45 45
         $this->_columns = array(
46 46
             'cb'        => '<input type="checkbox" />', // Render a checkbox instead of text
47 47
             'name'      => esc_html__('Name', 'event_espresso'),
48
-            'base_type' => '<div class="jst-cntr">' . esc_html__('Base Type', 'event_espresso') . '</div>',
48
+            'base_type' => '<div class="jst-cntr">'.esc_html__('Base Type', 'event_espresso').'</div>',
49 49
             'percent'   => '<div class="jst-cntr">'
50 50
                            . sprintf(
51 51
                                /* translators: 1: HTML new line, 2: open span tag, 3: close span tag */
@@ -121,14 +121,14 @@  discard block
 block discarded – undo
121 121
                 'action' => 'edit_price_type',
122 122
                 'id'     => $item->ID(),
123 123
             ), PRICING_ADMIN_URL);
124
-            $actions['edit'] = '<a href="' . $edit_lnk_url . '" aria-label="'
124
+            $actions['edit'] = '<a href="'.$edit_lnk_url.'" aria-label="'
125 125
                                . sprintf(
126 126
                                    /* translators: The name of the price type */
127 127
                                    esc_attr__('Edit Price Type (%s)', 'event_espresso'),
128 128
                                    $item->name()
129 129
                                )
130 130
                                . '">'
131
-                               . esc_html__('Edit', 'event_espresso') . '</a>';
131
+                               . esc_html__('Edit', 'event_espresso').'</a>';
132 132
         }
133 133
 
134 134
         $name_link = EE_Registry::instance()->CAP->current_user_can(
@@ -136,14 +136,14 @@  discard block
 block discarded – undo
136 136
             'pricing_edit_price_type',
137 137
             $item->ID()
138 138
         )
139
-            ? '<a href="' . $edit_lnk_url . '" aria-label="'
139
+            ? '<a href="'.$edit_lnk_url.'" aria-label="'
140 140
               . sprintf(
141 141
                   /* translators: The name of the price type */
142 142
                   esc_attr__('Edit Price Type (%s)', 'event_espresso'),
143 143
                   $item->name()
144 144
               )
145 145
               . '">'
146
-              . stripslashes($item->name()) . '</a>'
146
+              . stripslashes($item->name()).'</a>'
147 147
             : $item->name();
148 148
 
149 149
         if ($item->base_type() !== 1) {
@@ -161,14 +161,14 @@  discard block
 block discarded – undo
161 161
                         'id'       => $item->ID(),
162 162
                         'noheader' => true,
163 163
                     ), PRICING_ADMIN_URL);
164
-                    $actions['trash'] = '<a href="' . $trash_lnk_url . '" aria-label="'
164
+                    $actions['trash'] = '<a href="'.$trash_lnk_url.'" aria-label="'
165 165
                                         . sprintf(
166 166
                                             /* translators: The name of the price type */
167 167
                                             esc_attr__('Move Price Type %s to Trash', 'event_espresso'),
168 168
                                             $item->name()
169 169
                                         )
170 170
                                         . '">'
171
-                                        . esc_html__('Move to Trash', 'event_espresso') . '</a>';
171
+                                        . esc_html__('Move to Trash', 'event_espresso').'</a>';
172 172
                 }
173 173
             } else {
174 174
                 // restore price link
@@ -184,14 +184,14 @@  discard block
 block discarded – undo
184 184
                         'id'       => $item->ID(),
185 185
                         'noheader' => true,
186 186
                     ), PRICING_ADMIN_URL);
187
-                    $actions['restore'] = '<a href="' . $restore_lnk_url . '" aria-label="'
187
+                    $actions['restore'] = '<a href="'.$restore_lnk_url.'" aria-label="'
188 188
                                           . sprintf(
189 189
                                               /* translators: The name of the price type */
190 190
                                               esc_attr__('Restore Price Type (%s)', 'event_espresso'),
191 191
                                               $item->name()
192 192
                                           )
193 193
                                           . '">'
194
-                                          . esc_html__('Restore', 'event_espresso') . '</a>';
194
+                                          . esc_html__('Restore', 'event_espresso').'</a>';
195 195
                 }
196 196
                 // delete price link
197 197
                 if (
@@ -206,14 +206,14 @@  discard block
 block discarded – undo
206 206
                         'id'       => $item->ID(),
207 207
                         'noheader' => true,
208 208
                     ), PRICING_ADMIN_URL);
209
-                    $actions['delete'] = '<a href="' . $delete_lnk_url . '" aria-label="'
209
+                    $actions['delete'] = '<a href="'.$delete_lnk_url.'" aria-label="'
210 210
                                          . sprintf(
211 211
                                              /* translators: The name of the price type */
212 212
                                              esc_attr__('Delete Price Type %s Permanently', 'event_espresso'),
213 213
                                              $item->name()
214 214
                                          )
215 215
                                          . '">'
216
-                                         . esc_html__('Delete Permanently', 'event_espresso') . '</a>';
216
+                                         . esc_html__('Delete Permanently', 'event_espresso').'</a>';
217 217
                 }
218 218
             }
219 219
         }
@@ -230,18 +230,18 @@  discard block
 block discarded – undo
230 230
 
231 231
     public function column_base_type($item)
232 232
     {
233
-        return '<div class="jst-cntr">' . $item->base_type_name() . '</div>';
233
+        return '<div class="jst-cntr">'.$item->base_type_name().'</div>';
234 234
     }
235 235
 
236 236
 
237 237
     public function column_percent($item)
238 238
     {
239
-        return '<div class="jst-cntr">' . ($item->is_percent() ? '%' : EE_Registry::instance()->CFG->currency->sign) . '</div>';
239
+        return '<div class="jst-cntr">'.($item->is_percent() ? '%' : EE_Registry::instance()->CFG->currency->sign).'</div>';
240 240
     }
241 241
 
242 242
 
243 243
     public function column_order($item)
244 244
     {
245
-        return '<div class="jst-cntr">' . $item->order() . '</div>';
245
+        return '<div class="jst-cntr">'.$item->order().'</div>';
246 246
     }
247 247
 }
Please login to merge, or discard this patch.
Indentation   +228 added lines, -228 removed lines patch added patch discarded remove patch
@@ -15,232 +15,232 @@
 block discarded – undo
15 15
  */
16 16
 class Price_Types_List_Table extends EE_Admin_List_Table
17 17
 {
18
-    public function __construct($admin_page)
19
-    {
20
-        parent::__construct($admin_page);
21
-        require_once(EE_MODELS . 'EEM_Price_Type.model.php');
22
-        $this->_PRT = EEM_Price_Type::instance();
23
-    }
24
-
25
-
26
-    protected function _setup_data()
27
-    {
28
-        $trashed = $this->_admin_page->get_view() == 'trashed' ? true : false;
29
-        $this->_data = $this->_admin_page->get_price_types_overview_data($this->_per_page, false, $trashed);
30
-        $this->_all_data_count = $this->_admin_page->get_price_types_overview_data($this->_per_page, true, false);
31
-        $this->_trashed_count = $this->_admin_page->get_price_types_overview_data($this->_per_page, true, true);
32
-    }
33
-
34
-
35
-    protected function _set_properties()
36
-    {
37
-        $this->_wp_list_args = array(
38
-            'singular' => esc_html__('price type', 'event_espresso'),
39
-            'plural'   => esc_html__('price types', 'event_espresso'),
40
-            'ajax'     => true,
41
-            'screen'   => $this->_admin_page->get_current_screen()->id,
42
-        );
43
-
44
-        $this->_columns = array(
45
-            'cb'        => '<input type="checkbox" />', // Render a checkbox instead of text
46
-            'name'      => esc_html__('Name', 'event_espresso'),
47
-            'base_type' => '<div class="jst-cntr">' . esc_html__('Base Type', 'event_espresso') . '</div>',
48
-            'percent'   => '<div class="jst-cntr">'
49
-                           . sprintf(
50
-                               /* translators: 1: HTML new line, 2: open span tag, 3: close span tag */
51
-                               esc_html__('Applied %1$s as %2$s%%%3$s or %2$s$%3$s', 'event_espresso'),
52
-                               '<br/>',
53
-                               '<span class="big-text">',
54
-                               '</span>'
55
-                           )
56
-                           . '</div>',
57
-            'order'     => '<div class="jst-cntr">'
58
-                           . sprintf(
59
-                               /* translators: HTML new line */
60
-                               esc_html__('Order of %s Application', 'event_espresso'),
61
-                               '<br/>'
62
-                           )
63
-                           . '</div>',
64
-        );
65
-
66
-        $this->_sortable_columns = array(
67
-            // TRUE means its already sorted
68
-            'name' => array('name' => false),
69
-        );
70
-
71
-        $this->_hidden_columns = array();
72
-    }
73
-
74
-
75
-    protected function _get_table_filters()
76
-    {
77
-    }
78
-
79
-
80
-    protected function _add_view_counts()
81
-    {
82
-        $this->_views['all']['count'] = $this->_all_data_count;
83
-        if (
84
-            EE_Registry::instance()->CAP->current_user_can(
85
-                'ee_delete_default_price_types',
86
-                'pricing_trash_price_type'
87
-            )
88
-        ) {
89
-            $this->_views['trashed']['count'] = $this->_trashed_count;
90
-        }
91
-    }
92
-
93
-
94
-    public function column_cb($item)
95
-    {
96
-        if ($item->base_type() !== 1) {
97
-            return sprintf(
98
-                '<input type="checkbox" name="checkbox[%1$s]" />',
99
-                $item->ID()
100
-            );
101
-        }
102
-        return '';
103
-    }
104
-
105
-
106
-    public function column_name($item)
107
-    {
108
-
109
-        // Build row actions
110
-        $actions = array();
111
-        // edit price link
112
-        if (
113
-            EE_Registry::instance()->CAP->current_user_can(
114
-                'ee_edit_default_price_type',
115
-                'pricing_edit_price_type',
116
-                $item->ID()
117
-            )
118
-        ) {
119
-            $edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
120
-                'action' => 'edit_price_type',
121
-                'id'     => $item->ID(),
122
-            ), PRICING_ADMIN_URL);
123
-            $actions['edit'] = '<a href="' . $edit_lnk_url . '" aria-label="'
124
-                               . sprintf(
125
-                                   /* translators: The name of the price type */
126
-                                   esc_attr__('Edit Price Type (%s)', 'event_espresso'),
127
-                                   $item->name()
128
-                               )
129
-                               . '">'
130
-                               . esc_html__('Edit', 'event_espresso') . '</a>';
131
-        }
132
-
133
-        $name_link = EE_Registry::instance()->CAP->current_user_can(
134
-            'ee_edit_default_price_type',
135
-            'pricing_edit_price_type',
136
-            $item->ID()
137
-        )
138
-            ? '<a href="' . $edit_lnk_url . '" aria-label="'
139
-              . sprintf(
140
-                  /* translators: The name of the price type */
141
-                  esc_attr__('Edit Price Type (%s)', 'event_espresso'),
142
-                  $item->name()
143
-              )
144
-              . '">'
145
-              . stripslashes($item->name()) . '</a>'
146
-            : $item->name();
147
-
148
-        if ($item->base_type() !== 1) {
149
-            if ($this->_view == 'all') {
150
-                // trash price link
151
-                if (
152
-                    EE_Registry::instance()->CAP->current_user_can(
153
-                        'ee_delete_default_price_type',
154
-                        'pricing_trash_price_type',
155
-                        $item->ID()
156
-                    )
157
-                ) {
158
-                    $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
159
-                        'action'   => 'trash_price_type',
160
-                        'id'       => $item->ID(),
161
-                        'noheader' => true,
162
-                    ), PRICING_ADMIN_URL);
163
-                    $actions['trash'] = '<a href="' . $trash_lnk_url . '" aria-label="'
164
-                                        . sprintf(
165
-                                            /* translators: The name of the price type */
166
-                                            esc_attr__('Move Price Type %s to Trash', 'event_espresso'),
167
-                                            $item->name()
168
-                                        )
169
-                                        . '">'
170
-                                        . esc_html__('Move to Trash', 'event_espresso') . '</a>';
171
-                }
172
-            } else {
173
-                // restore price link
174
-                if (
175
-                    EE_Registry::instance()->CAP->current_user_can(
176
-                        'ee_delete_default_price_type',
177
-                        'pricing_restore_price_type',
178
-                        $item->ID()
179
-                    )
180
-                ) {
181
-                    $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
182
-                        'action'   => 'restore_price_type',
183
-                        'id'       => $item->ID(),
184
-                        'noheader' => true,
185
-                    ), PRICING_ADMIN_URL);
186
-                    $actions['restore'] = '<a href="' . $restore_lnk_url . '" aria-label="'
187
-                                          . sprintf(
188
-                                              /* translators: The name of the price type */
189
-                                              esc_attr__('Restore Price Type (%s)', 'event_espresso'),
190
-                                              $item->name()
191
-                                          )
192
-                                          . '">'
193
-                                          . esc_html__('Restore', 'event_espresso') . '</a>';
194
-                }
195
-                // delete price link
196
-                if (
197
-                    EE_Registry::instance()->CAP->current_user_can(
198
-                        'ee_delete_default_price_type',
199
-                        'pricing_delete_price_type',
200
-                        $item->ID()
201
-                    )
202
-                ) {
203
-                    $delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
204
-                        'action'   => 'delete_price_type',
205
-                        'id'       => $item->ID(),
206
-                        'noheader' => true,
207
-                    ), PRICING_ADMIN_URL);
208
-                    $actions['delete'] = '<a href="' . $delete_lnk_url . '" aria-label="'
209
-                                         . sprintf(
210
-                                             /* translators: The name of the price type */
211
-                                             esc_attr__('Delete Price Type %s Permanently', 'event_espresso'),
212
-                                             $item->name()
213
-                                         )
214
-                                         . '">'
215
-                                         . esc_html__('Delete Permanently', 'event_espresso') . '</a>';
216
-                }
217
-            }
218
-        }
219
-
220
-        // Return the name contents
221
-        return sprintf(
222
-            '%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
223
-            $name_link,
224
-            $item->ID(),
225
-            $this->row_actions($actions)
226
-        );
227
-    }
228
-
229
-
230
-    public function column_base_type($item)
231
-    {
232
-        return '<div class="jst-cntr">' . $item->base_type_name() . '</div>';
233
-    }
234
-
235
-
236
-    public function column_percent($item)
237
-    {
238
-        return '<div class="jst-cntr">' . ($item->is_percent() ? '%' : EE_Registry::instance()->CFG->currency->sign) . '</div>';
239
-    }
240
-
241
-
242
-    public function column_order($item)
243
-    {
244
-        return '<div class="jst-cntr">' . $item->order() . '</div>';
245
-    }
18
+	public function __construct($admin_page)
19
+	{
20
+		parent::__construct($admin_page);
21
+		require_once(EE_MODELS . 'EEM_Price_Type.model.php');
22
+		$this->_PRT = EEM_Price_Type::instance();
23
+	}
24
+
25
+
26
+	protected function _setup_data()
27
+	{
28
+		$trashed = $this->_admin_page->get_view() == 'trashed' ? true : false;
29
+		$this->_data = $this->_admin_page->get_price_types_overview_data($this->_per_page, false, $trashed);
30
+		$this->_all_data_count = $this->_admin_page->get_price_types_overview_data($this->_per_page, true, false);
31
+		$this->_trashed_count = $this->_admin_page->get_price_types_overview_data($this->_per_page, true, true);
32
+	}
33
+
34
+
35
+	protected function _set_properties()
36
+	{
37
+		$this->_wp_list_args = array(
38
+			'singular' => esc_html__('price type', 'event_espresso'),
39
+			'plural'   => esc_html__('price types', 'event_espresso'),
40
+			'ajax'     => true,
41
+			'screen'   => $this->_admin_page->get_current_screen()->id,
42
+		);
43
+
44
+		$this->_columns = array(
45
+			'cb'        => '<input type="checkbox" />', // Render a checkbox instead of text
46
+			'name'      => esc_html__('Name', 'event_espresso'),
47
+			'base_type' => '<div class="jst-cntr">' . esc_html__('Base Type', 'event_espresso') . '</div>',
48
+			'percent'   => '<div class="jst-cntr">'
49
+						   . sprintf(
50
+							   /* translators: 1: HTML new line, 2: open span tag, 3: close span tag */
51
+							   esc_html__('Applied %1$s as %2$s%%%3$s or %2$s$%3$s', 'event_espresso'),
52
+							   '<br/>',
53
+							   '<span class="big-text">',
54
+							   '</span>'
55
+						   )
56
+						   . '</div>',
57
+			'order'     => '<div class="jst-cntr">'
58
+						   . sprintf(
59
+							   /* translators: HTML new line */
60
+							   esc_html__('Order of %s Application', 'event_espresso'),
61
+							   '<br/>'
62
+						   )
63
+						   . '</div>',
64
+		);
65
+
66
+		$this->_sortable_columns = array(
67
+			// TRUE means its already sorted
68
+			'name' => array('name' => false),
69
+		);
70
+
71
+		$this->_hidden_columns = array();
72
+	}
73
+
74
+
75
+	protected function _get_table_filters()
76
+	{
77
+	}
78
+
79
+
80
+	protected function _add_view_counts()
81
+	{
82
+		$this->_views['all']['count'] = $this->_all_data_count;
83
+		if (
84
+			EE_Registry::instance()->CAP->current_user_can(
85
+				'ee_delete_default_price_types',
86
+				'pricing_trash_price_type'
87
+			)
88
+		) {
89
+			$this->_views['trashed']['count'] = $this->_trashed_count;
90
+		}
91
+	}
92
+
93
+
94
+	public function column_cb($item)
95
+	{
96
+		if ($item->base_type() !== 1) {
97
+			return sprintf(
98
+				'<input type="checkbox" name="checkbox[%1$s]" />',
99
+				$item->ID()
100
+			);
101
+		}
102
+		return '';
103
+	}
104
+
105
+
106
+	public function column_name($item)
107
+	{
108
+
109
+		// Build row actions
110
+		$actions = array();
111
+		// edit price link
112
+		if (
113
+			EE_Registry::instance()->CAP->current_user_can(
114
+				'ee_edit_default_price_type',
115
+				'pricing_edit_price_type',
116
+				$item->ID()
117
+			)
118
+		) {
119
+			$edit_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
120
+				'action' => 'edit_price_type',
121
+				'id'     => $item->ID(),
122
+			), PRICING_ADMIN_URL);
123
+			$actions['edit'] = '<a href="' . $edit_lnk_url . '" aria-label="'
124
+							   . sprintf(
125
+								   /* translators: The name of the price type */
126
+								   esc_attr__('Edit Price Type (%s)', 'event_espresso'),
127
+								   $item->name()
128
+							   )
129
+							   . '">'
130
+							   . esc_html__('Edit', 'event_espresso') . '</a>';
131
+		}
132
+
133
+		$name_link = EE_Registry::instance()->CAP->current_user_can(
134
+			'ee_edit_default_price_type',
135
+			'pricing_edit_price_type',
136
+			$item->ID()
137
+		)
138
+			? '<a href="' . $edit_lnk_url . '" aria-label="'
139
+			  . sprintf(
140
+				  /* translators: The name of the price type */
141
+				  esc_attr__('Edit Price Type (%s)', 'event_espresso'),
142
+				  $item->name()
143
+			  )
144
+			  . '">'
145
+			  . stripslashes($item->name()) . '</a>'
146
+			: $item->name();
147
+
148
+		if ($item->base_type() !== 1) {
149
+			if ($this->_view == 'all') {
150
+				// trash price link
151
+				if (
152
+					EE_Registry::instance()->CAP->current_user_can(
153
+						'ee_delete_default_price_type',
154
+						'pricing_trash_price_type',
155
+						$item->ID()
156
+					)
157
+				) {
158
+					$trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
159
+						'action'   => 'trash_price_type',
160
+						'id'       => $item->ID(),
161
+						'noheader' => true,
162
+					), PRICING_ADMIN_URL);
163
+					$actions['trash'] = '<a href="' . $trash_lnk_url . '" aria-label="'
164
+										. sprintf(
165
+											/* translators: The name of the price type */
166
+											esc_attr__('Move Price Type %s to Trash', 'event_espresso'),
167
+											$item->name()
168
+										)
169
+										. '">'
170
+										. esc_html__('Move to Trash', 'event_espresso') . '</a>';
171
+				}
172
+			} else {
173
+				// restore price link
174
+				if (
175
+					EE_Registry::instance()->CAP->current_user_can(
176
+						'ee_delete_default_price_type',
177
+						'pricing_restore_price_type',
178
+						$item->ID()
179
+					)
180
+				) {
181
+					$restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
182
+						'action'   => 'restore_price_type',
183
+						'id'       => $item->ID(),
184
+						'noheader' => true,
185
+					), PRICING_ADMIN_URL);
186
+					$actions['restore'] = '<a href="' . $restore_lnk_url . '" aria-label="'
187
+										  . sprintf(
188
+											  /* translators: The name of the price type */
189
+											  esc_attr__('Restore Price Type (%s)', 'event_espresso'),
190
+											  $item->name()
191
+										  )
192
+										  . '">'
193
+										  . esc_html__('Restore', 'event_espresso') . '</a>';
194
+				}
195
+				// delete price link
196
+				if (
197
+					EE_Registry::instance()->CAP->current_user_can(
198
+						'ee_delete_default_price_type',
199
+						'pricing_delete_price_type',
200
+						$item->ID()
201
+					)
202
+				) {
203
+					$delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
204
+						'action'   => 'delete_price_type',
205
+						'id'       => $item->ID(),
206
+						'noheader' => true,
207
+					), PRICING_ADMIN_URL);
208
+					$actions['delete'] = '<a href="' . $delete_lnk_url . '" aria-label="'
209
+										 . sprintf(
210
+											 /* translators: The name of the price type */
211
+											 esc_attr__('Delete Price Type %s Permanently', 'event_espresso'),
212
+											 $item->name()
213
+										 )
214
+										 . '">'
215
+										 . esc_html__('Delete Permanently', 'event_espresso') . '</a>';
216
+				}
217
+			}
218
+		}
219
+
220
+		// Return the name contents
221
+		return sprintf(
222
+			'%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
223
+			$name_link,
224
+			$item->ID(),
225
+			$this->row_actions($actions)
226
+		);
227
+	}
228
+
229
+
230
+	public function column_base_type($item)
231
+	{
232
+		return '<div class="jst-cntr">' . $item->base_type_name() . '</div>';
233
+	}
234
+
235
+
236
+	public function column_percent($item)
237
+	{
238
+		return '<div class="jst-cntr">' . ($item->is_percent() ? '%' : EE_Registry::instance()->CFG->currency->sign) . '</div>';
239
+	}
240
+
241
+
242
+	public function column_order($item)
243
+	{
244
+		return '<div class="jst-cntr">' . $item->order() . '</div>';
245
+	}
246 246
 }
Please login to merge, or discard this patch.
admin/extend/messages/Custom_Messages_Template_List_Table.class.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -99,7 +99,7 @@  discard block
 block discarded – undo
99 99
      */
100 100
     public function column_name($item)
101 101
     {
102
-        return '<p>' . $item->name() . '</p>';
102
+        return '<p>'.$item->name().'</p>';
103 103
     }
104 104
 
105 105
 
@@ -137,7 +137,7 @@  discard block
 block discarded – undo
137 137
     protected function _add_view_counts()
138 138
     {
139 139
         foreach ($this->_views as $view => $args) {
140
-            $this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
140
+            $this->_views[$view]['count'] = $this->get_admin_page()->get_message_templates(
141 141
                 $this->_per_page,
142 142
                 $view,
143 143
                 true,
@@ -219,7 +219,7 @@  discard block
 block discarded – undo
219 219
                                       . '" title="'
220 220
                                       . esc_attr__('Restore Message Template', 'event_espresso')
221 221
                                       . '">'
222
-                                      . esc_html__('Restore', 'event_espresso') . '</a>';
222
+                                      . esc_html__('Restore', 'event_espresso').'</a>';
223 223
             }
224 224
 
225 225
             if (
Please login to merge, or discard this patch.
Indentation   +232 added lines, -232 removed lines patch added patch discarded remove patch
@@ -11,259 +11,259 @@
 block discarded – undo
11 11
  */
12 12
 class Custom_Messages_Template_List_Table extends Messages_Template_List_Table
13 13
 {
14
-    /**
15
-     * Setup initial data.
16
-     */
17
-    protected function _setup_data()
18
-    {
19
-        $this->_data = $this->get_admin_page()->get_message_templates(
20
-            $this->_per_page,
21
-            $this->_view,
22
-            false,
23
-            false,
24
-            false
25
-        );
26
-        $this->_all_data_count = $this->get_admin_page()->get_message_templates(
27
-            $this->_per_page,
28
-            $this->_view,
29
-            true,
30
-            true,
31
-            false
32
-        );
33
-    }
14
+	/**
15
+	 * Setup initial data.
16
+	 */
17
+	protected function _setup_data()
18
+	{
19
+		$this->_data = $this->get_admin_page()->get_message_templates(
20
+			$this->_per_page,
21
+			$this->_view,
22
+			false,
23
+			false,
24
+			false
25
+		);
26
+		$this->_all_data_count = $this->get_admin_page()->get_message_templates(
27
+			$this->_per_page,
28
+			$this->_view,
29
+			true,
30
+			true,
31
+			false
32
+		);
33
+	}
34 34
 
35 35
 
36
-    /**
37
-     * Set initial properties
38
-     */
39
-    protected function _set_properties()
40
-    {
41
-        parent::_set_properties();
42
-        $this->_wp_list_args = array(
43
-            'singular' => esc_html__('Message Template Group', 'event_espresso'),
44
-            'plural'   => esc_html__('Message Template', 'event_espresso'),
45
-            'ajax'     => true, // for now,
46
-            'screen'   => $this->get_admin_page()->get_current_screen()->id,
47
-        );
36
+	/**
37
+	 * Set initial properties
38
+	 */
39
+	protected function _set_properties()
40
+	{
41
+		parent::_set_properties();
42
+		$this->_wp_list_args = array(
43
+			'singular' => esc_html__('Message Template Group', 'event_espresso'),
44
+			'plural'   => esc_html__('Message Template', 'event_espresso'),
45
+			'ajax'     => true, // for now,
46
+			'screen'   => $this->get_admin_page()->get_current_screen()->id,
47
+		);
48 48
 
49
-        $this->_columns = array_merge(
50
-            array(
51
-                'cb'   => '<input type="checkbox" />',
52
-                'name' => esc_html__('Template Name', 'event_espresso'),
53
-            ),
54
-            $this->_columns,
55
-            array(
56
-                'events'  => esc_html__('Events', 'event_espresso'),
57
-                'actions' => '',
58
-            )
59
-        );
60
-    }
49
+		$this->_columns = array_merge(
50
+			array(
51
+				'cb'   => '<input type="checkbox" />',
52
+				'name' => esc_html__('Template Name', 'event_espresso'),
53
+			),
54
+			$this->_columns,
55
+			array(
56
+				'events'  => esc_html__('Events', 'event_espresso'),
57
+				'actions' => '',
58
+			)
59
+		);
60
+	}
61 61
 
62 62
 
63
-    /**
64
-     * Custom message for when there are no items found.
65
-     *
66
-     * @since 4.3.0
67
-     */
68
-    public function no_items()
69
-    {
70
-        if ($this->_view !== 'trashed') {
71
-            printf(
72
-                esc_html__(
73
-                    '%sNo Custom Templates found.%s To create your first custom message template, go to the "Default Message Templates" tab and click the "Create Custom" button next to the template you want to use as a base for the new one.',
74
-                    'event_espresso'
75
-                ),
76
-                '<strong>',
77
-                '</strong>'
78
-            );
79
-        } else {
80
-            parent::no_items();
81
-        }
82
-    }
63
+	/**
64
+	 * Custom message for when there are no items found.
65
+	 *
66
+	 * @since 4.3.0
67
+	 */
68
+	public function no_items()
69
+	{
70
+		if ($this->_view !== 'trashed') {
71
+			printf(
72
+				esc_html__(
73
+					'%sNo Custom Templates found.%s To create your first custom message template, go to the "Default Message Templates" tab and click the "Create Custom" button next to the template you want to use as a base for the new one.',
74
+					'event_espresso'
75
+				),
76
+				'<strong>',
77
+				'</strong>'
78
+			);
79
+		} else {
80
+			parent::no_items();
81
+		}
82
+	}
83 83
 
84 84
 
85
-    /**
86
-     * @param EE_Message_Template_Group $item
87
-     * @return string
88
-     */
89
-    public function column_cb($item)
90
-    {
91
-        return sprintf('<input type="checkbox" name="checkbox[%s]" value="1" />', $item->GRP_ID());
92
-    }
85
+	/**
86
+	 * @param EE_Message_Template_Group $item
87
+	 * @return string
88
+	 */
89
+	public function column_cb($item)
90
+	{
91
+		return sprintf('<input type="checkbox" name="checkbox[%s]" value="1" />', $item->GRP_ID());
92
+	}
93 93
 
94 94
 
95
-    /**
96
-     * @param EE_Message_Template_Group $item
97
-     * @return string
98
-     */
99
-    public function column_name($item)
100
-    {
101
-        return '<p>' . $item->name() . '</p>';
102
-    }
95
+	/**
96
+	 * @param EE_Message_Template_Group $item
97
+	 * @return string
98
+	 */
99
+	public function column_name($item)
100
+	{
101
+		return '<p>' . $item->name() . '</p>';
102
+	}
103 103
 
104 104
 
105
-    /**
106
-     * @param EE_Message_Template_Group $item
107
-     * @return string
108
-     */
109
-    public function column_actions($item)
110
-    {
111
-        if (
112
-            EE_Registry::instance()->CAP->current_user_can(
113
-                'ee_edit_messages',
114
-                'espresso_messages_add_new_message_template'
115
-            )
116
-        ) {
117
-            $create_args = array(
118
-                'GRP_ID'       => $item->ID(),
119
-                'messenger'    => $item->messenger(),
120
-                'message_type' => $item->message_type(),
121
-                'action'       => 'add_new_message_template',
122
-            );
123
-            $create_link = EE_Admin_Page::add_query_args_and_nonce($create_args, EE_MSG_ADMIN_URL);
124
-            return sprintf(
125
-                '<p><a href="%s" class="button button-small">%s</a></p>',
126
-                $create_link,
127
-                esc_html__('Create Custom', 'event_espresso')
128
-            );
129
-        }
130
-        return '';
131
-    }
105
+	/**
106
+	 * @param EE_Message_Template_Group $item
107
+	 * @return string
108
+	 */
109
+	public function column_actions($item)
110
+	{
111
+		if (
112
+			EE_Registry::instance()->CAP->current_user_can(
113
+				'ee_edit_messages',
114
+				'espresso_messages_add_new_message_template'
115
+			)
116
+		) {
117
+			$create_args = array(
118
+				'GRP_ID'       => $item->ID(),
119
+				'messenger'    => $item->messenger(),
120
+				'message_type' => $item->message_type(),
121
+				'action'       => 'add_new_message_template',
122
+			);
123
+			$create_link = EE_Admin_Page::add_query_args_and_nonce($create_args, EE_MSG_ADMIN_URL);
124
+			return sprintf(
125
+				'<p><a href="%s" class="button button-small">%s</a></p>',
126
+				$create_link,
127
+				esc_html__('Create Custom', 'event_espresso')
128
+			);
129
+		}
130
+		return '';
131
+	}
132 132
 
133
-    /**
134
-     * Set the view counts on the _views property
135
-     */
136
-    protected function _add_view_counts()
137
-    {
138
-        foreach ($this->_views as $view => $args) {
139
-            $this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
140
-                $this->_per_page,
141
-                $view,
142
-                true,
143
-                true,
144
-                false
145
-            );
146
-        }
147
-    }
133
+	/**
134
+	 * Set the view counts on the _views property
135
+	 */
136
+	protected function _add_view_counts()
137
+	{
138
+		foreach ($this->_views as $view => $args) {
139
+			$this->_views[ $view ]['count'] = $this->get_admin_page()->get_message_templates(
140
+				$this->_per_page,
141
+				$view,
142
+				true,
143
+				true,
144
+				false
145
+			);
146
+		}
147
+	}
148 148
 
149 149
 
150
-    /**
151
-     * column_events
152
-     * This provides a count of events using this custom template
153
-     *
154
-     * @param  EE_Message_Template_Group $item message_template group data
155
-     * @return string column output
156
-     */
157
-    public function column_events($item)
158
-    {
159
-        return $item->count_events();
160
-    }
150
+	/**
151
+	 * column_events
152
+	 * This provides a count of events using this custom template
153
+	 *
154
+	 * @param  EE_Message_Template_Group $item message_template group data
155
+	 * @return string column output
156
+	 */
157
+	public function column_events($item)
158
+	{
159
+		return $item->count_events();
160
+	}
161 161
 
162 162
 
163
-    /**
164
-     * Add additional actions for custom message template list view.
165
-     *
166
-     * @param EE_Message_Template_Group $item
167
-     * @return array
168
-     * @throws EE_Error
169
-     */
170
-    protected function _get_actions_for_messenger_column(EE_Message_Template_Group $item)
171
-    {
172
-        $actions = parent::_get_actions_for_messenger_column($item);
163
+	/**
164
+	 * Add additional actions for custom message template list view.
165
+	 *
166
+	 * @param EE_Message_Template_Group $item
167
+	 * @return array
168
+	 * @throws EE_Error
169
+	 */
170
+	protected function _get_actions_for_messenger_column(EE_Message_Template_Group $item)
171
+	{
172
+		$actions = parent::_get_actions_for_messenger_column($item);
173 173
 
174
-        // add additional actions for trash/restore etc.
175
-        $trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
176
-            'action'   => 'trash_message_template',
177
-            'id'       => $item->GRP_ID(),
178
-            'noheader' => true,
179
-        ), EE_MSG_ADMIN_URL);
180
-        // restore link
181
-        $restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
182
-            'action'   => 'restore_message_template',
183
-            'id'       => $item->GRP_ID(),
184
-            'noheader' => true,
185
-        ), EE_MSG_ADMIN_URL);
186
-        // delete price link
187
-        $delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
188
-            'action'   => 'delete_message_template',
189
-            'id'       => $item->GRP_ID(),
190
-            'noheader' => true,
191
-        ), EE_MSG_ADMIN_URL);
174
+		// add additional actions for trash/restore etc.
175
+		$trash_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
176
+			'action'   => 'trash_message_template',
177
+			'id'       => $item->GRP_ID(),
178
+			'noheader' => true,
179
+		), EE_MSG_ADMIN_URL);
180
+		// restore link
181
+		$restore_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
182
+			'action'   => 'restore_message_template',
183
+			'id'       => $item->GRP_ID(),
184
+			'noheader' => true,
185
+		), EE_MSG_ADMIN_URL);
186
+		// delete price link
187
+		$delete_lnk_url = EE_Admin_Page::add_query_args_and_nonce(array(
188
+			'action'   => 'delete_message_template',
189
+			'id'       => $item->GRP_ID(),
190
+			'noheader' => true,
191
+		), EE_MSG_ADMIN_URL);
192 192
 
193
-        if (
194
-            ! $item->get('MTP_deleted')
195
-            && EE_Registry::instance()->CAP->current_user_can(
196
-                'ee_delete_message',
197
-                'espresso_messages_trash_message_template',
198
-                $item->ID()
199
-            )
200
-        ) {
201
-            $actions['trash'] = '<a href="'
202
-                                . $trash_lnk_url
203
-                                . '" title="'
204
-                                . esc_attr__('Move Template Group to Trash', 'event_espresso')
205
-                                . '">'
206
-                                . esc_html__('Move to Trash', 'event_espresso')
207
-                                . '</a>';
208
-        } else {
209
-            if (
210
-                EE_Registry::instance()->CAP->current_user_can(
211
-                    'ee_delete_message',
212
-                    'espresso_messages_restore_message_template',
213
-                    $item->ID()
214
-                )
215
-            ) {
216
-                $actions['restore'] = '<a href="'
217
-                                      . $restore_lnk_url
218
-                                      . '" title="'
219
-                                      . esc_attr__('Restore Message Template', 'event_espresso')
220
-                                      . '">'
221
-                                      . esc_html__('Restore', 'event_espresso') . '</a>';
222
-            }
193
+		if (
194
+			! $item->get('MTP_deleted')
195
+			&& EE_Registry::instance()->CAP->current_user_can(
196
+				'ee_delete_message',
197
+				'espresso_messages_trash_message_template',
198
+				$item->ID()
199
+			)
200
+		) {
201
+			$actions['trash'] = '<a href="'
202
+								. $trash_lnk_url
203
+								. '" title="'
204
+								. esc_attr__('Move Template Group to Trash', 'event_espresso')
205
+								. '">'
206
+								. esc_html__('Move to Trash', 'event_espresso')
207
+								. '</a>';
208
+		} else {
209
+			if (
210
+				EE_Registry::instance()->CAP->current_user_can(
211
+					'ee_delete_message',
212
+					'espresso_messages_restore_message_template',
213
+					$item->ID()
214
+				)
215
+			) {
216
+				$actions['restore'] = '<a href="'
217
+									  . $restore_lnk_url
218
+									  . '" title="'
219
+									  . esc_attr__('Restore Message Template', 'event_espresso')
220
+									  . '">'
221
+									  . esc_html__('Restore', 'event_espresso') . '</a>';
222
+			}
223 223
 
224
-            if (
225
-                $this->_view === 'trashed'
226
-                && EE_Registry::instance()->CAP->current_user_can(
227
-                    'ee_delete_message',
228
-                    'espresso_messages_delete_message_template',
229
-                    $item->ID()
230
-                )
231
-            ) {
232
-                $actions['delete'] = '<a href="'
233
-                                     . $delete_lnk_url
234
-                                     . '" title="'
235
-                                     . esc_attr__('Delete Template Group Permanently', 'event_espresso')
236
-                                     . '">'
237
-                                     . esc_html__('Delete Permanently', 'event_espresso')
238
-                                     . '</a>';
239
-            }
240
-        }
241
-        return $actions;
242
-    }
224
+			if (
225
+				$this->_view === 'trashed'
226
+				&& EE_Registry::instance()->CAP->current_user_can(
227
+					'ee_delete_message',
228
+					'espresso_messages_delete_message_template',
229
+					$item->ID()
230
+				)
231
+			) {
232
+				$actions['delete'] = '<a href="'
233
+									 . $delete_lnk_url
234
+									 . '" title="'
235
+									 . esc_attr__('Delete Template Group Permanently', 'event_espresso')
236
+									 . '">'
237
+									 . esc_html__('Delete Permanently', 'event_espresso')
238
+									 . '</a>';
239
+			}
240
+		}
241
+		return $actions;
242
+	}
243 243
 
244 244
 
245
-    /**
246
-     * Generate dropdown filter select input for messengers
247
-     *
248
-     * @param bool $global
249
-     * @return string
250
-     * @throws EE_Error
251
-     */
252
-    protected function _get_messengers_dropdown_filter($global = true)
253
-    {
254
-        return parent::_get_messengers_dropdown_filter(false);
255
-    }
245
+	/**
246
+	 * Generate dropdown filter select input for messengers
247
+	 *
248
+	 * @param bool $global
249
+	 * @return string
250
+	 * @throws EE_Error
251
+	 */
252
+	protected function _get_messengers_dropdown_filter($global = true)
253
+	{
254
+		return parent::_get_messengers_dropdown_filter(false);
255
+	}
256 256
 
257 257
 
258
-    /**
259
-     * Generate dropdown filter select input for message types
260
-     *
261
-     * @param bool $global
262
-     * @return string
263
-     * @throws EE_Error
264
-     */
265
-    protected function _get_message_types_dropdown_filter($global = true)
266
-    {
267
-        return parent::_get_message_types_dropdown_filter(false);
268
-    }
258
+	/**
259
+	 * Generate dropdown filter select input for message types
260
+	 *
261
+	 * @param bool $global
262
+	 * @return string
263
+	 * @throws EE_Error
264
+	 */
265
+	protected function _get_message_types_dropdown_filter($global = true)
266
+	{
267
+		return parent::_get_message_types_dropdown_filter(false);
268
+	}
269 269
 }
Please login to merge, or discard this patch.
caffeinated/EE_Caf_Messages.class.php 2 patches
Spacing   +43 added lines, -43 removed lines patch added patch discarded remove patch
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
      */
130 130
     public function messages_autoload_paths($dir_ref)
131 131
     {
132
-        $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/';
132
+        $dir_ref[] = EE_CAF_LIBRARIES.'shortcodes/';
133 133
 
134 134
         return $dir_ref;
135 135
     }
@@ -245,32 +245,32 @@  discard block
 block discarded – undo
245 245
     ) {
246 246
 
247 247
         // we're only modifying templates for the default template pack
248
-        if (! $template_pack instanceof EE_Messages_Template_Pack_Default) {
248
+        if ( ! $template_pack instanceof EE_Messages_Template_Pack_Default) {
249 249
             return $contents;
250 250
         }
251 251
 
252 252
         // the template file name we're replacing contents for.
253
-        $template_file_prefix = $field . '_' . $context;
254
-        $msg_prefix = $messenger->name . '_' . $message_type->name . '_';
253
+        $template_file_prefix = $field.'_'.$context;
254
+        $msg_prefix = $messenger->name.'_'.$message_type->name.'_';
255 255
 
256
-        $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/';
256
+        $base_path = EE_CAF_LIBRARIES.'messages/defaults/default/';
257 257
 
258 258
         if ($messenger->name == 'email' && $message_type->name == 'registration') {
259 259
             switch ($template_file_prefix) {
260 260
                 case 'question_list_admin':
261 261
                 case 'question_list_attendee':
262 262
                 case 'question_list_primary_attendee':
263
-                    $path = $base_path . $msg_prefix . 'question_list.template.php';
263
+                    $path = $base_path.$msg_prefix.'question_list.template.php';
264 264
                     $contents = EEH_Template::display_template($path, array(), true);
265 265
                     break;
266 266
 
267 267
                 case 'attendee_list_primary_attendee':
268
-                    $path = $base_path . $msg_prefix . 'attendee_list.template.php';
268
+                    $path = $base_path.$msg_prefix.'attendee_list.template.php';
269 269
                     $contents = EEH_Template::display_template($path, array(), true);
270 270
                     break;
271 271
 
272 272
                 case 'attendee_list_admin':
273
-                    $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php';
273
+                    $path = $base_path.$msg_prefix.'attendee_list_admin.template.php';
274 274
                     $contents = EEH_Template::display_template(
275 275
                         $path,
276 276
                         array(),
@@ -283,31 +283,31 @@  discard block
 block discarded – undo
283 283
                     break;
284 284
 
285 285
                 case 'event_list_attendee':
286
-                    $path = $base_path . $msg_prefix . 'event_list_attendee.template.php';
286
+                    $path = $base_path.$msg_prefix.'event_list_attendee.template.php';
287 287
                     $contents = EEH_Template::display_template($path, array(), true);
288 288
                     break;
289 289
             }
290 290
         } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') {
291 291
             switch ($template_file_prefix) {
292 292
                 case 'content_attendee':
293
-                    $path = $base_path . $msg_prefix . 'content.template.php';
293
+                    $path = $base_path.$msg_prefix.'content.template.php';
294 294
                     $contents = EEH_Template::display_template($path, array(), true);
295 295
                     break;
296 296
 
297 297
                 case 'newsletter_content_attendee':
298
-                    $path = $base_path . $msg_prefix . 'newsletter_content.template.php';
298
+                    $path = $base_path.$msg_prefix.'newsletter_content.template.php';
299 299
                     $contents = EEH_Template::display_template($path, array(), true);
300 300
                     break;
301 301
 
302 302
                 case 'newsletter_subject_attendee':
303
-                    $path = $base_path . $msg_prefix . 'subject.template.php';
303
+                    $path = $base_path.$msg_prefix.'subject.template.php';
304 304
                     $contents = EEH_Template::display_template($path, array(), true);
305 305
                     break;
306 306
             }
307 307
         } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') {
308 308
             switch ($template_file_prefix) {
309 309
                 case 'attendee_list_purchaser':
310
-                    $path = $base_path . $msg_prefix . 'attendee_list.template.php';
310
+                    $path = $base_path.$msg_prefix.'attendee_list.template.php';
311 311
                     $contents = EEH_Template::display_template($path, array(), true);
312 312
                     break;
313 313
             }
@@ -338,8 +338,8 @@  discard block
 block discarded – undo
338 338
         if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) {
339 339
             $contexts = array_keys($msg->get_contexts());
340 340
             foreach ($contexts as $context) {
341
-                $valid_shortcodes[ $context ][] = 'question_list';
342
-                $valid_shortcodes[ $context ][] = 'question';
341
+                $valid_shortcodes[$context][] = 'question_list';
342
+                $valid_shortcodes[$context][] = 'question';
343 343
             }
344 344
         }
345 345
 
@@ -383,7 +383,7 @@  discard block
 block discarded – undo
383 383
             $extra_data
384 384
         ) && isset($extra_data['data']) ? $extra_data['data'] : $aee;
385 385
 
386
-        if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) {
386
+        if ( ! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) {
387 387
             return $parsed;
388 388
         }
389 389
 
@@ -392,9 +392,9 @@  discard block
 block discarded – undo
392 392
             if (
393 393
                 $question instanceof EE_Question
394 394
                 && trim($question->display_text()) == trim($shortcode)
395
-                && isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ])
395
+                && isset($aee->registrations[$registration->ID()]['ans_objs'][$ansid])
396 396
             ) {
397
-                return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty(
397
+                return $aee->registrations[$registration->ID()]['ans_objs'][$ansid]->get_pretty(
398 398
                     'ANS_value',
399 399
                     'no_wpautop'
400 400
                 );
@@ -455,7 +455,7 @@  discard block
 block discarded – undo
455 455
     public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
456 456
     {
457 457
 
458
-        if (! $data instanceof EE_Datetime) {
458
+        if ( ! $data instanceof EE_Datetime) {
459 459
             return ''; // get out because we can only parse with the datetime object.
460 460
         }
461 461
 
@@ -508,7 +508,7 @@  discard block
 block discarded – undo
508 508
         $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
509 509
         $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
510 510
 
511
-        if (! $recipient instanceof EE_Messages_Addressee) {
511
+        if ( ! $recipient instanceof EE_Messages_Addressee) {
512 512
             return $parsed;
513 513
         }
514 514
 
@@ -516,7 +516,7 @@  discard block
 block discarded – undo
516 516
             case '[RECIPIENT_QUESTION_LIST]':
517 517
                 $att = $recipient->att_obj;
518 518
                 $registrations_on_attendee = $att instanceof EE_Attendee
519
-                    ? $recipient->attendees[ $att->ID() ]['reg_objs']
519
+                    ? $recipient->attendees[$att->ID()]['reg_objs']
520 520
                     : array();
521 521
                 $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee;
522 522
                 $answers = array();
@@ -530,12 +530,12 @@  discard block
 block discarded – undo
530 530
                 if ($data['data'] instanceof EE_Messages_Addressee) {
531 531
                     foreach ($registrations_on_attendee as $reg) {
532 532
                         if ($reg instanceof EE_Registration) {
533
-                            $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
534
-                                ? $recipient->registrations[ $reg->ID() ]['ans_objs']
533
+                            $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs'])
534
+                                ? $recipient->registrations[$reg->ID()]['ans_objs']
535 535
                                 : array();
536 536
                             foreach ($anss as $ans) {
537 537
                                 if ($ans instanceof EE_Answer) {
538
-                                    $answers[ $ans->ID() ] = $ans;
538
+                                    $answers[$ans->ID()] = $ans;
539 539
                                 }
540 540
                             }
541 541
                         }
@@ -547,12 +547,12 @@  discard block
 block discarded – undo
547 547
                     $event = $data['data'];
548 548
                     foreach ($registrations_on_attendee as $reg) {
549 549
                         if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) {
550
-                            $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
551
-                                ? $recipient->registrations[ $reg->ID() ]['ans_objs']
550
+                            $anss = ! empty($recipient->registrations[$reg->ID()]['ans_objs'])
551
+                                ? $recipient->registrations[$reg->ID()]['ans_objs']
552 552
                                 : array();
553 553
                             foreach ($anss as $ans) {
554 554
                                 if ($ans instanceof EE_Answer) {
555
-                                    $answers[ $ans->ID() ] = $ans;
555
+                                    $answers[$ans->ID()] = $ans;
556 556
                                 }
557 557
                             }
558 558
                         }
@@ -563,7 +563,7 @@  discard block
 block discarded – undo
563 563
 
564 564
                 // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
565 565
                 // object on it.
566
-                if (! isset($extra_data['data'])) {
566
+                if ( ! isset($extra_data['data'])) {
567 567
                     $extra_data['data'] = $recipient;
568 568
                 }
569 569
 
@@ -620,18 +620,18 @@  discard block
 block discarded – undo
620 620
         $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
621 621
         $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
622 622
 
623
-        if (! $recipient instanceof EE_Messages_Addressee) {
623
+        if ( ! $recipient instanceof EE_Messages_Addressee) {
624 624
             return $parsed;
625 625
         }
626 626
 
627 627
         switch ($shortcode) {
628 628
             case '[PRIMARY_REGISTRANT_QUESTION_LIST]':
629
-                if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) {
629
+                if ( ! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) {
630 630
                     return '';
631 631
                 }
632 632
                 $registration = $recipient->primary_reg_obj;
633
-                $answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs'])
634
-                    ? $recipient->registrations[ $registration->ID() ]['ans_objs']
633
+                $answers = isset($recipient->registrations[$registration->ID()]['ans_objs'])
634
+                    ? $recipient->registrations[$registration->ID()]['ans_objs']
635 635
                     : array();
636 636
                 if (empty($answers)) {
637 637
                     return '';
@@ -640,11 +640,11 @@  discard block
 block discarded – undo
640 640
                     ? $data['template']['question_list']
641 641
                     : $extra_data['template']['question_list'];
642 642
                 $valid_shortcodes = array('question');
643
-                $answers = $recipient->registrations[ $registration->ID() ]['ans_objs'];
643
+                $answers = $recipient->registrations[$registration->ID()]['ans_objs'];
644 644
                 $questions = isset($recipient->questions) ? $recipient->questions : array();
645 645
                 // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
646 646
                 // object on it.
647
-                if (! isset($extra_data['data'])) {
647
+                if ( ! isset($extra_data['data'])) {
648 648
                     $extra_data['data'] = $recipient;
649 649
                 }
650 650
                 return $this->_parse_question_list_for_primary_or_recipient_registration(
@@ -677,7 +677,7 @@  discard block
 block discarded – undo
677 677
         $setup_args = array(
678 678
             'mtfilename'                                       => 'EE_Newsletter_message_type.class.php',
679 679
             'autoloadpaths'                                    => array(
680
-                EE_CAF_LIBRARIES . 'messages/message_type/newsletter/',
680
+                EE_CAF_LIBRARIES.'messages/message_type/newsletter/',
681 681
             ),
682 682
             'messengers_to_activate_with'                      => array('email'),
683 683
             'messengers_to_validate_with'                      => array('email'),
@@ -688,7 +688,7 @@  discard block
 block discarded – undo
688 688
         // register payment reminder message type
689 689
         $setup_args = array(
690 690
             'mtfilename'                                       => 'EE_Payment_Reminder_message_type.class.php',
691
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'),
691
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/payment_reminder/'),
692 692
             'messengers_to_activate_with'                      => array('email'),
693 693
             'messengers_to_validate_with'                      => array('email'),
694 694
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -698,7 +698,7 @@  discard block
 block discarded – undo
698 698
         // register payment declined message type
699 699
         $setup_args = array(
700 700
             'mtfilename'                                       => 'EE_Payment_Declined_message_type.class.php',
701
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'),
701
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/payment_declined/'),
702 702
             'messengers_to_activate_with'                      => array('email'),
703 703
             'messengers_to_validate_with'                      => array('email'),
704 704
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -708,7 +708,7 @@  discard block
 block discarded – undo
708 708
         // register registration declined message type
709 709
         $setup_args = array(
710 710
             'mtfilename'                                       => 'EE_Declined_Registration_message_type.class.php',
711
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'),
711
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/declined_registration/'),
712 712
             'messengers_to_activate_with'                      => array('email'),
713 713
             'messengers_to_validate_with'                      => array('email'),
714 714
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -718,7 +718,7 @@  discard block
 block discarded – undo
718 718
         // register registration cancelled message type
719 719
         $setup_args = array(
720 720
             'mtfilename'                                       => 'EE_Cancelled_Registration_message_type.class.php',
721
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'),
721
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/cancelled_registration/'),
722 722
             'messengers_to_activate_with'                      => array('email'),
723 723
             'messengers_to_validate_with'                      => array('email'),
724 724
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -729,7 +729,7 @@  discard block
 block discarded – undo
729 729
         // register payment failed message type
730 730
         $setup_args = array(
731 731
             'mtfilename'                                       => 'EE_Payment_Failed_message_type.class.php',
732
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'),
732
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/payment_failed/'),
733 733
             'messengers_to_activate_with'                      => array('email'),
734 734
             'messengers_to_validate_with'                      => array('email'),
735 735
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -739,7 +739,7 @@  discard block
 block discarded – undo
739 739
         // register payment declined message type
740 740
         $setup_args = array(
741 741
             'mtfilename'                                       => 'EE_Payment_Cancelled_message_type.class.php',
742
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'),
742
+            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES.'messages/message_type/payment_cancelled/'),
743 743
             'messengers_to_activate_with'                      => array('email'),
744 744
             'messengers_to_validate_with'                      => array('email'),
745 745
             'messengers_supporting_default_template_pack_with' => array('email'),
@@ -759,7 +759,7 @@  discard block
 block discarded – undo
759 759
     {
760 760
         $setup_args = array(
761 761
             'autoloadpaths'                 => array(
762
-                EE_CAF_LIBRARIES . 'shortcodes/',
762
+                EE_CAF_LIBRARIES.'shortcodes/',
763 763
             ),
764 764
             'msgr_validator_callback'       => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'),
765 765
             'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'),
@@ -793,7 +793,7 @@  discard block
 block discarded – undo
793 793
         foreach ($answers as $answer) {
794 794
             if ($answer instanceof EE_Answer) {
795 795
                 // first see if the question is in our $questions array. If not then try to get from answer object.
796
-                $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null;
796
+                $question = isset($questions[$answer->ID()]) ? $questions[$answer->ID()] : null;
797 797
                 $question = ! $question instanceof EE_Question ? $answer->question() : $question;
798 798
                 if (
799 799
                     ! $question instanceof EE_Question
Please login to merge, or discard this patch.
Indentation   +802 added lines, -802 removed lines patch added patch discarded remove patch
@@ -10,806 +10,806 @@
 block discarded – undo
10 10
  */
11 11
 class EE_Caf_Messages
12 12
 {
13
-    /**
14
-     * constructor.
15
-     */
16
-    public function __construct()
17
-    {
18
-        $this->_caf_hooks();
19
-    }
20
-
21
-
22
-    /**
23
-     * Contains all the hooks filters for setting up caffeinated messages functionality.
24
-     *
25
-     * @since 4.3.2
26
-     *
27
-     * @return void
28
-     */
29
-    private function _caf_hooks()
30
-    {
31
-        add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5);
32
-        add_filter(
33
-            'FHEE__EE_Email_messenger__get_validator_config',
34
-            array($this, 'email_messenger_validator_config'),
35
-            5,
36
-            2
37
-        );
38
-        add_filter(
39
-            'FHEE__EE_Email_messenger__get_template_fields',
40
-            array($this, 'email_messenger_template_fields'),
41
-            5,
42
-            2
43
-        );
44
-        add_filter(
45
-            'FHEE__EE_Html_messenger__get_template_fields',
46
-            array($this, 'html_messenger_template_fields'),
47
-            5,
48
-            2
49
-        );
50
-        add_filter(
51
-            'FHEE__EE_Html_messenger__get_validator_config',
52
-            array($this, 'html_messenger_validator_config'),
53
-            5,
54
-            2
55
-        );
56
-        add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2);
57
-        add_filter(
58
-            'FHEE__EE_Pdf_messenger__get_validator_config',
59
-            array($this, 'pdf_messenger_validator_config'),
60
-            5,
61
-            2
62
-        );
63
-        add_filter(
64
-            'FHEE__EE_Messages_Template_Pack__get_specific_template__contents',
65
-            array($this, 'new_default_templates'),
66
-            5,
67
-            7
68
-        );
69
-        add_filter(
70
-            'FHEE__EE_Messages_Base__get_valid_shortcodes',
71
-            array($this, 'message_types_valid_shortcodes'),
72
-            5,
73
-            2
74
-        );
75
-
76
-        // shortcode parsers
77
-        add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2);
78
-        add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5);
79
-        add_filter(
80
-            'FHEE__EE_Recipient_List_Shortcodes__shortcodes',
81
-            array($this, 'additional_recipient_details_shortcodes'),
82
-            5,
83
-            2
84
-        );
85
-        add_filter(
86
-            'FHEE__EE_Recipient_List_Shortcodes__parser_after',
87
-            array($this, 'additional_recipient_details_parser'),
88
-            5,
89
-            5
90
-        );
91
-        add_filter(
92
-            'FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes',
93
-            array($this, 'additional_primary_registration_details_shortcodes'),
94
-            5,
95
-            2
96
-        );
97
-        add_filter(
98
-            'FHEE__EE_Primary_Registration_List_Shortcodes__parser_after',
99
-            array($this, 'additional_primary_registration_details_parser'),
100
-            5,
101
-            5
102
-        );
103
-
104
-        /**
105
-         * @since 4.2.0
106
-         */
107
-        add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2);
108
-        add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5);
109
-
110
-        /**
111
-         * @since 4.3.0
112
-         */
113
-        // eat our own dog food!
114
-        add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types'));
115
-        add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes'));
116
-        do_action('EE_Brewing_Regular___messages_caf');
117
-    }
118
-
119
-
120
-    /**
121
-     * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the
122
-     * messages system.
123
-     *
124
-     * @param  array $dir_ref original array of paths
125
-     *
126
-     * @return array           appended paths
127
-     */
128
-    public function messages_autoload_paths($dir_ref)
129
-    {
130
-        $dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/';
131
-
132
-        return $dir_ref;
133
-    }
134
-
135
-
136
-    public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger)
137
-    {
138
-        $validator_config['attendee_list'] = array(
139
-            'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'),
140
-            'required'   => array('[ATTENDEE_LIST]'),
141
-        );
142
-        $validator_config['question_list'] = array(
143
-            'shortcodes' => array('question'),
144
-            'required'   => array('[QUESTION_LIST]'),
145
-        );
146
-
147
-        return $validator_config;
148
-    }
149
-
150
-
151
-    public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger)
152
-    {
153
-        $validator_config['attendee_list'] = array(
154
-            'shortcodes' => array('attendee', 'question_list'),
155
-            'required'   => array('[ATTENDEE_LIST]'),
156
-        );
157
-        $validator_config['question_list'] = array(
158
-            'shortcodes' => array('question'),
159
-            'required'   => array('[QUESTION_LIST]'),
160
-        );
161
-
162
-        return $validator_config;
163
-    }
164
-
165
-
166
-    public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger)
167
-    {
168
-        $validator_config['attendee_list'] = array(
169
-            'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'),
170
-            'required'   => array('[ATTENDEE_LIST]'),
171
-        );
172
-        $validator_config['question_list'] = array(
173
-            'shortcodes' => array('question'),
174
-            'required'   => array('[QUESTION_LIST]'),
175
-        );
176
-
177
-        return $validator_config;
178
-    }
179
-
180
-
181
-    public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger)
182
-    {
183
-        $template_fields['extra']['content']['question_list'] = array(
184
-            'input'               => 'textarea',
185
-            'label'               => '[QUESTION_LIST]',
186
-            'type'                => 'string',
187
-            'required'            => true,
188
-            'validation'          => true,
189
-            'format'              => '%s',
190
-            'css_class'           => 'large-text',
191
-            'rows'                => '5',
192
-            'shortcodes_required' => array('[QUESTION_LIST]'),
193
-        );
194
-
195
-        return $template_fields;
196
-    }
197
-
198
-
199
-    public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger)
200
-    {
201
-        $template_fields['extra']['content']['question_list'] = array(
202
-            'input'               => 'textarea',
203
-            'label'               => '[QUESTION_LIST]',
204
-            'type'                => 'string',
205
-            'required'            => true,
206
-            'validation'          => true,
207
-            'format'              => '%s',
208
-            'css_class'           => 'large-text',
209
-            'rows'                => '5',
210
-            'shortcodes_required' => array('[QUESTION_LIST]'),
211
-        );
212
-
213
-        return $template_fields;
214
-    }
215
-
216
-
217
-    public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger)
218
-    {
219
-        $template_fields['extra']['content']['question_list'] = array(
220
-            'input'               => 'textarea',
221
-            'label'               => '[QUESTION_LIST]',
222
-            'type'                => 'string',
223
-            'required'            => true,
224
-            'validation'          => true,
225
-            'format'              => '%s',
226
-            'css_class'           => 'large-text',
227
-            'rows'                => '5',
228
-            'shortcodes_required' => array('[QUESTION_LIST]'),
229
-        );
230
-
231
-        return $template_fields;
232
-    }
233
-
234
-
235
-    public function new_default_templates(
236
-        $contents,
237
-        $actual_path,
238
-        EE_messenger $messenger,
239
-        EE_message_type $message_type,
240
-        $field,
241
-        $context,
242
-        EE_Messages_Template_Pack $template_pack
243
-    ) {
244
-
245
-        // we're only modifying templates for the default template pack
246
-        if (! $template_pack instanceof EE_Messages_Template_Pack_Default) {
247
-            return $contents;
248
-        }
249
-
250
-        // the template file name we're replacing contents for.
251
-        $template_file_prefix = $field . '_' . $context;
252
-        $msg_prefix = $messenger->name . '_' . $message_type->name . '_';
253
-
254
-        $base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/';
255
-
256
-        if ($messenger->name == 'email' && $message_type->name == 'registration') {
257
-            switch ($template_file_prefix) {
258
-                case 'question_list_admin':
259
-                case 'question_list_attendee':
260
-                case 'question_list_primary_attendee':
261
-                    $path = $base_path . $msg_prefix . 'question_list.template.php';
262
-                    $contents = EEH_Template::display_template($path, array(), true);
263
-                    break;
264
-
265
-                case 'attendee_list_primary_attendee':
266
-                    $path = $base_path . $msg_prefix . 'attendee_list.template.php';
267
-                    $contents = EEH_Template::display_template($path, array(), true);
268
-                    break;
269
-
270
-                case 'attendee_list_admin':
271
-                    $path = $base_path . $msg_prefix . 'attendee_list_admin.template.php';
272
-                    $contents = EEH_Template::display_template(
273
-                        $path,
274
-                        array(),
275
-                        true
276
-                    );
277
-                    break;
278
-
279
-                case 'attendee_list_attendee':
280
-                    $contents = '';
281
-                    break;
282
-
283
-                case 'event_list_attendee':
284
-                    $path = $base_path . $msg_prefix . 'event_list_attendee.template.php';
285
-                    $contents = EEH_Template::display_template($path, array(), true);
286
-                    break;
287
-            }
288
-        } elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') {
289
-            switch ($template_file_prefix) {
290
-                case 'content_attendee':
291
-                    $path = $base_path . $msg_prefix . 'content.template.php';
292
-                    $contents = EEH_Template::display_template($path, array(), true);
293
-                    break;
294
-
295
-                case 'newsletter_content_attendee':
296
-                    $path = $base_path . $msg_prefix . 'newsletter_content.template.php';
297
-                    $contents = EEH_Template::display_template($path, array(), true);
298
-                    break;
299
-
300
-                case 'newsletter_subject_attendee':
301
-                    $path = $base_path . $msg_prefix . 'subject.template.php';
302
-                    $contents = EEH_Template::display_template($path, array(), true);
303
-                    break;
304
-            }
305
-        } elseif ($messenger->name == 'html' && $message_type->name == 'receipt') {
306
-            switch ($template_file_prefix) {
307
-                case 'attendee_list_purchaser':
308
-                    $path = $base_path . $msg_prefix . 'attendee_list.template.php';
309
-                    $contents = EEH_Template::display_template($path, array(), true);
310
-                    break;
311
-            }
312
-        }
313
-
314
-        return $contents;
315
-    }
316
-
317
-
318
-    public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg)
319
-    {
320
-        // make sure question_list and question are ONLY added for the core message types.  Any other message types will have to explicitly set question_list as a valid shortcode.
321
-        $include_with = array(
322
-            'registration',
323
-            'cancelled_registration',
324
-            'declined_registration',
325
-            'not_approved_registration',
326
-            'payment_declined',
327
-            'payment_failed',
328
-            'payment_cancelled',
329
-            'payment',
330
-            'payment_reminder',
331
-            'pending_approval',
332
-            'registration_summary',
333
-            'invoice',
334
-            'receipt',
335
-        );
336
-        if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) {
337
-            $contexts = array_keys($msg->get_contexts());
338
-            foreach ($contexts as $context) {
339
-                $valid_shortcodes[ $context ][] = 'question_list';
340
-                $valid_shortcodes[ $context ][] = 'question';
341
-            }
342
-        }
343
-
344
-        return $valid_shortcodes;
345
-    }
346
-
347
-
348
-    public function additional_attendee_shortcodes($shortcodes, $shortcode_parser)
349
-    {
350
-        $shortcodes['[ANSWER_*]'] = esc_html__(
351
-            'This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.',
352
-            'event_espresso'
353
-        );
354
-
355
-        return $shortcodes;
356
-    }
357
-
358
-
359
-    public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
360
-    {
361
-
362
-        if (
363
-            strpos($shortcode, '[ANSWER_*') === false
364
-            || ! isset($extra_data['data']->questions)
365
-            || ! isset($extra_data['data']->registrations)
366
-        ) {
367
-            return $parsed;
368
-        }
369
-
370
-        // let's get the question from the code.
371
-        $shortcode = str_replace('[ANSWER_*', '', $shortcode);
372
-        $shortcode = trim(str_replace(']', '', $shortcode));
373
-
374
-        $registration = $data instanceof EE_Registration ? $data : null;
375
-        $registration = ! $registration instanceof EE_Registration && is_array(
376
-            $extra_data
377
-        ) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration;
378
-
379
-        $aee = $data instanceof EE_Messages_Addressee ? $data : null;
380
-        $aee = ! $aee instanceof EE_Messages_Addressee && is_array(
381
-            $extra_data
382
-        ) && isset($extra_data['data']) ? $extra_data['data'] : $aee;
383
-
384
-        if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) {
385
-            return $parsed;
386
-        }
387
-
388
-        // now let's figure out which question has this text.
389
-        foreach ($aee->questions as $ansid => $question) {
390
-            if (
391
-                $question instanceof EE_Question
392
-                && trim($question->display_text()) == trim($shortcode)
393
-                && isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ])
394
-            ) {
395
-                return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty(
396
-                    'ANS_value',
397
-                    'no_wpautop'
398
-                );
399
-            }
400
-        }
401
-
402
-        // nothing!
403
-        return $parsed;
404
-    }
405
-
406
-
407
-    /**
408
-     * Callback for additional shortcodes filter for adding additional datetime shortcodes.
409
-     *
410
-     * @since  4.2
411
-     *
412
-     * @param  array                  $shortcodes         array of shortcodes and
413
-     *                                                    descriptions
414
-     * @param  EE_Datetime_Shortcodes $shortcode_parser   EE_Shortcodes object
415
-     *
416
-     * @return array                                        array of shortcodes and
417
-     *                                                        descriptions
418
-     */
419
-    public function additional_datetime_shortcodes($shortcodes, $shortcode_parser)
420
-    {
421
-        $shortcodes['[DTT_NAME]'] = esc_html__(
422
-            'This will be parsed to the Title given for a Datetime',
423
-            'event_espresso'
424
-        );
425
-        $shortcodes['[DTT_DESCRIPTION]'] = esc_html__(
426
-            'This will be parsed to the description for a Datetime',
427
-            'event_espresso'
428
-        );
429
-        $shortcodes['[DTT_NAME_OR_DATES]'] = esc_html__(
430
-            'When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.',
431
-            'event_espresso'
432
-        );
433
-
434
-        return $shortcodes;
435
-    }
436
-
437
-
438
-    /**
439
-     * Callback for additional shortcodes parser filter used for adding parser for new
440
-     * Datetime shortcodes
441
-     *
442
-     * @since  4.2
443
-     *
444
-     * @param  string                 $parsed     The finished parsed string for the given shortcode.
445
-     * @param  string                 $shortcode  The shortcode being parsed.
446
-     * @param  object                 $data       The incoming data object for the Shortcode Parser.
447
-     * @param  object                 $extra_data The incoming extra date object for the Shortcode
448
-     *                                            Parser.
449
-     * @param  EE_Datetime_Shortcodes $shortcode_parser
450
-     *
451
-     * @return string                   The new parsed string.
452
-     */
453
-    public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
454
-    {
455
-
456
-        if (! $data instanceof EE_Datetime) {
457
-            return ''; // get out because we can only parse with the datetime object.
458
-        }
459
-
460
-        switch ($shortcode) {
461
-            case '[DTT_NAME]':
462
-                return $data->name();
463
-                break;
464
-            case '[DTT_DESCRIPTION]':
465
-                return $data->description();
466
-                break;
467
-            case '[DTT_NAME_OR_DATES]':
468
-                return $data->get_dtt_display_name(true);
469
-                break;
470
-            default:
471
-                return $parsed;
472
-                break;
473
-        }
474
-    }
475
-
476
-
477
-    public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser)
478
-    {
479
-        $shortcodes['[RECIPIENT_QUESTION_LIST]'] = esc_html__(
480
-            'This is used to indicate where you want the list of questions and answers to show for the person receiving the message.',
481
-            'event_espresso'
482
-        );
483
-
484
-        return $shortcodes;
485
-    }
486
-
487
-
488
-    /**
489
-     * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter).
490
-     *
491
-     * @param string         $parsed           The original parsed content for the shortcode
492
-     * @param string         $shortcode        The shortcode being parsed
493
-     * @param array          $data             The shortcode parser data array
494
-     * @param array          $extra_data       The shortcode parser extra data array
495
-     * @param \EE_Shortcodes $shortcode_parser Shortcode parser.
496
-     *
497
-     * @return string
498
-     */
499
-    public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
500
-    {
501
-
502
-        if (array($data) && ! isset($data['data'])) {
503
-            return $parsed;
504
-        }
505
-
506
-        $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
507
-        $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
508
-
509
-        if (! $recipient instanceof EE_Messages_Addressee) {
510
-            return $parsed;
511
-        }
512
-
513
-        switch ($shortcode) {
514
-            case '[RECIPIENT_QUESTION_LIST]':
515
-                $att = $recipient->att_obj;
516
-                $registrations_on_attendee = $att instanceof EE_Attendee
517
-                    ? $recipient->attendees[ $att->ID() ]['reg_objs']
518
-                    : array();
519
-                $registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee;
520
-                $answers = array();
521
-
522
-                $template = is_array($data['template']) && isset($data['template']['question_list'])
523
-                    ? $data['template']['question_list']
524
-                    : $extra_data['template']['question_list'];
525
-                $valid_shortcodes = array('question');
526
-
527
-                // if the context is main_content then get all answers for all registrations on this attendee
528
-                if ($data['data'] instanceof EE_Messages_Addressee) {
529
-                    foreach ($registrations_on_attendee as $reg) {
530
-                        if ($reg instanceof EE_Registration) {
531
-                            $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
532
-                                ? $recipient->registrations[ $reg->ID() ]['ans_objs']
533
-                                : array();
534
-                            foreach ($anss as $ans) {
535
-                                if ($ans instanceof EE_Answer) {
536
-                                    $answers[ $ans->ID() ] = $ans;
537
-                                }
538
-                            }
539
-                        }
540
-                    }
541
-                }
542
-
543
-                // if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event.
544
-                if ($data['data'] instanceof EE_Event) {
545
-                    $event = $data['data'];
546
-                    foreach ($registrations_on_attendee as $reg) {
547
-                        if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) {
548
-                            $anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
549
-                                ? $recipient->registrations[ $reg->ID() ]['ans_objs']
550
-                                : array();
551
-                            foreach ($anss as $ans) {
552
-                                if ($ans instanceof EE_Answer) {
553
-                                    $answers[ $ans->ID() ] = $ans;
554
-                                }
555
-                            }
556
-                        }
557
-                    }
558
-                }
559
-
560
-                $questions = $questions = isset($recipient->questions) ? $recipient->questions : array();
561
-
562
-                // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
563
-                // object on it.
564
-                if (! isset($extra_data['data'])) {
565
-                    $extra_data['data'] = $recipient;
566
-                }
567
-
568
-                return $this->_parse_question_list_for_primary_or_recipient_registration(
569
-                    $shortcode_parser,
570
-                    $questions,
571
-                    $answers,
572
-                    $template,
573
-                    $valid_shortcodes,
574
-                    $extra_data
575
-                );
576
-                break;
577
-
578
-            default:
579
-                return $parsed;
580
-                break;
581
-        }
582
-    }
583
-
584
-
585
-    public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser)
586
-    {
587
-        $shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = esc_html__(
588
-            'This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field',
589
-            'event_espresso'
590
-        );
591
-
592
-        return $shortcodes;
593
-    }
594
-
595
-
596
-    /**
597
-     * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter).
598
-     *
599
-     * @param string         $parsed           The original parsed content for the shortcode
600
-     * @param string         $shortcode        The shortcode being parsed
601
-     * @param array          $data             The shortcode parser data array
602
-     * @param array          $extra_data       The shortcode parser extra data array
603
-     * @param \EE_Shortcodes $shortcode_parser Shortcode parser.
604
-     *
605
-     * @return string
606
-     */
607
-    public function additional_primary_registration_details_parser(
608
-        $parsed,
609
-        $shortcode,
610
-        $data,
611
-        $extra_data,
612
-        $shortcode_parser
613
-    ) {
614
-        if (array($data) && ! isset($data['data'])) {
615
-            return $parsed;
616
-        }
617
-
618
-        $recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
619
-        $recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
620
-
621
-        if (! $recipient instanceof EE_Messages_Addressee) {
622
-            return $parsed;
623
-        }
624
-
625
-        switch ($shortcode) {
626
-            case '[PRIMARY_REGISTRANT_QUESTION_LIST]':
627
-                if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) {
628
-                    return '';
629
-                }
630
-                $registration = $recipient->primary_reg_obj;
631
-                $answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs'])
632
-                    ? $recipient->registrations[ $registration->ID() ]['ans_objs']
633
-                    : array();
634
-                if (empty($answers)) {
635
-                    return '';
636
-                }
637
-                $template = is_array($data['template']) && isset($data['template']['question_list'])
638
-                    ? $data['template']['question_list']
639
-                    : $extra_data['template']['question_list'];
640
-                $valid_shortcodes = array('question');
641
-                $answers = $recipient->registrations[ $registration->ID() ]['ans_objs'];
642
-                $questions = isset($recipient->questions) ? $recipient->questions : array();
643
-                // if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
644
-                // object on it.
645
-                if (! isset($extra_data['data'])) {
646
-                    $extra_data['data'] = $recipient;
647
-                }
648
-                return $this->_parse_question_list_for_primary_or_recipient_registration(
649
-                    $shortcode_parser,
650
-                    $questions,
651
-                    $answers,
652
-                    $template,
653
-                    $valid_shortcodes,
654
-                    $extra_data
655
-                );
656
-                break;
657
-
658
-            default:
659
-                return $parsed;
660
-                break;
661
-        }
662
-    }
663
-
664
-
665
-    /**
666
-     * Takes care of registering the  message types that are only available in caffeinated EE.
667
-     *
668
-     * @since   4.3.2
669
-     *
670
-     * @return  void
671
-     */
672
-    public function register_caf_message_types()
673
-    {
674
-        // register newsletter message type
675
-        $setup_args = array(
676
-            'mtfilename'                                       => 'EE_Newsletter_message_type.class.php',
677
-            'autoloadpaths'                                    => array(
678
-                EE_CAF_LIBRARIES . 'messages/message_type/newsletter/',
679
-            ),
680
-            'messengers_to_activate_with'                      => array('email'),
681
-            'messengers_to_validate_with'                      => array('email'),
682
-            'messengers_supporting_default_template_pack_with' => array('email'),
683
-        );
684
-        EE_Register_Message_Type::register('newsletter', $setup_args);
685
-
686
-        // register payment reminder message type
687
-        $setup_args = array(
688
-            'mtfilename'                                       => 'EE_Payment_Reminder_message_type.class.php',
689
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'),
690
-            'messengers_to_activate_with'                      => array('email'),
691
-            'messengers_to_validate_with'                      => array('email'),
692
-            'messengers_supporting_default_template_pack_with' => array('email'),
693
-        );
694
-        EE_Register_Message_Type::register('payment_reminder', $setup_args);
695
-
696
-        // register payment declined message type
697
-        $setup_args = array(
698
-            'mtfilename'                                       => 'EE_Payment_Declined_message_type.class.php',
699
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'),
700
-            'messengers_to_activate_with'                      => array('email'),
701
-            'messengers_to_validate_with'                      => array('email'),
702
-            'messengers_supporting_default_template_pack_with' => array('email'),
703
-        );
704
-        EE_Register_Message_Type::register('payment_declined', $setup_args);
705
-
706
-        // register registration declined message type
707
-        $setup_args = array(
708
-            'mtfilename'                                       => 'EE_Declined_Registration_message_type.class.php',
709
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'),
710
-            'messengers_to_activate_with'                      => array('email'),
711
-            'messengers_to_validate_with'                      => array('email'),
712
-            'messengers_supporting_default_template_pack_with' => array('email'),
713
-        );
714
-        EE_Register_Message_Type::register('declined_registration', $setup_args);
715
-
716
-        // register registration cancelled message type
717
-        $setup_args = array(
718
-            'mtfilename'                                       => 'EE_Cancelled_Registration_message_type.class.php',
719
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'),
720
-            'messengers_to_activate_with'                      => array('email'),
721
-            'messengers_to_validate_with'                      => array('email'),
722
-            'messengers_supporting_default_template_pack_with' => array('email'),
723
-        );
724
-        EE_Register_Message_Type::register('cancelled_registration', $setup_args);
725
-
726
-
727
-        // register payment failed message type
728
-        $setup_args = array(
729
-            'mtfilename'                                       => 'EE_Payment_Failed_message_type.class.php',
730
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'),
731
-            'messengers_to_activate_with'                      => array('email'),
732
-            'messengers_to_validate_with'                      => array('email'),
733
-            'messengers_supporting_default_template_pack_with' => array('email'),
734
-        );
735
-        EE_Register_Message_Type::register('payment_failed', $setup_args);
736
-
737
-        // register payment declined message type
738
-        $setup_args = array(
739
-            'mtfilename'                                       => 'EE_Payment_Cancelled_message_type.class.php',
740
-            'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'),
741
-            'messengers_to_activate_with'                      => array('email'),
742
-            'messengers_to_validate_with'                      => array('email'),
743
-            'messengers_supporting_default_template_pack_with' => array('email'),
744
-        );
745
-        EE_Register_Message_Type::register('payment_cancelled', $setup_args);
746
-    }
747
-
748
-
749
-    /**
750
-     * Takes care of registering the  shortcode libraries implemented with caffeinated EE and set up related items.
751
-     *
752
-     * @since   4.3.2
753
-     *
754
-     * @return void
755
-     */
756
-    public function register_caf_shortcodes()
757
-    {
758
-        $setup_args = array(
759
-            'autoloadpaths'                 => array(
760
-                EE_CAF_LIBRARIES . 'shortcodes/',
761
-            ),
762
-            'msgr_validator_callback'       => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'),
763
-            'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'),
764
-            'list_type_shortcodes'          => array('[NEWSLETTER_CONTENT]'),
765
-        );
766
-        EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args);
767
-    }
768
-
769
-
770
-    /**
771
-     * Parses a question list shortcode using given data and template
772
-     *
773
-     * @param \EE_Shortcodes $shortcode_parser
774
-     * @param EE_Question[]  $questions        An array of questions indexed by answer id.
775
-     * @param EE_Answer[]    $answers          An array of answer objects
776
-     * @param string         $template         Template content to be parsed.
777
-     * @param array          $valid_shortcodes Valid shortcodes for the template being parsed.
778
-     * @param array          $extra_data       Extra data that might be used when parsing the template.
779
-     */
780
-    protected function _parse_question_list_for_primary_or_recipient_registration(
781
-        $shortcode_parser,
782
-        $questions,
783
-        $answers,
784
-        $template,
785
-        $valid_shortcodes,
786
-        $extra_data
787
-    ) {
788
-        $question_list = '';
789
-        /** @var EEH_Parse_Shortcodes $shortcode_helper */
790
-        $shortcode_helper = $shortcode_parser->get_shortcode_helper();
791
-        foreach ($answers as $answer) {
792
-            if ($answer instanceof EE_Answer) {
793
-                // first see if the question is in our $questions array. If not then try to get from answer object.
794
-                $question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null;
795
-                $question = ! $question instanceof EE_Question ? $answer->question() : $question;
796
-                if (
797
-                    ! $question instanceof EE_Question
798
-                    || (
799
-                        $question instanceof EE_Question
800
-                        && $question->admin_only()
801
-                    )
802
-                ) {
803
-                    continue;
804
-                }
805
-                $question_list .= $shortcode_helper->parse_question_list_template(
806
-                    $template,
807
-                    $answer,
808
-                    $valid_shortcodes,
809
-                    $extra_data
810
-                );
811
-            }
812
-        }
813
-        return $question_list;
814
-    }
13
+	/**
14
+	 * constructor.
15
+	 */
16
+	public function __construct()
17
+	{
18
+		$this->_caf_hooks();
19
+	}
20
+
21
+
22
+	/**
23
+	 * Contains all the hooks filters for setting up caffeinated messages functionality.
24
+	 *
25
+	 * @since 4.3.2
26
+	 *
27
+	 * @return void
28
+	 */
29
+	private function _caf_hooks()
30
+	{
31
+		add_filter('FHEE__EED_Messages___set_messages_paths___MSG_PATHS', array($this, 'messages_autoload_paths'), 5);
32
+		add_filter(
33
+			'FHEE__EE_Email_messenger__get_validator_config',
34
+			array($this, 'email_messenger_validator_config'),
35
+			5,
36
+			2
37
+		);
38
+		add_filter(
39
+			'FHEE__EE_Email_messenger__get_template_fields',
40
+			array($this, 'email_messenger_template_fields'),
41
+			5,
42
+			2
43
+		);
44
+		add_filter(
45
+			'FHEE__EE_Html_messenger__get_template_fields',
46
+			array($this, 'html_messenger_template_fields'),
47
+			5,
48
+			2
49
+		);
50
+		add_filter(
51
+			'FHEE__EE_Html_messenger__get_validator_config',
52
+			array($this, 'html_messenger_validator_config'),
53
+			5,
54
+			2
55
+		);
56
+		add_filter('FHEE__EE_Pdf_messenger__get_template_fields', array($this, 'pdf_messenger_template_fields'), 5, 2);
57
+		add_filter(
58
+			'FHEE__EE_Pdf_messenger__get_validator_config',
59
+			array($this, 'pdf_messenger_validator_config'),
60
+			5,
61
+			2
62
+		);
63
+		add_filter(
64
+			'FHEE__EE_Messages_Template_Pack__get_specific_template__contents',
65
+			array($this, 'new_default_templates'),
66
+			5,
67
+			7
68
+		);
69
+		add_filter(
70
+			'FHEE__EE_Messages_Base__get_valid_shortcodes',
71
+			array($this, 'message_types_valid_shortcodes'),
72
+			5,
73
+			2
74
+		);
75
+
76
+		// shortcode parsers
77
+		add_filter('FHEE__EE_Attendee_Shortcodes__shortcodes', array($this, 'additional_attendee_shortcodes'), 5, 2);
78
+		add_filter('FHEE__EE_Attendee_Shortcodes__parser_after', array($this, 'additional_attendee_parser'), 5, 5);
79
+		add_filter(
80
+			'FHEE__EE_Recipient_List_Shortcodes__shortcodes',
81
+			array($this, 'additional_recipient_details_shortcodes'),
82
+			5,
83
+			2
84
+		);
85
+		add_filter(
86
+			'FHEE__EE_Recipient_List_Shortcodes__parser_after',
87
+			array($this, 'additional_recipient_details_parser'),
88
+			5,
89
+			5
90
+		);
91
+		add_filter(
92
+			'FHEE__EE_Primary_Registration_List_Shortcodes__shortcodes',
93
+			array($this, 'additional_primary_registration_details_shortcodes'),
94
+			5,
95
+			2
96
+		);
97
+		add_filter(
98
+			'FHEE__EE_Primary_Registration_List_Shortcodes__parser_after',
99
+			array($this, 'additional_primary_registration_details_parser'),
100
+			5,
101
+			5
102
+		);
103
+
104
+		/**
105
+		 * @since 4.2.0
106
+		 */
107
+		add_filter('FHEE__EE_Datetime_Shortcodes__shortcodes', array($this, 'additional_datetime_shortcodes'), 10, 2);
108
+		add_filter('FHEE__EE_Datetime_Shortcodes__parser_after', array($this, 'additional_datetime_parser'), 10, 5);
109
+
110
+		/**
111
+		 * @since 4.3.0
112
+		 */
113
+		// eat our own dog food!
114
+		add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_message_types'));
115
+		add_action('EE_Brewing_Regular___messages_caf', array($this, 'register_caf_shortcodes'));
116
+		do_action('EE_Brewing_Regular___messages_caf');
117
+	}
118
+
119
+
120
+	/**
121
+	 * This just allows us to add additional paths to the autoloader (EED_Messages::autoload_messages()) for the
122
+	 * messages system.
123
+	 *
124
+	 * @param  array $dir_ref original array of paths
125
+	 *
126
+	 * @return array           appended paths
127
+	 */
128
+	public function messages_autoload_paths($dir_ref)
129
+	{
130
+		$dir_ref[] = EE_CAF_LIBRARIES . 'shortcodes/';
131
+
132
+		return $dir_ref;
133
+	}
134
+
135
+
136
+	public function email_messenger_validator_config($validator_config, EE_Email_messenger $messenger)
137
+	{
138
+		$validator_config['attendee_list'] = array(
139
+			'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'),
140
+			'required'   => array('[ATTENDEE_LIST]'),
141
+		);
142
+		$validator_config['question_list'] = array(
143
+			'shortcodes' => array('question'),
144
+			'required'   => array('[QUESTION_LIST]'),
145
+		);
146
+
147
+		return $validator_config;
148
+	}
149
+
150
+
151
+	public function html_messenger_validator_config($validator_config, EE_Html_messenger $messenger)
152
+	{
153
+		$validator_config['attendee_list'] = array(
154
+			'shortcodes' => array('attendee', 'question_list'),
155
+			'required'   => array('[ATTENDEE_LIST]'),
156
+		);
157
+		$validator_config['question_list'] = array(
158
+			'shortcodes' => array('question'),
159
+			'required'   => array('[QUESTION_LIST]'),
160
+		);
161
+
162
+		return $validator_config;
163
+	}
164
+
165
+
166
+	public function pdf_messenger_validator_config($validator_config, EE_Pdf_messenger $messenger)
167
+	{
168
+		$validator_config['attendee_list'] = array(
169
+			'shortcodes' => array('attendee', 'event_list', 'ticket_list', 'question_list'),
170
+			'required'   => array('[ATTENDEE_LIST]'),
171
+		);
172
+		$validator_config['question_list'] = array(
173
+			'shortcodes' => array('question'),
174
+			'required'   => array('[QUESTION_LIST]'),
175
+		);
176
+
177
+		return $validator_config;
178
+	}
179
+
180
+
181
+	public function email_messenger_template_fields($template_fields, EE_Email_messenger $messenger)
182
+	{
183
+		$template_fields['extra']['content']['question_list'] = array(
184
+			'input'               => 'textarea',
185
+			'label'               => '[QUESTION_LIST]',
186
+			'type'                => 'string',
187
+			'required'            => true,
188
+			'validation'          => true,
189
+			'format'              => '%s',
190
+			'css_class'           => 'large-text',
191
+			'rows'                => '5',
192
+			'shortcodes_required' => array('[QUESTION_LIST]'),
193
+		);
194
+
195
+		return $template_fields;
196
+	}
197
+
198
+
199
+	public function html_messenger_template_fields($template_fields, EE_Html_messenger $messenger)
200
+	{
201
+		$template_fields['extra']['content']['question_list'] = array(
202
+			'input'               => 'textarea',
203
+			'label'               => '[QUESTION_LIST]',
204
+			'type'                => 'string',
205
+			'required'            => true,
206
+			'validation'          => true,
207
+			'format'              => '%s',
208
+			'css_class'           => 'large-text',
209
+			'rows'                => '5',
210
+			'shortcodes_required' => array('[QUESTION_LIST]'),
211
+		);
212
+
213
+		return $template_fields;
214
+	}
215
+
216
+
217
+	public function pdf_messenger_template_fields($template_fields, EE_Pdf_messenger $messenger)
218
+	{
219
+		$template_fields['extra']['content']['question_list'] = array(
220
+			'input'               => 'textarea',
221
+			'label'               => '[QUESTION_LIST]',
222
+			'type'                => 'string',
223
+			'required'            => true,
224
+			'validation'          => true,
225
+			'format'              => '%s',
226
+			'css_class'           => 'large-text',
227
+			'rows'                => '5',
228
+			'shortcodes_required' => array('[QUESTION_LIST]'),
229
+		);
230
+
231
+		return $template_fields;
232
+	}
233
+
234
+
235
+	public function new_default_templates(
236
+		$contents,
237
+		$actual_path,
238
+		EE_messenger $messenger,
239
+		EE_message_type $message_type,
240
+		$field,
241
+		$context,
242
+		EE_Messages_Template_Pack $template_pack
243
+	) {
244
+
245
+		// we're only modifying templates for the default template pack
246
+		if (! $template_pack instanceof EE_Messages_Template_Pack_Default) {
247
+			return $contents;
248
+		}
249
+
250
+		// the template file name we're replacing contents for.
251
+		$template_file_prefix = $field . '_' . $context;
252
+		$msg_prefix = $messenger->name . '_' . $message_type->name . '_';
253
+
254
+		$base_path = EE_CAF_LIBRARIES . 'messages/defaults/default/';
255
+
256
+		if ($messenger->name == 'email' && $message_type->name == 'registration') {
257
+			switch ($template_file_prefix) {
258
+				case 'question_list_admin':
259
+				case 'question_list_attendee':
260
+				case 'question_list_primary_attendee':
261
+					$path = $base_path . $msg_prefix . 'question_list.template.php';
262
+					$contents = EEH_Template::display_template($path, array(), true);
263
+					break;
264
+
265
+				case 'attendee_list_primary_attendee':
266
+					$path = $base_path . $msg_prefix . 'attendee_list.template.php';
267
+					$contents = EEH_Template::display_template($path, array(), true);
268
+					break;
269
+
270
+				case 'attendee_list_admin':
271
+					$path = $base_path . $msg_prefix . 'attendee_list_admin.template.php';
272
+					$contents = EEH_Template::display_template(
273
+						$path,
274
+						array(),
275
+						true
276
+					);
277
+					break;
278
+
279
+				case 'attendee_list_attendee':
280
+					$contents = '';
281
+					break;
282
+
283
+				case 'event_list_attendee':
284
+					$path = $base_path . $msg_prefix . 'event_list_attendee.template.php';
285
+					$contents = EEH_Template::display_template($path, array(), true);
286
+					break;
287
+			}
288
+		} elseif ($messenger->name == 'email' && $message_type->name == 'newsletter') {
289
+			switch ($template_file_prefix) {
290
+				case 'content_attendee':
291
+					$path = $base_path . $msg_prefix . 'content.template.php';
292
+					$contents = EEH_Template::display_template($path, array(), true);
293
+					break;
294
+
295
+				case 'newsletter_content_attendee':
296
+					$path = $base_path . $msg_prefix . 'newsletter_content.template.php';
297
+					$contents = EEH_Template::display_template($path, array(), true);
298
+					break;
299
+
300
+				case 'newsletter_subject_attendee':
301
+					$path = $base_path . $msg_prefix . 'subject.template.php';
302
+					$contents = EEH_Template::display_template($path, array(), true);
303
+					break;
304
+			}
305
+		} elseif ($messenger->name == 'html' && $message_type->name == 'receipt') {
306
+			switch ($template_file_prefix) {
307
+				case 'attendee_list_purchaser':
308
+					$path = $base_path . $msg_prefix . 'attendee_list.template.php';
309
+					$contents = EEH_Template::display_template($path, array(), true);
310
+					break;
311
+			}
312
+		}
313
+
314
+		return $contents;
315
+	}
316
+
317
+
318
+	public function message_types_valid_shortcodes($valid_shortcodes, EE_Messages_Base $msg)
319
+	{
320
+		// make sure question_list and question are ONLY added for the core message types.  Any other message types will have to explicitly set question_list as a valid shortcode.
321
+		$include_with = array(
322
+			'registration',
323
+			'cancelled_registration',
324
+			'declined_registration',
325
+			'not_approved_registration',
326
+			'payment_declined',
327
+			'payment_failed',
328
+			'payment_cancelled',
329
+			'payment',
330
+			'payment_reminder',
331
+			'pending_approval',
332
+			'registration_summary',
333
+			'invoice',
334
+			'receipt',
335
+		);
336
+		if ($msg instanceof EE_message_type && in_array($msg->name, $include_with)) {
337
+			$contexts = array_keys($msg->get_contexts());
338
+			foreach ($contexts as $context) {
339
+				$valid_shortcodes[ $context ][] = 'question_list';
340
+				$valid_shortcodes[ $context ][] = 'question';
341
+			}
342
+		}
343
+
344
+		return $valid_shortcodes;
345
+	}
346
+
347
+
348
+	public function additional_attendee_shortcodes($shortcodes, $shortcode_parser)
349
+	{
350
+		$shortcodes['[ANSWER_*]'] = esc_html__(
351
+			'This is a special dynamic shortcode. Right after the "*", add the exact text of a existing question, and if there is an answer for that question for this registrant, that will take the place of this shortcode.',
352
+			'event_espresso'
353
+		);
354
+
355
+		return $shortcodes;
356
+	}
357
+
358
+
359
+	public function additional_attendee_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
360
+	{
361
+
362
+		if (
363
+			strpos($shortcode, '[ANSWER_*') === false
364
+			|| ! isset($extra_data['data']->questions)
365
+			|| ! isset($extra_data['data']->registrations)
366
+		) {
367
+			return $parsed;
368
+		}
369
+
370
+		// let's get the question from the code.
371
+		$shortcode = str_replace('[ANSWER_*', '', $shortcode);
372
+		$shortcode = trim(str_replace(']', '', $shortcode));
373
+
374
+		$registration = $data instanceof EE_Registration ? $data : null;
375
+		$registration = ! $registration instanceof EE_Registration && is_array(
376
+			$extra_data
377
+		) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Registration ? $extra_data['data'] : $registration;
378
+
379
+		$aee = $data instanceof EE_Messages_Addressee ? $data : null;
380
+		$aee = ! $aee instanceof EE_Messages_Addressee && is_array(
381
+			$extra_data
382
+		) && isset($extra_data['data']) ? $extra_data['data'] : $aee;
383
+
384
+		if (! $registration instanceof EE_Registration || ! $aee instanceof EE_Messages_Addressee) {
385
+			return $parsed;
386
+		}
387
+
388
+		// now let's figure out which question has this text.
389
+		foreach ($aee->questions as $ansid => $question) {
390
+			if (
391
+				$question instanceof EE_Question
392
+				&& trim($question->display_text()) == trim($shortcode)
393
+				&& isset($aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ])
394
+			) {
395
+				return $aee->registrations[ $registration->ID() ]['ans_objs'][ $ansid ]->get_pretty(
396
+					'ANS_value',
397
+					'no_wpautop'
398
+				);
399
+			}
400
+		}
401
+
402
+		// nothing!
403
+		return $parsed;
404
+	}
405
+
406
+
407
+	/**
408
+	 * Callback for additional shortcodes filter for adding additional datetime shortcodes.
409
+	 *
410
+	 * @since  4.2
411
+	 *
412
+	 * @param  array                  $shortcodes         array of shortcodes and
413
+	 *                                                    descriptions
414
+	 * @param  EE_Datetime_Shortcodes $shortcode_parser   EE_Shortcodes object
415
+	 *
416
+	 * @return array                                        array of shortcodes and
417
+	 *                                                        descriptions
418
+	 */
419
+	public function additional_datetime_shortcodes($shortcodes, $shortcode_parser)
420
+	{
421
+		$shortcodes['[DTT_NAME]'] = esc_html__(
422
+			'This will be parsed to the Title given for a Datetime',
423
+			'event_espresso'
424
+		);
425
+		$shortcodes['[DTT_DESCRIPTION]'] = esc_html__(
426
+			'This will be parsed to the description for a Datetime',
427
+			'event_espresso'
428
+		);
429
+		$shortcodes['[DTT_NAME_OR_DATES]'] = esc_html__(
430
+			'When parsed, if the Datetime has a name, it is used, otherwise a formatted string including the start date and end date will be used.',
431
+			'event_espresso'
432
+		);
433
+
434
+		return $shortcodes;
435
+	}
436
+
437
+
438
+	/**
439
+	 * Callback for additional shortcodes parser filter used for adding parser for new
440
+	 * Datetime shortcodes
441
+	 *
442
+	 * @since  4.2
443
+	 *
444
+	 * @param  string                 $parsed     The finished parsed string for the given shortcode.
445
+	 * @param  string                 $shortcode  The shortcode being parsed.
446
+	 * @param  object                 $data       The incoming data object for the Shortcode Parser.
447
+	 * @param  object                 $extra_data The incoming extra date object for the Shortcode
448
+	 *                                            Parser.
449
+	 * @param  EE_Datetime_Shortcodes $shortcode_parser
450
+	 *
451
+	 * @return string                   The new parsed string.
452
+	 */
453
+	public function additional_datetime_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
454
+	{
455
+
456
+		if (! $data instanceof EE_Datetime) {
457
+			return ''; // get out because we can only parse with the datetime object.
458
+		}
459
+
460
+		switch ($shortcode) {
461
+			case '[DTT_NAME]':
462
+				return $data->name();
463
+				break;
464
+			case '[DTT_DESCRIPTION]':
465
+				return $data->description();
466
+				break;
467
+			case '[DTT_NAME_OR_DATES]':
468
+				return $data->get_dtt_display_name(true);
469
+				break;
470
+			default:
471
+				return $parsed;
472
+				break;
473
+		}
474
+	}
475
+
476
+
477
+	public function additional_recipient_details_shortcodes($shortcodes, $shortcode_parser)
478
+	{
479
+		$shortcodes['[RECIPIENT_QUESTION_LIST]'] = esc_html__(
480
+			'This is used to indicate where you want the list of questions and answers to show for the person receiving the message.',
481
+			'event_espresso'
482
+		);
483
+
484
+		return $shortcodes;
485
+	}
486
+
487
+
488
+	/**
489
+	 * Callback for FHEE__EE_Recipient_List_Shortcodes__parser_after filter (dynamic filter).
490
+	 *
491
+	 * @param string         $parsed           The original parsed content for the shortcode
492
+	 * @param string         $shortcode        The shortcode being parsed
493
+	 * @param array          $data             The shortcode parser data array
494
+	 * @param array          $extra_data       The shortcode parser extra data array
495
+	 * @param \EE_Shortcodes $shortcode_parser Shortcode parser.
496
+	 *
497
+	 * @return string
498
+	 */
499
+	public function additional_recipient_details_parser($parsed, $shortcode, $data, $extra_data, $shortcode_parser)
500
+	{
501
+
502
+		if (array($data) && ! isset($data['data'])) {
503
+			return $parsed;
504
+		}
505
+
506
+		$recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
507
+		$recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
508
+
509
+		if (! $recipient instanceof EE_Messages_Addressee) {
510
+			return $parsed;
511
+		}
512
+
513
+		switch ($shortcode) {
514
+			case '[RECIPIENT_QUESTION_LIST]':
515
+				$att = $recipient->att_obj;
516
+				$registrations_on_attendee = $att instanceof EE_Attendee
517
+					? $recipient->attendees[ $att->ID() ]['reg_objs']
518
+					: array();
519
+				$registrations_on_attendee = empty($registrations_on_attendee) && $recipient->reg_obj instanceof EE_Registration ? array($recipient->reg_obj) : $registrations_on_attendee;
520
+				$answers = array();
521
+
522
+				$template = is_array($data['template']) && isset($data['template']['question_list'])
523
+					? $data['template']['question_list']
524
+					: $extra_data['template']['question_list'];
525
+				$valid_shortcodes = array('question');
526
+
527
+				// if the context is main_content then get all answers for all registrations on this attendee
528
+				if ($data['data'] instanceof EE_Messages_Addressee) {
529
+					foreach ($registrations_on_attendee as $reg) {
530
+						if ($reg instanceof EE_Registration) {
531
+							$anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
532
+								? $recipient->registrations[ $reg->ID() ]['ans_objs']
533
+								: array();
534
+							foreach ($anss as $ans) {
535
+								if ($ans instanceof EE_Answer) {
536
+									$answers[ $ans->ID() ] = $ans;
537
+								}
538
+							}
539
+						}
540
+					}
541
+				}
542
+
543
+				// if the context is the event list parser, then let's return just the answers for all registrations attached to the recipient for that event.
544
+				if ($data['data'] instanceof EE_Event) {
545
+					$event = $data['data'];
546
+					foreach ($registrations_on_attendee as $reg) {
547
+						if ($reg instanceof EE_Registration && $reg->event_ID() == $event->ID()) {
548
+							$anss = ! empty($recipient->registrations[ $reg->ID() ]['ans_objs'])
549
+								? $recipient->registrations[ $reg->ID() ]['ans_objs']
550
+								: array();
551
+							foreach ($anss as $ans) {
552
+								if ($ans instanceof EE_Answer) {
553
+									$answers[ $ans->ID() ] = $ans;
554
+								}
555
+							}
556
+						}
557
+					}
558
+				}
559
+
560
+				$questions = $questions = isset($recipient->questions) ? $recipient->questions : array();
561
+
562
+				// if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
563
+				// object on it.
564
+				if (! isset($extra_data['data'])) {
565
+					$extra_data['data'] = $recipient;
566
+				}
567
+
568
+				return $this->_parse_question_list_for_primary_or_recipient_registration(
569
+					$shortcode_parser,
570
+					$questions,
571
+					$answers,
572
+					$template,
573
+					$valid_shortcodes,
574
+					$extra_data
575
+				);
576
+				break;
577
+
578
+			default:
579
+				return $parsed;
580
+				break;
581
+		}
582
+	}
583
+
584
+
585
+	public function additional_primary_registration_details_shortcodes($shortcodes, $shortcode_parser)
586
+	{
587
+		$shortcodes['[PRIMARY_REGISTRANT_QUESTION_LIST]'] = esc_html__(
588
+			'This is used to indicate the questions and answers for the primary_registrant. It should be placed in the "[attendee_list]" field',
589
+			'event_espresso'
590
+		);
591
+
592
+		return $shortcodes;
593
+	}
594
+
595
+
596
+	/**
597
+	 * Callback for FHEE__EE_Primary_Registration_List_Shortcodes__parser_after filter (dynamic filter).
598
+	 *
599
+	 * @param string         $parsed           The original parsed content for the shortcode
600
+	 * @param string         $shortcode        The shortcode being parsed
601
+	 * @param array          $data             The shortcode parser data array
602
+	 * @param array          $extra_data       The shortcode parser extra data array
603
+	 * @param \EE_Shortcodes $shortcode_parser Shortcode parser.
604
+	 *
605
+	 * @return string
606
+	 */
607
+	public function additional_primary_registration_details_parser(
608
+		$parsed,
609
+		$shortcode,
610
+		$data,
611
+		$extra_data,
612
+		$shortcode_parser
613
+	) {
614
+		if (array($data) && ! isset($data['data'])) {
615
+			return $parsed;
616
+		}
617
+
618
+		$recipient = $data['data'] instanceof EE_Messages_Addressee ? $data['data'] : null;
619
+		$recipient = ! $recipient instanceof EE_Messages_Addressee && array($extra_data) && isset($extra_data['data']) && $extra_data['data'] instanceof EE_Messages_Addressee ? $extra_data['data'] : $recipient;
620
+
621
+		if (! $recipient instanceof EE_Messages_Addressee) {
622
+			return $parsed;
623
+		}
624
+
625
+		switch ($shortcode) {
626
+			case '[PRIMARY_REGISTRANT_QUESTION_LIST]':
627
+				if (! $recipient->primary_att_obj instanceof EE_Attendee || ! $recipient->primary_reg_obj instanceof EE_Registration) {
628
+					return '';
629
+				}
630
+				$registration = $recipient->primary_reg_obj;
631
+				$answers = isset($recipient->registrations[ $registration->ID() ]['ans_objs'])
632
+					? $recipient->registrations[ $registration->ID() ]['ans_objs']
633
+					: array();
634
+				if (empty($answers)) {
635
+					return '';
636
+				}
637
+				$template = is_array($data['template']) && isset($data['template']['question_list'])
638
+					? $data['template']['question_list']
639
+					: $extra_data['template']['question_list'];
640
+				$valid_shortcodes = array('question');
641
+				$answers = $recipient->registrations[ $registration->ID() ]['ans_objs'];
642
+				$questions = isset($recipient->questions) ? $recipient->questions : array();
643
+				// if $extra_data does not have a 'data' key then let's make sure we add it and set the EE_Messages_Addressee
644
+				// object on it.
645
+				if (! isset($extra_data['data'])) {
646
+					$extra_data['data'] = $recipient;
647
+				}
648
+				return $this->_parse_question_list_for_primary_or_recipient_registration(
649
+					$shortcode_parser,
650
+					$questions,
651
+					$answers,
652
+					$template,
653
+					$valid_shortcodes,
654
+					$extra_data
655
+				);
656
+				break;
657
+
658
+			default:
659
+				return $parsed;
660
+				break;
661
+		}
662
+	}
663
+
664
+
665
+	/**
666
+	 * Takes care of registering the  message types that are only available in caffeinated EE.
667
+	 *
668
+	 * @since   4.3.2
669
+	 *
670
+	 * @return  void
671
+	 */
672
+	public function register_caf_message_types()
673
+	{
674
+		// register newsletter message type
675
+		$setup_args = array(
676
+			'mtfilename'                                       => 'EE_Newsletter_message_type.class.php',
677
+			'autoloadpaths'                                    => array(
678
+				EE_CAF_LIBRARIES . 'messages/message_type/newsletter/',
679
+			),
680
+			'messengers_to_activate_with'                      => array('email'),
681
+			'messengers_to_validate_with'                      => array('email'),
682
+			'messengers_supporting_default_template_pack_with' => array('email'),
683
+		);
684
+		EE_Register_Message_Type::register('newsletter', $setup_args);
685
+
686
+		// register payment reminder message type
687
+		$setup_args = array(
688
+			'mtfilename'                                       => 'EE_Payment_Reminder_message_type.class.php',
689
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_reminder/'),
690
+			'messengers_to_activate_with'                      => array('email'),
691
+			'messengers_to_validate_with'                      => array('email'),
692
+			'messengers_supporting_default_template_pack_with' => array('email'),
693
+		);
694
+		EE_Register_Message_Type::register('payment_reminder', $setup_args);
695
+
696
+		// register payment declined message type
697
+		$setup_args = array(
698
+			'mtfilename'                                       => 'EE_Payment_Declined_message_type.class.php',
699
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_declined/'),
700
+			'messengers_to_activate_with'                      => array('email'),
701
+			'messengers_to_validate_with'                      => array('email'),
702
+			'messengers_supporting_default_template_pack_with' => array('email'),
703
+		);
704
+		EE_Register_Message_Type::register('payment_declined', $setup_args);
705
+
706
+		// register registration declined message type
707
+		$setup_args = array(
708
+			'mtfilename'                                       => 'EE_Declined_Registration_message_type.class.php',
709
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/declined_registration/'),
710
+			'messengers_to_activate_with'                      => array('email'),
711
+			'messengers_to_validate_with'                      => array('email'),
712
+			'messengers_supporting_default_template_pack_with' => array('email'),
713
+		);
714
+		EE_Register_Message_Type::register('declined_registration', $setup_args);
715
+
716
+		// register registration cancelled message type
717
+		$setup_args = array(
718
+			'mtfilename'                                       => 'EE_Cancelled_Registration_message_type.class.php',
719
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/cancelled_registration/'),
720
+			'messengers_to_activate_with'                      => array('email'),
721
+			'messengers_to_validate_with'                      => array('email'),
722
+			'messengers_supporting_default_template_pack_with' => array('email'),
723
+		);
724
+		EE_Register_Message_Type::register('cancelled_registration', $setup_args);
725
+
726
+
727
+		// register payment failed message type
728
+		$setup_args = array(
729
+			'mtfilename'                                       => 'EE_Payment_Failed_message_type.class.php',
730
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_failed/'),
731
+			'messengers_to_activate_with'                      => array('email'),
732
+			'messengers_to_validate_with'                      => array('email'),
733
+			'messengers_supporting_default_template_pack_with' => array('email'),
734
+		);
735
+		EE_Register_Message_Type::register('payment_failed', $setup_args);
736
+
737
+		// register payment declined message type
738
+		$setup_args = array(
739
+			'mtfilename'                                       => 'EE_Payment_Cancelled_message_type.class.php',
740
+			'autoloadpaths'                                    => array(EE_CAF_LIBRARIES . 'messages/message_type/payment_cancelled/'),
741
+			'messengers_to_activate_with'                      => array('email'),
742
+			'messengers_to_validate_with'                      => array('email'),
743
+			'messengers_supporting_default_template_pack_with' => array('email'),
744
+		);
745
+		EE_Register_Message_Type::register('payment_cancelled', $setup_args);
746
+	}
747
+
748
+
749
+	/**
750
+	 * Takes care of registering the  shortcode libraries implemented with caffeinated EE and set up related items.
751
+	 *
752
+	 * @since   4.3.2
753
+	 *
754
+	 * @return void
755
+	 */
756
+	public function register_caf_shortcodes()
757
+	{
758
+		$setup_args = array(
759
+			'autoloadpaths'                 => array(
760
+				EE_CAF_LIBRARIES . 'shortcodes/',
761
+			),
762
+			'msgr_validator_callback'       => array('EE_Newsletter_Shortcodes', 'messenger_validator_config'),
763
+			'msgr_template_fields_callback' => array('EE_Newsletter_Shortcodes', 'messenger_template_fields'),
764
+			'list_type_shortcodes'          => array('[NEWSLETTER_CONTENT]'),
765
+		);
766
+		EE_Register_Messages_Shortcode_Library::register('newsletter', $setup_args);
767
+	}
768
+
769
+
770
+	/**
771
+	 * Parses a question list shortcode using given data and template
772
+	 *
773
+	 * @param \EE_Shortcodes $shortcode_parser
774
+	 * @param EE_Question[]  $questions        An array of questions indexed by answer id.
775
+	 * @param EE_Answer[]    $answers          An array of answer objects
776
+	 * @param string         $template         Template content to be parsed.
777
+	 * @param array          $valid_shortcodes Valid shortcodes for the template being parsed.
778
+	 * @param array          $extra_data       Extra data that might be used when parsing the template.
779
+	 */
780
+	protected function _parse_question_list_for_primary_or_recipient_registration(
781
+		$shortcode_parser,
782
+		$questions,
783
+		$answers,
784
+		$template,
785
+		$valid_shortcodes,
786
+		$extra_data
787
+	) {
788
+		$question_list = '';
789
+		/** @var EEH_Parse_Shortcodes $shortcode_helper */
790
+		$shortcode_helper = $shortcode_parser->get_shortcode_helper();
791
+		foreach ($answers as $answer) {
792
+			if ($answer instanceof EE_Answer) {
793
+				// first see if the question is in our $questions array. If not then try to get from answer object.
794
+				$question = isset($questions[ $answer->ID() ]) ? $questions[ $answer->ID() ] : null;
795
+				$question = ! $question instanceof EE_Question ? $answer->question() : $question;
796
+				if (
797
+					! $question instanceof EE_Question
798
+					|| (
799
+						$question instanceof EE_Question
800
+						&& $question->admin_only()
801
+					)
802
+				) {
803
+					continue;
804
+				}
805
+				$question_list .= $shortcode_helper->parse_question_list_template(
806
+					$template,
807
+					$answer,
808
+					$valid_shortcodes,
809
+					$extra_data
810
+				);
811
+			}
812
+		}
813
+		return $question_list;
814
+	}
815 815
 }
Please login to merge, or discard this patch.
payment_methods/Paypal_Pro/templates/paypal_pro_intro.template.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -1,10 +1,10 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 printf(
4
-    esc_html__(
5
-        'PayPal Pro (Website Payments Pro) is an on-site payment method for accepting credit and debit cards and is available to event organizers in the United States, United Kingdom, and Canada. An account with PayPal is required to accept payments. Need a PayPal Pro account? Call 1-855-456-1338 or %1$sclick here to sign up for a merchant account%2$s.',
6
-        'event_espresso'
7
-    ),
8
-    '<a href="https://eventespresso.com/go/paypalpro/" target="_blank">',
9
-    '</a>'
4
+	esc_html__(
5
+		'PayPal Pro (Website Payments Pro) is an on-site payment method for accepting credit and debit cards and is available to event organizers in the United States, United Kingdom, and Canada. An account with PayPal is required to accept payments. Need a PayPal Pro account? Call 1-855-456-1338 or %1$sclick here to sign up for a merchant account%2$s.',
6
+		'event_espresso'
7
+	),
8
+	'<a href="https://eventespresso.com/go/paypalpro/" target="_blank">',
9
+	'</a>'
10 10
 );
Please login to merge, or discard this patch.
caffeinated/payment_methods/Paypal_Pro/EE_PMT_Paypal_Pro.pm.php 2 patches
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -20,7 +20,7 @@  discard block
 block discarded – undo
20 20
      */
21 21
     public function __construct($pm_instance = null)
22 22
     {
23
-        require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php');
23
+        require_once($this->file_folder().'EEG_Paypal_Pro.gateway.php');
24 24
         $this->_gateway = new EEG_Paypal_Pro();
25 25
         $this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso');
26 26
         $this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso');
@@ -63,22 +63,22 @@  discard block
 block discarded – undo
63 63
             //              'html_id'=> 'ee-Paypal_Pro-billing-form',
64 64
                 'subsections' => array(
65 65
                     'credit_card' => new EE_Credit_Card_Input(
66
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso'))
66
+                        array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso'))
67 67
                     ),
68 68
                     'credit_card_type' => new EE_Select_Input(
69 69
                         // the options are set dynamically
70 70
                         array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)),
71
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso'))
71
+                        array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso'))
72 72
                     ),
73 73
                     'exp_month' => new EE_Credit_Card_Month_Input(
74 74
                         true,
75
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' =>  esc_html__('Expiry Month', 'event_espresso')  )
75
+                        array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' =>  esc_html__('Expiry Month', 'event_espresso'))
76 76
                     ),
77 77
                     'exp_year' => new EE_Credit_Card_Year_Input(
78
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso')  )
78
+                        array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso'))
79 79
                     ),
80 80
                     'cvv' => new EE_CVV_Input(
81
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') )
81
+                        array('required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso'))
82 82
                     ),
83 83
                 )
84 84
             )
@@ -99,11 +99,11 @@  discard block
 block discarded – undo
99 99
     {
100 100
         if ($this->_pm_instance->debug_mode()) {
101 101
             $billing_form->add_subsections(
102
-                array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ),
102
+                array('fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html()),
103 103
                 'credit_card'
104 104
             );
105 105
             $billing_form->add_subsections(
106
-                array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')),
106
+                array('debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__).'/templates/paypal_pro_debug_info.template.php')),
107 107
                 'first_name'
108 108
             );
109 109
             $billing_form->get_input('credit_card_type')->set_default('Visa');
@@ -184,9 +184,9 @@  discard block
 block discarded – undo
184 184
             ]
185 185
         );
186 186
         // If they existed, set the new ones instead
187
-        if (!empty($old_extra_metas)) {
187
+        if ( ! empty($old_extra_metas)) {
188 188
             foreach ($old_extra_metas as $old_extra_meta) {
189
-                $old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key'));
189
+                $old_extra_meta->set('EXM_key', 'api_'.$old_extra_meta->get('EXM_key'));
190 190
                 $old_extra_meta->save();
191 191
             }
192 192
         }
Please login to merge, or discard this patch.
Indentation   +178 added lines, -178 removed lines patch added patch discarded remove patch
@@ -13,182 +13,182 @@
 block discarded – undo
13 13
  */
14 14
 class EE_PMT_Paypal_Pro extends EE_PMT_Base
15 15
 {
16
-    /**
17
-     * @param EE_Payment_Method $pm_instance
18
-     * @return EE_PMT_Paypal_Pro
19
-     */
20
-    public function __construct($pm_instance = null)
21
-    {
22
-        require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php');
23
-        $this->_gateway = new EEG_Paypal_Pro();
24
-        $this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso');
25
-        $this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso');
26
-        $this->_requires_https = true;
27
-        parent::__construct($pm_instance);
28
-    }
29
-
30
-
31
-    /**
32
-     * Gets the form for all the settings related to this payment method type
33
-     * @return EE_Payment_Method_Form
34
-     * @throws InvalidArgumentException
35
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
36
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
37
-     */
38
-    public function generate_new_settings_form()
39
-    {
40
-        return new PayPalProSettingsForm(array(), $this->get_help_tab_link());
41
-    }
42
-
43
-
44
-    /**
45
-     * Creates the billing form for this payment method type
46
-     * @param \EE_Transaction $transaction
47
-     * @throws \EE_Error
48
-     * @return EE_Billing_Info_Form
49
-     */
50
-    public function generate_new_billing_form(EE_Transaction $transaction = null)
51
-    {
52
-        $allowed_types = $this->_pm_instance->get_extra_meta('credit_card_types', true);
53
-        // if allowed types is a string or empty array or null...
54
-        if (empty($allowed_types)) {
55
-            $allowed_types = array();
56
-        }
57
-
58
-        $billing_form = new EE_Billing_Attendee_Info_Form(
59
-            $this->_pm_instance,
60
-            array(
61
-                'name' => 'Paypal_Pro_Billing_Form',
62
-            //              'html_id'=> 'ee-Paypal_Pro-billing-form',
63
-                'subsections' => array(
64
-                    'credit_card' => new EE_Credit_Card_Input(
65
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso'))
66
-                    ),
67
-                    'credit_card_type' => new EE_Select_Input(
68
-                        // the options are set dynamically
69
-                        array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)),
70
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso'))
71
-                    ),
72
-                    'exp_month' => new EE_Credit_Card_Month_Input(
73
-                        true,
74
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' =>  esc_html__('Expiry Month', 'event_espresso')  )
75
-                    ),
76
-                    'exp_year' => new EE_Credit_Card_Year_Input(
77
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso')  )
78
-                    ),
79
-                    'cvv' => new EE_CVV_Input(
80
-                        array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') )
81
-                    ),
82
-                )
83
-            )
84
-        );
85
-        return $this->apply_billing_form_debug_settings($billing_form);
86
-    }
87
-
88
-
89
-
90
-    /**
91
-     * apply_billing_form_debug_settings
92
-     * applies debug data to the form
93
-     *
94
-     * @param \EE_Billing_Info_Form $billing_form
95
-     * @return \EE_Billing_Info_Form
96
-     */
97
-    public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
98
-    {
99
-        if ($this->_pm_instance->debug_mode()) {
100
-            $billing_form->add_subsections(
101
-                array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ),
102
-                'credit_card'
103
-            );
104
-            $billing_form->add_subsections(
105
-                array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')),
106
-                'first_name'
107
-            );
108
-            $billing_form->get_input('credit_card_type')->set_default('Visa');
109
-            $billing_form->get_input('exp_year')->set_default(2018);
110
-            $billing_form->get_input('cvv')->set_default('115');
111
-        }
112
-        return $billing_form;
113
-    }
114
-
115
-
116
-
117
-    /**
118
-     * Returns an array of all the payment cards possibly supported by paypal pro.
119
-     * Keys are their values, values are their pretty names.
120
-     * @return array
121
-     */
122
-    public static function card_types_supported()
123
-    {
124
-        return array(
125
-            'Visa' =>  esc_html__("Visa", 'event_espresso'),
126
-            'MasterCard' =>  esc_html__("MasterCard", 'event_espresso'),
127
-            'Amex' =>  esc_html__("American Express", 'event_espresso'),
128
-            'Discover' =>  esc_html__("Discover", 'event_espresso')
129
-            );
130
-    }
131
-
132
-
133
-
134
-    /**
135
-     * Adds the help tab
136
-     * @see EE_PMT_Base::help_tabs_config()
137
-     * @return array
138
-     */
139
-    public function help_tabs_config()
140
-    {
141
-        return array(
142
-            $this->get_help_tab_name() => array(
143
-                        'title' => esc_html__('PayPal Pro Settings', 'event_espresso'),
144
-                        'filename' => 'payment_methods_overview_paypalpro'
145
-                        ),
146
-        );
147
-    }
148
-
149
-    /**
150
-     * Overrides parent's _get_billing_values_from_form because we want to
151
-     * get the country's 2-character ISO code, not the name like most gateways
152
-     * @param EE_Billing_Info_Form $billing_form
153
-     * @return array
154
-     */
155
-    protected function _get_billing_values_from_form($billing_form)
156
-    {
157
-        $billing_values = parent::_get_billing_values_from_form($billing_form);
158
-        $billing_values['country'] = $billing_form->get_input_value('country');
159
-        $billing_values['credit_card_type'] = $billing_form->get_input_value('credit_card_type');
160
-        return $billing_values;
161
-    }
162
-
163
-    /**
164
-     * Override parent to account for a change in extra meta inputs in 4.9.75.p
165
-     * @since 4.9.79.p
166
-     * @param EE_Payment_Method $payment_method_instance
167
-     * @throws EE_Error
168
-     * @throws InvalidArgumentException
169
-     * @throws ReflectionException
170
-     * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
171
-     * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
172
-     */
173
-    public function set_instance($payment_method_instance)
174
-    {
175
-        // Check for the old extra meta inputs
176
-        $old_extra_metas = EEM_Extra_Meta::instance()->get_all(
177
-            [
178
-                [
179
-                    'EXM_type' => 'Payment_Method',
180
-                    'OBJ_ID' => $payment_method_instance->ID(),
181
-                    'EXM_key' => ['IN', ['username', 'password', 'signature']],
182
-                ]
183
-            ]
184
-        );
185
-        // If they existed, set the new ones instead
186
-        if (!empty($old_extra_metas)) {
187
-            foreach ($old_extra_metas as $old_extra_meta) {
188
-                $old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key'));
189
-                $old_extra_meta->save();
190
-            }
191
-        }
192
-        return parent::set_instance($payment_method_instance);
193
-    }
16
+	/**
17
+	 * @param EE_Payment_Method $pm_instance
18
+	 * @return EE_PMT_Paypal_Pro
19
+	 */
20
+	public function __construct($pm_instance = null)
21
+	{
22
+		require_once($this->file_folder() . 'EEG_Paypal_Pro.gateway.php');
23
+		$this->_gateway = new EEG_Paypal_Pro();
24
+		$this->_pretty_name = esc_html__("Paypal Pro", 'event_espresso');
25
+		$this->_default_description = esc_html__('Please provide the following billing information.', 'event_espresso');
26
+		$this->_requires_https = true;
27
+		parent::__construct($pm_instance);
28
+	}
29
+
30
+
31
+	/**
32
+	 * Gets the form for all the settings related to this payment method type
33
+	 * @return EE_Payment_Method_Form
34
+	 * @throws InvalidArgumentException
35
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
36
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
37
+	 */
38
+	public function generate_new_settings_form()
39
+	{
40
+		return new PayPalProSettingsForm(array(), $this->get_help_tab_link());
41
+	}
42
+
43
+
44
+	/**
45
+	 * Creates the billing form for this payment method type
46
+	 * @param \EE_Transaction $transaction
47
+	 * @throws \EE_Error
48
+	 * @return EE_Billing_Info_Form
49
+	 */
50
+	public function generate_new_billing_form(EE_Transaction $transaction = null)
51
+	{
52
+		$allowed_types = $this->_pm_instance->get_extra_meta('credit_card_types', true);
53
+		// if allowed types is a string or empty array or null...
54
+		if (empty($allowed_types)) {
55
+			$allowed_types = array();
56
+		}
57
+
58
+		$billing_form = new EE_Billing_Attendee_Info_Form(
59
+			$this->_pm_instance,
60
+			array(
61
+				'name' => 'Paypal_Pro_Billing_Form',
62
+			//              'html_id'=> 'ee-Paypal_Pro-billing-form',
63
+				'subsections' => array(
64
+					'credit_card' => new EE_Credit_Card_Input(
65
+						array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Number', 'event_espresso'))
66
+					),
67
+					'credit_card_type' => new EE_Select_Input(
68
+						// the options are set dynamically
69
+						array_intersect_key(EE_PMT_Paypal_Pro::card_types_supported(), array_flip($allowed_types)),
70
+						array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Card Type', 'event_espresso'))
71
+					),
72
+					'exp_month' => new EE_Credit_Card_Month_Input(
73
+						true,
74
+						array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' =>  esc_html__('Expiry Month', 'event_espresso')  )
75
+					),
76
+					'exp_year' => new EE_Credit_Card_Year_Input(
77
+						array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('Expiry Year', 'event_espresso')  )
78
+					),
79
+					'cvv' => new EE_CVV_Input(
80
+						array( 'required' => true, 'html_class' => 'ee-billing-qstn', 'html_label_text' => esc_html__('CVV', 'event_espresso') )
81
+					),
82
+				)
83
+			)
84
+		);
85
+		return $this->apply_billing_form_debug_settings($billing_form);
86
+	}
87
+
88
+
89
+
90
+	/**
91
+	 * apply_billing_form_debug_settings
92
+	 * applies debug data to the form
93
+	 *
94
+	 * @param \EE_Billing_Info_Form $billing_form
95
+	 * @return \EE_Billing_Info_Form
96
+	 */
97
+	public function apply_billing_form_debug_settings(EE_Billing_Info_Form $billing_form)
98
+	{
99
+		if ($this->_pm_instance->debug_mode()) {
100
+			$billing_form->add_subsections(
101
+				array( 'fyi_about_autofill' => $billing_form->payment_fields_autofilled_notice_html() ),
102
+				'credit_card'
103
+			);
104
+			$billing_form->add_subsections(
105
+				array( 'debug_content' => new EE_Form_Section_HTML_From_Template(dirname(__FILE__) . '/templates/paypal_pro_debug_info.template.php')),
106
+				'first_name'
107
+			);
108
+			$billing_form->get_input('credit_card_type')->set_default('Visa');
109
+			$billing_form->get_input('exp_year')->set_default(2018);
110
+			$billing_form->get_input('cvv')->set_default('115');
111
+		}
112
+		return $billing_form;
113
+	}
114
+
115
+
116
+
117
+	/**
118
+	 * Returns an array of all the payment cards possibly supported by paypal pro.
119
+	 * Keys are their values, values are their pretty names.
120
+	 * @return array
121
+	 */
122
+	public static function card_types_supported()
123
+	{
124
+		return array(
125
+			'Visa' =>  esc_html__("Visa", 'event_espresso'),
126
+			'MasterCard' =>  esc_html__("MasterCard", 'event_espresso'),
127
+			'Amex' =>  esc_html__("American Express", 'event_espresso'),
128
+			'Discover' =>  esc_html__("Discover", 'event_espresso')
129
+			);
130
+	}
131
+
132
+
133
+
134
+	/**
135
+	 * Adds the help tab
136
+	 * @see EE_PMT_Base::help_tabs_config()
137
+	 * @return array
138
+	 */
139
+	public function help_tabs_config()
140
+	{
141
+		return array(
142
+			$this->get_help_tab_name() => array(
143
+						'title' => esc_html__('PayPal Pro Settings', 'event_espresso'),
144
+						'filename' => 'payment_methods_overview_paypalpro'
145
+						),
146
+		);
147
+	}
148
+
149
+	/**
150
+	 * Overrides parent's _get_billing_values_from_form because we want to
151
+	 * get the country's 2-character ISO code, not the name like most gateways
152
+	 * @param EE_Billing_Info_Form $billing_form
153
+	 * @return array
154
+	 */
155
+	protected function _get_billing_values_from_form($billing_form)
156
+	{
157
+		$billing_values = parent::_get_billing_values_from_form($billing_form);
158
+		$billing_values['country'] = $billing_form->get_input_value('country');
159
+		$billing_values['credit_card_type'] = $billing_form->get_input_value('credit_card_type');
160
+		return $billing_values;
161
+	}
162
+
163
+	/**
164
+	 * Override parent to account for a change in extra meta inputs in 4.9.75.p
165
+	 * @since 4.9.79.p
166
+	 * @param EE_Payment_Method $payment_method_instance
167
+	 * @throws EE_Error
168
+	 * @throws InvalidArgumentException
169
+	 * @throws ReflectionException
170
+	 * @throws \EventEspresso\core\exceptions\InvalidDataTypeException
171
+	 * @throws \EventEspresso\core\exceptions\InvalidInterfaceException
172
+	 */
173
+	public function set_instance($payment_method_instance)
174
+	{
175
+		// Check for the old extra meta inputs
176
+		$old_extra_metas = EEM_Extra_Meta::instance()->get_all(
177
+			[
178
+				[
179
+					'EXM_type' => 'Payment_Method',
180
+					'OBJ_ID' => $payment_method_instance->ID(),
181
+					'EXM_key' => ['IN', ['username', 'password', 'signature']],
182
+				]
183
+			]
184
+		);
185
+		// If they existed, set the new ones instead
186
+		if (!empty($old_extra_metas)) {
187
+			foreach ($old_extra_metas as $old_extra_meta) {
188
+				$old_extra_meta->set('EXM_key', 'api_' . $old_extra_meta->get('EXM_key'));
189
+				$old_extra_meta->save();
190
+			}
191
+		}
192
+		return parent::set_instance($payment_method_instance);
193
+	}
194 194
 }
Please login to merge, or discard this patch.
caffeinated/payment_methods/Aim/EEG_Aim.gateway.php 2 patches
Spacing   +13 added lines, -13 removed lines patch added patch discarded remove patch
@@ -191,7 +191,7 @@  discard block
 block discarded – undo
191 191
                     $line_item->unit_price(),
192 192
                     'N'
193 193
                 );
194
-                $order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', ';
194
+                $order_description .= $this->prepareStringForAuthnet($line_item->desc()).', ';
195 195
             }
196 196
             foreach ($total_line_item->tax_descendants() as $tax_line_item) {
197 197
                 $this->addLineItem(
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
         $this->setField('last_name', $billing_info['last_name']);
217 217
         $this->setField('email', $billing_info['email']);
218 218
         $this->setField('company', $billing_info['company']);
219
-        $this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']);
219
+        $this->setField('address', $billing_info['address'].' '.$billing_info['address2']);
220 220
         $this->setField('city', $billing_info['city']);
221 221
         $this->setField('state', $billing_info['state']);
222 222
         $this->setField('country', $billing_info['country']);
@@ -229,7 +229,7 @@  discard block
 block discarded – undo
229 229
         // invoice_num would be nice to have it be unique per SPCO page-load, that way if users
230 230
         // press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page
231 231
         // in which case, we need to generate teh invoice num per request right here...
232
-        $this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']);
232
+        $this->setField('invoice_num', wp_generate_password(12, false)); // $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']);
233 233
         // tell AIM that any duplicates sent in the next 5 minutes are to be ignored
234 234
         $this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS);
235 235
 
@@ -240,7 +240,7 @@  discard block
 block discarded – undo
240 240
         // Capture response
241 241
         $this->type = "AUTH_CAPTURE";
242 242
         $response = $this->_sendRequest($payment);
243
-        if (! empty($response)) {
243
+        if ( ! empty($response)) {
244 244
             if ($response->error_message) {
245 245
                 $payment->set_status($this->_pay_model->failed_status());
246 246
                 $payment->set_gateway_response($response->error_message);
@@ -286,7 +286,7 @@  discard block
 block discarded – undo
286 286
     protected function _set_sensitive_billing_data($billing_info)
287 287
     {
288 288
         $this->setField('card_num', $billing_info['credit_card']);
289
-        $this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']);
289
+        $this->setField('exp_date', $billing_info['exp_month'].$billing_info['exp_year']);
290 290
         $this->setField('card_code', $billing_info['cvv']);
291 291
     }
292 292
 
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
     protected function setField($name, $value)
327 327
     {
328 328
         if (in_array($name, $this->_all_aim_fields)) {
329
-            $this->_x_post_fields[ $name ] = $value;
329
+            $this->_x_post_fields[$name] = $value;
330 330
         } else {
331 331
             throw new AuthorizeNetException("Error: no field $name exists in the AIM API.
332 332
             To set a custom field use setCustomField('field','value') instead.");
@@ -346,11 +346,11 @@  discard block
 block discarded – undo
346 346
         $this->_x_post_fields['tran_key'] = $this->_transaction_key;
347 347
         $x_keys = array();
348 348
         foreach ($this->_x_post_fields as $key => $value) {
349
-            $x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value));
349
+            $x_keys[] = "x_$key=".urlencode($this->_get_unsupported_character_remover()->format($value));
350 350
         }
351 351
         // Add line items
352 352
         foreach ($this->_additional_line_items as $key => $value) {
353
-            $x_keys[] =  "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value));
353
+            $x_keys[] = "x_line_item=".urlencode($this->_get_unsupported_character_remover()->format($value));
354 354
         }
355 355
         $this->_log_clean_request($x_keys, $payment);
356 356
         $post_url = $this->_get_server_url();
@@ -362,7 +362,7 @@  discard block
 block discarded – undo
362 362
         curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);
363 363
         curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2);
364 364
         if ($this->VERIFY_PEER) {
365
-            curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem');
365
+            curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__).'/ssl/cert.pem');
366 366
         } else {
367 367
             curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);
368 368
         }
@@ -374,7 +374,7 @@  discard block
 block discarded – undo
374 374
         $response = curl_exec($curl_request);
375 375
 
376 376
         curl_close($curl_request);
377
-        $response_obj =  new EE_AuthorizeNetAIM_Response($response);
377
+        $response_obj = new EE_AuthorizeNetAIM_Response($response);
378 378
 
379 379
         return $this->_log_and_clean_response($response_obj, $payment);
380 380
     }
@@ -394,7 +394,7 @@  discard block
 block discarded – undo
394 394
                 if (strpos($keyvaltogether, $key) === 0) {
395 395
                     // found it at the first character
396 396
                     // so its one of them
397
-                    unset($request_array[ $index ]);
397
+                    unset($request_array[$index]);
398 398
                 }
399 399
             }
400 400
         }
@@ -535,7 +535,7 @@  discard block
 block discarded – undo
535 535
             // Split Array
536 536
             $this->response = $response;
537 537
             if ($encap_char) {
538
-                $this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1));
538
+                $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1));
539 539
             } else {
540 540
                 $this->_response_array = explode($delimiter, $response);
541 541
             }
@@ -617,7 +617,7 @@  discard block
 block discarded – undo
617 617
     }
618 618
 }
619 619
 
620
-if (! class_exists('AuthorizeNetException')) {
620
+if ( ! class_exists('AuthorizeNetException')) {
621 621
     /**
622 622
      * Class AuthorizeNetException
623 623
      *
Please login to merge, or discard this patch.
Indentation   +594 added lines, -594 removed lines patch added patch discarded remove patch
@@ -25,417 +25,417 @@  discard block
 block discarded – undo
25 25
  */
26 26
 class EEG_Aim extends EE_Onsite_Gateway
27 27
 {
28
-    const LIVE_URL    = 'https://secure2.authorize.net/gateway/transact.dll'; // Authnet URL
29
-
30
-    const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
31
-
32
-    protected $_login_id;
33
-
34
-    protected $_transaction_key;
35
-
36
-    protected $_currencies_supported = array(
37
-        'AUD',
38
-        'USD',
39
-        'CAD',
40
-        'EUR',
41
-        'GBP',
42
-        'NZD',
43
-    );
44
-
45
-    /**
46
-     * Whether to send test transactions (even to live site)
47
-     *
48
-     * @var boolean
49
-     */
50
-    protected $_test_transactions;
51
-
52
-    private $VERIFY_PEER = false;
53
-
54
-    private $_x_post_fields = array(
55
-        "version"        => "3.1",
56
-        "delim_char"     => ",",
57
-        "delim_data"     => "TRUE",
58
-        "relay_response" => "FALSE",
59
-        "encap_char"     => "|",
60
-    );
61
-
62
-    private $_additional_line_items = array();
63
-
64
-    /**
65
-     * A list of all fields in the AIM API.
66
-     * Used to warn user if they try to set a field not offered in the API.
67
-     */
68
-    private $_all_aim_fields = array(
69
-        "address",
70
-        "allow_partial_auth",
71
-        "amount",
72
-        "auth_code",
73
-        "authentication_indicator",
74
-        "bank_aba_code",
75
-        "bank_acct_name",
76
-        "bank_acct_num",
77
-        "bank_acct_type",
78
-        "bank_check_number",
79
-        "bank_name",
80
-        "card_code",
81
-        "card_num",
82
-        "cardholder_authentication_value",
83
-        "city",
84
-        "company",
85
-        "country",
86
-        "cust_id",
87
-        "customer_ip",
88
-        "delim_char",
89
-        "delim_data",
90
-        "description",
91
-        "duplicate_window",
92
-        "duty",
93
-        "echeck_type",
94
-        "email",
95
-        "email_customer",
96
-        "encap_char",
97
-        "exp_date",
98
-        "fax",
99
-        "first_name",
100
-        "footer_email_receipt",
101
-        "freight",
102
-        "header_email_receipt",
103
-        "invoice_num",
104
-        "last_name",
105
-        "line_item",
106
-        "login",
107
-        "method",
108
-        "phone",
109
-        "po_num",
110
-        "recurring_billing",
111
-        "relay_response",
112
-        "ship_to_address",
113
-        "ship_to_city",
114
-        "ship_to_company",
115
-        "ship_to_country",
116
-        "ship_to_first_name",
117
-        "ship_to_last_name",
118
-        "ship_to_state",
119
-        "ship_to_zip",
120
-        "split_tender_id",
121
-        "state",
122
-        "tax",
123
-        "tax_exempt",
124
-        "test_request",
125
-        "tran_key",
126
-        "trans_id",
127
-        "type",
128
-        "version",
129
-        "zip",
130
-        "solution_id",
131
-        "currency_code"
132
-    );
133
-
134
-
135
-    /**
136
-     * Gets the URL where the request should go. This is filterable
137
-     *
138
-     * @return string
139
-     */
140
-    protected function _get_server_url()
141
-    {
142
-        return apply_filters(
143
-            'FHEE__EEG_Aim___get_server_url',
144
-            $this->_debug_mode ? self::SANDBOX_URL : self::LIVE_URL,
145
-            $this
146
-        );
147
-    }
148
-
149
-
150
-    /**
151
-     * Asks the gateway to do whatever it does to process the payment. Onsite gateways will
152
-     * usually send a request directly to the payment provider and update the payment's status based on that;
153
-     * whereas offsite gateways will usually just update the payment with the URL and query parameters to use
154
-     * for sending the request via http_remote_request()
155
-     *
156
-     * @param EEI_Payment $payment
157
-     * @param array $billing_info {
158
-     *  @type $credit_card string
159
-     *  @type $cvv string
160
-     *  @type $exp_month string
161
-     *  @type $exp_year string
162
-     *  @see parent::do_direct_payment
163
-     * }
164
-     * @return EEI_Payment updated
165
-     */
166
-    public function do_direct_payment($payment, $billing_info = null)
167
-    {
168
-        // Enable test mode if needed
169
-        // 4007000000027  <-- test successful visa
170
-        // 4222222222222  <-- test failure card number
171
-
172
-        $item_num = 1;
173
-        $transaction = $payment->transaction();
174
-        $gateway_formatter = $this->_get_gateway_formatter();
175
-        $order_description = $this->prepareStringForAuthnet($gateway_formatter->formatOrderDescription($payment));
176
-        $primary_registrant = $transaction->primary_registration();
177
-        // if we're are charging for the full amount, show the normal line items
178
-        // and the itemized total adds up properly
179
-        if ($this->_can_easily_itemize_transaction_for($payment)) {
180
-            $total_line_item = $transaction->total_line_item();
181
-            foreach ($total_line_item->get_items() as $line_item) {
182
-                if ($line_item->quantity() == 0) {
183
-                    continue;
184
-                }
185
-                $this->addLineItem(
186
-                    $item_num++,
187
-                    $gateway_formatter->formatLineItemName($line_item, $payment),
188
-                    $gateway_formatter->formatLineItemDesc($line_item, $payment),
189
-                    $line_item->quantity(),
190
-                    $line_item->unit_price(),
191
-                    'N'
192
-                );
193
-                $order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', ';
194
-            }
195
-            foreach ($total_line_item->tax_descendants() as $tax_line_item) {
196
-                $this->addLineItem(
197
-                    $item_num++,
198
-                    $tax_line_item->name(),
199
-                    $tax_line_item->desc(),
200
-                    1,
201
-                    $tax_line_item->total(),
202
-                    'N'
203
-                );
204
-            }
205
-        }
206
-
207
-        // start transaction
208
-        // if in debug mode, use authorize.net's sandbox id; otherwise use the Event Espresso partner id
209
-        $partner_id = $this->_debug_mode ? 'AAA100302' : 'AAA105363';
210
-        $this->setField('solution_id', $partner_id);
211
-        $this->setField('amount', $gateway_formatter->formatCurrency($payment->amount()));
212
-        $this->setField('description', substr(rtrim($order_description, ', '), 0, 255));
213
-        $this->_set_sensitive_billing_data($billing_info);
214
-        $this->setField('first_name', $billing_info['first_name']);
215
-        $this->setField('last_name', $billing_info['last_name']);
216
-        $this->setField('email', $billing_info['email']);
217
-        $this->setField('company', $billing_info['company']);
218
-        $this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']);
219
-        $this->setField('city', $billing_info['city']);
220
-        $this->setField('state', $billing_info['state']);
221
-        $this->setField('country', $billing_info['country']);
222
-        $this->setField('zip', $billing_info['zip']);
223
-        $this->setField('fax', $billing_info['fax']);
224
-        $this->setField('cust_id', $primary_registrant->ID());
225
-        $this->setField('phone', $billing_info['phone']);
226
-        $currency_config = LoaderFactory::getLoader()->load('EE_Currency_Config');
227
-        $this->setField('currency_code', $currency_config->code);
228
-        // invoice_num would be nice to have it be unique per SPCO page-load, that way if users
229
-        // press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page
230
-        // in which case, we need to generate teh invoice num per request right here...
231
-        $this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']);
232
-        // tell AIM that any duplicates sent in the next 5 minutes are to be ignored
233
-        $this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS);
234
-
235
-        if ($this->_test_transactions) {
236
-            $this->test_request = "true";
237
-        }
238
-
239
-        // Capture response
240
-        $this->type = "AUTH_CAPTURE";
241
-        $response = $this->_sendRequest($payment);
242
-        if (! empty($response)) {
243
-            if ($response->error_message) {
244
-                $payment->set_status($this->_pay_model->failed_status());
245
-                $payment->set_gateway_response($response->error_message);
246
-            } else {
247
-                $payment_status = $response->approved
248
-                    ? $this->_pay_model->approved_status()
249
-                    : $this->_pay_model->declined_status();
250
-                $payment->set_status($payment_status);
251
-                // make sure we interpret the AMT as a float, not an international string (where periods are thousand separators)
252
-                $payment->set_amount((float) $response->amount);
253
-                $payment->set_gateway_response(
254
-                    sprintf(
255
-                        esc_html__('%1$s (Reason Code: %2$s)', 'event_espresso'),
256
-                        $response->response_reason_text,
257
-                        $response->response_reason_code
258
-                    )
259
-                );
260
-                if ($this->_debug_mode) {
261
-                    $txn_id = $response->invoice_number;
262
-                } else {
263
-                    $txn_id = $response->transaction_id;
264
-                }
265
-                $payment->set_txn_id_chq_nmbr($txn_id);
266
-            }
267
-            $payment->set_extra_accntng($primary_registrant->reg_code());
268
-            $payment->set_details(print_r($response, true));
269
-        } else {
270
-            $payment->set_status($this->_pay_model->failed_status());
271
-            $payment->set_gateway_response(esc_html__("There was no response from Authorize.net", 'event_espresso'));
272
-            $payment->set_details(print_r($response, true));
273
-        }
274
-        return $payment;
275
-    }
276
-
277
-
278
-    /**
279
-     * Sets billing data for the upcoming request to AIM that is considered sensitive;
280
-     * also this method can be overridden by children classes to easily change
281
-     * what billing data gets sent
282
-     *
283
-     * @param array $billing_info
284
-     */
285
-    protected function _set_sensitive_billing_data($billing_info)
286
-    {
287
-        $this->setField('card_num', $billing_info['credit_card']);
288
-        $this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']);
289
-        $this->setField('card_code', $billing_info['cvv']);
290
-    }
291
-
292
-
293
-    /**
294
-     * Add a line item.
295
-     *
296
-     * @param string $item_id
297
-     * @param string $item_name
298
-     * @param string $item_description
299
-     * @param string $item_quantity
300
-     * @param string $item_unit_price
301
-     * @param string $item_taxable
302
-     */
303
-    public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable)
304
-    {
305
-        $args = array(
306
-            substr($item_id, 0, 31),
307
-            substr($this->prepareStringForAuthnet($item_name), 0, 31),
308
-            substr($this->prepareStringForAuthnet($item_description), 0, 255),
309
-            number_format(abs($item_quantity), 2, '.', ''),
310
-            number_format(abs($item_unit_price), 2, '.', ''),
311
-            $item_taxable === 'N' ? 'N' : 'Y'
312
-        );
313
-        $this->_additional_line_items[] = implode('<|>', $args);
314
-    }
315
-
316
-
317
-    /**
318
-     * Set an individual name/value pair. This will append x_ to the name
319
-     * before posting.
320
-     *
321
-     * @param string $name
322
-     * @param string $value
323
-     * @throws AuthorizeNetException
324
-     */
325
-    protected function setField($name, $value)
326
-    {
327
-        if (in_array($name, $this->_all_aim_fields)) {
328
-            $this->_x_post_fields[ $name ] = $value;
329
-        } else {
330
-            throw new AuthorizeNetException("Error: no field $name exists in the AIM API.
28
+	const LIVE_URL    = 'https://secure2.authorize.net/gateway/transact.dll'; // Authnet URL
29
+
30
+	const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
31
+
32
+	protected $_login_id;
33
+
34
+	protected $_transaction_key;
35
+
36
+	protected $_currencies_supported = array(
37
+		'AUD',
38
+		'USD',
39
+		'CAD',
40
+		'EUR',
41
+		'GBP',
42
+		'NZD',
43
+	);
44
+
45
+	/**
46
+	 * Whether to send test transactions (even to live site)
47
+	 *
48
+	 * @var boolean
49
+	 */
50
+	protected $_test_transactions;
51
+
52
+	private $VERIFY_PEER = false;
53
+
54
+	private $_x_post_fields = array(
55
+		"version"        => "3.1",
56
+		"delim_char"     => ",",
57
+		"delim_data"     => "TRUE",
58
+		"relay_response" => "FALSE",
59
+		"encap_char"     => "|",
60
+	);
61
+
62
+	private $_additional_line_items = array();
63
+
64
+	/**
65
+	 * A list of all fields in the AIM API.
66
+	 * Used to warn user if they try to set a field not offered in the API.
67
+	 */
68
+	private $_all_aim_fields = array(
69
+		"address",
70
+		"allow_partial_auth",
71
+		"amount",
72
+		"auth_code",
73
+		"authentication_indicator",
74
+		"bank_aba_code",
75
+		"bank_acct_name",
76
+		"bank_acct_num",
77
+		"bank_acct_type",
78
+		"bank_check_number",
79
+		"bank_name",
80
+		"card_code",
81
+		"card_num",
82
+		"cardholder_authentication_value",
83
+		"city",
84
+		"company",
85
+		"country",
86
+		"cust_id",
87
+		"customer_ip",
88
+		"delim_char",
89
+		"delim_data",
90
+		"description",
91
+		"duplicate_window",
92
+		"duty",
93
+		"echeck_type",
94
+		"email",
95
+		"email_customer",
96
+		"encap_char",
97
+		"exp_date",
98
+		"fax",
99
+		"first_name",
100
+		"footer_email_receipt",
101
+		"freight",
102
+		"header_email_receipt",
103
+		"invoice_num",
104
+		"last_name",
105
+		"line_item",
106
+		"login",
107
+		"method",
108
+		"phone",
109
+		"po_num",
110
+		"recurring_billing",
111
+		"relay_response",
112
+		"ship_to_address",
113
+		"ship_to_city",
114
+		"ship_to_company",
115
+		"ship_to_country",
116
+		"ship_to_first_name",
117
+		"ship_to_last_name",
118
+		"ship_to_state",
119
+		"ship_to_zip",
120
+		"split_tender_id",
121
+		"state",
122
+		"tax",
123
+		"tax_exempt",
124
+		"test_request",
125
+		"tran_key",
126
+		"trans_id",
127
+		"type",
128
+		"version",
129
+		"zip",
130
+		"solution_id",
131
+		"currency_code"
132
+	);
133
+
134
+
135
+	/**
136
+	 * Gets the URL where the request should go. This is filterable
137
+	 *
138
+	 * @return string
139
+	 */
140
+	protected function _get_server_url()
141
+	{
142
+		return apply_filters(
143
+			'FHEE__EEG_Aim___get_server_url',
144
+			$this->_debug_mode ? self::SANDBOX_URL : self::LIVE_URL,
145
+			$this
146
+		);
147
+	}
148
+
149
+
150
+	/**
151
+	 * Asks the gateway to do whatever it does to process the payment. Onsite gateways will
152
+	 * usually send a request directly to the payment provider and update the payment's status based on that;
153
+	 * whereas offsite gateways will usually just update the payment with the URL and query parameters to use
154
+	 * for sending the request via http_remote_request()
155
+	 *
156
+	 * @param EEI_Payment $payment
157
+	 * @param array $billing_info {
158
+	 *  @type $credit_card string
159
+	 *  @type $cvv string
160
+	 *  @type $exp_month string
161
+	 *  @type $exp_year string
162
+	 *  @see parent::do_direct_payment
163
+	 * }
164
+	 * @return EEI_Payment updated
165
+	 */
166
+	public function do_direct_payment($payment, $billing_info = null)
167
+	{
168
+		// Enable test mode if needed
169
+		// 4007000000027  <-- test successful visa
170
+		// 4222222222222  <-- test failure card number
171
+
172
+		$item_num = 1;
173
+		$transaction = $payment->transaction();
174
+		$gateway_formatter = $this->_get_gateway_formatter();
175
+		$order_description = $this->prepareStringForAuthnet($gateway_formatter->formatOrderDescription($payment));
176
+		$primary_registrant = $transaction->primary_registration();
177
+		// if we're are charging for the full amount, show the normal line items
178
+		// and the itemized total adds up properly
179
+		if ($this->_can_easily_itemize_transaction_for($payment)) {
180
+			$total_line_item = $transaction->total_line_item();
181
+			foreach ($total_line_item->get_items() as $line_item) {
182
+				if ($line_item->quantity() == 0) {
183
+					continue;
184
+				}
185
+				$this->addLineItem(
186
+					$item_num++,
187
+					$gateway_formatter->formatLineItemName($line_item, $payment),
188
+					$gateway_formatter->formatLineItemDesc($line_item, $payment),
189
+					$line_item->quantity(),
190
+					$line_item->unit_price(),
191
+					'N'
192
+				);
193
+				$order_description .= $this->prepareStringForAuthnet($line_item->desc()) . ', ';
194
+			}
195
+			foreach ($total_line_item->tax_descendants() as $tax_line_item) {
196
+				$this->addLineItem(
197
+					$item_num++,
198
+					$tax_line_item->name(),
199
+					$tax_line_item->desc(),
200
+					1,
201
+					$tax_line_item->total(),
202
+					'N'
203
+				);
204
+			}
205
+		}
206
+
207
+		// start transaction
208
+		// if in debug mode, use authorize.net's sandbox id; otherwise use the Event Espresso partner id
209
+		$partner_id = $this->_debug_mode ? 'AAA100302' : 'AAA105363';
210
+		$this->setField('solution_id', $partner_id);
211
+		$this->setField('amount', $gateway_formatter->formatCurrency($payment->amount()));
212
+		$this->setField('description', substr(rtrim($order_description, ', '), 0, 255));
213
+		$this->_set_sensitive_billing_data($billing_info);
214
+		$this->setField('first_name', $billing_info['first_name']);
215
+		$this->setField('last_name', $billing_info['last_name']);
216
+		$this->setField('email', $billing_info['email']);
217
+		$this->setField('company', $billing_info['company']);
218
+		$this->setField('address', $billing_info['address'] . ' ' . $billing_info['address2']);
219
+		$this->setField('city', $billing_info['city']);
220
+		$this->setField('state', $billing_info['state']);
221
+		$this->setField('country', $billing_info['country']);
222
+		$this->setField('zip', $billing_info['zip']);
223
+		$this->setField('fax', $billing_info['fax']);
224
+		$this->setField('cust_id', $primary_registrant->ID());
225
+		$this->setField('phone', $billing_info['phone']);
226
+		$currency_config = LoaderFactory::getLoader()->load('EE_Currency_Config');
227
+		$this->setField('currency_code', $currency_config->code);
228
+		// invoice_num would be nice to have it be unique per SPCO page-load, that way if users
229
+		// press back, they don't submit a duplicate. However, we may be keeping the user on teh same spco page
230
+		// in which case, we need to generate teh invoice num per request right here...
231
+		$this->setField('invoice_num', wp_generate_password(12, false));// $billing_info['_reg-page-billing-invoice-'.$this->_gateway_name]['value']);
232
+		// tell AIM that any duplicates sent in the next 5 minutes are to be ignored
233
+		$this->setField('duplicate_window', 5 * MINUTE_IN_SECONDS);
234
+
235
+		if ($this->_test_transactions) {
236
+			$this->test_request = "true";
237
+		}
238
+
239
+		// Capture response
240
+		$this->type = "AUTH_CAPTURE";
241
+		$response = $this->_sendRequest($payment);
242
+		if (! empty($response)) {
243
+			if ($response->error_message) {
244
+				$payment->set_status($this->_pay_model->failed_status());
245
+				$payment->set_gateway_response($response->error_message);
246
+			} else {
247
+				$payment_status = $response->approved
248
+					? $this->_pay_model->approved_status()
249
+					: $this->_pay_model->declined_status();
250
+				$payment->set_status($payment_status);
251
+				// make sure we interpret the AMT as a float, not an international string (where periods are thousand separators)
252
+				$payment->set_amount((float) $response->amount);
253
+				$payment->set_gateway_response(
254
+					sprintf(
255
+						esc_html__('%1$s (Reason Code: %2$s)', 'event_espresso'),
256
+						$response->response_reason_text,
257
+						$response->response_reason_code
258
+					)
259
+				);
260
+				if ($this->_debug_mode) {
261
+					$txn_id = $response->invoice_number;
262
+				} else {
263
+					$txn_id = $response->transaction_id;
264
+				}
265
+				$payment->set_txn_id_chq_nmbr($txn_id);
266
+			}
267
+			$payment->set_extra_accntng($primary_registrant->reg_code());
268
+			$payment->set_details(print_r($response, true));
269
+		} else {
270
+			$payment->set_status($this->_pay_model->failed_status());
271
+			$payment->set_gateway_response(esc_html__("There was no response from Authorize.net", 'event_espresso'));
272
+			$payment->set_details(print_r($response, true));
273
+		}
274
+		return $payment;
275
+	}
276
+
277
+
278
+	/**
279
+	 * Sets billing data for the upcoming request to AIM that is considered sensitive;
280
+	 * also this method can be overridden by children classes to easily change
281
+	 * what billing data gets sent
282
+	 *
283
+	 * @param array $billing_info
284
+	 */
285
+	protected function _set_sensitive_billing_data($billing_info)
286
+	{
287
+		$this->setField('card_num', $billing_info['credit_card']);
288
+		$this->setField('exp_date', $billing_info['exp_month'] . $billing_info['exp_year']);
289
+		$this->setField('card_code', $billing_info['cvv']);
290
+	}
291
+
292
+
293
+	/**
294
+	 * Add a line item.
295
+	 *
296
+	 * @param string $item_id
297
+	 * @param string $item_name
298
+	 * @param string $item_description
299
+	 * @param string $item_quantity
300
+	 * @param string $item_unit_price
301
+	 * @param string $item_taxable
302
+	 */
303
+	public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable)
304
+	{
305
+		$args = array(
306
+			substr($item_id, 0, 31),
307
+			substr($this->prepareStringForAuthnet($item_name), 0, 31),
308
+			substr($this->prepareStringForAuthnet($item_description), 0, 255),
309
+			number_format(abs($item_quantity), 2, '.', ''),
310
+			number_format(abs($item_unit_price), 2, '.', ''),
311
+			$item_taxable === 'N' ? 'N' : 'Y'
312
+		);
313
+		$this->_additional_line_items[] = implode('<|>', $args);
314
+	}
315
+
316
+
317
+	/**
318
+	 * Set an individual name/value pair. This will append x_ to the name
319
+	 * before posting.
320
+	 *
321
+	 * @param string $name
322
+	 * @param string $value
323
+	 * @throws AuthorizeNetException
324
+	 */
325
+	protected function setField($name, $value)
326
+	{
327
+		if (in_array($name, $this->_all_aim_fields)) {
328
+			$this->_x_post_fields[ $name ] = $value;
329
+		} else {
330
+			throw new AuthorizeNetException("Error: no field $name exists in the AIM API.
331 331
             To set a custom field use setCustomField('field','value') instead.");
332
-        }
333
-    }
334
-
335
-
336
-    /**
337
-     * Posts the request to AuthorizeNet & returns response.
338
-     *
339
-     * @param $payment
340
-     * @return \EE_AuthorizeNetAIM_Response
341
-     */
342
-    private function _sendRequest($payment)
343
-    {
344
-        $this->_x_post_fields['login'] = $this->_login_id;
345
-        $this->_x_post_fields['tran_key'] = $this->_transaction_key;
346
-        $x_keys = array();
347
-        foreach ($this->_x_post_fields as $key => $value) {
348
-            $x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value));
349
-        }
350
-        // Add line items
351
-        foreach ($this->_additional_line_items as $key => $value) {
352
-            $x_keys[] =  "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value));
353
-        }
354
-        $this->_log_clean_request($x_keys, $payment);
355
-        $post_url = $this->_get_server_url();
356
-        $curl_request = curl_init($post_url);
357
-        $post_body = implode("&", $x_keys);
358
-        curl_setopt($curl_request, CURLOPT_POSTFIELDS, $post_body);
359
-        curl_setopt($curl_request, CURLOPT_HEADER, 0);
360
-        curl_setopt($curl_request, CURLOPT_TIMEOUT, 45);
361
-        curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);
362
-        curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2);
363
-        if ($this->VERIFY_PEER) {
364
-            curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem');
365
-        } else {
366
-            curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);
367
-        }
368
-
369
-        if (preg_match('/xml/', $post_url)) {
370
-            curl_setopt($curl_request, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
371
-        }
372
-
373
-        $response = curl_exec($curl_request);
374
-
375
-        curl_close($curl_request);
376
-        $response_obj =  new EE_AuthorizeNetAIM_Response($response);
377
-
378
-        return $this->_log_and_clean_response($response_obj, $payment);
379
-    }
380
-
381
-
382
-    /**
383
-     * Logs the clean data only
384
-     *
385
-     * @param array $request_array
386
-     * @param EEI_Payment $payment
387
-     */
388
-    protected function _log_clean_request($request_array, $payment)
389
-    {
390
-        $keys_to_filter_out = array('x_card_num', 'x_card_code', 'x_exp_date');
391
-        foreach ($request_array as $index => $keyvaltogether) {
392
-            foreach ($keys_to_filter_out as $key) {
393
-                if (strpos($keyvaltogether, $key) === 0) {
394
-                    // found it at the first character
395
-                    // so its one of them
396
-                    unset($request_array[ $index ]);
397
-                }
398
-            }
399
-        }
400
-        $this->log(
401
-            array(
402
-                'AIM Request sent:' => $request_array,
403
-                'Server URL'        => $this->_get_server_url()
404
-            ),
405
-            $payment
406
-        );
407
-    }
408
-
409
-
410
-
411
-    /**
412
-     * Logs the response and cleans it
413
-     *
414
-     * @param EE_AuthorizeNetAIM_Response $response_obj
415
-     * @param EE_Payment                  $payment
416
-     * @return \EE_AuthorizeNetAIM_Response
417
-     */
418
-    private function _log_and_clean_response($response_obj, $payment)
419
-    {
420
-        $response_obj->account_number = '';
421
-        $this->log(array('AIM Response received:' => (array) $response_obj), $payment);
422
-        return $response_obj;
423
-    }
424
-
425
-    /**
426
-     * Removes characters Authorize.net doesn't handle well.
427
-     * @since 4.9.82.p
428
-     * @param $text
429
-     * @return string
430
-     */
431
-    private function prepareStringForAuthnet($text)
432
-    {
433
-        return str_replace(
434
-            '\'',
435
-            '',
436
-            $text
437
-        );
438
-    }
332
+		}
333
+	}
334
+
335
+
336
+	/**
337
+	 * Posts the request to AuthorizeNet & returns response.
338
+	 *
339
+	 * @param $payment
340
+	 * @return \EE_AuthorizeNetAIM_Response
341
+	 */
342
+	private function _sendRequest($payment)
343
+	{
344
+		$this->_x_post_fields['login'] = $this->_login_id;
345
+		$this->_x_post_fields['tran_key'] = $this->_transaction_key;
346
+		$x_keys = array();
347
+		foreach ($this->_x_post_fields as $key => $value) {
348
+			$x_keys[] = "x_$key=" . urlencode($this->_get_unsupported_character_remover()->format($value));
349
+		}
350
+		// Add line items
351
+		foreach ($this->_additional_line_items as $key => $value) {
352
+			$x_keys[] =  "x_line_item=" . urlencode($this->_get_unsupported_character_remover()->format($value));
353
+		}
354
+		$this->_log_clean_request($x_keys, $payment);
355
+		$post_url = $this->_get_server_url();
356
+		$curl_request = curl_init($post_url);
357
+		$post_body = implode("&", $x_keys);
358
+		curl_setopt($curl_request, CURLOPT_POSTFIELDS, $post_body);
359
+		curl_setopt($curl_request, CURLOPT_HEADER, 0);
360
+		curl_setopt($curl_request, CURLOPT_TIMEOUT, 45);
361
+		curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);
362
+		curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2);
363
+		if ($this->VERIFY_PEER) {
364
+			curl_setopt($curl_request, CURLOPT_CAINFO, dirname(__DIR__) . '/ssl/cert.pem');
365
+		} else {
366
+			curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);
367
+		}
368
+
369
+		if (preg_match('/xml/', $post_url)) {
370
+			curl_setopt($curl_request, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
371
+		}
372
+
373
+		$response = curl_exec($curl_request);
374
+
375
+		curl_close($curl_request);
376
+		$response_obj =  new EE_AuthorizeNetAIM_Response($response);
377
+
378
+		return $this->_log_and_clean_response($response_obj, $payment);
379
+	}
380
+
381
+
382
+	/**
383
+	 * Logs the clean data only
384
+	 *
385
+	 * @param array $request_array
386
+	 * @param EEI_Payment $payment
387
+	 */
388
+	protected function _log_clean_request($request_array, $payment)
389
+	{
390
+		$keys_to_filter_out = array('x_card_num', 'x_card_code', 'x_exp_date');
391
+		foreach ($request_array as $index => $keyvaltogether) {
392
+			foreach ($keys_to_filter_out as $key) {
393
+				if (strpos($keyvaltogether, $key) === 0) {
394
+					// found it at the first character
395
+					// so its one of them
396
+					unset($request_array[ $index ]);
397
+				}
398
+			}
399
+		}
400
+		$this->log(
401
+			array(
402
+				'AIM Request sent:' => $request_array,
403
+				'Server URL'        => $this->_get_server_url()
404
+			),
405
+			$payment
406
+		);
407
+	}
408
+
409
+
410
+
411
+	/**
412
+	 * Logs the response and cleans it
413
+	 *
414
+	 * @param EE_AuthorizeNetAIM_Response $response_obj
415
+	 * @param EE_Payment                  $payment
416
+	 * @return \EE_AuthorizeNetAIM_Response
417
+	 */
418
+	private function _log_and_clean_response($response_obj, $payment)
419
+	{
420
+		$response_obj->account_number = '';
421
+		$this->log(array('AIM Response received:' => (array) $response_obj), $payment);
422
+		return $response_obj;
423
+	}
424
+
425
+	/**
426
+	 * Removes characters Authorize.net doesn't handle well.
427
+	 * @since 4.9.82.p
428
+	 * @param $text
429
+	 * @return string
430
+	 */
431
+	private function prepareStringForAuthnet($text)
432
+	{
433
+		return str_replace(
434
+			'\'',
435
+			'',
436
+			$text
437
+		);
438
+	}
439 439
 }
440 440
 
441 441
 
@@ -450,191 +450,191 @@  discard block
 block discarded – undo
450 450
  */
451 451
 class EE_AuthorizeNetAIM_Response
452 452
 {
453
-    const APPROVED = '1';
454
-    const DECLINED = '2';
455
-    const ERROR = '3';
456
-    const HELD = '4';
457
-
458
-    protected $_x_post_fields = array(
459
-        "version"        => "3.1",
460
-        "delim_char"     => ",",
461
-        "delim_data"     => "TRUE",
462
-        "relay_response" => "FALSE",
463
-        "encap_char"     => "|",
464
-    );
465
-    public $approved;
466
-    public $declined;
467
-    public $error;
468
-    public $held;
469
-    public $response_code;
470
-    public $response_subcode;
471
-    public $response_reason_code;
472
-    public $response_reason_text;
473
-    public $authorization_code;
474
-    public $avs_response;
475
-    public $transaction_id;
476
-    public $invoice_number;
477
-    public $description;
478
-    public $amount;
479
-    public $method;
480
-    public $transaction_type;
481
-    public $customer_id;
482
-    public $first_name;
483
-    public $last_name;
484
-    public $company;
485
-    public $address;
486
-    public $city;
487
-    public $state;
488
-    public $zip_code;
489
-    public $country;
490
-    public $phone;
491
-    public $fax;
492
-    public $email_address;
493
-    public $ship_to_first_name;
494
-    public $ship_to_last_name;
495
-    public $ship_to_company;
496
-    public $ship_to_address;
497
-    public $ship_to_city;
498
-    public $ship_to_state;
499
-    public $ship_to_zip_code;
500
-    public $ship_to_country;
501
-    public $tax;
502
-    public $duty;
503
-    public $freight;
504
-    public $tax_exempt;
505
-    public $purchase_order_number;
506
-    public $md5_hash;
507
-    public $card_code_response;
508
-    public $cavv_response; // cardholder_authentication_verification_response
509
-    public $account_number;
510
-    public $card_type;
511
-    public $split_tender_id;
512
-    public $requested_amount;
513
-    public $balance_on_card;
514
-    public $response; // The response string from AuthorizeNet.
515
-    public $error_message;
516
-    private $_response_array = array(); // An array with the split response.
517
-
518
-
519
-    /**
520
-     * Constructor. Parses the AuthorizeNet response string
521
-     *
522
-     * @param string $response The response from the AuthNet server.
523
-     * @var string   $delimiter The delimiter used (default is ",")
524
-     * @var string   $encap_char The encap_char used (default is "|")
525
-     * @var array    $custom_fields Any custom fields set in the request.
526
-     */
527
-
528
-    public function __construct($response)
529
-    {
530
-        $encap_char = $this->_x_post_fields['encap_char'];
531
-        $delimiter = $this->_x_post_fields['delim_char'];
532
-        if ($response) {
533
-            // Split Array
534
-            $this->response = $response;
535
-            if ($encap_char) {
536
-                $this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1));
537
-            } else {
538
-                $this->_response_array = explode($delimiter, $response);
539
-            }
540
-
541
-            /**
542
-             * If AuthorizeNet doesn't return a delimited response.
543
-             */
544
-            if (count($this->_response_array) < 10) {
545
-                $this->approved = false;
546
-                $this->error = true;
547
-                $this->error_message = sprintf(
548
-                    esc_html__('Unrecognized response from Authorize.net: %1$s', 'event_espresso'),
549
-                    esc_html($response)
550
-                );
551
-                return;
552
-            }
553
-
554
-
555
-
556
-            // Set all fields
557
-            $this->response_code = $this->_response_array[0];
558
-            $this->response_subcode = $this->_response_array[1];
559
-            $this->response_reason_code = $this->_response_array[2];
560
-            $this->response_reason_text = $this->_response_array[3];
561
-            $this->authorization_code = $this->_response_array[4];
562
-            $this->avs_response = $this->_response_array[5];
563
-            $this->transaction_id = $this->_response_array[6];
564
-            $this->invoice_number = $this->_response_array[7];
565
-            $this->description = $this->_response_array[8];
566
-            $this->amount = $this->_response_array[9];
567
-            $this->method = $this->_response_array[10];
568
-            $this->transaction_type = $this->_response_array[11];
569
-            $this->customer_id = $this->_response_array[12];
570
-            $this->first_name = $this->_response_array[13];
571
-            $this->last_name = $this->_response_array[14];
572
-            $this->company = $this->_response_array[15];
573
-            $this->address = $this->_response_array[16];
574
-            $this->city = $this->_response_array[17];
575
-            $this->state = $this->_response_array[18];
576
-            $this->zip_code = $this->_response_array[19];
577
-            $this->country = $this->_response_array[20];
578
-            $this->phone = $this->_response_array[21];
579
-            $this->fax = $this->_response_array[22];
580
-            $this->email_address = $this->_response_array[23];
581
-            $this->ship_to_first_name = $this->_response_array[24];
582
-            $this->ship_to_last_name = $this->_response_array[25];
583
-            $this->ship_to_company = $this->_response_array[26];
584
-            $this->ship_to_address = $this->_response_array[27];
585
-            $this->ship_to_city = $this->_response_array[28];
586
-            $this->ship_to_state = $this->_response_array[29];
587
-            $this->ship_to_zip_code = $this->_response_array[30];
588
-            $this->ship_to_country = $this->_response_array[31];
589
-            $this->tax = $this->_response_array[32];
590
-            $this->duty = $this->_response_array[33];
591
-            $this->freight = $this->_response_array[34];
592
-            $this->tax_exempt = $this->_response_array[35];
593
-            $this->purchase_order_number = $this->_response_array[36];
594
-            $this->md5_hash = $this->_response_array[37];
595
-            $this->card_code_response = $this->_response_array[38];
596
-            $this->cavv_response = $this->_response_array[39];
597
-            $this->account_number = $this->_response_array[50];
598
-            $this->card_type = $this->_response_array[51];
599
-            $this->split_tender_id = $this->_response_array[52];
600
-            $this->requested_amount = $this->_response_array[53];
601
-            $this->balance_on_card = $this->_response_array[54];
602
-
603
-            $this->approved = ($this->response_code === self::APPROVED);
604
-            $this->declined = ($this->response_code === self::DECLINED);
605
-            $this->error = ($this->response_code === self::ERROR);
606
-            $this->held = ($this->response_code === self::HELD);
607
-        } else {
608
-            $this->approved = false;
609
-            $this->error = true;
610
-            $this->error_message = esc_html__(
611
-                'Error connecting to Authorize.net',
612
-                'event_espresso'
613
-            );
614
-        }
615
-    }
453
+	const APPROVED = '1';
454
+	const DECLINED = '2';
455
+	const ERROR = '3';
456
+	const HELD = '4';
457
+
458
+	protected $_x_post_fields = array(
459
+		"version"        => "3.1",
460
+		"delim_char"     => ",",
461
+		"delim_data"     => "TRUE",
462
+		"relay_response" => "FALSE",
463
+		"encap_char"     => "|",
464
+	);
465
+	public $approved;
466
+	public $declined;
467
+	public $error;
468
+	public $held;
469
+	public $response_code;
470
+	public $response_subcode;
471
+	public $response_reason_code;
472
+	public $response_reason_text;
473
+	public $authorization_code;
474
+	public $avs_response;
475
+	public $transaction_id;
476
+	public $invoice_number;
477
+	public $description;
478
+	public $amount;
479
+	public $method;
480
+	public $transaction_type;
481
+	public $customer_id;
482
+	public $first_name;
483
+	public $last_name;
484
+	public $company;
485
+	public $address;
486
+	public $city;
487
+	public $state;
488
+	public $zip_code;
489
+	public $country;
490
+	public $phone;
491
+	public $fax;
492
+	public $email_address;
493
+	public $ship_to_first_name;
494
+	public $ship_to_last_name;
495
+	public $ship_to_company;
496
+	public $ship_to_address;
497
+	public $ship_to_city;
498
+	public $ship_to_state;
499
+	public $ship_to_zip_code;
500
+	public $ship_to_country;
501
+	public $tax;
502
+	public $duty;
503
+	public $freight;
504
+	public $tax_exempt;
505
+	public $purchase_order_number;
506
+	public $md5_hash;
507
+	public $card_code_response;
508
+	public $cavv_response; // cardholder_authentication_verification_response
509
+	public $account_number;
510
+	public $card_type;
511
+	public $split_tender_id;
512
+	public $requested_amount;
513
+	public $balance_on_card;
514
+	public $response; // The response string from AuthorizeNet.
515
+	public $error_message;
516
+	private $_response_array = array(); // An array with the split response.
517
+
518
+
519
+	/**
520
+	 * Constructor. Parses the AuthorizeNet response string
521
+	 *
522
+	 * @param string $response The response from the AuthNet server.
523
+	 * @var string   $delimiter The delimiter used (default is ",")
524
+	 * @var string   $encap_char The encap_char used (default is "|")
525
+	 * @var array    $custom_fields Any custom fields set in the request.
526
+	 */
527
+
528
+	public function __construct($response)
529
+	{
530
+		$encap_char = $this->_x_post_fields['encap_char'];
531
+		$delimiter = $this->_x_post_fields['delim_char'];
532
+		if ($response) {
533
+			// Split Array
534
+			$this->response = $response;
535
+			if ($encap_char) {
536
+				$this->_response_array = explode($encap_char . $delimiter . $encap_char, substr($response, 1, -1));
537
+			} else {
538
+				$this->_response_array = explode($delimiter, $response);
539
+			}
540
+
541
+			/**
542
+			 * If AuthorizeNet doesn't return a delimited response.
543
+			 */
544
+			if (count($this->_response_array) < 10) {
545
+				$this->approved = false;
546
+				$this->error = true;
547
+				$this->error_message = sprintf(
548
+					esc_html__('Unrecognized response from Authorize.net: %1$s', 'event_espresso'),
549
+					esc_html($response)
550
+				);
551
+				return;
552
+			}
553
+
554
+
555
+
556
+			// Set all fields
557
+			$this->response_code = $this->_response_array[0];
558
+			$this->response_subcode = $this->_response_array[1];
559
+			$this->response_reason_code = $this->_response_array[2];
560
+			$this->response_reason_text = $this->_response_array[3];
561
+			$this->authorization_code = $this->_response_array[4];
562
+			$this->avs_response = $this->_response_array[5];
563
+			$this->transaction_id = $this->_response_array[6];
564
+			$this->invoice_number = $this->_response_array[7];
565
+			$this->description = $this->_response_array[8];
566
+			$this->amount = $this->_response_array[9];
567
+			$this->method = $this->_response_array[10];
568
+			$this->transaction_type = $this->_response_array[11];
569
+			$this->customer_id = $this->_response_array[12];
570
+			$this->first_name = $this->_response_array[13];
571
+			$this->last_name = $this->_response_array[14];
572
+			$this->company = $this->_response_array[15];
573
+			$this->address = $this->_response_array[16];
574
+			$this->city = $this->_response_array[17];
575
+			$this->state = $this->_response_array[18];
576
+			$this->zip_code = $this->_response_array[19];
577
+			$this->country = $this->_response_array[20];
578
+			$this->phone = $this->_response_array[21];
579
+			$this->fax = $this->_response_array[22];
580
+			$this->email_address = $this->_response_array[23];
581
+			$this->ship_to_first_name = $this->_response_array[24];
582
+			$this->ship_to_last_name = $this->_response_array[25];
583
+			$this->ship_to_company = $this->_response_array[26];
584
+			$this->ship_to_address = $this->_response_array[27];
585
+			$this->ship_to_city = $this->_response_array[28];
586
+			$this->ship_to_state = $this->_response_array[29];
587
+			$this->ship_to_zip_code = $this->_response_array[30];
588
+			$this->ship_to_country = $this->_response_array[31];
589
+			$this->tax = $this->_response_array[32];
590
+			$this->duty = $this->_response_array[33];
591
+			$this->freight = $this->_response_array[34];
592
+			$this->tax_exempt = $this->_response_array[35];
593
+			$this->purchase_order_number = $this->_response_array[36];
594
+			$this->md5_hash = $this->_response_array[37];
595
+			$this->card_code_response = $this->_response_array[38];
596
+			$this->cavv_response = $this->_response_array[39];
597
+			$this->account_number = $this->_response_array[50];
598
+			$this->card_type = $this->_response_array[51];
599
+			$this->split_tender_id = $this->_response_array[52];
600
+			$this->requested_amount = $this->_response_array[53];
601
+			$this->balance_on_card = $this->_response_array[54];
602
+
603
+			$this->approved = ($this->response_code === self::APPROVED);
604
+			$this->declined = ($this->response_code === self::DECLINED);
605
+			$this->error = ($this->response_code === self::ERROR);
606
+			$this->held = ($this->response_code === self::HELD);
607
+		} else {
608
+			$this->approved = false;
609
+			$this->error = true;
610
+			$this->error_message = esc_html__(
611
+				'Error connecting to Authorize.net',
612
+				'event_espresso'
613
+			);
614
+		}
615
+	}
616 616
 }
617 617
 
618 618
 if (! class_exists('AuthorizeNetException')) {
619
-    /**
620
-     * Class AuthorizeNetException
621
-     *
622
-     * @package    AuthorizeNet
623
-     */
624
-    class AuthorizeNetException extends Exception
625
-    {
626
-        /**
627
-         * Construct the exception. Note: The message is NOT binary safe.
628
-         *
629
-         * @link http://php.net/manual/en/exception.construct.php
630
-         * @param string $message [optional] The Exception message to throw.
631
-         * @param int $code [optional] The Exception code.
632
-         * @param Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0
633
-         * @since 5.1.0
634
-         */
635
-        public function __construct($message = "", $code = 0, Exception $previous = null)
636
-        {
637
-            parent::__construct($message, $code, $previous);
638
-        }
639
-    }
619
+	/**
620
+	 * Class AuthorizeNetException
621
+	 *
622
+	 * @package    AuthorizeNet
623
+	 */
624
+	class AuthorizeNetException extends Exception
625
+	{
626
+		/**
627
+		 * Construct the exception. Note: The message is NOT binary safe.
628
+		 *
629
+		 * @link http://php.net/manual/en/exception.construct.php
630
+		 * @param string $message [optional] The Exception message to throw.
631
+		 * @param int $code [optional] The Exception code.
632
+		 * @param Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0
633
+		 * @since 5.1.0
634
+		 */
635
+		public function __construct($message = "", $code = 0, Exception $previous = null)
636
+		{
637
+			parent::__construct($message, $code, $previous);
638
+		}
639
+	}
640 640
 }
Please login to merge, or discard this patch.
caffeinated/payment_methods/Aim/templates/aim_intro.template.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -1,10 +1,10 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 printf(
4
-    esc_html__(
5
-        'Authorize.Net AIM is an on-site payment method for accepting credit and debit card payments and is available to event organizers in the United States, Canada, United Kingdom, and Australia. An account with Authorize.Net is required to accept payments. Need an Authorize.Net account? %1$sClick here to sign up for a merchant account%2$s.',
6
-        'event_espresso'
7
-    ),
8
-    '<a href="https://eventespresso.com/go/authorizenetaim/" target="_blank">',
9
-    '</a>'
4
+	esc_html__(
5
+		'Authorize.Net AIM is an on-site payment method for accepting credit and debit card payments and is available to event organizers in the United States, Canada, United Kingdom, and Australia. An account with Authorize.Net is required to accept payments. Need an Authorize.Net account? %1$sClick here to sign up for a merchant account%2$s.',
6
+		'event_espresso'
7
+	),
8
+	'<a href="https://eventespresso.com/go/authorizenetaim/" target="_blank">',
9
+	'</a>'
10 10
 );
Please login to merge, or discard this patch.