Passed
Push — master ( 6929e7...c24352 )
by Brian
10:18 queued 05:36
created
includes/wpinv-gateway-functions.php 3 patches
Braces   +4 added lines, -3 removed lines patch added patch discarded remove patch
@@ -310,7 +310,7 @@  discard block
 block discarded – undo
310 310
     if ( !wpinv_is_gateway_active( $enabled_gateway ) && !empty( $gateways ) ) {
311 311
         if(wpinv_is_gateway_active( wpinv_get_default_gateway()) ){
312 312
             $enabled_gateway = wpinv_get_default_gateway();
313
-        }else{
313
+        } else{
314 314
             $enabled_gateway = $gateways[0];
315 315
         }
316 316
 
@@ -336,8 +336,9 @@  discard block
 block discarded – undo
336 336
 
337 337
 	$payments = new WP_Query( $args );
338 338
 
339
-	if( $payments )
340
-		$ret = $payments->post_count;
339
+	if( $payments ) {
340
+			$ret = $payments->post_count;
341
+	}
341 342
 	return $ret;
342 343
 }
343 344
 
Please login to merge, or discard this patch.
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -286,26 +286,26 @@  discard block
 block discarded – undo
286 286
 }
287 287
 
288 288
 function wpinv_get_chosen_gateway( $invoice_id = 0 ) {
289
-	$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
289
+    $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
290 290
 
291 291
     $chosen = false;
292 292
     if ( $invoice_id > 0 && $invoice = wpinv_get_invoice( $invoice_id ) ) {
293 293
         $chosen = $invoice->get_gateway();
294 294
     }
295 295
 
296
-	$chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
296
+    $chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
297 297
 
298
-	if ( false !== $chosen ) {
299
-		$chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen );
300
-	}
298
+    if ( false !== $chosen ) {
299
+        $chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen );
300
+    }
301 301
 
302
-	if ( ! empty ( $chosen ) ) {
303
-		$enabled_gateway = urldecode( $chosen );
304
-	} else if (  !empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
305
-		$enabled_gateway = 'manual';
306
-	} else {
307
-		$enabled_gateway = wpinv_get_default_gateway();
308
-	}
302
+    if ( ! empty ( $chosen ) ) {
303
+        $enabled_gateway = urldecode( $chosen );
304
+    } else if (  !empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
305
+        $enabled_gateway = 'manual';
306
+    } else {
307
+        $enabled_gateway = wpinv_get_default_gateway();
308
+    }
309 309
     
310 310
     if ( !wpinv_is_gateway_active( $enabled_gateway ) && !empty( $gateways ) ) {
311 311
         if(wpinv_is_gateway_active( wpinv_get_default_gateway()) ){
@@ -316,7 +316,7 @@  discard block
 block discarded – undo
316 316
 
317 317
     }
318 318
 
319
-	return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
319
+    return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
320 320
 }
321 321
 
322 322
 function wpinv_record_gateway_error( $title = '', $message = '', $parent = 0 ) {
@@ -324,21 +324,21 @@  discard block
 block discarded – undo
324 324
 }
325 325
 
326 326
 function wpinv_count_sales_by_gateway( $gateway_id = 'paypal', $status = 'publish' ) {
327
-	$ret  = 0;
328
-	$args = array(
329
-		'meta_key'    => '_wpinv_gateway',
330
-		'meta_value'  => $gateway_id,
331
-		'nopaging'    => true,
332
-		'post_type'   => 'wpi_invoice',
333
-		'post_status' => $status,
334
-		'fields'      => 'ids'
335
-	);
336
-
337
-	$payments = new WP_Query( $args );
338
-
339
-	if( $payments )
340
-		$ret = $payments->post_count;
341
-	return $ret;
327
+    $ret  = 0;
328
+    $args = array(
329
+        'meta_key'    => '_wpinv_gateway',
330
+        'meta_value'  => $gateway_id,
331
+        'nopaging'    => true,
332
+        'post_type'   => 'wpi_invoice',
333
+        'post_status' => $status,
334
+        'fields'      => 'ids'
335
+    );
336
+
337
+    $payments = new WP_Query( $args );
338
+
339
+    if( $payments )
340
+        $ret = $payments->post_count;
341
+    return $ret;
342 342
 }
343 343
 
344 344
 function wpinv_settings_update_gateways( $input ) {
@@ -900,20 +900,20 @@  discard block
 block discarded – undo
900 900
 }
901 901
 
902 902
 function wpinv_checkout_get_cc_info() {
903
-	$cc_info = array();
904
-	$cc_info['card_name']      = isset( $_POST['card_name'] )       ? sanitize_text_field( $_POST['card_name'] )       : '';
905
-	$cc_info['card_number']    = isset( $_POST['card_number'] )     ? sanitize_text_field( $_POST['card_number'] )     : '';
906
-	$cc_info['card_cvc']       = isset( $_POST['card_cvc'] )        ? sanitize_text_field( $_POST['card_cvc'] )        : '';
907
-	$cc_info['card_exp_month'] = isset( $_POST['card_exp_month'] )  ? sanitize_text_field( $_POST['card_exp_month'] )  : '';
908
-	$cc_info['card_exp_year']  = isset( $_POST['card_exp_year'] )   ? sanitize_text_field( $_POST['card_exp_year'] )   : '';
909
-	$cc_info['card_address']   = isset( $_POST['wpinv_address'] )  ? sanitize_text_field( $_POST['wpinv_address'] ) : '';
910
-	$cc_info['card_city']      = isset( $_POST['wpinv_city'] )     ? sanitize_text_field( $_POST['wpinv_city'] )    : '';
911
-	$cc_info['card_state']     = isset( $_POST['wpinv_state'] )    ? sanitize_text_field( $_POST['wpinv_state'] )   : '';
912
-	$cc_info['card_country']   = isset( $_POST['wpinv_country'] )  ? sanitize_text_field( $_POST['wpinv_country'] ) : '';
913
-	$cc_info['card_zip']       = isset( $_POST['wpinv_zip'] )      ? sanitize_text_field( $_POST['wpinv_zip'] )     : '';
914
-
915
-	// Return cc info
916
-	return $cc_info;
903
+    $cc_info = array();
904
+    $cc_info['card_name']      = isset( $_POST['card_name'] )       ? sanitize_text_field( $_POST['card_name'] )       : '';
905
+    $cc_info['card_number']    = isset( $_POST['card_number'] )     ? sanitize_text_field( $_POST['card_number'] )     : '';
906
+    $cc_info['card_cvc']       = isset( $_POST['card_cvc'] )        ? sanitize_text_field( $_POST['card_cvc'] )        : '';
907
+    $cc_info['card_exp_month'] = isset( $_POST['card_exp_month'] )  ? sanitize_text_field( $_POST['card_exp_month'] )  : '';
908
+    $cc_info['card_exp_year']  = isset( $_POST['card_exp_year'] )   ? sanitize_text_field( $_POST['card_exp_year'] )   : '';
909
+    $cc_info['card_address']   = isset( $_POST['wpinv_address'] )  ? sanitize_text_field( $_POST['wpinv_address'] ) : '';
910
+    $cc_info['card_city']      = isset( $_POST['wpinv_city'] )     ? sanitize_text_field( $_POST['wpinv_city'] )    : '';
911
+    $cc_info['card_state']     = isset( $_POST['wpinv_state'] )    ? sanitize_text_field( $_POST['wpinv_state'] )   : '';
912
+    $cc_info['card_country']   = isset( $_POST['wpinv_country'] )  ? sanitize_text_field( $_POST['wpinv_country'] ) : '';
913
+    $cc_info['card_zip']       = isset( $_POST['wpinv_zip'] )      ? sanitize_text_field( $_POST['wpinv_zip'] )     : '';
914
+
915
+    // Return cc info
916
+    return $cc_info;
917 917
 }
918 918
 
919 919
 /**
@@ -969,7 +969,7 @@  discard block
 block discarded – undo
969 969
         $required_fields  = wpinv_checkout_required_fields();
970 970
 
971 971
         // Loop through required fields and show error messages
972
-         if ( !empty( $required_fields ) ) {
972
+            if ( !empty( $required_fields ) ) {
973 973
             foreach ( $required_fields as $field_name => $value ) {
974 974
                 if ( in_array( $value, $required_fields ) && empty( $_POST[ 'wpinv_' . $field_name ] ) ) {
975 975
                     wpinv_set_error( $value['error_id'], $value['error_message'] );
@@ -1129,7 +1129,7 @@  discard block
 block discarded – undo
1129 1129
         $response['data']['taxf']       = $invoice->get_tax( true );
1130 1130
         $response['data']['total']      = $invoice->get_total();
1131 1131
         $response['data']['totalf']     = $invoice->get_total( true );
1132
-	    $response['data']['free']       = $invoice->is_free() && ( ! ( (float) $response['data']['total'] > 0 ) || $invoice->has_free_trial() ) ? true : false;
1132
+        $response['data']['free']       = $invoice->is_free() && ( ! ( (float) $response['data']['total'] > 0 ) || $invoice->has_free_trial() ) ? true : false;
1133 1133
 
1134 1134
         wp_send_json( $response );
1135 1135
     }
@@ -1199,8 +1199,8 @@  discard block
 block discarded – undo
1199 1199
     // Allow themes and plugins to hook before the gateway
1200 1200
     do_action( 'wpinv_checkout_before_gateway', $_POST, $user_info, $valid_data );
1201 1201
 
1202
-     // If it is free, abort.
1203
-     if ( $invoice->is_free() && ( ! $invoice->is_recurring() || 0 ==  $invoice->get_recurring_details( 'total' ) ) ) {
1202
+        // If it is free, abort.
1203
+        if ( $invoice->is_free() && ( ! $invoice->is_recurring() || 0 ==  $invoice->get_recurring_details( 'total' ) ) ) {
1204 1204
         $invoice_data['gateway'] = 'manual';
1205 1205
         $_POST['wpi-gateway'] = 'manual';
1206 1206
     }
Please login to merge, or discard this patch.
Spacing   +386 added lines, -386 removed lines patch added patch discarded remove patch
@@ -7,206 +7,206 @@  discard block
 block discarded – undo
7 7
  */
8 8
  
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14 14
 function wpinv_get_payment_gateways() {
15 15
     // Default, built-in gateways
16 16
     $gateways = array(
17 17
         'paypal' => array(
18
-            'admin_label'    => __( 'PayPal Standard', 'invoicing' ),
19
-            'checkout_label' => __( 'PayPal Standard', 'invoicing' ),
18
+            'admin_label'    => __('PayPal Standard', 'invoicing'),
19
+            'checkout_label' => __('PayPal Standard', 'invoicing'),
20 20
             'ordering'       => 1,
21 21
         ),
22 22
         'authorizenet' => array(
23
-            'admin_label'    => __( 'Authorize.Net (AIM)', 'invoicing' ),
24
-            'checkout_label' => __( 'Authorize.Net - Credit Card / Debit Card', 'invoicing' ),
23
+            'admin_label'    => __('Authorize.Net (AIM)', 'invoicing'),
24
+            'checkout_label' => __('Authorize.Net - Credit Card / Debit Card', 'invoicing'),
25 25
             'ordering'       => 4,
26 26
         ),
27 27
         'worldpay' => array(
28
-            'admin_label'    => __( 'Worldpay', 'invoicing' ),
29
-            'checkout_label' => __( 'Worldpay - Credit Card / Debit Card', 'invoicing' ),
28
+            'admin_label'    => __('Worldpay', 'invoicing'),
29
+            'checkout_label' => __('Worldpay - Credit Card / Debit Card', 'invoicing'),
30 30
             'ordering'       => 5,
31 31
         ),
32 32
         'bank_transfer' => array(
33
-            'admin_label'    => __( 'Pre Bank Transfer', 'invoicing' ),
34
-            'checkout_label' => __( 'Pre Bank Transfer', 'invoicing' ),
33
+            'admin_label'    => __('Pre Bank Transfer', 'invoicing'),
34
+            'checkout_label' => __('Pre Bank Transfer', 'invoicing'),
35 35
             'ordering'       => 11,
36 36
         ),
37 37
         'manual' => array(
38
-            'admin_label'    => __( 'Manual Payment', 'invoicing' ),
39
-            'checkout_label' => __( 'Manual Payment', 'invoicing' ),
38
+            'admin_label'    => __('Manual Payment', 'invoicing'),
39
+            'checkout_label' => __('Manual Payment', 'invoicing'),
40 40
             'ordering'       => 12,
41 41
         ),
42 42
     );
43 43
 
44
-    return apply_filters( 'wpinv_payment_gateways', $gateways );
44
+    return apply_filters('wpinv_payment_gateways', $gateways);
45 45
 }
46 46
 
47
-function wpinv_payment_gateway_titles( $all_gateways ) {
47
+function wpinv_payment_gateway_titles($all_gateways) {
48 48
     global $wpinv_options;
49 49
 
50 50
     $gateways = array();
51
-    foreach ( $all_gateways as $key => $gateway ) {
52
-        if ( !empty( $wpinv_options[$key . '_title'] ) ) {
53
-            $all_gateways[$key]['checkout_label'] = __( $wpinv_options[$key . '_title'], 'invoicing' );
51
+    foreach ($all_gateways as $key => $gateway) {
52
+        if (!empty($wpinv_options[$key . '_title'])) {
53
+            $all_gateways[$key]['checkout_label'] = __($wpinv_options[$key . '_title'], 'invoicing');
54 54
         }
55 55
 
56
-        $gateways[$key] = isset( $wpinv_options[$key . '_ordering'] ) ? $wpinv_options[$key . '_ordering'] : ( isset( $gateway['ordering'] ) ? $gateway['ordering'] : '' );
56
+        $gateways[$key] = isset($wpinv_options[$key . '_ordering']) ? $wpinv_options[$key . '_ordering'] : (isset($gateway['ordering']) ? $gateway['ordering'] : '');
57 57
     }
58 58
 
59
-    asort( $gateways );
59
+    asort($gateways);
60 60
 
61
-    foreach ( $gateways as $gateway => $key ) {
61
+    foreach ($gateways as $gateway => $key) {
62 62
         $gateways[$gateway] = $all_gateways[$gateway];
63 63
     }
64 64
 
65 65
     return $gateways;
66 66
 }
67
-add_filter( 'wpinv_payment_gateways', 'wpinv_payment_gateway_titles', 1000, 1 );
67
+add_filter('wpinv_payment_gateways', 'wpinv_payment_gateway_titles', 1000, 1);
68 68
 
69
-function wpinv_get_enabled_payment_gateways( $sort = false ) {
69
+function wpinv_get_enabled_payment_gateways($sort = false) {
70 70
     $gateways = wpinv_get_payment_gateways();
71
-    $enabled  = wpinv_get_option( 'gateways', false );
71
+    $enabled  = wpinv_get_option('gateways', false);
72 72
 
73 73
     $gateway_list = array();
74 74
 
75
-    foreach ( $gateways as $key => $gateway ) {
76
-        if ( isset( $enabled[ $key ] ) && $enabled[ $key ] == 1 ) {
77
-            $gateway_list[ $key ] = $gateway;
75
+    foreach ($gateways as $key => $gateway) {
76
+        if (isset($enabled[$key]) && $enabled[$key] == 1) {
77
+            $gateway_list[$key] = $gateway;
78 78
         }
79 79
     }
80 80
 
81
-    if ( true === $sort ) {
82
-        uasort( $gateway_list, 'wpinv_sort_gateway_order' );
81
+    if (true === $sort) {
82
+        uasort($gateway_list, 'wpinv_sort_gateway_order');
83 83
         
84 84
         // Reorder our gateways so the default is first
85 85
         $default_gateway_id = wpinv_get_default_gateway();
86 86
 
87
-        if ( wpinv_is_gateway_active( $default_gateway_id ) ) {
88
-            $default_gateway    = array( $default_gateway_id => $gateway_list[ $default_gateway_id ] );
89
-            unset( $gateway_list[ $default_gateway_id ] );
87
+        if (wpinv_is_gateway_active($default_gateway_id)) {
88
+            $default_gateway = array($default_gateway_id => $gateway_list[$default_gateway_id]);
89
+            unset($gateway_list[$default_gateway_id]);
90 90
 
91
-            $gateway_list = array_merge( $default_gateway, $gateway_list );
91
+            $gateway_list = array_merge($default_gateway, $gateway_list);
92 92
         }
93 93
     }
94 94
 
95
-    return apply_filters( 'wpinv_enabled_payment_gateways', $gateway_list );
95
+    return apply_filters('wpinv_enabled_payment_gateways', $gateway_list);
96 96
 }
97 97
 
98
-function wpinv_sort_gateway_order( $a, $b ) {
98
+function wpinv_sort_gateway_order($a, $b) {
99 99
     return $a['ordering'] - $b['ordering'];
100 100
 }
101 101
 
102
-function wpinv_is_gateway_active( $gateway ) {
102
+function wpinv_is_gateway_active($gateway) {
103 103
     $gateways = wpinv_get_enabled_payment_gateways();
104 104
 
105
-    $ret = is_array($gateways) && $gateway ?  array_key_exists( $gateway, $gateways ) : false;
105
+    $ret = is_array($gateways) && $gateway ?  array_key_exists($gateway, $gateways) : false;
106 106
 
107
-    return apply_filters( 'wpinv_is_gateway_active', $ret, $gateway, $gateways );
107
+    return apply_filters('wpinv_is_gateway_active', $ret, $gateway, $gateways);
108 108
 }
109 109
 
110 110
 function wpinv_get_default_gateway() {
111
-    $default = wpinv_get_option( 'default_gateway', 'paypal' );
111
+    $default = wpinv_get_option('default_gateway', 'paypal');
112 112
 
113
-    if ( !wpinv_is_gateway_active( $default ) ) {
113
+    if (!wpinv_is_gateway_active($default)) {
114 114
         $gateways = wpinv_get_enabled_payment_gateways();
115
-        $gateways = array_keys( $gateways );
116
-        $default  = reset( $gateways );
115
+        $gateways = array_keys($gateways);
116
+        $default  = reset($gateways);
117 117
     }
118 118
 
119
-    return apply_filters( 'wpinv_default_gateway', $default );
119
+    return apply_filters('wpinv_default_gateway', $default);
120 120
 }
121 121
 
122
-function wpinv_get_gateway_admin_label( $gateway ) {
122
+function wpinv_get_gateway_admin_label($gateway) {
123 123
     $gateways = wpinv_get_payment_gateways();
124
-    $label    = isset( $gateways[ $gateway ] ) ? $gateways[ $gateway ]['admin_label'] : $gateway;
125
-    $payment  = isset( $_GET['id'] ) ? absint( $_GET['id'] ) : false;
124
+    $label    = isset($gateways[$gateway]) ? $gateways[$gateway]['admin_label'] : $gateway;
125
+    $payment  = isset($_GET['id']) ? absint($_GET['id']) : false;
126 126
 
127
-    if( $gateway == 'manual' && $payment ) {
128
-        if( !( (float)wpinv_payment_total( $payment ) > 0 ) ) {
129
-            $label = __( 'Free Purchase', 'invoicing' );
127
+    if ($gateway == 'manual' && $payment) {
128
+        if (!((float) wpinv_payment_total($payment) > 0)) {
129
+            $label = __('Free Purchase', 'invoicing');
130 130
         }
131 131
     }
132 132
 
133
-    return apply_filters( 'wpinv_gateway_admin_label', $label, $gateway );
133
+    return apply_filters('wpinv_gateway_admin_label', $label, $gateway);
134 134
 }
135 135
 
136
-function wpinv_get_gateway_description( $gateway ) {
136
+function wpinv_get_gateway_description($gateway) {
137 137
     global $wpinv_options;
138 138
 
139
-    $description = ! empty( $wpinv_options[$gateway . '_desc'] ) ? $wpinv_options[$gateway . '_desc'] : '';
139
+    $description = !empty($wpinv_options[$gateway . '_desc']) ? $wpinv_options[$gateway . '_desc'] : '';
140 140
 
141
-    return apply_filters( 'wpinv_gateway_description', $description, $gateway );
141
+    return apply_filters('wpinv_gateway_description', $description, $gateway);
142 142
 }
143 143
 
144
-function wpinv_get_gateway_button_label( $gateway ) {
145
-    return apply_filters( 'wpinv_gateway_' . $gateway . '_button_label', '' );
144
+function wpinv_get_gateway_button_label($gateway) {
145
+    return apply_filters('wpinv_gateway_' . $gateway . '_button_label', '');
146 146
 }
147 147
 
148
-function wpinv_get_gateway_checkout_label( $gateway ) {
148
+function wpinv_get_gateway_checkout_label($gateway) {
149 149
     $gateways = wpinv_get_payment_gateways();
150
-    $label    = isset( $gateways[ $gateway ] ) ? $gateways[ $gateway ]['checkout_label'] : $gateway;
150
+    $label    = isset($gateways[$gateway]) ? $gateways[$gateway]['checkout_label'] : $gateway;
151 151
 
152
-    if( $gateway == 'manual' ) {
153
-        $label = __( 'Manual Payment', 'invoicing' );
152
+    if ($gateway == 'manual') {
153
+        $label = __('Manual Payment', 'invoicing');
154 154
     }
155 155
 
156
-    return apply_filters( 'wpinv_gateway_checkout_label', $label, $gateway );
156
+    return apply_filters('wpinv_gateway_checkout_label', $label, $gateway);
157 157
 }
158 158
 
159
-function wpinv_settings_sections_gateways( $settings ) {
159
+function wpinv_settings_sections_gateways($settings) {
160 160
     $gateways = wpinv_get_payment_gateways();
161 161
     
162 162
     if (!empty($gateways)) {
163
-        foreach  ($gateways as $key => $gateway) {
163
+        foreach ($gateways as $key => $gateway) {
164 164
             $settings[$key] = $gateway['admin_label'];
165 165
         }
166 166
     }
167 167
     
168 168
     return $settings;    
169 169
 }
170
-add_filter( 'wpinv_settings_sections_gateways', 'wpinv_settings_sections_gateways', 10, 1 );
170
+add_filter('wpinv_settings_sections_gateways', 'wpinv_settings_sections_gateways', 10, 1);
171 171
 
172
-function wpinv_settings_gateways( $settings ) {
172
+function wpinv_settings_gateways($settings) {
173 173
     $gateways = wpinv_get_payment_gateways();
174 174
     
175 175
     if (!empty($gateways)) {
176
-        foreach  ($gateways as $key => $gateway) {
176
+        foreach ($gateways as $key => $gateway) {
177 177
             $setting = array();
178 178
             $setting[$key . '_header'] = array(
179 179
                     'id'   => 'gateway_header',
180
-                    'name' => '<h3>' . wp_sprintf( __( '%s Settings', 'invoicing' ), $gateway['admin_label'] ) . '</h3>',
180
+                    'name' => '<h3>' . wp_sprintf(__('%s Settings', 'invoicing'), $gateway['admin_label']) . '</h3>',
181 181
                     'custom' => $key,
182 182
                     'type' => 'gateway_header',
183 183
                 );
184 184
             $setting[$key . '_active'] = array(
185 185
                     'id'   => $key . '_active',
186
-                    'name' => __( 'Active', 'invoicing' ),
187
-                    'desc' => wp_sprintf( __( 'Enable %s', 'invoicing' ), $gateway['admin_label'] ),
186
+                    'name' => __('Active', 'invoicing'),
187
+                    'desc' => wp_sprintf(__('Enable %s', 'invoicing'), $gateway['admin_label']),
188 188
                     'type' => 'checkbox',
189 189
                 );
190 190
                 
191 191
             $setting[$key . '_title'] = array(
192 192
                     'id'   => $key . '_title',
193
-                    'name' => __( 'Title', 'invoicing' ),
194
-                    'desc' => __( 'This controls the title which the user sees during checkout.', 'invoicing' ),
193
+                    'name' => __('Title', 'invoicing'),
194
+                    'desc' => __('This controls the title which the user sees during checkout.', 'invoicing'),
195 195
                     'type' => 'text',
196 196
                     'std' => isset($gateway['checkout_label']) ? $gateway['checkout_label'] : ''
197 197
                 );
198 198
             
199 199
             $setting[$key . '_desc'] = array(
200 200
                     'id'   => $key . '_desc',
201
-                    'name' => __( 'Description', 'invoicing' ),
202
-                    'desc' => __( 'This controls the description which the user sees during checkout.', 'invoicing' ),
201
+                    'name' => __('Description', 'invoicing'),
202
+                    'desc' => __('This controls the description which the user sees during checkout.', 'invoicing'),
203 203
                     'type' => 'text',
204 204
                     'size' => 'large'
205 205
                 );
206 206
                 
207 207
             $setting[$key . '_ordering'] = array(
208 208
                     'id'   => $key . '_ordering',
209
-                    'name' => __( 'Display Order', 'invoicing' ),
209
+                    'name' => __('Display Order', 'invoicing'),
210 210
                     'type' => 'number',
211 211
                     'size' => 'small',
212 212
                     'std'  => isset($gateway['ordering']) ? $gateway['ordering'] : '10',
@@ -215,8 +215,8 @@  discard block
 block discarded – undo
215 215
                     'step' => '1'
216 216
                 );
217 217
                 
218
-            $setting = apply_filters( 'wpinv_gateway_settings', $setting, $key );
219
-            $setting = apply_filters( 'wpinv_gateway_settings_' . $key, $setting );
218
+            $setting = apply_filters('wpinv_gateway_settings', $setting, $key);
219
+            $setting = apply_filters('wpinv_gateway_settings_' . $key, $setting);
220 220
             
221 221
             $settings[$key] = $setting;
222 222
         }
@@ -224,106 +224,106 @@  discard block
 block discarded – undo
224 224
     
225 225
     return $settings;    
226 226
 }
227
-add_filter( 'wpinv_settings_gateways', 'wpinv_settings_gateways', 10, 1 );
227
+add_filter('wpinv_settings_gateways', 'wpinv_settings_gateways', 10, 1);
228 228
 
229
-function wpinv_gateway_header_callback( $args ) {
230
-    echo '<input type="hidden" id="wpinv_settings[save_gateway]" name="wpinv_settings[save_gateway]" value="' . esc_attr( $args['custom'] ) . '" />';
229
+function wpinv_gateway_header_callback($args) {
230
+    echo '<input type="hidden" id="wpinv_settings[save_gateway]" name="wpinv_settings[save_gateway]" value="' . esc_attr($args['custom']) . '" />';
231 231
 }
232 232
 
233
-function wpinv_get_gateway_supports( $gateway ) {
233
+function wpinv_get_gateway_supports($gateway) {
234 234
     $gateways = wpinv_get_enabled_payment_gateways();
235
-    $supports = isset( $gateways[ $gateway ]['supports'] ) ? $gateways[ $gateway ]['supports'] : array();
236
-    return apply_filters( 'wpinv_gateway_supports', $supports, $gateway );
235
+    $supports = isset($gateways[$gateway]['supports']) ? $gateways[$gateway]['supports'] : array();
236
+    return apply_filters('wpinv_gateway_supports', $supports, $gateway);
237 237
 }
238 238
 
239
-function wpinv_gateway_supports_buy_now( $gateway ) {
240
-    $supports = wpinv_get_gateway_supports( $gateway );
241
-    $ret = in_array( 'buy_now', $supports );
242
-    return apply_filters( 'wpinv_gateway_supports_buy_now', $ret, $gateway );
239
+function wpinv_gateway_supports_buy_now($gateway) {
240
+    $supports = wpinv_get_gateway_supports($gateway);
241
+    $ret = in_array('buy_now', $supports);
242
+    return apply_filters('wpinv_gateway_supports_buy_now', $ret, $gateway);
243 243
 }
244 244
 
245 245
 function wpinv_shop_supports_buy_now() {
246 246
     $gateways = wpinv_get_enabled_payment_gateways();
247 247
     $ret      = false;
248 248
 
249
-    if ( !wpinv_use_taxes()  && $gateways ) {
250
-        foreach ( $gateways as $gateway_id => $gateway ) {
251
-            if ( wpinv_gateway_supports_buy_now( $gateway_id ) ) {
249
+    if (!wpinv_use_taxes() && $gateways) {
250
+        foreach ($gateways as $gateway_id => $gateway) {
251
+            if (wpinv_gateway_supports_buy_now($gateway_id)) {
252 252
                 $ret = true;
253 253
                 break;
254 254
             }
255 255
         }
256 256
     }
257 257
 
258
-    return apply_filters( 'wpinv_shop_supports_buy_now', $ret );
258
+    return apply_filters('wpinv_shop_supports_buy_now', $ret);
259 259
 }
260 260
 
261
-function wpinv_send_to_gateway( $gateway, $payment_data ) {
262
-    $payment_data['gateway_nonce'] = wp_create_nonce( 'wpi-gateway' );
261
+function wpinv_send_to_gateway($gateway, $payment_data) {
262
+    $payment_data['gateway_nonce'] = wp_create_nonce('wpi-gateway');
263 263
 
264 264
     // $gateway must match the ID used when registering the gateway
265
-    do_action( 'wpinv_gateway_' . $gateway, $payment_data );
265
+    do_action('wpinv_gateway_' . $gateway, $payment_data);
266 266
 }
267 267
 
268 268
 function wpinv_show_gateways() {
269 269
     $gateways = wpinv_get_enabled_payment_gateways();
270 270
     $show_gateways = false;
271 271
 
272
-    $chosen_gateway = isset( $_GET['payment-mode'] ) ? preg_replace('/[^a-zA-Z0-9-_]+/', '', $_GET['payment-mode'] ) : false;
272
+    $chosen_gateway = isset($_GET['payment-mode']) ? preg_replace('/[^a-zA-Z0-9-_]+/', '', $_GET['payment-mode']) : false;
273 273
 
274
-    if ( count( $gateways ) > 1 && empty( $chosen_gateway ) ) {
274
+    if (count($gateways) > 1 && empty($chosen_gateway)) {
275 275
         $show_gateways = true;
276
-        if ( wpinv_get_cart_total() <= 0 ) {
276
+        if (wpinv_get_cart_total() <= 0) {
277 277
             $show_gateways = false;
278 278
         }
279 279
     }
280 280
     
281
-    if ( !$show_gateways && wpinv_cart_has_recurring_item() ) {
281
+    if (!$show_gateways && wpinv_cart_has_recurring_item()) {
282 282
         $show_gateways = true;
283 283
     }
284 284
 
285
-    return apply_filters( 'wpinv_show_gateways', $show_gateways );
285
+    return apply_filters('wpinv_show_gateways', $show_gateways);
286 286
 }
287 287
 
288
-function wpinv_get_chosen_gateway( $invoice_id = 0 ) {
289
-	$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
288
+function wpinv_get_chosen_gateway($invoice_id = 0) {
289
+	$gateways = array_keys(wpinv_get_enabled_payment_gateways());
290 290
 
291 291
     $chosen = false;
292
-    if ( $invoice_id > 0 && $invoice = wpinv_get_invoice( $invoice_id ) ) {
292
+    if ($invoice_id > 0 && $invoice = wpinv_get_invoice($invoice_id)) {
293 293
         $chosen = $invoice->get_gateway();
294 294
     }
295 295
 
296
-	$chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
296
+	$chosen = isset($_REQUEST['payment-mode']) ? sanitize_text_field($_REQUEST['payment-mode']) : $chosen;
297 297
 
298
-	if ( false !== $chosen ) {
299
-		$chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen );
298
+	if (false !== $chosen) {
299
+		$chosen = preg_replace('/[^a-zA-Z0-9-_]+/', '', $chosen);
300 300
 	}
301 301
 
302
-	if ( ! empty ( $chosen ) ) {
303
-		$enabled_gateway = urldecode( $chosen );
304
-	} else if (  !empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
302
+	if (!empty ($chosen)) {
303
+		$enabled_gateway = urldecode($chosen);
304
+	} else if (!empty($invoice) && (float) $invoice->get_subtotal() <= 0) {
305 305
 		$enabled_gateway = 'manual';
306 306
 	} else {
307 307
 		$enabled_gateway = wpinv_get_default_gateway();
308 308
 	}
309 309
     
310
-    if ( !wpinv_is_gateway_active( $enabled_gateway ) && !empty( $gateways ) ) {
311
-        if(wpinv_is_gateway_active( wpinv_get_default_gateway()) ){
310
+    if (!wpinv_is_gateway_active($enabled_gateway) && !empty($gateways)) {
311
+        if (wpinv_is_gateway_active(wpinv_get_default_gateway())) {
312 312
             $enabled_gateway = wpinv_get_default_gateway();
313
-        }else{
313
+        } else {
314 314
             $enabled_gateway = $gateways[0];
315 315
         }
316 316
 
317 317
     }
318 318
 
319
-	return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
319
+	return apply_filters('wpinv_chosen_gateway', $enabled_gateway);
320 320
 }
321 321
 
322
-function wpinv_record_gateway_error( $title = '', $message = '', $parent = 0 ) {
323
-    return wpinv_error_log( $message, $title );
322
+function wpinv_record_gateway_error($title = '', $message = '', $parent = 0) {
323
+    return wpinv_error_log($message, $title);
324 324
 }
325 325
 
326
-function wpinv_count_sales_by_gateway( $gateway_id = 'paypal', $status = 'publish' ) {
326
+function wpinv_count_sales_by_gateway($gateway_id = 'paypal', $status = 'publish') {
327 327
 	$ret  = 0;
328 328
 	$args = array(
329 329
 		'meta_key'    => '_wpinv_gateway',
@@ -334,48 +334,48 @@  discard block
 block discarded – undo
334 334
 		'fields'      => 'ids'
335 335
 	);
336 336
 
337
-	$payments = new WP_Query( $args );
337
+	$payments = new WP_Query($args);
338 338
 
339
-	if( $payments )
339
+	if ($payments)
340 340
 		$ret = $payments->post_count;
341 341
 	return $ret;
342 342
 }
343 343
 
344
-function wpinv_settings_update_gateways( $input ) {
344
+function wpinv_settings_update_gateways($input) {
345 345
     global $wpinv_options;
346 346
     
347
-    if ( !empty( $input['save_gateway'] ) ) {
348
-        $gateways = wpinv_get_option( 'gateways', false );
347
+    if (!empty($input['save_gateway'])) {
348
+        $gateways = wpinv_get_option('gateways', false);
349 349
         $gateways = !empty($gateways) ? $gateways : array();
350 350
         $gateway = $input['save_gateway'];
351 351
         
352
-        if ( !empty( $input[$gateway . '_active'] ) ) {
352
+        if (!empty($input[$gateway . '_active'])) {
353 353
             $gateways[$gateway] = 1;
354 354
         } else {
355
-            if ( isset( $gateways[$gateway] ) ) {
356
-                unset( $gateways[$gateway] );
355
+            if (isset($gateways[$gateway])) {
356
+                unset($gateways[$gateway]);
357 357
             }
358 358
         }
359 359
         
360 360
         $input['gateways'] = $gateways;
361 361
     }
362 362
     
363
-    if ( !empty( $input['default_gateway'] ) ) {
363
+    if (!empty($input['default_gateway'])) {
364 364
         $gateways = wpinv_get_payment_gateways();
365 365
         
366
-        foreach ( $gateways as $key => $gateway ) {
367
-            $active   = 0;
368
-            if ( !empty( $input['gateways'] ) && !empty( $input['gateways'][$key] ) ) {
366
+        foreach ($gateways as $key => $gateway) {
367
+            $active = 0;
368
+            if (!empty($input['gateways']) && !empty($input['gateways'][$key])) {
369 369
                 $active = 1;
370 370
             }
371 371
             
372 372
             $input[$key . '_active'] = $active;
373 373
             
374
-            if ( empty( $wpinv_options[$key . '_title'] ) ) {
374
+            if (empty($wpinv_options[$key . '_title'])) {
375 375
                 $input[$key . '_title'] = $gateway['checkout_label'];
376 376
             }
377 377
             
378
-            if ( !isset( $wpinv_options[$key . '_ordering'] ) && isset( $gateway['ordering'] ) ) {
378
+            if (!isset($wpinv_options[$key . '_ordering']) && isset($gateway['ordering'])) {
379 379
                 $input[$key . '_ordering'] = $gateway['ordering'];
380 380
             }
381 381
         }
@@ -383,27 +383,27 @@  discard block
 block discarded – undo
383 383
     
384 384
     return $input;
385 385
 }
386
-add_filter( 'wpinv_settings_tab_gateways_sanitize', 'wpinv_settings_update_gateways', 10, 1 );
386
+add_filter('wpinv_settings_tab_gateways_sanitize', 'wpinv_settings_update_gateways', 10, 1);
387 387
 
388 388
 // PayPal Standard settings
389
-function wpinv_gateway_settings_paypal( $setting ) {    
390
-    $setting['paypal_active']['desc'] = $setting['paypal_active']['desc'] . ' ' . __( '( Supported Currencies: AUD, BRL, CAD, CZK, DKK, EUR, HKD, HUF, ILS, JPY, MYR, MXN, NOK, NZD, PHP, PLN, GBP, SGD, SEK, CHF, TWD, THB, USD )', 'invoicing' );
391
-    $setting['paypal_desc']['std'] = __( 'Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing' );
389
+function wpinv_gateway_settings_paypal($setting) {    
390
+    $setting['paypal_active']['desc'] = $setting['paypal_active']['desc'] . ' ' . __('( Supported Currencies: AUD, BRL, CAD, CZK, DKK, EUR, HKD, HUF, ILS, JPY, MYR, MXN, NOK, NZD, PHP, PLN, GBP, SGD, SEK, CHF, TWD, THB, USD )', 'invoicing');
391
+    $setting['paypal_desc']['std'] = __('Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing');
392 392
     
393 393
     $setting['paypal_sandbox'] = array(
394 394
             'type' => 'checkbox',
395 395
             'id'   => 'paypal_sandbox',
396
-            'name' => __( 'PayPal Sandbox', 'invoicing' ),
397
-            'desc' => __( 'PayPal sandbox can be used to test payments.', 'invoicing' ),
396
+            'name' => __('PayPal Sandbox', 'invoicing'),
397
+            'desc' => __('PayPal sandbox can be used to test payments.', 'invoicing'),
398 398
             'std'  => 1
399 399
         );
400 400
         
401 401
     $setting['paypal_email'] = array(
402 402
             'type' => 'text',
403 403
             'id'   => 'paypal_email',
404
-            'name' => __( 'PayPal Email', 'invoicing' ),
405
-            'desc' => __( 'Please enter your PayPal account\'s email address. Ex: [email protected]', 'invoicing' ),
406
-            'std' => __( '[email protected]', 'invoicing' ),
404
+            'name' => __('PayPal Email', 'invoicing'),
405
+            'desc' => __('Please enter your PayPal account\'s email address. Ex: [email protected]', 'invoicing'),
406
+            'std' => __('[email protected]', 'invoicing'),
407 407
         );
408 408
     /*
409 409
     $setting['paypal_ipn_url'] = array(
@@ -417,139 +417,139 @@  discard block
 block discarded – undo
417 417
         
418 418
     return $setting;
419 419
 }
420
-add_filter( 'wpinv_gateway_settings_paypal', 'wpinv_gateway_settings_paypal', 10, 1 );
420
+add_filter('wpinv_gateway_settings_paypal', 'wpinv_gateway_settings_paypal', 10, 1);
421 421
 
422 422
 // Pre Bank Transfer settings
423
-function wpinv_gateway_settings_bank_transfer( $setting ) {
424
-    $setting['bank_transfer_desc']['std'] = __( 'Make your payment directly into our bank account. Please use your Invoice ID as the payment reference. Your invoice won\'t be processed until the funds have cleared in our account.', 'invoicing' );
423
+function wpinv_gateway_settings_bank_transfer($setting) {
424
+    $setting['bank_transfer_desc']['std'] = __('Make your payment directly into our bank account. Please use your Invoice ID as the payment reference. Your invoice won\'t be processed until the funds have cleared in our account.', 'invoicing');
425 425
     
426 426
     $setting['bank_transfer_ac_name'] = array(
427 427
             'type' => 'text',
428 428
             'id' => 'bank_transfer_ac_name',
429
-            'name' => __( 'Account Name', 'invoicing' ),
430
-            'desc' => __( 'Enter the bank account name to which you want to transfer payment.', 'invoicing' ),
431
-            'std'  =>  __( 'Mr. John Martin', 'invoicing' ),
429
+            'name' => __('Account Name', 'invoicing'),
430
+            'desc' => __('Enter the bank account name to which you want to transfer payment.', 'invoicing'),
431
+            'std'  =>  __('Mr. John Martin', 'invoicing'),
432 432
         );
433 433
     
434 434
     $setting['bank_transfer_ac_no'] = array(
435 435
             'type' => 'text',
436 436
             'id' => 'bank_transfer_ac_no',
437
-            'name' => __( 'Account Number', 'invoicing' ),
438
-            'desc' => __( 'Enter your bank account number.', 'invoicing' ),
439
-            'std'  =>  __( 'TEST1234567890', 'invoicing' ),
437
+            'name' => __('Account Number', 'invoicing'),
438
+            'desc' => __('Enter your bank account number.', 'invoicing'),
439
+            'std'  =>  __('TEST1234567890', 'invoicing'),
440 440
         );
441 441
     
442 442
     $setting['bank_transfer_bank_name'] = array(
443 443
             'type' => 'text',
444 444
             'id'   => 'bank_transfer_bank_name',
445
-            'name' => __( 'Bank Name', 'invoicing' ),
446
-            'desc' => __( 'Enter the bank name to which you want to transfer payment.', 'invoicing' ),
447
-            'std' => __( 'ICICI Bank', 'invoicing' ),
445
+            'name' => __('Bank Name', 'invoicing'),
446
+            'desc' => __('Enter the bank name to which you want to transfer payment.', 'invoicing'),
447
+            'std' => __('ICICI Bank', 'invoicing'),
448 448
         );
449 449
     
450 450
     $setting['bank_transfer_ifsc'] = array(
451 451
             'type' => 'text',
452 452
             'id'   => 'bank_transfer_ifsc',
453
-            'name' => __( 'IFSC Code', 'invoicing' ),
454
-            'desc' => __( 'Enter your bank IFSC code.', 'invoicing' ),
455
-            'std'  =>  __( 'ICIC0001234', 'invoicing' ),
453
+            'name' => __('IFSC Code', 'invoicing'),
454
+            'desc' => __('Enter your bank IFSC code.', 'invoicing'),
455
+            'std'  =>  __('ICIC0001234', 'invoicing'),
456 456
         );
457 457
         
458 458
     $setting['bank_transfer_iban'] = array(
459 459
             'type' => 'text',
460 460
             'id'   => 'bank_transfer_iban',
461
-            'name' => __( 'IBAN', 'invoicing' ),
462
-            'desc' => __( 'Enter your International Bank Account Number(IBAN).', 'invoicing' ),
463
-            'std'  =>  __( 'GB29NWBK60161331926819', 'invoicing' ),
461
+            'name' => __('IBAN', 'invoicing'),
462
+            'desc' => __('Enter your International Bank Account Number(IBAN).', 'invoicing'),
463
+            'std'  =>  __('GB29NWBK60161331926819', 'invoicing'),
464 464
         );
465 465
         
466 466
     $setting['bank_transfer_bic'] = array(
467 467
             'type' => 'text',
468 468
             'id'   => 'bank_transfer_bic',
469
-            'name' => __( 'BIC/Swift Code', 'invoicing' ),
470
-            'std'  =>  __( 'ICICGB2L129', 'invoicing' ),
469
+            'name' => __('BIC/Swift Code', 'invoicing'),
470
+            'std'  =>  __('ICICGB2L129', 'invoicing'),
471 471
         );
472 472
 
473 473
     $setting['bank_transfer_sort_code'] = array(
474 474
         'type' => 'text',
475 475
         'id'   => 'bank_transfer_sort_code',
476
-        'name' => __( 'Sort Code', 'invoicing' ),
477
-        'std'  =>  __( '12-34-56', 'invoicing' ),
476
+        'name' => __('Sort Code', 'invoicing'),
477
+        'std'  =>  __('12-34-56', 'invoicing'),
478 478
     );
479 479
         
480 480
     $setting['bank_transfer_info'] = array(
481 481
             'id'   => 'bank_transfer_info',
482
-            'name' => __( 'Instructions', 'invoicing' ),
483
-            'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
482
+            'name' => __('Instructions', 'invoicing'),
483
+            'desc' => __('Instructions that will be added to the thank you page and emails.', 'invoicing'),
484 484
             'type' => 'textarea',
485
-            'std' => __( 'Make your payment directly into our bank account. Please use your Invoice ID as the payment reference. Your invoice won\'t be processed until the funds have cleared in our account.', 'invoicing' ),
485
+            'std' => __('Make your payment directly into our bank account. Please use your Invoice ID as the payment reference. Your invoice won\'t be processed until the funds have cleared in our account.', 'invoicing'),
486 486
             'cols' => 37,
487 487
             'rows' => 5
488 488
         );
489 489
         
490 490
     return $setting;
491 491
 }
492
-add_filter( 'wpinv_gateway_settings_bank_transfer', 'wpinv_gateway_settings_bank_transfer', 10, 1 );
492
+add_filter('wpinv_gateway_settings_bank_transfer', 'wpinv_gateway_settings_bank_transfer', 10, 1);
493 493
 
494 494
 // Authorize.Net settings
495
-function wpinv_gateway_settings_authorizenet( $setting ) {
496
-    $setting['authorizenet_active']['desc'] = $setting['authorizenet_active']['desc'] . ' ' . __( '( Supported Currencies: AUD, CAD, CHF, DKK, EUR, GBP, JPY, NOK, NZD, PLN, SEK, USD, ZAR )', 'invoicing' );
497
-    $setting['authorizenet_desc']['std'] = __( 'Pay using a Authorize.Net to process Credit card / Debit card transactions.', 'invoicing' );
495
+function wpinv_gateway_settings_authorizenet($setting) {
496
+    $setting['authorizenet_active']['desc'] = $setting['authorizenet_active']['desc'] . ' ' . __('( Supported Currencies: AUD, CAD, CHF, DKK, EUR, GBP, JPY, NOK, NZD, PLN, SEK, USD, ZAR )', 'invoicing');
497
+    $setting['authorizenet_desc']['std'] = __('Pay using a Authorize.Net to process Credit card / Debit card transactions.', 'invoicing');
498 498
     
499 499
     $setting['authorizenet_sandbox'] = array(
500 500
             'type' => 'checkbox',
501 501
             'id'   => 'authorizenet_sandbox',
502
-            'name' => __( 'Authorize.Net Test Mode', 'invoicing' ),
503
-            'desc' => __( 'Enable Authorize.Net test mode to test payments.', 'invoicing' ),
502
+            'name' => __('Authorize.Net Test Mode', 'invoicing'),
503
+            'desc' => __('Enable Authorize.Net test mode to test payments.', 'invoicing'),
504 504
             'std'  => 1
505 505
         );
506 506
         
507 507
     $setting['authorizenet_login_id'] = array(
508 508
             'type' => 'text',
509 509
             'id'   => 'authorizenet_login_id',
510
-            'name' => __( 'API Login ID', 'invoicing' ),
511
-            'desc' => __( 'API Login ID can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 2j4rBekUnD', 'invoicing' ),
510
+            'name' => __('API Login ID', 'invoicing'),
511
+            'desc' => __('API Login ID can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 2j4rBekUnD', 'invoicing'),
512 512
             'std' => '2j4rBekUnD',
513 513
         );
514 514
     
515 515
     $setting['authorizenet_transaction_key'] = array(
516 516
             'type' => 'text',
517 517
             'id'   => 'authorizenet_transaction_key',
518
-            'name' => __( 'Transaction Key', 'invoicing' ),
519
-            'desc' => __( 'Transaction Key can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 4vyBUOJgR74679xa', 'invoicing' ),
518
+            'name' => __('Transaction Key', 'invoicing'),
519
+            'desc' => __('Transaction Key can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 4vyBUOJgR74679xa', 'invoicing'),
520 520
             'std' => '4vyBUOJgR74679xa',
521 521
         );
522 522
         
523 523
     $setting['authorizenet_md5_hash'] = array(
524 524
             'type' => 'text',
525 525
             'id'   => 'authorizenet_md5_hash',
526
-            'name' => __( 'MD5-Hash', 'invoicing' ),
527
-            'desc' => __( 'The MD5 Hash security feature allows to authenticate transaction responses from the Authorize.Net for recurring payments. It can be obtained from Authorize.Net Account > Settings > Security Settings > General Settings > MD5 Hash.', 'invoicing' ),
526
+            'name' => __('MD5-Hash', 'invoicing'),
527
+            'desc' => __('The MD5 Hash security feature allows to authenticate transaction responses from the Authorize.Net for recurring payments. It can be obtained from Authorize.Net Account > Settings > Security Settings > General Settings > MD5 Hash.', 'invoicing'),
528 528
             'std' => '',
529 529
         );
530 530
 
531 531
     $setting['authorizenet_transaction_type'] = array(
532 532
         'id'          => 'authorizenet_transaction_type',
533
-        'name'        => __( 'Transaction Type', 'invoicing' ),
534
-        'desc'        => __( 'Choose transaction type.', 'invoicing' ),
533
+        'name'        => __('Transaction Type', 'invoicing'),
534
+        'desc'        => __('Choose transaction type.', 'invoicing'),
535 535
         'type'        => 'select',
536 536
         'class'       => 'wpi_select2',
537 537
         'options'     => array(
538
-            'authorize_capture' => __( 'Authorize And Capture', 'invoicing' ),
539
-            'authorize_only' => __( 'Authorize Only', 'invoicing' ),
538
+            'authorize_capture' => __('Authorize And Capture', 'invoicing'),
539
+            'authorize_only' => __('Authorize Only', 'invoicing'),
540 540
         ),
541 541
         'std'         => 'authorize_capture'
542 542
     );
543 543
 
544 544
     $setting['authorizenet_transaction_type_recurring'] = array(
545 545
         'id'          => 'authorizenet_transaction_type_recurring',
546
-        'name'        => __( 'Transaction Type for Recurring', 'invoicing' ),
547
-        'desc'        => __( 'Choose transaction type for recurring payments.', 'invoicing' ),
546
+        'name'        => __('Transaction Type for Recurring', 'invoicing'),
547
+        'desc'        => __('Choose transaction type for recurring payments.', 'invoicing'),
548 548
         'type'        => 'select',
549 549
         'class'       => 'wpi_select2',
550 550
         'options'     => array(
551
-            'authorize_capture' => __( 'Authorize And Capture', 'invoicing' ),
552
-            'authorize_only' => __( 'Authorize Only', 'invoicing' ),
551
+            'authorize_capture' => __('Authorize And Capture', 'invoicing'),
552
+            'authorize_only' => __('Authorize Only', 'invoicing'),
553 553
         ),
554 554
         'std'         => 'authorize_only'
555 555
     );
@@ -557,9 +557,9 @@  discard block
 block discarded – undo
557 557
     $setting['authorizenet_ipn_url'] = array(
558 558
             'type' => 'ipn_url',
559 559
             'id'   => 'authorizenet_ipn_url',
560
-            'name' => __( 'Silent Post URL', 'invoicing' ),
561
-            'std' => wpinv_get_ipn_url( 'authorizenet' ),
562
-            'desc' => __( 'If you are accepting recurring payments then you must set this url at Authorize.Net Account > Settings > Transaction Format Settings > Transaction Response Settings > Silent Post URL.', 'invoicing' ),
560
+            'name' => __('Silent Post URL', 'invoicing'),
561
+            'std' => wpinv_get_ipn_url('authorizenet'),
562
+            'desc' => __('If you are accepting recurring payments then you must set this url at Authorize.Net Account > Settings > Transaction Format Settings > Transaction Response Settings > Silent Post URL.', 'invoicing'),
563 563
             'size' => 'large',
564 564
             'custom' => 'authorizenet',
565 565
             'readonly' => true
@@ -567,26 +567,26 @@  discard block
 block discarded – undo
567 567
         
568 568
     return $setting;
569 569
 }
570
-add_filter( 'wpinv_gateway_settings_authorizenet', 'wpinv_gateway_settings_authorizenet', 10, 1 );
570
+add_filter('wpinv_gateway_settings_authorizenet', 'wpinv_gateway_settings_authorizenet', 10, 1);
571 571
 
572 572
 // Worldpay settings
573
-function wpinv_gateway_settings_worldpay( $setting ) {
574
-    $setting['worldpay_active']['desc'] = $setting['worldpay_active']['desc'] . ' ' . __( '( Supported Currencies: AUD, ARS, CAD, CHF, DKK, EUR, HKD, MYR, GBP, NZD, NOK, SGD, LKR, SEK, TRY, USD, ZAR )', 'invoicing' );
575
-    $setting['worldpay_desc']['std'] = __( 'Pay using a Worldpay account to process Credit card / Debit card transactions.', 'invoicing' );
573
+function wpinv_gateway_settings_worldpay($setting) {
574
+    $setting['worldpay_active']['desc'] = $setting['worldpay_active']['desc'] . ' ' . __('( Supported Currencies: AUD, ARS, CAD, CHF, DKK, EUR, HKD, MYR, GBP, NZD, NOK, SGD, LKR, SEK, TRY, USD, ZAR )', 'invoicing');
575
+    $setting['worldpay_desc']['std'] = __('Pay using a Worldpay account to process Credit card / Debit card transactions.', 'invoicing');
576 576
     
577 577
     $setting['worldpay_sandbox'] = array(
578 578
             'type' => 'checkbox',
579 579
             'id'   => 'worldpay_sandbox',
580
-            'name' => __( 'Worldpay Test Mode', 'invoicing' ),
581
-            'desc' => __( 'This provides a special Test Environment to enable you to test your installation and integration to your website before going live.', 'invoicing' ),
580
+            'name' => __('Worldpay Test Mode', 'invoicing'),
581
+            'desc' => __('This provides a special Test Environment to enable you to test your installation and integration to your website before going live.', 'invoicing'),
582 582
             'std'  => 1
583 583
         );
584 584
         
585 585
     $setting['worldpay_instId'] = array(
586 586
             'type' => 'text',
587 587
             'id'   => 'worldpay_instId',
588
-            'name' => __( 'Installation Id', 'invoicing' ),
589
-            'desc' => __( 'Your installation id. Ex: 211616', 'invoicing' ),
588
+            'name' => __('Installation Id', 'invoicing'),
589
+            'desc' => __('Your installation id. Ex: 211616', 'invoicing'),
590 590
             'std' => '211616',
591 591
         );
592 592
     /*
@@ -602,9 +602,9 @@  discard block
 block discarded – undo
602 602
     $setting['worldpay_ipn_url'] = array(
603 603
             'type' => 'ipn_url',
604 604
             'id'   => 'worldpay_ipn_url',
605
-            'name' => __( 'Worldpay Callback Url', 'invoicing' ),
606
-            'std' => wpinv_get_ipn_url( 'worldpay' ),
607
-            'desc' => wp_sprintf( __( 'Login to your Worldpay Merchant Interface then enable Payment Response & Shopper Response. Next, go to the Payment Response URL field and type "%s" or "%s" for a dynamic payment response.', 'invoicing' ), '<font style="color:#000;font-style:normal">' . wpinv_get_ipn_url( 'worldpay' ) . '</font>', '<font style="color:#000;font-style:normal">&lt;wpdisplay item=MC_callback&gt;</font>' ),
605
+            'name' => __('Worldpay Callback Url', 'invoicing'),
606
+            'std' => wpinv_get_ipn_url('worldpay'),
607
+            'desc' => wp_sprintf(__('Login to your Worldpay Merchant Interface then enable Payment Response & Shopper Response. Next, go to the Payment Response URL field and type "%s" or "%s" for a dynamic payment response.', 'invoicing'), '<font style="color:#000;font-style:normal">' . wpinv_get_ipn_url('worldpay') . '</font>', '<font style="color:#000;font-style:normal">&lt;wpdisplay item=MC_callback&gt;</font>'),
608 608
             'size' => 'large',
609 609
             'custom' => 'worldpay',
610 610
             'readonly' => true
@@ -612,99 +612,99 @@  discard block
 block discarded – undo
612 612
         
613 613
     return $setting;
614 614
 }
615
-add_filter( 'wpinv_gateway_settings_worldpay', 'wpinv_gateway_settings_worldpay', 10, 1 );
615
+add_filter('wpinv_gateway_settings_worldpay', 'wpinv_gateway_settings_worldpay', 10, 1);
616 616
 
617
-function wpinv_ipn_url_callback( $args ) {    
618
-    $sanitize_id = wpinv_sanitize_key( $args['id'] );
617
+function wpinv_ipn_url_callback($args) {    
618
+    $sanitize_id = wpinv_sanitize_key($args['id']);
619 619
     
620 620
     $attrs = $args['readonly'] ? ' readonly' : '';
621 621
 
622
-    $html = '<input style="background-color:#fefefe" type="text" ' . $attrs . ' value="' . esc_attr( $args['std'] ) . '" name="wpinv_settings[' . $sanitize_id . ']" id="wpinv_settings[' . $sanitize_id . ']" class="large-text">';
623
-    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']">'  . $args['desc'] . '</label>';
622
+    $html = '<input style="background-color:#fefefe" type="text" ' . $attrs . ' value="' . esc_attr($args['std']) . '" name="wpinv_settings[' . $sanitize_id . ']" id="wpinv_settings[' . $sanitize_id . ']" class="large-text">';
623
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']">' . $args['desc'] . '</label>';
624 624
 
625 625
     echo $html;
626 626
 }
627 627
 
628
-function wpinv_is_test_mode( $gateway = '' ) {
629
-    if ( empty( $gateway ) ) {
628
+function wpinv_is_test_mode($gateway = '') {
629
+    if (empty($gateway)) {
630 630
         return false;
631 631
     }
632 632
     
633
-    $is_test_mode = wpinv_get_option( $gateway . '_sandbox', false );
633
+    $is_test_mode = wpinv_get_option($gateway . '_sandbox', false);
634 634
     
635
-    return apply_filters( 'wpinv_is_test_mode', $is_test_mode, $gateway );
635
+    return apply_filters('wpinv_is_test_mode', $is_test_mode, $gateway);
636 636
 }
637 637
 
638
-function wpinv_get_ipn_url( $gateway = '', $args = array() ) {
639
-    $data = array( 'wpi-listener' => 'IPN' );
638
+function wpinv_get_ipn_url($gateway = '', $args = array()) {
639
+    $data = array('wpi-listener' => 'IPN');
640 640
     
641
-    if ( !empty( $gateway ) ) {
642
-        $data['wpi-gateway'] = wpinv_sanitize_key( $gateway );
641
+    if (!empty($gateway)) {
642
+        $data['wpi-gateway'] = wpinv_sanitize_key($gateway);
643 643
     }
644 644
     
645
-    $args = !empty( $args ) && is_array( $args ) ? array_merge( $data, $args ) : $data;
645
+    $args = !empty($args) && is_array($args) ? array_merge($data, $args) : $data;
646 646
     
647
-    $ipn_url = add_query_arg( $args,  home_url( 'index.php' ) );
647
+    $ipn_url = add_query_arg($args, home_url('index.php'));
648 648
     
649
-    return apply_filters( 'wpinv_ipn_url', $ipn_url );
649
+    return apply_filters('wpinv_ipn_url', $ipn_url);
650 650
 }
651 651
 
652 652
 function wpinv_listen_for_payment_ipn() {
653 653
     // Regular PayPal IPN
654
-    if ( isset( $_GET['wpi-listener'] ) && $_GET['wpi-listener'] == 'IPN' ) {
655
-        do_action( 'wpinv_verify_payment_ipn' );
654
+    if (isset($_GET['wpi-listener']) && $_GET['wpi-listener'] == 'IPN') {
655
+        do_action('wpinv_verify_payment_ipn');
656 656
         
657
-        if ( !empty( $_GET['wpi-gateway'] ) ) {
658
-            wpinv_error_log( sanitize_text_field( $_GET['wpi-gateway'] ), 'WP Invoicing IPN', __FILE__, __LINE__ );
659
-            do_action( 'wpinv_verify_' . sanitize_text_field( $_GET['wpi-gateway'] ) . '_ipn' );
657
+        if (!empty($_GET['wpi-gateway'])) {
658
+            wpinv_error_log(sanitize_text_field($_GET['wpi-gateway']), 'WP Invoicing IPN', __FILE__, __LINE__);
659
+            do_action('wpinv_verify_' . sanitize_text_field($_GET['wpi-gateway']) . '_ipn');
660 660
         }
661 661
     }
662 662
 }
663
-add_action( 'init', 'wpinv_listen_for_payment_ipn' );
663
+add_action('init', 'wpinv_listen_for_payment_ipn');
664 664
 
665 665
 function wpinv_get_bank_instructions() {
666
-    $bank_instructions = wpinv_get_option( 'bank_transfer_info' );
666
+    $bank_instructions = wpinv_get_option('bank_transfer_info');
667 667
     
668
-    return apply_filters( 'wpinv_bank_instructions', $bank_instructions );
668
+    return apply_filters('wpinv_bank_instructions', $bank_instructions);
669 669
 }
670 670
 
671
-function wpinv_get_bank_info( $filtered = false ) {
671
+function wpinv_get_bank_info($filtered = false) {
672 672
     $bank_fields = array(
673
-        'bank_transfer_ac_name'     => __( 'Account Name', 'invoicing' ),
674
-        'bank_transfer_ac_no'       => __( 'Account Number', 'invoicing' ),
675
-        'bank_transfer_bank_name'   => __( 'Bank Name', 'invoicing' ),
676
-        'bank_transfer_ifsc'        => __( 'IFSC code', 'invoicing' ),
677
-        'bank_transfer_iban'        => __( 'IBAN', 'invoicing' ),
678
-        'bank_transfer_bic'         => __( 'BIC/Swift code', 'invoicing' ),
679
-        'bank_transfer_sort_code'   => __( 'Sort Code', 'invoicing' )
673
+        'bank_transfer_ac_name'     => __('Account Name', 'invoicing'),
674
+        'bank_transfer_ac_no'       => __('Account Number', 'invoicing'),
675
+        'bank_transfer_bank_name'   => __('Bank Name', 'invoicing'),
676
+        'bank_transfer_ifsc'        => __('IFSC code', 'invoicing'),
677
+        'bank_transfer_iban'        => __('IBAN', 'invoicing'),
678
+        'bank_transfer_bic'         => __('BIC/Swift code', 'invoicing'),
679
+        'bank_transfer_sort_code'   => __('Sort Code', 'invoicing')
680 680
     );
681 681
     
682 682
     $bank_info = array();
683
-    foreach ( $bank_fields as $field => $label ) {
684
-        if ( $filtered && !( $value = wpinv_get_option( $field ) ) ) {
683
+    foreach ($bank_fields as $field => $label) {
684
+        if ($filtered && !($value = wpinv_get_option($field))) {
685 685
             continue;
686 686
         }
687 687
         
688
-        $bank_info[$field] = array( 'label' => $label, 'value' => $value );
688
+        $bank_info[$field] = array('label' => $label, 'value' => $value);
689 689
     }
690 690
     
691
-    return apply_filters( 'wpinv_bank_info', $bank_info, $filtered );
691
+    return apply_filters('wpinv_bank_info', $bank_info, $filtered);
692 692
 }
693 693
 
694
-function wpinv_get_post_data( $method = 'request' ) {
694
+function wpinv_get_post_data($method = 'request') {
695 695
     $data       = array();
696 696
     $request    = $_REQUEST;
697 697
     
698
-    if ( $method == 'post' ) {
699
-        if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] != 'POST' ) {
698
+    if ($method == 'post') {
699
+        if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'POST') {
700 700
             return $data;
701 701
         }
702 702
         
703 703
         $request = $_POST;
704 704
     }
705 705
     
706
-    if ( $method == 'get' ) {
707
-        if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] != 'GET' ) {
706
+    if ($method == 'get') {
707
+        if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'GET') {
708 708
             return $data;
709 709
         }
710 710
         
@@ -715,11 +715,11 @@  discard block
 block discarded – undo
715 715
     $post_data = '';
716 716
     
717 717
     // Fallback just in case post_max_size is lower than needed
718
-    if ( ini_get( 'allow_url_fopen' ) ) {
719
-        $post_data = file_get_contents( 'php://input' );
718
+    if (ini_get('allow_url_fopen')) {
719
+        $post_data = file_get_contents('php://input');
720 720
     } else {
721 721
         // If allow_url_fopen is not enabled, then make sure that post_max_size is large enough
722
-        ini_set( 'post_max_size', '12M' );
722
+        ini_set('post_max_size', '12M');
723 723
     }
724 724
     // Start the encoded data collection with notification command
725 725
     $encoded_data = 'cmd=_notify-validate';
@@ -728,33 +728,33 @@  discard block
 block discarded – undo
728 728
     $arg_separator = wpinv_get_php_arg_separator_output();
729 729
 
730 730
     // Verify there is a post_data
731
-    if ( $post_data || strlen( $post_data ) > 0 ) {
731
+    if ($post_data || strlen($post_data) > 0) {
732 732
         // Append the data
733 733
         $encoded_data .= $arg_separator . $post_data;
734 734
     } else {
735 735
         // Check if POST is empty
736
-        if ( empty( $request ) ) {
736
+        if (empty($request)) {
737 737
             // Nothing to do
738 738
             return;
739 739
         } else {
740 740
             // Loop through each POST
741
-            foreach ( $request as $key => $value ) {
741
+            foreach ($request as $key => $value) {
742 742
                 // Encode the value and append the data
743
-                $encoded_data .= $arg_separator . "$key=" . urlencode( $value );
743
+                $encoded_data .= $arg_separator . "$key=" . urlencode($value);
744 744
             }
745 745
         }
746 746
     }
747 747
 
748 748
     // Convert collected post data to an array
749
-    wp_parse_str( $encoded_data, $data );
749
+    wp_parse_str($encoded_data, $data);
750 750
 
751
-    foreach ( $data as $key => $value ) {
752
-        if ( false !== strpos( $key, 'amp;' ) ) {
753
-            $new_key = str_replace( '&amp;', '&', $key );
754
-            $new_key = str_replace( 'amp;', '&' , $new_key );
751
+    foreach ($data as $key => $value) {
752
+        if (false !== strpos($key, 'amp;')) {
753
+            $new_key = str_replace('&amp;', '&', $key);
754
+            $new_key = str_replace('amp;', '&', $new_key);
755 755
 
756
-            unset( $data[ $key ] );
757
-            $data[ $new_key ] = sanitize_text_field( $value );
756
+            unset($data[$key]);
757
+            $data[$new_key] = sanitize_text_field($value);
758 758
         }
759 759
     }
760 760
     
@@ -764,12 +764,12 @@  discard block
 block discarded – undo
764 764
 /**
765 765
  * Checks if a given gateway supports subscription payments.
766 766
  */
767
-function wpinv_gateway_support_subscription( $gateway ) {
767
+function wpinv_gateway_support_subscription($gateway) {
768 768
     $supports = false;
769 769
 
770
-    if ( wpinv_is_gateway_active( $gateway ) ) {
771
-        $supports = apply_filters( 'wpinv_' . $gateway . '_support_subscription', $supports );
772
-        $supports = apply_filters( 'getapid_gateway_supports_subscription', $supports, $gateway );
770
+    if (wpinv_is_gateway_active($gateway)) {
771
+        $supports = apply_filters('wpinv_' . $gateway . '_support_subscription', $supports);
772
+        $supports = apply_filters('getapid_gateway_supports_subscription', $supports, $gateway);
773 773
     }
774 774
 
775 775
     return $supports;
@@ -781,14 +781,14 @@  discard block
 block discarded – undo
781 781
  * @param array $gateways an array of gateways.
782 782
  * @param GetPaid_Payment_Form $form payment form.
783 783
  */
784
-function wpinv_payment_gateways_on_cart( $gateways, $form ) {
784
+function wpinv_payment_gateways_on_cart($gateways, $form) {
785 785
 
786
-    if ( $form->is_recurring() ) {
786
+    if ($form->is_recurring()) {
787 787
 
788
-        foreach ( array_keys( $gateways ) as $gateway ) {
788
+        foreach (array_keys($gateways) as $gateway) {
789 789
 
790
-            if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
791
-                unset( $gateways[$gateway] );
790
+            if (!wpinv_gateway_support_subscription($gateway)) {
791
+                unset($gateways[$gateway]);
792 792
             }
793 793
 
794 794
         }
@@ -797,11 +797,11 @@  discard block
 block discarded – undo
797 797
 
798 798
     return $gateways;
799 799
 }
800
-add_filter( 'getpaid_payment_form_gateways', 'wpinv_payment_gateways_on_cart', 10, 2 );
800
+add_filter('getpaid_payment_form_gateways', 'wpinv_payment_gateways_on_cart', 10, 2);
801 801
 
802 802
 function wpinv_validate_checkout_fields() {
803 803
     // Check if there is $_POST
804
-    if ( empty( $_POST ) ) {
804
+    if (empty($_POST)) {
805 805
         return false;
806 806
     }
807 807
 
@@ -824,28 +824,28 @@  discard block
 block discarded – undo
824 824
     
825 825
     $invoice = wpinv_get_invoice_cart();
826 826
     $has_subscription = $invoice->is_recurring();
827
-    if ( empty( $invoice ) ) {
828
-        wpinv_set_error( 'invalid_invoice', __( 'Your cart is empty.', 'invoicing' ) );
827
+    if (empty($invoice)) {
828
+        wpinv_set_error('invalid_invoice', __('Your cart is empty.', 'invoicing'));
829 829
         return $gateway;
830 830
     }
831 831
 
832 832
     // Check if a gateway value is present
833
-    if ( !empty( $_REQUEST['wpi-gateway'] ) ) {
834
-        $gateway = sanitize_text_field( $_REQUEST['wpi-gateway'] );
833
+    if (!empty($_REQUEST['wpi-gateway'])) {
834
+        $gateway = sanitize_text_field($_REQUEST['wpi-gateway']);
835 835
 
836
-        if ( $invoice->is_free() ) {
836
+        if ($invoice->is_free()) {
837 837
             $gateway = 'manual';
838
-        } elseif ( !wpinv_is_gateway_active( $gateway ) ) {
839
-            wpinv_set_error( 'invalid_gateway', __( 'The selected payment gateway is not enabled', 'invoicing' ) );
840
-        } elseif ( $has_subscription && !wpinv_gateway_support_subscription( $gateway ) ) {
841
-            if ( apply_filters( 'wpinv_reject_non_recurring_gateway', true ) ) {
842
-                wpinv_set_error( 'invalid_gateway', __( 'The selected payment gateway does not support subscription payment', 'invoicing' ) );
838
+        } elseif (!wpinv_is_gateway_active($gateway)) {
839
+            wpinv_set_error('invalid_gateway', __('The selected payment gateway is not enabled', 'invoicing'));
840
+        } elseif ($has_subscription && !wpinv_gateway_support_subscription($gateway)) {
841
+            if (apply_filters('wpinv_reject_non_recurring_gateway', true)) {
842
+                wpinv_set_error('invalid_gateway', __('The selected payment gateway does not support subscription payment', 'invoicing'));
843 843
             }
844 844
         }
845 845
     }
846 846
 
847
-    if ( $has_subscription && count( wpinv_get_cart_contents() ) > 1 ) {
848
-        wpinv_set_error( 'subscription_invalid', __( 'Only one subscription may be purchased through payment per checkout.', 'invoicing' ) );
847
+    if ($has_subscription && count(wpinv_get_cart_contents()) > 1) {
848
+        wpinv_set_error('subscription_invalid', __('Only one subscription may be purchased through payment per checkout.', 'invoicing'));
849 849
     }
850 850
 
851 851
     return $gateway;
@@ -857,41 +857,41 @@  discard block
 block discarded – undo
857 857
     // Retrieve the discount stored in cookies
858 858
     $discounts = wpinv_get_cart_discounts();
859 859
 
860
-    if ( ! is_array( $discounts ) ) {
860
+    if (!is_array($discounts)) {
861 861
         return NULL;
862 862
     }
863 863
 
864
-    $discounts = array_filter( $discounts );
865
-    $error    = false;
864
+    $discounts = array_filter($discounts);
865
+    $error = false;
866 866
 
867
-    if ( empty( $discounts ) ) {
867
+    if (empty($discounts)) {
868 868
         return NULL;
869 869
     }
870 870
 
871 871
     // If we have discounts, loop through them
872
-    foreach ( $discounts as $discount ) {
872
+    foreach ($discounts as $discount) {
873 873
         // Check if valid
874
-        if (  ! wpinv_is_discount_valid( $discount, (int) $wpi_cart->get_user_id() ) ) {
874
+        if (!wpinv_is_discount_valid($discount, (int) $wpi_cart->get_user_id())) {
875 875
             // Discount is not valid
876 876
             $error = true;
877 877
         }
878 878
 
879 879
     }
880 880
 
881
-    if ( $error && ! wpinv_get_errors() ) {
882
-        wpinv_set_error( 'invalid_discount', __( 'Discount code you entered is invalid', 'invoicing' ) );
881
+    if ($error && !wpinv_get_errors()) {
882
+        wpinv_set_error('invalid_discount', __('Discount code you entered is invalid', 'invoicing'));
883 883
     }
884 884
 
885
-    return implode( ',', $discounts );
885
+    return implode(',', $discounts);
886 886
 }
887 887
 
888 888
 function wpinv_checkout_validate_cc() {
889 889
     $card_data = wpinv_checkout_get_cc_info();
890 890
 
891 891
     // Validate the card zip
892
-    if ( !empty( $card_data['wpinv_zip'] ) ) {
893
-        if ( !wpinv_checkout_validate_cc_zip( $card_data['wpinv_zip'], $card_data['wpinv_country'] ) ) {
894
-            wpinv_set_error( 'invalid_cc_zip', __( 'The zip / postcode you entered for your billing address is invalid', 'invoicing' ) );
892
+    if (!empty($card_data['wpinv_zip'])) {
893
+        if (!wpinv_checkout_validate_cc_zip($card_data['wpinv_zip'], $card_data['wpinv_country'])) {
894
+            wpinv_set_error('invalid_cc_zip', __('The zip / postcode you entered for your billing address is invalid', 'invoicing'));
895 895
         }
896 896
     }
897 897
 
@@ -901,16 +901,16 @@  discard block
 block discarded – undo
901 901
 
902 902
 function wpinv_checkout_get_cc_info() {
903 903
 	$cc_info = array();
904
-	$cc_info['card_name']      = isset( $_POST['card_name'] )       ? sanitize_text_field( $_POST['card_name'] )       : '';
905
-	$cc_info['card_number']    = isset( $_POST['card_number'] )     ? sanitize_text_field( $_POST['card_number'] )     : '';
906
-	$cc_info['card_cvc']       = isset( $_POST['card_cvc'] )        ? sanitize_text_field( $_POST['card_cvc'] )        : '';
907
-	$cc_info['card_exp_month'] = isset( $_POST['card_exp_month'] )  ? sanitize_text_field( $_POST['card_exp_month'] )  : '';
908
-	$cc_info['card_exp_year']  = isset( $_POST['card_exp_year'] )   ? sanitize_text_field( $_POST['card_exp_year'] )   : '';
909
-	$cc_info['card_address']   = isset( $_POST['wpinv_address'] )  ? sanitize_text_field( $_POST['wpinv_address'] ) : '';
910
-	$cc_info['card_city']      = isset( $_POST['wpinv_city'] )     ? sanitize_text_field( $_POST['wpinv_city'] )    : '';
911
-	$cc_info['card_state']     = isset( $_POST['wpinv_state'] )    ? sanitize_text_field( $_POST['wpinv_state'] )   : '';
912
-	$cc_info['card_country']   = isset( $_POST['wpinv_country'] )  ? sanitize_text_field( $_POST['wpinv_country'] ) : '';
913
-	$cc_info['card_zip']       = isset( $_POST['wpinv_zip'] )      ? sanitize_text_field( $_POST['wpinv_zip'] )     : '';
904
+	$cc_info['card_name']      = isset($_POST['card_name']) ? sanitize_text_field($_POST['card_name']) : '';
905
+	$cc_info['card_number']    = isset($_POST['card_number']) ? sanitize_text_field($_POST['card_number']) : '';
906
+	$cc_info['card_cvc']       = isset($_POST['card_cvc']) ? sanitize_text_field($_POST['card_cvc']) : '';
907
+	$cc_info['card_exp_month'] = isset($_POST['card_exp_month']) ? sanitize_text_field($_POST['card_exp_month']) : '';
908
+	$cc_info['card_exp_year']  = isset($_POST['card_exp_year']) ? sanitize_text_field($_POST['card_exp_year']) : '';
909
+	$cc_info['card_address']   = isset($_POST['wpinv_address']) ? sanitize_text_field($_POST['wpinv_address']) : '';
910
+	$cc_info['card_city']      = isset($_POST['wpinv_city']) ? sanitize_text_field($_POST['wpinv_city']) : '';
911
+	$cc_info['card_state']     = isset($_POST['wpinv_state']) ? sanitize_text_field($_POST['wpinv_state']) : '';
912
+	$cc_info['card_country']   = isset($_POST['wpinv_country']) ? sanitize_text_field($_POST['wpinv_country']) : '';
913
+	$cc_info['card_zip']       = isset($_POST['wpinv_zip']) ? sanitize_text_field($_POST['wpinv_zip']) : '';
914 914
 
915 915
 	// Return cc info
916 916
 	return $cc_info;
@@ -919,84 +919,84 @@  discard block
 block discarded – undo
919 919
 /**
920 920
  * Validates a zip code.
921 921
  */
922
-function wpinv_checkout_validate_cc_zip( $zip = 0, $country_code = '' ) {
922
+function wpinv_checkout_validate_cc_zip($zip = 0, $country_code = '') {
923 923
 
924
-    if ( empty( $zip ) || empty( $country_code ) ){
924
+    if (empty($zip) || empty($country_code)) {
925 925
         return false;
926 926
     }
927 927
 
928 928
     // Prepare the country code.
929
-    $country_code = strtoupper( trim( $country_code ) );
929
+    $country_code = strtoupper(trim($country_code));
930 930
 
931 931
     // Fetch the regexes.
932
-    $zip_regex = wpinv_get_data( 'zip-regexes' );
932
+    $zip_regex = wpinv_get_data('zip-regexes');
933 933
 
934 934
     // Check if it is valid.
935
-    $is_valid = ! isset ( $zip_regex[ $country_code ] ) || preg_match( "/" . $zip_regex[ $country_code ] . "/i", $zip );
935
+    $is_valid = !isset ($zip_regex[$country_code]) || preg_match("/" . $zip_regex[$country_code] . "/i", $zip);
936 936
 
937
-    return apply_filters( 'wpinv_is_zip_valid', $is_valid, $zip, $country_code );
937
+    return apply_filters('wpinv_is_zip_valid', $is_valid, $zip, $country_code);
938 938
 }
939 939
 
940 940
 function wpinv_checkout_validate_agree_to_terms() {
941 941
     // Validate agree to terms
942
-    if ( ! isset( $_POST['wpi_agree_to_terms'] ) || $_POST['wpi_agree_to_terms'] != 1 ) {
942
+    if (!isset($_POST['wpi_agree_to_terms']) || $_POST['wpi_agree_to_terms'] != 1) {
943 943
         // User did not agree
944
-        wpinv_set_error( 'agree_to_terms', apply_filters( 'wpinv_agree_to_terms_text', __( 'You must agree to the terms of use', 'invoicing' ) ) );
944
+        wpinv_set_error('agree_to_terms', apply_filters('wpinv_agree_to_terms_text', __('You must agree to the terms of use', 'invoicing')));
945 945
     }
946 946
 }
947 947
 
948 948
 function wpinv_checkout_validate_invoice_user() {
949 949
     global $wpi_cart, $user_ID;
950 950
 
951
-    if(empty($wpi_cart)){
951
+    if (empty($wpi_cart)) {
952 952
         $wpi_cart = wpinv_get_invoice_cart();
953 953
     }
954 954
 
955
-    $invoice_user = (int)$wpi_cart->get_user_id();
955
+    $invoice_user = (int) $wpi_cart->get_user_id();
956 956
     $valid_user_data = array(
957 957
         'user_id' => $invoice_user
958 958
     );
959 959
 
960 960
     // If guest checkout allowed
961
-    if ( !wpinv_require_login_to_checkout() ) {
961
+    if (!wpinv_require_login_to_checkout()) {
962 962
         return $valid_user_data;
963 963
     }
964 964
     
965 965
     // Verify there is a user_ID
966
-    if ( $user_ID == $invoice_user ) {
966
+    if ($user_ID == $invoice_user) {
967 967
         // Get the logged in user data
968
-        $user_data = get_userdata( $user_ID );
969
-        $required_fields  = wpinv_checkout_required_fields();
968
+        $user_data = get_userdata($user_ID);
969
+        $required_fields = wpinv_checkout_required_fields();
970 970
 
971 971
         // Loop through required fields and show error messages
972
-         if ( !empty( $required_fields ) ) {
973
-            foreach ( $required_fields as $field_name => $value ) {
974
-                if ( in_array( $value, $required_fields ) && empty( $_POST[ 'wpinv_' . $field_name ] ) ) {
975
-                    wpinv_set_error( $value['error_id'], $value['error_message'] );
972
+         if (!empty($required_fields)) {
973
+            foreach ($required_fields as $field_name => $value) {
974
+                if (in_array($value, $required_fields) && empty($_POST['wpinv_' . $field_name])) {
975
+                    wpinv_set_error($value['error_id'], $value['error_message']);
976 976
                 }
977 977
             }
978 978
         }
979 979
 
980 980
         // Verify data
981
-        if ( $user_data ) {
981
+        if ($user_data) {
982 982
             // Collected logged in user data
983 983
             $valid_user_data = array(
984 984
                 'user_id'     => $user_ID,
985
-                'email'       => isset( $_POST['wpinv_email'] ) ? sanitize_email( $_POST['wpinv_email'] ) : $user_data->user_email,
986
-                'first_name'  => isset( $_POST['wpinv_first_name'] ) && ! empty( $_POST['wpinv_first_name'] ) ? sanitize_text_field( $_POST['wpinv_first_name'] ) : $user_data->first_name,
987
-                'last_name'   => isset( $_POST['wpinv_last_name'] ) && ! empty( $_POST['wpinv_last_name']  ) ? sanitize_text_field( $_POST['wpinv_last_name']  ) : $user_data->last_name,
985
+                'email'       => isset($_POST['wpinv_email']) ? sanitize_email($_POST['wpinv_email']) : $user_data->user_email,
986
+                'first_name'  => isset($_POST['wpinv_first_name']) && !empty($_POST['wpinv_first_name']) ? sanitize_text_field($_POST['wpinv_first_name']) : $user_data->first_name,
987
+                'last_name'   => isset($_POST['wpinv_last_name']) && !empty($_POST['wpinv_last_name']) ? sanitize_text_field($_POST['wpinv_last_name']) : $user_data->last_name,
988 988
             );
989 989
 
990
-            if ( !empty( $_POST[ 'wpinv_email' ] ) && !is_email( $_POST[ 'wpinv_email' ] ) ) {
991
-                wpinv_set_error( 'invalid_email', __( 'Please enter a valid email address', 'invoicing' ) );
990
+            if (!empty($_POST['wpinv_email']) && !is_email($_POST['wpinv_email'])) {
991
+                wpinv_set_error('invalid_email', __('Please enter a valid email address', 'invoicing'));
992 992
             }
993 993
         } else {
994 994
             // Set invalid user error
995
-            wpinv_set_error( 'invalid_user', __( 'The user billing information is invalid', 'invoicing' ) );
995
+            wpinv_set_error('invalid_user', __('The user billing information is invalid', 'invoicing'));
996 996
         }
997 997
     } else {
998 998
         // Set invalid user error
999
-        wpinv_set_error( 'invalid_user_id', __( 'The invalid invoice user id', 'invoicing' ) );
999
+        wpinv_set_error('invalid_user_id', __('The invalid invoice user id', 'invoicing'));
1000 1000
     }
1001 1001
 
1002 1002
     // Return user data
@@ -1008,27 +1008,27 @@  discard block
 block discarded – undo
1008 1008
 
1009 1009
     $data = array();
1010 1010
     
1011
-    if ( is_user_logged_in() ) {
1012
-        if ( !wpinv_require_login_to_checkout() || ( wpinv_require_login_to_checkout() && (int)$wpi_cart->get_user_id() === (int)get_current_user_id() ) ) {
1013
-            $data['user_id'] = (int)get_current_user_id();
1011
+    if (is_user_logged_in()) {
1012
+        if (!wpinv_require_login_to_checkout() || (wpinv_require_login_to_checkout() && (int) $wpi_cart->get_user_id() === (int) get_current_user_id())) {
1013
+            $data['user_id'] = (int) get_current_user_id();
1014 1014
         } else {
1015
-            wpinv_set_error( 'logged_in_only', __( 'You are not allowed to pay for this invoice', 'invoicing' ) );
1015
+            wpinv_set_error('logged_in_only', __('You are not allowed to pay for this invoice', 'invoicing'));
1016 1016
         }
1017 1017
     } else {
1018 1018
         // If guest checkout allowed
1019
-        if ( !wpinv_require_login_to_checkout() ) {
1019
+        if (!wpinv_require_login_to_checkout()) {
1020 1020
             $data['user_id'] = 0;
1021 1021
         } else {
1022
-            wpinv_set_error( 'logged_in_only', __( 'You must be logged in to pay for this invoice', 'invoicing' ) );
1022
+            wpinv_set_error('logged_in_only', __('You must be logged in to pay for this invoice', 'invoicing'));
1023 1023
         }
1024 1024
     }
1025 1025
 
1026 1026
     return $data;
1027 1027
 }
1028 1028
 
1029
-function wpinv_checkout_form_get_user( $valid_data = array() ) {
1029
+function wpinv_checkout_form_get_user($valid_data = array()) {
1030 1030
 
1031
-    if ( !empty( $valid_data['current_user']['user_id'] ) ) {
1031
+    if (!empty($valid_data['current_user']['user_id'])) {
1032 1032
         $user = $valid_data['current_user'];
1033 1033
     } else {
1034 1034
         // Set the valid invoice user
@@ -1036,7 +1036,7 @@  discard block
 block discarded – undo
1036 1036
     }
1037 1037
 
1038 1038
     // Verify invoice have an user
1039
-    if ( false === $user || empty( $user ) ) {
1039
+    if (false === $user || empty($user)) {
1040 1040
         return false;
1041 1041
     }
1042 1042
 
@@ -1053,11 +1053,11 @@  discard block
 block discarded – undo
1053 1053
         'zip',
1054 1054
     );
1055 1055
     
1056
-    foreach ( $address_fields as $field ) {
1057
-        $user[$field]  = !empty( $_POST['wpinv_' . $field] ) ? sanitize_text_field( $_POST['wpinv_' . $field] ) : false;
1056
+    foreach ($address_fields as $field) {
1057
+        $user[$field] = !empty($_POST['wpinv_' . $field]) ? sanitize_text_field($_POST['wpinv_' . $field]) : false;
1058 1058
         
1059
-        if ( !empty( $user['user_id'] ) && !empty( $valid_data['current_user']['user_id'] ) && $valid_data['current_user']['user_id'] == $valid_data['invoice_user']['user_id'] ) {
1060
-            update_user_meta( $user['user_id'], '_wpinv_' . $field, $user[$field] );
1059
+        if (!empty($user['user_id']) && !empty($valid_data['current_user']['user_id']) && $valid_data['current_user']['user_id'] == $valid_data['invoice_user']['user_id']) {
1060
+            update_user_meta($user['user_id'], '_wpinv_' . $field, $user[$field]);
1061 1061
         }
1062 1062
     }
1063 1063
 
@@ -1071,7 +1071,7 @@  discard block
 block discarded – undo
1071 1071
     wpinv_clear_errors();
1072 1072
 
1073 1073
     $invoice = wpinv_get_invoice_cart();
1074
-    if ( empty( $invoice ) ) {
1074
+    if (empty($invoice)) {
1075 1075
         return false;
1076 1076
     }
1077 1077
 
@@ -1079,42 +1079,42 @@  discard block
 block discarded – undo
1079 1079
 
1080 1080
     $wpi_checkout_id = $invoice->ID;
1081 1081
 
1082
-    do_action( 'wpinv_pre_process_checkout' );
1082
+    do_action('wpinv_pre_process_checkout');
1083 1083
     
1084
-    if ( !wpinv_get_cart_contents() ) { // Make sure the cart isn't empty
1084
+    if (!wpinv_get_cart_contents()) { // Make sure the cart isn't empty
1085 1085
         $valid_data = false;
1086
-        wpinv_set_error( 'empty_cart', __( 'Your cart is empty', 'invoicing' ) );
1086
+        wpinv_set_error('empty_cart', __('Your cart is empty', 'invoicing'));
1087 1087
     } else {
1088 1088
         // Validate the form $_POST data
1089 1089
         $valid_data = wpinv_validate_checkout_fields();
1090 1090
         
1091 1091
         // Allow themes and plugins to hook to errors
1092
-        do_action( 'wpinv_checkout_error_checks', $valid_data, $_POST );
1092
+        do_action('wpinv_checkout_error_checks', $valid_data, $_POST);
1093 1093
     }
1094 1094
     
1095
-    $is_ajax    = defined( 'DOING_AJAX' ) && DOING_AJAX;
1095
+    $is_ajax = defined('DOING_AJAX') && DOING_AJAX;
1096 1096
     
1097 1097
     // Validate the user
1098
-    $user = wpinv_checkout_form_get_user( $valid_data );
1098
+    $user = wpinv_checkout_form_get_user($valid_data);
1099 1099
 
1100 1100
     // Let extensions validate fields after user is logged in if user has used login/registration form
1101
-    do_action( 'wpinv_checkout_user_error_checks', $user, $valid_data, $_POST );
1101
+    do_action('wpinv_checkout_user_error_checks', $user, $valid_data, $_POST);
1102 1102
     
1103
-    if ( false === $valid_data || wpinv_get_errors() || ! $user ) {
1104
-        if ( $is_ajax && 'wpinv_payment_form' != $_REQUEST['action'] ) {
1105
-            do_action( 'wpinv_ajax_checkout_errors' );
1103
+    if (false === $valid_data || wpinv_get_errors() || !$user) {
1104
+        if ($is_ajax && 'wpinv_payment_form' != $_REQUEST['action']) {
1105
+            do_action('wpinv_ajax_checkout_errors');
1106 1106
             die();
1107 1107
         } else {
1108 1108
             return false;
1109 1109
         }
1110 1110
     }
1111 1111
 
1112
-    if ( $is_ajax && 'wpinv_payment_form' != $_REQUEST['action'] ) {
1112
+    if ($is_ajax && 'wpinv_payment_form' != $_REQUEST['action']) {
1113 1113
         // Save address fields.
1114
-        $address_fields = array( 'first_name', 'last_name', 'phone', 'address', 'city', 'country', 'state', 'zip', 'company' );
1115
-        foreach ( $address_fields as $field ) {
1116
-            if ( isset( $user[$field] ) ) {
1117
-                $invoice->set( $field, $user[$field] );
1114
+        $address_fields = array('first_name', 'last_name', 'phone', 'address', 'city', 'country', 'state', 'zip', 'company');
1115
+        foreach ($address_fields as $field) {
1116
+            if (isset($user[$field])) {
1117
+                $invoice->set($field, $user[$field]);
1118 1118
             }
1119 1119
 
1120 1120
             $invoice->save();
@@ -1122,16 +1122,16 @@  discard block
 block discarded – undo
1122 1122
 
1123 1123
         $response['success']            = true;
1124 1124
         $response['data']['subtotal']   = $invoice->get_subtotal();
1125
-        $response['data']['subtotalf']  = $invoice->get_subtotal( true );
1125
+        $response['data']['subtotalf']  = $invoice->get_subtotal(true);
1126 1126
         $response['data']['discount']   = $invoice->get_discount();
1127
-        $response['data']['discountf']  = $invoice->get_discount( true );
1127
+        $response['data']['discountf']  = $invoice->get_discount(true);
1128 1128
         $response['data']['tax']        = $invoice->get_tax();
1129
-        $response['data']['taxf']       = $invoice->get_tax( true );
1129
+        $response['data']['taxf']       = $invoice->get_tax(true);
1130 1130
         $response['data']['total']      = $invoice->get_total();
1131
-        $response['data']['totalf']     = $invoice->get_total( true );
1132
-	    $response['data']['free']       = $invoice->is_free() && ( ! ( (float) $response['data']['total'] > 0 ) || $invoice->has_free_trial() ) ? true : false;
1131
+        $response['data']['totalf']     = $invoice->get_total(true);
1132
+	    $response['data']['free'] = $invoice->is_free() && (!((float) $response['data']['total'] > 0) || $invoice->has_free_trial()) ? true : false;
1133 1133
 
1134
-        wp_send_json( $response );
1134
+        wp_send_json($response);
1135 1135
     }
1136 1136
     
1137 1137
     $user_info = array(
@@ -1153,42 +1153,42 @@  discard block
 block discarded – undo
1153 1153
     
1154 1154
     // Setup invoice information
1155 1155
     $invoice_data = array(
1156
-        'invoice_id'        => !empty( $invoice ) ? $invoice->ID : 0,
1156
+        'invoice_id'        => !empty($invoice) ? $invoice->ID : 0,
1157 1157
         'items'             => $cart_items,
1158 1158
         'cart_discounts'    => $discounts,
1159
-        'fees'              => wpinv_get_cart_fees(),        // Any arbitrary fees that have been added to the cart
1160
-        'subtotal'          => wpinv_get_cart_subtotal( $cart_items ),    // Amount before taxes and discounts
1161
-        'discount'          => wpinv_get_cart_items_discount_amount( $cart_items, $discounts ), // Discounted amount
1162
-        'tax'               => wpinv_get_cart_tax( $cart_items, $invoice ),               // Taxed amount
1163
-        'price'             => wpinv_get_cart_total( $cart_items, $discounts ),    // Amount after taxes
1159
+        'fees'              => wpinv_get_cart_fees(), // Any arbitrary fees that have been added to the cart
1160
+        'subtotal'          => wpinv_get_cart_subtotal($cart_items), // Amount before taxes and discounts
1161
+        'discount'          => wpinv_get_cart_items_discount_amount($cart_items, $discounts), // Discounted amount
1162
+        'tax'               => wpinv_get_cart_tax($cart_items, $invoice), // Taxed amount
1163
+        'price'             => wpinv_get_cart_total($cart_items, $discounts), // Amount after taxes
1164 1164
         'invoice_key'       => $invoice->get_key() ? $invoice->get_key() : $invoice->generate_key(),
1165 1165
         'user_email'        => $invoice->get_email(),
1166
-        'date'              => date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ),
1167
-        'user_info'         => stripslashes_deep( $user_info ),
1166
+        'date'              => date('Y-m-d H:i:s', current_time('timestamp')),
1167
+        'user_info'         => stripslashes_deep($user_info),
1168 1168
         'post_data'         => $_POST,
1169 1169
         'cart_details'      => $cart_items,
1170 1170
         'gateway'           => $valid_data['gateway'],
1171 1171
         'card_info'         => $valid_data['cc_info']
1172 1172
     );
1173 1173
     
1174
-    $vat_info   = $wpinv_euvat->current_vat_data();
1175
-    if ( is_array( $vat_info ) ) {
1174
+    $vat_info = $wpinv_euvat->current_vat_data();
1175
+    if (is_array($vat_info)) {
1176 1176
         $invoice_data['user_info']['vat_number']        = $vat_info['number'];
1177 1177
         $invoice_data['user_info']['vat_rate']          = wpinv_get_tax_rate($invoice_data['user_info']['country'], $invoice_data['user_info']['state']);
1178
-        $invoice_data['user_info']['adddress_confirmed']    = isset($vat_info['adddress_confirmed']) ? $vat_info['adddress_confirmed'] : false;
1178
+        $invoice_data['user_info']['adddress_confirmed'] = isset($vat_info['adddress_confirmed']) ? $vat_info['adddress_confirmed'] : false;
1179 1179
 
1180 1180
         // Add the VAT rate to each item in the cart
1181
-        foreach( $invoice_data['cart_details'] as $key => $item_data) {
1181
+        foreach ($invoice_data['cart_details'] as $key => $item_data) {
1182 1182
             $rate = wpinv_get_tax_rate($invoice_data['user_info']['country'], $invoice_data['user_info']['state'], $item_data['id']);
1183
-            $invoice_data['cart_details'][$key]['vat_rate'] = wpinv_round_amount( $rate, 4 );
1183
+            $invoice_data['cart_details'][$key]['vat_rate'] = wpinv_round_amount($rate, 4);
1184 1184
         }
1185 1185
     }
1186 1186
     
1187 1187
     // Save vat fields.
1188
-    $address_fields = array( 'vat_number', 'vat_rate', 'adddress_confirmed' );
1189
-    foreach ( $address_fields as $field ) {
1190
-        if ( isset( $invoice_data['user_info'][$field] ) ) {
1191
-            $invoice->set( $field, $invoice_data['user_info'][$field] );
1188
+    $address_fields = array('vat_number', 'vat_rate', 'adddress_confirmed');
1189
+    foreach ($address_fields as $field) {
1190
+        if (isset($invoice_data['user_info'][$field])) {
1191
+            $invoice->set($field, $invoice_data['user_info'][$field]);
1192 1192
         }
1193 1193
     }
1194 1194
     $invoice->save();
@@ -1197,42 +1197,42 @@  discard block
 block discarded – undo
1197 1197
     $valid_data['user'] = $user;
1198 1198
     
1199 1199
     // Allow themes and plugins to hook before the gateway
1200
-    do_action( 'wpinv_checkout_before_gateway', $_POST, $user_info, $valid_data );
1200
+    do_action('wpinv_checkout_before_gateway', $_POST, $user_info, $valid_data);
1201 1201
 
1202 1202
      // If it is free, abort.
1203
-     if ( $invoice->is_free() && ( ! $invoice->is_recurring() || 0 ==  $invoice->get_recurring_details( 'total' ) ) ) {
1203
+     if ($invoice->is_free() && (!$invoice->is_recurring() || 0 == $invoice->get_recurring_details('total'))) {
1204 1204
         $invoice_data['gateway'] = 'manual';
1205 1205
         $_POST['wpi-gateway'] = 'manual';
1206 1206
     }
1207 1207
 
1208 1208
     // Allow the invoice data to be modified before it is sent to the gateway
1209
-    $invoice_data = apply_filters( 'wpinv_data_before_gateway', $invoice_data, $valid_data );
1209
+    $invoice_data = apply_filters('wpinv_data_before_gateway', $invoice_data, $valid_data);
1210 1210
     
1211
-    if ( $invoice_data['price'] && $invoice_data['gateway'] == 'manual' ) {
1211
+    if ($invoice_data['price'] && $invoice_data['gateway'] == 'manual') {
1212 1212
         $mode = 'test';
1213 1213
     } else {
1214
-        $mode = wpinv_is_test_mode( $invoice_data['gateway'] ) ? 'test' : 'live';
1214
+        $mode = wpinv_is_test_mode($invoice_data['gateway']) ? 'test' : 'live';
1215 1215
     }
1216 1216
 
1217 1217
     // Setup the data we're storing in the purchase session
1218 1218
     $session_data = $invoice_data;
1219 1219
     // Make sure credit card numbers are never stored in sessions
1220
-    if ( !empty( $session_data['card_info']['card_number'] ) ) {
1221
-        unset( $session_data['card_info']['card_number'] );
1220
+    if (!empty($session_data['card_info']['card_number'])) {
1221
+        unset($session_data['card_info']['card_number']);
1222 1222
     }
1223 1223
     
1224 1224
     // Used for showing item links to non logged-in users after purchase, and for other plugins needing purchase data.
1225
-    wpinv_set_checkout_session( $invoice_data );
1225
+    wpinv_set_checkout_session($invoice_data);
1226 1226
     
1227 1227
     // Set gateway
1228
-    $invoice->update_meta( '_wpinv_gateway', $invoice_data['gateway'] );
1229
-    $invoice->update_meta( '_wpinv_mode', $mode );
1230
-    $invoice->update_meta( '_wpinv_checkout', date_i18n( 'Y-m-d H:i:s', current_time( 'timestamp' ) ) );
1228
+    $invoice->update_meta('_wpinv_gateway', $invoice_data['gateway']);
1229
+    $invoice->update_meta('_wpinv_mode', $mode);
1230
+    $invoice->update_meta('_wpinv_checkout', date_i18n('Y-m-d H:i:s', current_time('timestamp')));
1231 1231
     
1232
-    do_action( 'wpinv_checkout_before_send_to_gateway', $invoice, $invoice_data );
1232
+    do_action('wpinv_checkout_before_send_to_gateway', $invoice, $invoice_data);
1233 1233
 
1234 1234
     // Send info to the gateway for payment processing
1235
-    wpinv_send_to_gateway( $invoice_data['gateway'], $invoice_data );
1235
+    wpinv_send_to_gateway($invoice_data['gateway'], $invoice_data);
1236 1236
     die();
1237 1237
 }
1238
-add_action( 'wpinv_payment', 'wpinv_process_checkout' );
1238
+add_action('wpinv_payment', 'wpinv_process_checkout');
Please login to merge, or discard this patch.
includes/wpinv-discount-functions.php 2 patches
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -887,8 +887,8 @@
 block discarded – undo
887 887
     if ( !empty( $data ) && isset( $data['cart_discounts'] ) ) {
888 888
         unset( $data['cart_discounts'] );
889 889
         
890
-         wpinv_set_checkout_session( $data );
891
-         return true;
890
+            wpinv_set_checkout_session( $data );
891
+            return true;
892 892
     }
893 893
     
894 894
     return false;
Please login to merge, or discard this patch.
Spacing   +397 added lines, -397 removed lines patch added patch discarded remove patch
@@ -7,110 +7,110 @@  discard block
 block discarded – undo
7 7
  */
8 8
 
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14 14
 function wpinv_get_discount_types() {
15 15
     $discount_types = array(
16
-                        'percent'   => __( 'Percentage', 'invoicing' ),
17
-                        'flat'     => __( 'Flat Amount', 'invoicing' ),
16
+                        'percent'   => __('Percentage', 'invoicing'),
17
+                        'flat'     => __('Flat Amount', 'invoicing'),
18 18
                     );
19
-    return (array)apply_filters( 'wpinv_discount_types', $discount_types );
19
+    return (array) apply_filters('wpinv_discount_types', $discount_types);
20 20
 }
21 21
 
22
-function wpinv_get_discount_type_name( $type = '' ) {
22
+function wpinv_get_discount_type_name($type = '') {
23 23
     $types = wpinv_get_discount_types();
24
-    return isset( $types[ $type ] ) ? $types[ $type ] : '';
24
+    return isset($types[$type]) ? $types[$type] : '';
25 25
 }
26 26
 
27
-function wpinv_delete_discount( $data ) {
28
-    if ( ! isset( $data['_wpnonce'] ) || ! wp_verify_nonce( $data['_wpnonce'], 'wpinv_discount_nonce' ) ) {
29
-        wp_die( __( 'Trying to cheat or something?', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
27
+function wpinv_delete_discount($data) {
28
+    if (!isset($data['_wpnonce']) || !wp_verify_nonce($data['_wpnonce'], 'wpinv_discount_nonce')) {
29
+        wp_die(__('Trying to cheat or something?', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
30 30
     }
31 31
 
32
-    if( ! wpinv_current_user_can_manage_invoicing() ) {
33
-        wp_die( __( 'You do not have permission to delete discount codes', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
32
+    if (!wpinv_current_user_can_manage_invoicing()) {
33
+        wp_die(__('You do not have permission to delete discount codes', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
34 34
     }
35 35
 
36 36
     $discount_id = $data['discount'];
37
-    wpinv_remove_discount( $discount_id );
37
+    wpinv_remove_discount($discount_id);
38 38
 }
39
-add_action( 'wpinv_delete_discount', 'wpinv_delete_discount' );
39
+add_action('wpinv_delete_discount', 'wpinv_delete_discount');
40 40
 
41
-function wpinv_activate_discount( $data ) {
42
-    if ( ! isset( $data['_wpnonce'] ) || ! wp_verify_nonce( $data['_wpnonce'], 'wpinv_discount_nonce' ) ) {
43
-        wp_die( __( 'Trying to cheat or something?', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
41
+function wpinv_activate_discount($data) {
42
+    if (!isset($data['_wpnonce']) || !wp_verify_nonce($data['_wpnonce'], 'wpinv_discount_nonce')) {
43
+        wp_die(__('Trying to cheat or something?', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
44 44
     }
45 45
 
46
-    if( ! wpinv_current_user_can_manage_invoicing() ) {
47
-        wp_die( __( 'You do not have permission to edit discount codes', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
46
+    if (!wpinv_current_user_can_manage_invoicing()) {
47
+        wp_die(__('You do not have permission to edit discount codes', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
48 48
     }
49 49
 
50
-    $id = absint( $data['discount'] );
51
-    wpinv_update_discount_status( $id, 'publish' );
50
+    $id = absint($data['discount']);
51
+    wpinv_update_discount_status($id, 'publish');
52 52
 }
53
-add_action( 'wpinv_activate_discount', 'wpinv_activate_discount' );
53
+add_action('wpinv_activate_discount', 'wpinv_activate_discount');
54 54
 
55
-function wpinv_deactivate_discount( $data ) {
56
-    if ( ! isset( $data['_wpnonce'] ) || ! wp_verify_nonce( $data['_wpnonce'], 'wpinv_discount_nonce' ) ) {
57
-        wp_die( __( 'Trying to cheat or something?', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
55
+function wpinv_deactivate_discount($data) {
56
+    if (!isset($data['_wpnonce']) || !wp_verify_nonce($data['_wpnonce'], 'wpinv_discount_nonce')) {
57
+        wp_die(__('Trying to cheat or something?', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
58 58
     }
59 59
 
60
-    if( ! wpinv_current_user_can_manage_invoicing() ) {
61
-        wp_die( __( 'You do not have permission to create discount codes', 'invoicing' ), array( 'response' => 403 ) );
60
+    if (!wpinv_current_user_can_manage_invoicing()) {
61
+        wp_die(__('You do not have permission to create discount codes', 'invoicing'), array('response' => 403));
62 62
     }
63 63
 
64
-    $id = absint( $data['discount'] );
65
-    wpinv_update_discount_status( $id, 'pending' );
64
+    $id = absint($data['discount']);
65
+    wpinv_update_discount_status($id, 'pending');
66 66
 }
67
-add_action( 'wpinv_deactivate_discount', 'wpinv_deactivate_discount' );
67
+add_action('wpinv_deactivate_discount', 'wpinv_deactivate_discount');
68 68
 
69
-function wpinv_get_discounts( $args = array() ) {
69
+function wpinv_get_discounts($args = array()) {
70 70
     $defaults = array(
71 71
         'post_type'      => 'wpi_discount',
72 72
         'posts_per_page' => 20,
73 73
         'paged'          => null,
74
-        'post_status'    => array( 'publish', 'pending', 'draft', 'expired' )
74
+        'post_status'    => array('publish', 'pending', 'draft', 'expired')
75 75
     );
76 76
 
77
-    $args = wp_parse_args( $args, $defaults );
77
+    $args = wp_parse_args($args, $defaults);
78 78
 
79
-    $discounts = get_posts( $args );
79
+    $discounts = get_posts($args);
80 80
 
81
-    if ( $discounts ) {
81
+    if ($discounts) {
82 82
         return $discounts;
83 83
     }
84 84
 
85
-    if( ! $discounts && ! empty( $args['s'] ) ) {
85
+    if (!$discounts && !empty($args['s'])) {
86 86
         $args['meta_key']     = '_wpi_discount_code';
87 87
         $args['meta_value']   = $args['s'];
88 88
         $args['meta_compare'] = 'LIKE';
89
-        unset( $args['s'] );
90
-        $discounts = get_posts( $args );
89
+        unset($args['s']);
90
+        $discounts = get_posts($args);
91 91
     }
92 92
 
93
-    if( $discounts ) {
93
+    if ($discounts) {
94 94
         return $discounts;
95 95
     }
96 96
 
97 97
     return false;
98 98
 }
99 99
 
100
-function wpinv_get_all_discounts( $args = array() ) {
100
+function wpinv_get_all_discounts($args = array()) {
101 101
 
102
-    $args = wp_parse_args( $args, array(
103
-        'status'         => array( 'publish' ),
104
-        'limit'          => get_option( 'posts_per_page' ),
102
+    $args = wp_parse_args($args, array(
103
+        'status'         => array('publish'),
104
+        'limit'          => get_option('posts_per_page'),
105 105
         'page'           => 1,
106 106
         'exclude'        => array(),
107 107
         'orderby'        => 'date',
108 108
         'order'          => 'DESC',
109
-        'type'           => array_keys( wpinv_get_discount_types() ),
109
+        'type'           => array_keys(wpinv_get_discount_types()),
110 110
         'meta_query'     => array(),
111 111
         'return'         => 'objects',
112 112
         'paginate'       => false,
113
-    ) );
113
+    ));
114 114
 
115 115
     $wp_query_args = array(
116 116
         'post_type'      => 'wpi_discount',
@@ -120,18 +120,18 @@  discard block
 block discarded – undo
120 120
         'fields'         => 'ids',
121 121
         'orderby'        => $args['orderby'],
122 122
         'order'          => $args['order'],
123
-        'paged'          => absint( $args['page'] ),
123
+        'paged'          => absint($args['page']),
124 124
     );
125 125
 
126
-    if ( ! empty( $args['exclude'] ) ) {
127
-        $wp_query_args['post__not_in'] = array_map( 'absint', $args['exclude'] );
126
+    if (!empty($args['exclude'])) {
127
+        $wp_query_args['post__not_in'] = array_map('absint', $args['exclude']);
128 128
     }
129 129
 
130
-    if ( ! $args['paginate' ] ) {
130
+    if (!$args['paginate']) {
131 131
         $wp_query_args['no_found_rows'] = true;
132 132
     }
133 133
 
134
-    if ( ! empty( $args['search'] ) ) {
134
+    if (!empty($args['search'])) {
135 135
 
136 136
         $wp_query_args['meta_query'][] = array(
137 137
             'key'     => '_wpi_discount_code',
@@ -141,11 +141,11 @@  discard block
 block discarded – undo
141 141
 
142 142
     }
143 143
 
144
-    if ( ! empty( $args['type'] ) ) {
145
-        $types = wpinv_parse_list( $args['type'] );
144
+    if (!empty($args['type'])) {
145
+        $types = wpinv_parse_list($args['type']);
146 146
         $wp_query_args['meta_query'][] = array(
147 147
             'key'     => '_wpi_discount_type',
148
-            'value'   => implode( ',', $types ),
148
+            'value'   => implode(',', $types),
149 149
             'compare' => 'IN',
150 150
         );
151 151
     }
@@ -153,17 +153,17 @@  discard block
 block discarded – undo
153 153
     $wp_query_args = apply_filters('wpinv_get_discount_args', $wp_query_args, $args);
154 154
 
155 155
     // Get results.
156
-    $discounts = new WP_Query( $wp_query_args );
156
+    $discounts = new WP_Query($wp_query_args);
157 157
 
158
-    if ( 'objects' === $args['return'] ) {
159
-        $return = array_map( 'get_post', $discounts->posts );
160
-    } elseif ( 'self' === $args['return'] ) {
158
+    if ('objects' === $args['return']) {
159
+        $return = array_map('get_post', $discounts->posts);
160
+    } elseif ('self' === $args['return']) {
161 161
         return $discounts;
162 162
     } else {
163 163
         $return = $discounts->posts;
164 164
     }
165 165
 
166
-    if ( $args['paginate' ] ) {
166
+    if ($args['paginate']) {
167 167
         return (object) array(
168 168
             'discounts'      => $return,
169 169
             'total'         => $discounts->found_posts,
@@ -180,9 +180,9 @@  discard block
 block discarded – undo
180 180
 
181 181
     $discounts  = wpinv_get_discounts();
182 182
 
183
-    if ( $discounts) {
184
-        foreach ( $discounts as $discount ) {
185
-            if ( wpinv_is_discount_active( $discount->ID, true ) ) {
183
+    if ($discounts) {
184
+        foreach ($discounts as $discount) {
185
+            if (wpinv_is_discount_active($discount->ID, true)) {
186 186
                 $has_active = true;
187 187
                 break;
188 188
             }
@@ -191,16 +191,16 @@  discard block
 block discarded – undo
191 191
     return $has_active;
192 192
 }
193 193
 
194
-function wpinv_get_discount( $discount_id = 0 ) {
195
-    if( empty( $discount_id ) ) {
194
+function wpinv_get_discount($discount_id = 0) {
195
+    if (empty($discount_id)) {
196 196
         return false;
197 197
     }
198 198
 
199
-    if ( get_post_type( $discount_id ) != 'wpi_discount' ) {
199
+    if (get_post_type($discount_id) != 'wpi_discount') {
200 200
         return false;
201 201
     }
202 202
 
203
-    $discount = get_post( $discount_id );
203
+    $discount = get_post($discount_id);
204 204
 
205 205
     return $discount;
206 206
 }
@@ -212,8 +212,8 @@  discard block
 block discarded – undo
212 212
  * @since 1.0.15
213 213
  * @return WPInv_Discount
214 214
  */
215
-function wpinv_get_discount_obj( $discount = 0 ) {
216
-    return new WPInv_Discount( $discount );
215
+function wpinv_get_discount_obj($discount = 0) {
216
+    return new WPInv_Discount($discount);
217 217
 }
218 218
 
219 219
 /**
@@ -222,8 +222,8 @@  discard block
 block discarded – undo
222 222
  * @param string $code The discount code.
223 223
  * @return bool|WPInv_Discount
224 224
  */
225
-function wpinv_get_discount_by_code( $code = '' ) {
226
-    return wpinv_get_discount_by( null, $code );
225
+function wpinv_get_discount_by_code($code = '') {
226
+    return wpinv_get_discount_by(null, $code);
227 227
 }
228 228
 
229 229
 /**
@@ -233,10 +233,10 @@  discard block
 block discarded – undo
233 233
  * @param string|int $value The field value
234 234
  * @return bool|WPInv_Discount
235 235
  */
236
-function wpinv_get_discount_by( $deprecated = null, $value = '' ) {
237
-    $discount = new WPInv_Discount( $value );
236
+function wpinv_get_discount_by($deprecated = null, $value = '') {
237
+    $discount = new WPInv_Discount($value);
238 238
 
239
-    if ( $discount->get_id() != 0 ) {
239
+    if ($discount->get_id() != 0) {
240 240
         return $discount;
241 241
     }
242 242
 
@@ -250,68 +250,68 @@  discard block
 block discarded – undo
250 250
  * @param array $data The discount's properties.
251 251
  * @return bool
252 252
  */
253
-function wpinv_store_discount( $post_id, $data, $post, $update = false ) {
253
+function wpinv_store_discount($post_id, $data, $post, $update = false) {
254 254
     $meta = array(
255
-        'code'              => isset( $data['code'] )             ? sanitize_text_field( $data['code'] )              : '',
256
-        'type'              => isset( $data['type'] )             ? sanitize_text_field( $data['type'] )              : 'percent',
257
-        'amount'            => isset( $data['amount'] )           ? wpinv_sanitize_amount( $data['amount'] )          : '',
258
-        'start'             => isset( $data['start'] )            ? sanitize_text_field( $data['start'] )             : '',
259
-        'expiration'        => isset( $data['expiration'] )       ? sanitize_text_field( $data['expiration'] )        : '',
260
-        'min_total'         => isset( $data['min_total'] )        ? wpinv_sanitize_amount( $data['min_total'] )       : '',
261
-        'max_total'         => isset( $data['max_total'] )        ? wpinv_sanitize_amount( $data['max_total'] )       : '',
262
-        'max_uses'          => isset( $data['max_uses'] )         ? absint( $data['max_uses'] )                       : '',
263
-        'items'             => isset( $data['items'] )            ? $data['items']                                    : array(),
264
-        'excluded_items'    => isset( $data['excluded_items'] )   ? $data['excluded_items']                           : array(),
265
-        'is_recurring'      => isset( $data['recurring'] )        ? (bool)$data['recurring']                          : false,
266
-        'is_single_use'     => isset( $data['single_use'] )       ? (bool)$data['single_use']                         : false,
267
-        'uses'              => isset( $data['uses'] )             ? (int)$data['uses']                                : false,
255
+        'code'              => isset($data['code']) ? sanitize_text_field($data['code']) : '',
256
+        'type'              => isset($data['type']) ? sanitize_text_field($data['type']) : 'percent',
257
+        'amount'            => isset($data['amount']) ? wpinv_sanitize_amount($data['amount']) : '',
258
+        'start'             => isset($data['start']) ? sanitize_text_field($data['start']) : '',
259
+        'expiration'        => isset($data['expiration']) ? sanitize_text_field($data['expiration']) : '',
260
+        'min_total'         => isset($data['min_total']) ? wpinv_sanitize_amount($data['min_total']) : '',
261
+        'max_total'         => isset($data['max_total']) ? wpinv_sanitize_amount($data['max_total']) : '',
262
+        'max_uses'          => isset($data['max_uses']) ? absint($data['max_uses']) : '',
263
+        'items'             => isset($data['items']) ? $data['items'] : array(),
264
+        'excluded_items'    => isset($data['excluded_items']) ? $data['excluded_items'] : array(),
265
+        'is_recurring'      => isset($data['recurring']) ? (bool) $data['recurring'] : false,
266
+        'is_single_use'     => isset($data['single_use']) ? (bool) $data['single_use'] : false,
267
+        'uses'              => isset($data['uses']) ? (int) $data['uses'] : false,
268 268
     );
269 269
 
270
-    if ( $meta['type'] == 'percent' && (float)$meta['amount'] > 100 ) {
270
+    if ($meta['type'] == 'percent' && (float) $meta['amount'] > 100) {
271 271
         $meta['amount'] = 100;
272 272
     }
273 273
 
274
-    if ( !empty( $meta['start'] ) ) {
275
-        $meta['start']      = date_i18n( 'Y-m-d H:i:s', strtotime( $meta['start'] ) );
274
+    if (!empty($meta['start'])) {
275
+        $meta['start'] = date_i18n('Y-m-d H:i:s', strtotime($meta['start']));
276 276
     }
277 277
 
278
-    if ( !empty( $meta['expiration'] ) ) {
279
-        $meta['expiration'] = date_i18n( 'Y-m-d H:i:s', strtotime( $meta['expiration'] ) );
278
+    if (!empty($meta['expiration'])) {
279
+        $meta['expiration'] = date_i18n('Y-m-d H:i:s', strtotime($meta['expiration']));
280 280
 
281
-        if ( !empty( $meta['start'] ) && strtotime( $meta['start'] ) > strtotime( $meta['expiration'] ) ) {
281
+        if (!empty($meta['start']) && strtotime($meta['start']) > strtotime($meta['expiration'])) {
282 282
             $meta['expiration'] = $meta['start'];
283 283
         }
284 284
     }
285 285
 
286
-    if ( $meta['uses'] === false ) {
287
-        unset( $meta['uses'] );
286
+    if ($meta['uses'] === false) {
287
+        unset($meta['uses']);
288 288
     }
289 289
 
290
-    if ( ! empty( $meta['items'] ) ) {
291
-        foreach ( $meta['items'] as $key => $item ) {
292
-            if ( 0 === intval( $item ) ) {
293
-                unset( $meta['items'][ $key ] );
290
+    if (!empty($meta['items'])) {
291
+        foreach ($meta['items'] as $key => $item) {
292
+            if (0 === intval($item)) {
293
+                unset($meta['items'][$key]);
294 294
             }
295 295
         }
296 296
     }
297 297
 
298
-    if ( ! empty( $meta['excluded_items'] ) ) {
299
-        foreach ( $meta['excluded_items'] as $key => $item ) {
300
-            if ( 0 === intval( $item ) ) {
301
-                unset( $meta['excluded_items'][ $key ] );
298
+    if (!empty($meta['excluded_items'])) {
299
+        foreach ($meta['excluded_items'] as $key => $item) {
300
+            if (0 === intval($item)) {
301
+                unset($meta['excluded_items'][$key]);
302 302
             }
303 303
         }
304 304
     }
305 305
 
306
-    $meta = apply_filters( 'wpinv_update_discount', $meta, $post_id, $post );
306
+    $meta = apply_filters('wpinv_update_discount', $meta, $post_id, $post);
307 307
 
308
-    do_action( 'wpinv_pre_update_discount', $meta, $post_id, $post );
308
+    do_action('wpinv_pre_update_discount', $meta, $post_id, $post);
309 309
 
310
-    foreach( $meta as $key => $value ) {
311
-        update_post_meta( $post_id, '_wpi_discount_' . $key, $value );
310
+    foreach ($meta as $key => $value) {
311
+        update_post_meta($post_id, '_wpi_discount_' . $key, $value);
312 312
     }
313 313
 
314
-    do_action( 'wpinv_post_update_discount', $meta, $post_id, $post );
314
+    do_action('wpinv_post_update_discount', $meta, $post_id, $post);
315 315
 
316 316
     return $post_id;
317 317
 }
@@ -322,10 +322,10 @@  discard block
 block discarded – undo
322 322
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
323 323
  * @return bool
324 324
  */
325
-function wpinv_remove_discount( $discount = 0 ) {
325
+function wpinv_remove_discount($discount = 0) {
326 326
 
327
-    $discount = wpinv_get_discount_obj( $discount );
328
-    if( ! $discount->exists() ) {
327
+    $discount = wpinv_get_discount_obj($discount);
328
+    if (!$discount->exists()) {
329 329
         return false;
330 330
     }
331 331
 
@@ -340,9 +340,9 @@  discard block
 block discarded – undo
340 340
  * @param string $new_status
341 341
  * @return bool
342 342
  */
343
-function wpinv_update_discount_status( $discount = 0, $new_status = 'publish' ) {
344
-    $discount = wpinv_get_discount_obj( $discount );
345
-    return $discount->update_status( $new_status );
343
+function wpinv_update_discount_status($discount = 0, $new_status = 'publish') {
344
+    $discount = wpinv_get_discount_obj($discount);
345
+    return $discount->update_status($new_status);
346 346
 }
347 347
 
348 348
 /**
@@ -351,48 +351,48 @@  discard block
 block discarded – undo
351 351
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
352 352
  * @return bool
353 353
  */
354
-function wpinv_discount_exists( $discount ) {
355
-    $discount = wpinv_get_discount_obj( $discount );
354
+function wpinv_discount_exists($discount) {
355
+    $discount = wpinv_get_discount_obj($discount);
356 356
     return $discount->exists();
357 357
 }
358 358
 
359
-function wpinv_is_discount_active( $code_id = null, $silent = false ) {
360
-    $discount = wpinv_get_discount(  $code_id );
359
+function wpinv_is_discount_active($code_id = null, $silent = false) {
360
+    $discount = wpinv_get_discount($code_id);
361 361
     $return   = false;
362 362
 
363
-    if ( $discount ) {
364
-        if ( wpinv_is_discount_expired( $code_id, $silent ) ) {
365
-            if( defined( 'DOING_AJAX' ) && ! $silent ) {
366
-                wpinv_set_error( 'wpinv-discount-error', __( 'This discount is expired.', 'invoicing' ) );
363
+    if ($discount) {
364
+        if (wpinv_is_discount_expired($code_id, $silent)) {
365
+            if (defined('DOING_AJAX') && !$silent) {
366
+                wpinv_set_error('wpinv-discount-error', __('This discount is expired.', 'invoicing'));
367 367
             }
368
-        } elseif ( $discount->post_status == 'publish' ) {
368
+        } elseif ($discount->post_status == 'publish') {
369 369
             $return = true;
370 370
         } else {
371
-            if( defined( 'DOING_AJAX' ) && ! $silent ) {
372
-                wpinv_set_error( 'wpinv-discount-error', __( 'This discount is not active.', 'invoicing' ) );
371
+            if (defined('DOING_AJAX') && !$silent) {
372
+                wpinv_set_error('wpinv-discount-error', __('This discount is not active.', 'invoicing'));
373 373
             }
374 374
         }
375 375
     }
376 376
 
377
-    return apply_filters( 'wpinv_is_discount_active', $return, $code_id );
377
+    return apply_filters('wpinv_is_discount_active', $return, $code_id);
378 378
 }
379 379
 
380
-function wpinv_get_discount_code( $code_id = null ) {
381
-    $code = get_post_meta( $code_id, '_wpi_discount_code', true );
380
+function wpinv_get_discount_code($code_id = null) {
381
+    $code = get_post_meta($code_id, '_wpi_discount_code', true);
382 382
 
383
-    return apply_filters( 'wpinv_get_discount_code', $code, $code_id );
383
+    return apply_filters('wpinv_get_discount_code', $code, $code_id);
384 384
 }
385 385
 
386
-function wpinv_get_discount_start_date( $code_id = null ) {
387
-    $start_date = get_post_meta( $code_id, '_wpi_discount_start', true );
386
+function wpinv_get_discount_start_date($code_id = null) {
387
+    $start_date = get_post_meta($code_id, '_wpi_discount_start', true);
388 388
 
389
-    return apply_filters( 'wpinv_get_discount_start_date', $start_date, $code_id );
389
+    return apply_filters('wpinv_get_discount_start_date', $start_date, $code_id);
390 390
 }
391 391
 
392
-function wpinv_get_discount_expiration( $code_id = null ) {
393
-    $expiration = get_post_meta( $code_id, '_wpi_discount_expiration', true );
392
+function wpinv_get_discount_expiration($code_id = null) {
393
+    $expiration = get_post_meta($code_id, '_wpi_discount_expiration', true);
394 394
 
395
-    return apply_filters( 'wpinv_get_discount_expiration', $expiration, $code_id );
395
+    return apply_filters('wpinv_get_discount_expiration', $expiration, $code_id);
396 396
 }
397 397
 
398 398
 /**
@@ -401,8 +401,8 @@  discard block
 block discarded – undo
401 401
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
402 402
  * @return int
403 403
  */
404
-function wpinv_get_discount_max_uses( $discount = array() ) {
405
-    $discount = wpinv_get_discount_obj( $discount );
404
+function wpinv_get_discount_max_uses($discount = array()) {
405
+    $discount = wpinv_get_discount_obj($discount);
406 406
     return (int) $discount->max_uses;
407 407
 }
408 408
 
@@ -412,8 +412,8 @@  discard block
 block discarded – undo
412 412
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
413 413
  * @return int
414 414
  */
415
-function wpinv_get_discount_uses( $discount = array() ) {
416
-    $discount = wpinv_get_discount_obj( $discount );
415
+function wpinv_get_discount_uses($discount = array()) {
416
+    $discount = wpinv_get_discount_obj($discount);
417 417
     return (int) $discount->uses;
418 418
 }
419 419
 
@@ -423,8 +423,8 @@  discard block
 block discarded – undo
423 423
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
424 424
  * @return float
425 425
  */
426
-function wpinv_get_discount_min_total( $discount = array() ) {
427
-    $discount = wpinv_get_discount_obj( $discount );
426
+function wpinv_get_discount_min_total($discount = array()) {
427
+    $discount = wpinv_get_discount_obj($discount);
428 428
     return (float) $discount->min_total;
429 429
 }
430 430
 
@@ -434,8 +434,8 @@  discard block
 block discarded – undo
434 434
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
435 435
  * @return float
436 436
  */
437
-function wpinv_get_discount_max_total( $discount = array() ) {
438
-    $discount = wpinv_get_discount_obj( $discount );
437
+function wpinv_get_discount_max_total($discount = array()) {
438
+    $discount = wpinv_get_discount_obj($discount);
439 439
     return (float) $discount->max_total;
440 440
 }
441 441
 
@@ -445,8 +445,8 @@  discard block
 block discarded – undo
445 445
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
446 446
  * @return float
447 447
  */
448
-function wpinv_get_discount_amount( $discount = array() ) {
449
-    $discount = wpinv_get_discount_obj( $discount );
448
+function wpinv_get_discount_amount($discount = array()) {
449
+    $discount = wpinv_get_discount_obj($discount);
450 450
     return (float) $discount->amount;
451 451
 }
452 452
 
@@ -457,28 +457,28 @@  discard block
 block discarded – undo
457 457
  * @param bool $name
458 458
  * @return string
459 459
  */
460
-function wpinv_get_discount_type( $discount = array(), $name = false ) {
461
-    $discount = wpinv_get_discount_obj( $discount );
460
+function wpinv_get_discount_type($discount = array(), $name = false) {
461
+    $discount = wpinv_get_discount_obj($discount);
462 462
 
463 463
     // Are we returning the name or just the type.
464
-    if( $name ) {
464
+    if ($name) {
465 465
         return $discount->type_name;
466 466
     }
467 467
 
468 468
     return $discount->type;
469 469
 }
470 470
 
471
-function wpinv_discount_status( $status ) {
472
-    switch( $status ){
471
+function wpinv_discount_status($status) {
472
+    switch ($status) {
473 473
         case 'expired' :
474
-            $name = __( 'Expired', 'invoicing' );
474
+            $name = __('Expired', 'invoicing');
475 475
             break;
476 476
         case 'publish' :
477 477
         case 'active' :
478
-            $name = __( 'Active', 'invoicing' );
478
+            $name = __('Active', 'invoicing');
479 479
             break;
480 480
         default :
481
-            $name = __( 'Inactive', 'invoicing' );
481
+            $name = __('Inactive', 'invoicing');
482 482
             break;
483 483
     }
484 484
     return $name;
@@ -490,8 +490,8 @@  discard block
 block discarded – undo
490 490
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
491 491
  * @return array
492 492
  */
493
-function wpinv_get_discount_excluded_items( $discount = array() ) {
494
-    $discount = wpinv_get_discount_obj( $discount );
493
+function wpinv_get_discount_excluded_items($discount = array()) {
494
+    $discount = wpinv_get_discount_obj($discount);
495 495
     return $discount->excluded_items;
496 496
 }
497 497
 
@@ -501,17 +501,17 @@  discard block
 block discarded – undo
501 501
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
502 502
  * @return array
503 503
  */
504
-function wpinv_get_discount_item_reqs( $discount = array() ) {
505
-    $discount = wpinv_get_discount_obj( $discount );
504
+function wpinv_get_discount_item_reqs($discount = array()) {
505
+    $discount = wpinv_get_discount_obj($discount);
506 506
     return $discount->items;
507 507
 }
508 508
 
509
-function wpinv_get_discount_item_condition( $code_id = 0 ) {
510
-    return get_post_meta( $code_id, '_wpi_discount_item_condition', true );
509
+function wpinv_get_discount_item_condition($code_id = 0) {
510
+    return get_post_meta($code_id, '_wpi_discount_item_condition', true);
511 511
 }
512 512
 
513
-function wpinv_is_discount_not_global( $code_id = 0 ) {
514
-    return (bool) get_post_meta( $code_id, '_wpi_discount_is_not_global', true );
513
+function wpinv_is_discount_not_global($code_id = 0) {
514
+    return (bool) get_post_meta($code_id, '_wpi_discount_is_not_global', true);
515 515
 }
516 516
 
517 517
 /**
@@ -520,14 +520,14 @@  discard block
 block discarded – undo
520 520
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
521 521
  * @return bool
522 522
  */
523
-function wpinv_is_discount_expired( $discount = array(), $silent = false ) {
524
-    $discount = wpinv_get_discount_obj( $discount );
523
+function wpinv_is_discount_expired($discount = array(), $silent = false) {
524
+    $discount = wpinv_get_discount_obj($discount);
525 525
 
526
-    if ( $discount->is_expired() ) {
527
-        $discount->update_status( 'pending' );
526
+    if ($discount->is_expired()) {
527
+        $discount->update_status('pending');
528 528
 
529
-        if( empty( $silent ) ) {
530
-            wpinv_set_error( 'wpinv-discount-error', __( 'This discount has expired.', 'invoicing' ) );
529
+        if (empty($silent)) {
530
+            wpinv_set_error('wpinv-discount-error', __('This discount has expired.', 'invoicing'));
531 531
         }
532 532
         return true;
533 533
     }
@@ -541,12 +541,12 @@  discard block
 block discarded – undo
541 541
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
542 542
  * @return bool
543 543
  */
544
-function wpinv_is_discount_started( $discount = array() ) {
545
-    $discount = wpinv_get_discount_obj( $discount );
544
+function wpinv_is_discount_started($discount = array()) {
545
+    $discount = wpinv_get_discount_obj($discount);
546 546
     $started  = $discount->has_started();
547 547
 
548
-    if( empty( $started ) ) {
549
-        wpinv_set_error( 'wpinv-discount-error', __( 'This discount is not active yet.', 'invoicing' ) );
548
+    if (empty($started)) {
549
+        wpinv_set_error('wpinv-discount-error', __('This discount is not active yet.', 'invoicing'));
550 550
     }
551 551
 
552 552
     return $started;
@@ -558,10 +558,10 @@  discard block
 block discarded – undo
558 558
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
559 559
  * @return bool
560 560
  */
561
-function wpinv_check_discount_dates( $discount ) {
562
-    $discount = wpinv_get_discount_obj( $discount );
563
-    $return   = wpinv_is_discount_started( $discount ) && ! wpinv_is_discount_expired( $discount );
564
-    return apply_filters( 'wpinv_check_discount_dates', $return, $discount->ID, $discount, $discount->code );
561
+function wpinv_check_discount_dates($discount) {
562
+    $discount = wpinv_get_discount_obj($discount);
563
+    $return   = wpinv_is_discount_started($discount) && !wpinv_is_discount_expired($discount);
564
+    return apply_filters('wpinv_check_discount_dates', $return, $discount->ID, $discount, $discount->code);
565 565
 }
566 566
 
567 567
 /**
@@ -570,12 +570,12 @@  discard block
 block discarded – undo
570 570
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
571 571
  * @return bool
572 572
  */
573
-function wpinv_is_discount_maxed_out( $discount ) {
574
-    $discount    = wpinv_get_discount_obj( $discount );
573
+function wpinv_is_discount_maxed_out($discount) {
574
+    $discount    = wpinv_get_discount_obj($discount);
575 575
     $maxed_out   = $discount->has_exceeded_limit();
576 576
 
577
-    if ( $maxed_out ) {
578
-        wpinv_set_error( 'wpinv-discount-error', __( 'This discount has reached its maximum usage.', 'invoicing' ) );
577
+    if ($maxed_out) {
578
+        wpinv_set_error('wpinv-discount-error', __('This discount has reached its maximum usage.', 'invoicing'));
579 579
     }
580 580
 
581 581
     return $maxed_out;
@@ -587,13 +587,13 @@  discard block
 block discarded – undo
587 587
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
588 588
  * @return bool
589 589
  */
590
-function wpinv_discount_is_min_met( $discount ) {
591
-    $discount    = wpinv_get_discount_obj( $discount );
592
-    $cart_amount = (float)wpinv_get_cart_discountable_subtotal( $discount->ID );
593
-    $min_met     = $discount->is_minimum_amount_met( $cart_amount );
590
+function wpinv_discount_is_min_met($discount) {
591
+    $discount    = wpinv_get_discount_obj($discount);
592
+    $cart_amount = (float) wpinv_get_cart_discountable_subtotal($discount->ID);
593
+    $min_met     = $discount->is_minimum_amount_met($cart_amount);
594 594
 
595
-    if ( ! $min_met ) {
596
-        wpinv_set_error( 'wpinv-discount-error', sprintf( __( 'Minimum invoice amount should be %s', 'invoicing' ), wpinv_price( wpinv_format_amount( $discount->min_total ) ) ) );
595
+    if (!$min_met) {
596
+        wpinv_set_error('wpinv-discount-error', sprintf(__('Minimum invoice amount should be %s', 'invoicing'), wpinv_price(wpinv_format_amount($discount->min_total))));
597 597
     }
598 598
 
599 599
     return $min_met;
@@ -605,13 +605,13 @@  discard block
 block discarded – undo
605 605
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
606 606
  * @return bool
607 607
  */
608
-function wpinv_discount_is_max_met( $discount ) {
609
-    $discount    = wpinv_get_discount_obj( $discount );
610
-    $cart_amount = (float)wpinv_get_cart_discountable_subtotal( $discount->ID );
611
-    $max_met     = $discount->is_maximum_amount_met( $cart_amount );
608
+function wpinv_discount_is_max_met($discount) {
609
+    $discount    = wpinv_get_discount_obj($discount);
610
+    $cart_amount = (float) wpinv_get_cart_discountable_subtotal($discount->ID);
611
+    $max_met     = $discount->is_maximum_amount_met($cart_amount);
612 612
 
613
-    if ( ! $max_met ) {
614
-        wpinv_set_error( 'wpinv-discount-error', sprintf( __( 'Maximum invoice amount should be %s', 'invoicing' ), wpinv_price( wpinv_format_amount( $discount->max_total ) ) ) );
613
+    if (!$max_met) {
614
+        wpinv_set_error('wpinv-discount-error', sprintf(__('Maximum invoice amount should be %s', 'invoicing'), wpinv_price(wpinv_format_amount($discount->max_total))));
615 615
     }
616 616
 
617 617
     return $max_met;
@@ -623,8 +623,8 @@  discard block
 block discarded – undo
623 623
  * @param int|array|string|WPInv_Discount $discount discount data, object, ID or code.
624 624
  * @return bool
625 625
  */
626
-function wpinv_discount_is_single_use( $discount ) {
627
-    $discount    = wpinv_get_discount_obj( $discount );
626
+function wpinv_discount_is_single_use($discount) {
627
+    $discount = wpinv_get_discount_obj($discount);
628 628
     return $discount->is_single_use;
629 629
 }
630 630
 
@@ -635,53 +635,53 @@  discard block
 block discarded – undo
635 635
  * @param int|array|string|WPInv_Discount $code discount data, object, ID or code.
636 636
  * @return bool
637 637
  */
638
-function wpinv_discount_is_recurring( $discount = 0, $code = 0 ) {
638
+function wpinv_discount_is_recurring($discount = 0, $code = 0) {
639 639
 
640
-    if( ! empty( $discount ) ) {
641
-        $discount    = wpinv_get_discount_obj( $discount );
640
+    if (!empty($discount)) {
641
+        $discount    = wpinv_get_discount_obj($discount);
642 642
     } else {
643
-        $discount    = wpinv_get_discount_obj( $code );
643
+        $discount    = wpinv_get_discount_obj($code);
644 644
     }
645 645
 
646 646
     return $discount->get_is_recurring();
647 647
 }
648 648
 
649
-function wpinv_discount_item_reqs_met( $code_id = null ) {
650
-    $item_reqs    = wpinv_get_discount_item_reqs( $code_id );
651
-    $condition    = wpinv_get_discount_item_condition( $code_id );
652
-    $excluded_ps  = wpinv_get_discount_excluded_items( $code_id );
649
+function wpinv_discount_item_reqs_met($code_id = null) {
650
+    $item_reqs    = wpinv_get_discount_item_reqs($code_id);
651
+    $condition    = wpinv_get_discount_item_condition($code_id);
652
+    $excluded_ps  = wpinv_get_discount_excluded_items($code_id);
653 653
     $cart_items   = wpinv_get_cart_contents();
654
-    $cart_ids     = $cart_items ? wp_list_pluck( $cart_items, 'id' ) : null;
654
+    $cart_ids     = $cart_items ? wp_list_pluck($cart_items, 'id') : null;
655 655
     $ret          = false;
656 656
 
657
-    if ( empty( $item_reqs ) && empty( $excluded_ps ) ) {
657
+    if (empty($item_reqs) && empty($excluded_ps)) {
658 658
         $ret = true;
659 659
     }
660 660
 
661 661
     // Normalize our data for item requirements, exclusions and cart data
662 662
     // First absint the items, then sort, and reset the array keys
663
-    $item_reqs = array_map( 'absint', $item_reqs );
664
-    asort( $item_reqs );
665
-    $item_reqs = array_values( $item_reqs );
663
+    $item_reqs = array_map('absint', $item_reqs);
664
+    asort($item_reqs);
665
+    $item_reqs = array_values($item_reqs);
666 666
 
667
-    $excluded_ps  = array_map( 'absint', $excluded_ps );
668
-    asort( $excluded_ps );
669
-    $excluded_ps  = array_values( $excluded_ps );
667
+    $excluded_ps  = array_map('absint', $excluded_ps);
668
+    asort($excluded_ps);
669
+    $excluded_ps  = array_values($excluded_ps);
670 670
 
671
-    $cart_ids     = array_map( 'absint', $cart_ids );
672
-    asort( $cart_ids );
673
-    $cart_ids     = array_values( $cart_ids );
671
+    $cart_ids     = array_map('absint', $cart_ids);
672
+    asort($cart_ids);
673
+    $cart_ids     = array_values($cart_ids);
674 674
 
675 675
     // Ensure we have requirements before proceeding
676
-    if ( !$ret && ! empty( $item_reqs ) ) {
677
-        switch( $condition ) {
676
+    if (!$ret && !empty($item_reqs)) {
677
+        switch ($condition) {
678 678
             case 'all' :
679 679
                 // Default back to true
680 680
                 $ret = true;
681 681
 
682
-                foreach ( $item_reqs as $item_id ) {
683
-                    if ( !wpinv_item_in_cart( $item_id ) ) {
684
-                        wpinv_set_error( 'wpinv-discount-error', __( 'The item requirements for this discount are not met.', 'invoicing' ) );
682
+                foreach ($item_reqs as $item_id) {
683
+                    if (!wpinv_item_in_cart($item_id)) {
684
+                        wpinv_set_error('wpinv-discount-error', __('The item requirements for this discount are not met.', 'invoicing'));
685 685
                         $ret = false;
686 686
                         break;
687 687
                     }
@@ -690,15 +690,15 @@  discard block
 block discarded – undo
690 690
                 break;
691 691
 
692 692
             default : // Any
693
-                foreach ( $item_reqs as $item_id ) {
694
-                    if ( wpinv_item_in_cart( $item_id ) ) {
693
+                foreach ($item_reqs as $item_id) {
694
+                    if (wpinv_item_in_cart($item_id)) {
695 695
                         $ret = true;
696 696
                         break;
697 697
                     }
698 698
                 }
699 699
 
700
-                if( ! $ret ) {
701
-                    wpinv_set_error( 'wpinv-discount-error', __( 'The item requirements for this discount are not met.', 'invoicing' ) );
700
+                if (!$ret) {
701
+                    wpinv_set_error('wpinv-discount-error', __('The item requirements for this discount are not met.', 'invoicing'));
702 702
                 }
703 703
 
704 704
                 break;
@@ -707,15 +707,15 @@  discard block
 block discarded – undo
707 707
         $ret = true;
708 708
     }
709 709
 
710
-    if( ! empty( $excluded_ps ) ) {
710
+    if (!empty($excluded_ps)) {
711 711
         // Check that there are items other than excluded ones in the cart
712
-        if( $cart_ids == $excluded_ps ) {
713
-            wpinv_set_error( 'wpinv-discount-error', __( 'This discount is not valid for the cart contents.', 'invoicing' ) );
712
+        if ($cart_ids == $excluded_ps) {
713
+            wpinv_set_error('wpinv-discount-error', __('This discount is not valid for the cart contents.', 'invoicing'));
714 714
             $ret = false;
715 715
         }
716 716
     }
717 717
 
718
-    return (bool) apply_filters( 'wpinv_is_discount_item_req_met', $ret, $code_id, $condition );
718
+    return (bool) apply_filters('wpinv_is_discount_item_req_met', $ret, $code_id, $condition);
719 719
 }
720 720
 
721 721
 /**
@@ -726,54 +726,54 @@  discard block
 block discarded – undo
726 726
  * @param int|array|string|WPInv_Discount $code_id discount data, object, ID or code.
727 727
  * @return bool
728 728
  */
729
-function wpinv_is_discount_used( $discount = array(), $user = '', $code_id = array() ) {
729
+function wpinv_is_discount_used($discount = array(), $user = '', $code_id = array()) {
730 730
 
731
-    if( ! empty( $discount ) ) {
732
-        $discount = wpinv_get_discount_obj( $discount );
731
+    if (!empty($discount)) {
732
+        $discount = wpinv_get_discount_obj($discount);
733 733
     } else {
734
-        $discount = wpinv_get_discount_obj( $code_id );
734
+        $discount = wpinv_get_discount_obj($code_id);
735 735
     }
736 736
 
737
-    $is_used = ! $discount->is_valid_for_user( $user );
738
-    $is_used = apply_filters( 'wpinv_is_discount_used', $is_used, $discount->code, $user, $discount->ID, $discount );
737
+    $is_used = !$discount->is_valid_for_user($user);
738
+    $is_used = apply_filters('wpinv_is_discount_used', $is_used, $discount->code, $user, $discount->ID, $discount);
739 739
 
740
-    if( $is_used ) {
741
-        wpinv_set_error( 'wpinv-discount-error', __( 'This discount has already been redeemed.', 'invoicing' ) );
740
+    if ($is_used) {
741
+        wpinv_set_error('wpinv-discount-error', __('This discount has already been redeemed.', 'invoicing'));
742 742
     }
743 743
 
744 744
     return $is_used;
745 745
 }
746 746
 
747
-function wpinv_is_discount_valid( $code = '', $user = '', $set_error = true ) {
747
+function wpinv_is_discount_valid($code = '', $user = '', $set_error = true) {
748 748
 
749 749
     // Abort early if there is no discount code.
750
-    if ( empty( $code ) ) {
750
+    if (empty($code)) {
751 751
         return false;
752 752
     }
753 753
 
754 754
     $return      = false;
755
-    $discount_id = wpinv_get_discount_id_by_code( $code );
756
-    $user        = trim( $user );
755
+    $discount_id = wpinv_get_discount_id_by_code($code);
756
+    $user        = trim($user);
757 757
 
758
-    if ( wpinv_get_cart_contents() ) {
759
-        if ( $discount_id !== false ) {
758
+    if (wpinv_get_cart_contents()) {
759
+        if ($discount_id !== false) {
760 760
             if (
761
-                wpinv_is_discount_active( $discount_id ) &&
762
-                wpinv_check_discount_dates( $discount_id ) &&
763
-                !wpinv_is_discount_maxed_out( $discount_id ) &&
764
-                !wpinv_is_discount_used( $code, $user, $discount_id ) &&
765
-                wpinv_discount_is_min_met( $discount_id ) &&
766
-                wpinv_discount_is_max_met( $discount_id ) &&
767
-                wpinv_discount_item_reqs_met( $discount_id )
761
+                wpinv_is_discount_active($discount_id) &&
762
+                wpinv_check_discount_dates($discount_id) &&
763
+                !wpinv_is_discount_maxed_out($discount_id) &&
764
+                !wpinv_is_discount_used($code, $user, $discount_id) &&
765
+                wpinv_discount_is_min_met($discount_id) &&
766
+                wpinv_discount_is_max_met($discount_id) &&
767
+                wpinv_discount_item_reqs_met($discount_id)
768 768
             ) {
769 769
                 $return = true;
770 770
             }
771
-        } elseif( $set_error ) {
772
-            wpinv_set_error( 'wpinv-discount-error', __( 'This discount is invalid.', 'invoicing' ) );
771
+        } elseif ($set_error) {
772
+            wpinv_set_error('wpinv-discount-error', __('This discount is invalid.', 'invoicing'));
773 773
         }
774 774
     }
775 775
 
776
-    return apply_filters( 'wpinv_is_discount_valid', $return, $discount_id, $code, $user );
776
+    return apply_filters('wpinv_is_discount_valid', $return, $discount_id, $code, $user);
777 777
 }
778 778
 
779 779
 /**
@@ -782,9 +782,9 @@  discard block
 block discarded – undo
782 782
  * @param string $code
783 783
  * @return bool|false
784 784
  */
785
-function wpinv_get_discount_id_by_code( $code ) {
786
-    $discount = wpinv_get_discount_by_code( $code );
787
-    if ( $discount ) {
785
+function wpinv_get_discount_id_by_code($code) {
786
+    $discount = wpinv_get_discount_by_code($code);
787
+    if ($discount) {
788 788
         return $discount->get_id();
789 789
     }
790 790
     return false;
@@ -797,9 +797,9 @@  discard block
 block discarded – undo
797 797
  * @param float $base_price The number of usages to increase by
798 798
  * @return float
799 799
  */
800
-function wpinv_get_discounted_amount( $discount, $base_price ) {
801
-    $discount = wpinv_get_discount_obj( $discount );
802
-    return $discount->get_discounted_amount( $base_price );
800
+function wpinv_get_discounted_amount($discount, $base_price) {
801
+    $discount = wpinv_get_discount_obj($discount);
802
+    return $discount->get_discounted_amount($base_price);
803 803
 }
804 804
 
805 805
 /**
@@ -809,9 +809,9 @@  discard block
 block discarded – undo
809 809
  * @param int $by The number of usages to increase by.
810 810
  * @return int the new number of uses.
811 811
  */
812
-function wpinv_increase_discount_usage( $discount, $by = 1 ) {
813
-    $discount   = wpinv_get_discount_obj( $discount );
814
-    return $discount->increase_usage( $by );
812
+function wpinv_increase_discount_usage($discount, $by = 1) {
813
+    $discount = wpinv_get_discount_obj($discount);
814
+    return $discount->increase_usage($by);
815 815
 }
816 816
 
817 817
 /**
@@ -821,72 +821,72 @@  discard block
 block discarded – undo
821 821
  * @param int $by The number of usages to decrease by.
822 822
  * @return int the new number of uses.
823 823
  */
824
-function wpinv_decrease_discount_usage( $discount, $by = 1 ) {
825
-    $discount   = wpinv_get_discount_obj( $discount );
826
-    return $discount->increase_usage( 0 - $by );
824
+function wpinv_decrease_discount_usage($discount, $by = 1) {
825
+    $discount = wpinv_get_discount_obj($discount);
826
+    return $discount->increase_usage(0 - $by);
827 827
 }
828 828
 
829
-function wpinv_format_discount_rate( $type, $amount ) {
830
-    if ( $type == 'flat' ) {
831
-        $rate = wpinv_price( wpinv_format_amount( $amount ) );
829
+function wpinv_format_discount_rate($type, $amount) {
830
+    if ($type == 'flat') {
831
+        $rate = wpinv_price(wpinv_format_amount($amount));
832 832
     } else {
833 833
         $rate = $amount . '%';
834 834
     }
835 835
 
836
-    return apply_filters( 'wpinv_format_discount_rate', $rate, $type, $amount );
836
+    return apply_filters('wpinv_format_discount_rate', $rate, $type, $amount);
837 837
 }
838 838
 
839
-function wpinv_set_cart_discount( $code = '' ) {
840
-    if ( wpinv_multiple_discounts_allowed() ) {
839
+function wpinv_set_cart_discount($code = '') {
840
+    if (wpinv_multiple_discounts_allowed()) {
841 841
         // Get all active cart discounts
842 842
         $discounts = wpinv_get_cart_discounts();
843 843
     } else {
844 844
         $discounts = false; // Only one discount allowed per purchase, so override any existing
845 845
     }
846 846
 
847
-    if ( $discounts ) {
848
-        $key = array_search( strtolower( $code ), array_map( 'strtolower', $discounts ) );
849
-        if( false !== $key ) {
850
-            unset( $discounts[ $key ] ); // Can't set the same discount more than once
847
+    if ($discounts) {
848
+        $key = array_search(strtolower($code), array_map('strtolower', $discounts));
849
+        if (false !== $key) {
850
+            unset($discounts[$key]); // Can't set the same discount more than once
851 851
         }
852 852
         $discounts[] = $code;
853 853
     } else {
854 854
         $discounts = array();
855 855
         $discounts[] = $code;
856 856
     }
857
-    $discounts = array_values( $discounts );
857
+    $discounts = array_values($discounts);
858 858
 
859 859
     $data = wpinv_get_checkout_session();
860
-    if ( empty( $data ) ) {
860
+    if (empty($data)) {
861 861
         $data = array();
862 862
     } else {
863
-        if ( !empty( $data['invoice_id'] ) && $payment_meta = wpinv_get_invoice_meta( $data['invoice_id'] ) ) {
864
-            $payment_meta['user_info']['discount']  = implode( ',', $discounts );
865
-            update_post_meta( $data['invoice_id'], '_wpinv_payment_meta', $payment_meta );
863
+        if (!empty($data['invoice_id']) && $payment_meta = wpinv_get_invoice_meta($data['invoice_id'])) {
864
+            $payment_meta['user_info']['discount'] = implode(',', $discounts);
865
+            update_post_meta($data['invoice_id'], '_wpinv_payment_meta', $payment_meta);
866 866
         }
867 867
     }
868 868
     $data['cart_discounts'] = $discounts;
869 869
 
870
-    wpinv_set_checkout_session( $data );
870
+    wpinv_set_checkout_session($data);
871 871
 
872 872
     return $discounts;
873 873
 }
874 874
 
875
-function wpinv_unset_cart_discount( $code = '' ) {
875
+function wpinv_unset_cart_discount($code = '') {
876 876
     $discounts = wpinv_get_cart_discounts();
877 877
 
878
-    if ( $code && !empty( $discounts ) && in_array( $code, $discounts ) ) {
879
-        $key = array_search( $code, $discounts );
880
-        unset( $discounts[ $key ] );
878
+    if ($code && !empty($discounts) && in_array($code, $discounts)) {
879
+        $key = array_search($code, $discounts);
880
+        unset($discounts[$key]);
881 881
 
882 882
         $data = wpinv_get_checkout_session();
883 883
         $data['cart_discounts'] = $discounts;
884
-        if ( !empty( $data['invoice_id'] ) && $payment_meta = wpinv_get_invoice_meta( $data['invoice_id'] ) ) {
885
-            $payment_meta['user_info']['discount']  = !empty( $discounts ) ? implode( ',', $discounts ) : '';
886
-            update_post_meta( $data['invoice_id'], '_wpinv_payment_meta', $payment_meta );
884
+        if (!empty($data['invoice_id']) && $payment_meta = wpinv_get_invoice_meta($data['invoice_id'])) {
885
+            $payment_meta['user_info']['discount'] = !empty($discounts) ? implode(',', $discounts) : '';
886
+            update_post_meta($data['invoice_id'], '_wpinv_payment_meta', $payment_meta);
887 887
         }
888 888
 
889
-        wpinv_set_checkout_session( $data );
889
+        wpinv_set_checkout_session($data);
890 890
     }
891 891
 
892 892
     return $discounts;
@@ -895,10 +895,10 @@  discard block
 block discarded – undo
895 895
 function wpinv_unset_all_cart_discounts() {
896 896
     $data = wpinv_get_checkout_session();
897 897
 
898
-    if ( !empty( $data ) && isset( $data['cart_discounts'] ) ) {
899
-        unset( $data['cart_discounts'] );
898
+    if (!empty($data) && isset($data['cart_discounts'])) {
899
+        unset($data['cart_discounts']);
900 900
 
901
-         wpinv_set_checkout_session( $data );
901
+         wpinv_set_checkout_session($data);
902 902
          return true;
903 903
     }
904 904
 
@@ -907,13 +907,13 @@  discard block
 block discarded – undo
907 907
 
908 908
 function wpinv_get_cart_discounts() {
909 909
     $session = wpinv_get_checkout_session();
910
-    return empty( $session['cart_discounts'] ) ? false : $session['cart_discounts'];
910
+    return empty($session['cart_discounts']) ? false : $session['cart_discounts'];
911 911
 }
912 912
 
913
-function wpinv_cart_has_discounts( $items = array() ) {
913
+function wpinv_cart_has_discounts($items = array()) {
914 914
     $ret = false;
915 915
 
916
-    if ( wpinv_get_cart_discounts( $items ) ) {
916
+    if (wpinv_get_cart_discounts($items)) {
917 917
         $ret = true;
918 918
     }
919 919
 
@@ -924,131 +924,131 @@  discard block
 block discarded – undo
924 924
     }
925 925
     */
926 926
 
927
-    return apply_filters( 'wpinv_cart_has_discounts', $ret );
927
+    return apply_filters('wpinv_cart_has_discounts', $ret);
928 928
 }
929 929
 
930
-function wpinv_get_cart_discounted_amount( $items = array(), $discounts = false ) {
930
+function wpinv_get_cart_discounted_amount($items = array(), $discounts = false) {
931 931
     $amount = 0.00;
932
-    $items  = !empty( $items ) ? $items : wpinv_get_cart_content_details();
932
+    $items  = !empty($items) ? $items : wpinv_get_cart_content_details();
933 933
 
934
-    if ( $items ) {
935
-        $discounts = wp_list_pluck( $items, 'discount' );
934
+    if ($items) {
935
+        $discounts = wp_list_pluck($items, 'discount');
936 936
 
937
-        if ( is_array( $discounts ) ) {
938
-            $discounts = array_map( 'floatval', $discounts );
939
-            $amount    = array_sum( $discounts );
937
+        if (is_array($discounts)) {
938
+            $discounts = array_map('floatval', $discounts);
939
+            $amount    = array_sum($discounts);
940 940
         }
941 941
     }
942 942
 
943
-    return apply_filters( 'wpinv_get_cart_discounted_amount', $amount );
943
+    return apply_filters('wpinv_get_cart_discounted_amount', $amount);
944 944
 }
945 945
 
946
-function wpinv_get_cart_items_discount_amount( $items = array(), $discount = false ) {
947
-    $items  = !empty( $items ) ? $items : wpinv_get_cart_content_details();
946
+function wpinv_get_cart_items_discount_amount($items = array(), $discount = false) {
947
+    $items = !empty($items) ? $items : wpinv_get_cart_content_details();
948 948
 
949
-    if ( empty( $discount ) || empty( $items ) ) {
949
+    if (empty($discount) || empty($items)) {
950 950
         return 0;
951 951
     }
952 952
 
953 953
     $amount = 0;
954 954
 
955
-    foreach ( $items as $item ) {
956
-        $amount += wpinv_get_cart_item_discount_amount( $item, $discount );
955
+    foreach ($items as $item) {
956
+        $amount += wpinv_get_cart_item_discount_amount($item, $discount);
957 957
     }
958 958
 
959
-    $amount = wpinv_round_amount( $amount );
959
+    $amount = wpinv_round_amount($amount);
960 960
 
961 961
     return $amount;
962 962
 }
963 963
 
964
-function wpinv_get_cart_item_discount_amount( $item = array(), $discount = false ) {
964
+function wpinv_get_cart_item_discount_amount($item = array(), $discount = false) {
965 965
     global $wpinv_is_last_cart_item, $wpinv_flat_discount_total;
966 966
 
967 967
     $amount = 0;
968 968
 
969
-    if ( empty( $item ) || empty( $item['id'] ) ) {
969
+    if (empty($item) || empty($item['id'])) {
970 970
         return $amount;
971 971
     }
972 972
 
973
-    if ( empty( $item['quantity'] ) ) {
973
+    if (empty($item['quantity'])) {
974 974
         return $amount;
975 975
     }
976 976
 
977
-    if ( empty( $item['options'] ) ) {
977
+    if (empty($item['options'])) {
978 978
         $item['options'] = array();
979 979
     }
980 980
 
981
-    $price            = wpinv_get_cart_item_price( $item['id'], $item, $item['options'] );
981
+    $price            = wpinv_get_cart_item_price($item['id'], $item, $item['options']);
982 982
     $discounted_price = $price;
983 983
 
984 984
     $discounts = false === $discount ? wpinv_get_cart_discounts() : $discount;
985
-    if ( empty( $discounts ) ) {
985
+    if (empty($discounts)) {
986 986
         return $amount;
987 987
     }
988 988
 
989
-    if ( $discounts ) {
990
-        if ( is_array( $discounts ) ) {
991
-            $discounts = array_values( $discounts );
989
+    if ($discounts) {
990
+        if (is_array($discounts)) {
991
+            $discounts = array_values($discounts);
992 992
         } else {
993
-            $discounts = explode( ',', $discounts );
993
+            $discounts = explode(',', $discounts);
994 994
         }
995 995
     }
996 996
 
997
-    if( $discounts ) {
998
-        foreach ( $discounts as $discount ) {
999
-            $code_id = wpinv_get_discount_id_by_code( $discount );
997
+    if ($discounts) {
998
+        foreach ($discounts as $discount) {
999
+            $code_id = wpinv_get_discount_id_by_code($discount);
1000 1000
 
1001 1001
             // Check discount exists
1002
-            if( $code_id === false ) {
1002
+            if ($code_id === false) {
1003 1003
                 continue;
1004 1004
             }
1005 1005
 
1006
-            $reqs           = wpinv_get_discount_item_reqs( $code_id );
1007
-            $excluded_items = wpinv_get_discount_excluded_items( $code_id );
1006
+            $reqs           = wpinv_get_discount_item_reqs($code_id);
1007
+            $excluded_items = wpinv_get_discount_excluded_items($code_id);
1008 1008
 
1009 1009
             // Make sure requirements are set and that this discount shouldn't apply to the whole cart
1010
-            if ( !empty( $reqs ) && wpinv_is_discount_not_global( $code_id ) ) {
1011
-                foreach ( $reqs as $item_id ) {
1012
-                    if ( $item_id == $item['id'] && ! in_array( $item['id'], $excluded_items ) ) {
1013
-                        $discounted_price -= wpinv_get_discounted_amount( $discount, $price );
1010
+            if (!empty($reqs) && wpinv_is_discount_not_global($code_id)) {
1011
+                foreach ($reqs as $item_id) {
1012
+                    if ($item_id == $item['id'] && !in_array($item['id'], $excluded_items)) {
1013
+                        $discounted_price -= wpinv_get_discounted_amount($discount, $price);
1014 1014
                     }
1015 1015
                 }
1016 1016
             } else {
1017 1017
                 // This is a global cart discount
1018
-                if ( !in_array( $item['id'], $excluded_items ) ) {
1019
-                    if ( 'flat' === wpinv_get_discount_type( $code_id ) ) {
1018
+                if (!in_array($item['id'], $excluded_items)) {
1019
+                    if ('flat' === wpinv_get_discount_type($code_id)) {
1020 1020
                         $items_subtotal    = 0.00;
1021 1021
                         $cart_items        = wpinv_get_cart_contents();
1022 1022
 
1023
-                        foreach ( $cart_items as $cart_item ) {
1024
-                            if ( ! in_array( $cart_item['id'], $excluded_items ) ) {
1025
-                                $options = !empty( $cart_item['options'] ) ? $cart_item['options'] : array();
1026
-                                $item_price      = wpinv_get_cart_item_price( $cart_item['id'], $cart_item, $options );
1023
+                        foreach ($cart_items as $cart_item) {
1024
+                            if (!in_array($cart_item['id'], $excluded_items)) {
1025
+                                $options = !empty($cart_item['options']) ? $cart_item['options'] : array();
1026
+                                $item_price      = wpinv_get_cart_item_price($cart_item['id'], $cart_item, $options);
1027 1027
                                 $items_subtotal += $item_price * $cart_item['quantity'];
1028 1028
                             }
1029 1029
                         }
1030 1030
 
1031
-                        $subtotal_percent  = ( ( $price * $item['quantity'] ) / $items_subtotal );
1032
-                        $code_amount       = wpinv_get_discount_amount( $code_id );
1031
+                        $subtotal_percent  = (($price * $item['quantity']) / $items_subtotal);
1032
+                        $code_amount       = wpinv_get_discount_amount($code_id);
1033 1033
                         $discounted_amount = $code_amount * $subtotal_percent;
1034 1034
                         $discounted_price -= $discounted_amount;
1035 1035
 
1036
-                        $wpinv_flat_discount_total += round( $discounted_amount, wpinv_currency_decimal_filter() );
1036
+                        $wpinv_flat_discount_total += round($discounted_amount, wpinv_currency_decimal_filter());
1037 1037
 
1038
-                        if ( $wpinv_is_last_cart_item && $wpinv_flat_discount_total < $code_amount ) {
1038
+                        if ($wpinv_is_last_cart_item && $wpinv_flat_discount_total < $code_amount) {
1039 1039
                             $adjustment = $code_amount - $wpinv_flat_discount_total;
1040 1040
                             $discounted_price -= $adjustment;
1041 1041
                         }
1042 1042
                     } else {
1043
-                        $discounted_price -= wpinv_get_discounted_amount( $discount, $price );
1043
+                        $discounted_price -= wpinv_get_discounted_amount($discount, $price);
1044 1044
                     }
1045 1045
                 }
1046 1046
             }
1047 1047
         }
1048 1048
 
1049
-        $amount = ( $price - apply_filters( 'wpinv_get_cart_item_discounted_amount', $discounted_price, $discounts, $item, $price ) );
1049
+        $amount = ($price - apply_filters('wpinv_get_cart_item_discounted_amount', $discounted_price, $discounts, $item, $price));
1050 1050
 
1051
-        if ( 'flat' !== wpinv_get_discount_type( $code_id ) ) {
1051
+        if ('flat' !== wpinv_get_discount_type($code_id)) {
1052 1052
             $amount = $amount * $item['quantity'];
1053 1053
         }
1054 1054
     }
@@ -1056,59 +1056,59 @@  discard block
 block discarded – undo
1056 1056
     return $amount;
1057 1057
 }
1058 1058
 
1059
-function wpinv_cart_discounts_html( $items = array() ) {
1060
-    echo wpinv_get_cart_discounts_html( $items );
1059
+function wpinv_cart_discounts_html($items = array()) {
1060
+    echo wpinv_get_cart_discounts_html($items);
1061 1061
 }
1062 1062
 
1063
-function wpinv_get_cart_discounts_html( $items = array(), $discounts = false ) {
1063
+function wpinv_get_cart_discounts_html($items = array(), $discounts = false) {
1064 1064
     global $wpi_cart_columns;
1065 1065
 
1066
-    $items  = !empty( $items ) ? $items : wpinv_get_cart_content_details();
1066
+    $items = !empty($items) ? $items : wpinv_get_cart_content_details();
1067 1067
 
1068
-    if ( !$discounts ) {
1069
-        $discounts = wpinv_get_cart_discounts( $items );
1068
+    if (!$discounts) {
1069
+        $discounts = wpinv_get_cart_discounts($items);
1070 1070
     }
1071 1071
 
1072
-    if ( !$discounts ) {
1072
+    if (!$discounts) {
1073 1073
         return;
1074 1074
     }
1075 1075
 
1076
-    $discounts = is_array( $discounts ) ? $discounts : array( $discounts );
1076
+    $discounts = is_array($discounts) ? $discounts : array($discounts);
1077 1077
 
1078 1078
     $html = '';
1079 1079
 
1080
-    foreach ( $discounts as $discount ) {
1081
-        $discount_id    = wpinv_get_discount_id_by_code( $discount );
1082
-        $discount_value = wpinv_get_discount_amount( $discount_id );
1083
-        $rate           = wpinv_format_discount_rate( wpinv_get_discount_type( $discount_id ), $discount_value );
1084
-        $amount         = wpinv_get_cart_items_discount_amount( $items, $discount );
1085
-        $remove_btn     = '<a title="' . esc_attr__( 'Remove discount', 'invoicing' ) . '" data-code="' . $discount . '" data-value="' . $discount_value . '" class="wpi-discount-remove" href="javascript:void(0);">[<i class="fa fa-times" aria-hidden="true"></i>]</a> ';
1080
+    foreach ($discounts as $discount) {
1081
+        $discount_id    = wpinv_get_discount_id_by_code($discount);
1082
+        $discount_value = wpinv_get_discount_amount($discount_id);
1083
+        $rate           = wpinv_format_discount_rate(wpinv_get_discount_type($discount_id), $discount_value);
1084
+        $amount         = wpinv_get_cart_items_discount_amount($items, $discount);
1085
+        $remove_btn     = '<a title="' . esc_attr__('Remove discount', 'invoicing') . '" data-code="' . $discount . '" data-value="' . $discount_value . '" class="wpi-discount-remove" href="javascript:void(0);">[<i class="fa fa-times" aria-hidden="true"></i>]</a> ';
1086 1086
 
1087 1087
         $html .= '<tr class="wpinv_cart_footer_row wpinv_cart_discount_row">';
1088 1088
         ob_start();
1089
-        do_action( 'wpinv_checkout_table_discount_first', $items );
1089
+        do_action('wpinv_checkout_table_discount_first', $items);
1090 1090
         $html .= ob_get_clean();
1091
-        $html .= '<td class="wpinv_cart_discount_label text-right" colspan="' . $wpi_cart_columns . '">' . $remove_btn . '<strong>' . wpinv_cart_discount_label( $discount, $rate, false ) . '</strong></td><td class="wpinv_cart_discount text-right"><span data-discount="' . $amount . '" class="wpinv_cart_discount_amount">&ndash;' . wpinv_price( wpinv_format_amount( $amount ) ) . '</span></td>';
1091
+        $html .= '<td class="wpinv_cart_discount_label text-right" colspan="' . $wpi_cart_columns . '">' . $remove_btn . '<strong>' . wpinv_cart_discount_label($discount, $rate, false) . '</strong></td><td class="wpinv_cart_discount text-right"><span data-discount="' . $amount . '" class="wpinv_cart_discount_amount">&ndash;' . wpinv_price(wpinv_format_amount($amount)) . '</span></td>';
1092 1092
         ob_start();
1093
-        do_action( 'wpinv_checkout_table_discount_last', $items );
1093
+        do_action('wpinv_checkout_table_discount_last', $items);
1094 1094
         $html .= ob_get_clean();
1095 1095
         $html .= '</tr>';
1096 1096
     }
1097 1097
 
1098
-    return apply_filters( 'wpinv_get_cart_discounts_html', $html, $discounts, $rate );
1098
+    return apply_filters('wpinv_get_cart_discounts_html', $html, $discounts, $rate);
1099 1099
 }
1100 1100
 
1101
-function wpinv_display_cart_discount( /** @scrutinizer ignore-unused */ $formatted = false, $echo = false ) {
1101
+function wpinv_display_cart_discount(/** @scrutinizer ignore-unused */ $formatted = false, $echo = false) {
1102 1102
     $discounts = wpinv_get_cart_discounts();
1103 1103
 
1104
-    if ( empty( $discounts ) ) {
1104
+    if (empty($discounts)) {
1105 1105
         return false;
1106 1106
     }
1107 1107
 
1108
-    $discount_id  = wpinv_get_discount_id_by_code( $discounts[0] );
1109
-    $amount       = wpinv_format_discount_rate( wpinv_get_discount_type( $discount_id ), wpinv_get_discount_amount( $discount_id ) );
1108
+    $discount_id  = wpinv_get_discount_id_by_code($discounts[0]);
1109
+    $amount       = wpinv_format_discount_rate(wpinv_get_discount_type($discount_id), wpinv_get_discount_amount($discount_id));
1110 1110
 
1111
-    if ( $echo ) {
1111
+    if ($echo) {
1112 1112
         echo $amount;
1113 1113
     }
1114 1114
 
@@ -1116,65 +1116,65 @@  discard block
 block discarded – undo
1116 1116
 }
1117 1117
 
1118 1118
 function wpinv_remove_cart_discount() {
1119
-    if ( !isset( $_GET['discount_id'] ) || ! isset( $_GET['discount_code'] ) ) {
1119
+    if (!isset($_GET['discount_id']) || !isset($_GET['discount_code'])) {
1120 1120
         return;
1121 1121
     }
1122 1122
 
1123
-    do_action( 'wpinv_pre_remove_cart_discount', absint( $_GET['discount_id'] ) );
1123
+    do_action('wpinv_pre_remove_cart_discount', absint($_GET['discount_id']));
1124 1124
 
1125
-    wpinv_unset_cart_discount( urldecode( $_GET['discount_code'] ) );
1125
+    wpinv_unset_cart_discount(urldecode($_GET['discount_code']));
1126 1126
 
1127
-    do_action( 'wpinv_post_remove_cart_discount', absint( $_GET['discount_id'] ) );
1127
+    do_action('wpinv_post_remove_cart_discount', absint($_GET['discount_id']));
1128 1128
 
1129
-    wp_redirect( wpinv_get_checkout_uri() ); wpinv_die();
1129
+    wp_redirect(wpinv_get_checkout_uri()); wpinv_die();
1130 1130
 }
1131
-add_action( 'wpinv_remove_cart_discount', 'wpinv_remove_cart_discount' );
1131
+add_action('wpinv_remove_cart_discount', 'wpinv_remove_cart_discount');
1132 1132
 
1133 1133
 function wpinv_maybe_remove_cart_discount() {
1134 1134
     $discounts = wpinv_get_cart_discounts();
1135 1135
 
1136
-    if ( !$discounts ) {
1136
+    if (!$discounts) {
1137 1137
         return;
1138 1138
     }
1139 1139
 
1140
-    $discounts = array_filter( $discounts );
1141
-    foreach ( $discounts as $discount ) {
1142
-        if ( !wpinv_is_discount_valid( $discount ) ) {
1143
-            wpinv_unset_cart_discount( $discount );
1140
+    $discounts = array_filter($discounts);
1141
+    foreach ($discounts as $discount) {
1142
+        if (!wpinv_is_discount_valid($discount)) {
1143
+            wpinv_unset_cart_discount($discount);
1144 1144
         }
1145 1145
     }
1146 1146
 }
1147
-add_action( 'wpinv_post_remove_from_cart', 'wpinv_maybe_remove_cart_discount' );
1147
+add_action('wpinv_post_remove_from_cart', 'wpinv_maybe_remove_cart_discount');
1148 1148
 
1149 1149
 function wpinv_multiple_discounts_allowed() {
1150
-    $ret = wpinv_get_option( 'allow_multiple_discounts', false );
1151
-    return (bool) apply_filters( 'wpinv_multiple_discounts_allowed', $ret );
1150
+    $ret = wpinv_get_option('allow_multiple_discounts', false);
1151
+    return (bool) apply_filters('wpinv_multiple_discounts_allowed', $ret);
1152 1152
 }
1153 1153
 
1154
-function wpinv_get_discount_label( $code, $echo = true ) {
1155
-    $label = wp_sprintf( __( 'Discount%1$s', 'invoicing' ), ( $code != '' && $code != 'none' ? ' (<code>' . $code . '</code>)': '' ) );
1156
-    $label = apply_filters( 'wpinv_get_discount_label', $label, $code );
1154
+function wpinv_get_discount_label($code, $echo = true) {
1155
+    $label = wp_sprintf(__('Discount%1$s', 'invoicing'), ($code != '' && $code != 'none' ? ' (<code>' . $code . '</code>)' : ''));
1156
+    $label = apply_filters('wpinv_get_discount_label', $label, $code);
1157 1157
 
1158
-    if ( $echo ) {
1158
+    if ($echo) {
1159 1159
         echo $label;
1160 1160
     } else {
1161 1161
         return $label;
1162 1162
     }
1163 1163
 }
1164 1164
 
1165
-function wpinv_cart_discount_label( $code, $rate, $echo = true ) {
1166
-    $label = wp_sprintf( __( 'Discount: %s', 'invoicing' ), $code );
1167
-    $label = apply_filters( 'wpinv_cart_discount_label', $label, $code, $rate );
1165
+function wpinv_cart_discount_label($code, $rate, $echo = true) {
1166
+    $label = wp_sprintf(__('Discount: %s', 'invoicing'), $code);
1167
+    $label = apply_filters('wpinv_cart_discount_label', $label, $code, $rate);
1168 1168
 
1169
-    if ( $echo ) {
1169
+    if ($echo) {
1170 1170
         echo $label;
1171 1171
     } else {
1172 1172
         return $label;
1173 1173
     }
1174 1174
 }
1175 1175
 
1176
-function wpinv_check_delete_discount( $check, $post ) {
1177
-    if ( $post->post_type == 'wpi_discount' && wpinv_get_discount_uses( $post->ID ) > 0 ) {
1176
+function wpinv_check_delete_discount($check, $post) {
1177
+    if ($post->post_type == 'wpi_discount' && wpinv_get_discount_uses($post->ID) > 0) {
1178 1178
         return true;
1179 1179
     }
1180 1180
 
@@ -1185,33 +1185,33 @@  discard block
 block discarded – undo
1185 1185
     global $wpi_checkout_id;
1186 1186
 
1187 1187
     $discounts = wpinv_get_cart_discounts();
1188
-    $discounts = array_filter( $discounts );
1188
+    $discounts = array_filter($discounts);
1189 1189
 
1190
-    if ( !empty( $discounts ) ) {
1190
+    if (!empty($discounts)) {
1191 1191
         $invalid = false;
1192 1192
 
1193
-        foreach ( $discounts as $key => $code ) {
1194
-            if ( !wpinv_is_discount_valid( $code, (int)wpinv_get_user_id( $wpi_checkout_id ) ) ) {
1193
+        foreach ($discounts as $key => $code) {
1194
+            if (!wpinv_is_discount_valid($code, (int) wpinv_get_user_id($wpi_checkout_id))) {
1195 1195
                 $invalid = true;
1196 1196
 
1197
-                wpinv_unset_cart_discount( $code );
1197
+                wpinv_unset_cart_discount($code);
1198 1198
             }
1199 1199
         }
1200 1200
 
1201
-        if ( $invalid ) {
1201
+        if ($invalid) {
1202 1202
             $errors = wpinv_get_errors();
1203
-            $error  = !empty( $errors['wpinv-discount-error'] ) ? $errors['wpinv-discount-error'] . ' ' : '';
1204
-            $error  .= __( 'The discount has been removed from cart.', 'invoicing' );
1205
-            wpinv_set_error( 'wpinv-discount-error', $error );
1203
+            $error  = !empty($errors['wpinv-discount-error']) ? $errors['wpinv-discount-error'] . ' ' : '';
1204
+            $error .= __('The discount has been removed from cart.', 'invoicing');
1205
+            wpinv_set_error('wpinv-discount-error', $error);
1206 1206
 
1207
-            wpinv_recalculate_tax( true );
1207
+            wpinv_recalculate_tax(true);
1208 1208
         }
1209 1209
     }
1210 1210
 }
1211
-add_action( 'wpinv_before_checkout_form', 'wpinv_checkout_form_validate_discounts', -10 );
1211
+add_action('wpinv_before_checkout_form', 'wpinv_checkout_form_validate_discounts', -10);
1212 1212
 
1213 1213
 function wpinv_discount_amount() {
1214 1214
     $output = 0.00;
1215 1215
 
1216
-    return apply_filters( 'wpinv_discount_amount', $output );
1216
+    return apply_filters('wpinv_discount_amount', $output);
1217 1217
 }
Please login to merge, or discard this patch.
includes/wpinv-tax-functions.php 3 patches
Braces   +9 added lines, -6 removed lines patch added patch discarded remove patch
@@ -70,8 +70,9 @@  discard block
 block discarded – undo
70 70
         if( !empty( $tax_rates ) ) {
71 71
             // Locate the tax rate for this country / state, if it exists
72 72
             foreach( $tax_rates as $key => $tax_rate ) {
73
-                if( $country != $tax_rate['country'] )
74
-                    continue;
73
+                if( $country != $tax_rate['country'] ) {
74
+                                    continue;
75
+                }
75 76
 
76 77
                 if( !empty( $tax_rate['global'] ) ) {
77 78
                     if( !empty( $tax_rate['rate'] ) ) {
@@ -79,8 +80,9 @@  discard block
 block discarded – undo
79 80
                     }
80 81
                 } else {
81 82
 
82
-                    if( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) )
83
-                        continue;
83
+                    if( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) ) {
84
+                                            continue;
85
+                    }
84 86
 
85 87
                     $state_rate = $tax_rate['rate'];
86 88
                     if( 0 !== $state_rate || !empty( $state_rate ) ) {
@@ -183,8 +185,9 @@  discard block
 block discarded – undo
183 185
 }
184 186
 
185 187
 function wpinv_cart_needs_tax_address_fields() {
186
-    if( !wpinv_is_cart_taxed() )
187
-        return false;
188
+    if( !wpinv_is_cart_taxed() ) {
189
+            return false;
190
+    }
188 191
 
189 192
     return ! did_action( 'wpinv_after_cc_fields', 'wpinv_default_cc_address_fields' );
190 193
 }
Please login to merge, or discard this patch.
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -618,10 +618,10 @@
 block discarded – undo
618 618
 
619 619
     }
620 620
 
621
-   if ( empty( $iso )  ) {
622
-       return false;
623
-   }
621
+    if ( empty( $iso )  ) {
622
+        return false;
623
+    }
624 624
 
625
-   return compact( 'iso', 'country', 'region', 'city', 'longitude', 'latitude', 'credit' );
625
+    return compact( 'iso', 'country', 'region', 'city', 'longitude', 'latitude', 'credit' );
626 626
 
627 627
 }
Please login to merge, or discard this patch.
Spacing   +194 added lines, -194 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 // MUST have WordPress.
3
-if ( !defined( 'WPINC' ) ) {
4
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
3
+if (!defined('WPINC')) {
4
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
5 5
 }
6 6
 
7 7
 /**
@@ -18,8 +18,8 @@  discard block
 block discarded – undo
18 18
  * 
19 19
  * @return bool
20 20
  */
21
-function getpaid_is_eu_state( $country ) {
22
-    return WPInv_EUVat::is_eu_state( $country );
21
+function getpaid_is_eu_state($country) {
22
+    return WPInv_EUVat::is_eu_state($country);
23 23
 }
24 24
 
25 25
 /**
@@ -27,8 +27,8 @@  discard block
 block discarded – undo
27 27
  * 
28 28
  * @return bool
29 29
  */
30
-function getpaid_is_gst_country( $country ) {
31
-    return WPInv_EUVat::is_gst_country( $country );
30
+function getpaid_is_gst_country($country) {
31
+    return WPInv_EUVat::is_gst_country($country);
32 32
 }
33 33
 
34 34
 /**
@@ -42,117 +42,117 @@  discard block
 block discarded – undo
42 42
 
43 43
 
44 44
 function wpinv_use_taxes() {
45
-    $ret = wpinv_get_option( 'enable_taxes', false );
45
+    $ret = wpinv_get_option('enable_taxes', false);
46 46
     
47
-    return (bool) apply_filters( 'wpinv_use_taxes', $ret );
47
+    return (bool) apply_filters('wpinv_use_taxes', $ret);
48 48
 }
49 49
 
50 50
 function wpinv_get_tax_rates() {
51
-    $rates = get_option( 'wpinv_tax_rates', array() );
51
+    $rates = get_option('wpinv_tax_rates', array());
52 52
     
53
-    return apply_filters( 'wpinv_get_tax_rates', $rates );
53
+    return apply_filters('wpinv_get_tax_rates', $rates);
54 54
 }
55 55
 
56
-function wpinv_get_tax_rate( $country = false, $state = false, $item_id = 0 ) {
56
+function wpinv_get_tax_rate($country = false, $state = false, $item_id = 0) {
57 57
     global $wpinv_euvat, $wpi_tax_rates, $wpi_userID;
58
-    $wpi_tax_rates = !empty( $wpi_tax_rates ) ? $wpi_tax_rates : array();
58
+    $wpi_tax_rates = !empty($wpi_tax_rates) ? $wpi_tax_rates : array();
59 59
     
60
-    if ( !empty( $wpi_tax_rates ) && !empty( $item_id ) && isset( $wpi_tax_rates[$item_id] ) ) {
60
+    if (!empty($wpi_tax_rates) && !empty($item_id) && isset($wpi_tax_rates[$item_id])) {
61 61
         return $wpi_tax_rates[$item_id];
62 62
     }
63 63
     
64
-    if ( !$wpinv_euvat->item_is_taxable( $item_id, $country, $state ) ) {
64
+    if (!$wpinv_euvat->item_is_taxable($item_id, $country, $state)) {
65 65
         $wpi_tax_rates[$item_id] = 0;
66 66
         return 0;
67 67
     }
68 68
 
69 69
     $is_global = false;
70
-    if ( $item_id == 'global' ) {
70
+    if ($item_id == 'global') {
71 71
         $is_global = true;
72 72
         $item_id = 0;
73 73
     }
74 74
     
75
-    $rate           = (float)wpinv_get_option( 'tax_rate', 0 );
76
-    $user_address   = wpinv_get_user_address( $wpi_userID );
75
+    $rate           = (float) wpinv_get_option('tax_rate', 0);
76
+    $user_address   = wpinv_get_user_address($wpi_userID);
77 77
     
78
-    if( empty( $country ) ) {
79
-        if( !empty( $_POST['wpinv_country'] ) ) {
78
+    if (empty($country)) {
79
+        if (!empty($_POST['wpinv_country'])) {
80 80
             $country = $_POST['wpinv_country'];
81
-        } elseif( !empty( $_POST['wpinv_country'] ) ) {
81
+        } elseif (!empty($_POST['wpinv_country'])) {
82 82
             $country = $_POST['wpinv_country'];
83
-        } elseif( !empty( $_POST['country'] ) ) {
83
+        } elseif (!empty($_POST['country'])) {
84 84
             $country = $_POST['country'];
85
-        } elseif( is_user_logged_in() && !empty( $user_address ) ) {
85
+        } elseif (is_user_logged_in() && !empty($user_address)) {
86 86
             $country = $user_address['country'];
87 87
         }
88
-        $country = !empty( $country ) ? $country : wpinv_get_default_country();
88
+        $country = !empty($country) ? $country : wpinv_get_default_country();
89 89
     }
90 90
 
91
-    if( empty( $state ) ) {
92
-        if( !empty( $_POST['wpinv_state'] ) ) {
91
+    if (empty($state)) {
92
+        if (!empty($_POST['wpinv_state'])) {
93 93
             $state = $_POST['wpinv_state'];
94
-        } elseif( !empty( $_POST['wpinv_state'] ) ) {
94
+        } elseif (!empty($_POST['wpinv_state'])) {
95 95
             $state = $_POST['wpinv_state'];
96
-        } elseif( !empty( $_POST['state'] ) ) {
96
+        } elseif (!empty($_POST['state'])) {
97 97
             $state = $_POST['state'];
98
-        } elseif( is_user_logged_in() && !empty( $user_address ) ) {
98
+        } elseif (is_user_logged_in() && !empty($user_address)) {
99 99
             $state = $user_address['state'];
100 100
         }
101
-        $state = !empty( $state ) ? $state : wpinv_get_default_state();
101
+        $state = !empty($state) ? $state : wpinv_get_default_state();
102 102
     }
103 103
     
104
-    if( !empty( $country ) ) {
105
-        $tax_rates   = wpinv_get_tax_rates();
104
+    if (!empty($country)) {
105
+        $tax_rates = wpinv_get_tax_rates();
106 106
 
107
-        if( !empty( $tax_rates ) ) {
107
+        if (!empty($tax_rates)) {
108 108
             // Locate the tax rate for this country / state, if it exists
109
-            foreach( $tax_rates as $key => $tax_rate ) {
110
-                if( $country != $tax_rate['country'] )
109
+            foreach ($tax_rates as $key => $tax_rate) {
110
+                if ($country != $tax_rate['country'])
111 111
                     continue;
112 112
 
113
-                if( !empty( $tax_rate['global'] ) ) {
114
-                    if( !empty( $tax_rate['rate'] ) ) {
115
-                        $rate = number_format( $tax_rate['rate'], 4 );
113
+                if (!empty($tax_rate['global'])) {
114
+                    if (!empty($tax_rate['rate'])) {
115
+                        $rate = number_format($tax_rate['rate'], 4);
116 116
                     }
117 117
                 } else {
118 118
 
119
-                    if( empty( $tax_rate['state'] ) || strtolower( $state ) != strtolower( $tax_rate['state'] ) )
119
+                    if (empty($tax_rate['state']) || strtolower($state) != strtolower($tax_rate['state']))
120 120
                         continue;
121 121
 
122 122
                     $state_rate = $tax_rate['rate'];
123
-                    if( 0 !== $state_rate || !empty( $state_rate ) ) {
124
-                        $rate = number_format( $state_rate, 4 );
123
+                    if (0 !== $state_rate || !empty($state_rate)) {
124
+                        $rate = number_format($state_rate, 4);
125 125
                     }
126 126
                 }
127 127
             }
128 128
         }
129 129
     }
130 130
     
131
-    $rate = apply_filters( 'wpinv_tax_rate', $rate, $country, $state, $item_id );
131
+    $rate = apply_filters('wpinv_tax_rate', $rate, $country, $state, $item_id);
132 132
     
133
-    if ( !empty( $item_id ) ) {
133
+    if (!empty($item_id)) {
134 134
         $wpi_tax_rates[$item_id] = $rate;
135
-    } else if ( $is_global ) {
135
+    } else if ($is_global) {
136 136
         $wpi_tax_rates['global'] = $rate;
137 137
     }
138 138
     
139 139
     return $rate;
140 140
 }
141 141
 
142
-function wpinv_get_formatted_tax_rate( $country = false, $state = false, $item_id ) {
143
-    $rate = wpinv_get_tax_rate( $country, $state, $item_id );
144
-    $rate = round( $rate, 4 );
142
+function wpinv_get_formatted_tax_rate($country = false, $state = false, $item_id) {
143
+    $rate = wpinv_get_tax_rate($country, $state, $item_id);
144
+    $rate = round($rate, 4);
145 145
     $formatted = $rate .= '%';
146
-    return apply_filters( 'wpinv_formatted_tax_rate', $formatted, $rate, $country, $state, $item_id );
146
+    return apply_filters('wpinv_formatted_tax_rate', $formatted, $rate, $country, $state, $item_id);
147 147
 }
148 148
 
149
-function wpinv_calculate_tax( $amount = 0, $country = false, $state = false, $item_id = 0 ) {
150
-    $rate = wpinv_get_tax_rate( $country, $state, $item_id );
149
+function wpinv_calculate_tax($amount = 0, $country = false, $state = false, $item_id = 0) {
150
+    $rate = wpinv_get_tax_rate($country, $state, $item_id);
151 151
     $tax  = 0.00;
152 152
 
153
-    if ( wpinv_use_taxes() ) {        
154
-        if ( wpinv_prices_include_tax() ) {
155
-            $pre_tax = ( $amount / ( ( 1 + $rate ) * 0.01 ) );
153
+    if (wpinv_use_taxes()) {        
154
+        if (wpinv_prices_include_tax()) {
155
+            $pre_tax = ($amount / ((1 + $rate) * 0.01));
156 156
             $tax     = $amount - $pre_tax;
157 157
         } else {
158 158
             $tax = $amount * $rate * 0.01;
@@ -160,46 +160,46 @@  discard block
 block discarded – undo
160 160
 
161 161
     }
162 162
 
163
-    return apply_filters( 'wpinv_taxed_amount', $tax, $rate, $country, $state, $item_id );
163
+    return apply_filters('wpinv_taxed_amount', $tax, $rate, $country, $state, $item_id);
164 164
 }
165 165
 
166 166
 function wpinv_prices_include_tax() {
167 167
     return false; // TODO
168
-    $ret = ( wpinv_get_option( 'prices_include_tax', false ) == 'yes' && wpinv_use_taxes() );
168
+    $ret = (wpinv_get_option('prices_include_tax', false) == 'yes' && wpinv_use_taxes());
169 169
 
170
-    return apply_filters( 'wpinv_prices_include_tax', $ret );
170
+    return apply_filters('wpinv_prices_include_tax', $ret);
171 171
 }
172 172
 
173
-function wpinv_sales_tax_for_year( $year = null ) {
174
-    return wpinv_price( wpinv_format_amount( wpinv_get_sales_tax_for_year( $year ) ) );
173
+function wpinv_sales_tax_for_year($year = null) {
174
+    return wpinv_price(wpinv_format_amount(wpinv_get_sales_tax_for_year($year)));
175 175
 }
176 176
 
177
-function wpinv_get_sales_tax_for_year( $year = null ) {
177
+function wpinv_get_sales_tax_for_year($year = null) {
178 178
     global $wpdb;
179 179
 
180 180
     // Start at zero
181 181
     $tax = 0;
182 182
 
183
-    if ( ! empty( $year ) ) {
183
+    if (!empty($year)) {
184 184
         $args = array(
185 185
             'post_type'      => 'wpi_invoice',
186
-            'post_status'    => array( 'publish' ),
186
+            'post_status'    => array('publish'),
187 187
             'posts_per_page' => -1,
188 188
             'year'           => $year,
189 189
             'fields'         => 'ids'
190 190
         );
191 191
 
192
-        $payments    = get_posts( $args );
193
-        $payment_ids = implode( ',', $payments );
192
+        $payments    = get_posts($args);
193
+        $payment_ids = implode(',', $payments);
194 194
 
195
-        if ( count( $payments ) > 0 ) {
195
+        if (count($payments) > 0) {
196 196
             $sql = "SELECT SUM( meta_value ) FROM $wpdb->postmeta WHERE meta_key = '_wpinv_tax' AND post_id IN( $payment_ids )";
197
-            $tax = $wpdb->get_var( $sql );
197
+            $tax = $wpdb->get_var($sql);
198 198
         }
199 199
 
200 200
     }
201 201
 
202
-    return apply_filters( 'wpinv_get_sales_tax_for_year', $tax, $year );
202
+    return apply_filters('wpinv_get_sales_tax_for_year', $tax, $year);
203 203
 }
204 204
 
205 205
 function wpinv_is_cart_taxed() {
@@ -208,33 +208,33 @@  discard block
 block discarded – undo
208 208
 
209 209
 function wpinv_prices_show_tax_on_checkout() {
210 210
     return false; // TODO
211
-    $ret = ( wpinv_get_option( 'checkout_include_tax', false ) == 'yes' && wpinv_use_taxes() );
211
+    $ret = (wpinv_get_option('checkout_include_tax', false) == 'yes' && wpinv_use_taxes());
212 212
 
213
-    return apply_filters( 'wpinv_taxes_on_prices_on_checkout', $ret );
213
+    return apply_filters('wpinv_taxes_on_prices_on_checkout', $ret);
214 214
 }
215 215
 
216 216
 function wpinv_display_tax_rate() {
217
-    $ret = wpinv_use_taxes() && wpinv_get_option( 'display_tax_rate', false );
217
+    $ret = wpinv_use_taxes() && wpinv_get_option('display_tax_rate', false);
218 218
 
219
-    return apply_filters( 'wpinv_display_tax_rate', $ret );
219
+    return apply_filters('wpinv_display_tax_rate', $ret);
220 220
 }
221 221
 
222 222
 function wpinv_cart_needs_tax_address_fields() {
223
-    if( !wpinv_is_cart_taxed() )
223
+    if (!wpinv_is_cart_taxed())
224 224
         return false;
225 225
 
226
-    return ! did_action( 'wpinv_after_cc_fields', 'wpinv_default_cc_address_fields' );
226
+    return !did_action('wpinv_after_cc_fields', 'wpinv_default_cc_address_fields');
227 227
 }
228 228
 
229
-function wpinv_item_is_tax_exclusive( $item_id = 0 ) {
230
-    $ret = (bool)get_post_meta( $item_id, '_wpinv_tax_exclusive', false );
231
-    return apply_filters( 'wpinv_is_tax_exclusive', $ret, $item_id );
229
+function wpinv_item_is_tax_exclusive($item_id = 0) {
230
+    $ret = (bool) get_post_meta($item_id, '_wpinv_tax_exclusive', false);
231
+    return apply_filters('wpinv_is_tax_exclusive', $ret, $item_id);
232 232
 }
233 233
 
234
-function wpinv_currency_decimal_filter( $decimals = 2 ) {
234
+function wpinv_currency_decimal_filter($decimals = 2) {
235 235
     $currency = wpinv_get_currency();
236 236
 
237
-    switch ( $currency ) {
237
+    switch ($currency) {
238 238
         case 'RIAL' :
239 239
         case 'JPY' :
240 240
         case 'TWD' :
@@ -243,48 +243,48 @@  discard block
 block discarded – undo
243 243
             break;
244 244
     }
245 245
 
246
-    return apply_filters( 'wpinv_currency_decimal_count', $decimals, $currency );
246
+    return apply_filters('wpinv_currency_decimal_count', $decimals, $currency);
247 247
 }
248 248
 
249 249
 function wpinv_tax_amount() {
250 250
     $output = 0.00;
251 251
     
252
-    return apply_filters( 'wpinv_tax_amount', $output );
252
+    return apply_filters('wpinv_tax_amount', $output);
253 253
 }
254 254
 
255 255
 function wpinv_recalculated_tax() {
256
-    define( 'WPINV_RECALCTAX', true );
256
+    define('WPINV_RECALCTAX', true);
257 257
 }
258
-add_action( 'wp_ajax_wpinv_recalculate_tax', 'wpinv_recalculated_tax', 1 );
258
+add_action('wp_ajax_wpinv_recalculate_tax', 'wpinv_recalculated_tax', 1);
259 259
 
260
-function wpinv_recalculate_tax( $return = false ) {
261
-    $invoice_id = (int)wpinv_get_invoice_cart_id();
262
-    if ( empty( $invoice_id ) ) {
260
+function wpinv_recalculate_tax($return = false) {
261
+    $invoice_id = (int) wpinv_get_invoice_cart_id();
262
+    if (empty($invoice_id)) {
263 263
         return false;
264 264
     }
265 265
     
266
-    $invoice = wpinv_get_invoice_cart( $invoice_id );
266
+    $invoice = wpinv_get_invoice_cart($invoice_id);
267 267
 
268
-    if ( empty( $invoice ) ) {
268
+    if (empty($invoice)) {
269 269
         return false;
270 270
     }
271 271
 
272
-    if ( empty( $_POST['country'] ) ) {
272
+    if (empty($_POST['country'])) {
273 273
         $_POST['country'] = !empty($invoice->country) ? $invoice->country : wpinv_get_default_country();
274 274
     }
275 275
         
276 276
     $invoice->country = sanitize_text_field($_POST['country']);
277
-    $invoice->set( 'country', sanitize_text_field( $_POST['country'] ) );
277
+    $invoice->set('country', sanitize_text_field($_POST['country']));
278 278
     if (isset($_POST['state'])) {
279 279
         $invoice->state = sanitize_text_field($_POST['state']);
280
-        $invoice->set( 'state', sanitize_text_field( $_POST['state'] ) );
280
+        $invoice->set('state', sanitize_text_field($_POST['state']));
281 281
     }
282 282
 
283 283
     $invoice->cart_details  = wpinv_get_cart_content_details();
284 284
     
285
-    $subtotal               = wpinv_get_cart_subtotal( $invoice->cart_details );
286
-    $tax                    = wpinv_get_cart_tax( $invoice->cart_details );
287
-    $total                  = wpinv_get_cart_total( $invoice->cart_details );
285
+    $subtotal               = wpinv_get_cart_subtotal($invoice->cart_details);
286
+    $tax                    = wpinv_get_cart_tax($invoice->cart_details);
287
+    $total                  = wpinv_get_cart_total($invoice->cart_details);
288 288
 
289 289
     $invoice->tax           = $tax;
290 290
     $invoice->subtotal      = $subtotal;
@@ -292,61 +292,61 @@  discard block
 block discarded – undo
292 292
 
293 293
     $invoice->save();
294 294
     
295
-    if ( $invoice->is_free_trial() ) {
295
+    if ($invoice->is_free_trial()) {
296 296
         $total = 0;
297 297
     }
298 298
     
299 299
     $response = array(
300
-        'total'        => html_entity_decode( wpinv_price( wpinv_format_amount( $total ) ), ENT_COMPAT, 'UTF-8' ),
300
+        'total'        => html_entity_decode(wpinv_price(wpinv_format_amount($total)), ENT_COMPAT, 'UTF-8'),
301 301
         'total_raw'    => $total,
302
-        'free'         => !( (float)$total > 0 ) && $invoice->is_free() ? true : false,
303
-        'html'         => wpinv_checkout_cart( $invoice->cart_details, false ),
302
+        'free'         => !((float) $total > 0) && $invoice->is_free() ? true : false,
303
+        'html'         => wpinv_checkout_cart($invoice->cart_details, false),
304 304
     );
305 305
     
306
-    if ( $return ) {
306
+    if ($return) {
307 307
         return $response;
308 308
     }
309 309
 
310
-    wp_send_json( $response );
310
+    wp_send_json($response);
311 311
 }
312
-add_action( 'wp_ajax_wpinv_recalculate_tax', 'wpinv_recalculate_tax' );
313
-add_action( 'wp_ajax_nopriv_wpinv_recalculate_tax', 'wpinv_recalculate_tax' );
312
+add_action('wp_ajax_wpinv_recalculate_tax', 'wpinv_recalculate_tax');
313
+add_action('wp_ajax_nopriv_wpinv_recalculate_tax', 'wpinv_recalculate_tax');
314 314
 
315 315
 // VAT Settings
316
-function wpinv_vat_rate_add_callback( $args ) {
316
+function wpinv_vat_rate_add_callback($args) {
317 317
     ?>
318
-    <p class="wpi-vat-rate-actions"><input id="wpi_vat_rate_add" type="button" value="<?php esc_attr_e( 'Add', 'invoicing' );?>" class="button button-primary" />&nbsp;&nbsp;<i style="display:none;" class="fa fa-refresh fa-spin"></i></p>
318
+    <p class="wpi-vat-rate-actions"><input id="wpi_vat_rate_add" type="button" value="<?php esc_attr_e('Add', 'invoicing'); ?>" class="button button-primary" />&nbsp;&nbsp;<i style="display:none;" class="fa fa-refresh fa-spin"></i></p>
319 319
     <?php
320 320
 }
321 321
 
322
-function wpinv_vat_rate_delete_callback( $args ) {
322
+function wpinv_vat_rate_delete_callback($args) {
323 323
     global $wpinv_euvat;
324 324
     
325 325
     $vat_classes = $wpinv_euvat->get_rate_classes();
326
-    $vat_class = isset( $_REQUEST['wpi_sub'] ) && $_REQUEST['wpi_sub'] !== '' && isset( $vat_classes[$_REQUEST['wpi_sub']] )? sanitize_text_field( $_REQUEST['wpi_sub'] ) : '';
327
-    if ( isset( $vat_classes[$vat_class] ) ) {
326
+    $vat_class = isset($_REQUEST['wpi_sub']) && $_REQUEST['wpi_sub'] !== '' && isset($vat_classes[$_REQUEST['wpi_sub']]) ? sanitize_text_field($_REQUEST['wpi_sub']) : '';
327
+    if (isset($vat_classes[$vat_class])) {
328 328
     ?>
329
-    <p class="wpi-vat-rate-actions"><input id="wpi_vat_rate_delete" type="button" value="<?php echo wp_sprintf( esc_attr__( 'Delete class "%s"', 'invoicing' ), $vat_classes[$vat_class] );?>" class="button button-primary" />&nbsp;&nbsp;<i style="display:none;" class="fa fa-refresh fa-spin"></i></p>
329
+    <p class="wpi-vat-rate-actions"><input id="wpi_vat_rate_delete" type="button" value="<?php echo wp_sprintf(esc_attr__('Delete class "%s"', 'invoicing'), $vat_classes[$vat_class]); ?>" class="button button-primary" />&nbsp;&nbsp;<i style="display:none;" class="fa fa-refresh fa-spin"></i></p>
330 330
     <?php
331 331
     }
332 332
 }
333 333
 
334
-function wpinv_vat_rates_callback( $args ) {
334
+function wpinv_vat_rates_callback($args) {
335 335
     global $wpinv_euvat;
336 336
     
337 337
     $vat_classes    = $wpinv_euvat->get_rate_classes();
338
-    $vat_class      = isset( $_REQUEST['wpi_sub'] ) && $_REQUEST['wpi_sub'] !== '' && isset( $vat_classes[$_REQUEST['wpi_sub']] )? sanitize_text_field( $_REQUEST['wpi_sub'] ) : '_standard';
338
+    $vat_class      = isset($_REQUEST['wpi_sub']) && $_REQUEST['wpi_sub'] !== '' && isset($vat_classes[$_REQUEST['wpi_sub']]) ? sanitize_text_field($_REQUEST['wpi_sub']) : '_standard';
339 339
     
340 340
     $eu_states      = $wpinv_euvat->get_eu_states();
341 341
     $countries      = wpinv_get_country_list();
342 342
     $vat_groups     = $wpinv_euvat->get_vat_groups();
343
-    $rates          = $wpinv_euvat->get_vat_rates( $vat_class );
343
+    $rates          = $wpinv_euvat->get_vat_rates($vat_class);
344 344
     ob_start();
345 345
 ?>
346 346
 </td><tr>
347 347
     <td colspan="2" class="wpinv_vat_tdbox">
348
-    <input type="hidden" name="wpi_vat_class" value="<?php echo $vat_class;?>" />
349
-    <p><?php echo ( isset( $args['desc'] ) ? $args['desc'] : '' ); ?></p>
348
+    <input type="hidden" name="wpi_vat_class" value="<?php echo $vat_class; ?>" />
349
+    <p><?php echo (isset($args['desc']) ? $args['desc'] : ''); ?></p>
350 350
     <table id="wpinv_vat_rates" class="wp-list-table widefat fixed posts">
351 351
         <colgroup>
352 352
             <col width="50px" />
@@ -358,43 +358,43 @@  discard block
 block discarded – undo
358 358
         </colgroup>
359 359
         <thead>
360 360
             <tr>
361
-                <th scope="col" colspan="2" class="wpinv_vat_country_name"><?php _e( 'Country', 'invoicing' ); ?></th>
362
-                <th scope="col" class="wpinv_vat_global" title="<?php esc_attr_e( 'Apply rate to whole country', 'invoicing' ); ?>"><?php _e( 'Country Wide', 'invoicing' ); ?></th>
363
-                <th scope="col" class="wpinv_vat_rate"><?php _e( 'Rate %', 'invoicing' ); ?></th> 
364
-                <th scope="col" class="wpinv_vat_name"><?php _e( 'VAT Name', 'invoicing' ); ?></th>
365
-                <th scope="col" class="wpinv_vat_group"><?php _e( 'Tax Group', 'invoicing' ); ?></th>
361
+                <th scope="col" colspan="2" class="wpinv_vat_country_name"><?php _e('Country', 'invoicing'); ?></th>
362
+                <th scope="col" class="wpinv_vat_global" title="<?php esc_attr_e('Apply rate to whole country', 'invoicing'); ?>"><?php _e('Country Wide', 'invoicing'); ?></th>
363
+                <th scope="col" class="wpinv_vat_rate"><?php _e('Rate %', 'invoicing'); ?></th> 
364
+                <th scope="col" class="wpinv_vat_name"><?php _e('VAT Name', 'invoicing'); ?></th>
365
+                <th scope="col" class="wpinv_vat_group"><?php _e('Tax Group', 'invoicing'); ?></th>
366 366
             </tr>
367 367
         </thead>
368 368
         <tbody>
369
-        <?php if( !empty( $eu_states ) ) { ?>
369
+        <?php if (!empty($eu_states)) { ?>
370 370
         <?php 
371
-        foreach ( $eu_states as $state ) { 
372
-            $country_name = isset( $countries[$state] ) ? $countries[$state] : '';
371
+        foreach ($eu_states as $state) { 
372
+            $country_name = isset($countries[$state]) ? $countries[$state] : '';
373 373
             
374 374
             // Filter the rate for each country
375
-            $country_rate = array_filter( $rates, function( $rate ) use( $state ) { return $rate['country'] === $state; } );
375
+            $country_rate = array_filter($rates, function($rate) use($state) { return $rate['country'] === $state; } );
376 376
             
377 377
             // If one does not exist create a default
378
-            $country_rate = is_array( $country_rate ) && count( $country_rate ) > 0 ? reset( $country_rate ) : array();
378
+            $country_rate = is_array($country_rate) && count($country_rate) > 0 ? reset($country_rate) : array();
379 379
             
380
-            $vat_global = isset( $country_rate['global'] ) ? !empty( $country_rate['global'] ) : true;
381
-            $vat_rate = isset( $country_rate['rate'] ) ? $country_rate['rate'] : '';
382
-            $vat_name = !empty( $country_rate['name'] ) ? esc_attr( stripslashes( $country_rate['name'] ) ) : '';
383
-            $vat_group = !empty( $country_rate['group'] ) ? $country_rate['group'] : ( $vat_class === '_standard' ? 'standard' : 'reduced' );
380
+            $vat_global = isset($country_rate['global']) ? !empty($country_rate['global']) : true;
381
+            $vat_rate = isset($country_rate['rate']) ? $country_rate['rate'] : '';
382
+            $vat_name = !empty($country_rate['name']) ? esc_attr(stripslashes($country_rate['name'])) : '';
383
+            $vat_group = !empty($country_rate['group']) ? $country_rate['group'] : ($vat_class === '_standard' ? 'standard' : 'reduced');
384 384
         ?>
385 385
         <tr>
386 386
             <td class="wpinv_vat_country"><?php echo $state; ?><input type="hidden" name="vat_rates[<?php echo $state; ?>][country]" value="<?php echo $state; ?>" /><input type="hidden" name="vat_rates[<?php echo $state; ?>][state]" value="" /></td>
387 387
             <td class="wpinv_vat_country_name"><?php echo $country_name; ?></td>
388 388
             <td class="wpinv_vat_global">
389
-                <input type="checkbox" name="vat_rates[<?php echo $state;?>][global]" id="vat_rates[<?php echo $state;?>][global]" value="1" <?php checked( true, $vat_global );?> disabled="disabled" />
390
-                <label for="tax_rates[<?php echo $state;?>][global]"><?php _e( 'Apply to whole country', 'invoicing' ); ?></label>
391
-                <input type="hidden" name="vat_rates[<?php echo $state;?>][global]" value="1" checked="checked" />
389
+                <input type="checkbox" name="vat_rates[<?php echo $state; ?>][global]" id="vat_rates[<?php echo $state; ?>][global]" value="1" <?php checked(true, $vat_global); ?> disabled="disabled" />
390
+                <label for="tax_rates[<?php echo $state; ?>][global]"><?php _e('Apply to whole country', 'invoicing'); ?></label>
391
+                <input type="hidden" name="vat_rates[<?php echo $state; ?>][global]" value="1" checked="checked" />
392 392
             </td>
393
-            <td class="wpinv_vat_rate"><input type="number" class="small-text" step="any" min="0" max="99" name="vat_rates[<?php echo $state;?>][rate]" value="<?php echo $vat_rate; ?>" /></td>
394
-            <td class="wpinv_vat_name"><input type="text" class="regular-text" name="vat_rates[<?php echo $state;?>][name]" value="<?php echo $vat_name; ?>" /></td>
393
+            <td class="wpinv_vat_rate"><input type="number" class="small-text" step="any" min="0" max="99" name="vat_rates[<?php echo $state; ?>][rate]" value="<?php echo $vat_rate; ?>" /></td>
394
+            <td class="wpinv_vat_name"><input type="text" class="regular-text" name="vat_rates[<?php echo $state; ?>][name]" value="<?php echo $vat_name; ?>" /></td>
395 395
             <td class="wpinv_vat_group">
396 396
             <?php
397
-            echo wpinv_html_select( array(
397
+            echo wpinv_html_select(array(
398 398
                                         'name'             => 'vat_rates[' . $state . '][group]',
399 399
                                         'selected'         => $vat_group,
400 400
                                         'id'               => 'vat_rates[' . $state . '][group]',
@@ -403,14 +403,14 @@  discard block
 block discarded – undo
403 403
                                         'multiple'         => false,
404 404
                                         'show_option_all'  => false,
405 405
                                         'show_option_none' => false
406
-                                    ) );
406
+                                    ));
407 407
             ?>
408 408
             </td>
409 409
         </tr>
410 410
         <?php } ?>
411 411
         <tr>
412 412
             <td colspan="6" style="background-color:#fafafa;">
413
-                <span><input id="wpi_vat_get_rates_group" type="button" class="button-secondary" value="<?php esc_attr_e( 'Update EU VAT Rates', 'invoicing' ); ?>" />&nbsp;&nbsp;<i style="display:none" class="fa fa-refresh fa-spin"></i></span><span id="wpinv-rates-error-wrap" class="wpinv_errors" style="display:none;"></span>
413
+                <span><input id="wpi_vat_get_rates_group" type="button" class="button-secondary" value="<?php esc_attr_e('Update EU VAT Rates', 'invoicing'); ?>" />&nbsp;&nbsp;<i style="display:none" class="fa fa-refresh fa-spin"></i></span><span id="wpinv-rates-error-wrap" class="wpinv_errors" style="display:none;"></span>
414 414
             </td>
415 415
         </tr>
416 416
         <?php } ?>
@@ -422,35 +422,35 @@  discard block
 block discarded – undo
422 422
     echo $content;
423 423
 }
424 424
 
425
-function wpinv_vat_number_callback( $args ) {
425
+function wpinv_vat_number_callback($args) {
426 426
     global $wpinv_euvat;
427 427
     
428 428
     $vat_number     = $wpinv_euvat->get_vat_number();
429 429
     $vat_valid      = $wpinv_euvat->is_vat_validated();
430 430
 
431
-    $size           = ( isset( $args['size'] ) && !is_null( $args['size'] ) ) ? $args['size'] : 'regular';
432
-    $validated_text = $vat_valid ? __( 'VAT number validated', 'invoicing' ) : __( 'VAT number not validated', 'invoicing' );
431
+    $size           = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'regular';
432
+    $validated_text = $vat_valid ? __('VAT number validated', 'invoicing') : __('VAT number not validated', 'invoicing');
433 433
     $disabled       = $vat_valid ? 'disabled="disabled"' : " ";
434 434
     
435
-    $html = '<input type="text" class="' . $size . '-text" id="wpinv_settings[' . $args['id'] . ']" name="wpinv_settings[' . $args['id'] . ']" placeholder="GB123456789" value="' . esc_attr( stripslashes( $vat_number ) ) . '"/>';
436
-    $html .= '<span>&nbsp;<input type="button" id="wpinv_vat_validate" class="wpinv_validate_vat_button button-secondary" ' . $disabled . ' value="' . esc_attr__( 'Validate VAT Number', 'invoicing' ) . '" /></span>';
437
-    $html .= '<span class="wpinv-vat-stat wpinv-vat-stat-' . (int)$vat_valid . '"><i class="fa"></i> <font>' . $validated_text . '</font></span>';
438
-    $html .= '<label for="wpinv_settings[' . $args['id'] . ']">' . '<p>' . __( 'Enter your VAT number including country identifier, eg: GB123456789 (Settings must be saved after validation)', 'invoicing' ).'</p>' . '</label>';
439
-    $html .= '<input type="hidden" name="_wpi_nonce" value="' . wp_create_nonce( 'vat_validation' ) . '">';
435
+    $html = '<input type="text" class="' . $size . '-text" id="wpinv_settings[' . $args['id'] . ']" name="wpinv_settings[' . $args['id'] . ']" placeholder="GB123456789" value="' . esc_attr(stripslashes($vat_number)) . '"/>';
436
+    $html .= '<span>&nbsp;<input type="button" id="wpinv_vat_validate" class="wpinv_validate_vat_button button-secondary" ' . $disabled . ' value="' . esc_attr__('Validate VAT Number', 'invoicing') . '" /></span>';
437
+    $html .= '<span class="wpinv-vat-stat wpinv-vat-stat-' . (int) $vat_valid . '"><i class="fa"></i> <font>' . $validated_text . '</font></span>';
438
+    $html .= '<label for="wpinv_settings[' . $args['id'] . ']">' . '<p>' . __('Enter your VAT number including country identifier, eg: GB123456789 (Settings must be saved after validation)', 'invoicing') . '</p>' . '</label>';
439
+    $html .= '<input type="hidden" name="_wpi_nonce" value="' . wp_create_nonce('vat_validation') . '">';
440 440
 
441 441
     echo $html;
442 442
 }
443 443
 
444
-function wpinv_eu_fallback_rate_callback( $args ) {
444
+function wpinv_eu_fallback_rate_callback($args) {
445 445
     global $wpinv_options;
446 446
 
447
-    $value = isset( $wpinv_options[$args['id']] ) ? $wpinv_options[ $args['id'] ] : ( isset( $args['std'] ) ? $args['std'] : '' );
448
-    $size = ( isset( $args['size'] ) && !is_null( $args['size'] ) ) ? $args['size'] : 'small';
447
+    $value = isset($wpinv_options[$args['id']]) ? $wpinv_options[$args['id']] : (isset($args['std']) ? $args['std'] : '');
448
+    $size = (isset($args['size']) && !is_null($args['size'])) ? $args['size'] : 'small';
449 449
     
450
-    $html = '<input type="number" min="0" max="99" step="any" class="' . $size . '-text" id="wpinv_settings_' . $args['section'] . '_' . $args['id'] . '" name="wpinv_settings[' . $args['id'] . ']" value="' . esc_attr( stripslashes( $value ) ) . '" />';
451
-    $html .= '<span>&nbsp;<input id="wpi_add_eu_states" type="button" class="button-secondary" value="' . esc_attr__( 'Add EU Member States', 'invoicing' ) . '" /></span>';
452
-    $html .= '<span>&nbsp;<input id="wpi_remove_eu_states" type="button" class="button-secondary" value="' . esc_attr__( 'Remove EU Member States', 'invoicing' ) . '" /></span>';
453
-    $html .= '<span>&nbsp;<input id="wpi_vat_get_rates" type="button" class="button-secondary" value="' . esc_attr__( 'Update EU VAT Rates', 'invoicing' ) . '" />&nbsp;&nbsp;<i style="display:none" class="fa fa-refresh fa-spin"></i></span>';
450
+    $html = '<input type="number" min="0" max="99" step="any" class="' . $size . '-text" id="wpinv_settings_' . $args['section'] . '_' . $args['id'] . '" name="wpinv_settings[' . $args['id'] . ']" value="' . esc_attr(stripslashes($value)) . '" />';
451
+    $html .= '<span>&nbsp;<input id="wpi_add_eu_states" type="button" class="button-secondary" value="' . esc_attr__('Add EU Member States', 'invoicing') . '" /></span>';
452
+    $html .= '<span>&nbsp;<input id="wpi_remove_eu_states" type="button" class="button-secondary" value="' . esc_attr__('Remove EU Member States', 'invoicing') . '" /></span>';
453
+    $html .= '<span>&nbsp;<input id="wpi_vat_get_rates" type="button" class="button-secondary" value="' . esc_attr__('Update EU VAT Rates', 'invoicing') . '" />&nbsp;&nbsp;<i style="display:none" class="fa fa-refresh fa-spin"></i></span>';
454 454
     $html .= '<p><label for="wpinv_settings_' . $args['section'] . '_' . $args['id'] . '">' . $args['desc'] . '</label></p>';
455 455
     echo $html;
456 456
     ?>
@@ -458,36 +458,36 @@  discard block
 block discarded – undo
458 458
     <?php
459 459
 }
460 460
 
461
-function wpinv_vat_ip_lookup_callback( $args ) {
461
+function wpinv_vat_ip_lookup_callback($args) {
462 462
     global $wpinv_options, $wpinv_euvat;
463 463
 
464
-    $value =  isset( $wpinv_options[ $args['id'] ] ) ? $wpinv_options[ $args['id'] ]  : ( isset( $args['std'] ) ? $args['std'] : 'default' );
464
+    $value = isset($wpinv_options[$args['id']]) ? $wpinv_options[$args['id']] : (isset($args['std']) ? $args['std'] : 'default');
465 465
     
466 466
     $options = array();
467
-    if ( function_exists( 'geoip_country_code_by_name' ) ) {
468
-        $options['geoip'] = __( 'PHP GeoIP extension', 'invoicing' );
467
+    if (function_exists('geoip_country_code_by_name')) {
468
+        $options['geoip'] = __('PHP GeoIP extension', 'invoicing');
469 469
     }
470 470
     
471 471
     $geoip2_database = $wpinv_euvat->geoip2_country_dbfile();
472 472
     
473
-    if ( !function_exists( 'bcadd' ) ) {
474
-        $geoip2_message = __( 'GeoIP2 service requires the BC Math PHP extension, it is not loaded in your version of PHP!', 'invoicing' );
473
+    if (!function_exists('bcadd')) {
474
+        $geoip2_message = __('GeoIP2 service requires the BC Math PHP extension, it is not loaded in your version of PHP!', 'invoicing');
475 475
     } else {
476
-        $geoip2_message = ini_get('safe_mode') ? __( 'GeoIP2 is not supported with PHP safe mode enabled!', 'invoicing' ) : '';
476
+        $geoip2_message = ini_get('safe_mode') ? __('GeoIP2 is not supported with PHP safe mode enabled!', 'invoicing') : '';
477 477
     }
478 478
     
479
-    if ( $geoip2_database !== false && empty( $geoip2_message ) ) {
480
-        $options['geoip2'] = __( 'GeoIP2 Database', 'invoicing' );
479
+    if ($geoip2_database !== false && empty($geoip2_message)) {
480
+        $options['geoip2'] = __('GeoIP2 Database', 'invoicing');
481 481
     }
482 482
     
483
-    if ( function_exists( 'simplexml_load_file' ) ) {
484
-        $options['geoplugin'] = __( 'geoPlugin Web Service', 'invoicing' );
483
+    if (function_exists('simplexml_load_file')) {
484
+        $options['geoplugin'] = __('geoPlugin Web Service', 'invoicing');
485 485
     }
486 486
     
487
-    $options['site']    = __( 'Use default country', 'invoicing' );
488
-    $options['default'] = __( 'Auto', 'invoicing' );
487
+    $options['site']    = __('Use default country', 'invoicing');
488
+    $options['default'] = __('Auto', 'invoicing');
489 489
 
490
-    $html = wpinv_html_select( array(
490
+    $html = wpinv_html_select(array(
491 491
         'name'             => "wpinv_settings[{$args['id']}]",
492 492
         'selected'         => $value,
493 493
         'id'               => "wpinv_settings[{$args['id']}]",
@@ -499,23 +499,23 @@  discard block
 block discarded – undo
499 499
     ));
500 500
     
501 501
     $desc = '<label for="wpinv_settings[' . $args['id'] . ']">';
502
-    $desc .= __( 'Select the option Invoicing should use to determine the country from the IP address of the user.', 'invoicing' );
502
+    $desc .= __('Select the option Invoicing should use to determine the country from the IP address of the user.', 'invoicing');
503 503
     $desc .= '<p>';
504
-    if ( empty( $geoip2_message ) ) {
505
-        if ( $geoip2_database ) {
504
+    if (empty($geoip2_message)) {
505
+        if ($geoip2_database) {
506 506
             $last_updated = '';
507
-            if ( $time_updated = wpinv_get_option( 'wpinv_geoip2_date_updated' ) ) {
508
-                $date_updated = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $time_updated );
509
-                $last_updated = '<br>' . sprintf( __( 'The GeoIP2 database was last updated on: <b>%s</b>', 'invoicing' ), $date_updated );
507
+            if ($time_updated = wpinv_get_option('wpinv_geoip2_date_updated')) {
508
+                $date_updated = date_i18n(get_option('date_format') . ' ' . get_option('time_format'), $time_updated);
509
+                $last_updated = '<br>' . sprintf(__('The GeoIP2 database was last updated on: <b>%s</b>', 'invoicing'), $date_updated);
510 510
             }
511
-            $desc .= __(  'GeoIP2 database exists:', 'invoicing' ) . $last_updated . '&nbsp;<input type="button" id="wpi_geoip2" action="update" class="wpinv-refresh-geoip2-btn button-secondary" value="' . __( 'Update GeoIP2 database now (~30MB)', 'invoicing' ) . '"></input>';
511
+            $desc .= __('GeoIP2 database exists:', 'invoicing') . $last_updated . '&nbsp;<input type="button" id="wpi_geoip2" action="update" class="wpinv-refresh-geoip2-btn button-secondary" value="' . __('Update GeoIP2 database now (~30MB)', 'invoicing') . '"></input>';
512 512
         } else {
513
-            $desc .= __( 'GeoIP2 database does not exist:', 'invoicing' ) . '&nbsp;<input type="button" id="wpi_geoip2" action="download" class="wpinv-download-geoip2-btn button-secondary" value="' . __( 'Download GeoIP2 database now', 'invoicing' ) . ' (~30MB)"></input><br>' . __(  'After downloading the GeoIP2 database the GeoIP2 lookup option will show.', 'invoicing' );
513
+            $desc .= __('GeoIP2 database does not exist:', 'invoicing') . '&nbsp;<input type="button" id="wpi_geoip2" action="download" class="wpinv-download-geoip2-btn button-secondary" value="' . __('Download GeoIP2 database now', 'invoicing') . ' (~30MB)"></input><br>' . __('After downloading the GeoIP2 database the GeoIP2 lookup option will show.', 'invoicing');
514 514
         }
515 515
     } else {
516 516
         $desc .= $geoip2_message;
517 517
     }
518
-    $desc .= '</p><p>'. __( 'geoPlugin is a great free service please consider supporting them: ', 'invoicing' ) . ' <a href="http://www.geoplugin.com/" target="_blank">GeoPlugin.com</a></p>';
518
+    $desc .= '</p><p>' . __('geoPlugin is a great free service please consider supporting them: ', 'invoicing') . ' <a href="http://www.geoplugin.com/" target="_blank">GeoPlugin.com</a></p>';
519 519
     $desc .= '</label>';
520 520
     
521 521
     $html .= $desc;
@@ -531,40 +531,40 @@  discard block
 block discarded – undo
531 531
  * 
532 532
  * @param string|bool|null $vat_rule
533 533
  */
534
-function getpaid_filter_vat_rule( $vat_rule ) {
534
+function getpaid_filter_vat_rule($vat_rule) {
535 535
     global $wpinv_euvat;
536 536
 
537
-    if ( empty( $vat_rule ) ) {        
537
+    if (empty($vat_rule)) {        
538 538
         return $wpinv_euvat->allow_vat_rules() ? 'digital' : 'physical';
539 539
     }
540 540
 
541 541
     return $vat_rule;
542 542
 }
543
-add_filter( 'wpinv_get_item_vat_rule', 'getpaid_filter_vat_rule' );
543
+add_filter('wpinv_get_item_vat_rule', 'getpaid_filter_vat_rule');
544 544
 
545 545
 /**
546 546
  * Filters the VAT class to ensure that each item has a VAT class.
547 547
  * 
548 548
  * @param string|bool|null $vat_rule
549 549
  */
550
-function getpaid_filter_vat_class( $vat_class ) {
551
-    return empty( $vat_class ) ? '_standard' : $vat_class;
550
+function getpaid_filter_vat_class($vat_class) {
551
+    return empty($vat_class) ? '_standard' : $vat_class;
552 552
 }
553
-add_filter( 'wpinv_get_item_vat_class', 'getpaid_filter_vat_class' );
553
+add_filter('wpinv_get_item_vat_class', 'getpaid_filter_vat_class');
554 554
 
555 555
 /**
556 556
  * Returns the ip address location url.
557 557
  * 
558 558
  */
559
-function getpaid_ip_location_url( $ip_address ) {
559
+function getpaid_ip_location_url($ip_address) {
560 560
 
561 561
     return add_query_arg(
562 562
         array(
563 563
             'action'   => 'wpinv_ip_geolocation',
564 564
             'ip'       => $ip_address,
565
-            '_wpnonce' => wp_create_nonce( 'getpaid-ip-location' )
565
+            '_wpnonce' => wp_create_nonce('getpaid-ip-location')
566 566
         ),
567
-        admin_url( 'admin-ajax.php' )
567
+        admin_url('admin-ajax.php')
568 568
     );
569 569
 
570 570
 }
@@ -574,54 +574,54 @@  discard block
 block discarded – undo
574 574
  * 
575 575
  * @return array|bool
576 576
  */
577
-function getpaid_geolocate_ip_address( $ip_address ) {
577
+function getpaid_geolocate_ip_address($ip_address) {
578 578
 
579 579
     // Do we have an ip address?
580
-    if ( empty( $ip_address ) ) {
580
+    if (empty($ip_address)) {
581 581
         return false;
582 582
     }
583 583
 
584 584
     /**
585 585
      * Retrieve ip address using max mind.
586 586
      */
587
-    if ( wpinv_get_option( 'vat_ip_lookup' ) == 'geoip2' && $geoip2_city = getpaid_tax()->geoip2_city_record( $ip_address ) ) {
587
+    if (wpinv_get_option('vat_ip_lookup') == 'geoip2' && $geoip2_city = getpaid_tax()->geoip2_city_record($ip_address)) {
588 588
 
589 589
         try {
590 590
             $iso        = $geoip2_city->country->isoCode;
591 591
             $country    = $geoip2_city->country->name;
592
-            $region     = ! empty( $geoip2_city->subdivisions ) && ! empty( $geoip2_city->subdivisions[0]->name ) ? $geoip2_city->subdivisions[0]->name : '';
592
+            $region     = !empty($geoip2_city->subdivisions) && !empty($geoip2_city->subdivisions[0]->name) ? $geoip2_city->subdivisions[0]->name : '';
593 593
             $city       = $geoip2_city->city->name;
594 594
             $longitude  = $geoip2_city->location->longitude;
595 595
             $latitude   = $geoip2_city->location->latitude;
596
-            $credit     = __( 'Geolocated using the information by MaxMind, available from <a href="http://www.maxmind.com" target="_blank">www.maxmind.com</a>', 'invoicing' );
597
-        } catch( Exception $e ) { }
596
+            $credit     = __('Geolocated using the information by MaxMind, available from <a href="http://www.maxmind.com" target="_blank">www.maxmind.com</a>', 'invoicing');
597
+        } catch (Exception $e) { }
598 598
 
599 599
     }
600 600
 
601 601
     // If that fails, GeoLocate using GeoPlugin.
602
-    if ( ( empty( $iso ) || empty( $longitude ) || empty( $latitude ) ) && function_exists( 'simplexml_load_file' ) ) {
602
+    if ((empty($iso) || empty($longitude) || empty($latitude)) && function_exists('simplexml_load_file')) {
603 603
 
604 604
         try {
605
-            $load_xml = simplexml_load_file( 'http://www.geoplugin.net/xml.gp?ip=' . $ip_address );
605
+            $load_xml = simplexml_load_file('http://www.geoplugin.net/xml.gp?ip=' . $ip_address);
606 606
             
607
-            if ( ! empty( $load_xml ) && isset( $load_xml->geoplugin_countryCode ) && ! empty( $load_xml->geoplugin_latitude ) && ! empty( $load_xml->geoplugin_longitude ) ) {
607
+            if (!empty($load_xml) && isset($load_xml->geoplugin_countryCode) && !empty($load_xml->geoplugin_latitude) && !empty($load_xml->geoplugin_longitude)) {
608 608
                 $iso        = $load_xml->geoplugin_countryCode;
609 609
                 $country    = $load_xml->geoplugin_countryName;
610
-                $region     = ! empty( $load_xml->geoplugin_regionName ) ? $load_xml->geoplugin_regionName : '';
611
-                $city       = ! empty( $load_xml->geoplugin_city ) ? $load_xml->geoplugin_city : '';
610
+                $region     = !empty($load_xml->geoplugin_regionName) ? $load_xml->geoplugin_regionName : '';
611
+                $city       = !empty($load_xml->geoplugin_city) ? $load_xml->geoplugin_city : '';
612 612
                 $longitude  = $load_xml->geoplugin_longitude;
613 613
                 $latitude   = $load_xml->geoplugin_latitude;
614 614
                 $credit     = $load_xml->geoplugin_credit;
615
-                $credit     = __( 'Geolocated using the information by geoPlugin, available from <a href="http://www.geoplugin.com" target="_blank">www.geoplugin.com</a>', 'invoicing' ) . '<br>' . $load_xml->geoplugin_credit;
615
+                $credit     = __('Geolocated using the information by geoPlugin, available from <a href="http://www.geoplugin.com" target="_blank">www.geoplugin.com</a>', 'invoicing') . '<br>' . $load_xml->geoplugin_credit;
616 616
             }
617
-        } catch( Exception $e ) { }
617
+        } catch (Exception $e) { }
618 618
 
619 619
     }
620 620
 
621
-   if ( empty( $iso )  ) {
621
+   if (empty($iso)) {
622 622
        return false;
623 623
    }
624 624
 
625
-   return compact( 'iso', 'country', 'region', 'city', 'longitude', 'latitude', 'credit' );
625
+   return compact('iso', 'country', 'region', 'city', 'longitude', 'latitude', 'credit');
626 626
 
627 627
 }
Please login to merge, or discard this patch.
includes/wpinv-post-types.php 2 patches
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -140,8 +140,8 @@  discard block
 block discarded – undo
140 140
 
141 141
 function wpinv_get_default_labels() {
142 142
     $defaults = array(
143
-       'singular' => __( 'Invoice', 'invoicing' ),
144
-       'plural'   => __( 'Invoices', 'invoicing' )
143
+        'singular' => __( 'Invoice', 'invoicing' ),
144
+        'plural'   => __( 'Invoices', 'invoicing' )
145 145
     );
146 146
     
147 147
     return apply_filters( 'wpinv_default_invoices_name', $defaults );
@@ -160,20 +160,20 @@  discard block
 block discarded – undo
160 160
 }
161 161
 
162 162
 function wpinv_change_default_title( $title ) {
163
-     if ( !is_admin() ) {
163
+        if ( !is_admin() ) {
164 164
         $label = wpinv_get_label_singular();
165 165
         $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label );
166 166
         return $title;
167
-     }
167
+        }
168 168
 
169
-     $screen = get_current_screen();
169
+        $screen = get_current_screen();
170 170
 
171
-     if ( 'wpi_invoice' == $screen->post_type ) {
171
+        if ( 'wpi_invoice' == $screen->post_type ) {
172 172
         $label = wpinv_get_label_singular();
173 173
         $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label );
174
-     }
174
+        }
175 175
 
176
-     return $title;
176
+        return $title;
177 177
 }
178 178
 add_filter( 'enter_title_here', 'wpinv_change_default_title' );
179 179
 
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -7,46 +7,46 @@
 block discarded – undo
7 7
  */
8 8
  
9 9
 // MUST have WordPress.
10
-if ( !defined( 'WPINC' ) ) {
11
-    exit( 'Do NOT access this file directly: ' . basename( __FILE__ ) );
10
+if (!defined('WPINC')) {
11
+    exit('Do NOT access this file directly: ' . basename(__FILE__));
12 12
 }
13 13
 
14 14
 
15 15
 function wpinv_get_default_labels() {
16 16
     $defaults = array(
17
-       'singular' => __( 'Invoice', 'invoicing' ),
18
-       'plural'   => __( 'Invoices', 'invoicing' )
17
+       'singular' => __('Invoice', 'invoicing'),
18
+       'plural'   => __('Invoices', 'invoicing')
19 19
     );
20 20
     
21
-    return apply_filters( 'wpinv_default_invoices_name', $defaults );
21
+    return apply_filters('wpinv_default_invoices_name', $defaults);
22 22
 }
23 23
 
24
-function wpinv_get_label_singular( $lowercase = false ) {
24
+function wpinv_get_label_singular($lowercase = false) {
25 25
     $defaults = wpinv_get_default_labels();
26 26
     
27
-    return ($lowercase) ? strtolower( $defaults['singular'] ) : $defaults['singular'];
27
+    return ($lowercase) ? strtolower($defaults['singular']) : $defaults['singular'];
28 28
 }
29 29
 
30
-function wpinv_get_label_plural( $lowercase = false ) {
30
+function wpinv_get_label_plural($lowercase = false) {
31 31
     $defaults = wpinv_get_default_labels();
32 32
     
33
-    return ( $lowercase ) ? strtolower( $defaults['plural'] ) : $defaults['plural'];
33
+    return ($lowercase) ? strtolower($defaults['plural']) : $defaults['plural'];
34 34
 }
35 35
 
36
-function wpinv_change_default_title( $title ) {
37
-     if ( !is_admin() ) {
36
+function wpinv_change_default_title($title) {
37
+     if (!is_admin()) {
38 38
         $label = wpinv_get_label_singular();
39
-        $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label );
39
+        $title = sprintf(__('Enter %s name here', 'invoicing'), $label);
40 40
         return $title;
41 41
      }
42 42
 
43 43
      $screen = get_current_screen();
44 44
 
45
-     if ( 'wpi_invoice' == $screen->post_type ) {
45
+     if ('wpi_invoice' == $screen->post_type) {
46 46
         $label = wpinv_get_label_singular();
47
-        $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label );
47
+        $title = sprintf(__('Enter %s name here', 'invoicing'), $label);
48 48
      }
49 49
 
50 50
      return $title;
51 51
 }
52
-add_filter( 'enter_title_here', 'wpinv_change_default_title' );
52
+add_filter('enter_title_here', 'wpinv_change_default_title');
Please login to merge, or discard this patch.
includes/libraries/GeoIp2/Model/City.php 1 patch
Spacing   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -130,7 +130,6 @@
 block discarded – undo
130 130
     private function mostSpecificSubdivision()
131 131
     {
132 132
         return empty($this->subdivisions) ?
133
-            new \GeoIp2\Record\Subdivision(array(), $this->locales) :
134
-            end($this->subdivisions);
133
+            new \GeoIp2\Record\Subdivision(array(), $this->locales) : end($this->subdivisions);
135 134
     }
136 135
 }
Please login to merge, or discard this patch.
includes/libraries/GeoIp2/WebService/Client.php 1 patch
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -76,7 +76,7 @@
 block discarded – undo
76 76
         // This is for backwards compatibility. Do not remove except for a
77 77
         // major version bump.
78 78
         if (is_string($options)) {
79
-            $options = array( 'host' => $options );
79
+            $options = array('host' => $options);
80 80
         }
81 81
 
82 82
         if (!isset($options['host'])) {
Please login to merge, or discard this patch.
includes/libraries/GeoIp2/Compat/JsonSerializable.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -5,12 +5,12 @@
 block discarded – undo
5 5
 // @codingStandardsIgnoreFile
6 6
 
7 7
 /**
8
-  * This interface exists to provide backwards compatibility with PHP 5.3
9
-  *
10
-  * This should _not_ be used by any third-party code.
11
-  *
12
-  * @ignore
13
-  */
8
+ * This interface exists to provide backwards compatibility with PHP 5.3
9
+ *
10
+ * This should _not_ be used by any third-party code.
11
+ *
12
+ * @ignore
13
+ */
14 14
 if (interface_exists('JsonSerializable')) {
15 15
     interface JsonSerializable extends \JsonSerializable
16 16
     {
Please login to merge, or discard this patch.
includes/libraries/class-emogrifier.php 2 patches
Indentation   +776 added lines, -776 removed lines patch added patch discarded remove patch
@@ -9,780 +9,780 @@
 block discarded – undo
9 9
  * @author Roman Ožana <[email protected]>
10 10
  */
11 11
 class Emogrifier {
12
-	/**
13
-	 * @var string
14
-	 */
15
-	const ENCODING = 'UTF-8';
16
-
17
-	/**
18
-	 * @var integer
19
-	 */
20
-	const CACHE_KEY_CSS = 0;
21
-
22
-	/**
23
-	 * @var integer
24
-	 */
25
-	const CACHE_KEY_SELECTOR = 1;
26
-
27
-	/**
28
-	 * @var integer
29
-	 */
30
-	const CACHE_KEY_XPATH = 2;
31
-
32
-	/**
33
-	 * @var integer
34
-	 */
35
-	const CACHE_KEY_CSS_DECLARATION_BLOCK = 3;
36
-
37
-	/**
38
-	 * for calculating nth-of-type and nth-child selectors.
39
-	 *
40
-	 * @var integer
41
-	 */
42
-	const INDEX = 0;
43
-
44
-	/**
45
-	 * for calculating nth-of-type and nth-child selectors.
46
-	 *
47
-	 * @var integer
48
-	 */
49
-	const MULTIPLIER = 1;
50
-
51
-	/**
52
-	 * @var string
53
-	 */
54
-	const ID_ATTRIBUTE_MATCHER = '/(\\w+)?\\#([\\w\\-]+)/';
55
-
56
-	/**
57
-	 * @var string
58
-	 */
59
-	const CLASS_ATTRIBUTE_MATCHER = '/(\\w+|[\\*\\]])?((\\.[\\w\\-]+)+)/';
60
-
61
-	/**
62
-	 * @var string
63
-	 */
64
-	private $html = '';
65
-
66
-	/**
67
-	 * @var string
68
-	 */
69
-	private $css = '';
70
-
71
-	/**
72
-	 * @var array<string>
73
-	 */
74
-	private $unprocessableHtmlTags = array('wbr');
75
-
76
-	/**
77
-	 * @var array<array>
78
-	 */
79
-	private $caches = array(
80
-		self::CACHE_KEY_CSS => array(),
81
-		self::CACHE_KEY_SELECTOR => array(),
82
-		self::CACHE_KEY_XPATH => array(),
83
-		self::CACHE_KEY_CSS_DECLARATION_BLOCK => array(),
84
-	);
85
-
86
-	/**
87
-	 * the visited nodes with the XPath paths as array keys.
88
-	 *
89
-	 * @var array<\DOMNode>
90
-	 */
91
-	private $visitedNodes = array();
92
-
93
-	/**
94
-	 * the styles to apply to the nodes with the XPath paths as array keys for the outer array and the attribute names/values.
95
-	 * as key/value pairs for the inner array.
96
-	 *
97
-	 * @var array<array><string>
98
-	 */
99
-	private $styleAttributesForNodes = array();
100
-
101
-	/**
102
-	 * This attribute applies to the case where you want to preserve your original text encoding.
103
-	 *
104
-	 * By default, emogrifier translates your text into HTML entities for two reasons:
105
-	 *
106
-	 * 1. Because of client incompatibilities, it is better practice to send out HTML entities rather than unicode over email.
107
-	 *
108
-	 * 2. It translates any illegal XML characters that DOMDocument cannot work with.
109
-	 *
110
-	 * If you would like to preserve your original encoding, set this attribute to TRUE.
111
-	 *
112
-	 * @var boolean
113
-	 */
114
-	public $preserveEncoding = false;
115
-
116
-	public static $_media = '';
117
-
118
-	/**
119
-	 * The constructor.
120
-	 *
121
-	 * @param string $html the HTML to emogrify, must be UTF-8-encoded
122
-	 * @param string $css the CSS to merge, must be UTF-8-encoded
123
-	 */
124
-	public function __construct($html = '', $css = '') {
125
-		$this->setHtml($html);
126
-		$this->setCss($css);
127
-	}
128
-
129
-	/**
130
-	 * The destructor.
131
-	 */
132
-	public function __destruct() {
133
-		$this->purgeVisitedNodes();
134
-	}
135
-
136
-	/**
137
-	 * Sets the HTML to emogrify.
138
-	 *
139
-	 * @param string $html the HTML to emogrify, must be UTF-8-encoded
140
-	 */
141
-	public function setHtml($html = '') {
142
-		$this->html = $html;
143
-	}
144
-
145
-	/**
146
-	 * Sets the CSS to merge with the HTML.
147
-	 *
148
-	 * @param string $css the CSS to merge, must be UTF-8-encoded
149
-	 */
150
-	public function setCss($css = '') {
151
-		$this->css = $css;
152
-	}
153
-
154
-	/**
155
-	 * Clears all caches.
156
-	 */
157
-	private function clearAllCaches() {
158
-		$this->clearCache(self::CACHE_KEY_CSS);
159
-		$this->clearCache(self::CACHE_KEY_SELECTOR);
160
-		$this->clearCache(self::CACHE_KEY_XPATH);
161
-		$this->clearCache(self::CACHE_KEY_CSS_DECLARATION_BLOCK);
162
-	}
163
-
164
-	/**
165
-	 * Clears a single cache by key.
166
-	 *
167
-	 * @param integer $key the cache key, must be CACHE_KEY_CSS, CACHE_KEY_SELECTOR, CACHE_KEY_XPATH or CACHE_KEY_CSS_DECLARATION_BLOCK
168
-	 *
169
-	 * @throws InvalidArgumentException
170
-	 */
171
-	private function clearCache($key) {
172
-		$allowedCacheKeys = array(self::CACHE_KEY_CSS, self::CACHE_KEY_SELECTOR, self::CACHE_KEY_XPATH, self::CACHE_KEY_CSS_DECLARATION_BLOCK);
173
-		if (!in_array($key, $allowedCacheKeys, true)) {
174
-			throw new InvalidArgumentException('Invalid cache key: ' . $key, 1391822035);
175
-		}
176
-
177
-		$this->caches[$key] = array();
178
-	}
179
-
180
-	/**
181
-	 * Purges the visited nodes.
182
-	 */
183
-	private function purgeVisitedNodes() {
184
-		$this->visitedNodes = array();
185
-		$this->styleAttributesForNodes = array();
186
-	}
187
-
188
-	/**
189
-	 * Marks a tag for removal.
190
-	 *
191
-	 * There are some HTML tags that DOMDocument cannot process, and it will throw an error if it encounters them.
192
-	 * In particular, DOMDocument will complain if you try to use HTML5 tags in an XHTML document.
193
-	 *
194
-	 * Note: The tags will not be removed if they have any content.
195
-	 *
196
-	 * @param string $tagName the tag name, e.g., "p"
197
-	 */
198
-	public function addUnprocessableHtmlTag($tagName) {
199
-		$this->unprocessableHtmlTags[] = $tagName;
200
-	}
201
-
202
-	/**
203
-	 * Drops a tag from the removal list.
204
-	 *
205
-	 * @param string $tagName the tag name, e.g., "p"
206
-	 */
207
-	public function removeUnprocessableHtmlTag($tagName) {
208
-		$key = array_search($tagName, $this->unprocessableHtmlTags, true);
209
-		if ($key !== false) {
210
-			unset($this->unprocessableHtmlTags[$key]);
211
-		}
212
-	}
213
-
214
-	/**
215
-	 * Applies the CSS you submit to the HTML you submit.
216
-	 *
217
-	 * This method places the CSS inline.
218
-	 *
219
-	 * @return string
220
-	 *
221
-	 * @throws BadMethodCallException
222
-	 */
223
-	public function emogrify() {
224
-		if ($this->html === '') {
225
-			throw new BadMethodCallException('Please set some HTML first before calling emogrify.', 1390393096);
226
-		}
227
-
228
-		$xmlDocument = $this->createXmlDocument();
229
-		$xpath = new DOMXPath($xmlDocument);
230
-		$this->clearAllCaches();
231
-
232
-		// before be begin processing the CSS file, parse the document and normalize all existing CSS attributes (changes 'DISPLAY: none' to 'display: none');
233
-		// we wouldn't have to do this if DOMXPath supported XPath 2.0.
234
-		// also store a reference of nodes with existing inline styles so we don't overwrite them
235
-		$this->purgeVisitedNodes();
236
-
237
-		$nodesWithStyleAttributes = $xpath->query('//*[@style]');
238
-		if ($nodesWithStyleAttributes !== false) {
239
-			/** @var $nodeWithStyleAttribute DOMNode */
240
-			foreach ($nodesWithStyleAttributes as $node) {
241
-				$normalizedOriginalStyle = preg_replace_callback( '/[A-z\\-]+(?=\\:)/S', array( $this, 'strtolower' ), $node->getAttribute('style') );
242
-
243
-				// in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles
244
-				$nodePath = $node->getNodePath();
245
-				if (!isset($this->styleAttributesForNodes[$nodePath])) {
246
-					$this->styleAttributesForNodes[$nodePath] = $this->parseCssDeclarationBlock($normalizedOriginalStyle);
247
-					$this->visitedNodes[$nodePath] = $node;
248
-				}
249
-
250
-				$node->setAttribute('style', $normalizedOriginalStyle);
251
-			}
252
-		}
253
-
254
-		// grab any existing style blocks from the html and append them to the existing CSS
255
-		// (these blocks should be appended so as to have precedence over conflicting styles in the existing CSS)
256
-		$allCss = $this->css;
257
-
258
-		$allCss .= $this->getCssFromAllStyleNodes($xpath);
259
-
260
-		$cssParts = $this->splitCssAndMediaQuery($allCss);
261
-		self::$_media = ''; // reset
262
-
263
-		$cssKey = md5($cssParts['css']);
264
-		if (!isset($this->caches[self::CACHE_KEY_CSS][$cssKey])) {
265
-			// process the CSS file for selectors and definitions
266
-			preg_match_all('/(?:^|[\\s^{}]*)([^{]+){([^}]*)}/mis', $cssParts['css'], $matches, PREG_SET_ORDER);
267
-
268
-			$allSelectors = array();
269
-			foreach ($matches as $key => $selectorString) {
270
-				// if there is a blank definition, skip
271
-				if (!strlen(trim($selectorString[2]))) {
272
-					continue;
273
-				}
274
-
275
-				// else split by commas and duplicate attributes so we can sort by selector precedence
276
-				$selectors = explode(',', $selectorString[1]);
277
-				foreach ($selectors as $selector) {
278
-					// don't process pseudo-elements and behavioral (dynamic) pseudo-classes; ONLY allow structural pseudo-classes
279
-					if (strpos($selector, ':') !== false && !preg_match('/:\\S+\\-(child|type)\\(/i', $selector)) {
280
-						continue;
281
-					}
282
-
283
-					$allSelectors[] = array('selector' => trim($selector),
284
-											 'attributes' => trim($selectorString[2]),
285
-											 // keep track of where it appears in the file, since order is important
286
-											 'line' => $key,
287
-					);
288
-				}
289
-			}
290
-
291
-			// now sort the selectors by precedence
292
-			usort($allSelectors, array($this,'sortBySelectorPrecedence'));
293
-
294
-			$this->caches[self::CACHE_KEY_CSS][$cssKey] = $allSelectors;
295
-		}
296
-
297
-		foreach ($this->caches[self::CACHE_KEY_CSS][$cssKey] as $value) {
298
-			// query the body for the xpath selector
299
-			$nodesMatchingCssSelectors = $xpath->query($this->translateCssToXpath($value['selector']));
300
-
301
-			/** @var $node \DOMNode */
302
-			foreach ($nodesMatchingCssSelectors as $node) {
303
-				// if it has a style attribute, get it, process it, and append (overwrite) new stuff
304
-				if ($node->hasAttribute('style')) {
305
-					// break it up into an associative array
306
-					$oldStyleDeclarations = $this->parseCssDeclarationBlock($node->getAttribute('style'));
307
-				} else {
308
-					$oldStyleDeclarations = array();
309
-				}
310
-				$newStyleDeclarations = $this->parseCssDeclarationBlock($value['attributes']);
311
-				$node->setAttribute('style', $this->generateStyleStringFromDeclarationsArrays($oldStyleDeclarations, $newStyleDeclarations));
312
-			}
313
-		}
314
-
315
-		// now iterate through the nodes that contained inline styles in the original HTML
316
-		foreach ($this->styleAttributesForNodes as $nodePath => $styleAttributesForNode) {
317
-			$node = $this->visitedNodes[$nodePath];
318
-			$currentStyleAttributes = $this->parseCssDeclarationBlock($node->getAttribute('style'));
319
-			$node->setAttribute('style', $this->generateStyleStringFromDeclarationsArrays($currentStyleAttributes, $styleAttributesForNode));
320
-		}
321
-
322
-		// This removes styles from your email that contain display:none.
323
-		// We need to look for display:none, but we need to do a case-insensitive search. Since DOMDocument only supports XPath 1.0,
324
-		// lower-case() isn't available to us. We've thus far only set attributes to lowercase, not attribute values. Consequently, we need
325
-		// to translate() the letters that would be in 'NONE' ("NOE") to lowercase.
326
-		$nodesWithStyleDisplayNone = $xpath->query('//*[contains(translate(translate(@style," ",""),"NOE","noe"),"display:none")]');
327
-		// The checks on parentNode and is_callable below ensure that if we've deleted the parent node,
328
-		// we don't try to call removeChild on a nonexistent child node
329
-		if ($nodesWithStyleDisplayNone->length > 0) {
330
-			/** @var $node \DOMNode */
331
-			foreach ($nodesWithStyleDisplayNone as $node) {
332
-				if ($node->parentNode && is_callable(array($node->parentNode,'removeChild'))) {
333
-					$node->parentNode->removeChild($node);
334
-				}
335
-			}
336
-		}
337
-
338
-		$this->copyCssWithMediaToStyleNode($cssParts, $xmlDocument);
339
-
340
-		if ($this->preserveEncoding) {
341
-			if ( function_exists( 'mb_convert_encoding' ) ) {
342
-				return mb_convert_encoding( $xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES' );
343
-			} else {
344
-				return htmlspecialchars_decode( utf8_encode( html_entity_decode( $xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING ) ) );
345
-			}
346
-		} else {
347
-			return $xmlDocument->saveHTML();
348
-		}
349
-	}
350
-
351
-	public function strtolower(array $m) {
352
-		return strtolower($m[0]);
353
-	}
354
-
355
-
356
-	/**
357
-	 * This method merges old or existing name/value array with new name/value array.
358
-	 * and then generates a string of the combined style suitable for placing inline.
359
-	 * This becomes the single point for CSS string generation allowing for consistent.
360
-	 * CSS output no matter where the CSS originally came from.
361
-	 * @param array $oldStyles
362
-	 * @param array $newStyles
363
-	 * @return string
364
-	 */
365
-	private function generateStyleStringFromDeclarationsArrays(array $oldStyles, array $newStyles) {
366
-		$combinedStyles = array_merge($oldStyles, $newStyles);
367
-		$style = '';
368
-		foreach ($combinedStyles as $attributeName => $attributeValue) {
369
-			$style .= (strtolower(trim($attributeName)) . ': ' . trim($attributeValue) . '; ');
370
-		}
371
-		return trim($style);
372
-	}
373
-
374
-
375
-	/**
376
-	 * Copies the media part from CSS array parts to $xmlDocument.
377
-	 *
378
-	 * @param array $cssParts
379
-	 * @param DOMDocument $xmlDocument
380
-	 */
381
-	public function copyCssWithMediaToStyleNode(array $cssParts, DOMDocument $xmlDocument) {
382
-		if (isset($cssParts['media']) && $cssParts['media'] !== '') {
383
-			$this->addStyleElementToDocument($xmlDocument, $cssParts['media']);
384
-		}
385
-	}
386
-
387
-	/**
388
-	 * Returns CSS content.
389
-	 *
390
-	 * @param DOMXPath $xpath
391
-	 * @return string
392
-	 */
393
-	private function getCssFromAllStyleNodes(DOMXPath $xpath) {
394
-		$styleNodes = $xpath->query('//style');
395
-
396
-		if ($styleNodes === false) {
397
-			return '';
398
-		}
399
-
400
-		$css = '';
401
-		/** @var $styleNode DOMNode */
402
-		foreach ($styleNodes as $styleNode) {
403
-			$css .= "\n\n" . $styleNode->nodeValue;
404
-			$styleNode->parentNode->removeChild($styleNode);
405
-		}
406
-
407
-		return $css;
408
-	}
409
-
410
-	/**
411
-	 * Adds a style element with $css to $document.
412
-	 *
413
-	 * @param DOMDocument $document
414
-	 * @param string $css
415
-	 */
416
-	private function addStyleElementToDocument(DOMDocument $document, $css) {
417
-		$styleElement = $document->createElement('style', $css);
418
-		$styleAttribute = $document->createAttribute('type');
419
-		$styleAttribute->value = 'text/css';
420
-		$styleElement->appendChild($styleAttribute);
421
-
422
-		$head = $this->getOrCreateHeadElement($document);
423
-		$head->appendChild($styleElement);
424
-	}
425
-
426
-	/**
427
-	 * Returns the existing or creates a new head element in $document.
428
-	 *
429
-	 * @param DOMDocument $document
430
-	 * @return DOMNode the head element
431
-	 */
432
-	private function getOrCreateHeadElement(DOMDocument $document) {
433
-		$head = $document->getElementsByTagName('head')->item(0);
434
-
435
-		if ($head === null) {
436
-			$head = $document->createElement('head');
437
-			$html = $document->getElementsByTagName('html')->item(0);
438
-			$html->insertBefore($head, $document->getElementsByTagName('body')->item(0));
439
-		}
440
-
441
-		return $head;
442
-	}
443
-
444
-	/**
445
-	 * Splits input CSS code to an array where:
446
-	 *
447
-	 * - key "css" will be contains clean CSS code.
448
-	 * - key "media" will be contains all valuable media queries.
449
-	 *
450
-	 * Example:
451
-	 *
452
-	 * The CSS code.
453
-	 *
454
-	 *   "@import "file.css"; h1 { color:red; } @media { h1 {}} @media tv { h1 {}}"
455
-	 *
456
-	 * will be parsed into the following array:
457
-	 *
458
-	 *   "css" => "h1 { color:red; }"
459
-	 *   "media" => "@media { h1 {}}"
460
-	 *
461
-	 * @param string $css
462
-	 * @return array
463
-	 */
464
-	private function splitCssAndMediaQuery($css) {
465
-		$css = preg_replace_callback( '#@media\\s+(?:only\\s)?(?:[\\s{\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU', array( $this, '_media_concat' ), $css );
466
-
467
-		// filter the CSS
468
-		$search = array(
469
-			// get rid of css comment code
470
-			'/\\/\\*.*\\*\\//sU',
471
-			// strip out any import directives
472
-			'/^\\s*@import\\s[^;]+;/misU',
473
-			// strip remains media enclosures
474
-			'/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
475
-		);
476
-
477
-		$replace = array(
478
-			'',
479
-			'',
480
-			'',
481
-		);
482
-
483
-		// clean CSS before output
484
-		$css = preg_replace($search, $replace, $css);
485
-
486
-		return array('css' => $css, 'media' => self::$_media);
487
-	}
488
-
489
-	private function _media_concat( $matches ) {
490
-		self::$_media .= $matches[0];
491
-	}
492
-
493
-	/**
494
-	 * Creates a DOMDocument instance with the current HTML.
495
-	 *
496
-	 * @return DOMDocument
497
-	 */
498
-	private function createXmlDocument() {
499
-		$xmlDocument = new DOMDocument;
500
-		$xmlDocument->encoding = self::ENCODING;
501
-		$xmlDocument->strictErrorChecking = false;
502
-		$xmlDocument->formatOutput = true;
503
-		$libXmlState = libxml_use_internal_errors(true);
504
-		$xmlDocument->loadHTML($this->getUnifiedHtml());
505
-		libxml_clear_errors();
506
-		libxml_use_internal_errors($libXmlState);
507
-		$xmlDocument->normalizeDocument();
508
-
509
-		return $xmlDocument;
510
-	}
511
-
512
-	/**
513
-	 * Returns the HTML with the non-ASCII characters converts into HTML entities and the unprocessable HTML tags removed.
514
-	 *
515
-	 * @return string the unified HTML
516
-	 *
517
-	 * @throws BadMethodCallException
518
-	 */
519
-	private function getUnifiedHtml() {
520
-		if (!empty($this->unprocessableHtmlTags)) {
521
-			$unprocessableHtmlTags = implode('|', $this->unprocessableHtmlTags);
522
-			$bodyWithoutUnprocessableTags = preg_replace('/<\\/?(' . $unprocessableHtmlTags . ')[^>]*>/i', '', $this->html);
523
-		} else {
524
-			$bodyWithoutUnprocessableTags = $this->html;
525
-		}
526
-
527
-		if ( function_exists( 'mb_convert_encoding' ) ) {
528
-			return mb_convert_encoding( $bodyWithoutUnprocessableTags, 'HTML-ENTITIES', self::ENCODING );
529
-		} else {
530
-			return htmlspecialchars_decode( utf8_decode( htmlentities( $bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false ) ) );
531
-		}
532
-	}
533
-
534
-	/**
535
-	 * @param array $a
536
-	 * @param array $b
537
-	 *
538
-	 * @return integer
539
-	 */
540
-	private function sortBySelectorPrecedence(array $a, array $b) {
541
-		$precedenceA = $this->getCssSelectorPrecedence($a['selector']);
542
-		$precedenceB = $this->getCssSelectorPrecedence($b['selector']);
543
-
544
-		// We want these sorted in ascending order so selectors with lesser precedence get processed first and
545
-		// selectors with greater precedence get sorted last.
546
-		// The parenthesis around the -1 are necessary to avoid a PHP_CodeSniffer warning about missing spaces around
547
-		// arithmetic operators.
548
-		// @see http://forge.typo3.org/issues/55605
549
-		$precedenceForEquals = ($a['line'] < $b['line'] ? (-1) : 1);
550
-		$precedenceForNotEquals = ($precedenceA < $precedenceB ? (-1) : 1);
551
-		return ($precedenceA === $precedenceB) ? $precedenceForEquals : $precedenceForNotEquals;
552
-	}
553
-
554
-	/**
555
-	 * @param string $selector
556
-	 *
557
-	 * @return integer
558
-	 */
559
-	private function getCssSelectorPrecedence($selector) {
560
-		$selectorKey = md5($selector);
561
-		if (!isset($this->caches[self::CACHE_KEY_SELECTOR][$selectorKey])) {
562
-			$precedence = 0;
563
-			$value = 100;
564
-			// ids: worth 100, classes: worth 10, elements: worth 1
565
-			$search = array('\\#','\\.','');
566
-
567
-			foreach ($search as $s) {
568
-				if (trim($selector == '')) {
569
-					break;
570
-				}
571
-				$number = 0;
572
-				$selector = preg_replace('/' . $s . '\\w+/', '', $selector, -1, $number);
573
-				$precedence += ($value * $number);
574
-				$value /= 10;
575
-			}
576
-			$this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] = $precedence;
577
-		}
578
-
579
-		return $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey];
580
-	}
581
-
582
-	/**
583
-	 * Right now, we support all CSS 1 selectors and most CSS2/3 selectors.
584
-	 *
585
-	 * @see http://plasmasturm.org/log/444/
586
-	 *
587
-	 * @param string $paramCssSelector
588
-	 *
589
-	 * @return string
590
-	 */
591
-	private function translateCssToXpath($paramCssSelector) {
592
-		$cssSelector = ' ' . $paramCssSelector . ' ';
593
-		$cssSelector = preg_replace_callback( '/\s+\w+\s+/', array( $this, 'strtolower' ), $cssSelector );
594
-		$cssSelector = trim($cssSelector);
595
-		$xpathKey = md5($cssSelector);
596
-		if (!isset($this->caches[self::CACHE_KEY_XPATH][$xpathKey])) {
597
-			// returns an Xpath selector
598
-			$search = array(
599
-				// Matches any element that is a child of parent.
600
-				'/\\s+>\\s+/',
601
-				// Matches any element that is an adjacent sibling.
602
-				'/\\s+\\+\\s+/',
603
-				// Matches any element that is a descendant of an parent element element.
604
-				'/\\s+/',
605
-				// first-child pseudo-selector
606
-				'/([^\\/]+):first-child/i',
607
-				// last-child pseudo-selector
608
-				'/([^\\/]+):last-child/i',
609
-				// Matches attribute only selector
610
-				'/^\\[(\\w+)\\]/',
611
-				// Matches element with attribute
612
-				'/(\\w)\\[(\\w+)\\]/',
613
-				// Matches element with EXACT attribute
614
-				'/(\\w)\\[(\\w+)\\=[\'"]?(\\w+)[\'"]?\\]/',
615
-			);
616
-			$replace = array(
617
-				'/',
618
-				'/following-sibling::*[1]/self::',
619
-				'//',
620
-				'*[1]/self::\\1',
621
-				'*[last()]/self::\\1',
622
-				'*[@\\1]',
623
-				'\\1[@\\2]',
624
-				'\\1[@\\2="\\3"]',
625
-			);
626
-
627
-			$cssSelector = '//' . preg_replace($search, $replace, $cssSelector);
628
-
629
-			$cssSelector = preg_replace_callback(self::ID_ATTRIBUTE_MATCHER, array($this, 'matchIdAttributes'), $cssSelector);
630
-			$cssSelector = preg_replace_callback(self::CLASS_ATTRIBUTE_MATCHER, array($this, 'matchClassAttributes'), $cssSelector);
631
-
632
-			// Advanced selectors are going to require a bit more advanced emogrification.
633
-			// When we required PHP 5.3, we could do this with closures.
634
-			$cssSelector = preg_replace_callback(
635
-				'/([^\\/]+):nth-child\\(\s*(odd|even|[+\-]?\\d|[+\\-]?\\d?n(\\s*[+\\-]\\s*\\d)?)\\s*\\)/i',
636
-				array($this, 'translateNthChild'), $cssSelector
637
-			);
638
-			$cssSelector = preg_replace_callback(
639
-				'/([^\\/]+):nth-of-type\\(\s*(odd|even|[+\-]?\\d|[+\\-]?\\d?n(\\s*[+\\-]\\s*\\d)?)\\s*\\)/i',
640
-				array($this, 'translateNthOfType'), $cssSelector
641
-			);
642
-
643
-			$this->caches[self::CACHE_KEY_SELECTOR][$xpathKey] = $cssSelector;
644
-		}
645
-		return $this->caches[self::CACHE_KEY_SELECTOR][$xpathKey];
646
-	}
647
-
648
-	/**
649
-	 * @param array $match
650
-	 *
651
-	 * @return string
652
-	 */
653
-	private function matchIdAttributes(array $match) {
654
-		return (strlen($match[1]) ? $match[1] : '*') . '[@id="' . $match[2] . '"]';
655
-	}
656
-
657
-	/**
658
-	 * @param array $match
659
-	 *
660
-	 * @return string
661
-	 */
662
-	private function matchClassAttributes(array $match) {
663
-		return (strlen($match[1]) ? $match[1] : '*') . '[contains(concat(" ",@class," "),concat(" ","' .
664
-			implode(
665
-				'"," "))][contains(concat(" ",@class," "),concat(" ","',
666
-				explode('.', substr($match[2], 1))
667
-			) . '"," "))]';
668
-	}
669
-
670
-	/**
671
-	 * @param array $match
672
-	 *
673
-	 * @return string
674
-	 */
675
-	private function translateNthChild(array $match) {
676
-		$result = $this->parseNth($match);
677
-
678
-		if (isset($result[self::MULTIPLIER])) {
679
-			if ($result[self::MULTIPLIER] < 0) {
680
-				$result[self::MULTIPLIER] = abs($result[self::MULTIPLIER]);
681
-				return sprintf('*[(last() - position()) mod %u = %u]/self::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1]);
682
-			} else {
683
-				return sprintf('*[position() mod %u = %u]/self::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1]);
684
-			}
685
-		} else {
686
-			return sprintf('*[%u]/self::%s', $result[self::INDEX], $match[1]);
687
-		}
688
-	}
689
-
690
-	/**
691
-	 * @param array $match
692
-	 *
693
-	 * @return string
694
-	 */
695
-	private function translateNthOfType(array $match) {
696
-		$result = $this->parseNth($match);
697
-
698
-		if (isset($result[self::MULTIPLIER])) {
699
-			if ($result[self::MULTIPLIER] < 0) {
700
-				$result[self::MULTIPLIER] = abs($result[self::MULTIPLIER]);
701
-				return sprintf('%s[(last() - position()) mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX]);
702
-			} else {
703
-				return sprintf('%s[position() mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX]);
704
-			}
705
-		} else {
706
-			return sprintf('%s[%u]', $match[1], $result[self::INDEX]);
707
-		}
708
-	}
709
-
710
-	/**
711
-	 * @param array $match
712
-	 *
713
-	 * @return array
714
-	 */
715
-	private function parseNth(array $match) {
716
-		if (in_array(strtolower($match[2]), array('even','odd'))) {
717
-			$index = strtolower($match[2]) == 'even' ? 0 : 1;
718
-			return array(self::MULTIPLIER => 2, self::INDEX => $index);
719
-		} elseif (stripos($match[2], 'n') === false) {
720
-			// if there is a multiplier
721
-			$index = intval(str_replace(' ', '', $match[2]));
722
-			return array(self::INDEX => $index);
723
-		} else {
724
-			if (isset($match[3])) {
725
-				$multipleTerm = str_replace($match[3], '', $match[2]);
726
-				$index = intval(str_replace(' ', '', $match[3]));
727
-			} else {
728
-				$multipleTerm = $match[2];
729
-				$index = 0;
730
-			}
731
-
732
-			$multiplier = str_ireplace('n', '', $multipleTerm);
733
-
734
-			if (!strlen($multiplier)) {
735
-				$multiplier = 1;
736
-			} elseif ($multiplier == 0) {
737
-				return array(self::INDEX => $index);
738
-			} else {
739
-				$multiplier = intval($multiplier);
740
-			}
741
-
742
-			while ($index < 0) {
743
-				$index += abs($multiplier);
744
-			}
745
-
746
-			return array(self::MULTIPLIER => $multiplier, self::INDEX => $index);
747
-		}
748
-	}
749
-
750
-	/**
751
-	 * Parses a CSS declaration block into property name/value pairs.
752
-	 *
753
-	 * Example:
754
-	 *
755
-	 * The declaration block.
756
-	 *
757
-	 *   "color: #000; font-weight: bold;".
758
-	 *
759
-	 * will be parsed into the following array:
760
-	 *
761
-	 *   "color" => "#000"
762
-	 *   "font-weight" => "bold"
763
-	 *
764
-	 * @param string $cssDeclarationBlock the CSS declaration block without the curly braces, may be empty
765
-	 *
766
-	 * @return array the CSS declarations with the property names as array keys and the property values as array values
767
-	 */
768
-	private function parseCssDeclarationBlock($cssDeclarationBlock) {
769
-		if (isset($this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock])) {
770
-			return $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock];
771
-		}
772
-
773
-		$properties = array();
774
-		$declarations = explode(';', $cssDeclarationBlock);
775
-		foreach ($declarations as $declaration) {
776
-			$matches = array();
777
-			if (!preg_match('/ *([A-Za-z\\-]+) *: *([^;]+) */', $declaration, $matches)) {
778
-				continue;
779
-			}
780
-			$propertyName = strtolower($matches[1]);
781
-			$propertyValue = $matches[2];
782
-			$properties[$propertyName] = $propertyValue;
783
-		}
784
-		$this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] = $properties;
785
-
786
-		return $properties;
787
-	}
12
+    /**
13
+     * @var string
14
+     */
15
+    const ENCODING = 'UTF-8';
16
+
17
+    /**
18
+     * @var integer
19
+     */
20
+    const CACHE_KEY_CSS = 0;
21
+
22
+    /**
23
+     * @var integer
24
+     */
25
+    const CACHE_KEY_SELECTOR = 1;
26
+
27
+    /**
28
+     * @var integer
29
+     */
30
+    const CACHE_KEY_XPATH = 2;
31
+
32
+    /**
33
+     * @var integer
34
+     */
35
+    const CACHE_KEY_CSS_DECLARATION_BLOCK = 3;
36
+
37
+    /**
38
+     * for calculating nth-of-type and nth-child selectors.
39
+     *
40
+     * @var integer
41
+     */
42
+    const INDEX = 0;
43
+
44
+    /**
45
+     * for calculating nth-of-type and nth-child selectors.
46
+     *
47
+     * @var integer
48
+     */
49
+    const MULTIPLIER = 1;
50
+
51
+    /**
52
+     * @var string
53
+     */
54
+    const ID_ATTRIBUTE_MATCHER = '/(\\w+)?\\#([\\w\\-]+)/';
55
+
56
+    /**
57
+     * @var string
58
+     */
59
+    const CLASS_ATTRIBUTE_MATCHER = '/(\\w+|[\\*\\]])?((\\.[\\w\\-]+)+)/';
60
+
61
+    /**
62
+     * @var string
63
+     */
64
+    private $html = '';
65
+
66
+    /**
67
+     * @var string
68
+     */
69
+    private $css = '';
70
+
71
+    /**
72
+     * @var array<string>
73
+     */
74
+    private $unprocessableHtmlTags = array('wbr');
75
+
76
+    /**
77
+     * @var array<array>
78
+     */
79
+    private $caches = array(
80
+        self::CACHE_KEY_CSS => array(),
81
+        self::CACHE_KEY_SELECTOR => array(),
82
+        self::CACHE_KEY_XPATH => array(),
83
+        self::CACHE_KEY_CSS_DECLARATION_BLOCK => array(),
84
+    );
85
+
86
+    /**
87
+     * the visited nodes with the XPath paths as array keys.
88
+     *
89
+     * @var array<\DOMNode>
90
+     */
91
+    private $visitedNodes = array();
92
+
93
+    /**
94
+     * the styles to apply to the nodes with the XPath paths as array keys for the outer array and the attribute names/values.
95
+     * as key/value pairs for the inner array.
96
+     *
97
+     * @var array<array><string>
98
+     */
99
+    private $styleAttributesForNodes = array();
100
+
101
+    /**
102
+     * This attribute applies to the case where you want to preserve your original text encoding.
103
+     *
104
+     * By default, emogrifier translates your text into HTML entities for two reasons:
105
+     *
106
+     * 1. Because of client incompatibilities, it is better practice to send out HTML entities rather than unicode over email.
107
+     *
108
+     * 2. It translates any illegal XML characters that DOMDocument cannot work with.
109
+     *
110
+     * If you would like to preserve your original encoding, set this attribute to TRUE.
111
+     *
112
+     * @var boolean
113
+     */
114
+    public $preserveEncoding = false;
115
+
116
+    public static $_media = '';
117
+
118
+    /**
119
+     * The constructor.
120
+     *
121
+     * @param string $html the HTML to emogrify, must be UTF-8-encoded
122
+     * @param string $css the CSS to merge, must be UTF-8-encoded
123
+     */
124
+    public function __construct($html = '', $css = '') {
125
+        $this->setHtml($html);
126
+        $this->setCss($css);
127
+    }
128
+
129
+    /**
130
+     * The destructor.
131
+     */
132
+    public function __destruct() {
133
+        $this->purgeVisitedNodes();
134
+    }
135
+
136
+    /**
137
+     * Sets the HTML to emogrify.
138
+     *
139
+     * @param string $html the HTML to emogrify, must be UTF-8-encoded
140
+     */
141
+    public function setHtml($html = '') {
142
+        $this->html = $html;
143
+    }
144
+
145
+    /**
146
+     * Sets the CSS to merge with the HTML.
147
+     *
148
+     * @param string $css the CSS to merge, must be UTF-8-encoded
149
+     */
150
+    public function setCss($css = '') {
151
+        $this->css = $css;
152
+    }
153
+
154
+    /**
155
+     * Clears all caches.
156
+     */
157
+    private function clearAllCaches() {
158
+        $this->clearCache(self::CACHE_KEY_CSS);
159
+        $this->clearCache(self::CACHE_KEY_SELECTOR);
160
+        $this->clearCache(self::CACHE_KEY_XPATH);
161
+        $this->clearCache(self::CACHE_KEY_CSS_DECLARATION_BLOCK);
162
+    }
163
+
164
+    /**
165
+     * Clears a single cache by key.
166
+     *
167
+     * @param integer $key the cache key, must be CACHE_KEY_CSS, CACHE_KEY_SELECTOR, CACHE_KEY_XPATH or CACHE_KEY_CSS_DECLARATION_BLOCK
168
+     *
169
+     * @throws InvalidArgumentException
170
+     */
171
+    private function clearCache($key) {
172
+        $allowedCacheKeys = array(self::CACHE_KEY_CSS, self::CACHE_KEY_SELECTOR, self::CACHE_KEY_XPATH, self::CACHE_KEY_CSS_DECLARATION_BLOCK);
173
+        if (!in_array($key, $allowedCacheKeys, true)) {
174
+            throw new InvalidArgumentException('Invalid cache key: ' . $key, 1391822035);
175
+        }
176
+
177
+        $this->caches[$key] = array();
178
+    }
179
+
180
+    /**
181
+     * Purges the visited nodes.
182
+     */
183
+    private function purgeVisitedNodes() {
184
+        $this->visitedNodes = array();
185
+        $this->styleAttributesForNodes = array();
186
+    }
187
+
188
+    /**
189
+     * Marks a tag for removal.
190
+     *
191
+     * There are some HTML tags that DOMDocument cannot process, and it will throw an error if it encounters them.
192
+     * In particular, DOMDocument will complain if you try to use HTML5 tags in an XHTML document.
193
+     *
194
+     * Note: The tags will not be removed if they have any content.
195
+     *
196
+     * @param string $tagName the tag name, e.g., "p"
197
+     */
198
+    public function addUnprocessableHtmlTag($tagName) {
199
+        $this->unprocessableHtmlTags[] = $tagName;
200
+    }
201
+
202
+    /**
203
+     * Drops a tag from the removal list.
204
+     *
205
+     * @param string $tagName the tag name, e.g., "p"
206
+     */
207
+    public function removeUnprocessableHtmlTag($tagName) {
208
+        $key = array_search($tagName, $this->unprocessableHtmlTags, true);
209
+        if ($key !== false) {
210
+            unset($this->unprocessableHtmlTags[$key]);
211
+        }
212
+    }
213
+
214
+    /**
215
+     * Applies the CSS you submit to the HTML you submit.
216
+     *
217
+     * This method places the CSS inline.
218
+     *
219
+     * @return string
220
+     *
221
+     * @throws BadMethodCallException
222
+     */
223
+    public function emogrify() {
224
+        if ($this->html === '') {
225
+            throw new BadMethodCallException('Please set some HTML first before calling emogrify.', 1390393096);
226
+        }
227
+
228
+        $xmlDocument = $this->createXmlDocument();
229
+        $xpath = new DOMXPath($xmlDocument);
230
+        $this->clearAllCaches();
231
+
232
+        // before be begin processing the CSS file, parse the document and normalize all existing CSS attributes (changes 'DISPLAY: none' to 'display: none');
233
+        // we wouldn't have to do this if DOMXPath supported XPath 2.0.
234
+        // also store a reference of nodes with existing inline styles so we don't overwrite them
235
+        $this->purgeVisitedNodes();
236
+
237
+        $nodesWithStyleAttributes = $xpath->query('//*[@style]');
238
+        if ($nodesWithStyleAttributes !== false) {
239
+            /** @var $nodeWithStyleAttribute DOMNode */
240
+            foreach ($nodesWithStyleAttributes as $node) {
241
+                $normalizedOriginalStyle = preg_replace_callback( '/[A-z\\-]+(?=\\:)/S', array( $this, 'strtolower' ), $node->getAttribute('style') );
242
+
243
+                // in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles
244
+                $nodePath = $node->getNodePath();
245
+                if (!isset($this->styleAttributesForNodes[$nodePath])) {
246
+                    $this->styleAttributesForNodes[$nodePath] = $this->parseCssDeclarationBlock($normalizedOriginalStyle);
247
+                    $this->visitedNodes[$nodePath] = $node;
248
+                }
249
+
250
+                $node->setAttribute('style', $normalizedOriginalStyle);
251
+            }
252
+        }
253
+
254
+        // grab any existing style blocks from the html and append them to the existing CSS
255
+        // (these blocks should be appended so as to have precedence over conflicting styles in the existing CSS)
256
+        $allCss = $this->css;
257
+
258
+        $allCss .= $this->getCssFromAllStyleNodes($xpath);
259
+
260
+        $cssParts = $this->splitCssAndMediaQuery($allCss);
261
+        self::$_media = ''; // reset
262
+
263
+        $cssKey = md5($cssParts['css']);
264
+        if (!isset($this->caches[self::CACHE_KEY_CSS][$cssKey])) {
265
+            // process the CSS file for selectors and definitions
266
+            preg_match_all('/(?:^|[\\s^{}]*)([^{]+){([^}]*)}/mis', $cssParts['css'], $matches, PREG_SET_ORDER);
267
+
268
+            $allSelectors = array();
269
+            foreach ($matches as $key => $selectorString) {
270
+                // if there is a blank definition, skip
271
+                if (!strlen(trim($selectorString[2]))) {
272
+                    continue;
273
+                }
274
+
275
+                // else split by commas and duplicate attributes so we can sort by selector precedence
276
+                $selectors = explode(',', $selectorString[1]);
277
+                foreach ($selectors as $selector) {
278
+                    // don't process pseudo-elements and behavioral (dynamic) pseudo-classes; ONLY allow structural pseudo-classes
279
+                    if (strpos($selector, ':') !== false && !preg_match('/:\\S+\\-(child|type)\\(/i', $selector)) {
280
+                        continue;
281
+                    }
282
+
283
+                    $allSelectors[] = array('selector' => trim($selector),
284
+                                                'attributes' => trim($selectorString[2]),
285
+                                                // keep track of where it appears in the file, since order is important
286
+                                                'line' => $key,
287
+                    );
288
+                }
289
+            }
290
+
291
+            // now sort the selectors by precedence
292
+            usort($allSelectors, array($this,'sortBySelectorPrecedence'));
293
+
294
+            $this->caches[self::CACHE_KEY_CSS][$cssKey] = $allSelectors;
295
+        }
296
+
297
+        foreach ($this->caches[self::CACHE_KEY_CSS][$cssKey] as $value) {
298
+            // query the body for the xpath selector
299
+            $nodesMatchingCssSelectors = $xpath->query($this->translateCssToXpath($value['selector']));
300
+
301
+            /** @var $node \DOMNode */
302
+            foreach ($nodesMatchingCssSelectors as $node) {
303
+                // if it has a style attribute, get it, process it, and append (overwrite) new stuff
304
+                if ($node->hasAttribute('style')) {
305
+                    // break it up into an associative array
306
+                    $oldStyleDeclarations = $this->parseCssDeclarationBlock($node->getAttribute('style'));
307
+                } else {
308
+                    $oldStyleDeclarations = array();
309
+                }
310
+                $newStyleDeclarations = $this->parseCssDeclarationBlock($value['attributes']);
311
+                $node->setAttribute('style', $this->generateStyleStringFromDeclarationsArrays($oldStyleDeclarations, $newStyleDeclarations));
312
+            }
313
+        }
314
+
315
+        // now iterate through the nodes that contained inline styles in the original HTML
316
+        foreach ($this->styleAttributesForNodes as $nodePath => $styleAttributesForNode) {
317
+            $node = $this->visitedNodes[$nodePath];
318
+            $currentStyleAttributes = $this->parseCssDeclarationBlock($node->getAttribute('style'));
319
+            $node->setAttribute('style', $this->generateStyleStringFromDeclarationsArrays($currentStyleAttributes, $styleAttributesForNode));
320
+        }
321
+
322
+        // This removes styles from your email that contain display:none.
323
+        // We need to look for display:none, but we need to do a case-insensitive search. Since DOMDocument only supports XPath 1.0,
324
+        // lower-case() isn't available to us. We've thus far only set attributes to lowercase, not attribute values. Consequently, we need
325
+        // to translate() the letters that would be in 'NONE' ("NOE") to lowercase.
326
+        $nodesWithStyleDisplayNone = $xpath->query('//*[contains(translate(translate(@style," ",""),"NOE","noe"),"display:none")]');
327
+        // The checks on parentNode and is_callable below ensure that if we've deleted the parent node,
328
+        // we don't try to call removeChild on a nonexistent child node
329
+        if ($nodesWithStyleDisplayNone->length > 0) {
330
+            /** @var $node \DOMNode */
331
+            foreach ($nodesWithStyleDisplayNone as $node) {
332
+                if ($node->parentNode && is_callable(array($node->parentNode,'removeChild'))) {
333
+                    $node->parentNode->removeChild($node);
334
+                }
335
+            }
336
+        }
337
+
338
+        $this->copyCssWithMediaToStyleNode($cssParts, $xmlDocument);
339
+
340
+        if ($this->preserveEncoding) {
341
+            if ( function_exists( 'mb_convert_encoding' ) ) {
342
+                return mb_convert_encoding( $xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES' );
343
+            } else {
344
+                return htmlspecialchars_decode( utf8_encode( html_entity_decode( $xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING ) ) );
345
+            }
346
+        } else {
347
+            return $xmlDocument->saveHTML();
348
+        }
349
+    }
350
+
351
+    public function strtolower(array $m) {
352
+        return strtolower($m[0]);
353
+    }
354
+
355
+
356
+    /**
357
+     * This method merges old or existing name/value array with new name/value array.
358
+     * and then generates a string of the combined style suitable for placing inline.
359
+     * This becomes the single point for CSS string generation allowing for consistent.
360
+     * CSS output no matter where the CSS originally came from.
361
+     * @param array $oldStyles
362
+     * @param array $newStyles
363
+     * @return string
364
+     */
365
+    private function generateStyleStringFromDeclarationsArrays(array $oldStyles, array $newStyles) {
366
+        $combinedStyles = array_merge($oldStyles, $newStyles);
367
+        $style = '';
368
+        foreach ($combinedStyles as $attributeName => $attributeValue) {
369
+            $style .= (strtolower(trim($attributeName)) . ': ' . trim($attributeValue) . '; ');
370
+        }
371
+        return trim($style);
372
+    }
373
+
374
+
375
+    /**
376
+     * Copies the media part from CSS array parts to $xmlDocument.
377
+     *
378
+     * @param array $cssParts
379
+     * @param DOMDocument $xmlDocument
380
+     */
381
+    public function copyCssWithMediaToStyleNode(array $cssParts, DOMDocument $xmlDocument) {
382
+        if (isset($cssParts['media']) && $cssParts['media'] !== '') {
383
+            $this->addStyleElementToDocument($xmlDocument, $cssParts['media']);
384
+        }
385
+    }
386
+
387
+    /**
388
+     * Returns CSS content.
389
+     *
390
+     * @param DOMXPath $xpath
391
+     * @return string
392
+     */
393
+    private function getCssFromAllStyleNodes(DOMXPath $xpath) {
394
+        $styleNodes = $xpath->query('//style');
395
+
396
+        if ($styleNodes === false) {
397
+            return '';
398
+        }
399
+
400
+        $css = '';
401
+        /** @var $styleNode DOMNode */
402
+        foreach ($styleNodes as $styleNode) {
403
+            $css .= "\n\n" . $styleNode->nodeValue;
404
+            $styleNode->parentNode->removeChild($styleNode);
405
+        }
406
+
407
+        return $css;
408
+    }
409
+
410
+    /**
411
+     * Adds a style element with $css to $document.
412
+     *
413
+     * @param DOMDocument $document
414
+     * @param string $css
415
+     */
416
+    private function addStyleElementToDocument(DOMDocument $document, $css) {
417
+        $styleElement = $document->createElement('style', $css);
418
+        $styleAttribute = $document->createAttribute('type');
419
+        $styleAttribute->value = 'text/css';
420
+        $styleElement->appendChild($styleAttribute);
421
+
422
+        $head = $this->getOrCreateHeadElement($document);
423
+        $head->appendChild($styleElement);
424
+    }
425
+
426
+    /**
427
+     * Returns the existing or creates a new head element in $document.
428
+     *
429
+     * @param DOMDocument $document
430
+     * @return DOMNode the head element
431
+     */
432
+    private function getOrCreateHeadElement(DOMDocument $document) {
433
+        $head = $document->getElementsByTagName('head')->item(0);
434
+
435
+        if ($head === null) {
436
+            $head = $document->createElement('head');
437
+            $html = $document->getElementsByTagName('html')->item(0);
438
+            $html->insertBefore($head, $document->getElementsByTagName('body')->item(0));
439
+        }
440
+
441
+        return $head;
442
+    }
443
+
444
+    /**
445
+     * Splits input CSS code to an array where:
446
+     *
447
+     * - key "css" will be contains clean CSS code.
448
+     * - key "media" will be contains all valuable media queries.
449
+     *
450
+     * Example:
451
+     *
452
+     * The CSS code.
453
+     *
454
+     *   "@import "file.css"; h1 { color:red; } @media { h1 {}} @media tv { h1 {}}"
455
+     *
456
+     * will be parsed into the following array:
457
+     *
458
+     *   "css" => "h1 { color:red; }"
459
+     *   "media" => "@media { h1 {}}"
460
+     *
461
+     * @param string $css
462
+     * @return array
463
+     */
464
+    private function splitCssAndMediaQuery($css) {
465
+        $css = preg_replace_callback( '#@media\\s+(?:only\\s)?(?:[\\s{\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU', array( $this, '_media_concat' ), $css );
466
+
467
+        // filter the CSS
468
+        $search = array(
469
+            // get rid of css comment code
470
+            '/\\/\\*.*\\*\\//sU',
471
+            // strip out any import directives
472
+            '/^\\s*@import\\s[^;]+;/misU',
473
+            // strip remains media enclosures
474
+            '/^\\s*@media\\s[^{]+{(.*)}\\s*}\\s/misU',
475
+        );
476
+
477
+        $replace = array(
478
+            '',
479
+            '',
480
+            '',
481
+        );
482
+
483
+        // clean CSS before output
484
+        $css = preg_replace($search, $replace, $css);
485
+
486
+        return array('css' => $css, 'media' => self::$_media);
487
+    }
488
+
489
+    private function _media_concat( $matches ) {
490
+        self::$_media .= $matches[0];
491
+    }
492
+
493
+    /**
494
+     * Creates a DOMDocument instance with the current HTML.
495
+     *
496
+     * @return DOMDocument
497
+     */
498
+    private function createXmlDocument() {
499
+        $xmlDocument = new DOMDocument;
500
+        $xmlDocument->encoding = self::ENCODING;
501
+        $xmlDocument->strictErrorChecking = false;
502
+        $xmlDocument->formatOutput = true;
503
+        $libXmlState = libxml_use_internal_errors(true);
504
+        $xmlDocument->loadHTML($this->getUnifiedHtml());
505
+        libxml_clear_errors();
506
+        libxml_use_internal_errors($libXmlState);
507
+        $xmlDocument->normalizeDocument();
508
+
509
+        return $xmlDocument;
510
+    }
511
+
512
+    /**
513
+     * Returns the HTML with the non-ASCII characters converts into HTML entities and the unprocessable HTML tags removed.
514
+     *
515
+     * @return string the unified HTML
516
+     *
517
+     * @throws BadMethodCallException
518
+     */
519
+    private function getUnifiedHtml() {
520
+        if (!empty($this->unprocessableHtmlTags)) {
521
+            $unprocessableHtmlTags = implode('|', $this->unprocessableHtmlTags);
522
+            $bodyWithoutUnprocessableTags = preg_replace('/<\\/?(' . $unprocessableHtmlTags . ')[^>]*>/i', '', $this->html);
523
+        } else {
524
+            $bodyWithoutUnprocessableTags = $this->html;
525
+        }
526
+
527
+        if ( function_exists( 'mb_convert_encoding' ) ) {
528
+            return mb_convert_encoding( $bodyWithoutUnprocessableTags, 'HTML-ENTITIES', self::ENCODING );
529
+        } else {
530
+            return htmlspecialchars_decode( utf8_decode( htmlentities( $bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false ) ) );
531
+        }
532
+    }
533
+
534
+    /**
535
+     * @param array $a
536
+     * @param array $b
537
+     *
538
+     * @return integer
539
+     */
540
+    private function sortBySelectorPrecedence(array $a, array $b) {
541
+        $precedenceA = $this->getCssSelectorPrecedence($a['selector']);
542
+        $precedenceB = $this->getCssSelectorPrecedence($b['selector']);
543
+
544
+        // We want these sorted in ascending order so selectors with lesser precedence get processed first and
545
+        // selectors with greater precedence get sorted last.
546
+        // The parenthesis around the -1 are necessary to avoid a PHP_CodeSniffer warning about missing spaces around
547
+        // arithmetic operators.
548
+        // @see http://forge.typo3.org/issues/55605
549
+        $precedenceForEquals = ($a['line'] < $b['line'] ? (-1) : 1);
550
+        $precedenceForNotEquals = ($precedenceA < $precedenceB ? (-1) : 1);
551
+        return ($precedenceA === $precedenceB) ? $precedenceForEquals : $precedenceForNotEquals;
552
+    }
553
+
554
+    /**
555
+     * @param string $selector
556
+     *
557
+     * @return integer
558
+     */
559
+    private function getCssSelectorPrecedence($selector) {
560
+        $selectorKey = md5($selector);
561
+        if (!isset($this->caches[self::CACHE_KEY_SELECTOR][$selectorKey])) {
562
+            $precedence = 0;
563
+            $value = 100;
564
+            // ids: worth 100, classes: worth 10, elements: worth 1
565
+            $search = array('\\#','\\.','');
566
+
567
+            foreach ($search as $s) {
568
+                if (trim($selector == '')) {
569
+                    break;
570
+                }
571
+                $number = 0;
572
+                $selector = preg_replace('/' . $s . '\\w+/', '', $selector, -1, $number);
573
+                $precedence += ($value * $number);
574
+                $value /= 10;
575
+            }
576
+            $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey] = $precedence;
577
+        }
578
+
579
+        return $this->caches[self::CACHE_KEY_SELECTOR][$selectorKey];
580
+    }
581
+
582
+    /**
583
+     * Right now, we support all CSS 1 selectors and most CSS2/3 selectors.
584
+     *
585
+     * @see http://plasmasturm.org/log/444/
586
+     *
587
+     * @param string $paramCssSelector
588
+     *
589
+     * @return string
590
+     */
591
+    private function translateCssToXpath($paramCssSelector) {
592
+        $cssSelector = ' ' . $paramCssSelector . ' ';
593
+        $cssSelector = preg_replace_callback( '/\s+\w+\s+/', array( $this, 'strtolower' ), $cssSelector );
594
+        $cssSelector = trim($cssSelector);
595
+        $xpathKey = md5($cssSelector);
596
+        if (!isset($this->caches[self::CACHE_KEY_XPATH][$xpathKey])) {
597
+            // returns an Xpath selector
598
+            $search = array(
599
+                // Matches any element that is a child of parent.
600
+                '/\\s+>\\s+/',
601
+                // Matches any element that is an adjacent sibling.
602
+                '/\\s+\\+\\s+/',
603
+                // Matches any element that is a descendant of an parent element element.
604
+                '/\\s+/',
605
+                // first-child pseudo-selector
606
+                '/([^\\/]+):first-child/i',
607
+                // last-child pseudo-selector
608
+                '/([^\\/]+):last-child/i',
609
+                // Matches attribute only selector
610
+                '/^\\[(\\w+)\\]/',
611
+                // Matches element with attribute
612
+                '/(\\w)\\[(\\w+)\\]/',
613
+                // Matches element with EXACT attribute
614
+                '/(\\w)\\[(\\w+)\\=[\'"]?(\\w+)[\'"]?\\]/',
615
+            );
616
+            $replace = array(
617
+                '/',
618
+                '/following-sibling::*[1]/self::',
619
+                '//',
620
+                '*[1]/self::\\1',
621
+                '*[last()]/self::\\1',
622
+                '*[@\\1]',
623
+                '\\1[@\\2]',
624
+                '\\1[@\\2="\\3"]',
625
+            );
626
+
627
+            $cssSelector = '//' . preg_replace($search, $replace, $cssSelector);
628
+
629
+            $cssSelector = preg_replace_callback(self::ID_ATTRIBUTE_MATCHER, array($this, 'matchIdAttributes'), $cssSelector);
630
+            $cssSelector = preg_replace_callback(self::CLASS_ATTRIBUTE_MATCHER, array($this, 'matchClassAttributes'), $cssSelector);
631
+
632
+            // Advanced selectors are going to require a bit more advanced emogrification.
633
+            // When we required PHP 5.3, we could do this with closures.
634
+            $cssSelector = preg_replace_callback(
635
+                '/([^\\/]+):nth-child\\(\s*(odd|even|[+\-]?\\d|[+\\-]?\\d?n(\\s*[+\\-]\\s*\\d)?)\\s*\\)/i',
636
+                array($this, 'translateNthChild'), $cssSelector
637
+            );
638
+            $cssSelector = preg_replace_callback(
639
+                '/([^\\/]+):nth-of-type\\(\s*(odd|even|[+\-]?\\d|[+\\-]?\\d?n(\\s*[+\\-]\\s*\\d)?)\\s*\\)/i',
640
+                array($this, 'translateNthOfType'), $cssSelector
641
+            );
642
+
643
+            $this->caches[self::CACHE_KEY_SELECTOR][$xpathKey] = $cssSelector;
644
+        }
645
+        return $this->caches[self::CACHE_KEY_SELECTOR][$xpathKey];
646
+    }
647
+
648
+    /**
649
+     * @param array $match
650
+     *
651
+     * @return string
652
+     */
653
+    private function matchIdAttributes(array $match) {
654
+        return (strlen($match[1]) ? $match[1] : '*') . '[@id="' . $match[2] . '"]';
655
+    }
656
+
657
+    /**
658
+     * @param array $match
659
+     *
660
+     * @return string
661
+     */
662
+    private function matchClassAttributes(array $match) {
663
+        return (strlen($match[1]) ? $match[1] : '*') . '[contains(concat(" ",@class," "),concat(" ","' .
664
+            implode(
665
+                '"," "))][contains(concat(" ",@class," "),concat(" ","',
666
+                explode('.', substr($match[2], 1))
667
+            ) . '"," "))]';
668
+    }
669
+
670
+    /**
671
+     * @param array $match
672
+     *
673
+     * @return string
674
+     */
675
+    private function translateNthChild(array $match) {
676
+        $result = $this->parseNth($match);
677
+
678
+        if (isset($result[self::MULTIPLIER])) {
679
+            if ($result[self::MULTIPLIER] < 0) {
680
+                $result[self::MULTIPLIER] = abs($result[self::MULTIPLIER]);
681
+                return sprintf('*[(last() - position()) mod %u = %u]/self::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1]);
682
+            } else {
683
+                return sprintf('*[position() mod %u = %u]/self::%s', $result[self::MULTIPLIER], $result[self::INDEX], $match[1]);
684
+            }
685
+        } else {
686
+            return sprintf('*[%u]/self::%s', $result[self::INDEX], $match[1]);
687
+        }
688
+    }
689
+
690
+    /**
691
+     * @param array $match
692
+     *
693
+     * @return string
694
+     */
695
+    private function translateNthOfType(array $match) {
696
+        $result = $this->parseNth($match);
697
+
698
+        if (isset($result[self::MULTIPLIER])) {
699
+            if ($result[self::MULTIPLIER] < 0) {
700
+                $result[self::MULTIPLIER] = abs($result[self::MULTIPLIER]);
701
+                return sprintf('%s[(last() - position()) mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX]);
702
+            } else {
703
+                return sprintf('%s[position() mod %u = %u]', $match[1], $result[self::MULTIPLIER], $result[self::INDEX]);
704
+            }
705
+        } else {
706
+            return sprintf('%s[%u]', $match[1], $result[self::INDEX]);
707
+        }
708
+    }
709
+
710
+    /**
711
+     * @param array $match
712
+     *
713
+     * @return array
714
+     */
715
+    private function parseNth(array $match) {
716
+        if (in_array(strtolower($match[2]), array('even','odd'))) {
717
+            $index = strtolower($match[2]) == 'even' ? 0 : 1;
718
+            return array(self::MULTIPLIER => 2, self::INDEX => $index);
719
+        } elseif (stripos($match[2], 'n') === false) {
720
+            // if there is a multiplier
721
+            $index = intval(str_replace(' ', '', $match[2]));
722
+            return array(self::INDEX => $index);
723
+        } else {
724
+            if (isset($match[3])) {
725
+                $multipleTerm = str_replace($match[3], '', $match[2]);
726
+                $index = intval(str_replace(' ', '', $match[3]));
727
+            } else {
728
+                $multipleTerm = $match[2];
729
+                $index = 0;
730
+            }
731
+
732
+            $multiplier = str_ireplace('n', '', $multipleTerm);
733
+
734
+            if (!strlen($multiplier)) {
735
+                $multiplier = 1;
736
+            } elseif ($multiplier == 0) {
737
+                return array(self::INDEX => $index);
738
+            } else {
739
+                $multiplier = intval($multiplier);
740
+            }
741
+
742
+            while ($index < 0) {
743
+                $index += abs($multiplier);
744
+            }
745
+
746
+            return array(self::MULTIPLIER => $multiplier, self::INDEX => $index);
747
+        }
748
+    }
749
+
750
+    /**
751
+     * Parses a CSS declaration block into property name/value pairs.
752
+     *
753
+     * Example:
754
+     *
755
+     * The declaration block.
756
+     *
757
+     *   "color: #000; font-weight: bold;".
758
+     *
759
+     * will be parsed into the following array:
760
+     *
761
+     *   "color" => "#000"
762
+     *   "font-weight" => "bold"
763
+     *
764
+     * @param string $cssDeclarationBlock the CSS declaration block without the curly braces, may be empty
765
+     *
766
+     * @return array the CSS declarations with the property names as array keys and the property values as array values
767
+     */
768
+    private function parseCssDeclarationBlock($cssDeclarationBlock) {
769
+        if (isset($this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock])) {
770
+            return $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock];
771
+        }
772
+
773
+        $properties = array();
774
+        $declarations = explode(';', $cssDeclarationBlock);
775
+        foreach ($declarations as $declaration) {
776
+            $matches = array();
777
+            if (!preg_match('/ *([A-Za-z\\-]+) *: *([^;]+) */', $declaration, $matches)) {
778
+                continue;
779
+            }
780
+            $propertyName = strtolower($matches[1]);
781
+            $propertyValue = $matches[2];
782
+            $properties[$propertyName] = $propertyValue;
783
+        }
784
+        $this->caches[self::CACHE_KEY_CSS_DECLARATION_BLOCK][$cssDeclarationBlock] = $properties;
785
+
786
+        return $properties;
787
+    }
788 788
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -238,7 +238,7 @@  discard block
 block discarded – undo
238 238
 		if ($nodesWithStyleAttributes !== false) {
239 239
 			/** @var $nodeWithStyleAttribute DOMNode */
240 240
 			foreach ($nodesWithStyleAttributes as $node) {
241
-				$normalizedOriginalStyle = preg_replace_callback( '/[A-z\\-]+(?=\\:)/S', array( $this, 'strtolower' ), $node->getAttribute('style') );
241
+				$normalizedOriginalStyle = preg_replace_callback('/[A-z\\-]+(?=\\:)/S', array($this, 'strtolower'), $node->getAttribute('style'));
242 242
 
243 243
 				// in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles
244 244
 				$nodePath = $node->getNodePath();
@@ -289,7 +289,7 @@  discard block
 block discarded – undo
289 289
 			}
290 290
 
291 291
 			// now sort the selectors by precedence
292
-			usort($allSelectors, array($this,'sortBySelectorPrecedence'));
292
+			usort($allSelectors, array($this, 'sortBySelectorPrecedence'));
293 293
 
294 294
 			$this->caches[self::CACHE_KEY_CSS][$cssKey] = $allSelectors;
295 295
 		}
@@ -329,7 +329,7 @@  discard block
 block discarded – undo
329 329
 		if ($nodesWithStyleDisplayNone->length > 0) {
330 330
 			/** @var $node \DOMNode */
331 331
 			foreach ($nodesWithStyleDisplayNone as $node) {
332
-				if ($node->parentNode && is_callable(array($node->parentNode,'removeChild'))) {
332
+				if ($node->parentNode && is_callable(array($node->parentNode, 'removeChild'))) {
333 333
 					$node->parentNode->removeChild($node);
334 334
 				}
335 335
 			}
@@ -338,10 +338,10 @@  discard block
 block discarded – undo
338 338
 		$this->copyCssWithMediaToStyleNode($cssParts, $xmlDocument);
339 339
 
340 340
 		if ($this->preserveEncoding) {
341
-			if ( function_exists( 'mb_convert_encoding' ) ) {
342
-				return mb_convert_encoding( $xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES' );
341
+			if (function_exists('mb_convert_encoding')) {
342
+				return mb_convert_encoding($xmlDocument->saveHTML(), self::ENCODING, 'HTML-ENTITIES');
343 343
 			} else {
344
-				return htmlspecialchars_decode( utf8_encode( html_entity_decode( $xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING ) ) );
344
+				return htmlspecialchars_decode(utf8_encode(html_entity_decode($xmlDocument->saveHTML(), ENT_COMPAT, self::ENCODING)));
345 345
 			}
346 346
 		} else {
347 347
 			return $xmlDocument->saveHTML();
@@ -462,7 +462,7 @@  discard block
 block discarded – undo
462 462
 	 * @return array
463 463
 	 */
464 464
 	private function splitCssAndMediaQuery($css) {
465
-		$css = preg_replace_callback( '#@media\\s+(?:only\\s)?(?:[\\s{\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU', array( $this, '_media_concat' ), $css );
465
+		$css = preg_replace_callback('#@media\\s+(?:only\\s)?(?:[\\s{\(]|screen|all)\\s?[^{]+{.*}\\s*}\\s*#misU', array($this, '_media_concat'), $css);
466 466
 
467 467
 		// filter the CSS
468 468
 		$search = array(
@@ -486,7 +486,7 @@  discard block
 block discarded – undo
486 486
 		return array('css' => $css, 'media' => self::$_media);
487 487
 	}
488 488
 
489
-	private function _media_concat( $matches ) {
489
+	private function _media_concat($matches) {
490 490
 		self::$_media .= $matches[0];
491 491
 	}
492 492
 
@@ -524,10 +524,10 @@  discard block
 block discarded – undo
524 524
 			$bodyWithoutUnprocessableTags = $this->html;
525 525
 		}
526 526
 
527
-		if ( function_exists( 'mb_convert_encoding' ) ) {
528
-			return mb_convert_encoding( $bodyWithoutUnprocessableTags, 'HTML-ENTITIES', self::ENCODING );
527
+		if (function_exists('mb_convert_encoding')) {
528
+			return mb_convert_encoding($bodyWithoutUnprocessableTags, 'HTML-ENTITIES', self::ENCODING);
529 529
 		} else {
530
-			return htmlspecialchars_decode( utf8_decode( htmlentities( $bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false ) ) );
530
+			return htmlspecialchars_decode(utf8_decode(htmlentities($bodyWithoutUnprocessableTags, ENT_COMPAT, self::ENCODING, false)));
531 531
 		}
532 532
 	}
533 533
 
@@ -562,7 +562,7 @@  discard block
 block discarded – undo
562 562
 			$precedence = 0;
563 563
 			$value = 100;
564 564
 			// ids: worth 100, classes: worth 10, elements: worth 1
565
-			$search = array('\\#','\\.','');
565
+			$search = array('\\#', '\\.', '');
566 566
 
567 567
 			foreach ($search as $s) {
568 568
 				if (trim($selector == '')) {
@@ -590,7 +590,7 @@  discard block
 block discarded – undo
590 590
 	 */
591 591
 	private function translateCssToXpath($paramCssSelector) {
592 592
 		$cssSelector = ' ' . $paramCssSelector . ' ';
593
-		$cssSelector = preg_replace_callback( '/\s+\w+\s+/', array( $this, 'strtolower' ), $cssSelector );
593
+		$cssSelector = preg_replace_callback('/\s+\w+\s+/', array($this, 'strtolower'), $cssSelector);
594 594
 		$cssSelector = trim($cssSelector);
595 595
 		$xpathKey = md5($cssSelector);
596 596
 		if (!isset($this->caches[self::CACHE_KEY_XPATH][$xpathKey])) {
@@ -713,7 +713,7 @@  discard block
 block discarded – undo
713 713
 	 * @return array
714 714
 	 */
715 715
 	private function parseNth(array $match) {
716
-		if (in_array(strtolower($match[2]), array('even','odd'))) {
716
+		if (in_array(strtolower($match[2]), array('even', 'odd'))) {
717 717
 			$index = strtolower($match[2]) == 'even' ? 0 : 1;
718 718
 			return array(self::MULTIPLIER => 2, self::INDEX => $index);
719 719
 		} elseif (stripos($match[2], 'n') === false) {
Please login to merge, or discard this patch.
includes/gateways/worldpay.php 2 patches
Braces   +3 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,6 +1,8 @@
 block discarded – undo
1 1
 <?php
2 2
 // Exit if accessed directly
3
-if ( ! defined( 'ABSPATH' ) ) exit;
3
+if ( ! defined( 'ABSPATH' ) ) {
4
+    exit;
5
+}
4 6
 
5 7
 add_action( 'wpinv_worldpay_cc_form', '__return_false' );
6 8
 
Please login to merge, or discard this patch.
Spacing   +65 added lines, -65 removed lines patch added patch discarded remove patch
@@ -1,12 +1,12 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 // Exit if accessed directly
3
-if ( ! defined( 'ABSPATH' ) ) exit;
3
+if (!defined('ABSPATH')) exit;
4 4
 
5
-add_action( 'wpinv_worldpay_cc_form', '__return_false' );
5
+add_action('wpinv_worldpay_cc_form', '__return_false');
6 6
 
7
-function wpinv_process_worldpay_payment( $purchase_data ) {
8
-    if( ! wp_verify_nonce( $purchase_data['gateway_nonce'], 'wpi-gateway' ) ) {
9
-        wp_die( __( 'Nonce verification has failed', 'invoicing' ), __( 'Error', 'invoicing' ), array( 'response' => 403 ) );
7
+function wpinv_process_worldpay_payment($purchase_data) {
8
+    if (!wp_verify_nonce($purchase_data['gateway_nonce'], 'wpi-gateway')) {
9
+        wp_die(__('Nonce verification has failed', 'invoicing'), __('Error', 'invoicing'), array('response' => 403));
10 10
     }
11 11
     
12 12
     // Collect payment data
@@ -24,132 +24,132 @@  discard block
 block discarded – undo
24 24
     );
25 25
 
26 26
     // Record the pending payment
27
-    $invoice = wpinv_get_invoice( $purchase_data['invoice_id'] );
27
+    $invoice = wpinv_get_invoice($purchase_data['invoice_id']);
28 28
     
29
-    if ( !empty( $invoice ) ) {
29
+    if (!empty($invoice)) {
30 30
         $quantities_enabled = wpinv_item_quantities_enabled();
31 31
         
32
-        $instId     = wpinv_get_option( 'worldpay_instId', false );
32
+        $instId     = wpinv_get_option('worldpay_instId', false);
33 33
         $cartId     = $invoice->get_number();
34
-        $testMode   = wpinv_is_test_mode( 'worldpay' ) ? 100 : 0;
34
+        $testMode   = wpinv_is_test_mode('worldpay') ? 100 : 0;
35 35
         $name       = $invoice->get_user_full_name();
36
-        $address    = wp_strip_all_tags( $invoice->get_address(), true );
36
+        $address    = wp_strip_all_tags($invoice->get_address(), true);
37 37
         $postcode   = $invoice->zip;
38 38
         $tel        = $invoice->phone;
39 39
         $email      = $invoice->get_email();
40 40
         $country    = $invoice->country;
41
-        $amount     = wpinv_sanitize_amount( $invoice->get_total() );
41
+        $amount     = wpinv_sanitize_amount($invoice->get_total());
42 42
         $currency   = wpinv_get_currency();
43 43
         
44 44
         $items      = array();
45
-        foreach ( $invoice->get_cart_details() as $item ) {
45
+        foreach ($invoice->get_cart_details() as $item) {
46 46
             $item_desc  = $item['name'];
47
-            $quantity   = !empty( $item['quantity'] ) && $item['quantity'] > 0 ? $item['quantity'] : 1;
48
-            $item_desc .= ' (' . ( $quantities_enabled ? $quantity . 'x ' : '' ) . wpinv_price( wpinv_format_amount( $item['item_price'] ) ) . ')';
47
+            $quantity   = !empty($item['quantity']) && $item['quantity'] > 0 ? $item['quantity'] : 1;
48
+            $item_desc .= ' (' . ($quantities_enabled ? $quantity . 'x ' : '') . wpinv_price(wpinv_format_amount($item['item_price'])) . ')';
49 49
             
50 50
             $items[] = $item_desc;
51 51
         }
52 52
         
53
-        $desc = implode( ', ', $items );
54
-        if ( wpinv_use_taxes() && $invoice->get_tax() > 0 ) {
55
-            $desc .= ', ' . wp_sprintf( __( 'Tax: %s', 'invoicing' ), $invoice->get_tax( true ) );
53
+        $desc = implode(', ', $items);
54
+        if (wpinv_use_taxes() && $invoice->get_tax() > 0) {
55
+            $desc .= ', ' . wp_sprintf(__('Tax: %s', 'invoicing'), $invoice->get_tax(true));
56 56
         }
57 57
         
58 58
         $extra_params                   = array();
59 59
         $extra_params['MC_description'] = $desc;
60
-        $extra_params['MC_callback']    = wpinv_get_ipn_url( 'worldpay' );
60
+        $extra_params['MC_callback']    = wpinv_get_ipn_url('worldpay');
61 61
         $extra_params['MC_key']         = $invoice->get_key();
62 62
         $extra_params['MC_invoice_id']  = $invoice->ID;
63 63
         $extra_params['address1']       = $address;
64 64
         $extra_params['town']           = $invoice->city;
65 65
         $extra_params['region']         = $invoice->state;
66
-        $extra_params['amountString']   = $invoice->get_total( true );
67
-        $extra_params['countryString']  = wpinv_country_name( $invoice->country );
66
+        $extra_params['amountString']   = $invoice->get_total(true);
67
+        $extra_params['countryString']  = wpinv_country_name($invoice->country);
68 68
         $extra_params['compName']       = $invoice->company;
69 69
         
70
-        $extra_params   = apply_filters( 'wpinv_worldpay_form_extra_parameters', $extra_params, $invoice );
70
+        $extra_params   = apply_filters('wpinv_worldpay_form_extra_parameters', $extra_params, $invoice);
71 71
         
72
-        $redirect_text  = __( 'Redirecting to Worldpay site, click on button if not redirected.', 'invoicing' );
73
-        $redirect_text  = apply_filters( 'wpinv_worldpay_redirect_text', $redirect_text, $invoice );
72
+        $redirect_text  = __('Redirecting to Worldpay site, click on button if not redirected.', 'invoicing');
73
+        $redirect_text  = apply_filters('wpinv_worldpay_redirect_text', $redirect_text, $invoice);
74 74
         
75 75
         // Empty the shopping cart
76 76
         wpinv_empty_cart();
77 77
         ?>
78 78
 <div class="wpi-worldpay-form" style="padding:20px;font-family:arial,sans-serif;text-align:center;color:#555">
79
-<?php do_action( 'wpinv_worldpay_form_before', $invoice ); ?>
80
-<h3><?php echo $redirect_text ;?></h3>
79
+<?php do_action('wpinv_worldpay_form_before', $invoice); ?>
80
+<h3><?php echo $redirect_text; ?></h3>
81 81
 <form action="<?php echo wpinv_get_worldpay_redirect(); ?>" name="wpi_worldpay_form" method="POST">
82
-    <input type="hidden" value="<?php echo $amount;?>" name="amount">
83
-    <input type="hidden" value="<?php echo esc_attr( $cartId );?>" name="cartId">
84
-    <input type="hidden" value="<?php echo $currency;?>" name="currency">
85
-    <input type="hidden" value="<?php echo $instId;?>" name="instId">
86
-    <input type="hidden" value="<?php echo $testMode;?>" name="testMode">
87
-    <input type="hidden" value="<?php echo esc_attr( $name );?>" name="name">
88
-    <input type="hidden" value="<?php echo esc_attr( $address );?>" name="address">
89
-    <input type="hidden" value="<?php echo esc_attr( $postcode );?>" name="postcode">
90
-    <input type="hidden" value="<?php echo esc_attr( $tel );?>" name="tel">
91
-    <input type="hidden" value="<?php echo esc_attr( $email );?>" name="email">
92
-    <input type="hidden" value="<?php echo esc_attr( $country );?>" name="country">
93
-    <input type="hidden" value="<?php echo esc_attr( $desc );?>" name="desc">
94
-    <?php foreach ( $extra_params as $param => $value ) { ?>
95
-        <?php if ( !empty( $value !== false ) ) { ?>
96
-    <input type="hidden" value="<?php echo esc_attr( $value );?>" name="<?php echo esc_attr( $param );?>">
82
+    <input type="hidden" value="<?php echo $amount; ?>" name="amount">
83
+    <input type="hidden" value="<?php echo esc_attr($cartId); ?>" name="cartId">
84
+    <input type="hidden" value="<?php echo $currency; ?>" name="currency">
85
+    <input type="hidden" value="<?php echo $instId; ?>" name="instId">
86
+    <input type="hidden" value="<?php echo $testMode; ?>" name="testMode">
87
+    <input type="hidden" value="<?php echo esc_attr($name); ?>" name="name">
88
+    <input type="hidden" value="<?php echo esc_attr($address); ?>" name="address">
89
+    <input type="hidden" value="<?php echo esc_attr($postcode); ?>" name="postcode">
90
+    <input type="hidden" value="<?php echo esc_attr($tel); ?>" name="tel">
91
+    <input type="hidden" value="<?php echo esc_attr($email); ?>" name="email">
92
+    <input type="hidden" value="<?php echo esc_attr($country); ?>" name="country">
93
+    <input type="hidden" value="<?php echo esc_attr($desc); ?>" name="desc">
94
+    <?php foreach ($extra_params as $param => $value) { ?>
95
+        <?php if (!empty($value !== false)) { ?>
96
+    <input type="hidden" value="<?php echo esc_attr($value); ?>" name="<?php echo esc_attr($param); ?>">
97 97
         <?php } ?>
98 98
     <?php } ?>
99
-    <?php do_action( 'wpinv_worldpay_form_parameters', $invoice ); ?>
100
-    <input type="submit" name="wpi_worldpay_submit" value="<?php esc_attr_e( 'Pay by Credit Card / Debit Card (WorldPay)', 'invoicing' ) ;?>">
99
+    <?php do_action('wpinv_worldpay_form_parameters', $invoice); ?>
100
+    <input type="submit" name="wpi_worldpay_submit" value="<?php esc_attr_e('Pay by Credit Card / Debit Card (WorldPay)', 'invoicing'); ?>">
101 101
 </form>
102 102
 <script type="text/javascript">document.wpi_worldpay_form.submit();</script>
103
-<?php do_action( 'wpinv_worldpay_form_after', $invoice ); ?>
103
+<?php do_action('wpinv_worldpay_form_after', $invoice); ?>
104 104
 </div>
105 105
         <?php
106 106
     } else {
107
-        wpinv_record_gateway_error( __( 'Payment Error', 'invoicing' ), sprintf( __( 'Payment creation failed while processing a worldpay payment. Payment data: %s', 'invoicing' ), json_encode( $payment_data ) ), $invoice );
107
+        wpinv_record_gateway_error(__('Payment Error', 'invoicing'), sprintf(__('Payment creation failed while processing a worldpay payment. Payment data: %s', 'invoicing'), json_encode($payment_data)), $invoice);
108 108
         // If errors are present, send the user back to the purchase page so they can be corrected
109
-        wpinv_send_back_to_checkout( '?payment-mode=' . $purchase_data['post_data']['wpi-gateway'] );
109
+        wpinv_send_back_to_checkout('?payment-mode=' . $purchase_data['post_data']['wpi-gateway']);
110 110
     }
111 111
 }
112
-add_action( 'wpinv_gateway_worldpay', 'wpinv_process_worldpay_payment' );
112
+add_action('wpinv_gateway_worldpay', 'wpinv_process_worldpay_payment');
113 113
 
114 114
 function wpinv_get_worldpay_redirect() {
115
-    $redirect = wpinv_is_test_mode( 'worldpay' ) ? 'https://secure-test.worldpay.com/wcc/purchase' : 'https://secure.worldpay.com/wcc/purchase';
115
+    $redirect = wpinv_is_test_mode('worldpay') ? 'https://secure-test.worldpay.com/wcc/purchase' : 'https://secure.worldpay.com/wcc/purchase';
116 116
     
117
-    return apply_filters( 'wpinv_worldpay_redirect', $redirect );
117
+    return apply_filters('wpinv_worldpay_redirect', $redirect);
118 118
 }
119 119
 
120 120
 function wpinv_process_worldpay_ipn() {
121
-    $request = wpinv_get_post_data( 'post' );
121
+    $request = wpinv_get_post_data('post');
122 122
     
123
-    if ( !empty( $request['cartId'] ) && !empty( $request['transStatus'] ) && !empty( $request['installation'] ) && isset( $request['testMode'] ) && isset( $request['MC_invoice_id'] ) && isset( $request['MC_key'] ) ) {
123
+    if (!empty($request['cartId']) && !empty($request['transStatus']) && !empty($request['installation']) && isset($request['testMode']) && isset($request['MC_invoice_id']) && isset($request['MC_key'])) {
124 124
         $invoice_id = $request['MC_invoice_id'];
125 125
         
126
-        if ( $invoice_id == wpinv_get_invoice_id_by_key( $request['MC_key'] ) && $invoice = wpinv_get_invoice( $invoice_id ) ) {
127
-            if ( $request['transStatus'] == 'Y' ) {                
128
-                wpinv_update_payment_status( $invoice_id, 'publish' );
129
-                wpinv_set_payment_transaction_id( $invoice_id, $request['transId'] );
130
-                wpinv_insert_payment_note( $invoice_id, sprintf( __( 'Worldpay Transaction ID: %s', 'invoicing' ), $request['transId'] ) );
126
+        if ($invoice_id == wpinv_get_invoice_id_by_key($request['MC_key']) && $invoice = wpinv_get_invoice($invoice_id)) {
127
+            if ($request['transStatus'] == 'Y') {                
128
+                wpinv_update_payment_status($invoice_id, 'publish');
129
+                wpinv_set_payment_transaction_id($invoice_id, $request['transId']);
130
+                wpinv_insert_payment_note($invoice_id, sprintf(__('Worldpay Transaction ID: %s', 'invoicing'), $request['transId']));
131 131
                 return;
132
-            } else if ( $request['transStatus'] == 'C' ) {
133
-                wpinv_update_payment_status( $invoice_id, 'wpi-failed' );
134
-                wpinv_insert_payment_note( $invoice_id, __( 'Payment transaction failed while processing Worldpay payment, kindly check IPN log.', 'invoicing' ) );
132
+            } else if ($request['transStatus'] == 'C') {
133
+                wpinv_update_payment_status($invoice_id, 'wpi-failed');
134
+                wpinv_insert_payment_note($invoice_id, __('Payment transaction failed while processing Worldpay payment, kindly check IPN log.', 'invoicing'));
135 135
                 
136
-                wpinv_record_gateway_error( __( 'IPN Error', 'invoicing' ), sprintf( __( 'Payment transaction failed while processing Worldpay payment. IPN data: %s', 'invoicing' ), json_encode( $request ) ), $invoice_id );
136
+                wpinv_record_gateway_error(__('IPN Error', 'invoicing'), sprintf(__('Payment transaction failed while processing Worldpay payment. IPN data: %s', 'invoicing'), json_encode($request)), $invoice_id);
137 137
                 return;
138 138
             }
139 139
         }
140 140
     }
141 141
     return;
142 142
 }
143
-add_action( 'wpinv_verify_worldpay_ipn', 'wpinv_process_worldpay_ipn' );
143
+add_action('wpinv_verify_worldpay_ipn', 'wpinv_process_worldpay_ipn');
144 144
 
145 145
 function wpinv_is_worldpay_valid_for_use() {
146
-    return in_array( wpinv_get_currency(), apply_filters( 'wpinv_worldpay_supported_currencies', array( 'AUD', 'ARS', 'CAD', 'CHF', 'DKK', 'EUR', 'HKD', 'MYR', 'GBP', 'NZD', 'NOK', 'SGD', 'LKR', 'SEK', 'TRY', 'USD', 'ZAR' )));
146
+    return in_array(wpinv_get_currency(), apply_filters('wpinv_worldpay_supported_currencies', array('AUD', 'ARS', 'CAD', 'CHF', 'DKK', 'EUR', 'HKD', 'MYR', 'GBP', 'NZD', 'NOK', 'SGD', 'LKR', 'SEK', 'TRY', 'USD', 'ZAR')));
147 147
 }
148 148
 
149
-function wpinv_check_worldpay_currency_support( $gateway_list ) {
150
-    if ( isset( $gateway_list['worldpay'] ) && ! wpinv_is_worldpay_valid_for_use() ) {
151
-        unset( $gateway_list['worldpay'] );
149
+function wpinv_check_worldpay_currency_support($gateway_list) {
150
+    if (isset($gateway_list['worldpay']) && !wpinv_is_worldpay_valid_for_use()) {
151
+        unset($gateway_list['worldpay']);
152 152
     }
153 153
     return $gateway_list;
154 154
 }
155
-add_filter( 'wpinv_enabled_payment_gateways', 'wpinv_check_worldpay_currency_support', 10, 1 );
156 155
\ No newline at end of file
156
+add_filter('wpinv_enabled_payment_gateways', 'wpinv_check_worldpay_currency_support', 10, 1);
157 157
\ No newline at end of file
Please login to merge, or discard this patch.