@@ -13,9 +13,9 @@ |
||
13 | 13 | ) ); |
14 | 14 | echo '<div class="' . implode( ' ', $classes ) . '">'; |
15 | 15 | // Loop error codes and display errors |
16 | - foreach ( $errors as $error_id => $error ) { |
|
16 | + foreach ( $errors as $error_id => $error ) { |
|
17 | 17 | echo '<p class="wpinv_error" id="wpinv_error_' . $error_id . '"><strong>' . __( 'Error', 'invoicing' ) . '</strong>: ' . $error . '</p>'; |
18 | - } |
|
18 | + } |
|
19 | 19 | echo '</div>'; |
20 | 20 | wpinv_clear_errors(); |
21 | 21 | } |
@@ -1,61 +1,61 @@ discard block |
||
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 | function wpinv_print_errors() { |
8 | 8 | $errors = wpinv_get_errors(); |
9 | 9 | |
10 | - if ( $errors ) { |
|
11 | - $classes = apply_filters( 'wpinv_error_class', array( |
|
10 | + if ($errors) { |
|
11 | + $classes = apply_filters('wpinv_error_class', array( |
|
12 | 12 | 'wpinv_errors', 'wpinv-alert', 'wpinv-alert-error' |
13 | - ) ); |
|
14 | - echo '<div class="' . implode( ' ', $classes ) . '">'; |
|
13 | + )); |
|
14 | + echo '<div class="' . implode(' ', $classes) . '">'; |
|
15 | 15 | // Loop error codes and display errors |
16 | - foreach ( $errors as $error_id => $error ) { |
|
17 | - echo '<p class="wpinv_error" id="wpinv_error_' . $error_id . '"><strong>' . __( 'Error', 'invoicing' ) . '</strong>: ' . $error . '</p>'; |
|
16 | + foreach ($errors as $error_id => $error) { |
|
17 | + echo '<p class="wpinv_error" id="wpinv_error_' . $error_id . '"><strong>' . __('Error', 'invoicing') . '</strong>: ' . $error . '</p>'; |
|
18 | 18 | } |
19 | 19 | echo '</div>'; |
20 | 20 | wpinv_clear_errors(); |
21 | 21 | } |
22 | 22 | } |
23 | -add_action( 'wpinv_purchase_form_before_submit', 'wpinv_print_errors' ); |
|
24 | -add_action( 'wpinv_ajax_checkout_errors', 'wpinv_print_errors' ); |
|
23 | +add_action('wpinv_purchase_form_before_submit', 'wpinv_print_errors'); |
|
24 | +add_action('wpinv_ajax_checkout_errors', 'wpinv_print_errors'); |
|
25 | 25 | |
26 | 26 | function wpinv_get_errors() { |
27 | 27 | global $wpi_session; |
28 | 28 | |
29 | - return $wpi_session->get( 'wpinv_errors' ); |
|
29 | + return $wpi_session->get('wpinv_errors'); |
|
30 | 30 | } |
31 | 31 | |
32 | -function wpinv_set_error( $error_id, $error_message ) { |
|
32 | +function wpinv_set_error($error_id, $error_message) { |
|
33 | 33 | global $wpi_session; |
34 | 34 | |
35 | 35 | $errors = wpinv_get_errors(); |
36 | 36 | |
37 | - if ( ! $errors ) { |
|
37 | + if (!$errors) { |
|
38 | 38 | $errors = array(); |
39 | 39 | } |
40 | 40 | |
41 | - $errors[ $error_id ] = $error_message; |
|
42 | - $wpi_session->set( 'wpinv_errors', $errors ); |
|
41 | + $errors[$error_id] = $error_message; |
|
42 | + $wpi_session->set('wpinv_errors', $errors); |
|
43 | 43 | } |
44 | 44 | |
45 | 45 | function wpinv_clear_errors() { |
46 | 46 | global $wpi_session; |
47 | 47 | |
48 | - $wpi_session->set( 'wpinv_errors', null ); |
|
48 | + $wpi_session->set('wpinv_errors', null); |
|
49 | 49 | } |
50 | 50 | |
51 | -function wpinv_unset_error( $error_id ) { |
|
51 | +function wpinv_unset_error($error_id) { |
|
52 | 52 | global $wpi_session; |
53 | 53 | |
54 | 54 | $errors = wpinv_get_errors(); |
55 | 55 | |
56 | - if ( $errors ) { |
|
57 | - unset( $errors[ $error_id ] ); |
|
58 | - $wpi_session->set( 'wpinv_errors', $errors ); |
|
56 | + if ($errors) { |
|
57 | + unset($errors[$error_id]); |
|
58 | + $wpi_session->set('wpinv_errors', $errors); |
|
59 | 59 | } |
60 | 60 | } |
61 | 61 | |
@@ -63,8 +63,8 @@ discard block |
||
63 | 63 | die(); |
64 | 64 | } |
65 | 65 | |
66 | -function wpinv_die( $message = '', $title = '', $status = 400 ) { |
|
67 | - add_filter( 'wp_die_ajax_handler', 'wpinv_die_handler', 10, 3 ); |
|
68 | - add_filter( 'wp_die_handler', 'wpinv_die_handler', 10, 3 ); |
|
69 | - wp_die( $message, $title, array( 'response' => $status )); |
|
66 | +function wpinv_die($message = '', $title = '', $status = 400) { |
|
67 | + add_filter('wp_die_ajax_handler', 'wpinv_die_handler', 10, 3); |
|
68 | + add_filter('wp_die_handler', 'wpinv_die_handler', 10, 3); |
|
69 | + wp_die($message, $title, array('response' => $status)); |
|
70 | 70 | } |
@@ -286,26 +286,26 @@ discard block |
||
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 |
||
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 |
||
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 ) { |
@@ -310,7 +310,7 @@ discard block |
||
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 |
||
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 |
@@ -7,206 +7,206 @@ discard block |
||
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' => __( 'Test Payment', 'invoicing' ), |
|
39 | - 'checkout_label' => __( 'Test Payment', 'invoicing' ), |
|
38 | + 'admin_label' => __('Test Payment', 'invoicing'), |
|
39 | + 'checkout_label' => __('Test 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( wpinv_get_payment_amount( $payment ) == 0 ) { |
|
129 | - $label = __( 'Manual Payment', 'invoicing' ); |
|
127 | + if ($gateway == 'manual' && $payment) { |
|
128 | + if (wpinv_get_payment_amount($payment) == 0) { |
|
129 | + $label = __('Manual Payment', '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 = isset( $wpinv_options[$gateway . '_desc'] ) ? $wpinv_options[$gateway . '_desc'] : ''; |
|
139 | + $description = isset($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 |
||
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 |
||
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 |
||
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,26 +383,26 @@ discard block |
||
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_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_desc']['std'] = __('Pay via PayPal: you can pay with your credit card if you don\'t have a PayPal account.', 'invoicing'); |
|
391 | 391 | |
392 | 392 | $setting['paypal_sandbox'] = array( |
393 | 393 | 'type' => 'checkbox', |
394 | 394 | 'id' => 'paypal_sandbox', |
395 | - 'name' => __( 'PayPal Sandbox', 'invoicing' ), |
|
396 | - 'desc' => __( 'PayPal sandbox can be used to test payments.', 'invoicing' ), |
|
395 | + 'name' => __('PayPal Sandbox', 'invoicing'), |
|
396 | + 'desc' => __('PayPal sandbox can be used to test payments.', 'invoicing'), |
|
397 | 397 | 'std' => 1 |
398 | 398 | ); |
399 | 399 | |
400 | 400 | $setting['paypal_email'] = array( |
401 | 401 | 'type' => 'text', |
402 | 402 | 'id' => 'paypal_email', |
403 | - 'name' => __( 'PayPal Email', 'invoicing' ), |
|
404 | - 'desc' => __( 'Please enter your PayPal account\'s email address. Ex: [email protected]', 'invoicing' ), |
|
405 | - 'std' => __( '[email protected]', 'invoicing' ), |
|
403 | + 'name' => __('PayPal Email', 'invoicing'), |
|
404 | + 'desc' => __('Please enter your PayPal account\'s email address. Ex: [email protected]', 'invoicing'), |
|
405 | + 'std' => __('[email protected]', 'invoicing'), |
|
406 | 406 | ); |
407 | 407 | /* |
408 | 408 | $setting['paypal_ipn_url'] = array( |
@@ -416,116 +416,116 @@ discard block |
||
416 | 416 | |
417 | 417 | return $setting; |
418 | 418 | } |
419 | -add_filter( 'wpinv_gateway_settings_paypal', 'wpinv_gateway_settings_paypal', 10, 1 ); |
|
419 | +add_filter('wpinv_gateway_settings_paypal', 'wpinv_gateway_settings_paypal', 10, 1); |
|
420 | 420 | |
421 | 421 | // Pre Bank Transfer settings |
422 | -function wpinv_gateway_settings_bank_transfer( $setting ) { |
|
423 | - $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' ); |
|
422 | +function wpinv_gateway_settings_bank_transfer($setting) { |
|
423 | + $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'); |
|
424 | 424 | |
425 | 425 | $setting['bank_transfer_ac_name'] = array( |
426 | 426 | 'type' => 'text', |
427 | 427 | 'id' => 'bank_transfer_ac_name', |
428 | - 'name' => __( 'Account Name', 'invoicing' ), |
|
429 | - 'desc' => __( 'Enter the bank account name to which you want to transfer payment.', 'invoicing' ), |
|
430 | - 'std' => __( 'Mr. John Martin', 'invoicing' ), |
|
428 | + 'name' => __('Account Name', 'invoicing'), |
|
429 | + 'desc' => __('Enter the bank account name to which you want to transfer payment.', 'invoicing'), |
|
430 | + 'std' => __('Mr. John Martin', 'invoicing'), |
|
431 | 431 | ); |
432 | 432 | |
433 | 433 | $setting['bank_transfer_ac_no'] = array( |
434 | 434 | 'type' => 'text', |
435 | 435 | 'id' => 'bank_transfer_ac_no', |
436 | - 'name' => __( 'Account Number', 'invoicing' ), |
|
437 | - 'desc' => __( 'Enter your bank account number.', 'invoicing' ), |
|
438 | - 'std' => __( 'TEST1234567890', 'invoicing' ), |
|
436 | + 'name' => __('Account Number', 'invoicing'), |
|
437 | + 'desc' => __('Enter your bank account number.', 'invoicing'), |
|
438 | + 'std' => __('TEST1234567890', 'invoicing'), |
|
439 | 439 | ); |
440 | 440 | |
441 | 441 | $setting['bank_transfer_bank_name'] = array( |
442 | 442 | 'type' => 'text', |
443 | 443 | 'id' => 'bank_transfer_bank_name', |
444 | - 'name' => __( 'Bank Name', 'invoicing' ), |
|
445 | - 'desc' => __( 'Enter the bank name to which you want to transfer payment.', 'invoicing' ), |
|
446 | - 'std' => __( 'ICICI Bank', 'invoicing' ), |
|
444 | + 'name' => __('Bank Name', 'invoicing'), |
|
445 | + 'desc' => __('Enter the bank name to which you want to transfer payment.', 'invoicing'), |
|
446 | + 'std' => __('ICICI Bank', 'invoicing'), |
|
447 | 447 | ); |
448 | 448 | |
449 | 449 | $setting['bank_transfer_ifsc'] = array( |
450 | 450 | 'type' => 'text', |
451 | 451 | 'id' => 'bank_transfer_ifsc', |
452 | - 'name' => __( 'IFSC code', 'invoicing' ), |
|
453 | - 'desc' => __( 'Enter your bank IFSC code.', 'invoicing' ), |
|
454 | - 'std' => __( 'ICIC0001234', 'invoicing' ), |
|
452 | + 'name' => __('IFSC code', 'invoicing'), |
|
453 | + 'desc' => __('Enter your bank IFSC code.', 'invoicing'), |
|
454 | + 'std' => __('ICIC0001234', 'invoicing'), |
|
455 | 455 | ); |
456 | 456 | |
457 | 457 | $setting['bank_transfer_iban'] = array( |
458 | 458 | 'type' => 'text', |
459 | 459 | 'id' => 'bank_transfer_iban', |
460 | - 'name' => __( 'IBAN', 'invoicing' ), |
|
461 | - 'desc' => __( 'Enter your International Bank Account Number(IBAN).', 'invoicing' ), |
|
462 | - 'std' => __( 'GB29NWBK60161331926819', 'invoicing' ), |
|
460 | + 'name' => __('IBAN', 'invoicing'), |
|
461 | + 'desc' => __('Enter your International Bank Account Number(IBAN).', 'invoicing'), |
|
462 | + 'std' => __('GB29NWBK60161331926819', 'invoicing'), |
|
463 | 463 | ); |
464 | 464 | |
465 | 465 | $setting['bank_transfer_bic'] = array( |
466 | 466 | 'type' => 'text', |
467 | 467 | 'id' => 'bank_transfer_bic', |
468 | - 'name' => __( 'BIC/Swift code', 'invoicing' ), |
|
469 | - 'std' => __( 'ICICGB2L129', 'invoicing' ), |
|
468 | + 'name' => __('BIC/Swift code', 'invoicing'), |
|
469 | + 'std' => __('ICICGB2L129', 'invoicing'), |
|
470 | 470 | ); |
471 | 471 | |
472 | 472 | $setting['bank_transfer_info'] = array( |
473 | 473 | 'id' => 'bank_transfer_info', |
474 | - 'name' => __( 'Instructions', 'invoicing' ), |
|
475 | - 'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ), |
|
474 | + 'name' => __('Instructions', 'invoicing'), |
|
475 | + 'desc' => __('Instructions that will be added to the thank you page and emails.', 'invoicing'), |
|
476 | 476 | 'type' => 'textarea', |
477 | - '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' ), |
|
477 | + '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'), |
|
478 | 478 | 'cols' => 37, |
479 | 479 | 'rows' => 5 |
480 | 480 | ); |
481 | 481 | |
482 | 482 | return $setting; |
483 | 483 | } |
484 | -add_filter( 'wpinv_gateway_settings_bank_transfer', 'wpinv_gateway_settings_bank_transfer', 10, 1 ); |
|
484 | +add_filter('wpinv_gateway_settings_bank_transfer', 'wpinv_gateway_settings_bank_transfer', 10, 1); |
|
485 | 485 | |
486 | 486 | // Authorize.Net settings |
487 | -function wpinv_gateway_settings_authorizenet( $setting ) { |
|
488 | - $setting['authorizenet_active']['desc'] = $setting['authorizenet_active']['desc'] . ' ' . __( '( currencies supported: AUD, CAD, CHF, DKK, EUR, GBP, JPY, NOK, NZD, PLN, SEK, USD, ZAR )', 'invoicing' ); |
|
489 | - $setting['authorizenet_desc']['std'] = __( 'Pay using a Authorize.Net to process credit card / debit card transactions.', 'invoicing' ); |
|
487 | +function wpinv_gateway_settings_authorizenet($setting) { |
|
488 | + $setting['authorizenet_active']['desc'] = $setting['authorizenet_active']['desc'] . ' ' . __('( currencies supported: AUD, CAD, CHF, DKK, EUR, GBP, JPY, NOK, NZD, PLN, SEK, USD, ZAR )', 'invoicing'); |
|
489 | + $setting['authorizenet_desc']['std'] = __('Pay using a Authorize.Net to process credit card / debit card transactions.', 'invoicing'); |
|
490 | 490 | |
491 | 491 | $setting['authorizenet_sandbox'] = array( |
492 | 492 | 'type' => 'checkbox', |
493 | 493 | 'id' => 'authorizenet_sandbox', |
494 | - 'name' => __( 'Authorize.Net Test Mode', 'invoicing' ), |
|
495 | - 'desc' => __( 'Enable Authorize.Net test mode to test payments.', 'invoicing' ), |
|
494 | + 'name' => __('Authorize.Net Test Mode', 'invoicing'), |
|
495 | + 'desc' => __('Enable Authorize.Net test mode to test payments.', 'invoicing'), |
|
496 | 496 | 'std' => 1 |
497 | 497 | ); |
498 | 498 | |
499 | 499 | $setting['authorizenet_login_id'] = array( |
500 | 500 | 'type' => 'text', |
501 | 501 | 'id' => 'authorizenet_login_id', |
502 | - 'name' => __( 'API Login ID', 'invoicing' ), |
|
503 | - 'desc' => __( 'API Login ID can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 2j4rBekUnD', 'invoicing' ), |
|
502 | + 'name' => __('API Login ID', 'invoicing'), |
|
503 | + 'desc' => __('API Login ID can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 2j4rBekUnD', 'invoicing'), |
|
504 | 504 | 'std' => '2j4rBekUnD', |
505 | 505 | ); |
506 | 506 | |
507 | 507 | $setting['authorizenet_transaction_key'] = array( |
508 | 508 | 'type' => 'text', |
509 | 509 | 'id' => 'authorizenet_transaction_key', |
510 | - 'name' => __( 'Transaction Key', 'invoicing' ), |
|
511 | - 'desc' => __( 'Transaction Key can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 4vyBUOJgR74679xa', 'invoicing' ), |
|
510 | + 'name' => __('Transaction Key', 'invoicing'), |
|
511 | + 'desc' => __('Transaction Key can be obtained from Authorize.Net Account > Settings > Security Settings > General Security Settings > API Credentials & Keys. Example : 4vyBUOJgR74679xa', 'invoicing'), |
|
512 | 512 | 'std' => '4vyBUOJgR74679xa', |
513 | 513 | ); |
514 | 514 | |
515 | 515 | $setting['authorizenet_md5_hash'] = array( |
516 | 516 | 'type' => 'text', |
517 | 517 | 'id' => 'authorizenet_md5_hash', |
518 | - 'name' => __( 'MD5-Hash', 'invoicing' ), |
|
519 | - 'desc' => __( 'The MD5 Hash security feature allows you to authenticate transaction responses from the Authorize.Net. If you are accepting recurring payments then md5 hash will helps to validate response from Authorize.net. It can be obtained from Authorize.Net Account > Settings > Security Settings > General Settings > MD5 Hash.', 'invoicing' ), |
|
518 | + 'name' => __('MD5-Hash', 'invoicing'), |
|
519 | + 'desc' => __('The MD5 Hash security feature allows you to authenticate transaction responses from the Authorize.Net. If you are accepting recurring payments then md5 hash will helps to validate response from Authorize.net. It can be obtained from Authorize.Net Account > Settings > Security Settings > General Settings > MD5 Hash.', 'invoicing'), |
|
520 | 520 | 'std' => '', |
521 | 521 | ); |
522 | 522 | |
523 | 523 | $setting['authorizenet_ipn_url'] = array( |
524 | 524 | 'type' => 'ipn_url', |
525 | 525 | 'id' => 'authorizenet_ipn_url', |
526 | - 'name' => __( 'Silent Post URL', 'invoicing' ), |
|
527 | - 'std' => wpinv_get_ipn_url( 'authorizenet' ), |
|
528 | - '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' ), |
|
526 | + 'name' => __('Silent Post URL', 'invoicing'), |
|
527 | + 'std' => wpinv_get_ipn_url('authorizenet'), |
|
528 | + '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'), |
|
529 | 529 | 'size' => 'large', |
530 | 530 | 'custom' => 'authorizenet', |
531 | 531 | 'readonly' => true |
@@ -533,25 +533,25 @@ discard block |
||
533 | 533 | |
534 | 534 | return $setting; |
535 | 535 | } |
536 | -add_filter( 'wpinv_gateway_settings_authorizenet', 'wpinv_gateway_settings_authorizenet', 10, 1 ); |
|
536 | +add_filter('wpinv_gateway_settings_authorizenet', 'wpinv_gateway_settings_authorizenet', 10, 1); |
|
537 | 537 | |
538 | 538 | // Worldpay settings |
539 | -function wpinv_gateway_settings_worldpay( $setting ) { |
|
540 | - $setting['worldpay_desc']['std'] = __( 'Pay using a Worldpay account to process credit card / debit card transactions.', 'invoicing' ); |
|
539 | +function wpinv_gateway_settings_worldpay($setting) { |
|
540 | + $setting['worldpay_desc']['std'] = __('Pay using a Worldpay account to process credit card / debit card transactions.', 'invoicing'); |
|
541 | 541 | |
542 | 542 | $setting['worldpay_sandbox'] = array( |
543 | 543 | 'type' => 'checkbox', |
544 | 544 | 'id' => 'worldpay_sandbox', |
545 | - 'name' => __( 'Worldpay Test Mode', 'invoicing' ), |
|
546 | - 'desc' => __( 'This provides a special Test Environment to enable you to test your installation and integration to your website before going live.', 'invoicing' ), |
|
545 | + 'name' => __('Worldpay Test Mode', 'invoicing'), |
|
546 | + 'desc' => __('This provides a special Test Environment to enable you to test your installation and integration to your website before going live.', 'invoicing'), |
|
547 | 547 | 'std' => 1 |
548 | 548 | ); |
549 | 549 | |
550 | 550 | $setting['worldpay_instId'] = array( |
551 | 551 | 'type' => 'text', |
552 | 552 | 'id' => 'worldpay_instId', |
553 | - 'name' => __( 'Installation Id', 'invoicing' ), |
|
554 | - 'desc' => __( 'Your installation id. Ex: 211616', 'invoicing' ), |
|
553 | + 'name' => __('Installation Id', 'invoicing'), |
|
554 | + 'desc' => __('Your installation id. Ex: 211616', 'invoicing'), |
|
555 | 555 | 'std' => '211616', |
556 | 556 | ); |
557 | 557 | /* |
@@ -567,9 +567,9 @@ discard block |
||
567 | 567 | $setting['worldpay_ipn_url'] = array( |
568 | 568 | 'type' => 'ipn_url', |
569 | 569 | 'id' => 'worldpay_ipn_url', |
570 | - 'name' => __( 'Worldpay Callback Url', 'invoicing' ), |
|
571 | - 'std' => wpinv_get_ipn_url( 'worldpay' ), |
|
572 | - '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"><wpdisplay item=MC_callback></font>' ), |
|
570 | + 'name' => __('Worldpay Callback Url', 'invoicing'), |
|
571 | + 'std' => wpinv_get_ipn_url('worldpay'), |
|
572 | + '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"><wpdisplay item=MC_callback></font>'), |
|
573 | 573 | 'size' => 'large', |
574 | 574 | 'custom' => 'worldpay', |
575 | 575 | 'readonly' => true |
@@ -577,94 +577,94 @@ discard block |
||
577 | 577 | |
578 | 578 | return $setting; |
579 | 579 | } |
580 | -add_filter( 'wpinv_gateway_settings_worldpay', 'wpinv_gateway_settings_worldpay', 10, 1 ); |
|
580 | +add_filter('wpinv_gateway_settings_worldpay', 'wpinv_gateway_settings_worldpay', 10, 1); |
|
581 | 581 | |
582 | -function wpinv_ipn_url_callback( $args ) { |
|
583 | - $sanitize_id = wpinv_sanitize_key( $args['id'] ); |
|
582 | +function wpinv_ipn_url_callback($args) { |
|
583 | + $sanitize_id = wpinv_sanitize_key($args['id']); |
|
584 | 584 | |
585 | 585 | $attrs = $args['readonly'] ? ' readonly' : ''; |
586 | 586 | |
587 | - $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">'; |
|
588 | - $html .= '<label for="wpinv_settings[' . $sanitize_id . ']">' . $args['desc'] . '</label>'; |
|
587 | + $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">'; |
|
588 | + $html .= '<label for="wpinv_settings[' . $sanitize_id . ']">' . $args['desc'] . '</label>'; |
|
589 | 589 | |
590 | 590 | echo $html; |
591 | 591 | } |
592 | 592 | |
593 | -function wpinv_is_test_mode( $gateway = '' ) { |
|
594 | - if ( empty( $gateway ) ) { |
|
593 | +function wpinv_is_test_mode($gateway = '') { |
|
594 | + if (empty($gateway)) { |
|
595 | 595 | return false; |
596 | 596 | } |
597 | 597 | |
598 | - $is_test_mode = wpinv_get_option( $gateway . '_sandbox', false ); |
|
598 | + $is_test_mode = wpinv_get_option($gateway . '_sandbox', false); |
|
599 | 599 | |
600 | - return apply_filters( 'wpinv_is_test_mode', $is_test_mode, $gateway ); |
|
600 | + return apply_filters('wpinv_is_test_mode', $is_test_mode, $gateway); |
|
601 | 601 | } |
602 | 602 | |
603 | -function wpinv_get_ipn_url( $gateway = '', $args = array() ) { |
|
604 | - $data = array( 'wpi-listener' => 'IPN' ); |
|
603 | +function wpinv_get_ipn_url($gateway = '', $args = array()) { |
|
604 | + $data = array('wpi-listener' => 'IPN'); |
|
605 | 605 | |
606 | - if ( !empty( $gateway ) ) { |
|
607 | - $data['wpi-gateway'] = wpinv_sanitize_key( $gateway ); |
|
606 | + if (!empty($gateway)) { |
|
607 | + $data['wpi-gateway'] = wpinv_sanitize_key($gateway); |
|
608 | 608 | } |
609 | 609 | |
610 | - $args = !empty( $args ) && is_array( $args ) ? array_merge( $data, $args ) : $data; |
|
610 | + $args = !empty($args) && is_array($args) ? array_merge($data, $args) : $data; |
|
611 | 611 | |
612 | - $ipn_url = add_query_arg( $args, home_url( 'index.php' ) ); |
|
612 | + $ipn_url = add_query_arg($args, home_url('index.php')); |
|
613 | 613 | |
614 | - return apply_filters( 'wpinv_ipn_url', $ipn_url ); |
|
614 | + return apply_filters('wpinv_ipn_url', $ipn_url); |
|
615 | 615 | } |
616 | 616 | |
617 | 617 | function wpinv_listen_for_payment_ipn() { |
618 | 618 | // Regular PayPal IPN |
619 | - if ( isset( $_GET['wpi-listener'] ) && $_GET['wpi-listener'] == 'IPN' ) { |
|
620 | - do_action( 'wpinv_verify_payment_ipn' ); |
|
619 | + if (isset($_GET['wpi-listener']) && $_GET['wpi-listener'] == 'IPN') { |
|
620 | + do_action('wpinv_verify_payment_ipn'); |
|
621 | 621 | |
622 | - if ( !empty( $_GET['wpi-gateway'] ) ) { |
|
623 | - wpinv_error_log( sanitize_text_field( $_GET['wpi-gateway'] ), 'wpinv_listen_for_payment_ipn()', __FILE__, __LINE__ ); |
|
624 | - do_action( 'wpinv_verify_' . sanitize_text_field( $_GET['wpi-gateway'] ) . '_ipn' ); |
|
622 | + if (!empty($_GET['wpi-gateway'])) { |
|
623 | + wpinv_error_log(sanitize_text_field($_GET['wpi-gateway']), 'wpinv_listen_for_payment_ipn()', __FILE__, __LINE__); |
|
624 | + do_action('wpinv_verify_' . sanitize_text_field($_GET['wpi-gateway']) . '_ipn'); |
|
625 | 625 | } |
626 | 626 | } |
627 | 627 | } |
628 | -add_action( 'init', 'wpinv_listen_for_payment_ipn' ); |
|
628 | +add_action('init', 'wpinv_listen_for_payment_ipn'); |
|
629 | 629 | |
630 | 630 | function wpinv_get_bank_instructions() { |
631 | - $bank_instructions = wpinv_get_option( 'bank_transfer_info' ); |
|
631 | + $bank_instructions = wpinv_get_option('bank_transfer_info'); |
|
632 | 632 | |
633 | - return apply_filters( 'wpinv_bank_instructions', $bank_instructions ); |
|
633 | + return apply_filters('wpinv_bank_instructions', $bank_instructions); |
|
634 | 634 | } |
635 | 635 | |
636 | -function wpinv_get_bank_info( $filtered = false ) { |
|
636 | +function wpinv_get_bank_info($filtered = false) { |
|
637 | 637 | $bank_fields = array( |
638 | - 'bank_transfer_ac_name' => __( 'Account Name', 'invoicing' ), |
|
639 | - 'bank_transfer_ac_no' => __( 'Account Number', 'invoicing' ), |
|
640 | - 'bank_transfer_bank_name' => __( 'Bank Name', 'invoicing' ), |
|
641 | - 'bank_transfer_ifsc' => __( 'IFSC code', 'invoicing' ), |
|
642 | - 'bank_transfer_iban' => __( 'IBAN', 'invoicing' ), |
|
643 | - 'bank_transfer_bic' => __( 'BIC/Swift code', 'invoicing' ) |
|
638 | + 'bank_transfer_ac_name' => __('Account Name', 'invoicing'), |
|
639 | + 'bank_transfer_ac_no' => __('Account Number', 'invoicing'), |
|
640 | + 'bank_transfer_bank_name' => __('Bank Name', 'invoicing'), |
|
641 | + 'bank_transfer_ifsc' => __('IFSC code', 'invoicing'), |
|
642 | + 'bank_transfer_iban' => __('IBAN', 'invoicing'), |
|
643 | + 'bank_transfer_bic' => __('BIC/Swift code', 'invoicing') |
|
644 | 644 | ); |
645 | 645 | |
646 | 646 | $bank_info = array(); |
647 | - foreach ( $bank_fields as $field => $label ) { |
|
648 | - if ( $filtered && !( $value = wpinv_get_option( $field ) ) ) { |
|
647 | + foreach ($bank_fields as $field => $label) { |
|
648 | + if ($filtered && !($value = wpinv_get_option($field))) { |
|
649 | 649 | continue; |
650 | 650 | } |
651 | 651 | |
652 | - $bank_info[$field] = array( 'label' => $label, 'value' => $value ); |
|
652 | + $bank_info[$field] = array('label' => $label, 'value' => $value); |
|
653 | 653 | } |
654 | 654 | |
655 | - return apply_filters( 'wpinv_bank_info', $bank_info, $filtered ); |
|
655 | + return apply_filters('wpinv_bank_info', $bank_info, $filtered); |
|
656 | 656 | } |
657 | 657 | |
658 | -function wpinv_process_before_send_to_gateway( $invoice, $invoice_data = array() ) { |
|
659 | - if ( !empty( $invoice ) && $invoice->is_recurring() && $subscription_item = $invoice->get_recurring( true ) ) { |
|
658 | +function wpinv_process_before_send_to_gateway($invoice, $invoice_data = array()) { |
|
659 | + if (!empty($invoice) && $invoice->is_recurring() && $subscription_item = $invoice->get_recurring(true)) { |
|
660 | 660 | $args = array(); |
661 | 661 | $args['item_id'] = $subscription_item->ID; |
662 | - $args['initial_amount'] = wpinv_round_amount( $invoice->get_total() ); |
|
663 | - $args['recurring_amount'] = wpinv_round_amount( $invoice->get_recurring_details( 'total' ) ); |
|
662 | + $args['initial_amount'] = wpinv_round_amount($invoice->get_total()); |
|
663 | + $args['recurring_amount'] = wpinv_round_amount($invoice->get_recurring_details('total')); |
|
664 | 664 | $args['currency'] = $invoice->get_currency(); |
665 | 665 | $args['period'] = $subscription_item->get_recurring_period(); |
666 | 666 | $args['interval'] = $subscription_item->get_recurring_interval(); |
667 | - if ( $subscription_item->has_free_trial() ) { |
|
667 | + if ($subscription_item->has_free_trial()) { |
|
668 | 668 | $args['trial_period'] = $subscription_item->get_trial_period(); |
669 | 669 | $args['trial_interval'] = $subscription_item->get_trial_interval(); |
670 | 670 | } else { |
@@ -673,25 +673,25 @@ discard block |
||
673 | 673 | } |
674 | 674 | $args['bill_times'] = (int)$subscription_item->get_recurring_limit(); |
675 | 675 | |
676 | - $invoice->update_subscription( $args ); |
|
676 | + $invoice->update_subscription($args); |
|
677 | 677 | } |
678 | 678 | } |
679 | -add_action( 'wpinv_checkout_before_send_to_gateway', 'wpinv_process_before_send_to_gateway', 10, 2 ); |
|
679 | +add_action('wpinv_checkout_before_send_to_gateway', 'wpinv_process_before_send_to_gateway', 10, 2); |
|
680 | 680 | |
681 | -function wpinv_get_post_data( $method = 'request' ) { |
|
681 | +function wpinv_get_post_data($method = 'request') { |
|
682 | 682 | $data = array(); |
683 | 683 | $request = $_REQUEST; |
684 | 684 | |
685 | - if ( $method == 'post' ) { |
|
686 | - if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] != 'POST' ) { |
|
685 | + if ($method == 'post') { |
|
686 | + if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'POST') { |
|
687 | 687 | return $data; |
688 | 688 | } |
689 | 689 | |
690 | 690 | $request = $_POST; |
691 | 691 | } |
692 | 692 | |
693 | - if ( $method == 'get' ) { |
|
694 | - if ( isset( $_SERVER['REQUEST_METHOD'] ) && $_SERVER['REQUEST_METHOD'] != 'GET' ) { |
|
693 | + if ($method == 'get') { |
|
694 | + if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'GET') { |
|
695 | 695 | return $data; |
696 | 696 | } |
697 | 697 | |
@@ -702,11 +702,11 @@ discard block |
||
702 | 702 | $post_data = ''; |
703 | 703 | |
704 | 704 | // Fallback just in case post_max_size is lower than needed |
705 | - if ( ini_get( 'allow_url_fopen' ) ) { |
|
706 | - $post_data = file_get_contents( 'php://input' ); |
|
705 | + if (ini_get('allow_url_fopen')) { |
|
706 | + $post_data = file_get_contents('php://input'); |
|
707 | 707 | } else { |
708 | 708 | // If allow_url_fopen is not enabled, then make sure that post_max_size is large enough |
709 | - ini_set( 'post_max_size', '12M' ); |
|
709 | + ini_set('post_max_size', '12M'); |
|
710 | 710 | } |
711 | 711 | // Start the encoded data collection with notification command |
712 | 712 | $encoded_data = 'cmd=_notify-validate'; |
@@ -715,58 +715,58 @@ discard block |
||
715 | 715 | $arg_separator = wpinv_get_php_arg_separator_output(); |
716 | 716 | |
717 | 717 | // Verify there is a post_data |
718 | - if ( $post_data || strlen( $post_data ) > 0 ) { |
|
718 | + if ($post_data || strlen($post_data) > 0) { |
|
719 | 719 | // Append the data |
720 | 720 | $encoded_data .= $arg_separator . $post_data; |
721 | 721 | } else { |
722 | 722 | // Check if POST is empty |
723 | - if ( empty( $request ) ) { |
|
723 | + if (empty($request)) { |
|
724 | 724 | // Nothing to do |
725 | 725 | return; |
726 | 726 | } else { |
727 | 727 | // Loop through each POST |
728 | - foreach ( $request as $key => $value ) { |
|
728 | + foreach ($request as $key => $value) { |
|
729 | 729 | // Encode the value and append the data |
730 | - $encoded_data .= $arg_separator . "$key=" . urlencode( $value ); |
|
730 | + $encoded_data .= $arg_separator . "$key=" . urlencode($value); |
|
731 | 731 | } |
732 | 732 | } |
733 | 733 | } |
734 | 734 | |
735 | 735 | // Convert collected post data to an array |
736 | - parse_str( $encoded_data, $data ); |
|
736 | + parse_str($encoded_data, $data); |
|
737 | 737 | |
738 | - foreach ( $data as $key => $value ) { |
|
739 | - if ( false !== strpos( $key, 'amp;' ) ) { |
|
740 | - $new_key = str_replace( '&', '&', $key ); |
|
741 | - $new_key = str_replace( 'amp;', '&' , $new_key ); |
|
738 | + foreach ($data as $key => $value) { |
|
739 | + if (false !== strpos($key, 'amp;')) { |
|
740 | + $new_key = str_replace('&', '&', $key); |
|
741 | + $new_key = str_replace('amp;', '&', $new_key); |
|
742 | 742 | |
743 | - unset( $data[ $key ] ); |
|
744 | - $data[ $new_key ] = sanitize_text_field( $value ); |
|
743 | + unset($data[$key]); |
|
744 | + $data[$new_key] = sanitize_text_field($value); |
|
745 | 745 | } |
746 | 746 | } |
747 | 747 | |
748 | 748 | return $data; |
749 | 749 | } |
750 | 750 | |
751 | -function wpinv_gateway_support_subscription( $gateway ) { |
|
751 | +function wpinv_gateway_support_subscription($gateway) { |
|
752 | 752 | $return = false; |
753 | 753 | |
754 | - if ( wpinv_is_gateway_active( $gateway ) ) { |
|
755 | - $return = apply_filters( 'wpinv_' . $gateway . '_support_subscription', false ); |
|
754 | + if (wpinv_is_gateway_active($gateway)) { |
|
755 | + $return = apply_filters('wpinv_' . $gateway . '_support_subscription', false); |
|
756 | 756 | } |
757 | 757 | |
758 | 758 | return $return; |
759 | 759 | } |
760 | 760 | |
761 | -function wpinv_payment_gateways_on_cart( $gateways = array() ) { |
|
762 | - if ( !empty( $gateways ) && wpinv_cart_has_recurring_item() ) { |
|
763 | - foreach ( $gateways as $gateway => $info ) { |
|
764 | - if ( !wpinv_gateway_support_subscription( $gateway ) ) { |
|
765 | - unset( $gateways[$gateway] ); |
|
761 | +function wpinv_payment_gateways_on_cart($gateways = array()) { |
|
762 | + if (!empty($gateways) && wpinv_cart_has_recurring_item()) { |
|
763 | + foreach ($gateways as $gateway => $info) { |
|
764 | + if (!wpinv_gateway_support_subscription($gateway)) { |
|
765 | + unset($gateways[$gateway]); |
|
766 | 766 | } |
767 | 767 | } |
768 | 768 | } |
769 | 769 | |
770 | 770 | return $gateways; |
771 | 771 | } |
772 | -add_filter( 'wpinv_payment_gateways_on_cart', 'wpinv_payment_gateways_on_cart', 10, 1 ); |
|
773 | 772 | \ No newline at end of file |
773 | +add_filter('wpinv_payment_gateways_on_cart', 'wpinv_payment_gateways_on_cart', 10, 1); |
|
774 | 774 | \ No newline at end of file |
@@ -512,7 +512,7 @@ |
||
512 | 512 | |
513 | 513 | $response['success'] = true; |
514 | 514 | $response['msg'] = __( 'Discount has been applied successfully.', 'invoicing' ); |
515 | - } else { |
|
515 | + } else { |
|
516 | 516 | $errors = wpinv_get_errors(); |
517 | 517 | if ( !empty( $errors['wpinv-discount-error'] ) ) { |
518 | 518 | $response['msg'] = $errors['wpinv-discount-error']; |
@@ -7,28 +7,28 @@ discard block |
||
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 | class WPInv_Ajax { |
15 | 15 | public static function init() { |
16 | - add_action( 'init', array( __CLASS__, 'define_ajax' ), 0 ); |
|
17 | - add_action( 'template_redirect', array( __CLASS__, 'do_wpinv_ajax' ), 0 ); |
|
16 | + add_action('init', array(__CLASS__, 'define_ajax'), 0); |
|
17 | + add_action('template_redirect', array(__CLASS__, 'do_wpinv_ajax'), 0); |
|
18 | 18 | self::add_ajax_events(); |
19 | 19 | } |
20 | 20 | |
21 | 21 | public static function define_ajax() { |
22 | - if ( !empty( $_GET['wpinv-ajax'] ) ) { |
|
23 | - if ( ! defined( 'DOING_AJAX' ) ) { |
|
24 | - define( 'DOING_AJAX', true ); |
|
22 | + if (!empty($_GET['wpinv-ajax'])) { |
|
23 | + if (!defined('DOING_AJAX')) { |
|
24 | + define('DOING_AJAX', true); |
|
25 | 25 | } |
26 | - if ( ! defined( 'WC_DOING_AJAX' ) ) { |
|
27 | - define( 'WC_DOING_AJAX', true ); |
|
26 | + if (!defined('WC_DOING_AJAX')) { |
|
27 | + define('WC_DOING_AJAX', true); |
|
28 | 28 | } |
29 | 29 | // Turn off display_errors during AJAX events to prevent malformed JSON |
30 | - if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) { |
|
31 | - @ini_set( 'display_errors', 0 ); |
|
30 | + if (!WP_DEBUG || (WP_DEBUG && !WP_DEBUG_DISPLAY)) { |
|
31 | + @ini_set('display_errors', 0); |
|
32 | 32 | } |
33 | 33 | $GLOBALS['wpdb']->hide_errors(); |
34 | 34 | } |
@@ -37,24 +37,24 @@ discard block |
||
37 | 37 | public static function do_wpinv_ajax() { |
38 | 38 | global $wp_query; |
39 | 39 | |
40 | - if ( !empty( $_GET['wpinv-ajax'] ) ) { |
|
41 | - $wp_query->set( 'wpinv-ajax', sanitize_text_field( $_GET['wpinv-ajax'] ) ); |
|
40 | + if (!empty($_GET['wpinv-ajax'])) { |
|
41 | + $wp_query->set('wpinv-ajax', sanitize_text_field($_GET['wpinv-ajax'])); |
|
42 | 42 | } |
43 | 43 | |
44 | - if ( $action = $wp_query->get( 'wpinv-ajax' ) ) { |
|
44 | + if ($action = $wp_query->get('wpinv-ajax')) { |
|
45 | 45 | self::wpinv_ajax_headers(); |
46 | - do_action( 'wpinv_ajax_' . sanitize_text_field( $action ) ); |
|
46 | + do_action('wpinv_ajax_' . sanitize_text_field($action)); |
|
47 | 47 | die(); |
48 | 48 | } |
49 | 49 | } |
50 | 50 | |
51 | 51 | private static function wpinv_ajax_headers() { |
52 | 52 | send_origin_headers(); |
53 | - @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) ); |
|
54 | - @header( 'X-Robots-Tag: noindex' ); |
|
53 | + @header('Content-Type: text/html; charset=' . get_option('blog_charset')); |
|
54 | + @header('X-Robots-Tag: noindex'); |
|
55 | 55 | send_nosniff_header(); |
56 | 56 | nocache_headers(); |
57 | - status_header( 200 ); |
|
57 | + status_header(200); |
|
58 | 58 | } |
59 | 59 | |
60 | 60 | public static function add_ajax_events() { |
@@ -76,39 +76,39 @@ discard block |
||
76 | 76 | 'remove_discount' => false, |
77 | 77 | ); |
78 | 78 | |
79 | - foreach ( $ajax_events as $ajax_event => $nopriv ) { |
|
80 | - add_action( 'wp_ajax_wpinv_' . $ajax_event, array( __CLASS__, $ajax_event ) ); |
|
79 | + foreach ($ajax_events as $ajax_event => $nopriv) { |
|
80 | + add_action('wp_ajax_wpinv_' . $ajax_event, array(__CLASS__, $ajax_event)); |
|
81 | 81 | |
82 | - if ( !defined( 'WPI_AJAX_' . strtoupper( $nopriv ) ) ) { |
|
83 | - define( 'WPI_AJAX_' . strtoupper( $nopriv ), 1 ); |
|
82 | + if (!defined('WPI_AJAX_' . strtoupper($nopriv))) { |
|
83 | + define('WPI_AJAX_' . strtoupper($nopriv), 1); |
|
84 | 84 | } |
85 | 85 | |
86 | - if ( $nopriv ) { |
|
87 | - add_action( 'wp_ajax_nopriv_wpinv_' . $ajax_event, array( __CLASS__, $ajax_event ) ); |
|
86 | + if ($nopriv) { |
|
87 | + add_action('wp_ajax_nopriv_wpinv_' . $ajax_event, array(__CLASS__, $ajax_event)); |
|
88 | 88 | |
89 | - add_action( 'wpinv_ajax_' . $ajax_event, array( __CLASS__, $ajax_event ) ); |
|
89 | + add_action('wpinv_ajax_' . $ajax_event, array(__CLASS__, $ajax_event)); |
|
90 | 90 | } |
91 | 91 | } |
92 | 92 | } |
93 | 93 | |
94 | 94 | public static function add_note() { |
95 | - check_ajax_referer( 'add-invoice-note', '_nonce' ); |
|
95 | + check_ajax_referer('add-invoice-note', '_nonce'); |
|
96 | 96 | |
97 | - if ( !current_user_can( 'manage_options' ) ) { |
|
97 | + if (!current_user_can('manage_options')) { |
|
98 | 98 | die(-1); |
99 | 99 | } |
100 | 100 | |
101 | - $post_id = absint( $_POST['post_id'] ); |
|
102 | - $note = wp_kses_post( trim( stripslashes( $_POST['note'] ) ) ); |
|
103 | - $note_type = sanitize_text_field( $_POST['note_type'] ); |
|
101 | + $post_id = absint($_POST['post_id']); |
|
102 | + $note = wp_kses_post(trim(stripslashes($_POST['note']))); |
|
103 | + $note_type = sanitize_text_field($_POST['note_type']); |
|
104 | 104 | |
105 | 105 | $is_customer_note = $note_type == 'customer' ? 1 : 0; |
106 | 106 | |
107 | - if ( $post_id > 0 ) { |
|
108 | - $note_id = wpinv_insert_payment_note( $post_id, $note, $is_customer_note ); |
|
107 | + if ($post_id > 0) { |
|
108 | + $note_id = wpinv_insert_payment_note($post_id, $note, $is_customer_note); |
|
109 | 109 | |
110 | - if ( $note_id > 0 && !is_wp_error( $note_id ) ) { |
|
111 | - wpinv_get_invoice_note_line_item( $note_id ); |
|
110 | + if ($note_id > 0 && !is_wp_error($note_id)) { |
|
111 | + wpinv_get_invoice_note_line_item($note_id); |
|
112 | 112 | } |
113 | 113 | } |
114 | 114 | |
@@ -116,16 +116,16 @@ discard block |
||
116 | 116 | } |
117 | 117 | |
118 | 118 | public static function delete_note() { |
119 | - check_ajax_referer( 'delete-invoice-note', '_nonce' ); |
|
119 | + check_ajax_referer('delete-invoice-note', '_nonce'); |
|
120 | 120 | |
121 | - if ( !current_user_can( 'manage_options' ) ) { |
|
121 | + if (!current_user_can('manage_options')) { |
|
122 | 122 | die(-1); |
123 | 123 | } |
124 | 124 | |
125 | 125 | $note_id = (int)$_POST['note_id']; |
126 | 126 | |
127 | - if ( $note_id > 0 ) { |
|
128 | - wp_delete_comment( $note_id, true ); |
|
127 | + if ($note_id > 0) { |
|
128 | + wp_delete_comment($note_id, true); |
|
129 | 129 | } |
130 | 130 | |
131 | 131 | die(); |
@@ -138,8 +138,8 @@ discard block |
||
138 | 138 | } |
139 | 139 | |
140 | 140 | public static function checkout() { |
141 | - if ( ! defined( 'WPINV_CHECKOUT' ) ) { |
|
142 | - define( 'WPINV_CHECKOUT', true ); |
|
141 | + if (!defined('WPINV_CHECKOUT')) { |
|
142 | + define('WPINV_CHECKOUT', true); |
|
143 | 143 | } |
144 | 144 | |
145 | 145 | wpinv_process_checkout(); |
@@ -148,53 +148,53 @@ discard block |
||
148 | 148 | |
149 | 149 | public static function add_invoice_item() { |
150 | 150 | global $wpi_userID, $wpinv_ip_address_country; |
151 | - check_ajax_referer( 'invoice-item', '_nonce' ); |
|
152 | - if ( !current_user_can( 'manage_options' ) ) { |
|
151 | + check_ajax_referer('invoice-item', '_nonce'); |
|
152 | + if (!current_user_can('manage_options')) { |
|
153 | 153 | die(-1); |
154 | 154 | } |
155 | 155 | |
156 | - $item_id = sanitize_text_field( $_POST['item_id'] ); |
|
157 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
156 | + $item_id = sanitize_text_field($_POST['item_id']); |
|
157 | + $invoice_id = absint($_POST['invoice_id']); |
|
158 | 158 | |
159 | - if ( !is_numeric( $invoice_id ) || !is_numeric( $item_id ) ) { |
|
159 | + if (!is_numeric($invoice_id) || !is_numeric($item_id)) { |
|
160 | 160 | die(); |
161 | 161 | } |
162 | 162 | |
163 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
164 | - if ( empty( $invoice ) ) { |
|
163 | + $invoice = wpinv_get_invoice($invoice_id); |
|
164 | + if (empty($invoice)) { |
|
165 | 165 | die(); |
166 | 166 | } |
167 | 167 | |
168 | - if ( $invoice->is_paid() ) { |
|
168 | + if ($invoice->is_paid()) { |
|
169 | 169 | die(); // Don't allow modify items for paid invoice. |
170 | 170 | } |
171 | 171 | |
172 | - if ( !empty( $_POST['user_id'] ) ) { |
|
173 | - $wpi_userID = absint( $_POST['user_id'] ); |
|
172 | + if (!empty($_POST['user_id'])) { |
|
173 | + $wpi_userID = absint($_POST['user_id']); |
|
174 | 174 | } |
175 | 175 | |
176 | - $item = new WPInv_Item( $item_id ); |
|
177 | - if ( !( !empty( $item ) && $item->post_type == 'wpi_item' ) ) { |
|
176 | + $item = new WPInv_Item($item_id); |
|
177 | + if (!(!empty($item) && $item->post_type == 'wpi_item')) { |
|
178 | 178 | die(); |
179 | 179 | } |
180 | 180 | |
181 | 181 | // Validate item before adding to invoice because recurring item must be paid individually. |
182 | - if ( !empty( $invoice->cart_details ) ) { |
|
182 | + if (!empty($invoice->cart_details)) { |
|
183 | 183 | $valid = true; |
184 | 184 | |
185 | - if ( $recurring_item = $invoice->get_recurring() ) { |
|
186 | - if ( $recurring_item != $item_id ) { |
|
185 | + if ($recurring_item = $invoice->get_recurring()) { |
|
186 | + if ($recurring_item != $item_id) { |
|
187 | 187 | $valid = false; |
188 | 188 | } |
189 | - } else if ( wpinv_is_recurring_item( $item_id ) ) { |
|
189 | + } else if (wpinv_is_recurring_item($item_id)) { |
|
190 | 190 | $valid = false; |
191 | 191 | } |
192 | 192 | |
193 | - if ( !$valid ) { |
|
193 | + if (!$valid) { |
|
194 | 194 | $response = array(); |
195 | 195 | $response['success'] = false; |
196 | - $response['msg'] = __( 'You can not add item to invoice because recurring item must be paid individually!', 'invoicing' ); |
|
197 | - wp_send_json( $response ); |
|
196 | + $response['msg'] = __('You can not add item to invoice because recurring item must be paid individually!', 'invoicing'); |
|
197 | + wp_send_json($response); |
|
198 | 198 | } |
199 | 199 | } |
200 | 200 | |
@@ -202,9 +202,9 @@ discard block |
||
202 | 202 | |
203 | 203 | $data = array(); |
204 | 204 | $data['invoice_id'] = $invoice_id; |
205 | - $data['cart_discounts'] = $invoice->get_discounts( true ); |
|
205 | + $data['cart_discounts'] = $invoice->get_discounts(true); |
|
206 | 206 | |
207 | - wpinv_set_checkout_session( $data ); |
|
207 | + wpinv_set_checkout_session($data); |
|
208 | 208 | |
209 | 209 | $quantity = wpinv_item_quantities_enabled() && !empty($_POST['qty']) && (int)$_POST['qty'] > 0 ? (int)$_POST['qty'] : 1; |
210 | 210 | |
@@ -218,21 +218,21 @@ discard block |
||
218 | 218 | 'fees' => array() |
219 | 219 | ); |
220 | 220 | |
221 | - $invoice->add_item( $item_id, $args ); |
|
221 | + $invoice->add_item($item_id, $args); |
|
222 | 222 | $invoice->save(); |
223 | 223 | |
224 | - if ( empty( $_POST['country'] ) ) { |
|
224 | + if (empty($_POST['country'])) { |
|
225 | 225 | $_POST['country'] = !empty($invoice->country) ? $invoice->country : wpinv_get_default_country(); |
226 | 226 | } |
227 | - if ( empty( $_POST['state'] ) ) { |
|
227 | + if (empty($_POST['state'])) { |
|
228 | 228 | $_POST['state'] = $invoice->state; |
229 | 229 | } |
230 | 230 | |
231 | - $invoice->country = sanitize_text_field( $_POST['country'] ); |
|
232 | - $invoice->state = sanitize_text_field( $_POST['state'] ); |
|
231 | + $invoice->country = sanitize_text_field($_POST['country']); |
|
232 | + $invoice->state = sanitize_text_field($_POST['state']); |
|
233 | 233 | |
234 | - $invoice->set( 'country', sanitize_text_field( $_POST['country'] ) ); |
|
235 | - $invoice->set( 'state', sanitize_text_field( $_POST['state'] ) ); |
|
234 | + $invoice->set('country', sanitize_text_field($_POST['country'])); |
|
235 | + $invoice->set('state', sanitize_text_field($_POST['state'])); |
|
236 | 236 | |
237 | 237 | $wpinv_ip_address_country = $invoice->country; |
238 | 238 | |
@@ -240,52 +240,52 @@ discard block |
||
240 | 240 | |
241 | 241 | $response = array(); |
242 | 242 | $response['success'] = true; |
243 | - $response['data']['items'] = wpinv_admin_get_line_items( $invoice ); |
|
243 | + $response['data']['items'] = wpinv_admin_get_line_items($invoice); |
|
244 | 244 | $response['data']['subtotal'] = $invoice->get_subtotal(); |
245 | 245 | $response['data']['subtotalf'] = $invoice->get_subtotal(true); |
246 | 246 | $response['data']['tax'] = $invoice->get_tax(); |
247 | 247 | $response['data']['taxf'] = $invoice->get_tax(true); |
248 | 248 | $response['data']['discount'] = $invoice->discount; |
249 | - $response['data']['discountf'] = wpinv_price( $invoice->discount, $invoice->get_currency() ); |
|
249 | + $response['data']['discountf'] = wpinv_price($invoice->discount, $invoice->get_currency()); |
|
250 | 250 | $response['data']['total'] = $invoice->get_total(); |
251 | 251 | $response['data']['totalf'] = $invoice->get_total(true); |
252 | 252 | |
253 | 253 | wpinv_set_checkout_session($checkout_session); |
254 | 254 | |
255 | - wp_send_json( $response ); |
|
255 | + wp_send_json($response); |
|
256 | 256 | } |
257 | 257 | |
258 | 258 | public static function remove_invoice_item() { |
259 | 259 | global $wpi_userID, $wpinv_ip_address_country; |
260 | 260 | |
261 | - check_ajax_referer( 'invoice-item', '_nonce' ); |
|
262 | - if ( !current_user_can( 'manage_options' ) ) { |
|
261 | + check_ajax_referer('invoice-item', '_nonce'); |
|
262 | + if (!current_user_can('manage_options')) { |
|
263 | 263 | die(-1); |
264 | 264 | } |
265 | 265 | |
266 | - $item_id = sanitize_text_field( $_POST['item_id'] ); |
|
267 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
268 | - $cart_index = isset( $_POST['index'] ) && $_POST['index'] >= 0 ? $_POST['index'] : false; |
|
266 | + $item_id = sanitize_text_field($_POST['item_id']); |
|
267 | + $invoice_id = absint($_POST['invoice_id']); |
|
268 | + $cart_index = isset($_POST['index']) && $_POST['index'] >= 0 ? $_POST['index'] : false; |
|
269 | 269 | |
270 | - if ( !is_numeric( $invoice_id ) || !is_numeric( $item_id ) ) { |
|
270 | + if (!is_numeric($invoice_id) || !is_numeric($item_id)) { |
|
271 | 271 | die(); |
272 | 272 | } |
273 | 273 | |
274 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
275 | - if ( empty( $invoice ) ) { |
|
274 | + $invoice = wpinv_get_invoice($invoice_id); |
|
275 | + if (empty($invoice)) { |
|
276 | 276 | die(); |
277 | 277 | } |
278 | 278 | |
279 | - if ( $invoice->is_paid() ) { |
|
279 | + if ($invoice->is_paid()) { |
|
280 | 280 | die(); // Don't allow modify items for paid invoice. |
281 | 281 | } |
282 | 282 | |
283 | - if ( !empty( $_POST['user_id'] ) ) { |
|
284 | - $wpi_userID = absint( $_POST['user_id'] ); |
|
283 | + if (!empty($_POST['user_id'])) { |
|
284 | + $wpi_userID = absint($_POST['user_id']); |
|
285 | 285 | } |
286 | 286 | |
287 | - $item = new WPInv_Item( $item_id ); |
|
288 | - if ( !( !empty( $item ) && $item->post_type == 'wpi_item' ) ) { |
|
287 | + $item = new WPInv_Item($item_id); |
|
288 | + if (!(!empty($item) && $item->post_type == 'wpi_item')) { |
|
289 | 289 | die(); |
290 | 290 | } |
291 | 291 | |
@@ -293,9 +293,9 @@ discard block |
||
293 | 293 | |
294 | 294 | $data = array(); |
295 | 295 | $data['invoice_id'] = $invoice_id; |
296 | - $data['cart_discounts'] = $invoice->get_discounts( true ); |
|
296 | + $data['cart_discounts'] = $invoice->get_discounts(true); |
|
297 | 297 | |
298 | - wpinv_set_checkout_session( $data ); |
|
298 | + wpinv_set_checkout_session($data); |
|
299 | 299 | |
300 | 300 | $args = array( |
301 | 301 | 'id' => $item_id, |
@@ -303,21 +303,21 @@ discard block |
||
303 | 303 | 'cart_index' => $cart_index |
304 | 304 | ); |
305 | 305 | |
306 | - $invoice->remove_item( $item_id, $args ); |
|
306 | + $invoice->remove_item($item_id, $args); |
|
307 | 307 | $invoice->save(); |
308 | 308 | |
309 | - if ( empty( $_POST['country'] ) ) { |
|
309 | + if (empty($_POST['country'])) { |
|
310 | 310 | $_POST['country'] = !empty($invoice->country) ? $invoice->country : wpinv_get_default_country(); |
311 | 311 | } |
312 | - if ( empty( $_POST['state'] ) ) { |
|
312 | + if (empty($_POST['state'])) { |
|
313 | 313 | $_POST['state'] = $invoice->state; |
314 | 314 | } |
315 | 315 | |
316 | - $invoice->country = sanitize_text_field( $_POST['country'] ); |
|
317 | - $invoice->state = sanitize_text_field( $_POST['state'] ); |
|
316 | + $invoice->country = sanitize_text_field($_POST['country']); |
|
317 | + $invoice->state = sanitize_text_field($_POST['state']); |
|
318 | 318 | |
319 | - $invoice->set( 'country', sanitize_text_field( $_POST['country'] ) ); |
|
320 | - $invoice->set( 'state', sanitize_text_field( $_POST['state'] ) ); |
|
319 | + $invoice->set('country', sanitize_text_field($_POST['country'])); |
|
320 | + $invoice->set('state', sanitize_text_field($_POST['state'])); |
|
321 | 321 | |
322 | 322 | $wpinv_ip_address_country = $invoice->country; |
323 | 323 | |
@@ -325,52 +325,52 @@ discard block |
||
325 | 325 | |
326 | 326 | $response = array(); |
327 | 327 | $response['success'] = true; |
328 | - $response['data']['items'] = wpinv_admin_get_line_items( $invoice ); |
|
328 | + $response['data']['items'] = wpinv_admin_get_line_items($invoice); |
|
329 | 329 | $response['data']['subtotal'] = $invoice->get_subtotal(); |
330 | 330 | $response['data']['subtotalf'] = $invoice->get_subtotal(true); |
331 | 331 | $response['data']['tax'] = $invoice->get_tax(); |
332 | 332 | $response['data']['taxf'] = $invoice->get_tax(true); |
333 | 333 | $response['data']['discount'] = $invoice->discount; |
334 | - $response['data']['discountf'] = wpinv_price( $invoice->discount, $invoice->get_currency() ); |
|
334 | + $response['data']['discountf'] = wpinv_price($invoice->discount, $invoice->get_currency()); |
|
335 | 335 | $response['data']['total'] = $invoice->get_total(); |
336 | 336 | $response['data']['totalf'] = $invoice->get_total(true); |
337 | 337 | |
338 | 338 | wpinv_set_checkout_session($checkout_session); |
339 | 339 | |
340 | - wp_send_json( $response ); |
|
340 | + wp_send_json($response); |
|
341 | 341 | } |
342 | 342 | |
343 | 343 | public static function create_invoice_item() { |
344 | - check_ajax_referer( 'invoice-item', '_nonce' ); |
|
345 | - if ( !current_user_can( 'manage_options' ) ) { |
|
344 | + check_ajax_referer('invoice-item', '_nonce'); |
|
345 | + if (!current_user_can('manage_options')) { |
|
346 | 346 | die(-1); |
347 | 347 | } |
348 | 348 | |
349 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
349 | + $invoice_id = absint($_POST['invoice_id']); |
|
350 | 350 | |
351 | 351 | // Find the item |
352 | - if ( !is_numeric( $invoice_id ) ) { |
|
352 | + if (!is_numeric($invoice_id)) { |
|
353 | 353 | die(); |
354 | 354 | } |
355 | 355 | |
356 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
357 | - if ( empty( $invoice ) ) { |
|
356 | + $invoice = wpinv_get_invoice($invoice_id); |
|
357 | + if (empty($invoice)) { |
|
358 | 358 | die(); |
359 | 359 | } |
360 | 360 | |
361 | 361 | // Validate item before adding to invoice because recurring item must be paid individually. |
362 | - if ( !empty( $invoice->cart_details ) && $invoice->get_recurring() ) { |
|
362 | + if (!empty($invoice->cart_details) && $invoice->get_recurring()) { |
|
363 | 363 | $response = array(); |
364 | 364 | $response['success'] = false; |
365 | - $response['msg'] = __( 'You can not add item to invoice because recurring item must be paid individually!', 'invoicing' ); |
|
366 | - wp_send_json( $response ); |
|
365 | + $response['msg'] = __('You can not add item to invoice because recurring item must be paid individually!', 'invoicing'); |
|
366 | + wp_send_json($response); |
|
367 | 367 | } |
368 | 368 | |
369 | 369 | $save_item = $_POST['_wpinv_quick']; |
370 | 370 | |
371 | 371 | $meta = array(); |
372 | 372 | $meta['type'] = !empty($save_item['type']) ? sanitize_text_field($save_item['type']) : 'custom'; |
373 | - $meta['price'] = !empty($save_item['price']) ? wpinv_sanitize_amount( $save_item['price'] ) : 0; |
|
373 | + $meta['price'] = !empty($save_item['price']) ? wpinv_sanitize_amount($save_item['price']) : 0; |
|
374 | 374 | $meta['vat_rule'] = !empty($save_item['vat_rule']) ? sanitize_text_field($save_item['vat_rule']) : 'digital'; |
375 | 375 | $meta['vat_class'] = !empty($save_item['vat_class']) ? sanitize_text_field($save_item['vat_class']) : '_standard'; |
376 | 376 | |
@@ -380,9 +380,9 @@ discard block |
||
380 | 380 | $data['meta'] = $meta; |
381 | 381 | |
382 | 382 | $item = new WPInv_Item(); |
383 | - $item->create( $data ); |
|
383 | + $item->create($data); |
|
384 | 384 | |
385 | - if ( !empty( $item ) ) { |
|
385 | + if (!empty($item)) { |
|
386 | 386 | $_POST['item_id'] = $item->ID; |
387 | 387 | $_POST['qty'] = !empty($save_item['qty']) && $save_item['qty'] > 0 ? (int)$save_item['qty'] : 1; |
388 | 388 | |
@@ -392,15 +392,15 @@ discard block |
||
392 | 392 | } |
393 | 393 | |
394 | 394 | public static function get_billing_details() { |
395 | - check_ajax_referer( 'get-billing-details', '_nonce' ); |
|
395 | + check_ajax_referer('get-billing-details', '_nonce'); |
|
396 | 396 | |
397 | - if ( !current_user_can( 'manage_options' ) ) { |
|
397 | + if (!current_user_can('manage_options')) { |
|
398 | 398 | die(-1); |
399 | 399 | } |
400 | 400 | |
401 | 401 | $user_id = (int)$_POST['user_id']; |
402 | 402 | $billing_details = wpinv_get_user_address($user_id); |
403 | - $billing_details = apply_filters( 'wpinv_fill_billing_details', $billing_details, $user_id ); |
|
403 | + $billing_details = apply_filters('wpinv_fill_billing_details', $billing_details, $user_id); |
|
404 | 404 | |
405 | 405 | if (isset($billing_details['user_id'])) { |
406 | 406 | unset($billing_details['user_id']); |
@@ -414,20 +414,20 @@ discard block |
||
414 | 414 | $response['success'] = true; |
415 | 415 | $response['data']['billing_details'] = $billing_details; |
416 | 416 | |
417 | - wp_send_json( $response ); |
|
417 | + wp_send_json($response); |
|
418 | 418 | } |
419 | 419 | |
420 | 420 | public static function admin_recalculate_totals() { |
421 | 421 | global $wpi_userID, $wpinv_ip_address_country; |
422 | 422 | |
423 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
424 | - if ( !current_user_can( 'manage_options' ) ) { |
|
423 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
424 | + if (!current_user_can('manage_options')) { |
|
425 | 425 | die(-1); |
426 | 426 | } |
427 | 427 | |
428 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
429 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
430 | - if ( empty( $invoice ) ) { |
|
428 | + $invoice_id = absint($_POST['invoice_id']); |
|
429 | + $invoice = wpinv_get_invoice($invoice_id); |
|
430 | + if (empty($invoice)) { |
|
431 | 431 | die(); |
432 | 432 | } |
433 | 433 | |
@@ -435,23 +435,23 @@ discard block |
||
435 | 435 | |
436 | 436 | $data = array(); |
437 | 437 | $data['invoice_id'] = $invoice_id; |
438 | - $data['cart_discounts'] = $invoice->get_discounts( true ); |
|
438 | + $data['cart_discounts'] = $invoice->get_discounts(true); |
|
439 | 439 | |
440 | - wpinv_set_checkout_session( $data ); |
|
440 | + wpinv_set_checkout_session($data); |
|
441 | 441 | |
442 | - if ( !empty( $_POST['user_id'] ) ) { |
|
443 | - $wpi_userID = absint( $_POST['user_id'] ); |
|
442 | + if (!empty($_POST['user_id'])) { |
|
443 | + $wpi_userID = absint($_POST['user_id']); |
|
444 | 444 | } |
445 | 445 | |
446 | - if ( empty( $_POST['country'] ) ) { |
|
446 | + if (empty($_POST['country'])) { |
|
447 | 447 | $_POST['country'] = !empty($invoice->country) ? $invoice->country : wpinv_get_default_country(); |
448 | 448 | } |
449 | 449 | |
450 | - $invoice->country = sanitize_text_field( $_POST['country'] ); |
|
451 | - $invoice->set( 'country', sanitize_text_field( $_POST['country'] ) ); |
|
452 | - if ( isset( $_POST['state'] ) ) { |
|
453 | - $invoice->state = sanitize_text_field( $_POST['state'] ); |
|
454 | - $invoice->set( 'state', sanitize_text_field( $_POST['state'] ) ); |
|
450 | + $invoice->country = sanitize_text_field($_POST['country']); |
|
451 | + $invoice->set('country', sanitize_text_field($_POST['country'])); |
|
452 | + if (isset($_POST['state'])) { |
|
453 | + $invoice->state = sanitize_text_field($_POST['state']); |
|
454 | + $invoice->set('state', sanitize_text_field($_POST['state'])); |
|
455 | 455 | } |
456 | 456 | |
457 | 457 | $wpinv_ip_address_country = $invoice->country; |
@@ -460,7 +460,7 @@ discard block |
||
460 | 460 | |
461 | 461 | $response = array(); |
462 | 462 | $response['success'] = true; |
463 | - $response['data']['items'] = wpinv_admin_get_line_items( $invoice ); |
|
463 | + $response['data']['items'] = wpinv_admin_get_line_items($invoice); |
|
464 | 464 | $response['data']['subtotal'] = $invoice->get_subtotal(); |
465 | 465 | $response['data']['subtotalf'] = $invoice->get_subtotal(true); |
466 | 466 | $response['data']['tax'] = $invoice->get_tax(); |
@@ -472,25 +472,25 @@ discard block |
||
472 | 472 | |
473 | 473 | wpinv_set_checkout_session($checkout_session); |
474 | 474 | |
475 | - wp_send_json( $response ); |
|
475 | + wp_send_json($response); |
|
476 | 476 | } |
477 | 477 | |
478 | 478 | public static function admin_apply_discount() { |
479 | 479 | global $wpi_userID; |
480 | 480 | |
481 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
482 | - if ( !current_user_can( 'manage_options' ) ) { |
|
481 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
482 | + if (!current_user_can('manage_options')) { |
|
483 | 483 | die(-1); |
484 | 484 | } |
485 | 485 | |
486 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
487 | - $discount_code = sanitize_text_field( $_POST['code'] ); |
|
488 | - if ( empty( $invoice_id ) || empty( $discount_code ) ) { |
|
486 | + $invoice_id = absint($_POST['invoice_id']); |
|
487 | + $discount_code = sanitize_text_field($_POST['code']); |
|
488 | + if (empty($invoice_id) || empty($discount_code)) { |
|
489 | 489 | die(); |
490 | 490 | } |
491 | 491 | |
492 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
493 | - if ( empty( $invoice ) || ( !empty( $invoice ) && $invoice->is_paid() ) ) { |
|
492 | + $invoice = wpinv_get_invoice($invoice_id); |
|
493 | + if (empty($invoice) || (!empty($invoice) && $invoice->is_paid())) { |
|
494 | 494 | die(); |
495 | 495 | } |
496 | 496 | |
@@ -498,49 +498,49 @@ discard block |
||
498 | 498 | |
499 | 499 | $data = array(); |
500 | 500 | $data['invoice_id'] = $invoice_id; |
501 | - $data['cart_discounts'] = $invoice->get_discounts( true ); |
|
501 | + $data['cart_discounts'] = $invoice->get_discounts(true); |
|
502 | 502 | |
503 | - wpinv_set_checkout_session( $data ); |
|
503 | + wpinv_set_checkout_session($data); |
|
504 | 504 | |
505 | 505 | $response = array(); |
506 | 506 | $response['success'] = false; |
507 | - $response['msg'] = __( 'This discount is invalid.', 'invoicing' ); |
|
507 | + $response['msg'] = __('This discount is invalid.', 'invoicing'); |
|
508 | 508 | $response['data']['code'] = $discount_code; |
509 | 509 | |
510 | - if ( wpinv_is_discount_valid( $discount_code, $invoice->get_user_id() ) ) { |
|
511 | - $discounts = wpinv_set_cart_discount( $discount_code ); |
|
510 | + if (wpinv_is_discount_valid($discount_code, $invoice->get_user_id())) { |
|
511 | + $discounts = wpinv_set_cart_discount($discount_code); |
|
512 | 512 | |
513 | 513 | $response['success'] = true; |
514 | - $response['msg'] = __( 'Discount has been applied successfully.', 'invoicing' ); |
|
515 | - } else { |
|
514 | + $response['msg'] = __('Discount has been applied successfully.', 'invoicing'); |
|
515 | + } else { |
|
516 | 516 | $errors = wpinv_get_errors(); |
517 | - if ( !empty( $errors['wpinv-discount-error'] ) ) { |
|
517 | + if (!empty($errors['wpinv-discount-error'])) { |
|
518 | 518 | $response['msg'] = $errors['wpinv-discount-error']; |
519 | 519 | } |
520 | - wpinv_unset_error( 'wpinv-discount-error' ); |
|
520 | + wpinv_unset_error('wpinv-discount-error'); |
|
521 | 521 | } |
522 | 522 | |
523 | 523 | wpinv_set_checkout_session($checkout_session); |
524 | 524 | |
525 | - wp_send_json( $response ); |
|
525 | + wp_send_json($response); |
|
526 | 526 | } |
527 | 527 | |
528 | 528 | public static function admin_remove_discount() { |
529 | 529 | global $wpi_userID; |
530 | 530 | |
531 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
532 | - if ( !current_user_can( 'manage_options' ) ) { |
|
531 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
532 | + if (!current_user_can('manage_options')) { |
|
533 | 533 | die(-1); |
534 | 534 | } |
535 | 535 | |
536 | - $invoice_id = absint( $_POST['invoice_id'] ); |
|
537 | - $discount_code = sanitize_text_field( $_POST['code'] ); |
|
538 | - if ( empty( $invoice_id ) || empty( $discount_code ) ) { |
|
536 | + $invoice_id = absint($_POST['invoice_id']); |
|
537 | + $discount_code = sanitize_text_field($_POST['code']); |
|
538 | + if (empty($invoice_id) || empty($discount_code)) { |
|
539 | 539 | die(); |
540 | 540 | } |
541 | 541 | |
542 | - $invoice = wpinv_get_invoice( $invoice_id ); |
|
543 | - if ( empty( $invoice ) || ( !empty( $invoice ) && $invoice->is_paid() ) ) { |
|
542 | + $invoice = wpinv_get_invoice($invoice_id); |
|
543 | + if (empty($invoice) || (!empty($invoice) && $invoice->is_paid())) { |
|
544 | 544 | die(); |
545 | 545 | } |
546 | 546 | |
@@ -548,38 +548,38 @@ discard block |
||
548 | 548 | |
549 | 549 | $data = array(); |
550 | 550 | $data['invoice_id'] = $invoice_id; |
551 | - $data['cart_discounts'] = $invoice->get_discounts( true ); |
|
551 | + $data['cart_discounts'] = $invoice->get_discounts(true); |
|
552 | 552 | |
553 | - wpinv_set_checkout_session( $data ); |
|
553 | + wpinv_set_checkout_session($data); |
|
554 | 554 | |
555 | 555 | $response = array(); |
556 | 556 | $response['success'] = false; |
557 | 557 | $response['msg'] = NULL; |
558 | 558 | |
559 | - $discounts = wpinv_unset_cart_discount( $discount_code ); |
|
559 | + $discounts = wpinv_unset_cart_discount($discount_code); |
|
560 | 560 | $response['success'] = true; |
561 | - $response['msg'] = __( 'Discount has been removed successfully.', 'invoicing' ); |
|
561 | + $response['msg'] = __('Discount has been removed successfully.', 'invoicing'); |
|
562 | 562 | |
563 | 563 | wpinv_set_checkout_session($checkout_session); |
564 | 564 | |
565 | - wp_send_json( $response ); |
|
565 | + wp_send_json($response); |
|
566 | 566 | } |
567 | 567 | |
568 | 568 | public static function check_email() { |
569 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
570 | - if ( !current_user_can( 'manage_options' ) ) { |
|
569 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
570 | + if (!current_user_can('manage_options')) { |
|
571 | 571 | die(-1); |
572 | 572 | } |
573 | 573 | |
574 | - $email = sanitize_text_field( $_POST['email'] ); |
|
574 | + $email = sanitize_text_field($_POST['email']); |
|
575 | 575 | |
576 | 576 | $response = array(); |
577 | - if ( is_email( $email ) && email_exists( $email ) && $user_data = get_user_by( 'email', $email ) ) { |
|
577 | + if (is_email($email) && email_exists($email) && $user_data = get_user_by('email', $email)) { |
|
578 | 578 | $user_id = $user_data->ID; |
579 | 579 | $user_login = $user_data->user_login; |
580 | 580 | $display_name = $user_data->display_name ? $user_data->display_name : $user_login; |
581 | 581 | $billing_details = wpinv_get_user_address($user_id); |
582 | - $billing_details = apply_filters( 'wpinv_fill_billing_details', $billing_details, $user_id ); |
|
582 | + $billing_details = apply_filters('wpinv_fill_billing_details', $billing_details, $user_id); |
|
583 | 583 | |
584 | 584 | if (isset($billing_details['user_id'])) { |
585 | 585 | unset($billing_details['user_id']); |
@@ -595,31 +595,31 @@ discard block |
||
595 | 595 | $response['data']['billing_details'] = $billing_details; |
596 | 596 | } |
597 | 597 | |
598 | - wp_send_json( $response ); |
|
598 | + wp_send_json($response); |
|
599 | 599 | } |
600 | 600 | |
601 | 601 | public static function run_tool() { |
602 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
603 | - if ( !current_user_can( 'manage_options' ) ) { |
|
602 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
603 | + if (!current_user_can('manage_options')) { |
|
604 | 604 | die(-1); |
605 | 605 | } |
606 | 606 | |
607 | - $tool = sanitize_text_field( $_POST['tool'] ); |
|
607 | + $tool = sanitize_text_field($_POST['tool']); |
|
608 | 608 | |
609 | - do_action( 'wpinv_run_tool' ); |
|
609 | + do_action('wpinv_run_tool'); |
|
610 | 610 | |
611 | - if ( !empty( $tool ) ) { |
|
612 | - do_action( 'wpinv_tool_' . $tool ); |
|
611 | + if (!empty($tool)) { |
|
612 | + do_action('wpinv_tool_' . $tool); |
|
613 | 613 | } |
614 | 614 | } |
615 | 615 | |
616 | 616 | public static function apply_discount() { |
617 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
617 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
618 | 618 | |
619 | 619 | $response = array(); |
620 | 620 | |
621 | - if ( isset( $_POST['code'] ) ) { |
|
622 | - $discount_code = sanitize_text_field( $_POST['code'] ); |
|
621 | + if (isset($_POST['code'])) { |
|
622 | + $discount_code = sanitize_text_field($_POST['code']); |
|
623 | 623 | |
624 | 624 | $response['success'] = false; |
625 | 625 | $response['msg'] = ''; |
@@ -627,14 +627,14 @@ discard block |
||
627 | 627 | |
628 | 628 | $user = is_user_logged_in() ? get_current_user_id() : ''; |
629 | 629 | |
630 | - if ( wpinv_is_discount_valid( $discount_code, $user ) ) { |
|
631 | - $discount = wpinv_get_discount_by_code( $discount_code ); |
|
632 | - $discounts = wpinv_set_cart_discount( $discount_code ); |
|
633 | - $amount = wpinv_format_discount_rate( wpinv_get_discount_type( $discount->ID ), wpinv_get_discount_amount( $discount->ID ) ); |
|
634 | - $total = wpinv_get_cart_total( null, $discounts ); |
|
635 | - $cart_totals = wpinv_recalculate_tax( true ); |
|
630 | + if (wpinv_is_discount_valid($discount_code, $user)) { |
|
631 | + $discount = wpinv_get_discount_by_code($discount_code); |
|
632 | + $discounts = wpinv_set_cart_discount($discount_code); |
|
633 | + $amount = wpinv_format_discount_rate(wpinv_get_discount_type($discount->ID), wpinv_get_discount_amount($discount->ID)); |
|
634 | + $total = wpinv_get_cart_total(null, $discounts); |
|
635 | + $cart_totals = wpinv_recalculate_tax(true); |
|
636 | 636 | |
637 | - if ( !empty( $cart_totals ) ) { |
|
637 | + if (!empty($cart_totals)) { |
|
638 | 638 | $response['success'] = true; |
639 | 639 | $response['data'] = $cart_totals; |
640 | 640 | $response['data']['code'] = $discount_code; |
@@ -643,29 +643,29 @@ discard block |
||
643 | 643 | } |
644 | 644 | } else { |
645 | 645 | $errors = wpinv_get_errors(); |
646 | - $response['msg'] = $errors['wpinv-discount-error']; |
|
647 | - wpinv_unset_error( 'wpinv-discount-error' ); |
|
646 | + $response['msg'] = $errors['wpinv-discount-error']; |
|
647 | + wpinv_unset_error('wpinv-discount-error'); |
|
648 | 648 | } |
649 | 649 | |
650 | 650 | // Allow for custom discount code handling |
651 | - $response = apply_filters( 'wpinv_ajax_discount_response', $response ); |
|
651 | + $response = apply_filters('wpinv_ajax_discount_response', $response); |
|
652 | 652 | } |
653 | 653 | |
654 | - wp_send_json( $response ); |
|
654 | + wp_send_json($response); |
|
655 | 655 | } |
656 | 656 | |
657 | 657 | public static function remove_discount() { |
658 | - check_ajax_referer( 'wpinv-nonce', '_nonce' ); |
|
658 | + check_ajax_referer('wpinv-nonce', '_nonce'); |
|
659 | 659 | |
660 | 660 | $response = array(); |
661 | 661 | |
662 | - if ( isset( $_POST['code'] ) ) { |
|
663 | - $discount_code = sanitize_text_field( $_POST['code'] ); |
|
664 | - $discounts = wpinv_unset_cart_discount( $discount_code ); |
|
665 | - $total = wpinv_get_cart_total( null, $discounts ); |
|
666 | - $cart_totals = wpinv_recalculate_tax( true ); |
|
662 | + if (isset($_POST['code'])) { |
|
663 | + $discount_code = sanitize_text_field($_POST['code']); |
|
664 | + $discounts = wpinv_unset_cart_discount($discount_code); |
|
665 | + $total = wpinv_get_cart_total(null, $discounts); |
|
666 | + $cart_totals = wpinv_recalculate_tax(true); |
|
667 | 667 | |
668 | - if ( !empty( $cart_totals ) ) { |
|
668 | + if (!empty($cart_totals)) { |
|
669 | 669 | $response['success'] = true; |
670 | 670 | $response['data'] = $cart_totals; |
671 | 671 | $response['data']['code'] = $discount_code; |
@@ -674,10 +674,10 @@ discard block |
||
674 | 674 | } |
675 | 675 | |
676 | 676 | // Allow for custom discount code handling |
677 | - $response = apply_filters( 'wpinv_ajax_discount_response', $response ); |
|
677 | + $response = apply_filters('wpinv_ajax_discount_response', $response); |
|
678 | 678 | } |
679 | 679 | |
680 | - wp_send_json( $response ); |
|
680 | + wp_send_json($response); |
|
681 | 681 | } |
682 | 682 | } |
683 | 683 |
@@ -140,8 +140,8 @@ discard block |
||
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 |
||
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 |
@@ -7,36 +7,36 @@ discard block |
||
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 | -add_action( 'init', 'wpinv_register_post_types', 1 ); |
|
14 | +add_action('init', 'wpinv_register_post_types', 1); |
|
15 | 15 | function wpinv_register_post_types() { |
16 | 16 | $labels = array( |
17 | - 'name' => _x( 'Invoices', 'post type general name', 'invoicing' ), |
|
18 | - 'singular_name' => _x( 'Invoice', 'post type singular name', 'invoicing' ), |
|
19 | - 'menu_name' => _x( 'Invoices', 'admin menu', 'invoicing' ), |
|
20 | - 'name_admin_bar' => _x( 'Invoice', 'add new on admin bar', 'invoicing' ), |
|
21 | - 'add_new' => _x( 'Add New', 'book', 'invoicing' ), |
|
22 | - 'add_new_item' => __( 'Add New Invoice', 'invoicing' ), |
|
23 | - 'new_item' => __( 'New Invoice', 'invoicing' ), |
|
24 | - 'edit_item' => __( 'Edit Invoice', 'invoicing' ), |
|
25 | - 'view_item' => __( 'View Invoice', 'invoicing' ), |
|
26 | - 'all_items' => __( 'Invoices', 'invoicing' ), |
|
27 | - 'search_items' => __( 'Search Invoices', 'invoicing' ), |
|
28 | - 'parent_item_colon' => __( 'Parent Invoices:', 'invoicing' ), |
|
29 | - 'not_found' => __( 'No invoices found.', 'invoicing' ), |
|
30 | - 'not_found_in_trash' => __( 'No invoices found in trash.', 'invoicing' ) |
|
17 | + 'name' => _x('Invoices', 'post type general name', 'invoicing'), |
|
18 | + 'singular_name' => _x('Invoice', 'post type singular name', 'invoicing'), |
|
19 | + 'menu_name' => _x('Invoices', 'admin menu', 'invoicing'), |
|
20 | + 'name_admin_bar' => _x('Invoice', 'add new on admin bar', 'invoicing'), |
|
21 | + 'add_new' => _x('Add New', 'book', 'invoicing'), |
|
22 | + 'add_new_item' => __('Add New Invoice', 'invoicing'), |
|
23 | + 'new_item' => __('New Invoice', 'invoicing'), |
|
24 | + 'edit_item' => __('Edit Invoice', 'invoicing'), |
|
25 | + 'view_item' => __('View Invoice', 'invoicing'), |
|
26 | + 'all_items' => __('Invoices', 'invoicing'), |
|
27 | + 'search_items' => __('Search Invoices', 'invoicing'), |
|
28 | + 'parent_item_colon' => __('Parent Invoices:', 'invoicing'), |
|
29 | + 'not_found' => __('No invoices found.', 'invoicing'), |
|
30 | + 'not_found_in_trash' => __('No invoices found in trash.', 'invoicing') |
|
31 | 31 | ); |
32 | - $labels = apply_filters( 'wpinv_labels', $labels ); |
|
32 | + $labels = apply_filters('wpinv_labels', $labels); |
|
33 | 33 | |
34 | 34 | $menu_icon = WPINV_PLUGIN_URL . '/assets/images/favicon.ico'; |
35 | - $menu_icon = apply_filters( 'wpinv_menu_icon_invoice', $menu_icon ); |
|
35 | + $menu_icon = apply_filters('wpinv_menu_icon_invoice', $menu_icon); |
|
36 | 36 | |
37 | 37 | $args = array( |
38 | 38 | 'labels' => $labels, |
39 | - 'description' => __( 'This is where invoices are stored.', 'invoicing' ), |
|
39 | + 'description' => __('This is where invoices are stored.', 'invoicing'), |
|
40 | 40 | 'public' => true, |
41 | 41 | 'can_export' => true, |
42 | 42 | '_builtin' => false, |
@@ -50,68 +50,68 @@ discard block |
||
50 | 50 | 'has_archive' => false, |
51 | 51 | 'hierarchical' => false, |
52 | 52 | 'menu_position' => null, |
53 | - 'supports' => array( 'title', 'author' ), |
|
53 | + 'supports' => array('title', 'author'), |
|
54 | 54 | 'menu_icon' => $menu_icon, |
55 | 55 | ); |
56 | 56 | |
57 | - $args = apply_filters( 'wpinv_register_post_type_invoice', $args ); |
|
57 | + $args = apply_filters('wpinv_register_post_type_invoice', $args); |
|
58 | 58 | |
59 | - register_post_type( 'wpi_invoice', $args ); |
|
59 | + register_post_type('wpi_invoice', $args); |
|
60 | 60 | |
61 | 61 | $items_labels = array( |
62 | - 'name' => _x( 'Items', 'post type general name', 'invoicing' ), |
|
63 | - 'singular_name' => _x( 'Item', 'post type singular name', 'invoicing' ), |
|
64 | - 'menu_name' => _x( 'Items', 'admin menu', 'invoicing' ), |
|
65 | - 'add_new' => _x( 'Add New', 'wpi_item', 'invoicing' ), |
|
66 | - 'add_new_item' => __( 'Add New Item', 'invoicing' ), |
|
67 | - 'new_item' => __( 'New Item', 'invoicing' ), |
|
68 | - 'edit_item' => __( 'Edit Item', 'invoicing' ), |
|
69 | - 'view_item' => __( 'View Item', 'invoicing' ), |
|
70 | - 'all_items' => __( 'Items', 'invoicing' ), |
|
71 | - 'search_items' => __( 'Search Items', 'invoicing' ), |
|
62 | + 'name' => _x('Items', 'post type general name', 'invoicing'), |
|
63 | + 'singular_name' => _x('Item', 'post type singular name', 'invoicing'), |
|
64 | + 'menu_name' => _x('Items', 'admin menu', 'invoicing'), |
|
65 | + 'add_new' => _x('Add New', 'wpi_item', 'invoicing'), |
|
66 | + 'add_new_item' => __('Add New Item', 'invoicing'), |
|
67 | + 'new_item' => __('New Item', 'invoicing'), |
|
68 | + 'edit_item' => __('Edit Item', 'invoicing'), |
|
69 | + 'view_item' => __('View Item', 'invoicing'), |
|
70 | + 'all_items' => __('Items', 'invoicing'), |
|
71 | + 'search_items' => __('Search Items', 'invoicing'), |
|
72 | 72 | 'parent_item_colon' => '', |
73 | - 'not_found' => __( 'No items found.', 'invoicing' ), |
|
74 | - 'not_found_in_trash' => __( 'No items found in trash.', 'invoicing' ) |
|
73 | + 'not_found' => __('No items found.', 'invoicing'), |
|
74 | + 'not_found_in_trash' => __('No items found in trash.', 'invoicing') |
|
75 | 75 | ); |
76 | - $items_labels = apply_filters( 'wpinv_items_labels', $items_labels ); |
|
76 | + $items_labels = apply_filters('wpinv_items_labels', $items_labels); |
|
77 | 77 | |
78 | 78 | $invoice_item_args = array( |
79 | 79 | 'labels' => $items_labels, |
80 | 80 | 'public' => false, |
81 | 81 | 'show_ui' => true, |
82 | 82 | 'show_in_menu' => 'wpinv', |
83 | - 'supports' => array( 'title', 'excerpt' ), |
|
83 | + 'supports' => array('title', 'excerpt'), |
|
84 | 84 | 'register_meta_box_cb' => 'wpinv_register_item_meta_boxes', |
85 | 85 | 'rewrite' => false, |
86 | 86 | 'query_var' => false, |
87 | 87 | 'map_meta_cap' => true, |
88 | 88 | 'can_export' => true, |
89 | 89 | ); |
90 | - $invoice_item_args = apply_filters( 'wpinv_register_post_type_invoice_item', $invoice_item_args ); |
|
90 | + $invoice_item_args = apply_filters('wpinv_register_post_type_invoice_item', $invoice_item_args); |
|
91 | 91 | |
92 | - register_post_type( 'wpi_item', $invoice_item_args ); |
|
92 | + register_post_type('wpi_item', $invoice_item_args); |
|
93 | 93 | |
94 | 94 | $labels = array( |
95 | - 'name' => _x( 'Discounts', 'post type general name', 'invoicing' ), |
|
96 | - 'singular_name' => _x( 'Discount', 'post type singular name', 'invoicing' ), |
|
97 | - 'menu_name' => _x( 'Discounts', 'admin menu', 'invoicing' ), |
|
98 | - 'name_admin_bar' => _x( 'Discount', 'add new on admin bar', 'invoicing' ), |
|
99 | - 'add_new' => _x( 'Add New', 'book', 'invoicing' ), |
|
100 | - 'add_new_item' => __( 'Add New Discount', 'invoicing' ), |
|
101 | - 'new_item' => __( 'New Discount', 'invoicing' ), |
|
102 | - 'edit_item' => __( 'Edit Discount', 'invoicing' ), |
|
103 | - 'view_item' => __( 'View Discount', 'invoicing' ), |
|
104 | - 'all_items' => __( 'Discounts', 'invoicing' ), |
|
105 | - 'search_items' => __( 'Search Discounts', 'invoicing' ), |
|
106 | - 'parent_item_colon' => __( 'Parent Discounts:', 'invoicing' ), |
|
107 | - 'not_found' => __( 'No discounts found.', 'invoicing' ), |
|
108 | - 'not_found_in_trash' => __( 'No discounts found in trash.', 'invoicing' ) |
|
95 | + 'name' => _x('Discounts', 'post type general name', 'invoicing'), |
|
96 | + 'singular_name' => _x('Discount', 'post type singular name', 'invoicing'), |
|
97 | + 'menu_name' => _x('Discounts', 'admin menu', 'invoicing'), |
|
98 | + 'name_admin_bar' => _x('Discount', 'add new on admin bar', 'invoicing'), |
|
99 | + 'add_new' => _x('Add New', 'book', 'invoicing'), |
|
100 | + 'add_new_item' => __('Add New Discount', 'invoicing'), |
|
101 | + 'new_item' => __('New Discount', 'invoicing'), |
|
102 | + 'edit_item' => __('Edit Discount', 'invoicing'), |
|
103 | + 'view_item' => __('View Discount', 'invoicing'), |
|
104 | + 'all_items' => __('Discounts', 'invoicing'), |
|
105 | + 'search_items' => __('Search Discounts', 'invoicing'), |
|
106 | + 'parent_item_colon' => __('Parent Discounts:', 'invoicing'), |
|
107 | + 'not_found' => __('No discounts found.', 'invoicing'), |
|
108 | + 'not_found_in_trash' => __('No discounts found in trash.', 'invoicing') |
|
109 | 109 | ); |
110 | - $labels = apply_filters( 'wpinv_discounts_labels', $labels ); |
|
110 | + $labels = apply_filters('wpinv_discounts_labels', $labels); |
|
111 | 111 | |
112 | 112 | $args = array( |
113 | 113 | 'labels' => $labels, |
114 | - 'description' => __( 'This is where you can add new discounts that users can use in invoices.', 'invoicing' ), |
|
114 | + 'description' => __('This is where you can add new discounts that users can use in invoices.', 'invoicing'), |
|
115 | 115 | 'public' => false, |
116 | 116 | 'can_export' => true, |
117 | 117 | '_builtin' => false, |
@@ -125,7 +125,7 @@ discard block |
||
125 | 125 | 'map_meta_cap' => true, |
126 | 126 | 'has_archive' => false, |
127 | 127 | 'hierarchical' => false, |
128 | - 'supports' => array( 'title', 'excerpt' ), |
|
128 | + 'supports' => array('title', 'excerpt'), |
|
129 | 129 | 'register_meta_box_cb' => 'wpinv_register_discount_meta_boxes', |
130 | 130 | 'show_in_nav_menus' => false, |
131 | 131 | 'show_in_admin_bar' => true, |
@@ -133,99 +133,99 @@ discard block |
||
133 | 133 | 'menu_position' => null, |
134 | 134 | ); |
135 | 135 | |
136 | - $args = apply_filters( 'wpinv_register_post_type_discount', $args ); |
|
136 | + $args = apply_filters('wpinv_register_post_type_discount', $args); |
|
137 | 137 | |
138 | - register_post_type( 'wpi_discount', $args ); |
|
138 | + register_post_type('wpi_discount', $args); |
|
139 | 139 | } |
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 | - return apply_filters( 'wpinv_default_invoices_name', $defaults ); |
|
147 | + return apply_filters('wpinv_default_invoices_name', $defaults); |
|
148 | 148 | } |
149 | 149 | |
150 | -function wpinv_get_label_singular( $lowercase = false ) { |
|
150 | +function wpinv_get_label_singular($lowercase = false) { |
|
151 | 151 | $defaults = wpinv_get_default_labels(); |
152 | 152 | |
153 | - return ($lowercase) ? strtolower( $defaults['singular'] ) : $defaults['singular']; |
|
153 | + return ($lowercase) ? strtolower($defaults['singular']) : $defaults['singular']; |
|
154 | 154 | } |
155 | 155 | |
156 | -function wpinv_get_label_plural( $lowercase = false ) { |
|
156 | +function wpinv_get_label_plural($lowercase = false) { |
|
157 | 157 | $defaults = wpinv_get_default_labels(); |
158 | 158 | |
159 | - return ( $lowercase ) ? strtolower( $defaults['plural'] ) : $defaults['plural']; |
|
159 | + return ($lowercase) ? strtolower($defaults['plural']) : $defaults['plural']; |
|
160 | 160 | } |
161 | 161 | |
162 | -function wpinv_change_default_title( $title ) { |
|
163 | - if ( !is_admin() ) { |
|
162 | +function wpinv_change_default_title($title) { |
|
163 | + if (!is_admin()) { |
|
164 | 164 | $label = wpinv_get_label_singular(); |
165 | - $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label ); |
|
165 | + $title = sprintf(__('Enter %s name here', 'invoicing'), $label); |
|
166 | 166 | return $title; |
167 | 167 | } |
168 | 168 | |
169 | 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 | - $title = sprintf( __( 'Enter %s name here', 'invoicing' ), $label ); |
|
173 | + $title = sprintf(__('Enter %s name here', 'invoicing'), $label); |
|
174 | 174 | } |
175 | 175 | |
176 | 176 | return $title; |
177 | 177 | } |
178 | -add_filter( 'enter_title_here', 'wpinv_change_default_title' ); |
|
178 | +add_filter('enter_title_here', 'wpinv_change_default_title'); |
|
179 | 179 | |
180 | 180 | function wpinv_register_post_status() { |
181 | - register_post_status( 'wpi-processing', array( |
|
182 | - 'label' => _x( 'Processing', 'Invoice status', 'invoicing' ), |
|
181 | + register_post_status('wpi-processing', array( |
|
182 | + 'label' => _x('Processing', 'Invoice status', 'invoicing'), |
|
183 | 183 | 'public' => true, |
184 | 184 | 'exclude_from_search' => true, |
185 | 185 | 'show_in_admin_all_list' => true, |
186 | 186 | 'show_in_admin_status_list' => true, |
187 | - 'label_count' => _n_noop( 'Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing' ) |
|
188 | - ) ); |
|
189 | - register_post_status( 'wpi-onhold', array( |
|
190 | - 'label' => _x( 'On Hold', 'Invoice status', 'invoicing' ), |
|
187 | + 'label_count' => _n_noop('Processing <span class="count">(%s)</span>', 'Processing <span class="count">(%s)</span>', 'invoicing') |
|
188 | + )); |
|
189 | + register_post_status('wpi-onhold', array( |
|
190 | + 'label' => _x('On Hold', 'Invoice status', 'invoicing'), |
|
191 | 191 | 'public' => true, |
192 | 192 | 'exclude_from_search' => true, |
193 | 193 | 'show_in_admin_all_list' => true, |
194 | 194 | 'show_in_admin_status_list' => true, |
195 | - 'label_count' => _n_noop( 'On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing' ) |
|
196 | - ) ); |
|
197 | - register_post_status( 'wpi-cancelled', array( |
|
198 | - 'label' => _x( 'Cancelled', 'Invoice status', 'invoicing' ), |
|
195 | + 'label_count' => _n_noop('On Hold <span class="count">(%s)</span>', 'On Hold <span class="count">(%s)</span>', 'invoicing') |
|
196 | + )); |
|
197 | + register_post_status('wpi-cancelled', array( |
|
198 | + 'label' => _x('Cancelled', 'Invoice status', 'invoicing'), |
|
199 | 199 | 'public' => true, |
200 | 200 | 'exclude_from_search' => true, |
201 | 201 | 'show_in_admin_all_list' => true, |
202 | 202 | 'show_in_admin_status_list' => true, |
203 | - 'label_count' => _n_noop( 'Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing' ) |
|
204 | - ) ); |
|
205 | - register_post_status( 'wpi-refunded', array( |
|
206 | - 'label' => _x( 'Refunded', 'Invoice status', 'invoicing' ), |
|
203 | + 'label_count' => _n_noop('Cancelled <span class="count">(%s)</span>', 'Cancelled <span class="count">(%s)</span>', 'invoicing') |
|
204 | + )); |
|
205 | + register_post_status('wpi-refunded', array( |
|
206 | + 'label' => _x('Refunded', 'Invoice status', 'invoicing'), |
|
207 | 207 | 'public' => true, |
208 | 208 | 'exclude_from_search' => true, |
209 | 209 | 'show_in_admin_all_list' => true, |
210 | 210 | 'show_in_admin_status_list' => true, |
211 | - 'label_count' => _n_noop( 'Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing' ) |
|
212 | - ) ); |
|
213 | - register_post_status( 'wpi-failed', array( |
|
214 | - 'label' => _x( 'Failed', 'Invoice status', 'invoicing' ), |
|
211 | + 'label_count' => _n_noop('Refunded <span class="count">(%s)</span>', 'Refunded <span class="count">(%s)</span>', 'invoicing') |
|
212 | + )); |
|
213 | + register_post_status('wpi-failed', array( |
|
214 | + 'label' => _x('Failed', 'Invoice status', 'invoicing'), |
|
215 | 215 | 'public' => true, |
216 | 216 | 'exclude_from_search' => true, |
217 | 217 | 'show_in_admin_all_list' => true, |
218 | 218 | 'show_in_admin_status_list' => true, |
219 | - 'label_count' => _n_noop( 'Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing' ) |
|
220 | - ) ); |
|
221 | - register_post_status( 'wpi-renewal', array( |
|
222 | - 'label' => _x( 'Renewal', 'Invoice status', 'invoicing' ), |
|
219 | + 'label_count' => _n_noop('Failed <span class="count">(%s)</span>', 'Failed <span class="count">(%s)</span>', 'invoicing') |
|
220 | + )); |
|
221 | + register_post_status('wpi-renewal', array( |
|
222 | + 'label' => _x('Renewal', 'Invoice status', 'invoicing'), |
|
223 | 223 | 'public' => true, |
224 | 224 | 'exclude_from_search' => true, |
225 | 225 | 'show_in_admin_all_list' => true, |
226 | 226 | 'show_in_admin_status_list' => true, |
227 | - 'label_count' => _n_noop( 'Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing' ) |
|
228 | - ) ); |
|
227 | + 'label_count' => _n_noop('Renewal <span class="count">(%s)</span>', 'Renewal <span class="count">(%s)</span>', 'invoicing') |
|
228 | + )); |
|
229 | 229 | } |
230 | -add_action( 'init', 'wpinv_register_post_status', 10 ); |
|
230 | +add_action('init', 'wpinv_register_post_status', 10); |
|
231 | 231 |
@@ -166,13 +166,13 @@ |
||
166 | 166 | $is_writeable = $is_dir && is_writeable( $this->export_dir ); |
167 | 167 | |
168 | 168 | if ( $is_dir && $is_writeable ) { |
169 | - return true; |
|
169 | + return true; |
|
170 | 170 | } else if ( $is_dir && !$is_writeable ) { |
171 | - if ( !$this->wp_filesystem->chmod( $this->export_dir, FS_CHMOD_DIR ) ) { |
|
172 | - return wp_sprintf( __( 'Filesystem ERROR: Export location %s is not writable, check your file permissions.', 'invoicing' ), $this->export_dir ); |
|
173 | - } |
|
171 | + if ( !$this->wp_filesystem->chmod( $this->export_dir, FS_CHMOD_DIR ) ) { |
|
172 | + return wp_sprintf( __( 'Filesystem ERROR: Export location %s is not writable, check your file permissions.', 'invoicing' ), $this->export_dir ); |
|
173 | + } |
|
174 | 174 | |
175 | - return true; |
|
175 | + return true; |
|
176 | 176 | } else { |
177 | 177 | if ( !$this->wp_filesystem->mkdir( $this->export_dir, FS_CHMOD_DIR ) ) { |
178 | 178 | return wp_sprintf( __( 'Filesystem ERROR: Could not create directory %s. This is usually due to inconsistent file permissions.', 'invoicing' ), $this->export_dir ); |
@@ -1,5 +1,5 @@ discard block |
||
1 | 1 | <?php |
2 | -if ( ! defined( 'ABSPATH' ) ) { |
|
2 | +if (!defined('ABSPATH')) { |
|
3 | 3 | exit; // Exit if accessed directly |
4 | 4 | } |
5 | 5 | |
@@ -21,68 +21,68 @@ discard block |
||
21 | 21 | public function init() { |
22 | 22 | global $wp_filesystem; |
23 | 23 | |
24 | - if ( empty( $wp_filesystem ) ) { |
|
25 | - require_once( ABSPATH . '/wp-admin/includes/file.php' ); |
|
24 | + if (empty($wp_filesystem)) { |
|
25 | + require_once(ABSPATH . '/wp-admin/includes/file.php'); |
|
26 | 26 | WP_Filesystem(); |
27 | 27 | global $wp_filesystem; |
28 | 28 | } |
29 | 29 | $this->wp_filesystem = $wp_filesystem; |
30 | 30 | |
31 | 31 | $this->export_dir = $this->export_location(); |
32 | - $this->export_url = $this->export_location( true ); |
|
32 | + $this->export_url = $this->export_location(true); |
|
33 | 33 | $this->export = 'invoicing'; |
34 | 34 | $this->filetype = 'csv'; |
35 | 35 | $this->per_page = 20; |
36 | 36 | |
37 | - do_action( 'wpinv_class_reports_init', $this ); |
|
37 | + do_action('wpinv_class_reports_init', $this); |
|
38 | 38 | } |
39 | 39 | |
40 | 40 | public function includes() { |
41 | - do_action( 'wpinv_class_reports_includes', $this ); |
|
41 | + do_action('wpinv_class_reports_includes', $this); |
|
42 | 42 | } |
43 | 43 | |
44 | 44 | public function actions() { |
45 | - if ( is_admin() ) { |
|
46 | - add_action( 'admin_menu', array( $this, 'add_submenu' ), 10 ); |
|
47 | - add_action( 'wpinv_reports_tab_export', array( $this, 'export' ) ); |
|
48 | - add_action( 'wp_ajax_wpinv_ajax_export', array( $this, 'ajax_export' ) ); |
|
45 | + if (is_admin()) { |
|
46 | + add_action('admin_menu', array($this, 'add_submenu'), 10); |
|
47 | + add_action('wpinv_reports_tab_export', array($this, 'export')); |
|
48 | + add_action('wp_ajax_wpinv_ajax_export', array($this, 'ajax_export')); |
|
49 | 49 | |
50 | 50 | // Export Invoices. |
51 | - add_action( 'wpinv_export_set_params_invoices', array( $this, 'set_invoices_export' ) ); |
|
52 | - add_filter( 'wpinv_export_get_columns_invoices', array( $this, 'get_invoices_columns' ) ); |
|
53 | - add_filter( 'wpinv_export_get_data_invoices', array( $this, 'get_invoices_data' ) ); |
|
54 | - add_filter( 'wpinv_get_export_status_invoices', array( $this, 'invoices_export_status' ) ); |
|
51 | + add_action('wpinv_export_set_params_invoices', array($this, 'set_invoices_export')); |
|
52 | + add_filter('wpinv_export_get_columns_invoices', array($this, 'get_invoices_columns')); |
|
53 | + add_filter('wpinv_export_get_data_invoices', array($this, 'get_invoices_data')); |
|
54 | + add_filter('wpinv_get_export_status_invoices', array($this, 'invoices_export_status')); |
|
55 | 55 | } |
56 | - do_action( 'wpinv_class_reports_actions', $this ); |
|
56 | + do_action('wpinv_class_reports_actions', $this); |
|
57 | 57 | } |
58 | 58 | |
59 | 59 | public function add_submenu() { |
60 | 60 | global $wpi_reports_page; |
61 | - $wpi_reports_page = add_submenu_page( 'wpinv', __( 'Reports', 'invoicing' ), __( 'Reports', 'invoicing' ), 'manage_options', 'wpinv-reports', array( $this, 'reports_page' ) ); |
|
61 | + $wpi_reports_page = add_submenu_page('wpinv', __('Reports', 'invoicing'), __('Reports', 'invoicing'), 'manage_options', 'wpinv-reports', array($this, 'reports_page')); |
|
62 | 62 | } |
63 | 63 | |
64 | 64 | public function reports_page() { |
65 | - if ( !wp_script_is( 'postbox', 'enqueued' ) ) { |
|
66 | - wp_enqueue_script( 'postbox' ); |
|
65 | + if (!wp_script_is('postbox', 'enqueued')) { |
|
66 | + wp_enqueue_script('postbox'); |
|
67 | 67 | } |
68 | - if ( !wp_script_is( 'jquery-ui-datepicker', 'enqueued' ) ) { |
|
69 | - wp_enqueue_script( 'jquery-ui-datepicker' ); |
|
68 | + if (!wp_script_is('jquery-ui-datepicker', 'enqueued')) { |
|
69 | + wp_enqueue_script('jquery-ui-datepicker'); |
|
70 | 70 | } |
71 | 71 | |
72 | - $current_page = admin_url( 'admin.php?page=wpinv-reports' ); |
|
73 | - $active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'export'; |
|
72 | + $current_page = admin_url('admin.php?page=wpinv-reports'); |
|
73 | + $active_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'export'; |
|
74 | 74 | ?> |
75 | 75 | <div class="wrap wpi-reports-wrap"> |
76 | - <h1><?php echo esc_html( __( 'Reports', 'invoicing' ) ); ?></h1> |
|
76 | + <h1><?php echo esc_html(__('Reports', 'invoicing')); ?></h1> |
|
77 | 77 | <h2 class="nav-tab-wrapper wp-clearfix"> |
78 | - <a href="<?php echo add_query_arg( array( 'tab' => 'export', 'settings-updated' => false ), $current_page ); ?>" class="nav-tab <?php echo $active_tab == 'export' ? 'nav-tab-active' : ''; ?>"><?php _e( 'Export', 'invoicing' ); ?></a> |
|
79 | - <?php do_action( 'wpinv_reports_page_tabs' ); ;?> |
|
78 | + <a href="<?php echo add_query_arg(array('tab' => 'export', 'settings-updated' => false), $current_page); ?>" class="nav-tab <?php echo $active_tab == 'export' ? 'nav-tab-active' : ''; ?>"><?php _e('Export', 'invoicing'); ?></a> |
|
79 | + <?php do_action('wpinv_reports_page_tabs'); ;?> |
|
80 | 80 | </h2> |
81 | 81 | <div class="wpi-reports-content wpi-reports-<?php echo $active_tab; ?>"> |
82 | 82 | <?php |
83 | - do_action( 'wpinv_reports_page_top' ); |
|
84 | - do_action( 'wpinv_reports_tab_' . $active_tab ); |
|
85 | - do_action( 'wpinv_reports_page_bottom' ); |
|
83 | + do_action('wpinv_reports_page_top'); |
|
84 | + do_action('wpinv_reports_tab_' . $active_tab); |
|
85 | + do_action('wpinv_reports_page_bottom'); |
|
86 | 86 | ?> |
87 | 87 | </div> |
88 | 88 | <?php |
@@ -90,97 +90,97 @@ discard block |
||
90 | 90 | |
91 | 91 | public function export() { |
92 | 92 | $statuses = wpinv_get_invoice_statuses(); |
93 | - $statuses = array_merge( array( 'any' => __( 'All Statuses', 'invoicing' ) ), $statuses ); |
|
93 | + $statuses = array_merge(array('any' => __('All Statuses', 'invoicing')), $statuses); |
|
94 | 94 | ?> |
95 | 95 | <div class="metabox-holder"> |
96 | 96 | <div id="post-body"> |
97 | 97 | <div id="post-body-content"> |
98 | - <?php do_action( 'wpinv_reports_tab_export_content_top' ); ?> |
|
98 | + <?php do_action('wpinv_reports_tab_export_content_top'); ?> |
|
99 | 99 | |
100 | 100 | <div class="postbox wpi-export-invoices"> |
101 | - <h2 class="hndle ui-sortabled-handle"><span><?php _e( 'Invoices','invoicing' ); ?></span></h2> |
|
101 | + <h2 class="hndle ui-sortabled-handle"><span><?php _e('Invoices', 'invoicing'); ?></span></h2> |
|
102 | 102 | <div class="inside"> |
103 | - <p><?php _e( 'Download a CSV of all payment invoices.', 'invoicing' ); ?></p> |
|
103 | + <p><?php _e('Download a CSV of all payment invoices.', 'invoicing'); ?></p> |
|
104 | 104 | <form id="wpi-export-invoices" class="wpi-export-form" method="post"> |
105 | - <?php echo wpinv_html_date_field( array( |
|
105 | + <?php echo wpinv_html_date_field(array( |
|
106 | 106 | 'id' => 'wpi_export_from_date', |
107 | 107 | 'name' => 'from_date', |
108 | 108 | 'data' => array( |
109 | 109 | 'dateFormat' => 'yy-mm-dd' |
110 | 110 | ), |
111 | - 'placeholder' => __( 'From date', 'invoicing' ) ) |
|
111 | + 'placeholder' => __('From date', 'invoicing') ) |
|
112 | 112 | ); ?> |
113 | - <?php echo wpinv_html_date_field( array( |
|
113 | + <?php echo wpinv_html_date_field(array( |
|
114 | 114 | 'id' => 'wpi_export_to_date', |
115 | 115 | 'name' => 'to_date', |
116 | 116 | 'data' => array( |
117 | 117 | 'dateFormat' => 'yy-mm-dd' |
118 | 118 | ), |
119 | - 'placeholder' => __( 'To date', 'invoicing' ) ) |
|
119 | + 'placeholder' => __('To date', 'invoicing') ) |
|
120 | 120 | ); ?> |
121 | 121 | <span id="wpinv-status-wrap"> |
122 | - <?php echo wpinv_html_select( array( |
|
122 | + <?php echo wpinv_html_select(array( |
|
123 | 123 | 'options' => $statuses, |
124 | 124 | 'name' => 'status', |
125 | 125 | 'id' => 'wpi_export_status', |
126 | 126 | 'show_option_all' => false, |
127 | 127 | 'show_option_none' => false, |
128 | 128 | 'class' => '', |
129 | - ) ); ?> |
|
130 | - <?php wp_nonce_field( 'wpi_ajax_export', 'wpi_ajax_export' ); ?> |
|
129 | + )); ?> |
|
130 | + <?php wp_nonce_field('wpi_ajax_export', 'wpi_ajax_export'); ?> |
|
131 | 131 | </span> |
132 | 132 | <span id="wpinv-submit-wrap"> |
133 | 133 | <input type="hidden" value="invoices" name="export" /> |
134 | - <input type="submit" value="<?php _e( 'Generate CSV', 'invoicing' ); ?>" class="button-primary" /> |
|
134 | + <input type="submit" value="<?php _e('Generate CSV', 'invoicing'); ?>" class="button-primary" /> |
|
135 | 135 | </span> |
136 | 136 | </form> |
137 | 137 | </div> |
138 | 138 | </div> |
139 | 139 | |
140 | - <?php do_action( 'wpinv_reports_tab_export_content_bottom' ); ?> |
|
140 | + <?php do_action('wpinv_reports_tab_export_content_bottom'); ?> |
|
141 | 141 | </div> |
142 | 142 | </div> |
143 | 143 | </div> |
144 | 144 | <?php |
145 | 145 | } |
146 | 146 | |
147 | - public function export_location( $relative = false ) { |
|
147 | + public function export_location($relative = false) { |
|
148 | 148 | $upload_dir = wp_upload_dir(); |
149 | - $export_location = $relative ? trailingslashit( $upload_dir['baseurl'] ) . 'cache' : trailingslashit( $upload_dir['basedir'] ) . 'cache'; |
|
150 | - $export_location = apply_filters( 'wpinv_export_location', $export_location, $relative ); |
|
149 | + $export_location = $relative ? trailingslashit($upload_dir['baseurl']) . 'cache' : trailingslashit($upload_dir['basedir']) . 'cache'; |
|
150 | + $export_location = apply_filters('wpinv_export_location', $export_location, $relative); |
|
151 | 151 | |
152 | - return trailingslashit( $export_location ); |
|
152 | + return trailingslashit($export_location); |
|
153 | 153 | } |
154 | 154 | |
155 | 155 | public function check_export_location() { |
156 | 156 | try { |
157 | - if ( empty( $this->wp_filesystem ) ) { |
|
158 | - return __( 'Filesystem ERROR: Could not access filesystem.', 'invoicing' ); |
|
157 | + if (empty($this->wp_filesystem)) { |
|
158 | + return __('Filesystem ERROR: Could not access filesystem.', 'invoicing'); |
|
159 | 159 | } |
160 | 160 | |
161 | - if ( is_wp_error( $this->wp_filesystem ) ) { |
|
162 | - return __( 'Filesystem ERROR: ' . $this->wp_filesystem->get_error_message(), 'invoicing' ); |
|
161 | + if (is_wp_error($this->wp_filesystem)) { |
|
162 | + return __('Filesystem ERROR: ' . $this->wp_filesystem->get_error_message(), 'invoicing'); |
|
163 | 163 | } |
164 | 164 | |
165 | - $is_dir = $this->wp_filesystem->is_dir( $this->export_dir ); |
|
166 | - $is_writeable = $is_dir && is_writeable( $this->export_dir ); |
|
165 | + $is_dir = $this->wp_filesystem->is_dir($this->export_dir); |
|
166 | + $is_writeable = $is_dir && is_writeable($this->export_dir); |
|
167 | 167 | |
168 | - if ( $is_dir && $is_writeable ) { |
|
168 | + if ($is_dir && $is_writeable) { |
|
169 | 169 | return true; |
170 | - } else if ( $is_dir && !$is_writeable ) { |
|
171 | - if ( !$this->wp_filesystem->chmod( $this->export_dir, FS_CHMOD_DIR ) ) { |
|
172 | - return wp_sprintf( __( 'Filesystem ERROR: Export location %s is not writable, check your file permissions.', 'invoicing' ), $this->export_dir ); |
|
170 | + } else if ($is_dir && !$is_writeable) { |
|
171 | + if (!$this->wp_filesystem->chmod($this->export_dir, FS_CHMOD_DIR)) { |
|
172 | + return wp_sprintf(__('Filesystem ERROR: Export location %s is not writable, check your file permissions.', 'invoicing'), $this->export_dir); |
|
173 | 173 | } |
174 | 174 | |
175 | 175 | return true; |
176 | 176 | } else { |
177 | - if ( !$this->wp_filesystem->mkdir( $this->export_dir, FS_CHMOD_DIR ) ) { |
|
178 | - return wp_sprintf( __( 'Filesystem ERROR: Could not create directory %s. This is usually due to inconsistent file permissions.', 'invoicing' ), $this->export_dir ); |
|
177 | + if (!$this->wp_filesystem->mkdir($this->export_dir, FS_CHMOD_DIR)) { |
|
178 | + return wp_sprintf(__('Filesystem ERROR: Could not create directory %s. This is usually due to inconsistent file permissions.', 'invoicing'), $this->export_dir); |
|
179 | 179 | } |
180 | 180 | |
181 | 181 | return true; |
182 | 182 | } |
183 | - } catch ( Exception $e ) { |
|
183 | + } catch (Exception $e) { |
|
184 | 184 | return $e->getMessage(); |
185 | 185 | } |
186 | 186 | } |
@@ -188,130 +188,130 @@ discard block |
||
188 | 188 | public function ajax_export() { |
189 | 189 | $response = array(); |
190 | 190 | $response['success'] = false; |
191 | - $response['msg'] = __( 'Invalid export request found.', 'invoicing' ); |
|
191 | + $response['msg'] = __('Invalid export request found.', 'invoicing'); |
|
192 | 192 | |
193 | - if ( empty( $_POST['data'] ) || !current_user_can( 'manage_options' ) ) { |
|
194 | - wp_send_json( $response ); |
|
193 | + if (empty($_POST['data']) || !current_user_can('manage_options')) { |
|
194 | + wp_send_json($response); |
|
195 | 195 | } |
196 | 196 | |
197 | - parse_str( $_POST['data'], $data ); |
|
197 | + parse_str($_POST['data'], $data); |
|
198 | 198 | |
199 | - $data['step'] = !empty( $_POST['step'] ) ? absint( $_POST['step'] ) : 1; |
|
199 | + $data['step'] = !empty($_POST['step']) ? absint($_POST['step']) : 1; |
|
200 | 200 | |
201 | 201 | $_REQUEST = (array)$data; |
202 | - if ( !( !empty( $_REQUEST['wpi_ajax_export'] ) && wp_verify_nonce( $_REQUEST['wpi_ajax_export'], 'wpi_ajax_export' ) ) ) { |
|
203 | - $response['msg'] = __( 'Security check failed.', 'invoicing' ); |
|
204 | - wp_send_json( $response ); |
|
202 | + if (!(!empty($_REQUEST['wpi_ajax_export']) && wp_verify_nonce($_REQUEST['wpi_ajax_export'], 'wpi_ajax_export'))) { |
|
203 | + $response['msg'] = __('Security check failed.', 'invoicing'); |
|
204 | + wp_send_json($response); |
|
205 | 205 | } |
206 | 206 | |
207 | - if ( ( $error = $this->check_export_location( true ) ) !== true ) { |
|
208 | - $response['msg'] = __( 'Filesystem ERROR: ' . $error, 'invoicing' ); |
|
209 | - wp_send_json( $response ); |
|
207 | + if (($error = $this->check_export_location(true)) !== true) { |
|
208 | + $response['msg'] = __('Filesystem ERROR: ' . $error, 'invoicing'); |
|
209 | + wp_send_json($response); |
|
210 | 210 | } |
211 | 211 | |
212 | - $this->set_export_params( $_REQUEST ); |
|
212 | + $this->set_export_params($_REQUEST); |
|
213 | 213 | |
214 | 214 | $return = $this->process_export_step(); |
215 | 215 | $done = $this->get_export_status(); |
216 | 216 | |
217 | - if ( $return ) { |
|
217 | + if ($return) { |
|
218 | 218 | $this->step += 1; |
219 | 219 | |
220 | 220 | $response['success'] = true; |
221 | 221 | $response['msg'] = ''; |
222 | 222 | |
223 | - if ( $done >= 100 ) { |
|
223 | + if ($done >= 100) { |
|
224 | 224 | $this->step = 'done'; |
225 | - $new_filename = 'wpi-' . $this->export . '-' . date( 'y-m-d-H-i' ) . '.' . $this->filetype; |
|
225 | + $new_filename = 'wpi-' . $this->export . '-' . date('y-m-d-H-i') . '.' . $this->filetype; |
|
226 | 226 | $new_file = $this->export_dir . $new_filename; |
227 | 227 | |
228 | - if ( file_exists( $this->file ) ) { |
|
229 | - $this->wp_filesystem->move( $this->file, $new_file, true ); |
|
228 | + if (file_exists($this->file)) { |
|
229 | + $this->wp_filesystem->move($this->file, $new_file, true); |
|
230 | 230 | } |
231 | 231 | |
232 | - if ( file_exists( $new_file ) ) { |
|
233 | - $response['data']['file'] = array( 'u' => $this->export_url . $new_filename, 's' => size_format( filesize( $new_file ), 2 ) ); |
|
232 | + if (file_exists($new_file)) { |
|
233 | + $response['data']['file'] = array('u' => $this->export_url . $new_filename, 's' => size_format(filesize($new_file), 2)); |
|
234 | 234 | } |
235 | 235 | } |
236 | 236 | |
237 | 237 | $response['data']['step'] = $this->step; |
238 | 238 | $response['data']['done'] = $done; |
239 | 239 | } else { |
240 | - $response['msg'] = __( 'No data found for export.', 'invoicing' ); |
|
240 | + $response['msg'] = __('No data found for export.', 'invoicing'); |
|
241 | 241 | } |
242 | 242 | |
243 | - wp_send_json( $response ); |
|
243 | + wp_send_json($response); |
|
244 | 244 | } |
245 | 245 | |
246 | - public function set_export_params( $request ) { |
|
246 | + public function set_export_params($request) { |
|
247 | 247 | $this->empty = false; |
248 | - $this->step = !empty( $request['step'] ) ? absint( $request['step'] ) : 1; |
|
249 | - $this->export = !empty( $request['export'] ) ? $request['export'] : $this->export; |
|
248 | + $this->step = !empty($request['step']) ? absint($request['step']) : 1; |
|
249 | + $this->export = !empty($request['export']) ? $request['export'] : $this->export; |
|
250 | 250 | $this->filename = 'wpi-' . $this->export . '-' . $request['wpi_ajax_export'] . '.' . $this->filetype; |
251 | 251 | $this->file = $this->export_dir . $this->filename; |
252 | 252 | |
253 | - do_action( 'wpinv_export_set_params_' . $this->export, $request ); |
|
253 | + do_action('wpinv_export_set_params_' . $this->export, $request); |
|
254 | 254 | } |
255 | 255 | |
256 | 256 | public function get_columns() { |
257 | 257 | $columns = array( |
258 | - 'id' => __( 'ID', 'invoicing' ), |
|
259 | - 'date' => __( 'Date', 'invoicing' ) |
|
258 | + 'id' => __('ID', 'invoicing'), |
|
259 | + 'date' => __('Date', 'invoicing') |
|
260 | 260 | ); |
261 | 261 | |
262 | - return apply_filters( 'wpinv_export_get_columns_' . $this->export, $columns ); |
|
262 | + return apply_filters('wpinv_export_get_columns_' . $this->export, $columns); |
|
263 | 263 | } |
264 | 264 | |
265 | 265 | protected function get_export_file() { |
266 | 266 | $file = ''; |
267 | 267 | |
268 | - if ( $this->wp_filesystem->exists( $this->file ) ) { |
|
269 | - $file = $this->wp_filesystem->get_contents( $this->file ); |
|
268 | + if ($this->wp_filesystem->exists($this->file)) { |
|
269 | + $file = $this->wp_filesystem->get_contents($this->file); |
|
270 | 270 | } else { |
271 | - $this->wp_filesystem->put_contents( $this->file, '' ); |
|
271 | + $this->wp_filesystem->put_contents($this->file, ''); |
|
272 | 272 | } |
273 | 273 | |
274 | 274 | return $file; |
275 | 275 | } |
276 | 276 | |
277 | - protected function attach_export_data( $data = '' ) { |
|
278 | - $filedata = $this->get_export_file(); |
|
279 | - $filedata .= $data; |
|
277 | + protected function attach_export_data($data = '') { |
|
278 | + $filedata = $this->get_export_file(); |
|
279 | + $filedata .= $data; |
|
280 | 280 | |
281 | - $this->wp_filesystem->put_contents( $this->file, $filedata ); |
|
281 | + $this->wp_filesystem->put_contents($this->file, $filedata); |
|
282 | 282 | |
283 | - $rows = file( $this->file, FILE_SKIP_EMPTY_LINES ); |
|
283 | + $rows = file($this->file, FILE_SKIP_EMPTY_LINES); |
|
284 | 284 | $columns = $this->get_columns(); |
285 | - $columns = empty( $columns ) ? 0 : 1; |
|
285 | + $columns = empty($columns) ? 0 : 1; |
|
286 | 286 | |
287 | - $this->empty = count( $rows ) == $columns ? true : false; |
|
287 | + $this->empty = count($rows) == $columns ? true : false; |
|
288 | 288 | } |
289 | 289 | |
290 | 290 | public function print_columns() { |
291 | 291 | $column_data = ''; |
292 | 292 | $columns = $this->get_columns(); |
293 | 293 | $i = 1; |
294 | - foreach( $columns as $key => $column ) { |
|
295 | - $column_data .= '"' . addslashes( $column ) . '"'; |
|
296 | - $column_data .= $i == count( $columns ) ? '' : ','; |
|
294 | + foreach ($columns as $key => $column) { |
|
295 | + $column_data .= '"' . addslashes($column) . '"'; |
|
296 | + $column_data .= $i == count($columns) ? '' : ','; |
|
297 | 297 | $i++; |
298 | 298 | } |
299 | 299 | $column_data .= "\r\n"; |
300 | 300 | |
301 | - $this->attach_export_data( $column_data ); |
|
301 | + $this->attach_export_data($column_data); |
|
302 | 302 | |
303 | 303 | return $column_data; |
304 | 304 | } |
305 | 305 | |
306 | 306 | public function process_export_step() { |
307 | - if ( $this->step < 2 ) { |
|
308 | - @unlink( $this->file ); |
|
307 | + if ($this->step < 2) { |
|
308 | + @unlink($this->file); |
|
309 | 309 | $this->print_columns(); |
310 | 310 | } |
311 | 311 | |
312 | 312 | $return = $this->print_rows(); |
313 | 313 | |
314 | - if ( $return ) { |
|
314 | + if ($return) { |
|
315 | 315 | return true; |
316 | 316 | } else { |
317 | 317 | return false; |
@@ -320,23 +320,23 @@ discard block |
||
320 | 320 | |
321 | 321 | public function get_export_status() { |
322 | 322 | $status = 100; |
323 | - return apply_filters( 'wpinv_get_export_status_' . $this->export, $status ); |
|
323 | + return apply_filters('wpinv_get_export_status_' . $this->export, $status); |
|
324 | 324 | } |
325 | 325 | |
326 | 326 | public function get_export_data() { |
327 | 327 | $data = array( |
328 | 328 | 0 => array( |
329 | 329 | 'id' => '', |
330 | - 'data' => date( 'F j, Y' ) |
|
330 | + 'data' => date('F j, Y') |
|
331 | 331 | ), |
332 | 332 | 1 => array( |
333 | 333 | 'id' => '', |
334 | - 'data' => date( 'F j, Y' ) |
|
334 | + 'data' => date('F j, Y') |
|
335 | 335 | ) |
336 | 336 | ); |
337 | 337 | |
338 | - $data = apply_filters( 'wpinv_export_get_data', $data ); |
|
339 | - $data = apply_filters( 'wpinv_export_get_data_' . $this->export, $data ); |
|
338 | + $data = apply_filters('wpinv_export_get_data', $data); |
|
339 | + $data = apply_filters('wpinv_export_get_data_' . $this->export, $data); |
|
340 | 340 | |
341 | 341 | return $data; |
342 | 342 | } |
@@ -346,20 +346,20 @@ discard block |
||
346 | 346 | $data = $this->get_export_data(); |
347 | 347 | $columns = $this->get_columns(); |
348 | 348 | |
349 | - if ( $data ) { |
|
350 | - foreach ( $data as $row ) { |
|
349 | + if ($data) { |
|
350 | + foreach ($data as $row) { |
|
351 | 351 | $i = 1; |
352 | - foreach ( $row as $key => $column ) { |
|
353 | - if ( array_key_exists( $key, $columns ) ) { |
|
354 | - $row_data .= '"' . addslashes( preg_replace( "/\"/","'", $column ) ) . '"'; |
|
355 | - $row_data .= $i == count( $columns ) ? '' : ','; |
|
352 | + foreach ($row as $key => $column) { |
|
353 | + if (array_key_exists($key, $columns)) { |
|
354 | + $row_data .= '"' . addslashes(preg_replace("/\"/", "'", $column)) . '"'; |
|
355 | + $row_data .= $i == count($columns) ? '' : ','; |
|
356 | 356 | $i++; |
357 | 357 | } |
358 | 358 | } |
359 | 359 | $row_data .= "\r\n"; |
360 | 360 | } |
361 | 361 | |
362 | - $this->attach_export_data( $row_data ); |
|
362 | + $this->attach_export_data($row_data); |
|
363 | 363 | |
364 | 364 | return $row_data; |
365 | 365 | } |
@@ -368,46 +368,46 @@ discard block |
||
368 | 368 | } |
369 | 369 | |
370 | 370 | // Export Invoices. |
371 | - public function set_invoices_export( $request ) { |
|
372 | - $this->from_date = isset( $request['from_date'] ) ? sanitize_text_field( $request['from_date'] ) : ''; |
|
373 | - $this->to_date = isset( $request['to_date'] ) ? sanitize_text_field( $request['to_date'] ) : ''; |
|
374 | - $this->status = isset( $request['status'] ) ? sanitize_text_field( $request['status'] ) : 'publish'; |
|
371 | + public function set_invoices_export($request) { |
|
372 | + $this->from_date = isset($request['from_date']) ? sanitize_text_field($request['from_date']) : ''; |
|
373 | + $this->to_date = isset($request['to_date']) ? sanitize_text_field($request['to_date']) : ''; |
|
374 | + $this->status = isset($request['status']) ? sanitize_text_field($request['status']) : 'publish'; |
|
375 | 375 | } |
376 | 376 | |
377 | - public function get_invoices_columns( $columns = array() ) { |
|
377 | + public function get_invoices_columns($columns = array()) { |
|
378 | 378 | $columns = array( |
379 | - 'id' => __( 'ID', 'invoicing' ), |
|
380 | - 'number' => __( 'Number', 'invoicing' ), |
|
381 | - 'date' => __( 'Date', 'invoicing' ), |
|
382 | - 'amount' => __( 'Amount', 'invoicing' ), |
|
383 | - 'status_nicename' => __( 'Status Nicename', 'invoicing' ), |
|
384 | - 'status' => __( 'Status', 'invoicing' ), |
|
385 | - 'tax' => __( 'Tax', 'invoicing' ), |
|
386 | - 'discount' => __( 'Discount', 'invoicing' ), |
|
387 | - 'user_id' => __( 'User ID', 'invoicing' ), |
|
388 | - 'email' => __( 'Email', 'invoicing' ), |
|
389 | - 'first_name' => __( 'First Name', 'invoicing' ), |
|
390 | - 'last_name' => __( 'Last Name', 'invoicing' ), |
|
391 | - 'address' => __( 'Address', 'invoicing' ), |
|
392 | - 'city' => __( 'City', 'invoicing' ), |
|
393 | - 'state' => __( 'State', 'invoicing' ), |
|
394 | - 'country' => __( 'Country', 'invoicing' ), |
|
395 | - 'zip' => __( 'Zipcode', 'invoicing' ), |
|
396 | - 'phone' => __( 'Phone', 'invoicing' ), |
|
397 | - 'company' => __( 'Company', 'invoicing' ), |
|
398 | - 'vat_number' => __( 'Vat Number', 'invoicing' ), |
|
399 | - 'ip' => __( 'IP', 'invoicing' ), |
|
400 | - 'gateway' => __( 'Gateway', 'invoicing' ), |
|
401 | - 'gateway_nicename' => __( 'Gateway Nicename', 'invoicing' ), |
|
402 | - 'transaction_id'=> __( 'Transaction ID', 'invoicing' ), |
|
403 | - 'currency' => __( 'Currency', 'invoicing' ), |
|
404 | - 'due_date' => __( 'Due Date', 'invoicing' ), |
|
379 | + 'id' => __('ID', 'invoicing'), |
|
380 | + 'number' => __('Number', 'invoicing'), |
|
381 | + 'date' => __('Date', 'invoicing'), |
|
382 | + 'amount' => __('Amount', 'invoicing'), |
|
383 | + 'status_nicename' => __('Status Nicename', 'invoicing'), |
|
384 | + 'status' => __('Status', 'invoicing'), |
|
385 | + 'tax' => __('Tax', 'invoicing'), |
|
386 | + 'discount' => __('Discount', 'invoicing'), |
|
387 | + 'user_id' => __('User ID', 'invoicing'), |
|
388 | + 'email' => __('Email', 'invoicing'), |
|
389 | + 'first_name' => __('First Name', 'invoicing'), |
|
390 | + 'last_name' => __('Last Name', 'invoicing'), |
|
391 | + 'address' => __('Address', 'invoicing'), |
|
392 | + 'city' => __('City', 'invoicing'), |
|
393 | + 'state' => __('State', 'invoicing'), |
|
394 | + 'country' => __('Country', 'invoicing'), |
|
395 | + 'zip' => __('Zipcode', 'invoicing'), |
|
396 | + 'phone' => __('Phone', 'invoicing'), |
|
397 | + 'company' => __('Company', 'invoicing'), |
|
398 | + 'vat_number' => __('Vat Number', 'invoicing'), |
|
399 | + 'ip' => __('IP', 'invoicing'), |
|
400 | + 'gateway' => __('Gateway', 'invoicing'), |
|
401 | + 'gateway_nicename' => __('Gateway Nicename', 'invoicing'), |
|
402 | + 'transaction_id'=> __('Transaction ID', 'invoicing'), |
|
403 | + 'currency' => __('Currency', 'invoicing'), |
|
404 | + 'due_date' => __('Due Date', 'invoicing'), |
|
405 | 405 | ); |
406 | 406 | |
407 | 407 | return $columns; |
408 | 408 | } |
409 | 409 | |
410 | - public function get_invoices_data( $response = array() ) { |
|
410 | + public function get_invoices_data($response = array()) { |
|
411 | 411 | $args = array( |
412 | 412 | 'limit' => $this->per_page, |
413 | 413 | 'page' => $this->step, |
@@ -415,35 +415,35 @@ discard block |
||
415 | 415 | 'orderby' => 'date', |
416 | 416 | ); |
417 | 417 | |
418 | - if ( $this->status != 'any' ) { |
|
418 | + if ($this->status != 'any') { |
|
419 | 419 | $args['status'] = $this->status; |
420 | 420 | } |
421 | 421 | |
422 | - if ( !empty( $this->from_date ) || !empty( $this->to_date ) ) { |
|
422 | + if (!empty($this->from_date) || !empty($this->to_date)) { |
|
423 | 423 | $args['date_query'] = array( |
424 | 424 | array( |
425 | - 'after' => date( 'Y-n-d 00:00:00', strtotime( $this->from_date ) ), |
|
426 | - 'before' => date( 'Y-n-d 23:59:59', strtotime( $this->to_date ) ), |
|
425 | + 'after' => date('Y-n-d 00:00:00', strtotime($this->from_date)), |
|
426 | + 'before' => date('Y-n-d 23:59:59', strtotime($this->to_date)), |
|
427 | 427 | 'inclusive' => true |
428 | 428 | ) |
429 | 429 | ); |
430 | 430 | } |
431 | 431 | |
432 | - $invoices = wpinv_get_invoices( $args ); |
|
432 | + $invoices = wpinv_get_invoices($args); |
|
433 | 433 | |
434 | 434 | $data = array(); |
435 | 435 | |
436 | - if ( !empty( $invoices ) ) { |
|
437 | - foreach ( $invoices as $invoice ) { |
|
436 | + if (!empty($invoices)) { |
|
437 | + foreach ($invoices as $invoice) { |
|
438 | 438 | $row = array( |
439 | 439 | 'id' => $invoice->ID, |
440 | 440 | 'number' => $invoice->get_number(), |
441 | - 'date' => $invoice->get_invoice_date( false ), |
|
442 | - 'amount' => wpinv_round_amount( $invoice->get_total() ), |
|
443 | - 'status_nicename' => $invoice->get_status( true ), |
|
441 | + 'date' => $invoice->get_invoice_date(false), |
|
442 | + 'amount' => wpinv_round_amount($invoice->get_total()), |
|
443 | + 'status_nicename' => $invoice->get_status(true), |
|
444 | 444 | 'status' => $invoice->get_status(), |
445 | - 'tax' => $invoice->get_tax() > 0 ? wpinv_round_amount( $invoice->get_tax() ) : '', |
|
446 | - 'discount' => $invoice->get_discount() > 0 ? wpinv_round_amount( $invoice->get_discount() ) : '', |
|
445 | + 'tax' => $invoice->get_tax() > 0 ? wpinv_round_amount($invoice->get_tax()) : '', |
|
446 | + 'discount' => $invoice->get_discount() > 0 ? wpinv_round_amount($invoice->get_discount()) : '', |
|
447 | 447 | 'user_id' => $invoice->get_user_id(), |
448 | 448 | 'email' => $invoice->get_email(), |
449 | 449 | 'first_name' => $invoice->get_first_name(), |
@@ -464,7 +464,7 @@ discard block |
||
464 | 464 | 'due_date' => $invoice->needs_payment() ? $invoice->get_due_date() : '', |
465 | 465 | ); |
466 | 466 | |
467 | - $data[] = apply_filters( 'wpinv_export_invoice_row', $row, $invoice ); |
|
467 | + $data[] = apply_filters('wpinv_export_invoice_row', $row, $invoice); |
|
468 | 468 | } |
469 | 469 | |
470 | 470 | return $data; |
@@ -480,29 +480,29 @@ discard block |
||
480 | 480 | 'return' => 'ids', |
481 | 481 | ); |
482 | 482 | |
483 | - if ( $this->status != 'any' ) { |
|
483 | + if ($this->status != 'any') { |
|
484 | 484 | $args['status'] = $this->status; |
485 | 485 | } |
486 | 486 | |
487 | - if ( !empty( $this->from_date ) || !empty( $this->to_date ) ) { |
|
487 | + if (!empty($this->from_date) || !empty($this->to_date)) { |
|
488 | 488 | $args['date_query'] = array( |
489 | 489 | array( |
490 | - 'after' => date( 'Y-n-d 00:00:00', strtotime( $this->from_date ) ), |
|
491 | - 'before' => date( 'Y-n-d 23:59:59', strtotime( $this->to_date ) ), |
|
490 | + 'after' => date('Y-n-d 00:00:00', strtotime($this->from_date)), |
|
491 | + 'before' => date('Y-n-d 23:59:59', strtotime($this->to_date)), |
|
492 | 492 | 'inclusive' => true |
493 | 493 | ) |
494 | 494 | ); |
495 | 495 | } |
496 | 496 | |
497 | - $invoices = wpinv_get_invoices( $args ); |
|
498 | - $total = !empty( $invoices ) ? count( $invoices ) : 0; |
|
497 | + $invoices = wpinv_get_invoices($args); |
|
498 | + $total = !empty($invoices) ? count($invoices) : 0; |
|
499 | 499 | $status = 100; |
500 | 500 | |
501 | - if ( $total > 0 ) { |
|
502 | - $status = ( ( $this->per_page * $this->step ) / $total ) * 100; |
|
501 | + if ($total > 0) { |
|
502 | + $status = (($this->per_page * $this->step) / $total) * 100; |
|
503 | 503 | } |
504 | 504 | |
505 | - if ( $status > 100 ) { |
|
505 | + if ($status > 100) { |
|
506 | 506 | $status = 100; |
507 | 507 | } |
508 | 508 |
@@ -437,7 +437,7 @@ |
||
437 | 437 | } |
438 | 438 | |
439 | 439 | function wpinv_get_php_arg_separator_output() { |
440 | - return ini_get( 'arg_separator.output' ); |
|
440 | + return ini_get( 'arg_separator.output' ); |
|
441 | 441 | } |
442 | 442 | |
443 | 443 | function wpinv_rgb_from_hex( $color ) { |
@@ -31,6 +31,9 @@ discard block |
||
31 | 31 | return apply_filters( 'wpinv_get_ip', $ip ); |
32 | 32 | } |
33 | 33 | |
34 | +/** |
|
35 | + * @return string |
|
36 | + */ |
|
34 | 37 | function wpinv_get_user_agent() { |
35 | 38 | if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { |
36 | 39 | $user_agent = sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] ); |
@@ -110,6 +113,9 @@ discard block |
||
110 | 113 | return $status; |
111 | 114 | } |
112 | 115 | |
116 | +/** |
|
117 | + * @return string |
|
118 | + */ |
|
113 | 119 | function wpinv_get_currency() { |
114 | 120 | $currency = wpinv_get_option( 'currency', 'USD' ); |
115 | 121 | |
@@ -180,6 +186,9 @@ discard block |
||
180 | 186 | return apply_filters( 'wpinv_currency_symbol', $currency_symbol, $currency ); |
181 | 187 | } |
182 | 188 | |
189 | +/** |
|
190 | + * @return string |
|
191 | + */ |
|
183 | 192 | function wpinv_currency_position() { |
184 | 193 | $position = wpinv_get_option( 'currency_position', 'left' ); |
185 | 194 | |
@@ -198,6 +207,9 @@ discard block |
||
198 | 207 | return apply_filters( 'wpinv_decimal_separator', $decimal_sep ); |
199 | 208 | } |
200 | 209 | |
210 | +/** |
|
211 | + * @return integer |
|
212 | + */ |
|
201 | 213 | function wpinv_decimals() { |
202 | 214 | $decimals = apply_filters( 'wpinv_decimals', wpinv_get_option( 'decimals', 2 ) ); |
203 | 215 | |
@@ -308,6 +320,9 @@ discard block |
||
308 | 320 | return $price; |
309 | 321 | } |
310 | 322 | |
323 | +/** |
|
324 | + * @return string |
|
325 | + */ |
|
311 | 326 | function wpinv_format_amount( $amount, $decimals = NULL, $calculate = false ) { |
312 | 327 | $thousands_sep = wpinv_thousands_separator(); |
313 | 328 | $decimal_sep = wpinv_decimal_separator(); |
@@ -357,6 +372,9 @@ discard block |
||
357 | 372 | return apply_filters( 'wpinv_sanitize_key', $key, $raw_key ); |
358 | 373 | } |
359 | 374 | |
375 | +/** |
|
376 | + * @return string |
|
377 | + */ |
|
360 | 378 | function wpinv_get_file_extension( $str ) { |
361 | 379 | $parts = explode( '.', $str ); |
362 | 380 | return end( $parts ); |
@@ -561,6 +579,9 @@ discard block |
||
561 | 579 | return strlen( $str ); |
562 | 580 | } |
563 | 581 | |
582 | +/** |
|
583 | + * @param string $str |
|
584 | + */ |
|
564 | 585 | function wpinv_utf8_strtolower( $str, $encoding = 'UTF-8' ) { |
565 | 586 | if ( function_exists( 'mb_strtolower' ) ) { |
566 | 587 | return mb_strtolower( $str, $encoding ); |
@@ -569,6 +590,9 @@ discard block |
||
569 | 590 | return strtolower( $str ); |
570 | 591 | } |
571 | 592 | |
593 | +/** |
|
594 | + * @param string $str |
|
595 | + */ |
|
572 | 596 | function wpinv_utf8_strtoupper( $str, $encoding = 'UTF-8' ) { |
573 | 597 | if ( function_exists( 'mb_strtoupper' ) ) { |
574 | 598 | return mb_strtoupper( $str, $encoding ); |
@@ -646,7 +670,7 @@ discard block |
||
646 | 670 | * |
647 | 671 | * @param string $str The string being decoded. |
648 | 672 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
649 | - * @return string The width of string. |
|
673 | + * @return integer The width of string. |
|
650 | 674 | */ |
651 | 675 | function wpinv_utf8_strwidth( $str, $encoding = 'UTF-8' ) { |
652 | 676 | if ( function_exists( 'mb_strwidth' ) ) { |
@@ -7,84 +7,84 @@ discard block |
||
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_item_quantities_enabled() { |
15 | - $ret = wpinv_get_option( 'item_quantities', true ); |
|
15 | + $ret = wpinv_get_option('item_quantities', true); |
|
16 | 16 | |
17 | - return (bool) apply_filters( 'wpinv_item_quantities_enabled', $ret ); |
|
17 | + return (bool)apply_filters('wpinv_item_quantities_enabled', $ret); |
|
18 | 18 | } |
19 | 19 | |
20 | 20 | function wpinv_get_ip() { |
21 | 21 | $ip = '127.0.0.1'; |
22 | 22 | |
23 | - if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) { |
|
24 | - $ip = sanitize_text_field( $_SERVER['HTTP_CLIENT_IP'] ); |
|
25 | - } elseif ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { |
|
26 | - $ip = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] ); |
|
27 | - } elseif( !empty( $_SERVER['REMOTE_ADDR'] ) ) { |
|
28 | - $ip = sanitize_text_field( $_SERVER['REMOTE_ADDR'] ); |
|
23 | + if (!empty($_SERVER['HTTP_CLIENT_IP'])) { |
|
24 | + $ip = sanitize_text_field($_SERVER['HTTP_CLIENT_IP']); |
|
25 | + } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { |
|
26 | + $ip = sanitize_text_field($_SERVER['HTTP_X_FORWARDED_FOR']); |
|
27 | + } elseif (!empty($_SERVER['REMOTE_ADDR'])) { |
|
28 | + $ip = sanitize_text_field($_SERVER['REMOTE_ADDR']); |
|
29 | 29 | } |
30 | 30 | |
31 | - return apply_filters( 'wpinv_get_ip', $ip ); |
|
31 | + return apply_filters('wpinv_get_ip', $ip); |
|
32 | 32 | } |
33 | 33 | |
34 | 34 | function wpinv_get_user_agent() { |
35 | - if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { |
|
36 | - $user_agent = sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] ); |
|
35 | + if (!empty($_SERVER['HTTP_USER_AGENT'])) { |
|
36 | + $user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']); |
|
37 | 37 | } else { |
38 | 38 | $user_agent = ''; |
39 | 39 | } |
40 | 40 | |
41 | - return apply_filters( 'wpinv_get_user_agent', $user_agent ); |
|
41 | + return apply_filters('wpinv_get_user_agent', $user_agent); |
|
42 | 42 | } |
43 | 43 | |
44 | -function wpinv_sanitize_amount( $amount ) { |
|
44 | +function wpinv_sanitize_amount($amount) { |
|
45 | 45 | $is_negative = false; |
46 | 46 | $thousands_sep = wpinv_thousands_separator(); |
47 | 47 | $decimal_sep = wpinv_decimal_separator(); |
48 | 48 | $decimals = wpinv_decimals(); |
49 | 49 | |
50 | 50 | // Sanitize the amount |
51 | - if ( $decimal_sep == ',' && false !== ( $found = strpos( $amount, $decimal_sep ) ) ) { |
|
52 | - if ( ( $thousands_sep == '.' || $thousands_sep == ' ' ) && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) { |
|
53 | - $amount = str_replace( $thousands_sep, '', $amount ); |
|
54 | - } elseif( empty( $thousands_sep ) && false !== ( $found = strpos( $amount, '.' ) ) ) { |
|
55 | - $amount = str_replace( '.', '', $amount ); |
|
51 | + if ($decimal_sep == ',' && false !== ($found = strpos($amount, $decimal_sep))) { |
|
52 | + if (($thousands_sep == '.' || $thousands_sep == ' ') && false !== ($found = strpos($amount, $thousands_sep))) { |
|
53 | + $amount = str_replace($thousands_sep, '', $amount); |
|
54 | + } elseif (empty($thousands_sep) && false !== ($found = strpos($amount, '.'))) { |
|
55 | + $amount = str_replace('.', '', $amount); |
|
56 | 56 | } |
57 | 57 | |
58 | - $amount = str_replace( $decimal_sep, '.', $amount ); |
|
59 | - } elseif( $thousands_sep == ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) { |
|
60 | - $amount = str_replace( $thousands_sep, '', $amount ); |
|
58 | + $amount = str_replace($decimal_sep, '.', $amount); |
|
59 | + } elseif ($thousands_sep == ',' && false !== ($found = strpos($amount, $thousands_sep))) { |
|
60 | + $amount = str_replace($thousands_sep, '', $amount); |
|
61 | 61 | } |
62 | 62 | |
63 | - if( $amount < 0 ) { |
|
63 | + if ($amount < 0) { |
|
64 | 64 | $is_negative = true; |
65 | 65 | } |
66 | 66 | |
67 | - $amount = preg_replace( '/[^0-9\.]/', '', $amount ); |
|
67 | + $amount = preg_replace('/[^0-9\.]/', '', $amount); |
|
68 | 68 | |
69 | - $decimals = apply_filters( 'wpinv_sanitize_amount_decimals', $decimals, $amount ); |
|
70 | - $amount = number_format( (double) $amount, $decimals, '.', '' ); |
|
69 | + $decimals = apply_filters('wpinv_sanitize_amount_decimals', $decimals, $amount); |
|
70 | + $amount = number_format((double)$amount, $decimals, '.', ''); |
|
71 | 71 | |
72 | - if( $is_negative ) { |
|
72 | + if ($is_negative) { |
|
73 | 73 | $amount *= -1; |
74 | 74 | } |
75 | 75 | |
76 | - return apply_filters( 'wpinv_sanitize_amount', $amount ); |
|
76 | + return apply_filters('wpinv_sanitize_amount', $amount); |
|
77 | 77 | } |
78 | 78 | |
79 | -function wpinv_round_amount( $amount ) { |
|
79 | +function wpinv_round_amount($amount) { |
|
80 | 80 | $decimals = wpinv_decimals(); |
81 | 81 | |
82 | - $amount = round( (double)$amount, wpinv_currency_decimal_filter( $decimals ) ); |
|
82 | + $amount = round((double)$amount, wpinv_currency_decimal_filter($decimals)); |
|
83 | 83 | |
84 | - return apply_filters( 'wpinv_round_amount', $amount ); |
|
84 | + return apply_filters('wpinv_round_amount', $amount); |
|
85 | 85 | } |
86 | 86 | |
87 | -function wpinv_get_invoice_statuses( $trashed = false ) { |
|
87 | +function wpinv_get_invoice_statuses($trashed = false) { |
|
88 | 88 | global $post; |
89 | 89 | $invoice_statuses = array(); |
90 | 90 | $invoice_statuses = array( |
@@ -98,32 +98,32 @@ discard block |
||
98 | 98 | 'wpi-renewal' => __('Renewal Payment', 'invoicing') |
99 | 99 | ); |
100 | 100 | |
101 | - if ( $trashed ) { |
|
102 | - $invoice_statuses['trash'] = __( 'Trash', 'invoicing' ); |
|
101 | + if ($trashed) { |
|
102 | + $invoice_statuses['trash'] = __('Trash', 'invoicing'); |
|
103 | 103 | } |
104 | 104 | |
105 | - return apply_filters( 'wpinv_statuses', $invoice_statuses ); |
|
105 | + return apply_filters('wpinv_statuses', $invoice_statuses); |
|
106 | 106 | } |
107 | 107 | |
108 | -function wpinv_status_nicename( $status ) { |
|
108 | +function wpinv_status_nicename($status) { |
|
109 | 109 | $statuses = wpinv_get_invoice_statuses(); |
110 | - $status = isset( $statuses[$status] ) ? $statuses[$status] : __( $status, 'invoicing' ); |
|
110 | + $status = isset($statuses[$status]) ? $statuses[$status] : __($status, 'invoicing'); |
|
111 | 111 | |
112 | 112 | return $status; |
113 | 113 | } |
114 | 114 | |
115 | 115 | function wpinv_get_currency() { |
116 | - $currency = wpinv_get_option( 'currency', 'USD' ); |
|
116 | + $currency = wpinv_get_option('currency', 'USD'); |
|
117 | 117 | |
118 | - return apply_filters( 'wpinv_currency', $currency ); |
|
118 | + return apply_filters('wpinv_currency', $currency); |
|
119 | 119 | } |
120 | 120 | |
121 | -function wpinv_currency_symbol( $currency = '' ) { |
|
122 | - if ( empty( $currency ) ) { |
|
121 | +function wpinv_currency_symbol($currency = '') { |
|
122 | + if (empty($currency)) { |
|
123 | 123 | $currency = wpinv_get_currency(); |
124 | 124 | } |
125 | 125 | |
126 | - $symbols = apply_filters( 'wpinv_currency_symbols', array( |
|
126 | + $symbols = apply_filters('wpinv_currency_symbols', array( |
|
127 | 127 | 'AED' => 'د.إ', |
128 | 128 | 'ARS' => '$', |
129 | 129 | 'AUD' => '$', |
@@ -175,78 +175,78 @@ discard block |
||
175 | 175 | 'USD' => '$', |
176 | 176 | 'VND' => '₫', |
177 | 177 | 'ZAR' => 'R', |
178 | - ) ); |
|
178 | + )); |
|
179 | 179 | |
180 | - $currency_symbol = isset( $symbols[$currency] ) ? $symbols[$currency] : '$'; |
|
180 | + $currency_symbol = isset($symbols[$currency]) ? $symbols[$currency] : '$'; |
|
181 | 181 | |
182 | - return apply_filters( 'wpinv_currency_symbol', $currency_symbol, $currency ); |
|
182 | + return apply_filters('wpinv_currency_symbol', $currency_symbol, $currency); |
|
183 | 183 | } |
184 | 184 | |
185 | 185 | function wpinv_currency_position() { |
186 | - $position = wpinv_get_option( 'currency_position', 'left' ); |
|
186 | + $position = wpinv_get_option('currency_position', 'left'); |
|
187 | 187 | |
188 | - return apply_filters( 'wpinv_currency_position', $position ); |
|
188 | + return apply_filters('wpinv_currency_position', $position); |
|
189 | 189 | } |
190 | 190 | |
191 | 191 | function wpinv_thousands_separator() { |
192 | - $thousand_sep = wpinv_get_option( 'thousands_separator', ',' ); |
|
192 | + $thousand_sep = wpinv_get_option('thousands_separator', ','); |
|
193 | 193 | |
194 | - return apply_filters( 'wpinv_thousands_separator', $thousand_sep ); |
|
194 | + return apply_filters('wpinv_thousands_separator', $thousand_sep); |
|
195 | 195 | } |
196 | 196 | |
197 | 197 | function wpinv_decimal_separator() { |
198 | - $decimal_sep = wpinv_get_option( 'decimal_separator', '.' ); |
|
198 | + $decimal_sep = wpinv_get_option('decimal_separator', '.'); |
|
199 | 199 | |
200 | - return apply_filters( 'wpinv_decimal_separator', $decimal_sep ); |
|
200 | + return apply_filters('wpinv_decimal_separator', $decimal_sep); |
|
201 | 201 | } |
202 | 202 | |
203 | 203 | function wpinv_decimals() { |
204 | - $decimals = apply_filters( 'wpinv_decimals', wpinv_get_option( 'decimals', 2 ) ); |
|
204 | + $decimals = apply_filters('wpinv_decimals', wpinv_get_option('decimals', 2)); |
|
205 | 205 | |
206 | - return absint( $decimals ); |
|
206 | + return absint($decimals); |
|
207 | 207 | } |
208 | 208 | |
209 | 209 | function wpinv_get_currencies() { |
210 | 210 | $currencies = array( |
211 | - 'USD' => __( 'US Dollars ($)', 'invoicing' ), |
|
212 | - 'EUR' => __( 'Euros (€)', 'invoicing' ), |
|
213 | - 'GBP' => __( 'Pounds Sterling (£)', 'invoicing' ), |
|
214 | - 'AUD' => __( 'Australian Dollars ($)', 'invoicing' ), |
|
215 | - 'BRL' => __( 'Brazilian Real (R$)', 'invoicing' ), |
|
216 | - 'CAD' => __( 'Canadian Dollars ($)', 'invoicing' ), |
|
217 | - 'CLP' => __( 'Chilean Peso ($)', 'invoicing' ), |
|
218 | - 'CNY' => __( 'Chinese Yuan (¥)', 'invoicing' ), |
|
219 | - 'CZK' => __( 'Czech Koruna (Kč)', 'invoicing' ), |
|
220 | - 'DKK' => __( 'Danish Krone (DKK)', 'invoicing' ), |
|
221 | - 'HKD' => __( 'Hong Kong Dollar ($)', 'invoicing' ), |
|
222 | - 'HUF' => __( 'Hungarian Forint (Ft)', 'invoicing' ), |
|
223 | - 'INR' => __( 'Indian Rupee (₹)', 'invoicing' ), |
|
224 | - 'ILS' => __( 'Israeli Shekel (₪)', 'invoicing' ), |
|
225 | - 'JPY' => __( 'Japanese Yen (¥)', 'invoicing' ), |
|
226 | - 'MYR' => __( 'Malaysian Ringgit (RM)', 'invoicing' ), |
|
227 | - 'MXN' => __( 'Mexican Peso ($)', 'invoicing' ), |
|
228 | - 'NZD' => __( 'New Zealand Dollar ($)', 'invoicing' ), |
|
229 | - 'NOK' => __( 'Norwegian Krone (kr)', 'invoicing' ), |
|
230 | - 'PHP' => __( 'Philippine Peso (₱)', 'invoicing' ), |
|
231 | - 'PLN' => __( 'Polish Zloty (zł)', 'invoicing' ), |
|
232 | - 'SGD' => __( 'Singapore Dollar ($)', 'invoicing' ), |
|
233 | - 'SEK' => __( 'Swedish Krona (kr)', 'invoicing' ), |
|
234 | - 'CHF' => __( 'Swiss Franc (CHF)', 'invoicing' ), |
|
235 | - 'TWD' => __( 'Taiwan New Dollar (NT$)', 'invoicing' ), |
|
236 | - 'THB' => __( 'Thai Baht (฿)', 'invoicing' ), |
|
237 | - 'TRY' => __( 'Turkish Lira (₺)', 'invoicing' ), |
|
238 | - 'RIAL' => __( 'Iranian Rial (﷼)', 'invoicing' ), |
|
239 | - 'RUB' => __( 'Russian Ruble (₽)', 'invoicing' ), |
|
240 | - 'ZAR' => __( 'South African Rand (R)', 'invoicing' ) |
|
211 | + 'USD' => __('US Dollars ($)', 'invoicing'), |
|
212 | + 'EUR' => __('Euros (€)', 'invoicing'), |
|
213 | + 'GBP' => __('Pounds Sterling (£)', 'invoicing'), |
|
214 | + 'AUD' => __('Australian Dollars ($)', 'invoicing'), |
|
215 | + 'BRL' => __('Brazilian Real (R$)', 'invoicing'), |
|
216 | + 'CAD' => __('Canadian Dollars ($)', 'invoicing'), |
|
217 | + 'CLP' => __('Chilean Peso ($)', 'invoicing'), |
|
218 | + 'CNY' => __('Chinese Yuan (¥)', 'invoicing'), |
|
219 | + 'CZK' => __('Czech Koruna (Kč)', 'invoicing'), |
|
220 | + 'DKK' => __('Danish Krone (DKK)', 'invoicing'), |
|
221 | + 'HKD' => __('Hong Kong Dollar ($)', 'invoicing'), |
|
222 | + 'HUF' => __('Hungarian Forint (Ft)', 'invoicing'), |
|
223 | + 'INR' => __('Indian Rupee (₹)', 'invoicing'), |
|
224 | + 'ILS' => __('Israeli Shekel (₪)', 'invoicing'), |
|
225 | + 'JPY' => __('Japanese Yen (¥)', 'invoicing'), |
|
226 | + 'MYR' => __('Malaysian Ringgit (RM)', 'invoicing'), |
|
227 | + 'MXN' => __('Mexican Peso ($)', 'invoicing'), |
|
228 | + 'NZD' => __('New Zealand Dollar ($)', 'invoicing'), |
|
229 | + 'NOK' => __('Norwegian Krone (kr)', 'invoicing'), |
|
230 | + 'PHP' => __('Philippine Peso (₱)', 'invoicing'), |
|
231 | + 'PLN' => __('Polish Zloty (zł)', 'invoicing'), |
|
232 | + 'SGD' => __('Singapore Dollar ($)', 'invoicing'), |
|
233 | + 'SEK' => __('Swedish Krona (kr)', 'invoicing'), |
|
234 | + 'CHF' => __('Swiss Franc (CHF)', 'invoicing'), |
|
235 | + 'TWD' => __('Taiwan New Dollar (NT$)', 'invoicing'), |
|
236 | + 'THB' => __('Thai Baht (฿)', 'invoicing'), |
|
237 | + 'TRY' => __('Turkish Lira (₺)', 'invoicing'), |
|
238 | + 'RIAL' => __('Iranian Rial (﷼)', 'invoicing'), |
|
239 | + 'RUB' => __('Russian Ruble (₽)', 'invoicing'), |
|
240 | + 'ZAR' => __('South African Rand (R)', 'invoicing') |
|
241 | 241 | ); |
242 | 242 | |
243 | - asort( $currencies ); |
|
243 | + asort($currencies); |
|
244 | 244 | |
245 | - return apply_filters( 'wpinv_currencies', $currencies ); |
|
245 | + return apply_filters('wpinv_currencies', $currencies); |
|
246 | 246 | } |
247 | 247 | |
248 | -function wpinv_price( $amount = '', $currency = '' ) { |
|
249 | - if( empty( $currency ) ) { |
|
248 | +function wpinv_price($amount = '', $currency = '') { |
|
249 | + if (empty($currency)) { |
|
250 | 250 | $currency = wpinv_get_currency(); |
251 | 251 | } |
252 | 252 | |
@@ -254,14 +254,14 @@ discard block |
||
254 | 254 | |
255 | 255 | $negative = $amount < 0; |
256 | 256 | |
257 | - if ( $negative ) { |
|
258 | - $amount = substr( $amount, 1 ); |
|
257 | + if ($negative) { |
|
258 | + $amount = substr($amount, 1); |
|
259 | 259 | } |
260 | 260 | |
261 | - $symbol = wpinv_currency_symbol( $currency ); |
|
261 | + $symbol = wpinv_currency_symbol($currency); |
|
262 | 262 | |
263 | - if ( $position == 'left' || $position == 'left_space' ) { |
|
264 | - switch ( $currency ) { |
|
263 | + if ($position == 'left' || $position == 'left_space') { |
|
264 | + switch ($currency) { |
|
265 | 265 | case "GBP" : |
266 | 266 | case "BRL" : |
267 | 267 | case "EUR" : |
@@ -273,15 +273,15 @@ discard block |
||
273 | 273 | case "NZD" : |
274 | 274 | case "SGD" : |
275 | 275 | case "JPY" : |
276 | - $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount; |
|
276 | + $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount; |
|
277 | 277 | break; |
278 | 278 | default : |
279 | 279 | //$price = $currency . ' ' . $amount; |
280 | - $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount; |
|
280 | + $price = $position == 'left_space' ? $symbol . ' ' . $amount : $symbol . $amount; |
|
281 | 281 | break; |
282 | 282 | } |
283 | 283 | } else { |
284 | - switch ( $currency ) { |
|
284 | + switch ($currency) { |
|
285 | 285 | case "GBP" : |
286 | 286 | case "BRL" : |
287 | 287 | case "EUR" : |
@@ -292,82 +292,82 @@ discard block |
||
292 | 292 | case "MXN" : |
293 | 293 | case "SGD" : |
294 | 294 | case "JPY" : |
295 | - $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol; |
|
295 | + $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol; |
|
296 | 296 | break; |
297 | 297 | default : |
298 | 298 | //$price = $amount . ' ' . $currency; |
299 | - $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol; |
|
299 | + $price = $position == 'right_space' ? $amount . ' ' . $symbol : $amount . $symbol; |
|
300 | 300 | break; |
301 | 301 | } |
302 | 302 | } |
303 | 303 | |
304 | - if ( $negative ) { |
|
304 | + if ($negative) { |
|
305 | 305 | $price = '-' . $price; |
306 | 306 | } |
307 | 307 | |
308 | - $price = apply_filters( 'wpinv_' . strtolower( $currency ) . '_currency_filter_' . $position, $price, $currency, $amount ); |
|
308 | + $price = apply_filters('wpinv_' . strtolower($currency) . '_currency_filter_' . $position, $price, $currency, $amount); |
|
309 | 309 | |
310 | 310 | return $price; |
311 | 311 | } |
312 | 312 | |
313 | -function wpinv_format_amount( $amount, $decimals = NULL, $calculate = false ) { |
|
313 | +function wpinv_format_amount($amount, $decimals = NULL, $calculate = false) { |
|
314 | 314 | $thousands_sep = wpinv_thousands_separator(); |
315 | 315 | $decimal_sep = wpinv_decimal_separator(); |
316 | 316 | |
317 | - if ( $decimals === NULL ) { |
|
317 | + if ($decimals === NULL) { |
|
318 | 318 | $decimals = wpinv_decimals(); |
319 | 319 | } |
320 | 320 | |
321 | - if ( $decimal_sep == ',' && false !== ( $sep_found = strpos( $amount, $decimal_sep ) ) ) { |
|
322 | - $whole = substr( $amount, 0, $sep_found ); |
|
323 | - $part = substr( $amount, $sep_found + 1, ( strlen( $amount ) - 1 ) ); |
|
321 | + if ($decimal_sep == ',' && false !== ($sep_found = strpos($amount, $decimal_sep))) { |
|
322 | + $whole = substr($amount, 0, $sep_found); |
|
323 | + $part = substr($amount, $sep_found + 1, (strlen($amount) - 1)); |
|
324 | 324 | $amount = $whole . '.' . $part; |
325 | 325 | } |
326 | 326 | |
327 | - if ( $thousands_sep == ',' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) { |
|
328 | - $amount = str_replace( ',', '', $amount ); |
|
327 | + if ($thousands_sep == ',' && false !== ($found = strpos($amount, $thousands_sep))) { |
|
328 | + $amount = str_replace(',', '', $amount); |
|
329 | 329 | } |
330 | 330 | |
331 | - if ( $thousands_sep == ' ' && false !== ( $found = strpos( $amount, $thousands_sep ) ) ) { |
|
332 | - $amount = str_replace( ' ', '', $amount ); |
|
331 | + if ($thousands_sep == ' ' && false !== ($found = strpos($amount, $thousands_sep))) { |
|
332 | + $amount = str_replace(' ', '', $amount); |
|
333 | 333 | } |
334 | 334 | |
335 | - if ( empty( $amount ) ) { |
|
335 | + if (empty($amount)) { |
|
336 | 336 | $amount = 0; |
337 | 337 | } |
338 | 338 | |
339 | - $decimals = apply_filters( 'wpinv_amount_format_decimals', $decimals ? $decimals : 0, $amount, $calculate ); |
|
340 | - $formatted = number_format( (float)$amount, $decimals, $decimal_sep, $thousands_sep ); |
|
339 | + $decimals = apply_filters('wpinv_amount_format_decimals', $decimals ? $decimals : 0, $amount, $calculate); |
|
340 | + $formatted = number_format((float)$amount, $decimals, $decimal_sep, $thousands_sep); |
|
341 | 341 | |
342 | - if ( $calculate ) { |
|
343 | - if ( $thousands_sep === "," ) { |
|
344 | - $formatted = str_replace( ",", "", $formatted ); |
|
342 | + if ($calculate) { |
|
343 | + if ($thousands_sep === ",") { |
|
344 | + $formatted = str_replace(",", "", $formatted); |
|
345 | 345 | } |
346 | 346 | |
347 | - if ( $decimal_sep === "," ) { |
|
348 | - $formatted = str_replace( ",", ".", $formatted ); |
|
347 | + if ($decimal_sep === ",") { |
|
348 | + $formatted = str_replace(",", ".", $formatted); |
|
349 | 349 | } |
350 | 350 | } |
351 | 351 | |
352 | - return apply_filters( 'wpinv_amount_format', $formatted, $amount, $decimals, $decimal_sep, $thousands_sep, $calculate ); |
|
352 | + return apply_filters('wpinv_amount_format', $formatted, $amount, $decimals, $decimal_sep, $thousands_sep, $calculate); |
|
353 | 353 | } |
354 | 354 | |
355 | -function wpinv_sanitize_key( $key ) { |
|
355 | +function wpinv_sanitize_key($key) { |
|
356 | 356 | $raw_key = $key; |
357 | - $key = preg_replace( '/[^a-zA-Z0-9_\-\.\:\/]/', '', $key ); |
|
357 | + $key = preg_replace('/[^a-zA-Z0-9_\-\.\:\/]/', '', $key); |
|
358 | 358 | |
359 | - return apply_filters( 'wpinv_sanitize_key', $key, $raw_key ); |
|
359 | + return apply_filters('wpinv_sanitize_key', $key, $raw_key); |
|
360 | 360 | } |
361 | 361 | |
362 | -function wpinv_get_file_extension( $str ) { |
|
363 | - $parts = explode( '.', $str ); |
|
364 | - return end( $parts ); |
|
362 | +function wpinv_get_file_extension($str) { |
|
363 | + $parts = explode('.', $str); |
|
364 | + return end($parts); |
|
365 | 365 | } |
366 | 366 | |
367 | -function wpinv_string_is_image_url( $str ) { |
|
368 | - $ext = wpinv_get_file_extension( $str ); |
|
367 | +function wpinv_string_is_image_url($str) { |
|
368 | + $ext = wpinv_get_file_extension($str); |
|
369 | 369 | |
370 | - switch ( strtolower( $ext ) ) { |
|
370 | + switch (strtolower($ext)) { |
|
371 | 371 | case 'jpeg'; |
372 | 372 | case 'jpg'; |
373 | 373 | $return = true; |
@@ -383,32 +383,32 @@ discard block |
||
383 | 383 | break; |
384 | 384 | } |
385 | 385 | |
386 | - return (bool)apply_filters( 'wpinv_string_is_image', $return, $str ); |
|
386 | + return (bool)apply_filters('wpinv_string_is_image', $return, $str); |
|
387 | 387 | } |
388 | 388 | |
389 | -function wpinv_error_log( $log, $title = '', $file = '', $line = '', $exit = false ) { |
|
390 | - $should_log = apply_filters( 'wpinv_log_errors', WP_DEBUG ); |
|
389 | +function wpinv_error_log($log, $title = '', $file = '', $line = '', $exit = false) { |
|
390 | + $should_log = apply_filters('wpinv_log_errors', WP_DEBUG); |
|
391 | 391 | |
392 | - if ( true === $should_log ) { |
|
392 | + if (true === $should_log) { |
|
393 | 393 | $label = ''; |
394 | - if ( $file && $file !== '' ) { |
|
395 | - $label .= basename( $file ) . ( $line ? '(' . $line . ')' : '' ); |
|
394 | + if ($file && $file !== '') { |
|
395 | + $label .= basename($file) . ($line ? '(' . $line . ')' : ''); |
|
396 | 396 | } |
397 | 397 | |
398 | - if ( $title && $title !== '' ) { |
|
398 | + if ($title && $title !== '') { |
|
399 | 399 | $label = $label !== '' ? $label . ' ' : ''; |
400 | 400 | $label .= $title . ' '; |
401 | 401 | } |
402 | 402 | |
403 | - $label = $label !== '' ? trim( $label ) . ' : ' : ''; |
|
403 | + $label = $label !== '' ? trim($label) . ' : ' : ''; |
|
404 | 404 | |
405 | - if ( is_array( $log ) || is_object( $log ) ) { |
|
406 | - error_log( $label . print_r( $log, true ) ); |
|
405 | + if (is_array($log) || is_object($log)) { |
|
406 | + error_log($label . print_r($log, true)); |
|
407 | 407 | } else { |
408 | - error_log( $label . $log ); |
|
408 | + error_log($label . $log); |
|
409 | 409 | } |
410 | 410 | |
411 | - if ( $exit ) { |
|
411 | + if ($exit) { |
|
412 | 412 | exit; |
413 | 413 | } |
414 | 414 | } |
@@ -416,65 +416,65 @@ discard block |
||
416 | 416 | |
417 | 417 | function wpinv_is_ajax_disabled() { |
418 | 418 | $retval = false; |
419 | - return apply_filters( 'wpinv_is_ajax_disabled', $retval ); |
|
419 | + return apply_filters('wpinv_is_ajax_disabled', $retval); |
|
420 | 420 | } |
421 | 421 | |
422 | -function wpinv_get_current_page_url( $nocache = false ) { |
|
422 | +function wpinv_get_current_page_url($nocache = false) { |
|
423 | 423 | global $wp; |
424 | 424 | |
425 | - if ( get_option( 'permalink_structure' ) ) { |
|
426 | - $base = trailingslashit( home_url( $wp->request ) ); |
|
425 | + if (get_option('permalink_structure')) { |
|
426 | + $base = trailingslashit(home_url($wp->request)); |
|
427 | 427 | } else { |
428 | - $base = add_query_arg( $wp->query_string, '', trailingslashit( home_url( $wp->request ) ) ); |
|
429 | - $base = remove_query_arg( array( 'post_type', 'name' ), $base ); |
|
428 | + $base = add_query_arg($wp->query_string, '', trailingslashit(home_url($wp->request))); |
|
429 | + $base = remove_query_arg(array('post_type', 'name'), $base); |
|
430 | 430 | } |
431 | 431 | |
432 | 432 | $scheme = is_ssl() ? 'https' : 'http'; |
433 | - $uri = set_url_scheme( $base, $scheme ); |
|
433 | + $uri = set_url_scheme($base, $scheme); |
|
434 | 434 | |
435 | - if ( is_front_page() ) { |
|
436 | - $uri = home_url( '/' ); |
|
437 | - } elseif ( wpinv_is_checkout( array(), false ) ) { |
|
435 | + if (is_front_page()) { |
|
436 | + $uri = home_url('/'); |
|
437 | + } elseif (wpinv_is_checkout(array(), false)) { |
|
438 | 438 | $uri = wpinv_get_checkout_uri(); |
439 | 439 | } |
440 | 440 | |
441 | - $uri = apply_filters( 'wpinv_get_current_page_url', $uri ); |
|
441 | + $uri = apply_filters('wpinv_get_current_page_url', $uri); |
|
442 | 442 | |
443 | - if ( $nocache ) { |
|
444 | - $uri = wpinv_add_cache_busting( $uri ); |
|
443 | + if ($nocache) { |
|
444 | + $uri = wpinv_add_cache_busting($uri); |
|
445 | 445 | } |
446 | 446 | |
447 | 447 | return $uri; |
448 | 448 | } |
449 | 449 | |
450 | 450 | function wpinv_get_php_arg_separator_output() { |
451 | - return ini_get( 'arg_separator.output' ); |
|
451 | + return ini_get('arg_separator.output'); |
|
452 | 452 | } |
453 | 453 | |
454 | -function wpinv_rgb_from_hex( $color ) { |
|
455 | - $color = str_replace( '#', '', $color ); |
|
454 | +function wpinv_rgb_from_hex($color) { |
|
455 | + $color = str_replace('#', '', $color); |
|
456 | 456 | // Convert shorthand colors to full format, e.g. "FFF" -> "FFFFFF" |
457 | - $color = preg_replace( '~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color ); |
|
457 | + $color = preg_replace('~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color); |
|
458 | 458 | |
459 | 459 | $rgb = array(); |
460 | - $rgb['R'] = hexdec( $color{0}.$color{1} ); |
|
461 | - $rgb['G'] = hexdec( $color{2}.$color{3} ); |
|
462 | - $rgb['B'] = hexdec( $color{4}.$color{5} ); |
|
460 | + $rgb['R'] = hexdec($color{0} . $color{1} ); |
|
461 | + $rgb['G'] = hexdec($color{2} . $color{3} ); |
|
462 | + $rgb['B'] = hexdec($color{4} . $color{5} ); |
|
463 | 463 | |
464 | 464 | return $rgb; |
465 | 465 | } |
466 | 466 | |
467 | -function wpinv_hex_darker( $color, $factor = 30 ) { |
|
468 | - $base = wpinv_rgb_from_hex( $color ); |
|
467 | +function wpinv_hex_darker($color, $factor = 30) { |
|
468 | + $base = wpinv_rgb_from_hex($color); |
|
469 | 469 | $color = '#'; |
470 | 470 | |
471 | - foreach ( $base as $k => $v ) { |
|
471 | + foreach ($base as $k => $v) { |
|
472 | 472 | $amount = $v / 100; |
473 | - $amount = round( $amount * $factor ); |
|
473 | + $amount = round($amount * $factor); |
|
474 | 474 | $new_decimal = $v - $amount; |
475 | 475 | |
476 | - $new_hex_component = dechex( $new_decimal ); |
|
477 | - if ( strlen( $new_hex_component ) < 2 ) { |
|
476 | + $new_hex_component = dechex($new_decimal); |
|
477 | + if (strlen($new_hex_component) < 2) { |
|
478 | 478 | $new_hex_component = "0" . $new_hex_component; |
479 | 479 | } |
480 | 480 | $color .= $new_hex_component; |
@@ -483,18 +483,18 @@ discard block |
||
483 | 483 | return $color; |
484 | 484 | } |
485 | 485 | |
486 | -function wpinv_hex_lighter( $color, $factor = 30 ) { |
|
487 | - $base = wpinv_rgb_from_hex( $color ); |
|
486 | +function wpinv_hex_lighter($color, $factor = 30) { |
|
487 | + $base = wpinv_rgb_from_hex($color); |
|
488 | 488 | $color = '#'; |
489 | 489 | |
490 | - foreach ( $base as $k => $v ) { |
|
490 | + foreach ($base as $k => $v) { |
|
491 | 491 | $amount = 255 - $v; |
492 | 492 | $amount = $amount / 100; |
493 | - $amount = round( $amount * $factor ); |
|
493 | + $amount = round($amount * $factor); |
|
494 | 494 | $new_decimal = $v + $amount; |
495 | 495 | |
496 | - $new_hex_component = dechex( $new_decimal ); |
|
497 | - if ( strlen( $new_hex_component ) < 2 ) { |
|
496 | + $new_hex_component = dechex($new_decimal); |
|
497 | + if (strlen($new_hex_component) < 2) { |
|
498 | 498 | $new_hex_component = "0" . $new_hex_component; |
499 | 499 | } |
500 | 500 | $color .= $new_hex_component; |
@@ -503,22 +503,22 @@ discard block |
||
503 | 503 | return $color; |
504 | 504 | } |
505 | 505 | |
506 | -function wpinv_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) { |
|
507 | - $hex = str_replace( '#', '', $color ); |
|
506 | +function wpinv_light_or_dark($color, $dark = '#000000', $light = '#FFFFFF') { |
|
507 | + $hex = str_replace('#', '', $color); |
|
508 | 508 | |
509 | - $c_r = hexdec( substr( $hex, 0, 2 ) ); |
|
510 | - $c_g = hexdec( substr( $hex, 2, 2 ) ); |
|
511 | - $c_b = hexdec( substr( $hex, 4, 2 ) ); |
|
509 | + $c_r = hexdec(substr($hex, 0, 2)); |
|
510 | + $c_g = hexdec(substr($hex, 2, 2)); |
|
511 | + $c_b = hexdec(substr($hex, 4, 2)); |
|
512 | 512 | |
513 | - $brightness = ( ( $c_r * 299 ) + ( $c_g * 587 ) + ( $c_b * 114 ) ) / 1000; |
|
513 | + $brightness = (($c_r * 299) + ($c_g * 587) + ($c_b * 114)) / 1000; |
|
514 | 514 | |
515 | 515 | return $brightness > 155 ? $dark : $light; |
516 | 516 | } |
517 | 517 | |
518 | -function wpinv_format_hex( $hex ) { |
|
519 | - $hex = trim( str_replace( '#', '', $hex ) ); |
|
518 | +function wpinv_format_hex($hex) { |
|
519 | + $hex = trim(str_replace('#', '', $hex)); |
|
520 | 520 | |
521 | - if ( strlen( $hex ) == 3 ) { |
|
521 | + if (strlen($hex) == 3) { |
|
522 | 522 | $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; |
523 | 523 | } |
524 | 524 | |
@@ -538,12 +538,12 @@ discard block |
||
538 | 538 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
539 | 539 | * @return string |
540 | 540 | */ |
541 | -function wpinv_utf8_strimwidth( $str, $start, $width, $trimmaker = '', $encoding = 'UTF-8' ) { |
|
542 | - if ( function_exists( 'mb_strimwidth' ) ) { |
|
543 | - return mb_strimwidth( $str, $start, $width, $trimmaker, $encoding ); |
|
541 | +function wpinv_utf8_strimwidth($str, $start, $width, $trimmaker = '', $encoding = 'UTF-8') { |
|
542 | + if (function_exists('mb_strimwidth')) { |
|
543 | + return mb_strimwidth($str, $start, $width, $trimmaker, $encoding); |
|
544 | 544 | } |
545 | 545 | |
546 | - return wpinv_utf8_substr( $str, $start, $width, $encoding ) . $trimmaker; |
|
546 | + return wpinv_utf8_substr($str, $start, $width, $encoding) . $trimmaker; |
|
547 | 547 | } |
548 | 548 | |
549 | 549 | /** |
@@ -555,28 +555,28 @@ discard block |
||
555 | 555 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
556 | 556 | * @return int Returns the number of characters in string. |
557 | 557 | */ |
558 | -function wpinv_utf8_strlen( $str, $encoding = 'UTF-8' ) { |
|
559 | - if ( function_exists( 'mb_strlen' ) ) { |
|
560 | - return mb_strlen( $str, $encoding ); |
|
558 | +function wpinv_utf8_strlen($str, $encoding = 'UTF-8') { |
|
559 | + if (function_exists('mb_strlen')) { |
|
560 | + return mb_strlen($str, $encoding); |
|
561 | 561 | } |
562 | 562 | |
563 | - return strlen( $str ); |
|
563 | + return strlen($str); |
|
564 | 564 | } |
565 | 565 | |
566 | -function wpinv_utf8_strtolower( $str, $encoding = 'UTF-8' ) { |
|
567 | - if ( function_exists( 'mb_strtolower' ) ) { |
|
568 | - return mb_strtolower( $str, $encoding ); |
|
566 | +function wpinv_utf8_strtolower($str, $encoding = 'UTF-8') { |
|
567 | + if (function_exists('mb_strtolower')) { |
|
568 | + return mb_strtolower($str, $encoding); |
|
569 | 569 | } |
570 | 570 | |
571 | - return strtolower( $str ); |
|
571 | + return strtolower($str); |
|
572 | 572 | } |
573 | 573 | |
574 | -function wpinv_utf8_strtoupper( $str, $encoding = 'UTF-8' ) { |
|
575 | - if ( function_exists( 'mb_strtoupper' ) ) { |
|
576 | - return mb_strtoupper( $str, $encoding ); |
|
574 | +function wpinv_utf8_strtoupper($str, $encoding = 'UTF-8') { |
|
575 | + if (function_exists('mb_strtoupper')) { |
|
576 | + return mb_strtoupper($str, $encoding); |
|
577 | 577 | } |
578 | 578 | |
579 | - return strtoupper( $str ); |
|
579 | + return strtoupper($str); |
|
580 | 580 | } |
581 | 581 | |
582 | 582 | /** |
@@ -590,12 +590,12 @@ discard block |
||
590 | 590 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
591 | 591 | * @return int Returns the position of the first occurrence of search in the string. |
592 | 592 | */ |
593 | -function wpinv_utf8_strpos( $str, $find, $offset = 0, $encoding = 'UTF-8' ) { |
|
594 | - if ( function_exists( 'mb_strpos' ) ) { |
|
595 | - return mb_strpos( $str, $find, $offset, $encoding ); |
|
593 | +function wpinv_utf8_strpos($str, $find, $offset = 0, $encoding = 'UTF-8') { |
|
594 | + if (function_exists('mb_strpos')) { |
|
595 | + return mb_strpos($str, $find, $offset, $encoding); |
|
596 | 596 | } |
597 | 597 | |
598 | - return strpos( $str, $find, $offset ); |
|
598 | + return strpos($str, $find, $offset); |
|
599 | 599 | } |
600 | 600 | |
601 | 601 | /** |
@@ -609,12 +609,12 @@ discard block |
||
609 | 609 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
610 | 610 | * @return int Returns the position of the last occurrence of search. |
611 | 611 | */ |
612 | -function wpinv_utf8_strrpos( $str, $find, $offset = 0, $encoding = 'UTF-8' ) { |
|
613 | - if ( function_exists( 'mb_strrpos' ) ) { |
|
614 | - return mb_strrpos( $str, $find, $offset, $encoding ); |
|
612 | +function wpinv_utf8_strrpos($str, $find, $offset = 0, $encoding = 'UTF-8') { |
|
613 | + if (function_exists('mb_strrpos')) { |
|
614 | + return mb_strrpos($str, $find, $offset, $encoding); |
|
615 | 615 | } |
616 | 616 | |
617 | - return strrpos( $str, $find, $offset ); |
|
617 | + return strrpos($str, $find, $offset); |
|
618 | 618 | } |
619 | 619 | |
620 | 620 | /** |
@@ -629,16 +629,16 @@ discard block |
||
629 | 629 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
630 | 630 | * @return string |
631 | 631 | */ |
632 | -function wpinv_utf8_substr( $str, $start, $length = null, $encoding = 'UTF-8' ) { |
|
633 | - if ( function_exists( 'mb_substr' ) ) { |
|
634 | - if ( $length === null ) { |
|
635 | - return mb_substr( $str, $start, wpinv_utf8_strlen( $str, $encoding ), $encoding ); |
|
632 | +function wpinv_utf8_substr($str, $start, $length = null, $encoding = 'UTF-8') { |
|
633 | + if (function_exists('mb_substr')) { |
|
634 | + if ($length === null) { |
|
635 | + return mb_substr($str, $start, wpinv_utf8_strlen($str, $encoding), $encoding); |
|
636 | 636 | } else { |
637 | - return mb_substr( $str, $start, $length, $encoding ); |
|
637 | + return mb_substr($str, $start, $length, $encoding); |
|
638 | 638 | } |
639 | 639 | } |
640 | 640 | |
641 | - return substr( $str, $start, $length ); |
|
641 | + return substr($str, $start, $length); |
|
642 | 642 | } |
643 | 643 | |
644 | 644 | /** |
@@ -650,48 +650,48 @@ discard block |
||
650 | 650 | * @param string $encoding The encoding parameter is the character encoding. Default "UTF-8". |
651 | 651 | * @return string The width of string. |
652 | 652 | */ |
653 | -function wpinv_utf8_strwidth( $str, $encoding = 'UTF-8' ) { |
|
654 | - if ( function_exists( 'mb_strwidth' ) ) { |
|
655 | - return mb_strwidth( $str, $encoding ); |
|
653 | +function wpinv_utf8_strwidth($str, $encoding = 'UTF-8') { |
|
654 | + if (function_exists('mb_strwidth')) { |
|
655 | + return mb_strwidth($str, $encoding); |
|
656 | 656 | } |
657 | 657 | |
658 | - return wpinv_utf8_strlen( $str, $encoding ); |
|
658 | + return wpinv_utf8_strlen($str, $encoding); |
|
659 | 659 | } |
660 | 660 | |
661 | -function wpinv_utf8_ucfirst( $str, $lower_str_end = false, $encoding = 'UTF-8' ) { |
|
662 | - if ( function_exists( 'mb_strlen' ) ) { |
|
663 | - $first_letter = wpinv_utf8_strtoupper( wpinv_utf8_substr( $str, 0, 1, $encoding ), $encoding ); |
|
661 | +function wpinv_utf8_ucfirst($str, $lower_str_end = false, $encoding = 'UTF-8') { |
|
662 | + if (function_exists('mb_strlen')) { |
|
663 | + $first_letter = wpinv_utf8_strtoupper(wpinv_utf8_substr($str, 0, 1, $encoding), $encoding); |
|
664 | 664 | $str_end = ""; |
665 | 665 | |
666 | - if ( $lower_str_end ) { |
|
667 | - $str_end = wpinv_utf8_strtolower( wpinv_utf8_substr( $str, 1, wpinv_utf8_strlen( $str, $encoding ), $encoding ), $encoding ); |
|
666 | + if ($lower_str_end) { |
|
667 | + $str_end = wpinv_utf8_strtolower(wpinv_utf8_substr($str, 1, wpinv_utf8_strlen($str, $encoding), $encoding), $encoding); |
|
668 | 668 | } else { |
669 | - $str_end = wpinv_utf8_substr( $str, 1, wpinv_utf8_strlen( $str, $encoding ), $encoding ); |
|
669 | + $str_end = wpinv_utf8_substr($str, 1, wpinv_utf8_strlen($str, $encoding), $encoding); |
|
670 | 670 | } |
671 | 671 | |
672 | 672 | return $first_letter . $str_end; |
673 | 673 | } |
674 | 674 | |
675 | - return ucfirst( $str ); |
|
675 | + return ucfirst($str); |
|
676 | 676 | } |
677 | 677 | |
678 | -function wpinv_utf8_ucwords( $str, $encoding = 'UTF-8' ) { |
|
679 | - if ( function_exists( 'mb_convert_case' ) ) { |
|
680 | - return mb_convert_case( $str, MB_CASE_TITLE, $encoding ); |
|
678 | +function wpinv_utf8_ucwords($str, $encoding = 'UTF-8') { |
|
679 | + if (function_exists('mb_convert_case')) { |
|
680 | + return mb_convert_case($str, MB_CASE_TITLE, $encoding); |
|
681 | 681 | } |
682 | 682 | |
683 | - return ucwords( $str ); |
|
683 | + return ucwords($str); |
|
684 | 684 | } |
685 | 685 | |
686 | -function wpinv_period_in_days( $period, $unit ) { |
|
687 | - $period = absint( $period ); |
|
686 | +function wpinv_period_in_days($period, $unit) { |
|
687 | + $period = absint($period); |
|
688 | 688 | |
689 | - if ( $period > 0 ) { |
|
690 | - if ( in_array( strtolower( $unit ), array( 'w', 'week', 'weeks' ) ) ) { |
|
689 | + if ($period > 0) { |
|
690 | + if (in_array(strtolower($unit), array('w', 'week', 'weeks'))) { |
|
691 | 691 | $period = $period * 7; |
692 | - } else if ( in_array( strtolower( $unit ), array( 'm', 'month', 'months' ) ) ) { |
|
692 | + } else if (in_array(strtolower($unit), array('m', 'month', 'months'))) { |
|
693 | 693 | $period = $period * 30; |
694 | - } else if ( in_array( strtolower( $unit ), array( 'y', 'year', 'years' ) ) ) { |
|
694 | + } else if (in_array(strtolower($unit), array('y', 'year', 'years'))) { |
|
695 | 695 | $period = $period * 365; |
696 | 696 | } |
697 | 697 | } |
@@ -130,7 +130,6 @@ |
||
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 | } |
@@ -5,12 +5,12 @@ |
||
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 | { |
@@ -9,780 +9,780 @@ |
||
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 | } |
@@ -238,7 +238,7 @@ discard block |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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 |
||
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) { |