Completed
Branch FET-3467-waitlists (1420fa)
by
unknown
143:42 queued 130:36
created
caffeinated/core/libraries/shortcodes/EE_Question_Shortcodes.lib.php 1 patch
Indentation   +64 added lines, -64 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined('EVENT_ESPRESSO_VERSION')) {
4
-    exit('NO direct script access allowed');
4
+	exit('NO direct script access allowed');
5 5
 }
6 6
 
7 7
 /**
@@ -36,82 +36,82 @@  discard block
 block discarded – undo
36 36
 {
37 37
     
38 38
     
39
-    /**
40
-     * _init_props
41
-     *
42
-     * @access protected
43
-     * @return void
44
-     */
45
-    protected function _init_props()
46
-    {
47
-        $this->label       = __('Attendee Shortcodes', 'event_espresso');
48
-        $this->description = __('All shortcodes specific to attendee related data', 'event_espresso');
49
-        $this->_shortcodes = array(
50
-            '[QUESTION]' => __('Will parse to a question.', 'event_espresso'),
51
-            '[ANSWER]'   => __('Will parse to the answer for a question', 'event_espresso')
52
-        );
53
-    }
39
+	/**
40
+	 * _init_props
41
+	 *
42
+	 * @access protected
43
+	 * @return void
44
+	 */
45
+	protected function _init_props()
46
+	{
47
+		$this->label       = __('Attendee Shortcodes', 'event_espresso');
48
+		$this->description = __('All shortcodes specific to attendee related data', 'event_espresso');
49
+		$this->_shortcodes = array(
50
+			'[QUESTION]' => __('Will parse to a question.', 'event_espresso'),
51
+			'[ANSWER]'   => __('Will parse to the answer for a question', 'event_espresso')
52
+		);
53
+	}
54 54
     
55 55
     
56
-    /**
57
-     * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
58
-     * will have to take care of handling.
59
-     *
60
-     * @access protected
61
-     *
62
-     * @param string $shortcode the shortcode to be parsed.
63
-     *
64
-     * @return string parsed shortcode
65
-     */
66
-    protected function _parser($shortcode)
67
-    {
56
+	/**
57
+	 * This method will give parsing instructions for each shortcode defined in the _shortcodes array.  Child methods
58
+	 * will have to take care of handling.
59
+	 *
60
+	 * @access protected
61
+	 *
62
+	 * @param string $shortcode the shortcode to be parsed.
63
+	 *
64
+	 * @return string parsed shortcode
65
+	 */
66
+	protected function _parser($shortcode)
67
+	{
68 68
         
69
-        if ( ! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) {
70
-            return '';
71
-        }
69
+		if ( ! $this->_data instanceof EE_Answer || ! isset($this->_extra_data['data']) || ! $this->_extra_data['data'] instanceof EE_Messages_Addressee) {
70
+			return '';
71
+		}
72 72
         
73
-        switch ($shortcode) {
73
+		switch ($shortcode) {
74 74
             
75
-            case '[QUESTION]' :
76
-                $question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question();
77
-                if ( ! $question instanceof EE_Question) {
78
-                    return ''; //get out because we can't figure out what the question is.
79
-                }
75
+			case '[QUESTION]' :
76
+				$question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question();
77
+				if ( ! $question instanceof EE_Question) {
78
+					return ''; //get out because we can't figure out what the question is.
79
+				}
80 80
                 
81
-                return $question->get('QST_display_text');
82
-                break;
81
+				return $question->get('QST_display_text');
82
+				break;
83 83
             
84
-            case '[ANSWER]' :
85
-                //need to get the question to determine the type of question (some questions require translation of the answer).
86
-                $question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question();
87
-                if ( ! $question instanceof EE_Question) {
88
-                    return ''; //get out cause we can't figure out what the question type is!
89
-                }
84
+			case '[ANSWER]' :
85
+				//need to get the question to determine the type of question (some questions require translation of the answer).
86
+				$question = isset($this->_extra_data['data']->questions[$this->_data->ID()]) ? $this->_extra_data['data']->questions[$this->_data->ID()] : $this->_data->question();
87
+				if ( ! $question instanceof EE_Question) {
88
+					return ''; //get out cause we can't figure out what the question type is!
89
+				}
90 90
                 
91
-                //what we show for the answer depends on the question type!
92
-                switch ($question->get('QST_type')) {
91
+				//what we show for the answer depends on the question type!
92
+				switch ($question->get('QST_type')) {
93 93
                     
94
-                    case 'STATE' :
95
-                        $state  = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value'));
96
-                        $answer = $state instanceof EE_State ? $state->name() : '';
97
-                        break;
94
+					case 'STATE' :
95
+						$state  = EEM_State::instance()->get_one_by_ID($this->_data->get('ANS_value'));
96
+						$answer = $state instanceof EE_State ? $state->name() : '';
97
+						break;
98 98
                     
99
-                    case 'COUNTRY' :
100
-                        $country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value'));
101
-                        $answer  = $country instanceof EE_Country ? $country->name() : '';
102
-                        break;
99
+					case 'COUNTRY' :
100
+						$country = EEM_Country::instance()->get_one_by_ID($this->_data->get('ANS_value'));
101
+						$answer  = $country instanceof EE_Country ? $country->name() : '';
102
+						break;
103 103
                     
104
-                    default :
105
-                        $answer = $this->_data->get_pretty('ANS_value', 'no_wpautop');
106
-                        break;
107
-                }
104
+					default :
105
+						$answer = $this->_data->get_pretty('ANS_value', 'no_wpautop');
106
+						break;
107
+				}
108 108
                 
109
-                return $answer;
110
-                break;
109
+				return $answer;
110
+				break;
111 111
             
112
-        }
112
+		}
113 113
         
114
-        return '';
115
-    }
114
+		return '';
115
+	}
116 116
     
117 117
 } //end EE_Question_Shortcodes class
Please login to merge, or discard this patch.
caffeinated/payment_methods/Paypal_Pro/EEG_Paypal_Pro.gateway.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -450,7 +450,7 @@
 block discarded – undo
450 450
 
451 451
 
452 452
     /**
453
-     * @param $Request
453
+     * @param string $Request
454 454
      * @return mixed
455 455
      */
456 456
     private function _CURLRequest($Request)
Please login to merge, or discard this patch.
Indentation   +544 added lines, -544 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if (! defined('EVENT_ESPRESSO_VERSION')) {
3
-    exit('No direct script access allowed');
3
+	exit('No direct script access allowed');
4 4
 }
5 5
 
6 6
 
@@ -25,549 +25,549 @@  discard block
 block discarded – undo
25 25
 class EEG_Paypal_Pro extends EE_Onsite_Gateway
26 26
 {
27 27
 
28
-    /**
29
-     * @var $_paypal_api_username string
30
-     */
31
-    protected $_username = null;
32
-
33
-    /**
34
-     * @var $_password string
35
-     */
36
-    protected $_password = null;
37
-
38
-    /**
39
-     * @var $_signature string
40
-     */
41
-    protected $_signature = null;
42
-
43
-    /**
44
-     * @var $_credit_card_types array with the keys for credit card types accepted on this account
45
-     */
46
-    protected $_credit_card_types    = null;
47
-
48
-    protected $_currencies_supported = array(
49
-        'USD',
50
-        'GBP',
51
-        'CAD',
52
-        'AUD',
53
-        'BRL',
54
-        'CHF',
55
-        'CZK',
56
-        'DKK',
57
-        'EUR',
58
-        'HKD',
59
-        'HUF',
60
-        'ILS',
61
-        'JPY',
62
-        'MXN',
63
-        'MYR',
64
-        'NOK',
65
-        'NZD',
66
-        'PHP',
67
-        'PLN',
68
-        'SEK',
69
-        'SGD',
70
-        'THB',
71
-        'TRY',
72
-        'TWD',
73
-        'RUB',
74
-    );
75
-
76
-
77
-
78
-    /**
79
-     * @param EEI_Payment $payment
80
-     * @param array       $billing_info     {
81
-     * @type              $credit_card      string
82
-     * @type              $credit_card_type string
83
-     * @type              $exp_month        string always 2 characters
84
-     * @type              $exp_year         string always 4 characters
85
-     * @type              $cvv              string
86
-     *                                      } @see parent::do_direct_payment for more info
87
-     * @return \EE_Payment|\EEI_Payment
88
-     */
89
-    public function do_direct_payment($payment, $billing_info = null)
90
-    {
91
-        $transaction = $payment->transaction();
92
-        if (! $transaction instanceof EEI_Transaction) {
93
-            throw new EE_Error(esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso'));
94
-        }
95
-        $primary_registrant = $transaction->primary_registration();
96
-        if (! $primary_registrant instanceof EEI_Registration) {
97
-            throw new EE_Error(esc_html__('No primary registration on transaction while paying with PayPal Pro.',
98
-                'event_espresso'));
99
-        }
100
-        $attendee = $primary_registrant->attendee();
101
-        if (! $attendee instanceof EEI_Attendee) {
102
-            throw new EE_Error(esc_html__('No attendee on primary registration while paying with PayPal Pro.',
103
-                'event_espresso'));
104
-        }
105
-        $order_description = $this->_format_order_description($payment);
106
-        //charge for the full amount. Show itemized list
107
-        if ($this->_can_easily_itemize_transaction_for($payment)) {
108
-            $item_num = 1;
109
-            $total_line_item = $transaction->total_line_item();
110
-            $order_items = array();
111
-            foreach ($total_line_item->get_items() as $line_item) {
112
-                //ignore line items with a quantity of 0
113
-                if ($line_item->quantity() == 0) {
114
-                    continue;
115
-                }
116
-                $item = array(
117
-                    // Item Name.  127 char max.
118
-                    'l_name'                 => substr(
119
-                        $this->_format_line_item_name($line_item, $payment),
120
-                        0,
121
-                        127
122
-                    ),
123
-                    // Item description.  127 char max.
124
-                    'l_desc'                 => substr(
125
-                        $this->_format_line_item_desc($line_item, $payment),
126
-                        0,
127
-                        127
128
-                    ),
129
-                    // Cost of individual item.
130
-                    'l_amt'                  => $line_item->unit_price(),
131
-                    // Item Number.  127 char max.
132
-                    'l_number'               => $item_num++,
133
-                    // Item quantity.  Must be any positive integer.
134
-                    'l_qty'                  => $line_item->quantity(),
135
-                    // Item's sales tax amount.
136
-                    'l_taxamt'               => '',
137
-                    // eBay auction number of item.
138
-                    'l_ebayitemnumber'       => '',
139
-                    // eBay transaction ID of purchased item.
140
-                    'l_ebayitemauctiontxnid' => '',
141
-                    // eBay order ID for the item.
142
-                    'l_ebayitemorderid'      => '',
143
-                );
144
-                // add to array of all items
145
-                array_push($order_items, $item);
146
-            }
147
-            $item_amount = $total_line_item->get_items_total();
148
-            $tax_amount = $total_line_item->get_total_tax();
149
-        } else {
150
-            $order_items = array();
151
-            $item_amount = $payment->amount();
152
-            $tax_amount = 0;
153
-            array_push($order_items, array(
154
-                // Item Name.  127 char max.
155
-                'l_name'   => substr(
156
-                    $this->_format_partial_payment_line_item_name($payment),
157
-                    0,
158
-                    127
159
-                ),
160
-                // Item description.  127 char max.
161
-                'l_desc'   => substr(
162
-                    $this->_format_partial_payment_line_item_desc($payment),
163
-                    0,
164
-                    127
165
-                ),
166
-                // Cost of individual item.
167
-                'l_amt'    => $payment->amount(),
168
-                // Item Number.  127 char max.
169
-                'l_number' => 1,
170
-                // Item quantity.  Must be any positive integer.
171
-                'l_qty'    => 1,
172
-            ));
173
-        }
174
-        // Populate data arrays with order data.
175
-        $DPFields = array(
176
-            // How you want to obtain payment ?
177
-            // Authorization indidicates the payment is a basic auth subject to settlement with Auth & Capture.
178
-            // Sale indicates that this is a final sale for which you are requesting payment.  Default is Sale.
179
-            'paymentaction'    => 'Sale',
180
-            // Required.  IP address of the payer's browser.
181
-            'ipaddress'        => $_SERVER['REMOTE_ADDR'],
182
-            // Flag to determine whether you want the results returned by FMF.  1 or 0.  Default is 0.
183
-            'returnfmfdetails' => '1',
184
-        );
185
-        $CCDetails = array(
186
-            // Required. Type of credit card.  Visa, MasterCard, Discover, Amex, Maestro, Solo.
187
-            // If Maestro or Solo, the currency code must be GBP.  In addition, either start date or issue number must be specified.
188
-            'creditcardtype' => $billing_info['credit_card_type'],
189
-            // Required.  Credit card number.  No spaces or punctuation.
190
-            'acct'           => $billing_info['credit_card'],
191
-            // Required.  Credit card expiration date.  Format is MMYYYY
192
-            'expdate'        => $billing_info['exp_month'] . $billing_info['exp_year'],
193
-            // Requirements determined by your PayPal account settings.  Security digits for credit card.
194
-            'cvv2'           => $billing_info['cvv'],
195
-        );
196
-        $PayerInfo = array(
197
-            // Email address of payer.
198
-            'email'       => $billing_info['email'],
199
-            // Unique PayPal customer ID for payer.
200
-            'payerid'     => '',
201
-            // Status of payer.  Values are verified or unverified
202
-            'payerstatus' => '',
203
-            // Payer's business name.
204
-            'business'    => '',
205
-        );
206
-        $PayerName = array(
207
-            // Payer's salutation.  20 char max.
208
-            'salutation' => '',
209
-            // Payer's first name.  25 char max.
210
-            'firstname'  => substr($billing_info['first_name'], 0, 25),
211
-            // Payer's middle name.  25 char max.
212
-            'middlename' => '',
213
-            // Payer's last name.  25 char max.
214
-            'lastname'   => substr($billing_info['last_name'], 0, 25),
215
-            // Payer's suffix.  12 char max.
216
-            'suffix'     => '',
217
-        );
218
-        $BillingAddress = array(
219
-            // Required.  First street address.
220
-            'street'      => $billing_info['address'],
221
-            // Second street address.
222
-            'street2'     => $billing_info['address2'],
223
-            // Required.  Name of City.
224
-            'city'        => $billing_info['city'],
225
-            // Required. Name of State or Province.
226
-            'state'       => substr($billing_info['state'], 0, 40),
227
-            // Required.  Country code.
228
-            'countrycode' => $billing_info['country'],
229
-            // Required.  Postal code of payer.
230
-            'zip'         => $billing_info['zip'],
231
-        );
232
-        //check if the registration info contains the needed fields for paypal pro (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/)
233
-        if ($attendee->address() && $attendee->city() && $attendee->country_ID()) {
234
-            $use_registration_address_info = true;
235
-        } else {
236
-            $use_registration_address_info = false;
237
-        }
238
-        //so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. If not, use the billing info again
239
-        $ShippingAddress = array(
240
-            'shiptoname'     => substr($use_registration_address_info ? $attendee->full_name() : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32),
241
-            'shiptostreet'   => substr($use_registration_address_info ? $attendee->address() : $billing_info['address'], 0, 100),
242
-            'shiptostreet2'  => substr($use_registration_address_info ? $attendee->address2() : $billing_info['address2'], 0, 100),
243
-            'shiptocity'     => substr($use_registration_address_info ? $attendee->city() : $billing_info['city'], 0, 40),
244
-            'state'          => substr($use_registration_address_info ? $attendee->state_name() : $billing_info['state'], 0, 40),
245
-            'shiptocountry'  => $use_registration_address_info ? $attendee->country_ID() : $billing_info['country'],
246
-            'shiptozip'      => substr($use_registration_address_info ? $attendee->zip() : $billing_info['zip'], 0, 20),
247
-            'shiptophonenum' => substr($use_registration_address_info ? $attendee->phone() : $billing_info['phone'], 0, 20),
248
-        );
249
-        $PaymentDetails = array(
250
-            // Required.  Total amount of order, including shipping, handling, and tax.
251
-            'amt'          => $this->format_currency($payment->amount()),
252
-            // Required.  Three-letter currency code.  Default is USD.
253
-            'currencycode' => $payment->currency_code(),
254
-            // Required if you include itemized cart details. (L_AMTn, etc.)  Subtotal of items not including S&H, or tax.
255
-            'itemamt'      => $this->format_currency($item_amount),//
256
-            // Total shipping costs for the order.  If you specify shippingamt, you must also specify itemamt.
257
-            'shippingamt'  => '',
258
-            // Total handling costs for the order.  If you specify handlingamt, you must also specify itemamt.
259
-            'handlingamt'  => '',
260
-            // Required if you specify itemized cart tax details. Sum of tax for all items on the order.  Total sales tax.
261
-            'taxamt'       => $this->format_currency($tax_amount),
262
-            // Description of the order the customer is purchasing.  127 char max.
263
-            'desc'         => $order_description,
264
-            // Free-form field for your own use.  256 char max.
265
-            'custom'       => $primary_registrant ? $primary_registrant->ID() : '',
266
-            // Your own invoice or tracking number
267
-            'invnum'       => wp_generate_password(12, false),//$transaction->ID(),
268
-            // URL for receiving Instant Payment Notifications.  This overrides what your profile is set to use.
269
-            'notifyurl'    => '',
270
-            'buttonsource' => 'EventEspresso_SP',//EE will blow up if you change this
271
-        );
272
-        // Wrap all data arrays into a single, "master" array which will be passed into the class function.
273
-        $PayPalRequestData = array(
274
-            'DPFields'        => $DPFields,
275
-            'CCDetails'       => $CCDetails,
276
-            'PayerInfo'       => $PayerInfo,
277
-            'PayerName'       => $PayerName,
278
-            'BillingAddress'  => $BillingAddress,
279
-            'ShippingAddress' => $ShippingAddress,
280
-            'PaymentDetails'  => $PaymentDetails,
281
-            'OrderItems'      => $order_items,
282
-        );
283
-        $this->_log_clean_request($PayPalRequestData, $payment);
284
-        try {
285
-            $PayPalResult = $this->prep_and_curl_request($PayPalRequestData);
286
-            //remove PCI-sensitive data so it doesn't get stored
287
-            $PayPalResult = $this->_log_clean_response($PayPalResult, $payment);
288
-            $message = isset($PayPalResult['L_LONGMESSAGE0']) ? $PayPalResult['L_LONGMESSAGE0'] : $PayPalResult['ACK'];
289
-            if (empty($PayPalResult['RAWRESPONSE'])) {
290
-                $payment->set_status($this->_pay_model->failed_status());
291
-                $payment->set_gateway_response(__('No response received from Paypal Pro', 'event_espresso'));
292
-                $payment->set_details($PayPalResult);
293
-            } else {
294
-                if ($this->_APICallSuccessful($PayPalResult)) {
295
-                    $payment->set_status($this->_pay_model->approved_status());
296
-                } else {
297
-                    $payment->set_status($this->_pay_model->declined_status());
298
-                }
299
-                //make sure we interpret the AMT as a float, not an international string (where periods are thousand separators)
300
-                $payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0);
301
-                $payment->set_gateway_response($message);
302
-                $payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) ? $PayPalResult['TRANSACTIONID'] : null);
303
-                $primary_registration_code = $primary_registrant instanceof EE_Registration ? $primary_registrant->reg_code() : '';
304
-                $payment->set_extra_accntng($primary_registration_code);
305
-                $payment->set_details($PayPalResult);
306
-            }
307
-        } catch (Exception $e) {
308
-            $payment->set_status($this->_pay_model->failed_status());
309
-            $payment->set_gateway_response($e->getMessage());
310
-        }
311
-        //$payment->set_status( $this->_pay_model->declined_status() );
312
-        //$payment->set_gateway_response( '' );
313
-        return $payment;
314
-    }
315
-
316
-
317
-
318
-    /**
319
-     * CLeans out sensitive CC data and then logs it, and returns the cleaned request
320
-     *
321
-     * @param array       $request
322
-     * @param EEI_Payment $payment
323
-     * @return array
324
-     */
325
-    private function _log_clean_request($request, $payment)
326
-    {
327
-        $cleaned_request_data = $request;
328
-        unset($cleaned_request_data['CCDetails']['acct']);
329
-        unset($cleaned_request_data['CCDetails']['cvv2']);
330
-        unset($cleaned_request_data['CCDetails']['expdate']);
331
-        $this->log(array('Paypal Request' => $cleaned_request_data), $payment);
332
-    }
333
-
334
-
335
-
336
-    /**
337
-     * Cleans the response, logs it, and returns it
338
-     *
339
-     * @param array       $response
340
-     * @param EEI_Payment $payment
341
-     * @return array cleaned
342
-     */
343
-    private function _log_clean_response($response, $payment)
344
-    {
345
-        unset($response['REQUESTDATA']['CREDITCARDTYPE']);
346
-        unset($response['REQUESTDATA']['ACCT']);
347
-        unset($response['REQUESTDATA']['EXPDATE']);
348
-        unset($response['REQUESTDATA']['CVV2']);
349
-        unset($response['RAWREQUEST']);
350
-        $this->log(array('Paypal Response' => $response), $payment);
351
-        return $response;
352
-    }
353
-
354
-
355
-
356
-    /**
357
-     * @param $DataArray
358
-     * @return array
359
-     */
360
-    private function prep_and_curl_request($DataArray)
361
-    {
362
-        // Create empty holders for each portion of the NVP string
363
-        $DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP';
364
-        $CCDetailsNVP = '';
365
-        $PayerInfoNVP = '';
366
-        $PayerNameNVP = '';
367
-        $BillingAddressNVP = '';
368
-        $ShippingAddressNVP = '';
369
-        $PaymentDetailsNVP = '';
370
-        $OrderItemsNVP = '';
371
-        $Secure3DNVP = '';
372
-        // DP Fields
373
-        $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array();
374
-        foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) {
375
-            $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal);
376
-        }
377
-        // CC Details Fields
378
-        $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array();
379
-        foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) {
380
-            $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal);
381
-        }
382
-        // PayerInfo Type Fields
383
-        $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array();
384
-        foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) {
385
-            $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal);
386
-        }
387
-        // Payer Name Fields
388
-        $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array();
389
-        foreach ($PayerName as $PayerNameVar => $PayerNameVal) {
390
-            $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal);
391
-        }
392
-        // Address Fields (Billing)
393
-        $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array();
394
-        foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) {
395
-            $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal);
396
-        }
397
-        // Payment Details Type Fields
398
-        $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array();
399
-        foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) {
400
-            $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal);
401
-        }
402
-        // Payment Details Item Type Fields
403
-        $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array();
404
-        $n = 0;
405
-        foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) {
406
-            $CurrentItem = $OrderItems[$OrderItemsVar];
407
-            foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) {
408
-                $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal);
409
-            }
410
-            $n++;
411
-        }
412
-        // Ship To Address Fields
413
-        $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array();
414
-        foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) {
415
-            $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal);
416
-        }
417
-        // 3D Secure Fields
418
-        $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array();
419
-        foreach ($Secure3D as $Secure3DVar => $Secure3DVal) {
420
-            $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal);
421
-        }
422
-        // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string
423
-        $NVPRequest = 'USER='
424
-                      . $this->_username
425
-                      . '&PWD='
426
-                      . $this->_password
427
-                      . '&VERSION=64.0'
428
-                      . '&SIGNATURE='
429
-                      . $this->_signature
430
-                      . $DPFieldsNVP
431
-                      . $CCDetailsNVP
432
-                      . $PayerInfoNVP
433
-                      . $PayerNameNVP
434
-                      . $BillingAddressNVP
435
-                      . $PaymentDetailsNVP
436
-                      . $OrderItemsNVP
437
-                      . $ShippingAddressNVP
438
-                      . $Secure3DNVP;
439
-        $NVPResponse = $this->_CURLRequest($NVPRequest);
440
-        $NVPRequestArray = $this->_NVPToArray($NVPRequest);
441
-        $NVPResponseArray = $this->_NVPToArray($NVPResponse);
442
-        $Errors = $this->_GetErrors($NVPResponseArray);
443
-        $NVPResponseArray['ERRORS'] = $Errors;
444
-        $NVPResponseArray['REQUESTDATA'] = $NVPRequestArray;
445
-        $NVPResponseArray['RAWREQUEST'] = $NVPRequest;
446
-        $NVPResponseArray['RAWRESPONSE'] = $NVPResponse;
447
-        return $NVPResponseArray;
448
-    }
449
-
450
-
451
-
452
-    /**
453
-     * @param $Request
454
-     * @return mixed
455
-     */
456
-    private function _CURLRequest($Request)
457
-    {
458
-        $EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp';
459
-        $curl = curl_init();
460
-        curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true));
461
-        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
462
-        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
463
-        curl_setopt($curl, CURLOPT_URL, $EndPointURL);
464
-        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
465
-        curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);
466
-        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
467
-        //execute the curl POST
468
-        $Response = curl_exec($curl);
469
-        curl_close($curl);
470
-        return $Response;
471
-    }
472
-
473
-
474
-
475
-    /**
476
-     * @param $NVPString
477
-     * @return array
478
-     */
479
-    private function _NVPToArray($NVPString)
480
-    {
481
-        // prepare responses into array
482
-        $proArray = array();
483
-        while (strlen($NVPString)) {
484
-            // name
485
-            $keypos = strpos($NVPString, '=');
486
-            $keyval = substr($NVPString, 0, $keypos);
487
-            // value
488
-            $valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString);
489
-            $valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1);
490
-            // decoding the respose
491
-            $proArray[$keyval] = urldecode($valval);
492
-            $NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString));
493
-        }
494
-        return $proArray;
495
-    }
496
-
497
-
498
-
499
-    /**
500
-     * @param array $PayPalResult
501
-     * @return bool
502
-     */
503
-    private function _APICallSuccessful($PayPalResult)
504
-    {
505
-        $approved = false;
506
-        // check main response message from PayPal
507
-        if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) {
508
-            $ack = strtoupper($PayPalResult['ACK']);
509
-            $approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false;
510
-        }
511
-        return $approved;
512
-    }
513
-
514
-
515
-
516
-    /**
517
-     * @param $DataArray
518
-     * @return array
519
-     */
520
-    private function _GetErrors($DataArray)
521
-    {
522
-        $Errors = array();
523
-        $n = 0;
524
-        while (isset($DataArray['L_ERRORCODE' . $n . ''])) {
525
-            $LErrorCode = isset($DataArray['L_ERRORCODE' . $n . '']) ? $DataArray['L_ERRORCODE' . $n . ''] : '';
526
-            $LShortMessage = isset($DataArray['L_SHORTMESSAGE' . $n . '']) ? $DataArray['L_SHORTMESSAGE' . $n . ''] : '';
527
-            $LLongMessage = isset($DataArray['L_LONGMESSAGE' . $n . '']) ? $DataArray['L_LONGMESSAGE' . $n . ''] : '';
528
-            $LSeverityCode = isset($DataArray['L_SEVERITYCODE' . $n . '']) ? $DataArray['L_SEVERITYCODE' . $n . ''] : '';
529
-            $CurrentItem = array(
530
-                'L_ERRORCODE'    => $LErrorCode,
531
-                'L_SHORTMESSAGE' => $LShortMessage,
532
-                'L_LONGMESSAGE'  => $LLongMessage,
533
-                'L_SEVERITYCODE' => $LSeverityCode,
534
-            );
535
-            array_push($Errors, $CurrentItem);
536
-            $n++;
537
-        }
538
-        return $Errors;
539
-    }
540
-
541
-
542
-
543
-    /**
544
-     *        nothing to see here...  move along....
545
-     *
546
-     * @access protected
547
-     * @param $Errors
548
-     * @return string
549
-     */
550
-    private function _DisplayErrors($Errors)
551
-    {
552
-        $error = '';
553
-        foreach ($Errors as $ErrorVar => $ErrorVal) {
554
-            $CurrentError = $Errors[$ErrorVar];
555
-            foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) {
556
-                $CurrentVarName = '';
557
-                if ($CurrentErrorVar == 'L_ERRORCODE') {
558
-                    $CurrentVarName = 'Error Code';
559
-                } elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') {
560
-                    $CurrentVarName = 'Short Message';
561
-                } elseif ($CurrentErrorVar == 'L_LONGMESSAGE') {
562
-                    $CurrentVarName = 'Long Message';
563
-                } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') {
564
-                    $CurrentVarName = 'Severity Code';
565
-                }
566
-                $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal;
567
-            }
568
-        }
569
-        return $error;
570
-    }
28
+	/**
29
+	 * @var $_paypal_api_username string
30
+	 */
31
+	protected $_username = null;
32
+
33
+	/**
34
+	 * @var $_password string
35
+	 */
36
+	protected $_password = null;
37
+
38
+	/**
39
+	 * @var $_signature string
40
+	 */
41
+	protected $_signature = null;
42
+
43
+	/**
44
+	 * @var $_credit_card_types array with the keys for credit card types accepted on this account
45
+	 */
46
+	protected $_credit_card_types    = null;
47
+
48
+	protected $_currencies_supported = array(
49
+		'USD',
50
+		'GBP',
51
+		'CAD',
52
+		'AUD',
53
+		'BRL',
54
+		'CHF',
55
+		'CZK',
56
+		'DKK',
57
+		'EUR',
58
+		'HKD',
59
+		'HUF',
60
+		'ILS',
61
+		'JPY',
62
+		'MXN',
63
+		'MYR',
64
+		'NOK',
65
+		'NZD',
66
+		'PHP',
67
+		'PLN',
68
+		'SEK',
69
+		'SGD',
70
+		'THB',
71
+		'TRY',
72
+		'TWD',
73
+		'RUB',
74
+	);
75
+
76
+
77
+
78
+	/**
79
+	 * @param EEI_Payment $payment
80
+	 * @param array       $billing_info     {
81
+	 * @type              $credit_card      string
82
+	 * @type              $credit_card_type string
83
+	 * @type              $exp_month        string always 2 characters
84
+	 * @type              $exp_year         string always 4 characters
85
+	 * @type              $cvv              string
86
+	 *                                      } @see parent::do_direct_payment for more info
87
+	 * @return \EE_Payment|\EEI_Payment
88
+	 */
89
+	public function do_direct_payment($payment, $billing_info = null)
90
+	{
91
+		$transaction = $payment->transaction();
92
+		if (! $transaction instanceof EEI_Transaction) {
93
+			throw new EE_Error(esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso'));
94
+		}
95
+		$primary_registrant = $transaction->primary_registration();
96
+		if (! $primary_registrant instanceof EEI_Registration) {
97
+			throw new EE_Error(esc_html__('No primary registration on transaction while paying with PayPal Pro.',
98
+				'event_espresso'));
99
+		}
100
+		$attendee = $primary_registrant->attendee();
101
+		if (! $attendee instanceof EEI_Attendee) {
102
+			throw new EE_Error(esc_html__('No attendee on primary registration while paying with PayPal Pro.',
103
+				'event_espresso'));
104
+		}
105
+		$order_description = $this->_format_order_description($payment);
106
+		//charge for the full amount. Show itemized list
107
+		if ($this->_can_easily_itemize_transaction_for($payment)) {
108
+			$item_num = 1;
109
+			$total_line_item = $transaction->total_line_item();
110
+			$order_items = array();
111
+			foreach ($total_line_item->get_items() as $line_item) {
112
+				//ignore line items with a quantity of 0
113
+				if ($line_item->quantity() == 0) {
114
+					continue;
115
+				}
116
+				$item = array(
117
+					// Item Name.  127 char max.
118
+					'l_name'                 => substr(
119
+						$this->_format_line_item_name($line_item, $payment),
120
+						0,
121
+						127
122
+					),
123
+					// Item description.  127 char max.
124
+					'l_desc'                 => substr(
125
+						$this->_format_line_item_desc($line_item, $payment),
126
+						0,
127
+						127
128
+					),
129
+					// Cost of individual item.
130
+					'l_amt'                  => $line_item->unit_price(),
131
+					// Item Number.  127 char max.
132
+					'l_number'               => $item_num++,
133
+					// Item quantity.  Must be any positive integer.
134
+					'l_qty'                  => $line_item->quantity(),
135
+					// Item's sales tax amount.
136
+					'l_taxamt'               => '',
137
+					// eBay auction number of item.
138
+					'l_ebayitemnumber'       => '',
139
+					// eBay transaction ID of purchased item.
140
+					'l_ebayitemauctiontxnid' => '',
141
+					// eBay order ID for the item.
142
+					'l_ebayitemorderid'      => '',
143
+				);
144
+				// add to array of all items
145
+				array_push($order_items, $item);
146
+			}
147
+			$item_amount = $total_line_item->get_items_total();
148
+			$tax_amount = $total_line_item->get_total_tax();
149
+		} else {
150
+			$order_items = array();
151
+			$item_amount = $payment->amount();
152
+			$tax_amount = 0;
153
+			array_push($order_items, array(
154
+				// Item Name.  127 char max.
155
+				'l_name'   => substr(
156
+					$this->_format_partial_payment_line_item_name($payment),
157
+					0,
158
+					127
159
+				),
160
+				// Item description.  127 char max.
161
+				'l_desc'   => substr(
162
+					$this->_format_partial_payment_line_item_desc($payment),
163
+					0,
164
+					127
165
+				),
166
+				// Cost of individual item.
167
+				'l_amt'    => $payment->amount(),
168
+				// Item Number.  127 char max.
169
+				'l_number' => 1,
170
+				// Item quantity.  Must be any positive integer.
171
+				'l_qty'    => 1,
172
+			));
173
+		}
174
+		// Populate data arrays with order data.
175
+		$DPFields = array(
176
+			// How you want to obtain payment ?
177
+			// Authorization indidicates the payment is a basic auth subject to settlement with Auth & Capture.
178
+			// Sale indicates that this is a final sale for which you are requesting payment.  Default is Sale.
179
+			'paymentaction'    => 'Sale',
180
+			// Required.  IP address of the payer's browser.
181
+			'ipaddress'        => $_SERVER['REMOTE_ADDR'],
182
+			// Flag to determine whether you want the results returned by FMF.  1 or 0.  Default is 0.
183
+			'returnfmfdetails' => '1',
184
+		);
185
+		$CCDetails = array(
186
+			// Required. Type of credit card.  Visa, MasterCard, Discover, Amex, Maestro, Solo.
187
+			// If Maestro or Solo, the currency code must be GBP.  In addition, either start date or issue number must be specified.
188
+			'creditcardtype' => $billing_info['credit_card_type'],
189
+			// Required.  Credit card number.  No spaces or punctuation.
190
+			'acct'           => $billing_info['credit_card'],
191
+			// Required.  Credit card expiration date.  Format is MMYYYY
192
+			'expdate'        => $billing_info['exp_month'] . $billing_info['exp_year'],
193
+			// Requirements determined by your PayPal account settings.  Security digits for credit card.
194
+			'cvv2'           => $billing_info['cvv'],
195
+		);
196
+		$PayerInfo = array(
197
+			// Email address of payer.
198
+			'email'       => $billing_info['email'],
199
+			// Unique PayPal customer ID for payer.
200
+			'payerid'     => '',
201
+			// Status of payer.  Values are verified or unverified
202
+			'payerstatus' => '',
203
+			// Payer's business name.
204
+			'business'    => '',
205
+		);
206
+		$PayerName = array(
207
+			// Payer's salutation.  20 char max.
208
+			'salutation' => '',
209
+			// Payer's first name.  25 char max.
210
+			'firstname'  => substr($billing_info['first_name'], 0, 25),
211
+			// Payer's middle name.  25 char max.
212
+			'middlename' => '',
213
+			// Payer's last name.  25 char max.
214
+			'lastname'   => substr($billing_info['last_name'], 0, 25),
215
+			// Payer's suffix.  12 char max.
216
+			'suffix'     => '',
217
+		);
218
+		$BillingAddress = array(
219
+			// Required.  First street address.
220
+			'street'      => $billing_info['address'],
221
+			// Second street address.
222
+			'street2'     => $billing_info['address2'],
223
+			// Required.  Name of City.
224
+			'city'        => $billing_info['city'],
225
+			// Required. Name of State or Province.
226
+			'state'       => substr($billing_info['state'], 0, 40),
227
+			// Required.  Country code.
228
+			'countrycode' => $billing_info['country'],
229
+			// Required.  Postal code of payer.
230
+			'zip'         => $billing_info['zip'],
231
+		);
232
+		//check if the registration info contains the needed fields for paypal pro (see https://developer.paypal.com/docs/classic/api/merchant/DoDirectPayment_API_Operation_NVP/)
233
+		if ($attendee->address() && $attendee->city() && $attendee->country_ID()) {
234
+			$use_registration_address_info = true;
235
+		} else {
236
+			$use_registration_address_info = false;
237
+		}
238
+		//so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. If not, use the billing info again
239
+		$ShippingAddress = array(
240
+			'shiptoname'     => substr($use_registration_address_info ? $attendee->full_name() : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32),
241
+			'shiptostreet'   => substr($use_registration_address_info ? $attendee->address() : $billing_info['address'], 0, 100),
242
+			'shiptostreet2'  => substr($use_registration_address_info ? $attendee->address2() : $billing_info['address2'], 0, 100),
243
+			'shiptocity'     => substr($use_registration_address_info ? $attendee->city() : $billing_info['city'], 0, 40),
244
+			'state'          => substr($use_registration_address_info ? $attendee->state_name() : $billing_info['state'], 0, 40),
245
+			'shiptocountry'  => $use_registration_address_info ? $attendee->country_ID() : $billing_info['country'],
246
+			'shiptozip'      => substr($use_registration_address_info ? $attendee->zip() : $billing_info['zip'], 0, 20),
247
+			'shiptophonenum' => substr($use_registration_address_info ? $attendee->phone() : $billing_info['phone'], 0, 20),
248
+		);
249
+		$PaymentDetails = array(
250
+			// Required.  Total amount of order, including shipping, handling, and tax.
251
+			'amt'          => $this->format_currency($payment->amount()),
252
+			// Required.  Three-letter currency code.  Default is USD.
253
+			'currencycode' => $payment->currency_code(),
254
+			// Required if you include itemized cart details. (L_AMTn, etc.)  Subtotal of items not including S&H, or tax.
255
+			'itemamt'      => $this->format_currency($item_amount),//
256
+			// Total shipping costs for the order.  If you specify shippingamt, you must also specify itemamt.
257
+			'shippingamt'  => '',
258
+			// Total handling costs for the order.  If you specify handlingamt, you must also specify itemamt.
259
+			'handlingamt'  => '',
260
+			// Required if you specify itemized cart tax details. Sum of tax for all items on the order.  Total sales tax.
261
+			'taxamt'       => $this->format_currency($tax_amount),
262
+			// Description of the order the customer is purchasing.  127 char max.
263
+			'desc'         => $order_description,
264
+			// Free-form field for your own use.  256 char max.
265
+			'custom'       => $primary_registrant ? $primary_registrant->ID() : '',
266
+			// Your own invoice or tracking number
267
+			'invnum'       => wp_generate_password(12, false),//$transaction->ID(),
268
+			// URL for receiving Instant Payment Notifications.  This overrides what your profile is set to use.
269
+			'notifyurl'    => '',
270
+			'buttonsource' => 'EventEspresso_SP',//EE will blow up if you change this
271
+		);
272
+		// Wrap all data arrays into a single, "master" array which will be passed into the class function.
273
+		$PayPalRequestData = array(
274
+			'DPFields'        => $DPFields,
275
+			'CCDetails'       => $CCDetails,
276
+			'PayerInfo'       => $PayerInfo,
277
+			'PayerName'       => $PayerName,
278
+			'BillingAddress'  => $BillingAddress,
279
+			'ShippingAddress' => $ShippingAddress,
280
+			'PaymentDetails'  => $PaymentDetails,
281
+			'OrderItems'      => $order_items,
282
+		);
283
+		$this->_log_clean_request($PayPalRequestData, $payment);
284
+		try {
285
+			$PayPalResult = $this->prep_and_curl_request($PayPalRequestData);
286
+			//remove PCI-sensitive data so it doesn't get stored
287
+			$PayPalResult = $this->_log_clean_response($PayPalResult, $payment);
288
+			$message = isset($PayPalResult['L_LONGMESSAGE0']) ? $PayPalResult['L_LONGMESSAGE0'] : $PayPalResult['ACK'];
289
+			if (empty($PayPalResult['RAWRESPONSE'])) {
290
+				$payment->set_status($this->_pay_model->failed_status());
291
+				$payment->set_gateway_response(__('No response received from Paypal Pro', 'event_espresso'));
292
+				$payment->set_details($PayPalResult);
293
+			} else {
294
+				if ($this->_APICallSuccessful($PayPalResult)) {
295
+					$payment->set_status($this->_pay_model->approved_status());
296
+				} else {
297
+					$payment->set_status($this->_pay_model->declined_status());
298
+				}
299
+				//make sure we interpret the AMT as a float, not an international string (where periods are thousand separators)
300
+				$payment->set_amount(isset($PayPalResult['AMT']) ? floatval($PayPalResult['AMT']) : 0);
301
+				$payment->set_gateway_response($message);
302
+				$payment->set_txn_id_chq_nmbr(isset($PayPalResult['TRANSACTIONID']) ? $PayPalResult['TRANSACTIONID'] : null);
303
+				$primary_registration_code = $primary_registrant instanceof EE_Registration ? $primary_registrant->reg_code() : '';
304
+				$payment->set_extra_accntng($primary_registration_code);
305
+				$payment->set_details($PayPalResult);
306
+			}
307
+		} catch (Exception $e) {
308
+			$payment->set_status($this->_pay_model->failed_status());
309
+			$payment->set_gateway_response($e->getMessage());
310
+		}
311
+		//$payment->set_status( $this->_pay_model->declined_status() );
312
+		//$payment->set_gateway_response( '' );
313
+		return $payment;
314
+	}
315
+
316
+
317
+
318
+	/**
319
+	 * CLeans out sensitive CC data and then logs it, and returns the cleaned request
320
+	 *
321
+	 * @param array       $request
322
+	 * @param EEI_Payment $payment
323
+	 * @return array
324
+	 */
325
+	private function _log_clean_request($request, $payment)
326
+	{
327
+		$cleaned_request_data = $request;
328
+		unset($cleaned_request_data['CCDetails']['acct']);
329
+		unset($cleaned_request_data['CCDetails']['cvv2']);
330
+		unset($cleaned_request_data['CCDetails']['expdate']);
331
+		$this->log(array('Paypal Request' => $cleaned_request_data), $payment);
332
+	}
333
+
334
+
335
+
336
+	/**
337
+	 * Cleans the response, logs it, and returns it
338
+	 *
339
+	 * @param array       $response
340
+	 * @param EEI_Payment $payment
341
+	 * @return array cleaned
342
+	 */
343
+	private function _log_clean_response($response, $payment)
344
+	{
345
+		unset($response['REQUESTDATA']['CREDITCARDTYPE']);
346
+		unset($response['REQUESTDATA']['ACCT']);
347
+		unset($response['REQUESTDATA']['EXPDATE']);
348
+		unset($response['REQUESTDATA']['CVV2']);
349
+		unset($response['RAWREQUEST']);
350
+		$this->log(array('Paypal Response' => $response), $payment);
351
+		return $response;
352
+	}
353
+
354
+
355
+
356
+	/**
357
+	 * @param $DataArray
358
+	 * @return array
359
+	 */
360
+	private function prep_and_curl_request($DataArray)
361
+	{
362
+		// Create empty holders for each portion of the NVP string
363
+		$DPFieldsNVP = '&METHOD=DoDirectPayment&BUTTONSOURCE=AngellEYE_PHP_Class_DDP';
364
+		$CCDetailsNVP = '';
365
+		$PayerInfoNVP = '';
366
+		$PayerNameNVP = '';
367
+		$BillingAddressNVP = '';
368
+		$ShippingAddressNVP = '';
369
+		$PaymentDetailsNVP = '';
370
+		$OrderItemsNVP = '';
371
+		$Secure3DNVP = '';
372
+		// DP Fields
373
+		$DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array();
374
+		foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) {
375
+			$DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal);
376
+		}
377
+		// CC Details Fields
378
+		$CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array();
379
+		foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) {
380
+			$CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal);
381
+		}
382
+		// PayerInfo Type Fields
383
+		$PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array();
384
+		foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) {
385
+			$PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal);
386
+		}
387
+		// Payer Name Fields
388
+		$PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array();
389
+		foreach ($PayerName as $PayerNameVar => $PayerNameVal) {
390
+			$PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal);
391
+		}
392
+		// Address Fields (Billing)
393
+		$BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array();
394
+		foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) {
395
+			$BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal);
396
+		}
397
+		// Payment Details Type Fields
398
+		$PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array();
399
+		foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) {
400
+			$PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal);
401
+		}
402
+		// Payment Details Item Type Fields
403
+		$OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array();
404
+		$n = 0;
405
+		foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) {
406
+			$CurrentItem = $OrderItems[$OrderItemsVar];
407
+			foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) {
408
+				$OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal);
409
+			}
410
+			$n++;
411
+		}
412
+		// Ship To Address Fields
413
+		$ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array();
414
+		foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) {
415
+			$ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal);
416
+		}
417
+		// 3D Secure Fields
418
+		$Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array();
419
+		foreach ($Secure3D as $Secure3DVar => $Secure3DVal) {
420
+			$Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal);
421
+		}
422
+		// Now that we have each chunk we need to go ahead and append them all together for our entire NVP string
423
+		$NVPRequest = 'USER='
424
+					  . $this->_username
425
+					  . '&PWD='
426
+					  . $this->_password
427
+					  . '&VERSION=64.0'
428
+					  . '&SIGNATURE='
429
+					  . $this->_signature
430
+					  . $DPFieldsNVP
431
+					  . $CCDetailsNVP
432
+					  . $PayerInfoNVP
433
+					  . $PayerNameNVP
434
+					  . $BillingAddressNVP
435
+					  . $PaymentDetailsNVP
436
+					  . $OrderItemsNVP
437
+					  . $ShippingAddressNVP
438
+					  . $Secure3DNVP;
439
+		$NVPResponse = $this->_CURLRequest($NVPRequest);
440
+		$NVPRequestArray = $this->_NVPToArray($NVPRequest);
441
+		$NVPResponseArray = $this->_NVPToArray($NVPResponse);
442
+		$Errors = $this->_GetErrors($NVPResponseArray);
443
+		$NVPResponseArray['ERRORS'] = $Errors;
444
+		$NVPResponseArray['REQUESTDATA'] = $NVPRequestArray;
445
+		$NVPResponseArray['RAWREQUEST'] = $NVPRequest;
446
+		$NVPResponseArray['RAWRESPONSE'] = $NVPResponse;
447
+		return $NVPResponseArray;
448
+	}
449
+
450
+
451
+
452
+	/**
453
+	 * @param $Request
454
+	 * @return mixed
455
+	 */
456
+	private function _CURLRequest($Request)
457
+	{
458
+		$EndPointURL = $this->_debug_mode ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp';
459
+		$curl = curl_init();
460
+		curl_setopt($curl, CURLOPT_VERBOSE, apply_filters('FHEE__EEG_Paypal_Pro__CurlRequest__CURLOPT_VERBOSE', true));
461
+		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
462
+		curl_setopt($curl, CURLOPT_TIMEOUT, 60);
463
+		curl_setopt($curl, CURLOPT_URL, $EndPointURL);
464
+		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
465
+		curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);
466
+		curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
467
+		//execute the curl POST
468
+		$Response = curl_exec($curl);
469
+		curl_close($curl);
470
+		return $Response;
471
+	}
472
+
473
+
474
+
475
+	/**
476
+	 * @param $NVPString
477
+	 * @return array
478
+	 */
479
+	private function _NVPToArray($NVPString)
480
+	{
481
+		// prepare responses into array
482
+		$proArray = array();
483
+		while (strlen($NVPString)) {
484
+			// name
485
+			$keypos = strpos($NVPString, '=');
486
+			$keyval = substr($NVPString, 0, $keypos);
487
+			// value
488
+			$valuepos = strpos($NVPString, '&') ? strpos($NVPString, '&') : strlen($NVPString);
489
+			$valval = substr($NVPString, $keypos + 1, $valuepos - $keypos - 1);
490
+			// decoding the respose
491
+			$proArray[$keyval] = urldecode($valval);
492
+			$NVPString = substr($NVPString, $valuepos + 1, strlen($NVPString));
493
+		}
494
+		return $proArray;
495
+	}
496
+
497
+
498
+
499
+	/**
500
+	 * @param array $PayPalResult
501
+	 * @return bool
502
+	 */
503
+	private function _APICallSuccessful($PayPalResult)
504
+	{
505
+		$approved = false;
506
+		// check main response message from PayPal
507
+		if (isset($PayPalResult['ACK']) && ! empty($PayPalResult['ACK'])) {
508
+			$ack = strtoupper($PayPalResult['ACK']);
509
+			$approved = ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING' || $ack == 'PARTIALSUCCESS') ? true : false;
510
+		}
511
+		return $approved;
512
+	}
513
+
514
+
515
+
516
+	/**
517
+	 * @param $DataArray
518
+	 * @return array
519
+	 */
520
+	private function _GetErrors($DataArray)
521
+	{
522
+		$Errors = array();
523
+		$n = 0;
524
+		while (isset($DataArray['L_ERRORCODE' . $n . ''])) {
525
+			$LErrorCode = isset($DataArray['L_ERRORCODE' . $n . '']) ? $DataArray['L_ERRORCODE' . $n . ''] : '';
526
+			$LShortMessage = isset($DataArray['L_SHORTMESSAGE' . $n . '']) ? $DataArray['L_SHORTMESSAGE' . $n . ''] : '';
527
+			$LLongMessage = isset($DataArray['L_LONGMESSAGE' . $n . '']) ? $DataArray['L_LONGMESSAGE' . $n . ''] : '';
528
+			$LSeverityCode = isset($DataArray['L_SEVERITYCODE' . $n . '']) ? $DataArray['L_SEVERITYCODE' . $n . ''] : '';
529
+			$CurrentItem = array(
530
+				'L_ERRORCODE'    => $LErrorCode,
531
+				'L_SHORTMESSAGE' => $LShortMessage,
532
+				'L_LONGMESSAGE'  => $LLongMessage,
533
+				'L_SEVERITYCODE' => $LSeverityCode,
534
+			);
535
+			array_push($Errors, $CurrentItem);
536
+			$n++;
537
+		}
538
+		return $Errors;
539
+	}
540
+
541
+
542
+
543
+	/**
544
+	 *        nothing to see here...  move along....
545
+	 *
546
+	 * @access protected
547
+	 * @param $Errors
548
+	 * @return string
549
+	 */
550
+	private function _DisplayErrors($Errors)
551
+	{
552
+		$error = '';
553
+		foreach ($Errors as $ErrorVar => $ErrorVal) {
554
+			$CurrentError = $Errors[$ErrorVar];
555
+			foreach ($CurrentError as $CurrentErrorVar => $CurrentErrorVal) {
556
+				$CurrentVarName = '';
557
+				if ($CurrentErrorVar == 'L_ERRORCODE') {
558
+					$CurrentVarName = 'Error Code';
559
+				} elseif ($CurrentErrorVar == 'L_SHORTMESSAGE') {
560
+					$CurrentVarName = 'Short Message';
561
+				} elseif ($CurrentErrorVar == 'L_LONGMESSAGE') {
562
+					$CurrentVarName = 'Long Message';
563
+				} elseif ($CurrentErrorVar == 'L_SEVERITYCODE') {
564
+					$CurrentVarName = 'Severity Code';
565
+				}
566
+				$error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal;
567
+			}
568
+		}
569
+		return $error;
570
+	}
571 571
 
572 572
 
573 573
 
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php
2
-if (! defined('EVENT_ESPRESSO_VERSION')) {
2
+if ( ! defined('EVENT_ESPRESSO_VERSION')) {
3 3
     exit('No direct script access allowed');
4 4
 }
5 5
 
@@ -89,16 +89,16 @@  discard block
 block discarded – undo
89 89
     public function do_direct_payment($payment, $billing_info = null)
90 90
     {
91 91
         $transaction = $payment->transaction();
92
-        if (! $transaction instanceof EEI_Transaction) {
92
+        if ( ! $transaction instanceof EEI_Transaction) {
93 93
             throw new EE_Error(esc_html__('No transaction for payment while paying with PayPal Pro.', 'event_espresso'));
94 94
         }
95 95
         $primary_registrant = $transaction->primary_registration();
96
-        if (! $primary_registrant instanceof EEI_Registration) {
96
+        if ( ! $primary_registrant instanceof EEI_Registration) {
97 97
             throw new EE_Error(esc_html__('No primary registration on transaction while paying with PayPal Pro.',
98 98
                 'event_espresso'));
99 99
         }
100 100
         $attendee = $primary_registrant->attendee();
101
-        if (! $attendee instanceof EEI_Attendee) {
101
+        if ( ! $attendee instanceof EEI_Attendee) {
102 102
             throw new EE_Error(esc_html__('No attendee on primary registration while paying with PayPal Pro.',
103 103
                 'event_espresso'));
104 104
         }
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
             // Required.  Credit card number.  No spaces or punctuation.
190 190
             'acct'           => $billing_info['credit_card'],
191 191
             // Required.  Credit card expiration date.  Format is MMYYYY
192
-            'expdate'        => $billing_info['exp_month'] . $billing_info['exp_year'],
192
+            'expdate'        => $billing_info['exp_month'].$billing_info['exp_year'],
193 193
             // Requirements determined by your PayPal account settings.  Security digits for credit card.
194 194
             'cvv2'           => $billing_info['cvv'],
195 195
         );
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
         }
238 238
         //so if the attendee has enough data to fill out PayPal Pro's shipping info, use it. If not, use the billing info again
239 239
         $ShippingAddress = array(
240
-            'shiptoname'     => substr($use_registration_address_info ? $attendee->full_name() : $billing_info['first_name'] . ' ' . $billing_info['last_name'], 0, 32),
240
+            'shiptoname'     => substr($use_registration_address_info ? $attendee->full_name() : $billing_info['first_name'].' '.$billing_info['last_name'], 0, 32),
241 241
             'shiptostreet'   => substr($use_registration_address_info ? $attendee->address() : $billing_info['address'], 0, 100),
242 242
             'shiptostreet2'  => substr($use_registration_address_info ? $attendee->address2() : $billing_info['address2'], 0, 100),
243 243
             'shiptocity'     => substr($use_registration_address_info ? $attendee->city() : $billing_info['city'], 0, 40),
@@ -252,7 +252,7 @@  discard block
 block discarded – undo
252 252
             // Required.  Three-letter currency code.  Default is USD.
253 253
             'currencycode' => $payment->currency_code(),
254 254
             // Required if you include itemized cart details. (L_AMTn, etc.)  Subtotal of items not including S&H, or tax.
255
-            'itemamt'      => $this->format_currency($item_amount),//
255
+            'itemamt'      => $this->format_currency($item_amount), //
256 256
             // Total shipping costs for the order.  If you specify shippingamt, you must also specify itemamt.
257 257
             'shippingamt'  => '',
258 258
             // Total handling costs for the order.  If you specify handlingamt, you must also specify itemamt.
@@ -264,10 +264,10 @@  discard block
 block discarded – undo
264 264
             // Free-form field for your own use.  256 char max.
265 265
             'custom'       => $primary_registrant ? $primary_registrant->ID() : '',
266 266
             // Your own invoice or tracking number
267
-            'invnum'       => wp_generate_password(12, false),//$transaction->ID(),
267
+            'invnum'       => wp_generate_password(12, false), //$transaction->ID(),
268 268
             // URL for receiving Instant Payment Notifications.  This overrides what your profile is set to use.
269 269
             'notifyurl'    => '',
270
-            'buttonsource' => 'EventEspresso_SP',//EE will blow up if you change this
270
+            'buttonsource' => 'EventEspresso_SP', //EE will blow up if you change this
271 271
         );
272 272
         // Wrap all data arrays into a single, "master" array which will be passed into the class function.
273 273
         $PayPalRequestData = array(
@@ -372,32 +372,32 @@  discard block
 block discarded – undo
372 372
         // DP Fields
373 373
         $DPFields = isset($DataArray['DPFields']) ? $DataArray['DPFields'] : array();
374 374
         foreach ($DPFields as $DPFieldsVar => $DPFieldsVal) {
375
-            $DPFieldsNVP .= '&' . strtoupper($DPFieldsVar) . '=' . urlencode($DPFieldsVal);
375
+            $DPFieldsNVP .= '&'.strtoupper($DPFieldsVar).'='.urlencode($DPFieldsVal);
376 376
         }
377 377
         // CC Details Fields
378 378
         $CCDetails = isset($DataArray['CCDetails']) ? $DataArray['CCDetails'] : array();
379 379
         foreach ($CCDetails as $CCDetailsVar => $CCDetailsVal) {
380
-            $CCDetailsNVP .= '&' . strtoupper($CCDetailsVar) . '=' . urlencode($CCDetailsVal);
380
+            $CCDetailsNVP .= '&'.strtoupper($CCDetailsVar).'='.urlencode($CCDetailsVal);
381 381
         }
382 382
         // PayerInfo Type Fields
383 383
         $PayerInfo = isset($DataArray['PayerInfo']) ? $DataArray['PayerInfo'] : array();
384 384
         foreach ($PayerInfo as $PayerInfoVar => $PayerInfoVal) {
385
-            $PayerInfoNVP .= '&' . strtoupper($PayerInfoVar) . '=' . urlencode($PayerInfoVal);
385
+            $PayerInfoNVP .= '&'.strtoupper($PayerInfoVar).'='.urlencode($PayerInfoVal);
386 386
         }
387 387
         // Payer Name Fields
388 388
         $PayerName = isset($DataArray['PayerName']) ? $DataArray['PayerName'] : array();
389 389
         foreach ($PayerName as $PayerNameVar => $PayerNameVal) {
390
-            $PayerNameNVP .= '&' . strtoupper($PayerNameVar) . '=' . urlencode($PayerNameVal);
390
+            $PayerNameNVP .= '&'.strtoupper($PayerNameVar).'='.urlencode($PayerNameVal);
391 391
         }
392 392
         // Address Fields (Billing)
393 393
         $BillingAddress = isset($DataArray['BillingAddress']) ? $DataArray['BillingAddress'] : array();
394 394
         foreach ($BillingAddress as $BillingAddressVar => $BillingAddressVal) {
395
-            $BillingAddressNVP .= '&' . strtoupper($BillingAddressVar) . '=' . urlencode($BillingAddressVal);
395
+            $BillingAddressNVP .= '&'.strtoupper($BillingAddressVar).'='.urlencode($BillingAddressVal);
396 396
         }
397 397
         // Payment Details Type Fields
398 398
         $PaymentDetails = isset($DataArray['PaymentDetails']) ? $DataArray['PaymentDetails'] : array();
399 399
         foreach ($PaymentDetails as $PaymentDetailsVar => $PaymentDetailsVal) {
400
-            $PaymentDetailsNVP .= '&' . strtoupper($PaymentDetailsVar) . '=' . urlencode($PaymentDetailsVal);
400
+            $PaymentDetailsNVP .= '&'.strtoupper($PaymentDetailsVar).'='.urlencode($PaymentDetailsVal);
401 401
         }
402 402
         // Payment Details Item Type Fields
403 403
         $OrderItems = isset($DataArray['OrderItems']) ? $DataArray['OrderItems'] : array();
@@ -405,19 +405,19 @@  discard block
 block discarded – undo
405 405
         foreach ($OrderItems as $OrderItemsVar => $OrderItemsVal) {
406 406
             $CurrentItem = $OrderItems[$OrderItemsVar];
407 407
             foreach ($CurrentItem as $CurrentItemVar => $CurrentItemVal) {
408
-                $OrderItemsNVP .= '&' . strtoupper($CurrentItemVar) . $n . '=' . urlencode($CurrentItemVal);
408
+                $OrderItemsNVP .= '&'.strtoupper($CurrentItemVar).$n.'='.urlencode($CurrentItemVal);
409 409
             }
410 410
             $n++;
411 411
         }
412 412
         // Ship To Address Fields
413 413
         $ShippingAddress = isset($DataArray['ShippingAddress']) ? $DataArray['ShippingAddress'] : array();
414 414
         foreach ($ShippingAddress as $ShippingAddressVar => $ShippingAddressVal) {
415
-            $ShippingAddressNVP .= '&' . strtoupper($ShippingAddressVar) . '=' . urlencode($ShippingAddressVal);
415
+            $ShippingAddressNVP .= '&'.strtoupper($ShippingAddressVar).'='.urlencode($ShippingAddressVal);
416 416
         }
417 417
         // 3D Secure Fields
418 418
         $Secure3D = isset($DataArray['Secure3D']) ? $DataArray['Secure3D'] : array();
419 419
         foreach ($Secure3D as $Secure3DVar => $Secure3DVal) {
420
-            $Secure3DNVP .= '&' . strtoupper($Secure3DVar) . '=' . urlencode($Secure3DVal);
420
+            $Secure3DNVP .= '&'.strtoupper($Secure3DVar).'='.urlencode($Secure3DVal);
421 421
         }
422 422
         // Now that we have each chunk we need to go ahead and append them all together for our entire NVP string
423 423
         $NVPRequest = 'USER='
@@ -521,11 +521,11 @@  discard block
 block discarded – undo
521 521
     {
522 522
         $Errors = array();
523 523
         $n = 0;
524
-        while (isset($DataArray['L_ERRORCODE' . $n . ''])) {
525
-            $LErrorCode = isset($DataArray['L_ERRORCODE' . $n . '']) ? $DataArray['L_ERRORCODE' . $n . ''] : '';
526
-            $LShortMessage = isset($DataArray['L_SHORTMESSAGE' . $n . '']) ? $DataArray['L_SHORTMESSAGE' . $n . ''] : '';
527
-            $LLongMessage = isset($DataArray['L_LONGMESSAGE' . $n . '']) ? $DataArray['L_LONGMESSAGE' . $n . ''] : '';
528
-            $LSeverityCode = isset($DataArray['L_SEVERITYCODE' . $n . '']) ? $DataArray['L_SEVERITYCODE' . $n . ''] : '';
524
+        while (isset($DataArray['L_ERRORCODE'.$n.''])) {
525
+            $LErrorCode = isset($DataArray['L_ERRORCODE'.$n.'']) ? $DataArray['L_ERRORCODE'.$n.''] : '';
526
+            $LShortMessage = isset($DataArray['L_SHORTMESSAGE'.$n.'']) ? $DataArray['L_SHORTMESSAGE'.$n.''] : '';
527
+            $LLongMessage = isset($DataArray['L_LONGMESSAGE'.$n.'']) ? $DataArray['L_LONGMESSAGE'.$n.''] : '';
528
+            $LSeverityCode = isset($DataArray['L_SEVERITYCODE'.$n.'']) ? $DataArray['L_SEVERITYCODE'.$n.''] : '';
529 529
             $CurrentItem = array(
530 530
                 'L_ERRORCODE'    => $LErrorCode,
531 531
                 'L_SHORTMESSAGE' => $LShortMessage,
@@ -563,7 +563,7 @@  discard block
 block discarded – undo
563 563
                 } elseif ($CurrentErrorVar == 'L_SEVERITYCODE') {
564 564
                     $CurrentVarName = 'Severity Code';
565 565
                 }
566
-                $error .= '<br />' . $CurrentVarName . ': ' . $CurrentErrorVal;
566
+                $error .= '<br />'.$CurrentVarName.': '.$CurrentErrorVal;
567 567
             }
568 568
         }
569 569
         return $error;
Please login to merge, or discard this patch.
espresso.php 1 patch
Indentation   +219 added lines, -219 removed lines patch added patch discarded remove patch
@@ -1,5 +1,5 @@  discard block
 block discarded – undo
1 1
 <?php if ( ! defined('ABSPATH')) {
2
-    exit('No direct script access allowed');
2
+	exit('No direct script access allowed');
3 3
 }
4 4
 /*
5 5
   Plugin Name:		Event Espresso
@@ -40,243 +40,243 @@  discard block
 block discarded – undo
40 40
  * @since            4.0
41 41
  */
42 42
 if (function_exists('espresso_version')) {
43
-    /**
44
-     *    espresso_duplicate_plugin_error
45
-     *    displays if more than one version of EE is activated at the same time
46
-     */
47
-    function espresso_duplicate_plugin_error()
48
-    {
49
-        ?>
43
+	/**
44
+	 *    espresso_duplicate_plugin_error
45
+	 *    displays if more than one version of EE is activated at the same time
46
+	 */
47
+	function espresso_duplicate_plugin_error()
48
+	{
49
+		?>
50 50
         <div class="error">
51 51
             <p>
52 52
                 <?php echo esc_html__(
53
-                        'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
-                        'event_espresso'
55
-                ); ?>
53
+						'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
+						'event_espresso'
55
+				); ?>
56 56
             </p>
57 57
         </div>
58 58
         <?php
59
-        espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-    }
59
+		espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+	}
61 61
 
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.3.9');
65
-    if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
-        /**
67
-         * espresso_minimum_php_version_error
68
-         *
69
-         * @return void
70
-         */
71
-        function espresso_minimum_php_version_error()
72
-        {
73
-            ?>
64
+	define('EE_MIN_PHP_VER_REQUIRED', '5.3.9');
65
+	if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
+		/**
67
+		 * espresso_minimum_php_version_error
68
+		 *
69
+		 * @return void
70
+		 */
71
+		function espresso_minimum_php_version_error()
72
+		{
73
+			?>
74 74
             <div class="error">
75 75
                 <p>
76 76
                     <?php
77
-                    printf(
78
-                            esc_html__(
79
-                                    'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
-                                    'event_espresso'
81
-                            ),
82
-                            EE_MIN_PHP_VER_REQUIRED,
83
-                            PHP_VERSION,
84
-                            '<br/>',
85
-                            '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
-                    );
87
-                    ?>
77
+					printf(
78
+							esc_html__(
79
+									'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
+									'event_espresso'
81
+							),
82
+							EE_MIN_PHP_VER_REQUIRED,
83
+							PHP_VERSION,
84
+							'<br/>',
85
+							'<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
+					);
87
+					?>
88 88
                 </p>
89 89
             </div>
90 90
             <?php
91
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
92
-        }
91
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
92
+		}
93 93
 
94
-        add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
-    } else {
96
-        /**
97
-         * espresso_version
98
-         * Returns the plugin version
99
-         *
100
-         * @return string
101
-         */
102
-        function espresso_version()
103
-        {
104
-            return apply_filters('FHEE__espresso__espresso_version', '4.9.39.rc.018');
105
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		/**
97
+		 * espresso_version
98
+		 * Returns the plugin version
99
+		 *
100
+		 * @return string
101
+		 */
102
+		function espresso_version()
103
+		{
104
+			return apply_filters('FHEE__espresso__espresso_version', '4.9.39.rc.018');
105
+		}
106 106
 
107
-        // define versions
108
-        define('EVENT_ESPRESSO_VERSION', espresso_version());
109
-        define('EE_MIN_WP_VER_REQUIRED', '4.1');
110
-        define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2');
111
-        define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44');
112
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
113
-        //used to be DIRECTORY_SEPARATOR, but that caused issues on windows
114
-        if ( ! defined('DS')) {
115
-            define('DS', '/');
116
-        }
117
-        if ( ! defined('PS')) {
118
-            define('PS', PATH_SEPARATOR);
119
-        }
120
-        if ( ! defined('SP')) {
121
-            define('SP', ' ');
122
-        }
123
-        if ( ! defined('EENL')) {
124
-            define('EENL', "\n");
125
-        }
126
-        define('EE_SUPPORT_EMAIL', '[email protected]');
127
-        // define the plugin directory and URL
128
-        define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE));
129
-        define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE));
130
-        define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE));
131
-        // main root folder paths
132
-        define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS);
133
-        define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS);
134
-        define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS);
135
-        define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS);
136
-        define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS);
137
-        define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS);
138
-        define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS);
139
-        define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS);
140
-        // core system paths
141
-        define('EE_ADMIN', EE_CORE . 'admin' . DS);
142
-        define('EE_CPTS', EE_CORE . 'CPTs' . DS);
143
-        define('EE_CLASSES', EE_CORE . 'db_classes' . DS);
144
-        define('EE_INTERFACES', EE_CORE . 'interfaces' . DS);
145
-        define('EE_BUSINESS', EE_CORE . 'business' . DS);
146
-        define('EE_MODELS', EE_CORE . 'db_models' . DS);
147
-        define('EE_HELPERS', EE_CORE . 'helpers' . DS);
148
-        define('EE_LIBRARIES', EE_CORE . 'libraries' . DS);
149
-        define('EE_TEMPLATES', EE_CORE . 'templates' . DS);
150
-        define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS);
151
-        define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS);
152
-        define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS);
153
-        // gateways
154
-        define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS);
155
-        define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS);
156
-        // asset URL paths
157
-        define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS);
158
-        define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS);
159
-        define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS);
160
-        define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS);
161
-        define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/');
162
-        define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/');
163
-        // define upload paths
164
-        $uploads = wp_upload_dir();
165
-        // define the uploads directory and URL
166
-        define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS);
167
-        define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS);
168
-        // define the templates directory and URL
169
-        define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS);
170
-        define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS);
171
-        // define the gateway directory and URL
172
-        define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS);
173
-        define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS);
174
-        // languages folder/path
175
-        define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS);
176
-        define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS);
177
-        //check for dompdf fonts in uploads
178
-        if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) {
179
-            define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS);
180
-        }
181
-        //ajax constants
182
-        define(
183
-                'EE_FRONT_AJAX',
184
-                isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false
185
-        );
186
-        define(
187
-                'EE_ADMIN_AJAX',
188
-                isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false
189
-        );
190
-        //just a handy constant occasionally needed for finding values representing infinity in the DB
191
-        //you're better to use this than its straight value (currently -1) in case you ever
192
-        //want to change its default value! or find when -1 means infinity
193
-        define('EE_INF_IN_DB', -1);
194
-        define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX);
195
-        define('EE_DEBUG', false);
196
-        // for older WP versions
197
-        if ( ! defined('MONTH_IN_SECONDS')) {
198
-            define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30);
199
-        }
200
-        /**
201
-         *    espresso_plugin_activation
202
-         *    adds a wp-option to indicate that EE has been activated via the WP admin plugins page
203
-         */
204
-        function espresso_plugin_activation()
205
-        {
206
-            update_option('ee_espresso_activation', true);
207
-        }
107
+		// define versions
108
+		define('EVENT_ESPRESSO_VERSION', espresso_version());
109
+		define('EE_MIN_WP_VER_REQUIRED', '4.1');
110
+		define('EE_MIN_WP_VER_RECOMMENDED', '4.4.2');
111
+		define('EE_MIN_PHP_VER_RECOMMENDED', '5.4.44');
112
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
113
+		//used to be DIRECTORY_SEPARATOR, but that caused issues on windows
114
+		if ( ! defined('DS')) {
115
+			define('DS', '/');
116
+		}
117
+		if ( ! defined('PS')) {
118
+			define('PS', PATH_SEPARATOR);
119
+		}
120
+		if ( ! defined('SP')) {
121
+			define('SP', ' ');
122
+		}
123
+		if ( ! defined('EENL')) {
124
+			define('EENL', "\n");
125
+		}
126
+		define('EE_SUPPORT_EMAIL', '[email protected]');
127
+		// define the plugin directory and URL
128
+		define('EE_PLUGIN_BASENAME', plugin_basename(EVENT_ESPRESSO_MAIN_FILE));
129
+		define('EE_PLUGIN_DIR_PATH', plugin_dir_path(EVENT_ESPRESSO_MAIN_FILE));
130
+		define('EE_PLUGIN_DIR_URL', plugin_dir_url(EVENT_ESPRESSO_MAIN_FILE));
131
+		// main root folder paths
132
+		define('EE_ADMIN_PAGES', EE_PLUGIN_DIR_PATH . 'admin_pages' . DS);
133
+		define('EE_CORE', EE_PLUGIN_DIR_PATH . 'core' . DS);
134
+		define('EE_MODULES', EE_PLUGIN_DIR_PATH . 'modules' . DS);
135
+		define('EE_PUBLIC', EE_PLUGIN_DIR_PATH . 'public' . DS);
136
+		define('EE_SHORTCODES', EE_PLUGIN_DIR_PATH . 'shortcodes' . DS);
137
+		define('EE_WIDGETS', EE_PLUGIN_DIR_PATH . 'widgets' . DS);
138
+		define('EE_PAYMENT_METHODS', EE_PLUGIN_DIR_PATH . 'payment_methods' . DS);
139
+		define('EE_CAFF_PATH', EE_PLUGIN_DIR_PATH . 'caffeinated' . DS);
140
+		// core system paths
141
+		define('EE_ADMIN', EE_CORE . 'admin' . DS);
142
+		define('EE_CPTS', EE_CORE . 'CPTs' . DS);
143
+		define('EE_CLASSES', EE_CORE . 'db_classes' . DS);
144
+		define('EE_INTERFACES', EE_CORE . 'interfaces' . DS);
145
+		define('EE_BUSINESS', EE_CORE . 'business' . DS);
146
+		define('EE_MODELS', EE_CORE . 'db_models' . DS);
147
+		define('EE_HELPERS', EE_CORE . 'helpers' . DS);
148
+		define('EE_LIBRARIES', EE_CORE . 'libraries' . DS);
149
+		define('EE_TEMPLATES', EE_CORE . 'templates' . DS);
150
+		define('EE_THIRD_PARTY', EE_CORE . 'third_party_libs' . DS);
151
+		define('EE_GLOBAL_ASSETS', EE_TEMPLATES . 'global_assets' . DS);
152
+		define('EE_FORM_SECTIONS', EE_LIBRARIES . 'form_sections' . DS);
153
+		// gateways
154
+		define('EE_GATEWAYS', EE_MODULES . 'gateways' . DS);
155
+		define('EE_GATEWAYS_URL', EE_PLUGIN_DIR_URL . 'modules' . DS . 'gateways' . DS);
156
+		// asset URL paths
157
+		define('EE_TEMPLATES_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'templates' . DS);
158
+		define('EE_GLOBAL_ASSETS_URL', EE_TEMPLATES_URL . 'global_assets' . DS);
159
+		define('EE_IMAGES_URL', EE_GLOBAL_ASSETS_URL . 'images' . DS);
160
+		define('EE_THIRD_PARTY_URL', EE_PLUGIN_DIR_URL . 'core' . DS . 'third_party_libs' . DS);
161
+		define('EE_HELPERS_ASSETS', EE_PLUGIN_DIR_URL . 'core/helpers/assets/');
162
+		define('EE_LIBRARIES_URL', EE_PLUGIN_DIR_URL . 'core/libraries/');
163
+		// define upload paths
164
+		$uploads = wp_upload_dir();
165
+		// define the uploads directory and URL
166
+		define('EVENT_ESPRESSO_UPLOAD_DIR', $uploads['basedir'] . DS . 'espresso' . DS);
167
+		define('EVENT_ESPRESSO_UPLOAD_URL', $uploads['baseurl'] . DS . 'espresso' . DS);
168
+		// define the templates directory and URL
169
+		define('EVENT_ESPRESSO_TEMPLATE_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'templates' . DS);
170
+		define('EVENT_ESPRESSO_TEMPLATE_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'templates' . DS);
171
+		// define the gateway directory and URL
172
+		define('EVENT_ESPRESSO_GATEWAY_DIR', $uploads['basedir'] . DS . 'espresso' . DS . 'gateways' . DS);
173
+		define('EVENT_ESPRESSO_GATEWAY_URL', $uploads['baseurl'] . DS . 'espresso' . DS . 'gateways' . DS);
174
+		// languages folder/path
175
+		define('EE_LANGUAGES_SAFE_LOC', '..' . DS . 'uploads' . DS . 'espresso' . DS . 'languages' . DS);
176
+		define('EE_LANGUAGES_SAFE_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'languages' . DS);
177
+		//check for dompdf fonts in uploads
178
+		if (file_exists(EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS)) {
179
+			define('DOMPDF_FONT_DIR', EVENT_ESPRESSO_UPLOAD_DIR . 'fonts' . DS);
180
+		}
181
+		//ajax constants
182
+		define(
183
+				'EE_FRONT_AJAX',
184
+				isset($_REQUEST['ee_front_ajax']) || isset($_REQUEST['data']['ee_front_ajax']) ? true : false
185
+		);
186
+		define(
187
+				'EE_ADMIN_AJAX',
188
+				isset($_REQUEST['ee_admin_ajax']) || isset($_REQUEST['data']['ee_admin_ajax']) ? true : false
189
+		);
190
+		//just a handy constant occasionally needed for finding values representing infinity in the DB
191
+		//you're better to use this than its straight value (currently -1) in case you ever
192
+		//want to change its default value! or find when -1 means infinity
193
+		define('EE_INF_IN_DB', -1);
194
+		define('EE_INF', INF > (float)PHP_INT_MAX ? INF : PHP_INT_MAX);
195
+		define('EE_DEBUG', false);
196
+		// for older WP versions
197
+		if ( ! defined('MONTH_IN_SECONDS')) {
198
+			define('MONTH_IN_SECONDS', DAY_IN_SECONDS * 30);
199
+		}
200
+		/**
201
+		 *    espresso_plugin_activation
202
+		 *    adds a wp-option to indicate that EE has been activated via the WP admin plugins page
203
+		 */
204
+		function espresso_plugin_activation()
205
+		{
206
+			update_option('ee_espresso_activation', true);
207
+		}
208 208
 
209
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
210
-        /**
211
-         *    espresso_load_error_handling
212
-         *    this function loads EE's class for handling exceptions and errors
213
-         */
214
-        function espresso_load_error_handling()
215
-        {
216
-            // load debugging tools
217
-            if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) {
218
-                require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php');
219
-                EEH_Debug_Tools::instance();
220
-            }
221
-            // load error handling
222
-            if (is_readable(EE_CORE . 'EE_Error.core.php')) {
223
-                require_once(EE_CORE . 'EE_Error.core.php');
224
-            } else {
225
-                wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso'));
226
-            }
227
-        }
209
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
210
+		/**
211
+		 *    espresso_load_error_handling
212
+		 *    this function loads EE's class for handling exceptions and errors
213
+		 */
214
+		function espresso_load_error_handling()
215
+		{
216
+			// load debugging tools
217
+			if (WP_DEBUG === true && is_readable(EE_HELPERS . 'EEH_Debug_Tools.helper.php')) {
218
+				require_once(EE_HELPERS . 'EEH_Debug_Tools.helper.php');
219
+				EEH_Debug_Tools::instance();
220
+			}
221
+			// load error handling
222
+			if (is_readable(EE_CORE . 'EE_Error.core.php')) {
223
+				require_once(EE_CORE . 'EE_Error.core.php');
224
+			} else {
225
+				wp_die(esc_html__('The EE_Error core class could not be loaded.', 'event_espresso'));
226
+			}
227
+		}
228 228
 
229
-        /**
230
-         *    espresso_load_required
231
-         *    given a class name and path, this function will load that file or throw an exception
232
-         *
233
-         * @param    string $classname
234
-         * @param    string $full_path_to_file
235
-         * @throws    EE_Error
236
-         */
237
-        function espresso_load_required($classname, $full_path_to_file)
238
-        {
239
-            static $error_handling_loaded = false;
240
-            if ( ! $error_handling_loaded) {
241
-                espresso_load_error_handling();
242
-                $error_handling_loaded = true;
243
-            }
244
-            if (is_readable($full_path_to_file)) {
245
-                require_once($full_path_to_file);
246
-            } else {
247
-                throw new EE_Error (
248
-                        sprintf(
249
-                                esc_html__(
250
-                                        'The %s class file could not be located or is not readable due to file permissions.',
251
-                                        'event_espresso'
252
-                                ),
253
-                                $classname
254
-                        )
255
-                );
256
-            }
257
-        }
229
+		/**
230
+		 *    espresso_load_required
231
+		 *    given a class name and path, this function will load that file or throw an exception
232
+		 *
233
+		 * @param    string $classname
234
+		 * @param    string $full_path_to_file
235
+		 * @throws    EE_Error
236
+		 */
237
+		function espresso_load_required($classname, $full_path_to_file)
238
+		{
239
+			static $error_handling_loaded = false;
240
+			if ( ! $error_handling_loaded) {
241
+				espresso_load_error_handling();
242
+				$error_handling_loaded = true;
243
+			}
244
+			if (is_readable($full_path_to_file)) {
245
+				require_once($full_path_to_file);
246
+			} else {
247
+				throw new EE_Error (
248
+						sprintf(
249
+								esc_html__(
250
+										'The %s class file could not be located or is not readable due to file permissions.',
251
+										'event_espresso'
252
+								),
253
+								$classname
254
+						)
255
+				);
256
+			}
257
+		}
258 258
 
259
-        espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php');
260
-        espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php');
261
-        espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php');
262
-        new EE_Bootstrap();
263
-    }
259
+		espresso_load_required('EEH_Base', EE_CORE . 'helpers' . DS . 'EEH_Base.helper.php');
260
+		espresso_load_required('EEH_File', EE_CORE . 'helpers' . DS . 'EEH_File.helper.php');
261
+		espresso_load_required('EE_Bootstrap', EE_CORE . 'EE_Bootstrap.core.php');
262
+		new EE_Bootstrap();
263
+	}
264 264
 }
265 265
 if ( ! function_exists('espresso_deactivate_plugin')) {
266
-    /**
267
-     *    deactivate_plugin
268
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
269
-     *
270
-     * @access public
271
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
272
-     * @return    void
273
-     */
274
-    function espresso_deactivate_plugin($plugin_basename = '')
275
-    {
276
-        if ( ! function_exists('deactivate_plugins')) {
277
-            require_once(ABSPATH . 'wp-admin/includes/plugin.php');
278
-        }
279
-        unset($_GET['activate'], $_REQUEST['activate']);
280
-        deactivate_plugins($plugin_basename);
281
-    }
266
+	/**
267
+	 *    deactivate_plugin
268
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
269
+	 *
270
+	 * @access public
271
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
272
+	 * @return    void
273
+	 */
274
+	function espresso_deactivate_plugin($plugin_basename = '')
275
+	{
276
+		if ( ! function_exists('deactivate_plugins')) {
277
+			require_once(ABSPATH . 'wp-admin/includes/plugin.php');
278
+		}
279
+		unset($_GET['activate'], $_REQUEST['activate']);
280
+		deactivate_plugins($plugin_basename);
281
+	}
282 282
 }
283 283
\ No newline at end of file
Please login to merge, or discard this patch.