Passed
Push — master ( d8912d...4b0495 )
by Brian
05:06
created
includes/payments/class-getpaid-payment-form-submission-refresh-prices.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -12,257 +12,257 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Payment_Form_Submission_Refresh_Prices {
14 14
 
15
-	/**
16
-	 * Contains the response for refreshing prices.
17
-	 * @var array
18
-	 */
19
-	public $response = array();
15
+    /**
16
+     * Contains the response for refreshing prices.
17
+     * @var array
18
+     */
19
+    public $response = array();
20 20
 
21 21
     /**
22
-	 * Class constructor
23
-	 *
24
-	 * @param GetPaid_Payment_Form_Submission $submission
25
-	 */
26
-	public function __construct( $submission ) {
27
-
28
-		$this->response = array(
29
-			'submission_id' => $submission->id,
22
+     * Class constructor
23
+     *
24
+     * @param GetPaid_Payment_Form_Submission $submission
25
+     */
26
+    public function __construct( $submission ) {
27
+
28
+        $this->response = array(
29
+            'submission_id' => $submission->id,
30 30
             'has_recurring' => $submission->has_recurring,
31 31
             'is_free'       => ! $submission->should_collect_payment_details(),
32
-		);
33
-
34
-		$this->add_totals( $submission );
35
-		$this->add_texts( $submission );
36
-		$this->add_items( $submission );
37
-		$this->add_fees( $submission );
38
-		$this->add_discounts( $submission );
39
-		$this->add_taxes( $submission );
40
-		$this->add_gateways( $submission );
41
-
42
-	}
43
-
44
-	/**
45
-	 * Adds totals to a response for submission refresh prices.
46
-	 *
47
-	 * @param GetPaid_Payment_Form_Submission $submission
48
-	 */
49
-	public function add_totals( $submission ) {
50
-
51
-		$this->response = array_merge(
52
-			$this->response,
53
-			array(
54
-
55
-				'totals'        => array(
56
-					'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
57
-					'discount'  => $submission->format_amount( $submission->get_discount() ),
58
-					'fees'      => $submission->format_amount( $submission->get_fee() ),
59
-					'tax'       => $submission->format_amount( $submission->get_tax() ),
60
-					'total'     => $submission->format_amount( $submission->get_total() ),
61
-					'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
62
-				),
63
-
64
-				'recurring'     => array(
65
-					'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
66
-					'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
67
-					'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
68
-					'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
69
-					'total'     => $submission->format_amount( $submission->get_recurring_total() ),
70
-				),
71
-
72
-				'initial_amt'   => wpinv_round_amount( $submission->get_total(), null, true ),
73
-				'currency'      => $submission->get_currency(),
74
-
75
-			)
76
-		);
77
-
78
-	}
79
-
80
-	/**
81
-	 * Adds texts to a response for submission refresh prices.
82
-	 *
83
-	 * @param GetPaid_Payment_Form_Submission $submission
84
-	 */
85
-	public function add_texts( $submission ) {
86
-
87
-		$payable = $submission->format_amount( $submission->get_total() );
88
-
89
-		if ( $submission->has_recurring != 0 ) {
90
-
91
-			$recurring = new WPInv_Item( $submission->has_recurring );
92
-			$period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
93
-
94
-			if ( $submission->get_total() == $submission->get_recurring_total() ) {
95
-				$payable = "$payable / $period";
96
-			} else {
97
-				$payable = sprintf(
98
-					__( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
99
-					$submission->format_amount( $submission->get_total() ),
100
-					$submission->format_amount( $submission->get_recurring_total() ),
101
-					$period
102
-				);
103
-			}
104
-
105
-		}
106
-
107
-		$texts = array(
108
-			'.getpaid-checkout-total-payable' => $payable,
109
-		);
110
-
111
-		foreach ( $submission->get_items() as $item ) {
112
-			$item_id                                               = $item->get_id();
113
-			$initial_price                                         = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_sub_total(), $submission->get_discount_code(), false ) );
114
-			$recurring_price                                       = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_recurring_sub_total(), $submission->get_discount_code(), true ) );
115
-			$texts[".item-$item_id .getpaid-form-item-price-desc"] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
116
-		}
117
-
118
-		$this->response = array_merge( $this->response, array( 'texts' => $texts ) );
119
-
120
-	}
121
-
122
-	/**
123
-	 * Adds items to a response for submission refresh prices.
124
-	 *
125
-	 * @param GetPaid_Payment_Form_Submission $submission
126
-	 */
127
-	public function add_items( $submission ) {
128
-
129
-		// Add items.
130
-		$items = array();
32
+        );
33
+
34
+        $this->add_totals( $submission );
35
+        $this->add_texts( $submission );
36
+        $this->add_items( $submission );
37
+        $this->add_fees( $submission );
38
+        $this->add_discounts( $submission );
39
+        $this->add_taxes( $submission );
40
+        $this->add_gateways( $submission );
41
+
42
+    }
43
+
44
+    /**
45
+     * Adds totals to a response for submission refresh prices.
46
+     *
47
+     * @param GetPaid_Payment_Form_Submission $submission
48
+     */
49
+    public function add_totals( $submission ) {
50
+
51
+        $this->response = array_merge(
52
+            $this->response,
53
+            array(
54
+
55
+                'totals'        => array(
56
+                    'subtotal'  => $submission->format_amount( $submission->get_subtotal() ),
57
+                    'discount'  => $submission->format_amount( $submission->get_discount() ),
58
+                    'fees'      => $submission->format_amount( $submission->get_fee() ),
59
+                    'tax'       => $submission->format_amount( $submission->get_tax() ),
60
+                    'total'     => $submission->format_amount( $submission->get_total() ),
61
+                    'raw_total' => html_entity_decode( sanitize_text_field( $submission->format_amount( $submission->get_total() ) ), ENT_QUOTES ),
62
+                ),
63
+
64
+                'recurring'     => array(
65
+                    'subtotal'  => $submission->format_amount( $submission->get_recurring_subtotal() ),
66
+                    'discount'  => $submission->format_amount( $submission->get_recurring_discount() ),
67
+                    'fees'      => $submission->format_amount( $submission->get_recurring_fee() ),
68
+                    'tax'       => $submission->format_amount( $submission->get_recurring_tax() ),
69
+                    'total'     => $submission->format_amount( $submission->get_recurring_total() ),
70
+                ),
71
+
72
+                'initial_amt'   => wpinv_round_amount( $submission->get_total(), null, true ),
73
+                'currency'      => $submission->get_currency(),
74
+
75
+            )
76
+        );
77
+
78
+    }
79
+
80
+    /**
81
+     * Adds texts to a response for submission refresh prices.
82
+     *
83
+     * @param GetPaid_Payment_Form_Submission $submission
84
+     */
85
+    public function add_texts( $submission ) {
86
+
87
+        $payable = $submission->format_amount( $submission->get_total() );
88
+
89
+        if ( $submission->has_recurring != 0 ) {
90
+
91
+            $recurring = new WPInv_Item( $submission->has_recurring );
92
+            $period    = getpaid_get_subscription_period_label( $recurring->get_recurring_period( true ), $recurring->get_recurring_interval(), '' );
93
+
94
+            if ( $submission->get_total() == $submission->get_recurring_total() ) {
95
+                $payable = "$payable / $period";
96
+            } else {
97
+                $payable = sprintf(
98
+                    __( '%1$s (renews at %2$s / %3$s)', 'invoicing' ),
99
+                    $submission->format_amount( $submission->get_total() ),
100
+                    $submission->format_amount( $submission->get_recurring_total() ),
101
+                    $period
102
+                );
103
+            }
104
+
105
+        }
106
+
107
+        $texts = array(
108
+            '.getpaid-checkout-total-payable' => $payable,
109
+        );
131 110
 
132 111
         foreach ( $submission->get_items() as $item ) {
133
-			$item_id           = $item->get_id();
134
-			$items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
135
-		}
112
+            $item_id                                               = $item->get_id();
113
+            $initial_price                                         = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_sub_total(), $submission->get_discount_code(), false ) );
114
+            $recurring_price                                       = $submission->format_amount( $this->standardize_price( $item->get_id(), $item->get_recurring_sub_total(), $submission->get_discount_code(), true ) );
115
+            $texts[".item-$item_id .getpaid-form-item-price-desc"] = getpaid_item_recurring_price_help_text( $item, $submission->get_currency(), $initial_price, $recurring_price );
116
+        }
136 117
 
137
-		$this->response = array_merge(
138
-			$this->response,
139
-			array( 'items' => $items )
140
-		);
118
+        $this->response = array_merge( $this->response, array( 'texts' => $texts ) );
141 119
 
142
-	}
120
+    }
143 121
 
144
-	/**
145
-	 * Adds fees to a response for submission refresh prices.
146
-	 *
147
-	 * @param GetPaid_Payment_Form_Submission $submission
148
-	 */
149
-	public function add_fees( $submission ) {
122
+    /**
123
+     * Adds items to a response for submission refresh prices.
124
+     *
125
+     * @param GetPaid_Payment_Form_Submission $submission
126
+     */
127
+    public function add_items( $submission ) {
128
+
129
+        // Add items.
130
+        $items = array();
131
+
132
+        foreach ( $submission->get_items() as $item ) {
133
+            $item_id           = $item->get_id();
134
+            $items["$item_id"] = $submission->format_amount( $item->get_sub_total() );
135
+        }
150 136
 
151
-		$fees = array();
137
+        $this->response = array_merge(
138
+            $this->response,
139
+            array( 'items' => $items )
140
+        );
141
+
142
+    }
143
+
144
+    /**
145
+     * Adds fees to a response for submission refresh prices.
146
+     *
147
+     * @param GetPaid_Payment_Form_Submission $submission
148
+     */
149
+    public function add_fees( $submission ) {
150
+
151
+        $fees = array();
152 152
 
153 153
         foreach ( $submission->get_fees() as $name => $data ) {
154
-			$fees[$name] = $submission->format_amount( $data['initial_fee'] );
155
-		}
154
+            $fees[$name] = $submission->format_amount( $data['initial_fee'] );
155
+        }
156 156
 
157
-		$this->response = array_merge(
158
-			$this->response,
159
-			array( 'fees' => $fees )
160
-		);
157
+        $this->response = array_merge(
158
+            $this->response,
159
+            array( 'fees' => $fees )
160
+        );
161 161
 
162
-	}
162
+    }
163 163
 
164
-	/**
165
-	 * Adds discounts to a response for submission refresh prices.
166
-	 *
167
-	 * @param GetPaid_Payment_Form_Submission $submission
168
-	 */
169
-	public function add_discounts( $submission ) {
164
+    /**
165
+     * Adds discounts to a response for submission refresh prices.
166
+     *
167
+     * @param GetPaid_Payment_Form_Submission $submission
168
+     */
169
+    public function add_discounts( $submission ) {
170 170
 
171
-		$discounts = array();
171
+        $discounts = array();
172 172
 
173 173
         foreach ( $submission->get_discounts() as $name => $data ) {
174
-			$discounts[$name] = $submission->format_amount( $data['initial_discount'] );
175
-		}
176
-
177
-		$this->response = array_merge(
178
-			$this->response,
179
-			array( 'discounts' => $discounts )
180
-		);
174
+            $discounts[$name] = $submission->format_amount( $data['initial_discount'] );
175
+        }
181 176
 
182
-	}
177
+        $this->response = array_merge(
178
+            $this->response,
179
+            array( 'discounts' => $discounts )
180
+        );
183 181
 
184
-	/**
185
-	 * Adds taxes to a response for submission refresh prices.
186
-	 *
187
-	 * @param GetPaid_Payment_Form_Submission $submission
188
-	 */
189
-	public function add_taxes( $submission ) {
182
+    }
190 183
 
191
-		$taxes  = array();
192
-		$markup = '';
184
+    /**
185
+     * Adds taxes to a response for submission refresh prices.
186
+     *
187
+     * @param GetPaid_Payment_Form_Submission $submission
188
+     */
189
+    public function add_taxes( $submission ) {
190
+
191
+        $taxes  = array();
192
+        $markup = '';
193 193
         foreach ( $submission->get_taxes() as $name => $data ) {
194
-			$name          = sanitize_text_field( $name );
195
-			$amount        = $submission->format_amount( $data['initial_tax'] );
196
-			$taxes[$name]  = $amount;
197
-			$markup       .= "<small class='form-text'>$name : $amount</small>";
198
-		}
194
+            $name          = sanitize_text_field( $name );
195
+            $amount        = $submission->format_amount( $data['initial_tax'] );
196
+            $taxes[$name]  = $amount;
197
+            $markup       .= "<small class='form-text'>$name : $amount</small>";
198
+        }
199 199
 
200
-		if ( wpinv_display_individual_tax_rates() ) {
201
-			$this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
202
-		}
200
+        if ( wpinv_display_individual_tax_rates() ) {
201
+            $this->response['texts']['.getpaid-form-cart-totals-total-tax'] = $markup;
202
+        }
203 203
 
204
-		$this->response = array_merge(
205
-			$this->response,
206
-			array( 'taxes' => $taxes )
207
-		);
204
+        $this->response = array_merge(
205
+            $this->response,
206
+            array( 'taxes' => $taxes )
207
+        );
208 208
 
209
-	}
209
+    }
210 210
 
211
-	/**
212
-	 * Adds gateways to a response for submission refresh prices.
213
-	 *
214
-	 * @param GetPaid_Payment_Form_Submission $submission
215
-	 */
216
-	public function add_gateways( $submission ) {
211
+    /**
212
+     * Adds gateways to a response for submission refresh prices.
213
+     *
214
+     * @param GetPaid_Payment_Form_Submission $submission
215
+     */
216
+    public function add_gateways( $submission ) {
217 217
 
218
-		$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
218
+        $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
219 219
 
220
-		if ( $this->response['has_recurring'] ) {
220
+        if ( $this->response['has_recurring'] ) {
221 221
 
222
-			foreach ( $gateways as $i => $gateway ) {
222
+            foreach ( $gateways as $i => $gateway ) {
223 223
 
224
-				if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
225
-					unset( $gateways[ $i ] );
226
-				}
224
+                if ( ! wpinv_gateway_support_subscription( $gateway ) ) {
225
+                    unset( $gateways[ $i ] );
226
+                }
227 227
 
228
-			}
228
+            }
229 229
 
230
-		}
230
+        }
231 231
 
232 232
 
233
-		$gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
234
-		$this->response = array_merge(
235
-			$this->response,
236
-			array( 'gateways' => $gateways )
237
-		);
233
+        $gateways = apply_filters( 'getpaid_submission_gateways', $gateways, $submission );
234
+        $this->response = array_merge(
235
+            $this->response,
236
+            array( 'gateways' => $gateways )
237
+        );
238 238
 
239
-	}
239
+    }
240 240
 
241
-	/**
242
-	 * Standardizes prices.
243
-	 *
244
-	 * @param int $item_id
245
-	 * @param float $item_total
246
-	 * @param string $discount_code
247
-	 * @param bool $recurring
248
-	 */
249
-	public function standardize_price( $item_id, $item_total, $discount_code, $recurring = false ) {
241
+    /**
242
+     * Standardizes prices.
243
+     *
244
+     * @param int $item_id
245
+     * @param float $item_total
246
+     * @param string $discount_code
247
+     * @param bool $recurring
248
+     */
249
+    public function standardize_price( $item_id, $item_total, $discount_code, $recurring = false ) {
250 250
 
251
-		$standardadized_price = $item_total;
251
+        $standardadized_price = $item_total;
252 252
 
253
-		// Do we have a $discount_code?
254
-		if ( ! empty( $discount_code ) ) {
253
+        // Do we have a $discount_code?
254
+        if ( ! empty( $discount_code ) ) {
255 255
 
256
-			$discount = new WPInv_Discount( $discount_code );
256
+            $discount = new WPInv_Discount( $discount_code );
257 257
 
258
-			if ( $discount->exists() && $discount->is_valid_for_items( $item_id ) && ( ! $recurring || $discount->is_recurring() ) ) {
259
-				$standardadized_price = $item_total - $discount->get_discounted_amount( $item_total );
260
-			}
258
+            if ( $discount->exists() && $discount->is_valid_for_items( $item_id ) && ( ! $recurring || $discount->is_recurring() ) ) {
259
+                $standardadized_price = $item_total - $discount->get_discounted_amount( $item_total );
260
+            }
261 261
 
262
-		}
262
+        }
263 263
 
264
-    	return max( 0, $standardadized_price );
264
+        return max( 0, $standardadized_price );
265 265
 
266
-	}
266
+    }
267 267
 
268 268
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/address.php 1 patch
Indentation   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -10,7 +10,7 @@  discard block
 block discarded – undo
10 10
 defined( 'ABSPATH' ) || exit;
11 11
 
12 12
 if ( empty( $fields ) ) {
13
-	return;
13
+    return;
14 14
 }
15 15
 
16 16
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -18,12 +18,12 @@  discard block
 block discarded – undo
18 18
 
19 19
 // Prepare the user's country.
20 20
 if ( ! empty( $form->invoice ) ) {
21
-	$country = $form->invoice->get_country();
21
+    $country = $form->invoice->get_country();
22 22
 }
23 23
 
24 24
 if ( empty( $country ) ) {
25
-	$country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
-	$country = empty( $country ) ? wpinv_get_default_country() : $country;
25
+    $country = empty( $country ) ? getpaid_get_ip_country() : $country;
26
+    $country = empty( $country ) ? wpinv_get_default_country() : $country;
27 27
 }
28 28
 
29 29
 // A prefix for all ids (so that a form can be included in the same page multiple times).
@@ -55,10 +55,10 @@  discard block
 block discarded – undo
55 55
 	<!-- Start Billing Address -->
56 56
 	<div class="getpaid-billing-address-wrapper">
57 57
 		<?php
58
-			$field_type = 'billing';
59
-			include plugin_dir_path( __FILE__ ) . 'address-fields.php';
60
-			do_action( 'getpaid_after_payment_form_billing_fields', $form );
61
-		?>
58
+            $field_type = 'billing';
59
+            include plugin_dir_path( __FILE__ ) . 'address-fields.php';
60
+            do_action( 'getpaid_after_payment_form_billing_fields', $form );
61
+        ?>
62 62
 	</div>
63 63
 	<!-- End Billing Address -->
64 64
 
@@ -70,20 +70,20 @@  discard block
 block discarded – undo
70 70
 
71 71
 	<?php
72 72
 
73
-		echo aui()->input(
74
-		    array(
75
-			    'type'       => 'checkbox',
76
-			    'name'       => 'same-shipping-address',
77
-			    'id'         => "shipping-toggle$uniqid",
78
-			    'required'   => false,
79
-			    'label'      => wp_kses_post( $shipping_address_toggle ),
80
-			    'value'      => 1,
81
-			    'checked'    => true,
82
-				'class'      => 'w-auto',
83
-		    )
84
-		);
73
+        echo aui()->input(
74
+            array(
75
+                'type'       => 'checkbox',
76
+                'name'       => 'same-shipping-address',
77
+                'id'         => "shipping-toggle$uniqid",
78
+                'required'   => false,
79
+                'label'      => wp_kses_post( $shipping_address_toggle ),
80
+                'value'      => 1,
81
+                'checked'    => true,
82
+                'class'      => 'w-auto',
83
+            )
84
+        );
85 85
 
86
-	?>
86
+    ?>
87 87
 
88 88
 
89 89
 	<!-- Start Shipping Address Title -->
@@ -102,10 +102,10 @@  discard block
 block discarded – undo
102 102
 	<!-- Start Shipping Address -->
103 103
 	<div class="getpaid-shipping-address-wrapper">
104 104
 		<?php
105
-			$field_type = 'shipping';
106
-			include plugin_dir_path( __FILE__ ) . 'address-fields.php';
107
-			do_action( 'getpaid_after_payment_form_shipping_fields', $form );
108
-		?>
105
+            $field_type = 'shipping';
106
+            include plugin_dir_path( __FILE__ ) . 'address-fields.php';
107
+            do_action( 'getpaid_after_payment_form_shipping_fields', $form );
108
+        ?>
109 109
 	</div>
110 110
 	<!-- End Shipping Address -->
111 111
 
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-invoice-data-store.php 1 patch
Indentation   +475 added lines, -475 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  *
6 6
  */
7 7
 if ( ! defined( 'ABSPATH' ) ) {
8
-	exit;
8
+    exit;
9 9
 }
10 10
 
11 11
 /**
@@ -15,540 +15,540 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class GetPaid_Invoice_Data_Store extends GetPaid_Data_Store_WP {
17 17
 
18
-	/**
19
-	 * Data stored in meta keys, but not considered "meta" for a discount.
20
-	 *
21
-	 * @since 1.0.19
22
-	 * @var array
23
-	 */
24
-	protected $internal_meta_keys = array(
25
-		'_wpinv_subscr_profile_id',
26
-		'_wpinv_subscription_id',
27
-		'_wpinv_taxes',
28
-		'_wpinv_fees',
29
-		'_wpinv_discounts',
30
-		'_wpinv_submission_id',
31
-		'_wpinv_payment_form',
32
-		'_wpinv_is_viewed',
33
-		'_wpinv_phone',
34
-		'wpinv_email_cc',
35
-		'wpinv_template',
36
-		'wpinv_created_via'
37
-	);
38
-
39
-	/**
40
-	 * A map of meta keys to data props.
41
-	 *
42
-	 * @since 1.0.19
43
-	 *
44
-	 * @var array
45
-	 */
46
-	protected $meta_key_to_props = array(
47
-		'_wpinv_subscr_profile_id' => 'remote_subscription_id',
48
-		'_wpinv_subscription_id'   => 'subscription_id',
49
-		'_wpinv_taxes'             => 'taxes',
50
-		'_wpinv_fees'              => 'fees',
51
-		'_wpinv_discounts'         => 'discounts',
52
-		'_wpinv_submission_id'     => 'submission_id',
53
-		'_wpinv_payment_form'      => 'payment_form',
54
-		'_wpinv_is_viewed'         => 'is_viewed',
55
-		'wpinv_email_cc'           => 'email_cc',
56
-		'wpinv_template'           => 'template',
57
-		'wpinv_created_via'        => 'created_via',
58
-		'_wpinv_phone'             => 'phone',
59
-	);
60
-
61
-	/**
62
-	 * A map of database fields to data props.
63
-	 *
64
-	 * @since 1.0.19
65
-	 *
66
-	 * @var array
67
-	 */
68
-	protected $database_fields_to_props = array(
69
-		'post_id'            => 'id',
70
-		'number'             => 'number',
71
-		'currency'           => 'currency',
72
-		'key'                => 'key',
73
-		'type'               => 'type',
74
-		'mode'               => 'mode',
75
-		'user_ip'            => 'user_ip',
76
-		'first_name'         => 'first_name',
77
-		'last_name'          => 'last_name',
78
-		'address'            => 'address',
79
-		'city'               => 'city',
80
-		'state'              => 'state',
81
-		'country'            => 'country',
82
-		'zip'                => 'zip',
83
-		'zip'                => 'zip',
84
-		'adddress_confirmed' => 'address_confirmed',
85
-		'gateway'            => 'gateway',
86
-		'transaction_id'     => 'transaction_id',
87
-		'currency'           => 'currency',
88
-		'subtotal'           => 'subtotal',
89
-		'tax'                => 'total_tax',
90
-		'fees_total'         => 'total_fees',
91
-		'discount'           => 'total_discount',
92
-		'total'              => 'total',
93
-		'discount_code'      => 'discount_code',
94
-		'disable_taxes'      => 'disable_taxes',
95
-		'due_date'           => 'due_date',
96
-		'completed_date'     => 'completed_date',
97
-		'company'            => 'company',
98
-		'vat_number'         => 'vat_number',
99
-		'vat_rate'           => 'vat_rate',
100
-	);
101
-
102
-	/*
18
+    /**
19
+     * Data stored in meta keys, but not considered "meta" for a discount.
20
+     *
21
+     * @since 1.0.19
22
+     * @var array
23
+     */
24
+    protected $internal_meta_keys = array(
25
+        '_wpinv_subscr_profile_id',
26
+        '_wpinv_subscription_id',
27
+        '_wpinv_taxes',
28
+        '_wpinv_fees',
29
+        '_wpinv_discounts',
30
+        '_wpinv_submission_id',
31
+        '_wpinv_payment_form',
32
+        '_wpinv_is_viewed',
33
+        '_wpinv_phone',
34
+        'wpinv_email_cc',
35
+        'wpinv_template',
36
+        'wpinv_created_via'
37
+    );
38
+
39
+    /**
40
+     * A map of meta keys to data props.
41
+     *
42
+     * @since 1.0.19
43
+     *
44
+     * @var array
45
+     */
46
+    protected $meta_key_to_props = array(
47
+        '_wpinv_subscr_profile_id' => 'remote_subscription_id',
48
+        '_wpinv_subscription_id'   => 'subscription_id',
49
+        '_wpinv_taxes'             => 'taxes',
50
+        '_wpinv_fees'              => 'fees',
51
+        '_wpinv_discounts'         => 'discounts',
52
+        '_wpinv_submission_id'     => 'submission_id',
53
+        '_wpinv_payment_form'      => 'payment_form',
54
+        '_wpinv_is_viewed'         => 'is_viewed',
55
+        'wpinv_email_cc'           => 'email_cc',
56
+        'wpinv_template'           => 'template',
57
+        'wpinv_created_via'        => 'created_via',
58
+        '_wpinv_phone'             => 'phone',
59
+    );
60
+
61
+    /**
62
+     * A map of database fields to data props.
63
+     *
64
+     * @since 1.0.19
65
+     *
66
+     * @var array
67
+     */
68
+    protected $database_fields_to_props = array(
69
+        'post_id'            => 'id',
70
+        'number'             => 'number',
71
+        'currency'           => 'currency',
72
+        'key'                => 'key',
73
+        'type'               => 'type',
74
+        'mode'               => 'mode',
75
+        'user_ip'            => 'user_ip',
76
+        'first_name'         => 'first_name',
77
+        'last_name'          => 'last_name',
78
+        'address'            => 'address',
79
+        'city'               => 'city',
80
+        'state'              => 'state',
81
+        'country'            => 'country',
82
+        'zip'                => 'zip',
83
+        'zip'                => 'zip',
84
+        'adddress_confirmed' => 'address_confirmed',
85
+        'gateway'            => 'gateway',
86
+        'transaction_id'     => 'transaction_id',
87
+        'currency'           => 'currency',
88
+        'subtotal'           => 'subtotal',
89
+        'tax'                => 'total_tax',
90
+        'fees_total'         => 'total_fees',
91
+        'discount'           => 'total_discount',
92
+        'total'              => 'total',
93
+        'discount_code'      => 'discount_code',
94
+        'disable_taxes'      => 'disable_taxes',
95
+        'due_date'           => 'due_date',
96
+        'completed_date'     => 'completed_date',
97
+        'company'            => 'company',
98
+        'vat_number'         => 'vat_number',
99
+        'vat_rate'           => 'vat_rate',
100
+    );
101
+
102
+    /*
103 103
 	|--------------------------------------------------------------------------
104 104
 	| CRUD Methods
105 105
 	|--------------------------------------------------------------------------
106 106
 	*/
107 107
 
108
-	/**
109
-	 * Method to create a new invoice in the database.
110
-	 *
111
-	 * @param WPInv_Invoice $invoice Invoice object.
112
-	 */
113
-	public function create( &$invoice ) {
114
-		$invoice->set_version( WPINV_VERSION );
115
-		$invoice->set_date_created( current_time('mysql') );
116
-
117
-		// Create a new post.
118
-		$id = wp_insert_post(
119
-			apply_filters(
120
-				'getpaid_new_invoice_data',
121
-				array(
122
-					'post_date'     => $invoice->get_date_created( 'edit' ),
123
-					'post_type'     => $invoice->get_post_type( 'edit' ),
124
-					'post_status'   => $this->get_post_status( $invoice ),
125
-					'ping_status'   => 'closed',
126
-					'post_author'   => $invoice->get_user_id( 'edit' ),
127
-					'post_title'    => $invoice->get_title( 'edit' ),
128
-					'post_excerpt'  => $invoice->get_description( 'edit' ),
129
-					'post_parent'   => $invoice->get_parent_id( 'edit' ),
130
-				)
131
-			),
132
-			true
133
-		);
134
-
135
-		if ( $id && ! is_wp_error( $id ) ) {
136
-
137
-			// Update the new id and regenerate a title.
138
-			$invoice->set_id( $id );
139
-
140
-			$invoice->maybe_set_number();
141
-
142
-			wp_update_post(
143
-				array(
144
-					'ID'         => $invoice->get_id(),
145
-					'post_title' => $invoice->get_number( 'edit' ),
146
-					'post_name'  => $invoice->get_path( 'edit' )
147
-				)
148
-			);
149
-
150
-			// Save special fields and items.
151
-			$this->save_special_fields( $invoice );
152
-			$this->save_items( $invoice );
153
-
154
-			// Update meta data.
155
-			$this->update_post_meta( $invoice );
156
-			$invoice->save_meta_data();
157
-
158
-			// Apply changes.
159
-			$invoice->apply_changes();
160
-			$this->clear_caches( $invoice );
161
-
162
-			// Fires after a new invoice is created.
163
-			do_action( 'getpaid_new_invoice', $invoice );
164
-			return true;
165
-		}
166
-
167
-		if ( is_wp_error( $id ) ) {
168
-			$invoice->last_error = $id->get_error_message();
169
-		}
170
-
171
-		return false;
172
-	}
173
-
174
-	/**
175
-	 * Method to read an invoice from the database.
176
-	 *
177
-	 * @param WPInv_Invoice $invoice Invoice object.
178
-	 *
179
-	 */
180
-	public function read( &$invoice ) {
181
-
182
-		$invoice->set_defaults();
183
-		$invoice_object = get_post( $invoice->get_id() );
184
-
185
-		if ( ! $invoice->get_id() || ! $invoice_object || ! getpaid_is_invoice_post_type( $invoice_object->post_type ) ) {
186
-			$invoice->last_error = __( 'Invalid invoice.', 'invoicing' );
187
-			$invoice->set_id( 0 );
188
-			return false;
189
-		}
190
-
191
-		$invoice->set_props(
192
-			array(
193
-				'date_created'  => 0 < $invoice_object->post_date ? $invoice_object->post_date : null,
194
-				'date_modified' => 0 < $invoice_object->post_modified ? $invoice_object->post_modified : null,
195
-				'status'        => $invoice_object->post_status,
196
-				'author'        => $invoice_object->post_author,
197
-				'description'   => $invoice_object->post_excerpt,
198
-				'parent_id'     => $invoice_object->post_parent,
199
-				'name'          => $invoice_object->post_title,
200
-				'path'          => $invoice_object->post_name,
201
-				'post_type'     => $invoice_object->post_type,
202
-			)
203
-		);
204
-
205
-		$invoice->set_type( $invoice_object->post_type );
206
-
207
-		$this->read_object_data( $invoice, $invoice_object );
208
-		$this->add_special_fields( $invoice );
209
-		$this->add_items( $invoice );
210
-		$invoice->read_meta_data();
211
-		$invoice->set_object_read( true );
212
-		do_action( 'getpaid_read_invoice', $invoice );
213
-
214
-	}
215
-
216
-	/**
217
-	 * Method to update an invoice in the database.
218
-	 *
219
-	 * @param WPInv_Invoice $invoice Invoice object.
220
-	 */
221
-	public function update( &$invoice ) {
222
-		$invoice->save_meta_data();
223
-		$invoice->set_version( WPINV_VERSION );
224
-
225
-		if ( null === $invoice->get_date_created( 'edit' ) ) {
226
-			$invoice->set_date_created(  current_time('mysql') );
227
-		}
228
-
229
-		// Ensure both the key and number are set.
230
-		$invoice->get_path();
231
-
232
-		// Grab the current status so we can compare.
233
-		$previous_status = get_post_status( $invoice->get_id() );
234
-
235
-		$changes = $invoice->get_changes();
236
-
237
-		// Only update the post when the post data changes.
238
-		if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path' ), array_keys( $changes ) ) ) {
239
-			$post_data = array(
240
-				'post_date'         => $invoice->get_date_created( 'edit' ),
241
-				'post_date_gmt'     => $invoice->get_date_created_gmt( 'edit' ),
242
-				'post_status'       => $invoice->get_status( 'edit' ),
243
-				'post_title'        => $invoice->get_name( 'edit' ),
244
-				'post_author'       => $invoice->get_user_id( 'edit' ),
245
-				'post_modified'     => $invoice->get_date_modified( 'edit' ),
246
-				'post_excerpt'      => $invoice->get_description( 'edit' ),
247
-				'post_parent'       => $invoice->get_parent_id( 'edit' ),
248
-				'post_name'         => $invoice->get_path( 'edit' ),
249
-				'post_type'         => $invoice->get_post_type( 'edit' ),
250
-			);
251
-
252
-			/**
253
-			 * When updating this object, to prevent infinite loops, use $wpdb
254
-			 * to update data, since wp_update_post spawns more calls to the
255
-			 * save_post action.
256
-			 *
257
-			 * This ensures hooks are fired by either WP itself (admin screen save),
258
-			 * or an update purely from CRUD.
259
-			 */
260
-			if ( doing_action( 'save_post' ) ) {
261
-				$GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $invoice->get_id() ) );
262
-				clean_post_cache( $invoice->get_id() );
263
-			} else {
264
-				wp_update_post( array_merge( array( 'ID' => $invoice->get_id() ), $post_data ) );
265
-			}
266
-			$invoice->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
267
-		}
268
-
269
-		// Update meta data.
270
-		$this->update_post_meta( $invoice );
271
-
272
-		// Save special fields and items.
273
-		$this->save_special_fields( $invoice );
274
-		$this->save_items( $invoice );
275
-
276
-		// Apply the changes.
277
-		$invoice->apply_changes();
278
-
279
-		// Clear caches.
280
-		$this->clear_caches( $invoice );
281
-
282
-		// Fire a hook depending on the status - this should be considered a creation if it was previously draft status.
283
-		$new_status = $invoice->get_status( 'edit' );
284
-
285
-		if ( $new_status !== $previous_status && in_array( $previous_status, array( 'new', 'auto-draft', 'draft' ), true ) ) {
286
-			do_action( 'getpaid_new_invoice', $invoice );
287
-		} else {
288
-			do_action( 'getpaid_update_invoice', $invoice );
289
-		}
290
-
291
-	}
292
-
293
-	/*
108
+    /**
109
+     * Method to create a new invoice in the database.
110
+     *
111
+     * @param WPInv_Invoice $invoice Invoice object.
112
+     */
113
+    public function create( &$invoice ) {
114
+        $invoice->set_version( WPINV_VERSION );
115
+        $invoice->set_date_created( current_time('mysql') );
116
+
117
+        // Create a new post.
118
+        $id = wp_insert_post(
119
+            apply_filters(
120
+                'getpaid_new_invoice_data',
121
+                array(
122
+                    'post_date'     => $invoice->get_date_created( 'edit' ),
123
+                    'post_type'     => $invoice->get_post_type( 'edit' ),
124
+                    'post_status'   => $this->get_post_status( $invoice ),
125
+                    'ping_status'   => 'closed',
126
+                    'post_author'   => $invoice->get_user_id( 'edit' ),
127
+                    'post_title'    => $invoice->get_title( 'edit' ),
128
+                    'post_excerpt'  => $invoice->get_description( 'edit' ),
129
+                    'post_parent'   => $invoice->get_parent_id( 'edit' ),
130
+                )
131
+            ),
132
+            true
133
+        );
134
+
135
+        if ( $id && ! is_wp_error( $id ) ) {
136
+
137
+            // Update the new id and regenerate a title.
138
+            $invoice->set_id( $id );
139
+
140
+            $invoice->maybe_set_number();
141
+
142
+            wp_update_post(
143
+                array(
144
+                    'ID'         => $invoice->get_id(),
145
+                    'post_title' => $invoice->get_number( 'edit' ),
146
+                    'post_name'  => $invoice->get_path( 'edit' )
147
+                )
148
+            );
149
+
150
+            // Save special fields and items.
151
+            $this->save_special_fields( $invoice );
152
+            $this->save_items( $invoice );
153
+
154
+            // Update meta data.
155
+            $this->update_post_meta( $invoice );
156
+            $invoice->save_meta_data();
157
+
158
+            // Apply changes.
159
+            $invoice->apply_changes();
160
+            $this->clear_caches( $invoice );
161
+
162
+            // Fires after a new invoice is created.
163
+            do_action( 'getpaid_new_invoice', $invoice );
164
+            return true;
165
+        }
166
+
167
+        if ( is_wp_error( $id ) ) {
168
+            $invoice->last_error = $id->get_error_message();
169
+        }
170
+
171
+        return false;
172
+    }
173
+
174
+    /**
175
+     * Method to read an invoice from the database.
176
+     *
177
+     * @param WPInv_Invoice $invoice Invoice object.
178
+     *
179
+     */
180
+    public function read( &$invoice ) {
181
+
182
+        $invoice->set_defaults();
183
+        $invoice_object = get_post( $invoice->get_id() );
184
+
185
+        if ( ! $invoice->get_id() || ! $invoice_object || ! getpaid_is_invoice_post_type( $invoice_object->post_type ) ) {
186
+            $invoice->last_error = __( 'Invalid invoice.', 'invoicing' );
187
+            $invoice->set_id( 0 );
188
+            return false;
189
+        }
190
+
191
+        $invoice->set_props(
192
+            array(
193
+                'date_created'  => 0 < $invoice_object->post_date ? $invoice_object->post_date : null,
194
+                'date_modified' => 0 < $invoice_object->post_modified ? $invoice_object->post_modified : null,
195
+                'status'        => $invoice_object->post_status,
196
+                'author'        => $invoice_object->post_author,
197
+                'description'   => $invoice_object->post_excerpt,
198
+                'parent_id'     => $invoice_object->post_parent,
199
+                'name'          => $invoice_object->post_title,
200
+                'path'          => $invoice_object->post_name,
201
+                'post_type'     => $invoice_object->post_type,
202
+            )
203
+        );
204
+
205
+        $invoice->set_type( $invoice_object->post_type );
206
+
207
+        $this->read_object_data( $invoice, $invoice_object );
208
+        $this->add_special_fields( $invoice );
209
+        $this->add_items( $invoice );
210
+        $invoice->read_meta_data();
211
+        $invoice->set_object_read( true );
212
+        do_action( 'getpaid_read_invoice', $invoice );
213
+
214
+    }
215
+
216
+    /**
217
+     * Method to update an invoice in the database.
218
+     *
219
+     * @param WPInv_Invoice $invoice Invoice object.
220
+     */
221
+    public function update( &$invoice ) {
222
+        $invoice->save_meta_data();
223
+        $invoice->set_version( WPINV_VERSION );
224
+
225
+        if ( null === $invoice->get_date_created( 'edit' ) ) {
226
+            $invoice->set_date_created(  current_time('mysql') );
227
+        }
228
+
229
+        // Ensure both the key and number are set.
230
+        $invoice->get_path();
231
+
232
+        // Grab the current status so we can compare.
233
+        $previous_status = get_post_status( $invoice->get_id() );
234
+
235
+        $changes = $invoice->get_changes();
236
+
237
+        // Only update the post when the post data changes.
238
+        if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author', 'description', 'parent_id', 'post_excerpt', 'path' ), array_keys( $changes ) ) ) {
239
+            $post_data = array(
240
+                'post_date'         => $invoice->get_date_created( 'edit' ),
241
+                'post_date_gmt'     => $invoice->get_date_created_gmt( 'edit' ),
242
+                'post_status'       => $invoice->get_status( 'edit' ),
243
+                'post_title'        => $invoice->get_name( 'edit' ),
244
+                'post_author'       => $invoice->get_user_id( 'edit' ),
245
+                'post_modified'     => $invoice->get_date_modified( 'edit' ),
246
+                'post_excerpt'      => $invoice->get_description( 'edit' ),
247
+                'post_parent'       => $invoice->get_parent_id( 'edit' ),
248
+                'post_name'         => $invoice->get_path( 'edit' ),
249
+                'post_type'         => $invoice->get_post_type( 'edit' ),
250
+            );
251
+
252
+            /**
253
+             * When updating this object, to prevent infinite loops, use $wpdb
254
+             * to update data, since wp_update_post spawns more calls to the
255
+             * save_post action.
256
+             *
257
+             * This ensures hooks are fired by either WP itself (admin screen save),
258
+             * or an update purely from CRUD.
259
+             */
260
+            if ( doing_action( 'save_post' ) ) {
261
+                $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $invoice->get_id() ) );
262
+                clean_post_cache( $invoice->get_id() );
263
+            } else {
264
+                wp_update_post( array_merge( array( 'ID' => $invoice->get_id() ), $post_data ) );
265
+            }
266
+            $invoice->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
267
+        }
268
+
269
+        // Update meta data.
270
+        $this->update_post_meta( $invoice );
271
+
272
+        // Save special fields and items.
273
+        $this->save_special_fields( $invoice );
274
+        $this->save_items( $invoice );
275
+
276
+        // Apply the changes.
277
+        $invoice->apply_changes();
278
+
279
+        // Clear caches.
280
+        $this->clear_caches( $invoice );
281
+
282
+        // Fire a hook depending on the status - this should be considered a creation if it was previously draft status.
283
+        $new_status = $invoice->get_status( 'edit' );
284
+
285
+        if ( $new_status !== $previous_status && in_array( $previous_status, array( 'new', 'auto-draft', 'draft' ), true ) ) {
286
+            do_action( 'getpaid_new_invoice', $invoice );
287
+        } else {
288
+            do_action( 'getpaid_update_invoice', $invoice );
289
+        }
290
+
291
+    }
292
+
293
+    /*
294 294
 	|--------------------------------------------------------------------------
295 295
 	| Additional Methods
296 296
 	|--------------------------------------------------------------------------
297 297
 	*/
298 298
 
299
-	/**
299
+    /**
300 300
      * Retrieves special fields and adds to the invoice.
301
-	 *
302
-	 * @param WPInv_Invoice $invoice Invoice object.
301
+     *
302
+     * @param WPInv_Invoice $invoice Invoice object.
303 303
      */
304 304
     public function add_special_fields( &$invoice ) {
305
-		global $wpdb;
305
+        global $wpdb;
306 306
 
307
-		// Maybe retrieve from the cache.
308
-		$data   = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_special_fields' );
307
+        // Maybe retrieve from the cache.
308
+        $data   = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_special_fields' );
309 309
 
310
-		// If not found, retrieve from the db.
311
-		if ( false === $data ) {
312
-			$table =  $wpdb->prefix . 'getpaid_invoices';
310
+        // If not found, retrieve from the db.
311
+        if ( false === $data ) {
312
+            $table =  $wpdb->prefix . 'getpaid_invoices';
313 313
 
314
-			$data  = $wpdb->get_row(
315
-				$wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id() ),
316
-				ARRAY_A
317
-			);
314
+            $data  = $wpdb->get_row(
315
+                $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d LIMIT 1", $invoice->get_id() ),
316
+                ARRAY_A
317
+            );
318 318
 
319
-			// Update the cache with our data
320
-			wp_cache_set( $invoice->get_id(), $data, 'getpaid_invoice_special_fields' );
319
+            // Update the cache with our data
320
+            wp_cache_set( $invoice->get_id(), $data, 'getpaid_invoice_special_fields' );
321 321
 
322
-		}
322
+        }
323 323
 
324
-		// Abort if the data does not exist.
325
-		if ( empty( $data ) ) {
326
-			$invoice->set_object_read( true );
327
-			$invoice->set_props( wpinv_get_user_address( $invoice->get_user_id() ) );
328
-			return;
329
-		}
324
+        // Abort if the data does not exist.
325
+        if ( empty( $data ) ) {
326
+            $invoice->set_object_read( true );
327
+            $invoice->set_props( wpinv_get_user_address( $invoice->get_user_id() ) );
328
+            return;
329
+        }
330 330
 
331
-		$props = array();
331
+        $props = array();
332 332
 
333
-		foreach ( $this->database_fields_to_props as $db_field => $prop ) {
333
+        foreach ( $this->database_fields_to_props as $db_field => $prop ) {
334 334
 			
335
-			if ( $db_field == 'post_id' ) {
336
-				continue;
337
-			}
338
-
339
-			$props[ $prop ] = $data[ $db_field ];
340
-		}
341
-
342
-		$invoice->set_props( $props );
343
-
344
-	}
345
-
346
-	/**
347
-	 * Gets a list of special fields that need updated based on change state
348
-	 * or if they are present in the database or not.
349
-	 *
350
-	 * @param  WPInv_Invoice $invoice       The Invoice object.
351
-	 * @return array                        A mapping of field keys => prop names, filtered by ones that should be updated.
352
-	 */
353
-	protected function get_special_fields_to_update( $invoice ) {
354
-		$fields_to_update = array();
355
-		$changed_props   = $invoice->get_changes();
356
-
357
-		// Props should be updated if they are a part of the $changed array or don't exist yet.
358
-		foreach ( $this->database_fields_to_props as $database_field => $prop ) {
359
-			if ( array_key_exists( $prop, $changed_props ) ) {
360
-				$fields_to_update[ $database_field ] = $prop;
361
-			}
362
-		}
363
-
364
-		return $fields_to_update;
365
-	}
366
-
367
-	/**
368
-	 * Helper method that updates all the database fields for an invoice based on it's settings in the WPInv_Invoice class.
369
-	 *
370
-	 * @param WPInv_Invoice $invoice WPInv_Invoice object.
371
-	 * @since 1.0.19
372
-	 */
373
-	protected function update_special_fields( &$invoice ) {
374
-		global $wpdb;
375
-
376
-		$updated_props    = array();
377
-		$fields_to_update = $this->get_special_fields_to_update( $invoice );
378
-
379
-		foreach ( $fields_to_update as $database_field => $prop ) {
380
-			$value = $invoice->{"get_$prop"}( 'edit' );
381
-			$value = is_string( $value ) ? wp_slash( $value ) : $value;
382
-			$value = is_bool( $value ) ? ( int ) $value : $value;
383
-			$updated_props[ $database_field ] = maybe_serialize( $value );
384
-		}
385
-
386
-		if ( ! empty( $updated_props ) ) {
387
-
388
-			$table = $wpdb->prefix . 'getpaid_invoices';
389
-			$wpdb->update( $table, $updated_props, array( 'post_id' => $invoice->get_id() ) );
390
-			wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' );
391
-			do_action( "getpaid_invoice_update_database_fields", $invoice, $updated_props );
392
-
393
-		}
394
-
395
-	}
396
-
397
-	/**
398
-	 * Helper method that inserts special fields to the database.
399
-	 *
400
-	 * @param WPInv_Invoice $invoice WPInv_Invoice object.
401
-	 * @since 1.0.19
402
-	 */
403
-	protected function insert_special_fields( &$invoice ) {
404
-		global $wpdb;
405
-
406
-		$updated_props   = array();
407
-
408
-		foreach ( $this->database_fields_to_props as $database_field => $prop ) {
409
-			$value = $invoice->{"get_$prop"}( 'edit' );
410
-			$value = is_string( $value ) ? wp_slash( $value ) : $value;
411
-			$value = is_bool( $value ) ? ( int ) $value : $value;
412
-			$updated_props[ $database_field ] = maybe_serialize( $value );
413
-		}
414
-
415
-		$table = $wpdb->prefix . 'getpaid_invoices';
416
-		$wpdb->insert( $table, $updated_props );
417
-		wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' );
418
-		do_action( "getpaid_invoice_insert_database_fields", $invoice, $updated_props );
419
-
420
-	}
421
-
422
-	/**
335
+            if ( $db_field == 'post_id' ) {
336
+                continue;
337
+            }
338
+
339
+            $props[ $prop ] = $data[ $db_field ];
340
+        }
341
+
342
+        $invoice->set_props( $props );
343
+
344
+    }
345
+
346
+    /**
347
+     * Gets a list of special fields that need updated based on change state
348
+     * or if they are present in the database or not.
349
+     *
350
+     * @param  WPInv_Invoice $invoice       The Invoice object.
351
+     * @return array                        A mapping of field keys => prop names, filtered by ones that should be updated.
352
+     */
353
+    protected function get_special_fields_to_update( $invoice ) {
354
+        $fields_to_update = array();
355
+        $changed_props   = $invoice->get_changes();
356
+
357
+        // Props should be updated if they are a part of the $changed array or don't exist yet.
358
+        foreach ( $this->database_fields_to_props as $database_field => $prop ) {
359
+            if ( array_key_exists( $prop, $changed_props ) ) {
360
+                $fields_to_update[ $database_field ] = $prop;
361
+            }
362
+        }
363
+
364
+        return $fields_to_update;
365
+    }
366
+
367
+    /**
368
+     * Helper method that updates all the database fields for an invoice based on it's settings in the WPInv_Invoice class.
369
+     *
370
+     * @param WPInv_Invoice $invoice WPInv_Invoice object.
371
+     * @since 1.0.19
372
+     */
373
+    protected function update_special_fields( &$invoice ) {
374
+        global $wpdb;
375
+
376
+        $updated_props    = array();
377
+        $fields_to_update = $this->get_special_fields_to_update( $invoice );
378
+
379
+        foreach ( $fields_to_update as $database_field => $prop ) {
380
+            $value = $invoice->{"get_$prop"}( 'edit' );
381
+            $value = is_string( $value ) ? wp_slash( $value ) : $value;
382
+            $value = is_bool( $value ) ? ( int ) $value : $value;
383
+            $updated_props[ $database_field ] = maybe_serialize( $value );
384
+        }
385
+
386
+        if ( ! empty( $updated_props ) ) {
387
+
388
+            $table = $wpdb->prefix . 'getpaid_invoices';
389
+            $wpdb->update( $table, $updated_props, array( 'post_id' => $invoice->get_id() ) );
390
+            wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' );
391
+            do_action( "getpaid_invoice_update_database_fields", $invoice, $updated_props );
392
+
393
+        }
394
+
395
+    }
396
+
397
+    /**
398
+     * Helper method that inserts special fields to the database.
399
+     *
400
+     * @param WPInv_Invoice $invoice WPInv_Invoice object.
401
+     * @since 1.0.19
402
+     */
403
+    protected function insert_special_fields( &$invoice ) {
404
+        global $wpdb;
405
+
406
+        $updated_props   = array();
407
+
408
+        foreach ( $this->database_fields_to_props as $database_field => $prop ) {
409
+            $value = $invoice->{"get_$prop"}( 'edit' );
410
+            $value = is_string( $value ) ? wp_slash( $value ) : $value;
411
+            $value = is_bool( $value ) ? ( int ) $value : $value;
412
+            $updated_props[ $database_field ] = maybe_serialize( $value );
413
+        }
414
+
415
+        $table = $wpdb->prefix . 'getpaid_invoices';
416
+        $wpdb->insert( $table, $updated_props );
417
+        wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_special_fields' );
418
+        do_action( "getpaid_invoice_insert_database_fields", $invoice, $updated_props );
419
+
420
+    }
421
+
422
+    /**
423 423
      * Saves all special fields.
424
-	 *
425
-	 * @param WPInv_Invoice $invoice Invoice object.
424
+     *
425
+     * @param WPInv_Invoice $invoice Invoice object.
426 426
      */
427 427
     public function save_special_fields( & $invoice ) {
428
-		global $wpdb;
428
+        global $wpdb;
429 429
 
430
-		// The invoices table.
431
-		$table = $wpdb->prefix . 'getpaid_invoices';
432
-		$id    = (int) $invoice->get_id();
433
-		$invoice->maybe_set_key();
430
+        // The invoices table.
431
+        $table = $wpdb->prefix . 'getpaid_invoices';
432
+        $id    = (int) $invoice->get_id();
433
+        $invoice->maybe_set_key();
434 434
 
435
-		if ( $wpdb->get_var( "SELECT `post_id` FROM $table WHERE `post_id`= $id" ) ) {
435
+        if ( $wpdb->get_var( "SELECT `post_id` FROM $table WHERE `post_id`= $id" ) ) {
436 436
 
437
-			$this->update_special_fields( $invoice );
437
+            $this->update_special_fields( $invoice );
438 438
 
439
-		} else {
439
+        } else {
440 440
 
441
-			$this->insert_special_fields( $invoice );
441
+            $this->insert_special_fields( $invoice );
442 442
 
443
-		}
443
+        }
444 444
 
445
-	}
445
+    }
446 446
 
447
-	/**
447
+    /**
448 448
      * Set's up cart details.
449
-	 *
450
-	 * @param WPInv_Invoice $invoice Invoice object.
449
+     *
450
+     * @param WPInv_Invoice $invoice Invoice object.
451 451
      */
452 452
     public function add_items( &$invoice ) {
453
-		global $wpdb;
453
+        global $wpdb;
454 454
 
455
-		// Maybe retrieve from the cache.
456
-		$items = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_cart_details' );
455
+        // Maybe retrieve from the cache.
456
+        $items = wp_cache_get( $invoice->get_id(), 'getpaid_invoice_cart_details' );
457 457
 
458
-		// If not found, retrieve from the db.
459
-		if ( false === $items ) {
460
-			$table =  $wpdb->prefix . 'getpaid_invoice_items';
458
+        // If not found, retrieve from the db.
459
+        if ( false === $items ) {
460
+            $table =  $wpdb->prefix . 'getpaid_invoice_items';
461 461
 
462
-			$items = $wpdb->get_results(
463
-				$wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id() )
464
-			);
462
+            $items = $wpdb->get_results(
463
+                $wpdb->prepare( "SELECT * FROM $table WHERE `post_id`=%d", $invoice->get_id() )
464
+            );
465 465
 
466
-			// Update the cache with our data
467
-			wp_cache_set( $invoice->get_id(), $items, 'getpaid_invoice_cart_details' );
466
+            // Update the cache with our data
467
+            wp_cache_set( $invoice->get_id(), $items, 'getpaid_invoice_cart_details' );
468 468
 
469
-		}
469
+        }
470 470
 
471
-		// Abort if no items found.
471
+        // Abort if no items found.
472 472
         if ( empty( $items ) ) {
473 473
             return;
474
-		}
475
-
476
-		$_items = array();
477
-		foreach ( $items as $item_data ) {
478
-			$item = new GetPaid_Form_Item( $item_data->item_id );
479
-
480
-			// Set item data.
481
-			$item->item_tax      = wpinv_sanitize_amount( $item_data->tax );
482
-			$item->item_discount = wpinv_sanitize_amount( $item_data->discount );
483
-			$item->set_name( $item_data->item_name );
484
-			$item->set_description( $item_data->item_description );
485
-			$item->set_price( $item_data->item_price );
486
-			$item->set_quantity( $item_data->quantity );
487
-			$item->set_item_meta( $item_data->meta );
488
-			$_items[] = $item;
489
-		}
490
-
491
-		$invoice->set_items( $_items );
492
-	}
493
-
494
-	/**
474
+        }
475
+
476
+        $_items = array();
477
+        foreach ( $items as $item_data ) {
478
+            $item = new GetPaid_Form_Item( $item_data->item_id );
479
+
480
+            // Set item data.
481
+            $item->item_tax      = wpinv_sanitize_amount( $item_data->tax );
482
+            $item->item_discount = wpinv_sanitize_amount( $item_data->discount );
483
+            $item->set_name( $item_data->item_name );
484
+            $item->set_description( $item_data->item_description );
485
+            $item->set_price( $item_data->item_price );
486
+            $item->set_quantity( $item_data->quantity );
487
+            $item->set_item_meta( $item_data->meta );
488
+            $_items[] = $item;
489
+        }
490
+
491
+        $invoice->set_items( $_items );
492
+    }
493
+
494
+    /**
495 495
      * Saves cart details.
496
-	 *
497
-	 * @param WPInv_Invoice $invoice Invoice object.
496
+     *
497
+     * @param WPInv_Invoice $invoice Invoice object.
498 498
      */
499 499
     public function save_items( $invoice ) {
500 500
 
501
-		// Delete previously existing items.
502
-		$this->delete_items( $invoice );
501
+        // Delete previously existing items.
502
+        $this->delete_items( $invoice );
503 503
 
504
-		$table   =  $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items';
504
+        $table   =  $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items';
505 505
 
506
-		foreach ( $invoice->get_cart_details() as $item_data ) {
507
-			$item_data = array_map( 'maybe_serialize', $item_data );
508
-			$GLOBALS['wpdb']->insert( $table, $item_data );
509
-		}
506
+        foreach ( $invoice->get_cart_details() as $item_data ) {
507
+            $item_data = array_map( 'maybe_serialize', $item_data );
508
+            $GLOBALS['wpdb']->insert( $table, $item_data );
509
+        }
510 510
 
511
-		wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_cart_details' );
512
-		do_action( "getpaid_invoice_save_items", $invoice );
511
+        wp_cache_delete( $invoice->get_id(), 'getpaid_invoice_cart_details' );
512
+        do_action( "getpaid_invoice_save_items", $invoice );
513 513
 
514
-	}
514
+    }
515 515
 
516
-	/**
516
+    /**
517 517
      * Deletes an invoice's cart details from the database.
518
-	 *
519
-	 * @param WPInv_Invoice $invoice Invoice object.
518
+     *
519
+     * @param WPInv_Invoice $invoice Invoice object.
520 520
      */
521 521
     public function delete_items( $invoice ) {
522
-		$table =  $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items';
523
-		return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) );
524
-	}
522
+        $table =  $GLOBALS['wpdb']->prefix . 'getpaid_invoice_items';
523
+        return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) );
524
+    }
525 525
 
526
-	/**
526
+    /**
527 527
      * Deletes an invoice's special fields from the database.
528
-	 *
529
-	 * @param WPInv_Invoice $invoice Invoice object.
528
+     *
529
+     * @param WPInv_Invoice $invoice Invoice object.
530 530
      */
531 531
     public function delete_special_fields( $invoice ) {
532
-		$table =  $GLOBALS['wpdb']->prefix . 'getpaid_invoices';
533
-		return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) );
534
-	}
532
+        $table =  $GLOBALS['wpdb']->prefix . 'getpaid_invoices';
533
+        return $GLOBALS['wpdb']->delete( $table, array( 'post_id' => $invoice->get_id() ) );
534
+    }
535 535
 	
536
-	/**
537
-	 * Get the status to save to the post object.
538
-	 *
539
-	 *
540
-	 * @since 1.0.19
541
-	 * @param  WPInv_Invoice $object GetPaid_Data object.
542
-	 * @return string
543
-	 */
544
-	protected function get_post_status( $object ) {
545
-		$object_status = $object->get_status( 'edit' );
546
-
547
-		if ( ! $object_status ) {
548
-			$object_status = $object->get_default_status();
549
-		}
550
-
551
-		return $object_status;
552
-	}
536
+    /**
537
+     * Get the status to save to the post object.
538
+     *
539
+     *
540
+     * @since 1.0.19
541
+     * @param  WPInv_Invoice $object GetPaid_Data object.
542
+     * @return string
543
+     */
544
+    protected function get_post_status( $object ) {
545
+        $object_status = $object->get_status( 'edit' );
546
+
547
+        if ( ! $object_status ) {
548
+            $object_status = $object->get_default_status();
549
+        }
550
+
551
+        return $object_status;
552
+    }
553 553
 
554 554
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-paypal-gateway-ipn-handler.php 1 patch
Indentation   +389 added lines, -389 removed lines patch added patch discarded remove patch
@@ -12,456 +12,456 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Paypal_Gateway_IPN_Handler {
14 14
 
15
-	/**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
20
-	protected $id = 'paypal';
21
-
22
-	/**
23
-	 * Payment method object.
24
-	 *
25
-	 * @var GetPaid_Paypal_Gateway
26
-	 */
27
-	protected $gateway;
28
-
29
-	/**
30
-	 * Class constructor.
31
-	 *
32
-	 * @param GetPaid_Paypal_Gateway $gateway
33
-	 */
34
-	public function __construct( $gateway ) {
35
-		$this->gateway = $gateway;
36
-		$this->verify_ipn();
37
-	}
38
-
39
-	/**
40
-	 * Processes ipns and marks payments as complete.
41
-	 *
42
-	 * @return void
43
-	 */
44
-	public function verify_ipn() {
45
-
46
-		wpinv_error_log( 'GetPaid PayPal IPN Handler', false );
47
-
48
-		// Validate the IPN.
49
-		if ( empty( $_POST ) || ! $this->validate_ipn() ) {
50
-			wp_die( 'PayPal IPN Request Failure', 500 );
51
-		}
52
-
53
-		// Process the IPN.
54
-		$posted  = wp_unslash( $_POST );
55
-		$invoice = $this->get_ipn_invoice( $posted );
56
-
57
-		// Abort if it was not paid by our gateway.
58
-		if ( $this->id != $invoice->get_gateway() ) {
59
-			wpinv_error_log( 'Aborting, Invoice was not paid via PayPal', false );
60
-			wp_die( 'Invoice not paid via PayPal', 500 );
61
-		}
62
-
63
-		$posted['payment_status'] = isset( $posted['payment_status'] ) ? sanitize_key( strtolower( $posted['payment_status'] ) ) : '';
64
-		$posted['txn_type']       = sanitize_key( strtolower( $posted['txn_type'] ) );
65
-
66
-		wpinv_error_log( 'Payment status:' . $posted['payment_status'], false );
67
-		wpinv_error_log( 'IPN Type:' . $posted['txn_type'], false );
68
-
69
-		if ( method_exists( $this, 'ipn_txn_' . $posted['txn_type'] ) ) {
70
-			call_user_func( array( $this, 'ipn_txn_' . $posted['txn_type'] ), $invoice, $posted );
71
-			wpinv_error_log( 'Done processing IPN', false );
72
-			wp_die( 'Processed', 200 );
73
-		}
74
-
75
-		wpinv_error_log( 'Aborting, Unsupported IPN type:' . $posted['txn_type'], false );
76
-		wp_die( 'Unsupported IPN type', 200 );
77
-
78
-	}
79
-
80
-	/**
81
-	 * Retrieves IPN Invoice.
82
-	 *
83
-	 * @param array $posted
84
-	 * @return WPInv_Invoice
85
-	 */
86
-	protected function get_ipn_invoice( $posted ) {
87
-
88
-		wpinv_error_log( 'Retrieving PayPal IPN Response Invoice', false );
89
-
90
-		if ( ! empty( $posted['custom'] ) ) {
91
-			$invoice = new WPInv_Invoice( $posted['custom'] );
92
-
93
-			if ( $invoice->exists() ) {
94
-				wpinv_error_log( 'Found invoice #' . $invoice->get_number(), false );
95
-				return $invoice;
96
-			}
97
-
98
-		}
99
-
100
-		wpinv_error_log( 'Could not retrieve the associated invoice.', false );
101
-		wp_die( 'Could not retrieve the associated invoice.', 500 );
102
-	}
103
-
104
-	/**
105
-	 * Check PayPal IPN validity.
106
-	 */
107
-	protected function validate_ipn() {
108
-
109
-		wpinv_error_log( 'Validating PayPal IPN response', false );
110
-
111
-		// Retrieve the associated invoice.
112
-		$posted  = wp_unslash( $_POST );
113
-		$invoice = $this->get_ipn_invoice( $posted );
114
-
115
-		if ( $this->gateway->is_sandbox( $invoice ) ) {
116
-			wpinv_error_log( $posted, 'Invoice was processed in sandbox hence logging the posted data' );
117
-		}
118
-
119
-		// Validate the IPN.
120
-		$posted['cmd'] = '_notify-validate';
121
-
122
-		// Send back post vars to paypal.
123
-		$params = array(
124
-			'body'        => $posted,
125
-			'timeout'     => 60,
126
-			'httpversion' => '1.1',
127
-			'compress'    => false,
128
-			'decompress'  => false,
129
-			'user-agent'  => 'GetPaid/' . WPINV_VERSION,
130
-		);
131
-
132
-		// Post back to get a response.
133
-		$response = wp_safe_remote_post( $this->gateway->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr', $params );
134
-
135
-		// Check to see if the request was valid.
136
-		if ( ! is_wp_error( $response ) && $response['response']['code'] < 300 && strstr( $response['body'], 'VERIFIED' ) ) {
137
-			wpinv_error_log( $response['body'], 'Received valid response from PayPal IPN' );
138
-			return true;
139
-		}
140
-
141
-		if ( is_wp_error( $response ) ) {
142
-			wpinv_error_log( $response->get_error_message(), 'Received invalid response from PayPal IPN' );
143
-			return false;
144
-		}
15
+    /**
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20
+    protected $id = 'paypal';
21
+
22
+    /**
23
+     * Payment method object.
24
+     *
25
+     * @var GetPaid_Paypal_Gateway
26
+     */
27
+    protected $gateway;
28
+
29
+    /**
30
+     * Class constructor.
31
+     *
32
+     * @param GetPaid_Paypal_Gateway $gateway
33
+     */
34
+    public function __construct( $gateway ) {
35
+        $this->gateway = $gateway;
36
+        $this->verify_ipn();
37
+    }
38
+
39
+    /**
40
+     * Processes ipns and marks payments as complete.
41
+     *
42
+     * @return void
43
+     */
44
+    public function verify_ipn() {
45
+
46
+        wpinv_error_log( 'GetPaid PayPal IPN Handler', false );
47
+
48
+        // Validate the IPN.
49
+        if ( empty( $_POST ) || ! $this->validate_ipn() ) {
50
+            wp_die( 'PayPal IPN Request Failure', 500 );
51
+        }
52
+
53
+        // Process the IPN.
54
+        $posted  = wp_unslash( $_POST );
55
+        $invoice = $this->get_ipn_invoice( $posted );
56
+
57
+        // Abort if it was not paid by our gateway.
58
+        if ( $this->id != $invoice->get_gateway() ) {
59
+            wpinv_error_log( 'Aborting, Invoice was not paid via PayPal', false );
60
+            wp_die( 'Invoice not paid via PayPal', 500 );
61
+        }
62
+
63
+        $posted['payment_status'] = isset( $posted['payment_status'] ) ? sanitize_key( strtolower( $posted['payment_status'] ) ) : '';
64
+        $posted['txn_type']       = sanitize_key( strtolower( $posted['txn_type'] ) );
65
+
66
+        wpinv_error_log( 'Payment status:' . $posted['payment_status'], false );
67
+        wpinv_error_log( 'IPN Type:' . $posted['txn_type'], false );
68
+
69
+        if ( method_exists( $this, 'ipn_txn_' . $posted['txn_type'] ) ) {
70
+            call_user_func( array( $this, 'ipn_txn_' . $posted['txn_type'] ), $invoice, $posted );
71
+            wpinv_error_log( 'Done processing IPN', false );
72
+            wp_die( 'Processed', 200 );
73
+        }
74
+
75
+        wpinv_error_log( 'Aborting, Unsupported IPN type:' . $posted['txn_type'], false );
76
+        wp_die( 'Unsupported IPN type', 200 );
77
+
78
+    }
79
+
80
+    /**
81
+     * Retrieves IPN Invoice.
82
+     *
83
+     * @param array $posted
84
+     * @return WPInv_Invoice
85
+     */
86
+    protected function get_ipn_invoice( $posted ) {
87
+
88
+        wpinv_error_log( 'Retrieving PayPal IPN Response Invoice', false );
89
+
90
+        if ( ! empty( $posted['custom'] ) ) {
91
+            $invoice = new WPInv_Invoice( $posted['custom'] );
92
+
93
+            if ( $invoice->exists() ) {
94
+                wpinv_error_log( 'Found invoice #' . $invoice->get_number(), false );
95
+                return $invoice;
96
+            }
97
+
98
+        }
99
+
100
+        wpinv_error_log( 'Could not retrieve the associated invoice.', false );
101
+        wp_die( 'Could not retrieve the associated invoice.', 500 );
102
+    }
103
+
104
+    /**
105
+     * Check PayPal IPN validity.
106
+     */
107
+    protected function validate_ipn() {
108
+
109
+        wpinv_error_log( 'Validating PayPal IPN response', false );
110
+
111
+        // Retrieve the associated invoice.
112
+        $posted  = wp_unslash( $_POST );
113
+        $invoice = $this->get_ipn_invoice( $posted );
114
+
115
+        if ( $this->gateway->is_sandbox( $invoice ) ) {
116
+            wpinv_error_log( $posted, 'Invoice was processed in sandbox hence logging the posted data' );
117
+        }
118
+
119
+        // Validate the IPN.
120
+        $posted['cmd'] = '_notify-validate';
121
+
122
+        // Send back post vars to paypal.
123
+        $params = array(
124
+            'body'        => $posted,
125
+            'timeout'     => 60,
126
+            'httpversion' => '1.1',
127
+            'compress'    => false,
128
+            'decompress'  => false,
129
+            'user-agent'  => 'GetPaid/' . WPINV_VERSION,
130
+        );
131
+
132
+        // Post back to get a response.
133
+        $response = wp_safe_remote_post( $this->gateway->is_sandbox( $invoice ) ? 'https://www.sandbox.paypal.com/cgi-bin/webscr' : 'https://www.paypal.com/cgi-bin/webscr', $params );
134
+
135
+        // Check to see if the request was valid.
136
+        if ( ! is_wp_error( $response ) && $response['response']['code'] < 300 && strstr( $response['body'], 'VERIFIED' ) ) {
137
+            wpinv_error_log( $response['body'], 'Received valid response from PayPal IPN' );
138
+            return true;
139
+        }
140
+
141
+        if ( is_wp_error( $response ) ) {
142
+            wpinv_error_log( $response->get_error_message(), 'Received invalid response from PayPal IPN' );
143
+            return false;
144
+        }
145 145
 
146
-		wpinv_error_log( $response['body'], 'Received invalid response from PayPal IPN' );
147
-		return false;
148
-
149
-	}
146
+        wpinv_error_log( $response['body'], 'Received invalid response from PayPal IPN' );
147
+        return false;
148
+
149
+    }
150 150
 
151
-	/**
152
-	 * Check currency from IPN matches the invoice.
153
-	 *
154
-	 * @param WPInv_Invoice $invoice          Invoice object.
155
-	 * @param string   $currency currency to validate.
156
-	 */
157
-	protected function validate_ipn_currency( $invoice, $currency ) {
151
+    /**
152
+     * Check currency from IPN matches the invoice.
153
+     *
154
+     * @param WPInv_Invoice $invoice          Invoice object.
155
+     * @param string   $currency currency to validate.
156
+     */
157
+    protected function validate_ipn_currency( $invoice, $currency ) {
158 158
 
159
-		if ( strtolower( $invoice->get_currency() ) !== strtolower( $currency ) ) {
159
+        if ( strtolower( $invoice->get_currency() ) !== strtolower( $currency ) ) {
160 160
 
161
-			/* translators: %s: currency code. */
162
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal currencies do not match (code %s).', 'invoicing' ), $currency ) );
161
+            /* translators: %s: currency code. */
162
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal currencies do not match (code %s).', 'invoicing' ), $currency ) );
163 163
 
164
-			wpinv_error_log( "Currencies do not match: {$currency} instead of {$invoice->get_currency()}", 'IPN Error', __FILE__, __LINE__, true );
165
-		}
164
+            wpinv_error_log( "Currencies do not match: {$currency} instead of {$invoice->get_currency()}", 'IPN Error', __FILE__, __LINE__, true );
165
+        }
166 166
 
167
-		wpinv_error_log( $currency, 'Validated IPN Currency' );
168
-	}
167
+        wpinv_error_log( $currency, 'Validated IPN Currency' );
168
+    }
169 169
 
170
-	/**
171
-	 * Check payment amount from IPN matches the invoice.
172
-	 *
173
-	 * @param WPInv_Invoice $invoice          Invoice object.
174
-	 * @param float   $amount amount to validate.
175
-	 */
176
-	protected function validate_ipn_amount( $invoice, $amount ) {
177
-		if ( number_format( $invoice->get_total(), 2, '.', '' ) !== number_format( $amount, 2, '.', '' ) ) {
170
+    /**
171
+     * Check payment amount from IPN matches the invoice.
172
+     *
173
+     * @param WPInv_Invoice $invoice          Invoice object.
174
+     * @param float   $amount amount to validate.
175
+     */
176
+    protected function validate_ipn_amount( $invoice, $amount ) {
177
+        if ( number_format( $invoice->get_total(), 2, '.', '' ) !== number_format( $amount, 2, '.', '' ) ) {
178 178
 
179
-			/* translators: %s: Amount. */
180
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal amounts do not match (gross %s).', 'invoicing' ), $amount ) );
179
+            /* translators: %s: Amount. */
180
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal amounts do not match (gross %s).', 'invoicing' ), $amount ) );
181 181
 
182
-			wpinv_error_log( "Amounts do not match: {$amount} instead of {$invoice->get_total()}", 'IPN Error', __FILE__, __LINE__, true );
183
-		}
182
+            wpinv_error_log( "Amounts do not match: {$amount} instead of {$invoice->get_total()}", 'IPN Error', __FILE__, __LINE__, true );
183
+        }
184 184
 
185
-		wpinv_error_log( $amount, 'Validated IPN Amount' );
186
-	}
185
+        wpinv_error_log( $amount, 'Validated IPN Amount' );
186
+    }
187 187
 
188
-	/**
189
-	 * Verify receiver email from PayPal.
190
-	 *
191
-	 * @param WPInv_Invoice $invoice          Invoice object.
192
-	 * @param string   $receiver_email Email to validate.
193
-	 */
194
-	protected function validate_ipn_receiver_email( $invoice, $receiver_email ) {
195
-		$paypal_email = wpinv_get_option( 'paypal_email' );
188
+    /**
189
+     * Verify receiver email from PayPal.
190
+     *
191
+     * @param WPInv_Invoice $invoice          Invoice object.
192
+     * @param string   $receiver_email Email to validate.
193
+     */
194
+    protected function validate_ipn_receiver_email( $invoice, $receiver_email ) {
195
+        $paypal_email = wpinv_get_option( 'paypal_email' );
196 196
 
197
-		if ( strcasecmp( trim( $receiver_email ), trim( $paypal_email ) ) !== 0 ) {
198
-			wpinv_record_gateway_error( 'IPN Error', "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}" );
197
+        if ( strcasecmp( trim( $receiver_email ), trim( $paypal_email ) ) !== 0 ) {
198
+            wpinv_record_gateway_error( 'IPN Error', "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}" );
199 199
 
200
-			/* translators: %s: email address . */
201
-			$invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal IPN response from a different email address (%s).', 'invoicing' ), $receiver_email ) );
200
+            /* translators: %s: email address . */
201
+            $invoice->update_status( 'wpi-processing', sprintf( __( 'Validation error: PayPal IPN response from a different email address (%s).', 'invoicing' ), $receiver_email ) );
202 202
 
203
-			return wpinv_error_log( "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}", 'IPN Error', __FILE__, __LINE__, true );
204
-		}
203
+            return wpinv_error_log( "IPN Response is for another account: {$receiver_email}. Your email is {$paypal_email}", 'IPN Error', __FILE__, __LINE__, true );
204
+        }
205 205
 
206
-		wpinv_error_log( 'Validated PayPal Email', false );
207
-	}
206
+        wpinv_error_log( 'Validated PayPal Email', false );
207
+    }
208 208
 
209
-	/**
210
-	 * Handles one time payments.
211
-	 *
212
-	 * @param WPInv_Invoice $invoice  Invoice object.
213
-	 * @param array    $posted Posted data.
214
-	 */
215
-	protected function ipn_txn_web_accept( $invoice, $posted ) {
216
-
217
-		// Collect payment details
218
-		$payment_status = strtolower( $posted['payment_status'] );
219
-		$business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
220
-
221
-		$this->validate_ipn_receiver_email( $invoice, $business_email );
222
-		$this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
223
-
224
-		// Update the transaction id.
225
-		if ( ! empty( $posted['txn_id'] ) ) {
226
-			$invoice->set_transaction_id( wpinv_clean( $posted['txn_id'] ) );
227
-			$invoice->save();
228
-		}
209
+    /**
210
+     * Handles one time payments.
211
+     *
212
+     * @param WPInv_Invoice $invoice  Invoice object.
213
+     * @param array    $posted Posted data.
214
+     */
215
+    protected function ipn_txn_web_accept( $invoice, $posted ) {
216
+
217
+        // Collect payment details
218
+        $payment_status = strtolower( $posted['payment_status'] );
219
+        $business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
220
+
221
+        $this->validate_ipn_receiver_email( $invoice, $business_email );
222
+        $this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
223
+
224
+        // Update the transaction id.
225
+        if ( ! empty( $posted['txn_id'] ) ) {
226
+            $invoice->set_transaction_id( wpinv_clean( $posted['txn_id'] ) );
227
+            $invoice->save();
228
+        }
229 229
 
230
-		// Process a refund.
231
-		if ( $payment_status == 'refunded' || $payment_status == 'reversed' ) {
230
+        // Process a refund.
231
+        if ( $payment_status == 'refunded' || $payment_status == 'reversed' ) {
232 232
 
233
-			update_post_meta( $invoice->get_id(), 'refunded_remotely', 1 );
233
+            update_post_meta( $invoice->get_id(), 'refunded_remotely', 1 );
234 234
 
235
-			if ( ! $invoice->is_refunded() ) {
236
-				$invoice->update_status( 'wpi-refunded', $posted['reason_code'] );
237
-			}
235
+            if ( ! $invoice->is_refunded() ) {
236
+                $invoice->update_status( 'wpi-refunded', $posted['reason_code'] );
237
+            }
238 238
 
239
-			return wpinv_error_log( $posted['reason_code'], false );
240
-		}
239
+            return wpinv_error_log( $posted['reason_code'], false );
240
+        }
241 241
 
242
-		// Process payments.
243
-		if ( $payment_status == 'completed' ) {
242
+        // Process payments.
243
+        if ( $payment_status == 'completed' ) {
244 244
 
245
-			if ( $invoice->is_paid() && 'wpi_processing' != $invoice->get_status() ) {
246
-				return wpinv_error_log( 'Aborting, Invoice #' . $invoice->get_number() . ' is already paid.', false );
247
-			}
245
+            if ( $invoice->is_paid() && 'wpi_processing' != $invoice->get_status() ) {
246
+                return wpinv_error_log( 'Aborting, Invoice #' . $invoice->get_number() . ' is already paid.', false );
247
+            }
248 248
 
249
-			$this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
249
+            $this->validate_ipn_amount( $invoice, $posted['mc_gross'] );
250 250
 
251
-			$note = '';
251
+            $note = '';
252 252
 
253
-			if ( ! empty( $posted['mc_fee'] ) ) {
254
-				$note = sprintf( __( 'PayPal Transaction Fee %.', 'invoicing' ), sanitize_text_field( $posted['mc_fee'] ) );
255
-			}
253
+            if ( ! empty( $posted['mc_fee'] ) ) {
254
+                $note = sprintf( __( 'PayPal Transaction Fee %.', 'invoicing' ), sanitize_text_field( $posted['mc_fee'] ) );
255
+            }
256 256
 
257
-			if ( ! empty( $posted['payer_status'] ) ) {
258
-				$note = ' ' . sprintf( __( 'Buyer status %.', 'invoicing' ), sanitize_text_field( $posted['payer_status'] ) );
259
-			}
257
+            if ( ! empty( $posted['payer_status'] ) ) {
258
+                $note = ' ' . sprintf( __( 'Buyer status %.', 'invoicing' ), sanitize_text_field( $posted['payer_status'] ) );
259
+            }
260 260
 
261
-			$invoice->mark_paid( ( ! empty( $posted['txn_id'] ) ? sanitize_text_field( $posted['txn_id'] ) : '' ), trim( $note ) );
262
-			return wpinv_error_log( 'Invoice marked as paid.', false );
261
+            $invoice->mark_paid( ( ! empty( $posted['txn_id'] ) ? sanitize_text_field( $posted['txn_id'] ) : '' ), trim( $note ) );
262
+            return wpinv_error_log( 'Invoice marked as paid.', false );
263 263
 
264
-		}
264
+        }
265 265
 
266
-		// Pending payments.
267
-		if ( $payment_status == 'pending' ) {
266
+        // Pending payments.
267
+        if ( $payment_status == 'pending' ) {
268 268
 
269
-			/* translators: %s: pending reason. */
270
-			$invoice->update_status( 'wpi-onhold', sprintf( __( 'Payment pending (%s).', 'invoicing' ), $posted['pending_reason'] ) );
269
+            /* translators: %s: pending reason. */
270
+            $invoice->update_status( 'wpi-onhold', sprintf( __( 'Payment pending (%s).', 'invoicing' ), $posted['pending_reason'] ) );
271 271
 
272
-			return wpinv_error_log( 'Invoice marked as "payment held".', false );
273
-		}
272
+            return wpinv_error_log( 'Invoice marked as "payment held".', false );
273
+        }
274 274
 
275
-		/* translators: %s: payment status. */
276
-		$invoice->update_status( 'wpi-failed', sprintf( __( 'Payment %s via IPN.', 'invoicing' ), sanitize_text_field( $posted['payment_status'] ) ) );
275
+        /* translators: %s: payment status. */
276
+        $invoice->update_status( 'wpi-failed', sprintf( __( 'Payment %s via IPN.', 'invoicing' ), sanitize_text_field( $posted['payment_status'] ) ) );
277 277
 
278
-	}
278
+    }
279 279
 
280
-	/**
281
-	 * Handles one time payments.
282
-	 *
283
-	 * @param WPInv_Invoice $invoice  Invoice object.
284
-	 * @param array    $posted Posted data.
285
-	 */
286
-	protected function ipn_txn_cart( $invoice, $posted ) {
287
-		$this->ipn_txn_web_accept( $invoice, $posted );
288
-	}
280
+    /**
281
+     * Handles one time payments.
282
+     *
283
+     * @param WPInv_Invoice $invoice  Invoice object.
284
+     * @param array    $posted Posted data.
285
+     */
286
+    protected function ipn_txn_cart( $invoice, $posted ) {
287
+        $this->ipn_txn_web_accept( $invoice, $posted );
288
+    }
289 289
 
290
-	/**
291
-	 * Handles subscription sign ups.
292
-	 *
293
-	 * @param WPInv_Invoice $invoice  Invoice object.
294
-	 * @param array    $posted Posted data.
295
-	 */
296
-	protected function ipn_txn_subscr_signup( $invoice, $posted ) {
290
+    /**
291
+     * Handles subscription sign ups.
292
+     *
293
+     * @param WPInv_Invoice $invoice  Invoice object.
294
+     * @param array    $posted Posted data.
295
+     */
296
+    protected function ipn_txn_subscr_signup( $invoice, $posted ) {
297 297
 
298
-		wpinv_error_log( 'Processing subscription signup', false );
298
+        wpinv_error_log( 'Processing subscription signup', false );
299 299
 
300
-		// Make sure the invoice has a subscription.
301
-		$subscription = getpaid_get_invoice_subscription( $invoice );
300
+        // Make sure the invoice has a subscription.
301
+        $subscription = getpaid_get_invoice_subscription( $invoice );
302 302
 
303
-		if ( empty( $subscription ) ) {
304
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
305
-		}
303
+        if ( empty( $subscription ) ) {
304
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
305
+        }
306 306
 
307
-		// Validate the IPN.
308
-		$business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
309
-		$this->validate_ipn_receiver_email( $invoice, $business_email );
310
-		$this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
307
+        // Validate the IPN.
308
+        $business_email = isset( $posted['business'] ) && is_email( $posted['business'] ) ? trim( $posted['business'] ) : trim( $posted['receiver_email'] );
309
+        $this->validate_ipn_receiver_email( $invoice, $business_email );
310
+        $this->validate_ipn_currency( $invoice, $posted['mc_currency'] );
311 311
 
312
-		// Activate the subscription.
313
-		$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
314
-		$subscription->set_date_created( current_time( 'mysql' ) );
315
-		$subscription->set_expiration( date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ) );
316
-		$subscription->set_profile_id( sanitize_text_field( $posted['subscr_id'] ) );
317
-		$subscription->activate();
312
+        // Activate the subscription.
313
+        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
314
+        $subscription->set_date_created( current_time( 'mysql' ) );
315
+        $subscription->set_expiration( date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) ) );
316
+        $subscription->set_profile_id( sanitize_text_field( $posted['subscr_id'] ) );
317
+        $subscription->activate();
318 318
 
319
-		// Set the transaction id.
320
-		if ( ! empty( $posted['txn_id'] ) ) {
321
-			$invoice->set_transaction_id( $posted['txn_id'] );
322
-		}
319
+        // Set the transaction id.
320
+        if ( ! empty( $posted['txn_id'] ) ) {
321
+            $invoice->set_transaction_id( $posted['txn_id'] );
322
+        }
323 323
 
324
-		// Update the payment status.
325
-		$invoice->mark_paid();
324
+        // Update the payment status.
325
+        $invoice->mark_paid();
326 326
 
327
-		$invoice->add_note( sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
327
+        $invoice->add_note( sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
328 328
 
329
-		wpinv_error_log( 'Subscription started.', false );
330
-	}
329
+        wpinv_error_log( 'Subscription started.', false );
330
+    }
331 331
 
332
-	/**
333
-	 * Handles subscription renewals.
334
-	 *
335
-	 * @param WPInv_Invoice $invoice  Invoice object.
336
-	 * @param array    $posted Posted data.
337
-	 */
338
-	protected function ipn_txn_subscr_payment( $invoice, $posted ) {
332
+    /**
333
+     * Handles subscription renewals.
334
+     *
335
+     * @param WPInv_Invoice $invoice  Invoice object.
336
+     * @param array    $posted Posted data.
337
+     */
338
+    protected function ipn_txn_subscr_payment( $invoice, $posted ) {
339 339
 
340
-		// Make sure the invoice has a subscription.
341
-		$subscription = wpinv_get_subscription( $invoice );
340
+        // Make sure the invoice has a subscription.
341
+        $subscription = wpinv_get_subscription( $invoice );
342 342
 
343
-		if ( empty( $subscription ) ) {
344
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
345
-		}
343
+        if ( empty( $subscription ) ) {
344
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
345
+        }
346 346
 
347
-		// Abort if this is the first payment.
348
-		if ( ( $invoice->is_paid() && date( 'Ynd', strtotime( $invoice->get_date_completed() ) ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) || date( 'Ynd', $subscription->get_time_created() ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) {
347
+        // Abort if this is the first payment.
348
+        if ( ( $invoice->is_paid() && date( 'Ynd', strtotime( $invoice->get_date_completed() ) ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) || date( 'Ynd', $subscription->get_time_created() ) == date( 'Ynd', strtotime( $posted['payment_date'] ) ) ) {
349 349
 
350
-			if ( ! empty( $posted['txn_id'] ) ) {
351
-				$invoice->set_transaction_id( sanitize_text_field( $posted['txn_id'] ) );
352
-				$invoice->mark_paid();
353
-				$invoice->save();
354
-			}
350
+            if ( ! empty( $posted['txn_id'] ) ) {
351
+                $invoice->set_transaction_id( sanitize_text_field( $posted['txn_id'] ) );
352
+                $invoice->mark_paid();
353
+                $invoice->save();
354
+            }
355 355
 
356
-			return;
357
-		}
356
+            return;
357
+        }
358 358
 
359
-		wpinv_error_log( 'Processing subscription renewal payment for the invoice ' . $invoice->get_id(), false );
359
+        wpinv_error_log( 'Processing subscription renewal payment for the invoice ' . $invoice->get_id(), false );
360 360
 
361
-		// Abort if the payment is already recorded.
362
-		if ( wpinv_get_id_by_transaction_id( $posted['txn_id'] ) ) {
363
-			return wpinv_error_log( 'Aborting, Transaction ' . $posted['txn_id'] .' has already been processed', false );
364
-		}
365
-
366
-		$args = array(
367
-			'transaction_id' => $posted['txn_id'],
368
-			'gateway'        => $this->id,
369
-		);
370
-
371
-		$invoice = wpinv_get_invoice( $subscription->add_payment( $args ) );
372
-
373
-		if ( empty( $invoice ) ) {
374
-			return;
375
-		}
376
-
377
-		$invoice->add_note( wp_sprintf( __( 'PayPal Transaction ID: %s', 'invoicing' ) , $posted['txn_id'] ), false, false, true );
378
-		$invoice->add_note( wp_sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
379
-
380
-		$subscription->renew();
381
-		wpinv_error_log( 'Subscription renewed.', false );
382
-
383
-	}
384
-
385
-	/**
386
-	 * Handles subscription cancelations.
387
-	 *
388
-	 * @param WPInv_Invoice $invoice  Invoice object.
389
-	 */
390
-	protected function ipn_txn_subscr_cancel( $invoice ) {
391
-
392
-		// Make sure the invoice has a subscription.
393
-		$subscription = wpinv_get_subscription( $invoice );
394
-
395
-		if ( empty( $subscription ) ) {
396
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false);
397
-		}
398
-
399
-		wpinv_error_log( 'Processing subscription cancellation for the invoice ' . $invoice->get_id(), false );
400
-		$subscription->cancel();
401
-		wpinv_error_log( 'Subscription cancelled.', false );
402
-
403
-	}
404
-
405
-	/**
406
-	 * Handles subscription completions.
407
-	 *
408
-	 * @param WPInv_Invoice $invoice  Invoice object.
409
-	 * @param array    $posted Posted data.
410
-	 */
411
-	protected function ipn_txn_subscr_eot( $invoice ) {
412
-
413
-		// Make sure the invoice has a subscription.
414
-		$subscription = wpinv_get_subscription( $invoice );
361
+        // Abort if the payment is already recorded.
362
+        if ( wpinv_get_id_by_transaction_id( $posted['txn_id'] ) ) {
363
+            return wpinv_error_log( 'Aborting, Transaction ' . $posted['txn_id'] .' has already been processed', false );
364
+        }
365
+
366
+        $args = array(
367
+            'transaction_id' => $posted['txn_id'],
368
+            'gateway'        => $this->id,
369
+        );
370
+
371
+        $invoice = wpinv_get_invoice( $subscription->add_payment( $args ) );
372
+
373
+        if ( empty( $invoice ) ) {
374
+            return;
375
+        }
376
+
377
+        $invoice->add_note( wp_sprintf( __( 'PayPal Transaction ID: %s', 'invoicing' ) , $posted['txn_id'] ), false, false, true );
378
+        $invoice->add_note( wp_sprintf( __( 'PayPal Subscription ID: %s', 'invoicing' ) , $posted['subscr_id'] ), false, false, true );
379
+
380
+        $subscription->renew();
381
+        wpinv_error_log( 'Subscription renewed.', false );
382
+
383
+    }
384
+
385
+    /**
386
+     * Handles subscription cancelations.
387
+     *
388
+     * @param WPInv_Invoice $invoice  Invoice object.
389
+     */
390
+    protected function ipn_txn_subscr_cancel( $invoice ) {
391
+
392
+        // Make sure the invoice has a subscription.
393
+        $subscription = wpinv_get_subscription( $invoice );
394
+
395
+        if ( empty( $subscription ) ) {
396
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false);
397
+        }
398
+
399
+        wpinv_error_log( 'Processing subscription cancellation for the invoice ' . $invoice->get_id(), false );
400
+        $subscription->cancel();
401
+        wpinv_error_log( 'Subscription cancelled.', false );
402
+
403
+    }
404
+
405
+    /**
406
+     * Handles subscription completions.
407
+     *
408
+     * @param WPInv_Invoice $invoice  Invoice object.
409
+     * @param array    $posted Posted data.
410
+     */
411
+    protected function ipn_txn_subscr_eot( $invoice ) {
412
+
413
+        // Make sure the invoice has a subscription.
414
+        $subscription = wpinv_get_subscription( $invoice );
415 415
 
416
-		if ( empty( $subscription ) ) {
417
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
418
-		}
416
+        if ( empty( $subscription ) ) {
417
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
418
+        }
419 419
 
420
-		wpinv_error_log( 'Processing subscription end of life for the invoice ' . $invoice->get_id(), false );
421
-		$subscription->complete();
422
-		wpinv_error_log( 'Subscription completed.', false );
420
+        wpinv_error_log( 'Processing subscription end of life for the invoice ' . $invoice->get_id(), false );
421
+        $subscription->complete();
422
+        wpinv_error_log( 'Subscription completed.', false );
423 423
 
424
-	}
424
+    }
425 425
 
426
-	/**
427
-	 * Handles subscription fails.
428
-	 *
429
-	 * @param WPInv_Invoice $invoice  Invoice object.
430
-	 * @param array    $posted Posted data.
431
-	 */
432
-	protected function ipn_txn_subscr_failed( $invoice ) {
433
-
434
-		// Make sure the invoice has a subscription.
435
-		$subscription = wpinv_get_subscription( $invoice );
426
+    /**
427
+     * Handles subscription fails.
428
+     *
429
+     * @param WPInv_Invoice $invoice  Invoice object.
430
+     * @param array    $posted Posted data.
431
+     */
432
+    protected function ipn_txn_subscr_failed( $invoice ) {
433
+
434
+        // Make sure the invoice has a subscription.
435
+        $subscription = wpinv_get_subscription( $invoice );
436 436
 
437
-		if ( empty( $subscription ) ) {
438
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
439
-		}
437
+        if ( empty( $subscription ) ) {
438
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
439
+        }
440 440
 
441
-		wpinv_error_log( 'Processing subscription payment failure for the invoice ' . $invoice->get_id(), false );
442
-		$subscription->failing();
443
-		wpinv_error_log( 'Subscription marked as failing.', false );
441
+        wpinv_error_log( 'Processing subscription payment failure for the invoice ' . $invoice->get_id(), false );
442
+        $subscription->failing();
443
+        wpinv_error_log( 'Subscription marked as failing.', false );
444 444
 
445
-	}
445
+    }
446 446
 
447
-	/**
448
-	 * Handles subscription suspensions.
449
-	 *
450
-	 * @param WPInv_Invoice $invoice  Invoice object.
451
-	 * @param array    $posted Posted data.
452
-	 */
453
-	protected function ipn_txn_recurring_payment_suspended_due_to_max_failed_payment( $invoice ) {
447
+    /**
448
+     * Handles subscription suspensions.
449
+     *
450
+     * @param WPInv_Invoice $invoice  Invoice object.
451
+     * @param array    $posted Posted data.
452
+     */
453
+    protected function ipn_txn_recurring_payment_suspended_due_to_max_failed_payment( $invoice ) {
454 454
 
455
-		// Make sure the invoice has a subscription.
456
-		$subscription = wpinv_get_subscription( $invoice );
455
+        // Make sure the invoice has a subscription.
456
+        $subscription = wpinv_get_subscription( $invoice );
457 457
 
458
-		if ( empty( $subscription ) ) {
459
-			return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
460
-		}
461
-
462
-		wpinv_error_log( 'Processing subscription cancellation due to max failed payment for the invoice ' . $invoice->get_id(), false );
463
-		$subscription->cancel();
464
-		wpinv_error_log( 'Subscription cancelled.', false );
465
-	}
458
+        if ( empty( $subscription ) ) {
459
+            return wpinv_error_log( 'Aborting, Subscription for the invoice ' . $invoice->get_id() . ' not found', false );
460
+        }
461
+
462
+        wpinv_error_log( 'Processing subscription cancellation due to max failed payment for the invoice ' . $invoice->get_id(), false );
463
+        $subscription->cancel();
464
+        wpinv_error_log( 'Subscription cancelled.', false );
465
+    }
466 466
 
467 467
 }
Please login to merge, or discard this patch.
includes/admin/class-wpinv-customers-table.php 1 patch
Indentation   +351 added lines, -351 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
 
10 10
 // Load WP_List_Table if not loaded
11 11
 if ( ! class_exists( 'WP_List_Table' ) ) {
12
-	require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
12
+    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
13 13
 }
14 14
 
15 15
 /**
@@ -21,354 +21,354 @@  discard block
 block discarded – undo
21 21
  */
22 22
 class WPInv_Customers_Table extends WP_List_Table {
23 23
 
24
-	/**
25
-	 * @var int Number of items per page
26
-	 * @since 1.0.19
27
-	 */
28
-	public $per_page = 10;
29
-
30
-	/**
31
-	 * @var int Number of items
32
-	 * @since 1.0.19
33
-	 */
34
-	public $total = 0;
35
-
36
-	/**
37
-	 * Get things started
38
-	 *
39
-	 * @since 1.0.19
40
-	 * @see WP_List_Table::__construct()
41
-	 */
42
-	public function __construct() {
43
-
44
-		// Set parent defaults
45
-		parent::__construct( array(
46
-			'singular' => 'id',
47
-			'plural'   => 'ids',
48
-			'ajax'     => false,
49
-		) );
50
-
51
-	}
52
-
53
-	/**
54
-	 * Gets the name of the primary column.
55
-	 *
56
-	 * @since 1.0.19
57
-	 * @access protected
58
-	 *
59
-	 * @return string Name of the primary column.
60
-	 */
61
-	protected function get_primary_column_name() {
62
-		return 'name';
63
-	}
64
-
65
-	/**
66
-	 * This function renders most of the columns in the list table.
67
-	 *
68
-	 * @since 1.0.19
69
-	 *
70
-	 * @param WP_User $item
71
-	 * @param string $column_name The name of the column
72
-	 *
73
-	 * @return string Column Name
74
-	 */
75
-	public function column_default( $item, $column_name ) {
76
-		$value = sanitize_text_field( get_user_meta( $item->ID, '_wpinv_' . $column_name, true ) );
77
-		return apply_filters( 'wpinv_customers_table_column' . $column_name, $value, $item );
78
-	}
79
-
80
-	/**
81
-	 * Displays the country column.
82
-	 *
83
-	 * @since 1.0.19
84
-	 *
85
-	 * @param WP_User $user
86
-	 *
87
-	 * @return string Column Name
88
-	 */
89
-	public function column_country( $user ) {
90
-		$country = wpinv_sanitize_country( $user->_wpinv_country );
91
-		if ( $country ) {
92
-			$country = wpinv_country_name( $country );
93
-		}
94
-		return sanitize_text_field( $country );
95
-	}
96
-
97
-	/**
98
-	 * Displays the state column.
99
-	 *
100
-	 * @since 1.0.19
101
-	 *
102
-	 * @param WP_User $user
103
-	 *
104
-	 * @return string Column Name
105
-	 */
106
-	public function column_state( $user ) {
107
-		$country = wpinv_sanitize_country( $user->_wpinv_country );
108
-		$state   = $user->_wpinv_state;
109
-		if ( $state ) {
110
-			$state = wpinv_state_name( $state, $country );
111
-		}
112
-
113
-		return sanitize_text_field( $state );
114
-	}
115
-
116
-	/**
117
-	 * Displays the signup column.
118
-	 *
119
-	 * @since 1.0.19
120
-	 *
121
-	 * @param WP_User $user
122
-	 *
123
-	 * @return string Column Name
124
-	 */
125
-	public function column_signup( $user ) {
126
-		return getpaid_format_date_value( $user->user_registered );
127
-	}
128
-
129
-	/**
130
-	 * Displays the total spent column.
131
-	 *
132
-	 * @since 1.0.19
133
-	 *
134
-	 * @param WP_User $user
135
-	 *
136
-	 * @return string Column Name
137
-	 */
138
-	public function column_total( $user ) {
139
-
140
-		$args = array(
141
-			'data'             => array(
142
-
143
-				'total'        => array(
144
-					'type'     => 'invoice_data',
145
-					'function' => 'SUM',
146
-					'name'     => 'total_sales',
147
-				)
148
-
149
-			),
150
-			'where'            => array(
151
-
152
-				'author'       => array(
153
-					'type'     => 'post_data',
154
-					'value'    => absint( $user->ID ),
155
-					'key'      => 'posts.post_author',
156
-					'operator' => '=',
157
-				),
158
-
159
-			),
160
-			'query_type'     => 'get_var',
161
-			'invoice_status' => array( 'wpi-renewal', 'wpi-processing', 'publish' ),
162
-		);
163
-
164
-		return wpinv_price( (float) GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
165
-
166
-	}
167
-
168
-	/**
169
-	 * Displays the total spent column.
170
-	 *
171
-	 * @since 1.0.19
172
-	 *
173
-	 * @param WP_User $user
174
-	 *
175
-	 * @return string Column Name
176
-	 */
177
-	public function column_invoices( $user ) {
178
-
179
-		$args = array(
180
-			'data'             => array(
181
-
182
-				'ID'           => array(
183
-					'type'     => 'post_data',
184
-					'function' => 'COUNT',
185
-					'name'     => 'count',
186
-					'distinct' => true,
187
-				),
188
-
189
-			),
190
-			'where'            => array(
191
-
192
-				'author'       => array(
193
-					'type'     => 'post_data',
194
-					'value'    => absint( $user->ID ),
195
-					'key'      => 'posts.post_author',
196
-					'operator' => '=',
197
-				),
198
-
199
-			),
200
-			'query_type'     => 'get_var',
201
-			'invoice_status' => array_keys( wpinv_get_invoice_statuses() ),
202
-		);
203
-
204
-		return absint( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
205
-
206
-	}
207
-
208
-	/**
209
-	 * Generates content for a single row of the table
210
-	 * @since 1.0.19
211
-	 *
212
-	 * @param int $item The user id.
213
-	 */
214
-	public function single_row( $item ) {
215
-		$item = get_user_by( 'id', $item );
216
-
217
-		if ( empty( $item ) ) {
218
-			return;
219
-		}
220
-
221
-		echo '<tr>';
222
-		$this->single_row_columns( $item );
223
-		echo '</tr>';
224
-	}
225
-
226
-	/**
227
-	 * Displays the customers name
228
-	 *
229
-	 * @param  WP_User $customer customer.
230
-	 * @return string
231
-	 */
232
-	public function column_name( $customer ) {
233
-
234
-		// Customer view URL.
235
-		$view_url    = esc_url( add_query_arg( 'user_id', $customer->ID, admin_url( 'user-edit.php' ) ) );
236
-		$row_actions = $this->row_actions(
237
-			array(
238
-				'view' => '<a href="' . $view_url . '#getpaid-fieldset-billing">' . __( 'Edit Details', 'invoicing' ) . '</a>',
239
-			)
240
-		);
241
-
242
-		// Get user's address.
243
-		$address = wpinv_get_user_address( $customer->ID );
244
-
245
-		// Customer email address.
246
-		$email       = sanitize_email( $customer->user_email );
247
-
248
-		// Customer's avatar.
249
-		$avatar = esc_url( get_avatar_url( $email ) );
250
-		$avatar = "<img src='$avatar' height='32' width='32'/>";
251
-
252
-		// Customer's name.
253
-		$name   = sanitize_text_field( "{$address['first_name']} {$address['last_name']}" );
254
-
255
-		if ( ! empty( $name ) ) {
256
-			$name = "<div style='overflow: hidden;height: 18px;'>$name</div>";
257
-		}
258
-
259
-		$email = "<div class='row-title'><a href='$view_url'>$email</a></div>";
260
-
261
-		return "<div style='display: flex;'><div>$avatar</div><div style='margin-left: 10px;'>$name<strong>$email</strong>$row_actions</div></div>";
262
-
263
-	}
264
-
265
-	/**
266
-	 * Retrieve the table columns
267
-	 *
268
-	 * @since 1.0.19
269
-	 * @return array $columns Array of all the list table columns
270
-	 */
271
-	public function get_columns() {
272
-
273
-		$columns = array(
274
-			'name'     => __( 'Name', 'invoicing' ),
275
-			'country'  => __( 'Country', 'invoicing' ),
276
-			'state'    => __( 'State', 'invoicing' ),
277
-			'city'     => __( 'City', 'invoicing' ),
278
-			'zip'      => __( 'ZIP', 'invoicing' ),
279
-			'address'  => __( 'Address', 'invoicing' ),
280
-			'phone'    => __( 'Phone', 'invoicing' ),
281
-			'company'  => __( 'Company', 'invoicing' ),
282
-			'invoices' => __( 'Invoices', 'invoicing' ),
283
-			'total'    => __( 'Total Spend', 'invoicing' ),
284
-			'signup'   => __( 'Date created', 'invoicing' ),
285
-		);
286
-		return apply_filters( 'wpinv_customers_table_columns', $columns );
287
-
288
-	}
289
-
290
-	/**
291
-	 * Retrieve the current page number
292
-	 *
293
-	 * @since 1.0.19
294
-	 * @return int Current page number
295
-	 */
296
-	public function get_paged() {
297
-		return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
298
-	}
299
-
300
-	/**
301
-	 * Returns bulk actions.
302
-	 *
303
-	 * @since 1.0.19
304
-	 * @return void
305
-	 */
306
-	public function bulk_actions( $which = '' ) {
307
-		return array();
308
-	}
309
-
310
-	/**
311
-	 *  Prepares the display query
312
-	 */
313
-	public function prepare_query() {
314
-		global $wpdb;
315
-
316
-		$post_types = '';
317
-
318
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
319
-			$post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type );
320
-		}
321
-
322
-		$post_types = rtrim( $post_types, ' OR' );
323
-
324
-		// Maybe search.
325
-		if ( ! empty( $_POST['s'] ) ) {
326
-			$users = get_users(
327
-				array(
328
-					'search'         => '*' . sanitize_text_field( urldecode( $_POST['s'] ) ) . '*',
329
-					'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
330
-					'fields'         => 'ID',
331
-				)
332
-			);
333
-
334
-			$users      = implode( ', ', $users );
335
-			$post_types = "($post_types) AND ( post_author IN ( $users ) )";
336
-		}
337
-
338
-		// Users with invoices.
339
-    	$customers = $wpdb->get_col(
340
-			$wpdb->prepare(
341
-				"SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types LIMIT %d,%d",
342
-				$this->get_paged() * 10 - 10,
343
-				$this->per_page
344
-			)
345
-		);
346
-
347
-		$this->items = $customers;
348
-		$this->total = (int) $wpdb->get_var( "SELECT COUNT( DISTINCT( post_author ) ) FROM $wpdb->posts WHERE $post_types" );
349
-
350
-	}
351
-
352
-	/**
353
-	 * Setup the final data for the table
354
-	 *
355
-	 * @since 1.0.19
356
-	 * @return void
357
-	 */
358
-	public function prepare_items() {
359
-		$columns               = $this->get_columns();
360
-		$hidden                = array(); // No hidden columns
361
-		$sortable              = $this->get_sortable_columns();
362
-		$this->_column_headers = array( $columns, $hidden, $sortable );
363
-		$this->prepare_query();
364
-
365
-		$this->set_pagination_args(
366
-			array(
367
-			'total_items' => $this->total,
368
-			'per_page'    => $this->per_page,
369
-			'total_pages' => ceil( $this->total / $this->per_page )
370
-			)
371
-		);
372
-
373
-	}
24
+    /**
25
+     * @var int Number of items per page
26
+     * @since 1.0.19
27
+     */
28
+    public $per_page = 10;
29
+
30
+    /**
31
+     * @var int Number of items
32
+     * @since 1.0.19
33
+     */
34
+    public $total = 0;
35
+
36
+    /**
37
+     * Get things started
38
+     *
39
+     * @since 1.0.19
40
+     * @see WP_List_Table::__construct()
41
+     */
42
+    public function __construct() {
43
+
44
+        // Set parent defaults
45
+        parent::__construct( array(
46
+            'singular' => 'id',
47
+            'plural'   => 'ids',
48
+            'ajax'     => false,
49
+        ) );
50
+
51
+    }
52
+
53
+    /**
54
+     * Gets the name of the primary column.
55
+     *
56
+     * @since 1.0.19
57
+     * @access protected
58
+     *
59
+     * @return string Name of the primary column.
60
+     */
61
+    protected function get_primary_column_name() {
62
+        return 'name';
63
+    }
64
+
65
+    /**
66
+     * This function renders most of the columns in the list table.
67
+     *
68
+     * @since 1.0.19
69
+     *
70
+     * @param WP_User $item
71
+     * @param string $column_name The name of the column
72
+     *
73
+     * @return string Column Name
74
+     */
75
+    public function column_default( $item, $column_name ) {
76
+        $value = sanitize_text_field( get_user_meta( $item->ID, '_wpinv_' . $column_name, true ) );
77
+        return apply_filters( 'wpinv_customers_table_column' . $column_name, $value, $item );
78
+    }
79
+
80
+    /**
81
+     * Displays the country column.
82
+     *
83
+     * @since 1.0.19
84
+     *
85
+     * @param WP_User $user
86
+     *
87
+     * @return string Column Name
88
+     */
89
+    public function column_country( $user ) {
90
+        $country = wpinv_sanitize_country( $user->_wpinv_country );
91
+        if ( $country ) {
92
+            $country = wpinv_country_name( $country );
93
+        }
94
+        return sanitize_text_field( $country );
95
+    }
96
+
97
+    /**
98
+     * Displays the state column.
99
+     *
100
+     * @since 1.0.19
101
+     *
102
+     * @param WP_User $user
103
+     *
104
+     * @return string Column Name
105
+     */
106
+    public function column_state( $user ) {
107
+        $country = wpinv_sanitize_country( $user->_wpinv_country );
108
+        $state   = $user->_wpinv_state;
109
+        if ( $state ) {
110
+            $state = wpinv_state_name( $state, $country );
111
+        }
112
+
113
+        return sanitize_text_field( $state );
114
+    }
115
+
116
+    /**
117
+     * Displays the signup column.
118
+     *
119
+     * @since 1.0.19
120
+     *
121
+     * @param WP_User $user
122
+     *
123
+     * @return string Column Name
124
+     */
125
+    public function column_signup( $user ) {
126
+        return getpaid_format_date_value( $user->user_registered );
127
+    }
128
+
129
+    /**
130
+     * Displays the total spent column.
131
+     *
132
+     * @since 1.0.19
133
+     *
134
+     * @param WP_User $user
135
+     *
136
+     * @return string Column Name
137
+     */
138
+    public function column_total( $user ) {
139
+
140
+        $args = array(
141
+            'data'             => array(
142
+
143
+                'total'        => array(
144
+                    'type'     => 'invoice_data',
145
+                    'function' => 'SUM',
146
+                    'name'     => 'total_sales',
147
+                )
148
+
149
+            ),
150
+            'where'            => array(
151
+
152
+                'author'       => array(
153
+                    'type'     => 'post_data',
154
+                    'value'    => absint( $user->ID ),
155
+                    'key'      => 'posts.post_author',
156
+                    'operator' => '=',
157
+                ),
158
+
159
+            ),
160
+            'query_type'     => 'get_var',
161
+            'invoice_status' => array( 'wpi-renewal', 'wpi-processing', 'publish' ),
162
+        );
163
+
164
+        return wpinv_price( (float) GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
165
+
166
+    }
167
+
168
+    /**
169
+     * Displays the total spent column.
170
+     *
171
+     * @since 1.0.19
172
+     *
173
+     * @param WP_User $user
174
+     *
175
+     * @return string Column Name
176
+     */
177
+    public function column_invoices( $user ) {
178
+
179
+        $args = array(
180
+            'data'             => array(
181
+
182
+                'ID'           => array(
183
+                    'type'     => 'post_data',
184
+                    'function' => 'COUNT',
185
+                    'name'     => 'count',
186
+                    'distinct' => true,
187
+                ),
188
+
189
+            ),
190
+            'where'            => array(
191
+
192
+                'author'       => array(
193
+                    'type'     => 'post_data',
194
+                    'value'    => absint( $user->ID ),
195
+                    'key'      => 'posts.post_author',
196
+                    'operator' => '=',
197
+                ),
198
+
199
+            ),
200
+            'query_type'     => 'get_var',
201
+            'invoice_status' => array_keys( wpinv_get_invoice_statuses() ),
202
+        );
203
+
204
+        return absint( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
205
+
206
+    }
207
+
208
+    /**
209
+     * Generates content for a single row of the table
210
+     * @since 1.0.19
211
+     *
212
+     * @param int $item The user id.
213
+     */
214
+    public function single_row( $item ) {
215
+        $item = get_user_by( 'id', $item );
216
+
217
+        if ( empty( $item ) ) {
218
+            return;
219
+        }
220
+
221
+        echo '<tr>';
222
+        $this->single_row_columns( $item );
223
+        echo '</tr>';
224
+    }
225
+
226
+    /**
227
+     * Displays the customers name
228
+     *
229
+     * @param  WP_User $customer customer.
230
+     * @return string
231
+     */
232
+    public function column_name( $customer ) {
233
+
234
+        // Customer view URL.
235
+        $view_url    = esc_url( add_query_arg( 'user_id', $customer->ID, admin_url( 'user-edit.php' ) ) );
236
+        $row_actions = $this->row_actions(
237
+            array(
238
+                'view' => '<a href="' . $view_url . '#getpaid-fieldset-billing">' . __( 'Edit Details', 'invoicing' ) . '</a>',
239
+            )
240
+        );
241
+
242
+        // Get user's address.
243
+        $address = wpinv_get_user_address( $customer->ID );
244
+
245
+        // Customer email address.
246
+        $email       = sanitize_email( $customer->user_email );
247
+
248
+        // Customer's avatar.
249
+        $avatar = esc_url( get_avatar_url( $email ) );
250
+        $avatar = "<img src='$avatar' height='32' width='32'/>";
251
+
252
+        // Customer's name.
253
+        $name   = sanitize_text_field( "{$address['first_name']} {$address['last_name']}" );
254
+
255
+        if ( ! empty( $name ) ) {
256
+            $name = "<div style='overflow: hidden;height: 18px;'>$name</div>";
257
+        }
258
+
259
+        $email = "<div class='row-title'><a href='$view_url'>$email</a></div>";
260
+
261
+        return "<div style='display: flex;'><div>$avatar</div><div style='margin-left: 10px;'>$name<strong>$email</strong>$row_actions</div></div>";
262
+
263
+    }
264
+
265
+    /**
266
+     * Retrieve the table columns
267
+     *
268
+     * @since 1.0.19
269
+     * @return array $columns Array of all the list table columns
270
+     */
271
+    public function get_columns() {
272
+
273
+        $columns = array(
274
+            'name'     => __( 'Name', 'invoicing' ),
275
+            'country'  => __( 'Country', 'invoicing' ),
276
+            'state'    => __( 'State', 'invoicing' ),
277
+            'city'     => __( 'City', 'invoicing' ),
278
+            'zip'      => __( 'ZIP', 'invoicing' ),
279
+            'address'  => __( 'Address', 'invoicing' ),
280
+            'phone'    => __( 'Phone', 'invoicing' ),
281
+            'company'  => __( 'Company', 'invoicing' ),
282
+            'invoices' => __( 'Invoices', 'invoicing' ),
283
+            'total'    => __( 'Total Spend', 'invoicing' ),
284
+            'signup'   => __( 'Date created', 'invoicing' ),
285
+        );
286
+        return apply_filters( 'wpinv_customers_table_columns', $columns );
287
+
288
+    }
289
+
290
+    /**
291
+     * Retrieve the current page number
292
+     *
293
+     * @since 1.0.19
294
+     * @return int Current page number
295
+     */
296
+    public function get_paged() {
297
+        return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
298
+    }
299
+
300
+    /**
301
+     * Returns bulk actions.
302
+     *
303
+     * @since 1.0.19
304
+     * @return void
305
+     */
306
+    public function bulk_actions( $which = '' ) {
307
+        return array();
308
+    }
309
+
310
+    /**
311
+     *  Prepares the display query
312
+     */
313
+    public function prepare_query() {
314
+        global $wpdb;
315
+
316
+        $post_types = '';
317
+
318
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
319
+            $post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type );
320
+        }
321
+
322
+        $post_types = rtrim( $post_types, ' OR' );
323
+
324
+        // Maybe search.
325
+        if ( ! empty( $_POST['s'] ) ) {
326
+            $users = get_users(
327
+                array(
328
+                    'search'         => '*' . sanitize_text_field( urldecode( $_POST['s'] ) ) . '*',
329
+                    'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
330
+                    'fields'         => 'ID',
331
+                )
332
+            );
333
+
334
+            $users      = implode( ', ', $users );
335
+            $post_types = "($post_types) AND ( post_author IN ( $users ) )";
336
+        }
337
+
338
+        // Users with invoices.
339
+        $customers = $wpdb->get_col(
340
+            $wpdb->prepare(
341
+                "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types LIMIT %d,%d",
342
+                $this->get_paged() * 10 - 10,
343
+                $this->per_page
344
+            )
345
+        );
346
+
347
+        $this->items = $customers;
348
+        $this->total = (int) $wpdb->get_var( "SELECT COUNT( DISTINCT( post_author ) ) FROM $wpdb->posts WHERE $post_types" );
349
+
350
+    }
351
+
352
+    /**
353
+     * Setup the final data for the table
354
+     *
355
+     * @since 1.0.19
356
+     * @return void
357
+     */
358
+    public function prepare_items() {
359
+        $columns               = $this->get_columns();
360
+        $hidden                = array(); // No hidden columns
361
+        $sortable              = $this->get_sortable_columns();
362
+        $this->_column_headers = array( $columns, $hidden, $sortable );
363
+        $this->prepare_query();
364
+
365
+        $this->set_pagination_args(
366
+            array(
367
+            'total_items' => $this->total,
368
+            'per_page'    => $this->per_page,
369
+            'total_pages' => ceil( $this->total / $this->per_page )
370
+            )
371
+        );
372
+
373
+    }
374 374
 }
Please login to merge, or discard this patch.
includes/admin/register-settings.php 1 patch
Indentation   +324 added lines, -324 removed lines patch added patch discarded remove patch
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
     $cb      = "wpinv_{$option['type']}_callback";
197 197
     $section = "wpinv_settings_{$tab}_$section";
198 198
 
199
-	if ( isset( $option['desc'] ) && ! empty( $option['help-tip'] ) ) {
200
-		$tip   = wpinv_clean( $option['desc'] );
201
-		$name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
202
-		unset( $option['desc'] );
203
-	}
199
+    if ( isset( $option['desc'] ) && ! empty( $option['help-tip'] ) ) {
200
+        $tip   = wpinv_clean( $option['desc'] );
201
+        $name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
202
+        unset( $option['desc'] );
203
+    }
204 204
 
205 205
     // Loop through all tabs.
206 206
     add_settings_field(
@@ -227,8 +227,8 @@  discard block
 block discarded – undo
227 227
             'faux'        => isset( $option['faux'] )        ? $option['faux']        : false,
228 228
             'onchange'    => isset( $option['onchange'] )   ? $option['onchange']     : '',
229 229
             'custom'      => isset( $option['custom'] )     ? $option['custom']       : '',
230
-			'class'       => isset( $option['class'] )     ? $option['class']         : '',
231
-			'style'       => isset( $option['style'] )     ? $option['style']         : '',
230
+            'class'       => isset( $option['class'] )     ? $option['class']         : '',
231
+            'style'       => isset( $option['style'] )     ? $option['style']         : '',
232 232
             'cols'        => isset( $option['cols'] ) && (int) $option['cols'] > 0 ? (int) $option['cols'] : 50,
233 233
             'rows'        => isset( $option['rows'] ) && (int) $option['rows'] > 0 ? (int) $option['rows'] : 5,
234 234
         )
@@ -242,7 +242,7 @@  discard block
 block discarded – undo
242 242
  * @return array
243 243
  */
244 244
 function wpinv_get_registered_settings() {
245
-	return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
245
+    return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
246 246
 }
247 247
 
248 248
 /**
@@ -261,8 +261,8 @@  discard block
 block discarded – undo
261 261
  */
262 262
 function wpinv_settings_sanitize( $input = array() ) {
263 263
 
264
-	$wpinv_options = wpinv_get_options();
265
-	$raw_referrer  = wp_get_raw_referer();
264
+    $wpinv_options = wpinv_get_options();
265
+    $raw_referrer  = wp_get_raw_referer();
266 266
 
267 267
     if ( empty( $raw_referrer ) ) {
268 268
         return $input;
@@ -270,9 +270,9 @@  discard block
 block discarded – undo
270 270
 
271 271
     wp_parse_str( $raw_referrer, $referrer );
272 272
 
273
-	if ( empty( $referrer['tab'] ) ) {
273
+    if ( empty( $referrer['tab'] ) ) {
274 274
         return $input;
275
-	}
275
+    }
276 276
 
277 277
     $settings = wpinv_get_registered_settings();
278 278
     $tab      = isset( $referrer['tab'] ) ? $referrer['tab'] : 'general';
@@ -294,10 +294,10 @@  discard block
 block discarded – undo
294 294
         }
295 295
 
296 296
         // General filter
297
-		$input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
297
+        $input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
298 298
 
299
-		// Key specific filter.
300
-		$input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
299
+        // Key specific filter.
300
+        $input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
301 301
     }
302 302
 
303 303
     // Loop through the whitelist and unset any that are empty for the tab being saved
@@ -353,14 +353,14 @@  discard block
 block discarded – undo
353 353
 
354 354
     foreach ( $new_rates as $rate ) {
355 355
 
356
-		$rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
357
-		$rate['name']    = sanitize_text_field( $rate['name'] );
358
-		$rate['state']   = sanitize_text_field( $rate['state'] );
359
-		$rate['country'] = sanitize_text_field( $rate['country'] );
360
-		$rate['global']  = empty( $rate['state'] );
361
-		$tax_rates[]     = $rate;
356
+        $rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
357
+        $rate['name']    = sanitize_text_field( $rate['name'] );
358
+        $rate['state']   = sanitize_text_field( $rate['state'] );
359
+        $rate['country'] = sanitize_text_field( $rate['country'] );
360
+        $rate['global']  = empty( $rate['state'] );
361
+        $tax_rates[]     = $rate;
362 362
 
363
-	}
363
+    }
364 364
 
365 365
     update_option( 'wpinv_tax_rates', $tax_rates );
366 366
 
@@ -378,11 +378,11 @@  discard block
 block discarded – undo
378 378
     $tabs['general']  = __( 'General', 'invoicing' );
379 379
     $tabs['gateways'] = __( 'Payment Gateways', 'invoicing' );
380 380
     $tabs['taxes']    = __( 'Taxes', 'invoicing' );
381
-	$tabs['emails']   = __( 'Emails', 'invoicing' );
381
+    $tabs['emails']   = __( 'Emails', 'invoicing' );
382 382
 
383
-	if ( count( getpaid_get_integration_settings() ) > 0 ) {
384
-		$tabs['integrations'] = __( 'Integrations', 'invoicing' );
385
-	}
383
+    if ( count( getpaid_get_integration_settings() ) > 0 ) {
384
+        $tabs['integrations'] = __( 'Integrations', 'invoicing' );
385
+    }
386 386
 
387 387
     $tabs['privacy']  = __( 'Privacy', 'invoicing' );
388 388
     $tabs['misc']     = __( 'Misc', 'invoicing' );
@@ -420,14 +420,14 @@  discard block
 block discarded – undo
420 420
         ) ),
421 421
         'taxes' => apply_filters( 'wpinv_settings_sections_taxes', array(
422 422
             'main'  => __( 'Tax Settings', 'invoicing' ),
423
-			'rates' => __( 'Tax Rates', 'invoicing' ),
424
-			'vat'   => __( 'EU VAT Settings', 'invoicing' )
423
+            'rates' => __( 'Tax Rates', 'invoicing' ),
424
+            'vat'   => __( 'EU VAT Settings', 'invoicing' )
425 425
         ) ),
426 426
         'emails' => apply_filters( 'wpinv_settings_sections_emails', array(
427 427
             'main' => __( 'Email Settings', 'invoicing' ),
428
-		) ),
428
+        ) ),
429 429
 
430
-		'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
430
+        'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
431 431
 
432 432
         'privacy' => apply_filters( 'wpinv_settings_sections_privacy', array(
433 433
             'main' => __( 'Privacy policy', 'invoicing' ),
@@ -447,51 +447,51 @@  discard block
 block discarded – undo
447 447
 }
448 448
 
449 449
 function wpinv_get_pages( $with_slug = false, $default_label = NULL ) {
450
-	$pages_options = array();
450
+    $pages_options = array();
451 451
 
452
-	if( $default_label !== NULL && $default_label !== false ) {
453
-		$pages_options = array( '' => $default_label ); // Blank option
454
-	}
452
+    if( $default_label !== NULL && $default_label !== false ) {
453
+        $pages_options = array( '' => $default_label ); // Blank option
454
+    }
455 455
 
456
-	$pages = get_pages();
457
-	if ( $pages ) {
458
-		foreach ( $pages as $page ) {
459
-			$title = $with_slug ? $page->post_title . ' (' . $page->post_name . ')' : $page->post_title;
456
+    $pages = get_pages();
457
+    if ( $pages ) {
458
+        foreach ( $pages as $page ) {
459
+            $title = $with_slug ? $page->post_title . ' (' . $page->post_name . ')' : $page->post_title;
460 460
             $pages_options[ $page->ID ] = $title;
461
-		}
462
-	}
461
+        }
462
+    }
463 463
 
464
-	return $pages_options;
464
+    return $pages_options;
465 465
 }
466 466
 
467 467
 function wpinv_header_callback( $args ) {
468
-	if ( !empty( $args['desc'] ) ) {
468
+    if ( !empty( $args['desc'] ) ) {
469 469
         echo $args['desc'];
470 470
     }
471 471
 }
472 472
 
473 473
 function wpinv_hidden_callback( $args ) {
474
-	global $wpinv_options;
475
-
476
-	if ( isset( $args['set_value'] ) ) {
477
-		$value = $args['set_value'];
478
-	} elseif ( isset( $wpinv_options[ $args['id'] ] ) ) {
479
-		$value = $wpinv_options[ $args['id'] ];
480
-	} else {
481
-		$value = isset( $args['std'] ) ? $args['std'] : '';
482
-	}
483
-
484
-	if ( isset( $args['faux'] ) && true === $args['faux'] ) {
485
-		$args['readonly'] = true;
486
-		$value = isset( $args['std'] ) ? $args['std'] : '';
487
-		$name  = '';
488
-	} else {
489
-		$name = 'name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"';
490
-	}
491
-
492
-	$html = '<input type="hidden" id="wpinv_settings[' . wpinv_sanitize_key( $args['id'] ) . ']" ' . $name . ' value="' . esc_attr( stripslashes( $value ) ) . '" />';
474
+    global $wpinv_options;
475
+
476
+    if ( isset( $args['set_value'] ) ) {
477
+        $value = $args['set_value'];
478
+    } elseif ( isset( $wpinv_options[ $args['id'] ] ) ) {
479
+        $value = $wpinv_options[ $args['id'] ];
480
+    } else {
481
+        $value = isset( $args['std'] ) ? $args['std'] : '';
482
+    }
483
+
484
+    if ( isset( $args['faux'] ) && true === $args['faux'] ) {
485
+        $args['readonly'] = true;
486
+        $value = isset( $args['std'] ) ? $args['std'] : '';
487
+        $name  = '';
488
+    } else {
489
+        $name = 'name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"';
490
+    }
491
+
492
+    $html = '<input type="hidden" id="wpinv_settings[' . wpinv_sanitize_key( $args['id'] ) . ']" ' . $name . ' value="' . esc_attr( stripslashes( $value ) ) . '" />';
493 493
     
494
-	echo $html;
494
+    echo $html;
495 495
 }
496 496
 
497 497
 /**
@@ -499,12 +499,12 @@  discard block
 block discarded – undo
499 499
  */
500 500
 function wpinv_checkbox_callback( $args ) {
501 501
 
502
-	$std = isset( $args['std'] ) ? $args['std'] : '';
503
-	$std = wpinv_get_option( $args['id'], $std );
504
-	$id  = esc_attr( $args['id'] );
502
+    $std = isset( $args['std'] ) ? $args['std'] : '';
503
+    $std = wpinv_get_option( $args['id'], $std );
504
+    $id  = esc_attr( $args['id'] );
505 505
 
506
-	getpaid_hidden_field( "wpinv_settings[$id]", '0' );
507
-	?>
506
+    getpaid_hidden_field( "wpinv_settings[$id]", '0' );
507
+    ?>
508 508
 		<fieldset>
509 509
 			<label>
510 510
 				<input id="wpinv-settings-<?php echo $id; ?>" name="wpinv_settings[<?php echo $id; ?>]" <?php checked( empty( $std ), false ); ?> value="1" type="checkbox">
@@ -516,77 +516,77 @@  discard block
 block discarded – undo
516 516
 
517 517
 function wpinv_multicheck_callback( $args ) {
518 518
 	
519
-	global $wpinv_options;
519
+    global $wpinv_options;
520 520
 
521
-	$sanitize_id = wpinv_sanitize_key( $args['id'] );
522
-	$class = !empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
521
+    $sanitize_id = wpinv_sanitize_key( $args['id'] );
522
+    $class = !empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
523 523
 
524
-	if ( ! empty( $args['options'] ) ) {
524
+    if ( ! empty( $args['options'] ) ) {
525 525
 
526
-		$std     = isset( $args['std'] ) ? $args['std'] : array();
527
-		$value   = isset( $wpinv_options[ $args['id'] ] ) ? $wpinv_options[ $args['id'] ] : $std;
526
+        $std     = isset( $args['std'] ) ? $args['std'] : array();
527
+        $value   = isset( $wpinv_options[ $args['id'] ] ) ? $wpinv_options[ $args['id'] ] : $std;
528 528
 
529
-		echo '<div class="wpi-mcheck-rows wpi-mcheck-' . $sanitize_id . $class . '">';
529
+        echo '<div class="wpi-mcheck-rows wpi-mcheck-' . $sanitize_id . $class . '">';
530 530
         foreach( $args['options'] as $key => $option ):
531
-			$sanitize_key = wpinv_sanitize_key( $key );
532
-			if ( in_array( $sanitize_key, $value ) ) { 
533
-				$enabled = $sanitize_key;
534
-			} else { 
535
-				$enabled = NULL; 
536
-			}
537
-			echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" id="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
538
-			echo '<label for="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']">' . wp_kses_post( $option ) . '</label></div>';
539
-		endforeach;
540
-		echo '</div>';
541
-		echo '<p class="description">' . $args['desc'] . '</p>';
542
-	}
531
+            $sanitize_key = wpinv_sanitize_key( $key );
532
+            if ( in_array( $sanitize_key, $value ) ) { 
533
+                $enabled = $sanitize_key;
534
+            } else { 
535
+                $enabled = NULL; 
536
+            }
537
+            echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" id="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
538
+            echo '<label for="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']">' . wp_kses_post( $option ) . '</label></div>';
539
+        endforeach;
540
+        echo '</div>';
541
+        echo '<p class="description">' . $args['desc'] . '</p>';
542
+    }
543 543
 }
544 544
 
545 545
 function wpinv_payment_icons_callback( $args ) {
546
-	global $wpinv_options;
546
+    global $wpinv_options;
547 547
     
548 548
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
549 549
 
550
-	if ( ! empty( $args['options'] ) ) {
551
-		foreach( $args['options'] as $key => $option ) {
550
+    if ( ! empty( $args['options'] ) ) {
551
+        foreach( $args['options'] as $key => $option ) {
552 552
             $sanitize_key = wpinv_sanitize_key( $key );
553 553
             
554
-			if( isset( $wpinv_options[$args['id']][$key] ) ) {
555
-				$enabled = $option;
556
-			} else {
557
-				$enabled = NULL;
558
-			}
559
-
560
-			echo '<label for="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
561
-
562
-				echo '<input name="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" id="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
563
-
564
-				if ( wpinv_string_is_image_url( $key ) ) {
565
-					echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
566
-				} else {
567
-					$card = strtolower( str_replace( ' ', '', $option ) );
568
-
569
-					if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
570
-						$image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
571
-					} else {
572
-						$image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
573
-						$content_dir = WP_CONTENT_DIR;
574
-
575
-						if ( function_exists( 'wp_normalize_path' ) ) {
576
-							// Replaces backslashes with forward slashes for Windows systems
577
-							$image = wp_normalize_path( $image );
578
-							$content_dir = wp_normalize_path( $content_dir );
579
-						}
580
-
581
-						$image = str_replace( $content_dir, content_url(), $image );
582
-					}
583
-
584
-					echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
585
-				}
586
-			echo $option . '</label>';
587
-		}
588
-		echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
589
-	}
554
+            if( isset( $wpinv_options[$args['id']][$key] ) ) {
555
+                $enabled = $option;
556
+            } else {
557
+                $enabled = NULL;
558
+            }
559
+
560
+            echo '<label for="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
561
+
562
+                echo '<input name="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" id="wpinv_settings[' . $sanitize_id . '][' . $sanitize_key . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
563
+
564
+                if ( wpinv_string_is_image_url( $key ) ) {
565
+                    echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
566
+                } else {
567
+                    $card = strtolower( str_replace( ' ', '', $option ) );
568
+
569
+                    if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
570
+                        $image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
571
+                    } else {
572
+                        $image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
573
+                        $content_dir = WP_CONTENT_DIR;
574
+
575
+                        if ( function_exists( 'wp_normalize_path' ) ) {
576
+                            // Replaces backslashes with forward slashes for Windows systems
577
+                            $image = wp_normalize_path( $image );
578
+                            $content_dir = wp_normalize_path( $content_dir );
579
+                        }
580
+
581
+                        $image = str_replace( $content_dir, content_url(), $image );
582
+                    }
583
+
584
+                    echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
585
+                }
586
+            echo $option . '</label>';
587
+        }
588
+        echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
589
+    }
590 590
 }
591 591
 
592 592
 /**
@@ -594,9 +594,9 @@  discard block
 block discarded – undo
594 594
  */
595 595
 function wpinv_radio_callback( $args ) {
596 596
 
597
-	$std = isset( $args['std'] ) ? $args['std'] : '';
598
-	$std = wpinv_get_option( $args['id'], $std );
599
-	?>
597
+    $std = isset( $args['std'] ) ? $args['std'] : '';
598
+    $std = wpinv_get_option( $args['id'], $std );
599
+    ?>
600 600
 		<fieldset>
601 601
 			<ul id="wpinv-settings-<?php echo esc_attr( $args['id'] ); ?>" style="margin-top: 0;">
602 602
 				<?php foreach( $args['options'] as $key => $option ) : ?>
@@ -610,7 +610,7 @@  discard block
 block discarded – undo
610 610
 			</ul>
611 611
 		</fieldset>
612 612
 	<?php
613
-	getpaid_settings_description_callback( $args );
613
+    getpaid_settings_description_callback( $args );
614 614
 }
615 615
 
616 616
 /**
@@ -618,10 +618,10 @@  discard block
 block discarded – undo
618 618
  */
619 619
 function getpaid_settings_description_callback( $args ) {
620 620
 
621
-	if ( ! empty( $args['desc'] ) ) {
622
-		$description = wp_kses_post( $args['desc'] );
623
-		echo "<p class='description'>$description</p>";
624
-	}
621
+    if ( ! empty( $args['desc'] ) ) {
622
+        $description = wp_kses_post( $args['desc'] );
623
+        echo "<p class='description'>$description</p>";
624
+    }
625 625
 
626 626
 }
627 627
 
@@ -630,7 +630,7 @@  discard block
 block discarded – undo
630 630
  */
631 631
 function wpinv_gateways_callback() {
632 632
 
633
-	?>
633
+    ?>
634 634
 		</td>
635 635
 	</tr>
636 636
 	<tr class="bsui">
@@ -641,24 +641,24 @@  discard block
 block discarded – undo
641 641
 }
642 642
 
643 643
 function wpinv_gateway_select_callback($args) {
644
-	global $wpinv_options;
644
+    global $wpinv_options;
645 645
     
646 646
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
647 647
     $class = !empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
648 648
 
649
-	echo '<select name="wpinv_settings[' . $sanitize_id . ']"" id="wpinv_settings[' . $sanitize_id . ']" class="'.$class.'" >';
649
+    echo '<select name="wpinv_settings[' . $sanitize_id . ']"" id="wpinv_settings[' . $sanitize_id . ']" class="'.$class.'" >';
650 650
 
651
-	foreach ( $args['options'] as $key => $option ) :
652
-		if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
651
+    foreach ( $args['options'] as $key => $option ) :
652
+        if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
653 653
             $selected = selected( $key, $args['selected'], false );
654 654
         } else {
655 655
             $selected = isset( $wpinv_options[ $args['id'] ] ) ? selected( $key, $wpinv_options[$args['id']], false ) : '';
656 656
         }
657
-		echo '<option value="' . wpinv_sanitize_key( $key ) . '"' . $selected . '>' . esc_html( $option['admin_label'] ) . '</option>';
658
-	endforeach;
657
+        echo '<option value="' . wpinv_sanitize_key( $key ) . '"' . $selected . '>' . esc_html( $option['admin_label'] ) . '</option>';
658
+    endforeach;
659 659
 
660
-	echo '</select>';
661
-	echo '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
660
+    echo '</select>';
661
+    echo '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
662 662
 }
663 663
 
664 664
 /**
@@ -669,29 +669,29 @@  discard block
 block discarded – undo
669 669
  */
670 670
 function wpinv_settings_attrs_helper( $args ) {
671 671
 
672
-	$value        = isset( $args['std'] ) ? $args['std'] : '';
673
-	$id           = esc_attr( $args['id'] );
674
-	$placeholder  = esc_attr( $args['placeholder'] );
672
+    $value        = isset( $args['std'] ) ? $args['std'] : '';
673
+    $id           = esc_attr( $args['id'] );
674
+    $placeholder  = esc_attr( $args['placeholder'] );
675 675
 
676
-	if ( ! empty( $args['faux'] ) ) {
677
-		$args['readonly'] = true;
678
-		$name             = '';
679
-	} else {
680
-		$value  = wpinv_get_option( $args['id'], $value );
681
-		$name   = "wpinv_settings[$id]";
682
-	}
676
+    if ( ! empty( $args['faux'] ) ) {
677
+        $args['readonly'] = true;
678
+        $name             = '';
679
+    } else {
680
+        $value  = wpinv_get_option( $args['id'], $value );
681
+        $name   = "wpinv_settings[$id]";
682
+    }
683 683
 
684
-	$value    = is_scalar( $value ) ? esc_attr( $value ) : '';
685
-	$class    = esc_attr( $args['class'] );
686
-	$style    = esc_attr( $args['style'] );
687
-	$readonly = empty( $args['readonly'] ) ? '' : 'readonly onclick="this.select()"';
684
+    $value    = is_scalar( $value ) ? esc_attr( $value ) : '';
685
+    $class    = esc_attr( $args['class'] );
686
+    $style    = esc_attr( $args['style'] );
687
+    $readonly = empty( $args['readonly'] ) ? '' : 'readonly onclick="this.select()"';
688 688
 
689
-	$onchange = '';
689
+    $onchange = '';
690 690
     if ( ! empty( $args['onchange'] ) ) {
691 691
         $onchange = ' onchange="' . esc_attr( $args['onchange'] ) . '"';
692
-	}
692
+    }
693 693
 
694
-	return "name='$name' id='wpinv-settings-$id' style='$style' value='$value' class='$class' placeholder='$placeholder' data-placeholder='$placeholder' $onchange $readonly";
694
+    return "name='$name' id='wpinv-settings-$id' style='$style' value='$value' class='$class' placeholder='$placeholder' data-placeholder='$placeholder' $onchange $readonly";
695 695
 }
696 696
 
697 697
 /**
@@ -699,11 +699,11 @@  discard block
 block discarded – undo
699 699
  */
700 700
 function wpinv_text_callback( $args ) {
701 701
 
702
-	$desc = wp_kses_post( $args['desc'] );
703
-	$desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
704
-	$attr = wpinv_settings_attrs_helper( $args );
702
+    $desc = wp_kses_post( $args['desc'] );
703
+    $desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
704
+    $attr = wpinv_settings_attrs_helper( $args );
705 705
 
706
-	?>
706
+    ?>
707 707
 		<label style="width: 100%;">
708 708
 			<input type="text" <?php echo $attr; ?>>
709 709
 			<?php echo $desc; ?>
@@ -717,14 +717,14 @@  discard block
 block discarded – undo
717 717
  */
718 718
 function wpinv_number_callback( $args ) {
719 719
 
720
-	$desc = wp_kses_post( $args['desc'] );
721
-	$desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
722
-	$attr = wpinv_settings_attrs_helper( $args );
723
-	$max  = intval( $args['max'] );
724
-	$min  = intval( $args['min'] );
725
-	$step = floatval( $args['step'] );
720
+    $desc = wp_kses_post( $args['desc'] );
721
+    $desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
722
+    $attr = wpinv_settings_attrs_helper( $args );
723
+    $max  = intval( $args['max'] );
724
+    $min  = intval( $args['min'] );
725
+    $step = floatval( $args['step'] );
726 726
 
727
-	?>
727
+    ?>
728 728
 		<label style="width: 100%;">
729 729
 			<input type="number" step="<?php echo $step; ?>" max="<?php echo $max; ?>" min="<?php echo $min; ?>" <?php echo $attr; ?>>
730 730
 			<?php echo $desc; ?>
@@ -734,48 +734,48 @@  discard block
 block discarded – undo
734 734
 }
735 735
 
736 736
 function wpinv_textarea_callback( $args ) {
737
-	global $wpinv_options;
737
+    global $wpinv_options;
738 738
     
739 739
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
740 740
 
741
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
742
-		$value = $wpinv_options[ $args['id'] ];
743
-	} else {
744
-		$value = isset( $args['std'] ) ? $args['std'] : '';
745
-	}
741
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
742
+        $value = $wpinv_options[ $args['id'] ];
743
+    } else {
744
+        $value = isset( $args['std'] ) ? $args['std'] : '';
745
+    }
746 746
     
747 747
     $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
748 748
     $class = ( isset( $args['class'] ) && ! is_null( $args['class'] ) ) ? $args['class'] : 'large-text';
749 749
 
750
-	$html = '<textarea class="' . sanitize_html_class( $class ) . ' txtarea-' . sanitize_html_class( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . $args['cols'] . '" rows="' . $args['rows'] . '" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
751
-	$html .= '<br /><label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
750
+    $html = '<textarea class="' . sanitize_html_class( $class ) . ' txtarea-' . sanitize_html_class( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . $args['cols'] . '" rows="' . $args['rows'] . '" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
751
+    $html .= '<br /><label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
752 752
 
753
-	echo $html;
753
+    echo $html;
754 754
 }
755 755
 
756 756
 function wpinv_password_callback( $args ) {
757
-	global $wpinv_options;
757
+    global $wpinv_options;
758 758
     
759 759
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
760 760
 
761
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
762
-		$value = $wpinv_options[ $args['id'] ];
763
-	} else {
764
-		$value = isset( $args['std'] ) ? $args['std'] : '';
765
-	}
761
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
762
+        $value = $wpinv_options[ $args['id'] ];
763
+    } else {
764
+        $value = isset( $args['std'] ) ? $args['std'] : '';
765
+    }
766 766
 
767
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
768
-	$html = '<input type="password" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
769
-	$html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
767
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
768
+    $html = '<input type="password" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
769
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
770 770
 
771
-	echo $html;
771
+    echo $html;
772 772
 }
773 773
 
774 774
 function wpinv_missing_callback($args) {
775
-	printf(
776
-		__( 'The callback function used for the %s setting is missing.', 'invoicing' ),
777
-		'<strong>' . $args['id'] . '</strong>'
778
-	);
775
+    printf(
776
+        __( 'The callback function used for the %s setting is missing.', 'invoicing' ),
777
+        '<strong>' . $args['id'] . '</strong>'
778
+    );
779 779
 }
780 780
 
781 781
 /**
@@ -783,13 +783,13 @@  discard block
 block discarded – undo
783 783
  */
784 784
 function wpinv_select_callback( $args ) {
785 785
 
786
-	$desc   = wp_kses_post( $args['desc'] );
787
-	$desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
788
-	$attr   = wpinv_settings_attrs_helper( $args );
789
-	$value  = isset( $args['std'] ) ? $args['std'] : '';
790
-	$value  = wpinv_get_option( $args['id'], $value );
786
+    $desc   = wp_kses_post( $args['desc'] );
787
+    $desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
788
+    $attr   = wpinv_settings_attrs_helper( $args );
789
+    $value  = isset( $args['std'] ) ? $args['std'] : '';
790
+    $value  = wpinv_get_option( $args['id'], $value );
791 791
 
792
-	?>
792
+    ?>
793 793
 		<label style="width: 100%;">
794 794
 			<select <?php echo $attr; ?>>
795 795
 				<?php foreach ( $args['options'] as $option => $name ) : ?>
@@ -803,123 +803,123 @@  discard block
 block discarded – undo
803 803
 }
804 804
 
805 805
 function wpinv_color_select_callback( $args ) {
806
-	global $wpinv_options;
806
+    global $wpinv_options;
807 807
     
808 808
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
809 809
 
810
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
811
-		$value = $wpinv_options[ $args['id'] ];
812
-	} else {
813
-		$value = isset( $args['std'] ) ? $args['std'] : '';
814
-	}
810
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
811
+        $value = $wpinv_options[ $args['id'] ];
812
+    } else {
813
+        $value = isset( $args['std'] ) ? $args['std'] : '';
814
+    }
815 815
 
816
-	$html = '<select id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
816
+    $html = '<select id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
817 817
 
818
-	foreach ( $args['options'] as $option => $color ) {
819
-		$selected = selected( $option, $value, false );
820
-		$html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $color['label'] ) . '</option>';
821
-	}
818
+    foreach ( $args['options'] as $option => $color ) {
819
+        $selected = selected( $option, $value, false );
820
+        $html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $color['label'] ) . '</option>';
821
+    }
822 822
 
823
-	$html .= '</select>';
824
-	$html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
823
+    $html .= '</select>';
824
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
825 825
 
826
-	echo $html;
826
+    echo $html;
827 827
 }
828 828
 
829 829
 function wpinv_rich_editor_callback( $args ) {
830
-	global $wpinv_options, $wp_version;
830
+    global $wpinv_options, $wp_version;
831 831
     
832 832
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
833 833
 
834
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
835
-		$value = $wpinv_options[ $args['id'] ];
834
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
835
+        $value = $wpinv_options[ $args['id'] ];
836 836
 
837
-		if( empty( $args['allow_blank'] ) && empty( $value ) ) {
838
-			$value = isset( $args['std'] ) ? $args['std'] : '';
839
-		}
840
-	} else {
841
-		$value = isset( $args['std'] ) ? $args['std'] : '';
842
-	}
837
+        if( empty( $args['allow_blank'] ) && empty( $value ) ) {
838
+            $value = isset( $args['std'] ) ? $args['std'] : '';
839
+        }
840
+    } else {
841
+        $value = isset( $args['std'] ) ? $args['std'] : '';
842
+    }
843 843
 
844
-	$rows = isset( $args['size'] ) ? $args['size'] : 20;
844
+    $rows = isset( $args['size'] ) ? $args['size'] : 20;
845 845
 
846
-	$html = '<div class="getpaid-settings-editor-input">';
847
-	if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
848
-		ob_start();
849
-		wp_editor( stripslashes( $value ), 'wpinv_settings_' . esc_attr( $args['id'] ), array( 'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']', 'textarea_rows' => absint( $rows ), 'media_buttons' => false ) );
850
-		$html .= ob_get_clean();
851
-	} else {
852
-		$html .= '<textarea class="large-text" rows="10" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
853
-	}
846
+    $html = '<div class="getpaid-settings-editor-input">';
847
+    if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
848
+        ob_start();
849
+        wp_editor( stripslashes( $value ), 'wpinv_settings_' . esc_attr( $args['id'] ), array( 'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']', 'textarea_rows' => absint( $rows ), 'media_buttons' => false ) );
850
+        $html .= ob_get_clean();
851
+    } else {
852
+        $html .= '<textarea class="large-text" rows="10" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
853
+    }
854 854
 
855
-	$html .= '</div><br/><label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
855
+    $html .= '</div><br/><label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
856 856
 
857
-	echo $html;
857
+    echo $html;
858 858
 }
859 859
 
860 860
 function wpinv_upload_callback( $args ) {
861
-	global $wpinv_options;
861
+    global $wpinv_options;
862 862
     
863 863
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
864 864
 
865
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
866
-		$value = $wpinv_options[$args['id']];
867
-	} else {
868
-		$value = isset($args['std']) ? $args['std'] : '';
869
-	}
865
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
866
+        $value = $wpinv_options[$args['id']];
867
+    } else {
868
+        $value = isset($args['std']) ? $args['std'] : '';
869
+    }
870 870
 
871
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
872
-	$html = '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
873
-	$html .= '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . __( 'Upload File', 'invoicing' ) . '"/></span>';
874
-	$html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
871
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
872
+    $html = '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
873
+    $html .= '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . __( 'Upload File', 'invoicing' ) . '"/></span>';
874
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
875 875
 
876
-	echo $html;
876
+    echo $html;
877 877
 }
878 878
 
879 879
 function wpinv_color_callback( $args ) {
880
-	global $wpinv_options;
880
+    global $wpinv_options;
881 881
     
882 882
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
883 883
 
884
-	if ( isset( $wpinv_options[ $args['id'] ] ) ) {
885
-		$value = $wpinv_options[ $args['id'] ];
886
-	} else {
887
-		$value = isset( $args['std'] ) ? $args['std'] : '';
888
-	}
884
+    if ( isset( $wpinv_options[ $args['id'] ] ) ) {
885
+        $value = $wpinv_options[ $args['id'] ];
886
+    } else {
887
+        $value = isset( $args['std'] ) ? $args['std'] : '';
888
+    }
889 889
 
890
-	$default = isset( $args['std'] ) ? $args['std'] : '';
890
+    $default = isset( $args['std'] ) ? $args['std'] : '';
891 891
 
892
-	$html = '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $default ) . '" />';
893
-	$html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
892
+    $html = '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $default ) . '" />';
893
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
894 894
 
895
-	echo $html;
895
+    echo $html;
896 896
 }
897 897
 
898 898
 function wpinv_country_states_callback($args) {
899
-	global $wpinv_options;
899
+    global $wpinv_options;
900 900
     
901 901
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
902 902
 
903
-	if ( isset( $args['placeholder'] ) ) {
904
-		$placeholder = $args['placeholder'];
905
-	} else {
906
-		$placeholder = '';
907
-	}
903
+    if ( isset( $args['placeholder'] ) ) {
904
+        $placeholder = $args['placeholder'];
905
+    } else {
906
+        $placeholder = '';
907
+    }
908 908
 
909
-	$states = wpinv_get_country_states();
909
+    $states = wpinv_get_country_states();
910 910
 
911
-	$class = empty( $states ) ? ' class="wpinv-no-states"' : ' class="wpi_select2"';
912
-	$html = '<select id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"' . $class . 'data-placeholder="' . esc_html( $placeholder ) . '"/>';
911
+    $class = empty( $states ) ? ' class="wpinv-no-states"' : ' class="wpi_select2"';
912
+    $html = '<select id="wpinv_settings[' . $sanitize_id . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"' . $class . 'data-placeholder="' . esc_html( $placeholder ) . '"/>';
913 913
 
914
-	foreach ( $states as $option => $name ) {
915
-		$selected = isset( $wpinv_options[ $args['id'] ] ) ? selected( $option, $wpinv_options[$args['id']], false ) : '';
916
-		$html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
917
-	}
914
+    foreach ( $states as $option => $name ) {
915
+        $selected = isset( $wpinv_options[ $args['id'] ] ) ? selected( $option, $wpinv_options[$args['id']], false ) : '';
916
+        $html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( $name ) . '</option>';
917
+    }
918 918
 
919
-	$html .= '</select>';
920
-	$html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
919
+    $html .= '</select>';
920
+    $html .= '<label for="wpinv_settings[' . $sanitize_id . ']"> '  . wp_kses_post( $args['desc'] ) . '</label>';
921 921
 
922
-	echo $html;
922
+    echo $html;
923 923
 }
924 924
 
925 925
 /**
@@ -927,7 +927,7 @@  discard block
 block discarded – undo
927 927
  */
928 928
 function wpinv_tax_rates_callback() {
929 929
 	
930
-	?>
930
+    ?>
931 931
 		</td>
932 932
 	</tr>
933 933
 	<tr class="bsui">
@@ -942,17 +942,17 @@  discard block
 block discarded – undo
942 942
  * Displays a tax rate' edit row.
943 943
  */
944 944
 function wpinv_tax_rate_callback( $tax_rate, $key, $echo = true ) {
945
-	ob_start();
945
+    ob_start();
946 946
 
947
-	$key                      = sanitize_key( $key );
948
-	$tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
949
-	include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
947
+    $key                      = sanitize_key( $key );
948
+    $tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
949
+    include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
950 950
 
951
-	if ( $echo ) {
952
-		echo ob_get_clean();
953
-	} else {
954
-		return ob_get_clean(); 
955
-	}
951
+    if ( $echo ) {
952
+        echo ob_get_clean();
953
+    } else {
954
+        return ob_get_clean(); 
955
+    }
956 956
 
957 957
 }
958 958
 
@@ -980,14 +980,14 @@  discard block
 block discarded – undo
980 980
                 </td>
981 981
                 <td>
982 982
 					<a href="<?php
983
-						echo esc_url(
984
-							wp_nonce_url(
985
-								add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
986
-								'getpaid-nonce',
987
-								'getpaid-nonce'
988
-							)
989
-						);
990
-					?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
983
+                        echo esc_url(
984
+                            wp_nonce_url(
985
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
986
+                                'getpaid-nonce',
987
+                                'getpaid-nonce'
988
+                            )
989
+                        );
990
+                    ?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
991 991
                 </td>
992 992
             </tr>
993 993
 			<tr>
@@ -997,14 +997,14 @@  discard block
 block discarded – undo
997 997
                 </td>
998 998
                 <td>
999 999
 					<a href="<?php
1000
-						echo esc_url(
1001
-							wp_nonce_url(
1002
-								add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1003
-								'getpaid-nonce',
1004
-								'getpaid-nonce'
1005
-							)
1006
-						);
1007
-					?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
1000
+                        echo esc_url(
1001
+                            wp_nonce_url(
1002
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1003
+                                'getpaid-nonce',
1004
+                                'getpaid-nonce'
1005
+                            )
1006
+                        );
1007
+                    ?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
1008 1008
                 </td>
1009 1009
             </tr>
1010 1010
 			<tr>
@@ -1014,14 +1014,14 @@  discard block
 block discarded – undo
1014 1014
                 </td>
1015 1015
                 <td>
1016 1016
 					<a href="<?php
1017
-						echo esc_url(
1018
-							wp_nonce_url(
1019
-								add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1020
-								'getpaid-nonce',
1021
-								'getpaid-nonce'
1022
-							)
1023
-						);
1024
-					?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
1017
+                        echo esc_url(
1018
+                            wp_nonce_url(
1019
+                                add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1020
+                                'getpaid-nonce',
1021
+                                'getpaid-nonce'
1022
+                            )
1023
+                        );
1024
+                    ?>" class="button button-primary"><?php _e('Run', 'invoicing');?></a>
1025 1025
                 </td>
1026 1026
             </tr>
1027 1027
 
@@ -1032,14 +1032,14 @@  discard block
 block discarded – undo
1032 1032
                 </td>
1033 1033
                 <td>
1034 1034
 					<a href="<?php
1035
-						echo esc_url(
1036
-							wp_nonce_url(
1037
-								add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1038
-								'getpaid-nonce',
1039
-								'getpaid-nonce'
1040
-							)
1041
-						);
1042
-					?>" class="button button-primary"><?php _e( 'Run', 'invoicing' );?></a>
1035
+                        echo esc_url(
1036
+                            wp_nonce_url(
1037
+                                add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1038
+                                'getpaid-nonce',
1039
+                                'getpaid-nonce'
1040
+                            )
1041
+                        );
1042
+                    ?>" class="button button-primary"><?php _e( 'Run', 'invoicing' );?></a>
1043 1043
                 </td>
1044 1044
             </tr>
1045 1045
 
@@ -1053,19 +1053,19 @@  discard block
 block discarded – undo
1053 1053
 
1054 1054
 
1055 1055
 function wpinv_descriptive_text_callback( $args ) {
1056
-	echo wp_kses_post( $args['desc'] );
1056
+    echo wp_kses_post( $args['desc'] );
1057 1057
 }
1058 1058
 
1059 1059
 function wpinv_raw_html_callback( $args ) {
1060
-	echo $args['desc'];
1060
+    echo $args['desc'];
1061 1061
 }
1062 1062
 
1063 1063
 function wpinv_hook_callback( $args ) {
1064
-	do_action( 'wpinv_' . $args['id'], $args );
1064
+    do_action( 'wpinv_' . $args['id'], $args );
1065 1065
 }
1066 1066
 
1067 1067
 function wpinv_set_settings_cap() {
1068
-	return wpinv_get_capability();
1068
+    return wpinv_get_capability();
1069 1069
 }
1070 1070
 add_filter( 'option_page_capability_wpinv_settings', 'wpinv_set_settings_cap' );
1071 1071
 
@@ -1099,15 +1099,15 @@  discard block
 block discarded – undo
1099 1099
  */
1100 1100
 function wpinv_get_merge_tags_help_text( $subscription = false ) {
1101 1101
 
1102
-	$url  = $subscription ? 'https://gist.github.com/picocodes/3d213982d57c34edf7a46fd3f0e8583e' : 'https://gist.github.com/picocodes/43bdc4d4bbba844534b2722e2af0b58f';
1103
-	$link = sprintf(
1104
-		'<strong><a href="%s" target="_blank">%s</a></strong>',
1105
-		$url,
1106
-		esc_html__( 'View available merge tags.', 'wpinv-quotes' )
1107
-	);
1102
+    $url  = $subscription ? 'https://gist.github.com/picocodes/3d213982d57c34edf7a46fd3f0e8583e' : 'https://gist.github.com/picocodes/43bdc4d4bbba844534b2722e2af0b58f';
1103
+    $link = sprintf(
1104
+        '<strong><a href="%s" target="_blank">%s</a></strong>',
1105
+        $url,
1106
+        esc_html__( 'View available merge tags.', 'wpinv-quotes' )
1107
+    );
1108 1108
 
1109
-	$description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1109
+    $description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1110 1110
 
1111
-	return "$description $link";
1111
+    return "$description $link";
1112 1112
 
1113 1113
 }
Please login to merge, or discard this patch.
includes/admin/class-getpaid-admin.php 1 patch
Indentation   +417 added lines, -417 removed lines patch added patch discarded remove patch
@@ -14,77 +14,77 @@  discard block
 block discarded – undo
14 14
 class GetPaid_Admin {
15 15
 
16 16
     /**
17
-	 * Local path to this plugins admin directory
18
-	 *
19
-	 * @var         string
20
-	 */
21
-	public $admin_path;
22
-
23
-	/**
24
-	 * Web path to this plugins admin directory
25
-	 *
26
-	 * @var         string
27
-	 */
28
-	public $admin_url;
17
+     * Local path to this plugins admin directory
18
+     *
19
+     * @var         string
20
+     */
21
+    public $admin_path;
22
+
23
+    /**
24
+     * Web path to this plugins admin directory
25
+     *
26
+     * @var         string
27
+     */
28
+    public $admin_url;
29 29
 	
30
-	/**
31
-	 * Reports components.
32
-	 *
33
-	 * @var GetPaid_Reports
34
-	 */
30
+    /**
31
+     * Reports components.
32
+     *
33
+     * @var GetPaid_Reports
34
+     */
35 35
     public $reports;
36 36
 
37 37
     /**
38
-	 * Class constructor.
39
-	 */
40
-	public function __construct(){
38
+     * Class constructor.
39
+     */
40
+    public function __construct(){
41 41
 
42 42
         $this->admin_path  = plugin_dir_path( __FILE__ );
43
-		$this->admin_url   = plugins_url( '/', __FILE__ );
44
-		$this->reports     = new GetPaid_Reports();
43
+        $this->admin_url   = plugins_url( '/', __FILE__ );
44
+        $this->reports     = new GetPaid_Reports();
45 45
 
46 46
         if ( is_admin() ) {
47
-			$this->init_admin_hooks();
47
+            $this->init_admin_hooks();
48 48
         }
49 49
 
50 50
     }
51 51
 
52 52
     /**
53
-	 * Init action and filter hooks
54
-	 *
55
-	 */
56
-	private function init_admin_hooks() {
53
+     * Init action and filter hooks
54
+     *
55
+     */
56
+    private function init_admin_hooks() {
57 57
         add_action( 'admin_enqueue_scripts', array( $this, 'enqeue_scripts' ) );
58 58
         add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
59 59
         add_action( 'admin_init', array( $this, 'init_ayecode_connect_helper' ) );
60 60
         add_action( 'admin_init', array( $this, 'activation_redirect') );
61 61
         add_action( 'admin_init', array( $this, 'maybe_do_admin_action') );
62
-		add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
-		add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
-		add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
65
-		add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
62
+        add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
+        add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
+        add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
65
+        add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
66 66
         add_action( 'getpaid_authenticated_admin_action_reset_tax_rates', array( $this, 'admin_reset_tax_rates' ) );
67
-		add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
68
-		add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
69
-		add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
70
-		add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
71
-		add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
72
-		do_action( 'getpaid_init_admin_hooks', $this );
67
+        add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
68
+        add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
69
+        add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
70
+        add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
71
+        add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
72
+        do_action( 'getpaid_init_admin_hooks', $this );
73 73
 
74 74
     }
75 75
 
76 76
     /**
77
-	 * Register admin scripts
78
-	 *
79
-	 */
80
-	public function enqeue_scripts() {
77
+     * Register admin scripts
78
+     *
79
+     */
80
+    public function enqeue_scripts() {
81 81
         global $current_screen, $pagenow;
82 82
 
83
-		$page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
84
-		$editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
83
+        $page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
84
+        $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
85 85
 
86 86
         if ( ! empty( $current_screen->post_type ) ) {
87
-			$page = $current_screen->post_type;
87
+            $page = $current_screen->post_type;
88 88
         }
89 89
 
90 90
         // General styles.
@@ -105,54 +105,54 @@  discard block
 block discarded – undo
105 105
         }
106 106
 
107 107
         // Payment form scripts.
108
-		if ( 'wpi_payment_form' == $page && $editing ) {
108
+        if ( 'wpi_payment_form' == $page && $editing ) {
109 109
             $this->load_payment_form_scripts();
110 110
         }
111 111
 
112
-		if ( $page == 'wpinv-subscriptions' ) {
113
-			wp_enqueue_script( 'postbox' );
114
-		}
112
+        if ( $page == 'wpinv-subscriptions' ) {
113
+            wp_enqueue_script( 'postbox' );
114
+        }
115 115
 
116 116
     }
117 117
 
118 118
     /**
119
-	 * Returns admin js translations.
120
-	 *
121
-	 */
122
-	protected function get_admin_i18() {
119
+     * Returns admin js translations.
120
+     *
121
+     */
122
+    protected function get_admin_i18() {
123 123
         global $post;
124 124
 
125
-		$date_range = array(
126
-			'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days'
127
-		);
125
+        $date_range = array(
126
+            'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days'
127
+        );
128 128
 
129
-		if ( $date_range['period'] == 'custom' ) {
129
+        if ( $date_range['period'] == 'custom' ) {
130 130
 			
131
-			if ( isset( $_GET['from'] ) ) {
132
-				$date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
133
-			}
131
+            if ( isset( $_GET['from'] ) ) {
132
+                $date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
133
+            }
134 134
 
135
-			if ( isset( $_GET['to'] ) ) {
136
-				$date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
137
-			}
135
+            if ( isset( $_GET['to'] ) ) {
136
+                $date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
137
+            }
138 138
 
139
-		}
139
+        }
140 140
 
141 141
         $i18n = array(
142 142
             'ajax_url'                  => admin_url( 'admin-ajax.php' ),
143 143
             'post_ID'                   => isset( $post->ID ) ? $post->ID : '',
144
-			'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
145
-			'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
146
-			'rest_root'                 => esc_url_raw( rest_url() ),
147
-			'date_range'                => $date_range,
144
+            'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
145
+            'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
146
+            'rest_root'                 => esc_url_raw( rest_url() ),
147
+            'date_range'                => $date_range,
148 148
             'add_invoice_note_nonce'    => wp_create_nonce( 'add-invoice-note' ),
149 149
             'delete_invoice_note_nonce' => wp_create_nonce( 'delete-invoice-note' ),
150 150
             'invoice_item_nonce'        => wp_create_nonce( 'invoice-item' ),
151 151
             'billing_details_nonce'     => wp_create_nonce( 'get-billing-details' ),
152 152
             'tax'                       => wpinv_tax_amount(),
153 153
             'discount'                  => 0,
154
-			'currency_symbol'           => wpinv_currency_symbol(),
155
-			'currency'                  => wpinv_get_currency(),
154
+            'currency_symbol'           => wpinv_currency_symbol(),
155
+            'currency'                  => wpinv_get_currency(),
156 156
             'currency_pos'              => wpinv_currency_position(),
157 157
             'thousand_sep'              => wpinv_thousands_separator(),
158 158
             'decimal_sep'               => wpinv_decimal_separator(),
@@ -172,118 +172,118 @@  discard block
 block discarded – undo
172 172
             'item_description'          => __( 'Item Description', 'invoicing' ),
173 173
             'invoice_description'       => __( 'Invoice Description', 'invoicing' ),
174 174
             'discount_description'      => __( 'Discount Description', 'invoicing' ),
175
-			'searching'                 => __( 'Searching', 'invoicing' ),
176
-			'loading'                   => __( 'Loading...', 'invoicing' ),
177
-			'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
178
-			'search_items'              => __( 'Enter item name', 'invoicing' ),
175
+            'searching'                 => __( 'Searching', 'invoicing' ),
176
+            'loading'                   => __( 'Loading...', 'invoicing' ),
177
+            'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
178
+            'search_items'              => __( 'Enter item name', 'invoicing' ),
179 179
         );
180 180
 
181
-		if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
181
+        if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
182 182
 
183
-			$invoice              = new WPInv_Invoice( $post );
184
-			$i18n['save_invoice'] = sprintf(
185
-				__( 'Save %s', 'invoicing' ),
186
-				ucfirst( $invoice->get_invoice_quote_type() )
187
-			);
183
+            $invoice              = new WPInv_Invoice( $post );
184
+            $i18n['save_invoice'] = sprintf(
185
+                __( 'Save %s', 'invoicing' ),
186
+                ucfirst( $invoice->get_invoice_quote_type() )
187
+            );
188 188
 
189
-			$i18n['invoice_description'] = sprintf(
190
-				__( '%s Description', 'invoicing' ),
191
-				ucfirst( $invoice->get_invoice_quote_type() )
192
-			);
189
+            $i18n['invoice_description'] = sprintf(
190
+                __( '%s Description', 'invoicing' ),
191
+                ucfirst( $invoice->get_invoice_quote_type() )
192
+            );
193 193
 
194
-		}
195
-		return $i18n;
196
-	}
194
+        }
195
+        return $i18n;
196
+    }
197 197
 
198
-	/**
199
-	 * Change the admin footer text on GetPaid admin pages.
200
-	 *
201
-	 * @since  2.0.0
202
-	 * @param  string $footer_text
203
-	 * @return string
204
-	 */
205
-	public function admin_footer_text( $footer_text ) {
206
-		global $current_screen;
198
+    /**
199
+     * Change the admin footer text on GetPaid admin pages.
200
+     *
201
+     * @since  2.0.0
202
+     * @param  string $footer_text
203
+     * @return string
204
+     */
205
+    public function admin_footer_text( $footer_text ) {
206
+        global $current_screen;
207 207
 
208
-		$page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
208
+        $page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
209 209
 
210 210
         if ( ! empty( $current_screen->post_type ) ) {
211
-			$page = $current_screen->post_type;
211
+            $page = $current_screen->post_type;
212 212
         }
213 213
 
214 214
         // General styles.
215 215
         if ( apply_filters( 'getpaid_display_admin_footer_text', wpinv_current_user_can_manage_invoicing() ) && false !== stripos( $page, 'wpi' ) ) {
216 216
 
217
-			// Change the footer text
218
-			if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
219
-
220
-				$rating_url  = esc_url(
221
-					wp_nonce_url(
222
-						admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
223
-						'getpaid-nonce',
224
-						'getpaid-nonce'
225
-						)
226
-				);
227
-
228
-				$footer_text = sprintf(
229
-					/* translators: %s: five stars */
230
-					__( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
231
-					"<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
232
-				);
233
-
234
-			} else {
235
-
236
-				$footer_text = sprintf(
237
-					/* translators: %s: GetPaid */
238
-					__( 'Thank you for using %s!', 'invoicing' ),
239
-					"<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
240
-				);
241
-
242
-			}
243
-
244
-		}
245
-
246
-		return $footer_text;
247
-	}
248
-
249
-	/**
250
-	 * Redirects to wp.org to rate the plugin.
251
-	 *
252
-	 * @since  2.0.0
253
-	 */
254
-	public function redirect_to_wordpress_rating_page() {
255
-		update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
256
-		wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
257
-		exit;
258
-	}
217
+            // Change the footer text
218
+            if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
219
+
220
+                $rating_url  = esc_url(
221
+                    wp_nonce_url(
222
+                        admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
223
+                        'getpaid-nonce',
224
+                        'getpaid-nonce'
225
+                        )
226
+                );
227
+
228
+                $footer_text = sprintf(
229
+                    /* translators: %s: five stars */
230
+                    __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
231
+                    "<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
232
+                );
233
+
234
+            } else {
235
+
236
+                $footer_text = sprintf(
237
+                    /* translators: %s: GetPaid */
238
+                    __( 'Thank you for using %s!', 'invoicing' ),
239
+                    "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
240
+                );
241
+
242
+            }
243
+
244
+        }
245
+
246
+        return $footer_text;
247
+    }
259 248
 
260 249
     /**
261
-	 * Loads payment form js.
262
-	 *
263
-	 */
264
-	protected function load_payment_form_scripts() {
250
+     * Redirects to wp.org to rate the plugin.
251
+     *
252
+     * @since  2.0.0
253
+     */
254
+    public function redirect_to_wordpress_rating_page() {
255
+        update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
256
+        wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
257
+        exit;
258
+    }
259
+
260
+    /**
261
+     * Loads payment form js.
262
+     *
263
+     */
264
+    protected function load_payment_form_scripts() {
265 265
         global $post;
266 266
 
267 267
         wp_enqueue_script( 'vue', WPINV_PLUGIN_URL . 'assets/js/vue/vue.js', array(), WPINV_VERSION );
268
-		wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
269
-		wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
268
+        wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
269
+        wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
270 270
 
271
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
272
-		wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable' ),  $version );
271
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
272
+        wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable' ),  $version );
273 273
 
274
-		wp_localize_script(
274
+        wp_localize_script(
275 275
             'wpinv-admin-payment-form-script',
276 276
             'wpinvPaymentFormAdmin',
277 277
             array(
278
-				'elements'      => wpinv_get_data( 'payment-form-elements' ),
279
-				'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
280
-				'currency'      => wpinv_currency_symbol(),
281
-				'position'      => wpinv_currency_position(),
282
-				'decimals'      => (int) wpinv_decimals(),
283
-				'thousands_sep' => wpinv_thousands_separator(),
284
-				'decimals_sep'  => wpinv_decimal_separator(),
285
-				'form_items'    => gepaid_get_form_items( $post->ID ),
286
-				'is_default'    => $post->ID == wpinv_get_default_payment_form(),
278
+                'elements'      => wpinv_get_data( 'payment-form-elements' ),
279
+                'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
280
+                'currency'      => wpinv_currency_symbol(),
281
+                'position'      => wpinv_currency_position(),
282
+                'decimals'      => (int) wpinv_decimals(),
283
+                'thousands_sep' => wpinv_thousands_separator(),
284
+                'decimals_sep'  => wpinv_decimal_separator(),
285
+                'form_items'    => gepaid_get_form_items( $post->ID ),
286
+                'is_default'    => $post->ID == wpinv_get_default_payment_form(),
287 287
             )
288 288
         );
289 289
 
@@ -292,20 +292,20 @@  discard block
 block discarded – undo
292 292
     }
293 293
 
294 294
     /**
295
-	 * Add our classes to admin pages.
295
+     * Add our classes to admin pages.
296 296
      *
297 297
      * @param string $classes
298 298
      * @return string
299
-	 *
300
-	 */
299
+     *
300
+     */
301 301
     public function admin_body_class( $classes ) {
302
-		global $pagenow, $post, $current_screen;
302
+        global $pagenow, $post, $current_screen;
303 303
 
304 304
 
305 305
         $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
306 306
 
307 307
         if ( ! empty( $current_screen->post_type ) ) {
308
-			$page = $current_screen->post_type;
308
+            $page = $current_screen->post_type;
309 309
         }
310 310
 
311 311
         if ( false !== stripos( $page, 'wpi' ) ) {
@@ -314,59 +314,59 @@  discard block
 block discarded – undo
314 314
 
315 315
         if ( in_array( $page, wpinv_parse_list( 'wpi_invoice wpi_payment_form wpi_quote' ) ) ) {
316 316
             $classes .= ' wpinv-cpt wpinv';
317
-		}
317
+        }
318 318
 		
319
-		if ( getpaid_is_invoice_post_type( $page ) ) {
319
+        if ( getpaid_is_invoice_post_type( $page ) ) {
320 320
             $classes .= ' getpaid-is-invoice-cpt';
321 321
         }
322 322
 
323
-		return $classes;
323
+        return $classes;
324 324
     }
325 325
 
326 326
     /**
327
-	 * Maybe show the AyeCode Connect Notice.
328
-	 */
329
-	public function init_ayecode_connect_helper(){
327
+     * Maybe show the AyeCode Connect Notice.
328
+     */
329
+    public function init_ayecode_connect_helper(){
330 330
 
331 331
         new AyeCode_Connect_Helper(
332 332
             array(
333
-				'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"),
334
-				'connect_external'  => __( "Please confirm you wish to connect your site?","invoicing" ),
335
-				'connect'           => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ),
336
-				'connect_button'    => __("Connect Site","invoicing"),
337
-				'connecting_button'    => __("Connecting...","invoicing"),
338
-				'error_localhost'   => __( "This service will only work with a live domain, not a localhost.","invoicing" ),
339
-				'error'             => __( "Something went wrong, please refresh and try again.","invoicing" ),
333
+                'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"),
334
+                'connect_external'  => __( "Please confirm you wish to connect your site?","invoicing" ),
335
+                'connect'           => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ),
336
+                'connect_button'    => __("Connect Site","invoicing"),
337
+                'connecting_button'    => __("Connecting...","invoicing"),
338
+                'error_localhost'   => __( "This service will only work with a live domain, not a localhost.","invoicing" ),
339
+                'error'             => __( "Something went wrong, please refresh and try again.","invoicing" ),
340 340
             ),
341 341
             array( 'wpi-addons' )
342 342
         );
343 343
 
344 344
     }
345 345
 
346
-	/**
347
-	 * Redirect users to settings on activation.
348
-	 *
349
-	 * @return void
350
-	 */
351
-	public function activation_redirect() {
346
+    /**
347
+     * Redirect users to settings on activation.
348
+     *
349
+     * @return void
350
+     */
351
+    public function activation_redirect() {
352 352
 
353
-		$redirected = get_option( 'wpinv_redirected_to_settings' );
353
+        $redirected = get_option( 'wpinv_redirected_to_settings' );
354 354
 
355
-		if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
356
-			return;
357
-		}
355
+        if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
356
+            return;
357
+        }
358 358
 
359
-		// Bail if activating from network, or bulk
360
-		if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
361
-			return;
362
-		}
359
+        // Bail if activating from network, or bulk
360
+        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
361
+            return;
362
+        }
363 363
 
364
-	    update_option( 'wpinv_redirected_to_settings', 1 );
364
+        update_option( 'wpinv_redirected_to_settings', 1 );
365 365
 
366 366
         wp_safe_redirect( admin_url( 'admin.php?page=wpinv-settings&tab=general' ) );
367 367
         exit;
368 368
 
369
-	}
369
+    }
370 370
 
371 371
     /**
372 372
      * Fires an admin action after verifying that a user can fire them.
@@ -380,304 +380,304 @@  discard block
 block discarded – undo
380 380
 
381 381
     }
382 382
 
383
-	/**
383
+    /**
384 384
      * Sends a payment reminder to a customer.
385
-	 * 
386
-	 * @param array $args
385
+     * 
386
+     * @param array $args
387 387
      */
388 388
     public function send_customer_invoice( $args ) {
389
-		$sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
389
+        $sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
390 390
 
391
-		if ( $sent ) {
392
-			$this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) );
393
-		} else {
394
-			$this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) );
395
-		}
391
+        if ( $sent ) {
392
+            $this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) );
393
+        } else {
394
+            $this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) );
395
+        }
396 396
 
397
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
398
-		exit;
399
-	}
397
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
398
+        exit;
399
+    }
400 400
 
401
-	/**
401
+    /**
402 402
      * Sends a payment reminder to a customer.
403
-	 * 
404
-	 * @param array $args
403
+     * 
404
+     * @param array $args
405 405
      */
406 406
     public function send_customer_payment_reminder( $args ) {
407
-		$sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
407
+        $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
408 408
 
409
-		if ( $sent ) {
410
-			$this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
411
-		} else {
412
-			$this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
413
-		}
409
+        if ( $sent ) {
410
+            $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
411
+        } else {
412
+            $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
413
+        }
414 414
 
415
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
416
-		exit;
417
-	}
415
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
416
+        exit;
417
+    }
418 418
 
419
-	/**
419
+    /**
420 420
      * Resets tax rates.
421
-	 * 
421
+     * 
422 422
      */
423 423
     public function admin_reset_tax_rates() {
424 424
 
425
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
426
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
427
-		exit;
425
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
426
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
427
+        exit;
428 428
 
429
-	}
429
+    }
430 430
 
431
-	/**
431
+    /**
432 432
      * Resets admin pages.
433
-	 * 
433
+     * 
434 434
      */
435 435
     public function admin_create_missing_pages() {
436
-		$installer = new GetPaid_Installer();
437
-		$installer->create_pages();
438
-		$this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
439
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
440
-		exit;
441
-	}
442
-
443
-	/**
436
+        $installer = new GetPaid_Installer();
437
+        $installer->create_pages();
438
+        $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
439
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
440
+        exit;
441
+    }
442
+
443
+    /**
444 444
      * Creates an missing admin tables.
445
-	 * 
445
+     * 
446 446
      */
447 447
     public function admin_create_missing_tables() {
448
-		global $wpdb;
449
-		$installer = new GetPaid_Installer();
448
+        global $wpdb;
449
+        $installer = new GetPaid_Installer();
450 450
 
451
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
452
-			$installer->create_subscriptions_table();
451
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
452
+            $installer->create_subscriptions_table();
453 453
 
454
-			if ( $wpdb->last_error !== '' ) {
455
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
456
-			}
457
-		}
454
+            if ( $wpdb->last_error !== '' ) {
455
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
456
+            }
457
+        }
458 458
 
459
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
460
-			$installer->create_invoices_table();
459
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
460
+            $installer->create_invoices_table();
461 461
 
462
-			if ( $wpdb->last_error !== '' ) {
463
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
464
-			}
465
-		}
462
+            if ( $wpdb->last_error !== '' ) {
463
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
464
+            }
465
+        }
466 466
 
467
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
468
-			$installer->create_invoice_items_table();
467
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
468
+            $installer->create_invoice_items_table();
469 469
 
470
-			if ( $wpdb->last_error !== '' ) {
471
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
472
-			}
473
-		}
470
+            if ( $wpdb->last_error !== '' ) {
471
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
472
+            }
473
+        }
474 474
 
475
-		if ( ! $this->has_notices() ) {
476
-			$this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
477
-		}
475
+        if ( ! $this->has_notices() ) {
476
+            $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
477
+        }
478 478
 
479
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
480
-		exit;
481
-	}
479
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
480
+        exit;
481
+    }
482 482
 
483
-	/**
483
+    /**
484 484
      * Migrates old invoices to the new database tables.
485
-	 * 
485
+     * 
486 486
      */
487 487
     public function admin_migrate_old_invoices() {
488 488
 
489
-		// Migrate the invoices.
490
-		$installer = new GetPaid_Installer();
491
-		$installer->migrate_old_invoices();
489
+        // Migrate the invoices.
490
+        $installer = new GetPaid_Installer();
491
+        $installer->migrate_old_invoices();
492 492
 
493
-		// Show an admin message.
494
-		$this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
493
+        // Show an admin message.
494
+        $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
495 495
 
496
-		// Redirect the admin.
497
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
498
-		exit;
496
+        // Redirect the admin.
497
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
498
+        exit;
499 499
 
500
-	}
500
+    }
501 501
 
502
-	/**
502
+    /**
503 503
      * Recalculates discounts.
504
-	 * 
504
+     * 
505 505
      */
506 506
     public function admin_recalculate_discounts() {
507
-		global $wpdb;
507
+        global $wpdb;
508 508
 
509
-		// Fetch all invoices that have discount codes.
510
-		$table    = $wpdb->prefix . 'getpaid_invoices';
511
-		$invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
509
+        // Fetch all invoices that have discount codes.
510
+        $table    = $wpdb->prefix . 'getpaid_invoices';
511
+        $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
512 512
 
513
-		foreach ( $invoices as $invoice ) {
513
+        foreach ( $invoices as $invoice ) {
514 514
 
515
-			$invoice = new WPInv_Invoice( $invoice );
515
+            $invoice = new WPInv_Invoice( $invoice );
516 516
 
517
-			if ( ! $invoice->exists() ) {
518
-				continue;
519
-			}
517
+            if ( ! $invoice->exists() ) {
518
+                continue;
519
+            }
520 520
 
521
-			// Abort if the discount does not exist or does not apply here.
522
-			$discount = new WPInv_Discount( $invoice->get_discount_code() );
523
-			if ( ! $discount->exists() ) {
524
-				continue;
525
-			}
521
+            // Abort if the discount does not exist or does not apply here.
522
+            $discount = new WPInv_Discount( $invoice->get_discount_code() );
523
+            if ( ! $discount->exists() ) {
524
+                continue;
525
+            }
526 526
 
527
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
528
-			$invoice->recalculate_total();
527
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
528
+            $invoice->recalculate_total();
529 529
 
530
-			if ( $invoice->get_total_discount() > 0 ) {
531
-				$invoice->save();
532
-			}
530
+            if ( $invoice->get_total_discount() > 0 ) {
531
+                $invoice->save();
532
+            }
533 533
 
534
-		}
534
+        }
535 535
 
536
-		// Show an admin message.
537
-		$this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
536
+        // Show an admin message.
537
+        $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
538 538
 
539
-		// Redirect the admin.
540
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
541
-		exit;
539
+        // Redirect the admin.
540
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
541
+        exit;
542 542
 
543
-	}
543
+    }
544 544
 
545 545
     /**
546
-	 * Returns an array of admin notices.
547
-	 *
548
-	 * @since       1.0.19
546
+     * Returns an array of admin notices.
547
+     *
548
+     * @since       1.0.19
549 549
      * @return array
550
-	 */
551
-	public function get_notices() {
552
-		$notices = get_option( 'wpinv_admin_notices' );
550
+     */
551
+    public function get_notices() {
552
+        $notices = get_option( 'wpinv_admin_notices' );
553 553
         return is_array( $notices ) ? $notices : array();
554
-	}
554
+    }
555 555
 
556
-	/**
557
-	 * Checks if we have any admin notices.
558
-	 *
559
-	 * @since       2.0.4
556
+    /**
557
+     * Checks if we have any admin notices.
558
+     *
559
+     * @since       2.0.4
560 560
      * @return array
561
-	 */
562
-	public function has_notices() {
563
-		return count( $this->get_notices() ) > 0;
564
-	}
565
-
566
-	/**
567
-	 * Clears all admin notices
568
-	 *
569
-	 * @access      public
570
-	 * @since       1.0.19
571
-	 */
572
-	public function clear_notices() {
573
-		delete_option( 'wpinv_admin_notices' );
574
-	}
575
-
576
-	/**
577
-	 * Saves a new admin notice
578
-	 *
579
-	 * @access      public
580
-	 * @since       1.0.19
581
-	 */
582
-	public function save_notice( $type, $message ) {
583
-		$notices = $this->get_notices();
584
-
585
-		if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) {
586
-			$notices[ $type ] = array();
587
-		}
588
-
589
-		$notices[ $type ][] = $message;
590
-
591
-		update_option( 'wpinv_admin_notices', $notices );
592
-	}
593
-
594
-	/**
595
-	 * Displays a success notice
596
-	 *
597
-	 * @param       string $msg The message to qeue.
598
-	 * @access      public
599
-	 * @since       1.0.19
600
-	 */
601
-	public function show_success( $msg ) {
602
-		$this->save_notice( 'success', $msg );
603
-	}
604
-
605
-	/**
606
-	 * Displays a error notice
607
-	 *
608
-	 * @access      public
609
-	 * @param       string $msg The message to qeue.
610
-	 * @since       1.0.19
611
-	 */
612
-	public function show_error( $msg ) {
613
-		$this->save_notice( 'error', $msg );
614
-	}
615
-
616
-	/**
617
-	 * Displays a warning notice
618
-	 *
619
-	 * @access      public
620
-	 * @param       string $msg The message to qeue.
621
-	 * @since       1.0.19
622
-	 */
623
-	public function show_warning( $msg ) {
624
-		$this->save_notice( 'warning', $msg );
625
-	}
626
-
627
-	/**
628
-	 * Displays a info notice
629
-	 *
630
-	 * @access      public
631
-	 * @param       string $msg The message to qeue.
632
-	 * @since       1.0.19
633
-	 */
634
-	public function show_info( $msg ) {
635
-		$this->save_notice( 'info', $msg );
636
-	}
637
-
638
-	/**
639
-	 * Show notices
640
-	 *
641
-	 * @access      public
642
-	 * @since       1.0.19
643
-	 */
644
-	public function show_notices() {
561
+     */
562
+    public function has_notices() {
563
+        return count( $this->get_notices() ) > 0;
564
+    }
565
+
566
+    /**
567
+     * Clears all admin notices
568
+     *
569
+     * @access      public
570
+     * @since       1.0.19
571
+     */
572
+    public function clear_notices() {
573
+        delete_option( 'wpinv_admin_notices' );
574
+    }
575
+
576
+    /**
577
+     * Saves a new admin notice
578
+     *
579
+     * @access      public
580
+     * @since       1.0.19
581
+     */
582
+    public function save_notice( $type, $message ) {
583
+        $notices = $this->get_notices();
584
+
585
+        if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) {
586
+            $notices[ $type ] = array();
587
+        }
588
+
589
+        $notices[ $type ][] = $message;
590
+
591
+        update_option( 'wpinv_admin_notices', $notices );
592
+    }
593
+
594
+    /**
595
+     * Displays a success notice
596
+     *
597
+     * @param       string $msg The message to qeue.
598
+     * @access      public
599
+     * @since       1.0.19
600
+     */
601
+    public function show_success( $msg ) {
602
+        $this->save_notice( 'success', $msg );
603
+    }
604
+
605
+    /**
606
+     * Displays a error notice
607
+     *
608
+     * @access      public
609
+     * @param       string $msg The message to qeue.
610
+     * @since       1.0.19
611
+     */
612
+    public function show_error( $msg ) {
613
+        $this->save_notice( 'error', $msg );
614
+    }
615
+
616
+    /**
617
+     * Displays a warning notice
618
+     *
619
+     * @access      public
620
+     * @param       string $msg The message to qeue.
621
+     * @since       1.0.19
622
+     */
623
+    public function show_warning( $msg ) {
624
+        $this->save_notice( 'warning', $msg );
625
+    }
626
+
627
+    /**
628
+     * Displays a info notice
629
+     *
630
+     * @access      public
631
+     * @param       string $msg The message to qeue.
632
+     * @since       1.0.19
633
+     */
634
+    public function show_info( $msg ) {
635
+        $this->save_notice( 'info', $msg );
636
+    }
637
+
638
+    /**
639
+     * Show notices
640
+     *
641
+     * @access      public
642
+     * @since       1.0.19
643
+     */
644
+    public function show_notices() {
645 645
 
646 646
         $notices = $this->get_notices();
647 647
         $this->clear_notices();
648 648
 
649
-		foreach ( $notices as $type => $messages ) {
649
+        foreach ( $notices as $type => $messages ) {
650 650
 
651
-			if ( ! is_array( $messages ) ) {
652
-				continue;
653
-			}
651
+            if ( ! is_array( $messages ) ) {
652
+                continue;
653
+            }
654 654
 
655 655
             $type  = sanitize_key( $type );
656
-			foreach ( $messages as $message ) {
656
+            foreach ( $messages as $message ) {
657 657
                 $message = wp_kses_post( $message );
658
-				echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>";
658
+                echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>";
659
+            }
660
+
661
+        }
662
+
663
+        foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
664
+
665
+            if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
666
+                $url     = esc_url(
667
+                    wp_nonce_url(
668
+                        add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
669
+                        'getpaid-nonce',
670
+                        'getpaid-nonce'
671
+                    )
672
+                );
673
+                $message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
674
+                $message2 = __( 'Generate Pages', 'invoicing' );
675
+                echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>";
676
+                break;
659 677
             }
660 678
 
661 679
         }
662 680
 
663
-		foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
664
-
665
-			if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
666
-				$url     = esc_url(
667
-					wp_nonce_url(
668
-						add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
669
-						'getpaid-nonce',
670
-						'getpaid-nonce'
671
-					)
672
-				);
673
-				$message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
674
-				$message2 = __( 'Generate Pages', 'invoicing' );
675
-				echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>";
676
-				break;
677
-			}
678
-
679
-		}
680
-
681
-	}
681
+    }
682 682
 
683 683
 }
Please login to merge, or discard this patch.
includes/class-getpaid-invoice-notification-emails.php 1 patch
Indentation   +395 added lines, -395 removed lines patch added patch discarded remove patch
@@ -12,449 +12,449 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Notification_Emails {
14 14
 
15
-	/**
16
-	 * The array of invoice email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $invoice_actions;
21
-
22
-	/**
23
-	 * Class constructor
24
-	 *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->invoice_actions = apply_filters(
29
-			'getpaid_notification_email_invoice_triggers',
30
-			array(
31
-				'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
-				'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
-				'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
-				'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
-				'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
-				'getpaid_invoice_status_publish'        => 'completed_invoice',
37
-				'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
-				'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
-				'getpaid_new_customer_note'             => 'user_note',
40
-				'getpaid_daily_maintenance'             => 'overdue',
41
-			)
42
-		);
43
-
44
-		$this->init_hooks();
45
-
46
-	}
47
-
48
-	/**
49
-	 * Registers email hooks.
50
-	 */
51
-	public function init_hooks() {
52
-
53
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
-		add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
-
56
-		foreach ( $this->invoice_actions as $hook => $email_type ) {
57
-			$this->init_email_type_hook( $hook, $email_type );
58
-		}
59
-	}
60
-
61
-	/**
62
-	 * Registers an email hook for an invoice action.
63
-	 * 
64
-	 * @param string $hook
65
-	 * @param string|array $email_type
66
-	 */
67
-	public function init_email_type_hook( $hook, $email_type ) {
68
-
69
-		$email_type = wpinv_parse_list( $email_type );
70
-
71
-		foreach ( $email_type as $type ) {
72
-
73
-			$email = new GetPaid_Notification_Email( $type );
74
-
75
-			// Abort if it is not active.
76
-			if ( ! $email->is_active() ) {
77
-				continue;
78
-			}
79
-
80
-			if ( method_exists( $this, $type ) ) {
81
-				add_action( $hook, array( $this, $type ), 100, 2 );
82
-				continue;
83
-			}
84
-
85
-			do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
-		}
87
-
88
-	}
89
-
90
-	/**
91
-	 * Filters invoice merge tags.
92
-	 *
93
-	 * @param array $merge_tags
94
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
-	 */
96
-	public function invoice_merge_tags( $merge_tags, $object ) {
97
-
98
-		if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
-			return array_merge(
100
-				$merge_tags,
101
-				$this->get_invoice_merge_tags( $object )
102
-			);
103
-		}
104
-
105
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
-			return array_merge(
107
-				$merge_tags,
108
-				$this->get_invoice_merge_tags( $object->get_parent_payment() )
109
-			);
110
-		}
111
-
112
-		return $merge_tags;
113
-
114
-	}
115
-
116
-	/**
117
-	 * Generates invoice merge tags.
118
-	 *
119
-	 * @param WPInv_Invoice $invoice
120
-	 * @return array
121
-	 */
122
-	public function get_invoice_merge_tags( $invoice ) {
123
-
124
-		// Abort if it does not exist.
125
-		if ( ! $invoice->get_id() ) {
126
-			return array();
127
-		}
128
-
129
-		$merge_tags = array(
130
-			'{name}'                => sanitize_text_field( $invoice->get_user_full_name() ),
131
-			'{full_name}'           => sanitize_text_field( $invoice->get_user_full_name() ),
132
-			'{first_name}'          => sanitize_text_field( $invoice->get_first_name() ),
133
-			'{last_name}'           => sanitize_text_field( $invoice->get_last_name() ),
134
-			'{email}'               => sanitize_email( $invoice->get_email() ),
135
-			'{invoice_number}'      => sanitize_text_field( $invoice->get_number() ),
136
-			'{invoice_currency}'    => sanitize_text_field( $invoice->get_currency() ),
137
-			'{invoice_total}'       => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
-			'{invoice_link}'        => esc_url( $invoice->get_view_url() ),
139
-			'{invoice_pay_link}'    => esc_url( $invoice->get_checkout_payment_url() ),
140
-			'{invoice_receipt_link}'=> esc_url( $invoice->get_receipt_url() ),
141
-			'{invoice_date}'        => getpaid_format_date_value( $invoice->get_date_created() ),
142
-			'{invoice_due_date}'    => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
-			'{invoice_quote}'       => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
-			'{invoice_label}'       => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
-			'{invoice_description}' => wp_kses_post( $invoice->get_description() ),
146
-			'{subscription_name}'   => wp_kses_post( $invoice->get_subscription_name() ),
147
-			'{is_was}'              => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
-		);
149
-
150
-		return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
151
-	}
152
-
153
-	/**
154
-	 * Helper function to send an email.
155
-	 *
156
-	 * @param WPInv_Invoice $invoice
157
-	 * @param GetPaid_Notification_Email $email
158
-	 * @param string $type
159
-	 * @param string|array $recipients
160
-	 * @param array $extra_args Extra template args.
161
-	 */
162
-	public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
163
-
164
-		do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
165
-
166
-		$mailer     = new GetPaid_Notification_Email_Sender();
167
-		$merge_tags = $email->get_merge_tags();
168
-
169
-		$result = $mailer->send(
170
-			apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
171
-			$email->add_merge_tags( $email->get_subject(), $merge_tags ),
172
-			$email->get_content( $merge_tags, $extra_args ),
173
-			$email->get_attachments()
174
-		);
175
-
176
-		// Maybe send a copy to the admin.
177
-		if ( $email->include_admin_bcc() ) {
178
-			$mailer->send(
179
-				wpinv_get_admin_email(),
180
-				$email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
181
-				$email->get_content( $merge_tags ),
182
-				$email->get_attachments()
183
-			);
184
-		}
185
-
186
-		if ( ! $result ) {
187
-			$invoice->add_note( sprintf( __( 'Failed sending %s notification email.', 'invoicing' ), sanitize_key( $type ) ), false, false, true );
188
-		}
189
-
190
-		do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
191
-
192
-		return $result;
193
-	}
194
-
195
-	/**
196
-	 * Also send emails to any cc users.
197
-	 *
198
-	 * @param array $recipients
199
-	 * @param GetPaid_Notification_Email $email
200
-	 */
201
-	public function filter_email_recipients( $recipients, $email ) {
202
-
203
-		if ( ! $email->is_admin_email() ) {
204
-			$cc = $email->object->get_email_cc();
205
-
206
-			if ( ! empty( $cc ) ) {
207
-				$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
208
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
209
-			}
210
-
211
-		}
212
-
213
-		return $recipients;
214
-
215
-	}
216
-
217
-	/**
218
-	 * Sends a new invoice notification.
219
-	 *
220
-	 * @param WPInv_Invoice $invoice
221
-	 */
222
-	public function new_invoice( $invoice ) {
223
-
224
-		// Only send this email for invoices created via the admin page.
225
-		if ( ! $invoice->is_type( 'invoice' ) || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
226
-			return;
227
-		}
228
-
229
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
230
-		$recipient = wpinv_get_admin_email();
231
-
232
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
233
-
234
-	}
235
-
236
-	/**
237
-	 * Sends a cancelled invoice notification.
238
-	 *
239
-	 * @param WPInv_Invoice $invoice
240
-	 */
241
-	public function cancelled_invoice( $invoice ) {
242
-
243
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
244
-		$recipient = wpinv_get_admin_email();
15
+    /**
16
+     * The array of invoice email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $invoice_actions;
21
+
22
+    /**
23
+     * Class constructor
24
+     *
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->invoice_actions = apply_filters(
29
+            'getpaid_notification_email_invoice_triggers',
30
+            array(
31
+                'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
+                'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
+                'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
+                'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
+                'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
+                'getpaid_invoice_status_publish'        => 'completed_invoice',
37
+                'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
+                'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
+                'getpaid_new_customer_note'             => 'user_note',
40
+                'getpaid_daily_maintenance'             => 'overdue',
41
+            )
42
+        );
43
+
44
+        $this->init_hooks();
45
+
46
+    }
47
+
48
+    /**
49
+     * Registers email hooks.
50
+     */
51
+    public function init_hooks() {
52
+
53
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
54
+        add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
55
+
56
+        foreach ( $this->invoice_actions as $hook => $email_type ) {
57
+            $this->init_email_type_hook( $hook, $email_type );
58
+        }
59
+    }
60
+
61
+    /**
62
+     * Registers an email hook for an invoice action.
63
+     * 
64
+     * @param string $hook
65
+     * @param string|array $email_type
66
+     */
67
+    public function init_email_type_hook( $hook, $email_type ) {
68
+
69
+        $email_type = wpinv_parse_list( $email_type );
70
+
71
+        foreach ( $email_type as $type ) {
72
+
73
+            $email = new GetPaid_Notification_Email( $type );
74
+
75
+            // Abort if it is not active.
76
+            if ( ! $email->is_active() ) {
77
+                continue;
78
+            }
79
+
80
+            if ( method_exists( $this, $type ) ) {
81
+                add_action( $hook, array( $this, $type ), 100, 2 );
82
+                continue;
83
+            }
84
+
85
+            do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
86
+        }
87
+
88
+    }
89
+
90
+    /**
91
+     * Filters invoice merge tags.
92
+     *
93
+     * @param array $merge_tags
94
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
95
+     */
96
+    public function invoice_merge_tags( $merge_tags, $object ) {
97
+
98
+        if ( is_a( $object, 'WPInv_Invoice' ) ) {
99
+            return array_merge(
100
+                $merge_tags,
101
+                $this->get_invoice_merge_tags( $object )
102
+            );
103
+        }
104
+
105
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
106
+            return array_merge(
107
+                $merge_tags,
108
+                $this->get_invoice_merge_tags( $object->get_parent_payment() )
109
+            );
110
+        }
111
+
112
+        return $merge_tags;
113
+
114
+    }
115
+
116
+    /**
117
+     * Generates invoice merge tags.
118
+     *
119
+     * @param WPInv_Invoice $invoice
120
+     * @return array
121
+     */
122
+    public function get_invoice_merge_tags( $invoice ) {
123
+
124
+        // Abort if it does not exist.
125
+        if ( ! $invoice->get_id() ) {
126
+            return array();
127
+        }
128
+
129
+        $merge_tags = array(
130
+            '{name}'                => sanitize_text_field( $invoice->get_user_full_name() ),
131
+            '{full_name}'           => sanitize_text_field( $invoice->get_user_full_name() ),
132
+            '{first_name}'          => sanitize_text_field( $invoice->get_first_name() ),
133
+            '{last_name}'           => sanitize_text_field( $invoice->get_last_name() ),
134
+            '{email}'               => sanitize_email( $invoice->get_email() ),
135
+            '{invoice_number}'      => sanitize_text_field( $invoice->get_number() ),
136
+            '{invoice_currency}'    => sanitize_text_field( $invoice->get_currency() ),
137
+            '{invoice_total}'       => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
138
+            '{invoice_link}'        => esc_url( $invoice->get_view_url() ),
139
+            '{invoice_pay_link}'    => esc_url( $invoice->get_checkout_payment_url() ),
140
+            '{invoice_receipt_link}'=> esc_url( $invoice->get_receipt_url() ),
141
+            '{invoice_date}'        => getpaid_format_date_value( $invoice->get_date_created() ),
142
+            '{invoice_due_date}'    => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
143
+            '{invoice_quote}'       => sanitize_text_field( strtolower( $invoice->get_label() ) ),
144
+            '{invoice_label}'       => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
145
+            '{invoice_description}' => wp_kses_post( $invoice->get_description() ),
146
+            '{subscription_name}'   => wp_kses_post( $invoice->get_subscription_name() ),
147
+            '{is_was}'              => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
148
+        );
149
+
150
+        return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
151
+    }
152
+
153
+    /**
154
+     * Helper function to send an email.
155
+     *
156
+     * @param WPInv_Invoice $invoice
157
+     * @param GetPaid_Notification_Email $email
158
+     * @param string $type
159
+     * @param string|array $recipients
160
+     * @param array $extra_args Extra template args.
161
+     */
162
+    public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
163
+
164
+        do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
165
+
166
+        $mailer     = new GetPaid_Notification_Email_Sender();
167
+        $merge_tags = $email->get_merge_tags();
168
+
169
+        $result = $mailer->send(
170
+            apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
171
+            $email->add_merge_tags( $email->get_subject(), $merge_tags ),
172
+            $email->get_content( $merge_tags, $extra_args ),
173
+            $email->get_attachments()
174
+        );
175
+
176
+        // Maybe send a copy to the admin.
177
+        if ( $email->include_admin_bcc() ) {
178
+            $mailer->send(
179
+                wpinv_get_admin_email(),
180
+                $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
181
+                $email->get_content( $merge_tags ),
182
+                $email->get_attachments()
183
+            );
184
+        }
185
+
186
+        if ( ! $result ) {
187
+            $invoice->add_note( sprintf( __( 'Failed sending %s notification email.', 'invoicing' ), sanitize_key( $type ) ), false, false, true );
188
+        }
189
+
190
+        do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
191
+
192
+        return $result;
193
+    }
194
+
195
+    /**
196
+     * Also send emails to any cc users.
197
+     *
198
+     * @param array $recipients
199
+     * @param GetPaid_Notification_Email $email
200
+     */
201
+    public function filter_email_recipients( $recipients, $email ) {
202
+
203
+        if ( ! $email->is_admin_email() ) {
204
+            $cc = $email->object->get_email_cc();
205
+
206
+            if ( ! empty( $cc ) ) {
207
+                $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
208
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
209
+            }
210
+
211
+        }
212
+
213
+        return $recipients;
214
+
215
+    }
216
+
217
+    /**
218
+     * Sends a new invoice notification.
219
+     *
220
+     * @param WPInv_Invoice $invoice
221
+     */
222
+    public function new_invoice( $invoice ) {
223
+
224
+        // Only send this email for invoices created via the admin page.
225
+        if ( ! $invoice->is_type( 'invoice' ) || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
226
+            return;
227
+        }
228
+
229
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
230
+        $recipient = wpinv_get_admin_email();
231
+
232
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
233
+
234
+    }
235
+
236
+    /**
237
+     * Sends a cancelled invoice notification.
238
+     *
239
+     * @param WPInv_Invoice $invoice
240
+     */
241
+    public function cancelled_invoice( $invoice ) {
242
+
243
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
244
+        $recipient = wpinv_get_admin_email();
245 245
 
246
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
246
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
247 247
 
248
-	}
248
+    }
249 249
 
250
-	/**
251
-	 * Sends a failed invoice notification.
252
-	 *
253
-	 * @param WPInv_Invoice $invoice
254
-	 */
255
-	public function failed_invoice( $invoice ) {
250
+    /**
251
+     * Sends a failed invoice notification.
252
+     *
253
+     * @param WPInv_Invoice $invoice
254
+     */
255
+    public function failed_invoice( $invoice ) {
256 256
 
257
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
258
-		$recipient = wpinv_get_admin_email();
257
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
258
+        $recipient = wpinv_get_admin_email();
259 259
 
260
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
260
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
261 261
 
262
-	}
262
+    }
263 263
 
264
-	/**
265
-	 * Sends a notification whenever an invoice is put on hold.
266
-	 *
267
-	 * @param WPInv_Invoice $invoice
268
-	 */
269
-	public function onhold_invoice( $invoice ) {
264
+    /**
265
+     * Sends a notification whenever an invoice is put on hold.
266
+     *
267
+     * @param WPInv_Invoice $invoice
268
+     */
269
+    public function onhold_invoice( $invoice ) {
270 270
 
271
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
272
-		$recipient = $invoice->get_email();
271
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
272
+        $recipient = $invoice->get_email();
273 273
 
274
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
274
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
275 275
 
276
-	}
276
+    }
277 277
 
278
-	/**
279
-	 * Sends a notification whenever an invoice is marked as processing payment.
280
-	 *
281
-	 * @param WPInv_Invoice $invoice
282
-	 */
283
-	public function processing_invoice( $invoice ) {
278
+    /**
279
+     * Sends a notification whenever an invoice is marked as processing payment.
280
+     *
281
+     * @param WPInv_Invoice $invoice
282
+     */
283
+    public function processing_invoice( $invoice ) {
284 284
 
285
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
286
-		$recipient = $invoice->get_email();
285
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
286
+        $recipient = $invoice->get_email();
287 287
 
288
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
288
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
289 289
 
290
-	}
290
+    }
291 291
 
292
-	/**
293
-	 * Sends a notification whenever an invoice is paid.
294
-	 *
295
-	 * @param WPInv_Invoice $invoice
296
-	 */
297
-	public function completed_invoice( $invoice ) {
292
+    /**
293
+     * Sends a notification whenever an invoice is paid.
294
+     *
295
+     * @param WPInv_Invoice $invoice
296
+     */
297
+    public function completed_invoice( $invoice ) {
298 298
 
299
-		// (Maybe) abort if it is a renewal invoice.
300
-		if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
301
-			return;
302
-		}
299
+        // (Maybe) abort if it is a renewal invoice.
300
+        if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
301
+            return;
302
+        }
303 303
 
304
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
305
-		$recipient = $invoice->get_email();
304
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
305
+        $recipient = $invoice->get_email();
306 306
 
307
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
307
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
308 308
 
309
-	}
309
+    }
310 310
 
311
-	/**
312
-	 * Sends a notification whenever an invoice is refunded.
313
-	 *
314
-	 * @param WPInv_Invoice $invoice
315
-	 */
316
-	public function refunded_invoice( $invoice ) {
311
+    /**
312
+     * Sends a notification whenever an invoice is refunded.
313
+     *
314
+     * @param WPInv_Invoice $invoice
315
+     */
316
+    public function refunded_invoice( $invoice ) {
317 317
 
318
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
319
-		$recipient = $invoice->get_email();
318
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
319
+        $recipient = $invoice->get_email();
320 320
 
321
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
321
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
322 322
 
323
-	}
323
+    }
324 324
 
325
-	/**
326
-	 * Notifies a user about new invoices
327
-	 *
328
-	 * @param WPInv_Invoice $invoice
329
-	 * @param bool $force
330
-	 */
331
-	public function user_invoice( $invoice, $force = false ) {
325
+    /**
326
+     * Notifies a user about new invoices
327
+     *
328
+     * @param WPInv_Invoice $invoice
329
+     * @param bool $force
330
+     */
331
+    public function user_invoice( $invoice, $force = false ) {
332 332
 
333
-		if ( ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
334
-			return;
335
-		}
333
+        if ( ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
334
+            return;
335
+        }
336 336
 
337
-		// Only send this email for invoices created via the admin page.
338
-		if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
339
-			return;
340
-		}
337
+        // Only send this email for invoices created via the admin page.
338
+        if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
339
+            return;
340
+        }
341 341
 
342
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
343
-		$recipient = $invoice->get_email();
342
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
343
+        $recipient = $invoice->get_email();
344 344
 
345
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
345
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
346 346
 
347
-	}
347
+    }
348 348
 
349
-	/**
350
-	 * Checks if an invoice is a payment form invoice.
351
-	 *
352
-	 * @param int $invoice
353
-	 * @return bool
354
-	 */
355
-	public function is_payment_form_invoice( $invoice ) {
356
-		return empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' == get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' == get_post_meta( $invoice, 'wpinv_created_via', true ) );
357
-	}
349
+    /**
350
+     * Checks if an invoice is a payment form invoice.
351
+     *
352
+     * @param int $invoice
353
+     * @return bool
354
+     */
355
+    public function is_payment_form_invoice( $invoice ) {
356
+        return empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' == get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' == get_post_meta( $invoice, 'wpinv_created_via', true ) );
357
+    }
358 358
 
359
-	/**
360
-	 * Notifies admin about new invoice notes
361
-	 *
362
-	 * @param WPInv_Invoice $invoice
363
-	 * @param string $note
364
-	 */
365
-	public function user_note( $invoice, $note ) {
366
-
367
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
368
-		$recipient = $invoice->get_email();
359
+    /**
360
+     * Notifies admin about new invoice notes
361
+     *
362
+     * @param WPInv_Invoice $invoice
363
+     * @param string $note
364
+     */
365
+    public function user_note( $invoice, $note ) {
366
+
367
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
368
+        $recipient = $invoice->get_email();
369 369
 
370
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
371
-
372
-	}
370
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
371
+
372
+    }
373 373
 
374
-	/**
375
-	 * (Force) Sends overdue notices.
376
-	 *
377
-	 * @param WPInv_Invoice $invoice
378
-	 */
379
-	public function force_send_overdue_notice( $invoice ) {
380
-		$email = new GetPaid_Notification_Email( 'overdue', $invoice );
381
-		return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
382
-	}
383
-
384
-	/**
385
-	 * Sends overdue notices.
386
-	 *
387
-	 * @TODO: Create an invoices query class.
388
-	 */
389
-	public function overdue() {
390
-		global $wpdb;
391
-
392
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
393
-
394
-		// Fetch reminder days.
395
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
396
-
397
-		// Abort if non is set.
398
-		if ( empty( $reminder_days ) ) {
399
-			return;
400
-		}
401
-
402
-		// Retrieve date query.
403
-		$date_query = $this->get_date_query( $reminder_days );
404
-
405
-		// Invoices table.
406
-		$table = $wpdb->prefix . 'getpaid_invoices';
407
-
408
-		// Fetch invoices.
409
-		$invoices  = $wpdb->get_col(
410
-			"SELECT posts.ID FROM $wpdb->posts as posts
374
+    /**
375
+     * (Force) Sends overdue notices.
376
+     *
377
+     * @param WPInv_Invoice $invoice
378
+     */
379
+    public function force_send_overdue_notice( $invoice ) {
380
+        $email = new GetPaid_Notification_Email( 'overdue', $invoice );
381
+        return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
382
+    }
383
+
384
+    /**
385
+     * Sends overdue notices.
386
+     *
387
+     * @TODO: Create an invoices query class.
388
+     */
389
+    public function overdue() {
390
+        global $wpdb;
391
+
392
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
393
+
394
+        // Fetch reminder days.
395
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
396
+
397
+        // Abort if non is set.
398
+        if ( empty( $reminder_days ) ) {
399
+            return;
400
+        }
401
+
402
+        // Retrieve date query.
403
+        $date_query = $this->get_date_query( $reminder_days );
404
+
405
+        // Invoices table.
406
+        $table = $wpdb->prefix . 'getpaid_invoices';
407
+
408
+        // Fetch invoices.
409
+        $invoices  = $wpdb->get_col(
410
+            "SELECT posts.ID FROM $wpdb->posts as posts
411 411
 			LEFT JOIN $table as invoices ON invoices.post_id = posts.ID
412 412
 			WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query");
413 413
 
414
-		foreach ( $invoices as $invoice ) {
414
+        foreach ( $invoices as $invoice ) {
415 415
 
416
-			// Only send this email for invoices created via the admin page.
417
-			if ( ! $this->is_payment_form_invoice( $invoice ) ) {
418
-				$invoice       = new WPInv_Invoice( $invoice );
419
-				$email->object = $invoice;
416
+            // Only send this email for invoices created via the admin page.
417
+            if ( ! $this->is_payment_form_invoice( $invoice ) ) {
418
+                $invoice       = new WPInv_Invoice( $invoice );
419
+                $email->object = $invoice;
420 420
 
421
-				if ( $invoice->needs_payment() ) {
422
-					$this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
423
-				}
421
+                if ( $invoice->needs_payment() ) {
422
+                    $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
423
+                }
424 424
 
425
-			}
425
+            }
426 426
 
427
-		}
427
+        }
428 428
 
429
-	}
429
+    }
430 430
 
431
-	/**
432
-	 * Calculates the date query for an invoices query
433
-	 *
434
-	 * @param array $reminder_days
435
-	 * @return string
436
-	 */
437
-	public function get_date_query( $reminder_days ) {
431
+    /**
432
+     * Calculates the date query for an invoices query
433
+     *
434
+     * @param array $reminder_days
435
+     * @return string
436
+     */
437
+    public function get_date_query( $reminder_days ) {
438 438
 
439
-		$date_query = array(
440
-			'relation'  => 'OR'
441
-		);
439
+        $date_query = array(
440
+            'relation'  => 'OR'
441
+        );
442 442
 
443
-		foreach ( $reminder_days as $days ) {
444
-			$date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
443
+        foreach ( $reminder_days as $days ) {
444
+            $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
445 445
 
446
-			$date_query[] = array(
447
-				'year'  => $date['year'],
448
-				'month' => $date['month'],
449
-				'day'   => $date['day'],
450
-			);
446
+            $date_query[] = array(
447
+                'year'  => $date['year'],
448
+                'month' => $date['month'],
449
+                'day'   => $date['day'],
450
+            );
451 451
 
452
-		}
452
+        }
453 453
 
454
-		$date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
454
+        $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
455 455
 
456
-		return $date_query->get_sql();
456
+        return $date_query->get_sql();
457 457
 
458
-	}
458
+    }
459 459
 
460 460
 }
Please login to merge, or discard this patch.
invoicing.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -19,16 +19,16 @@  discard block
 block discarded – undo
19 19
 
20 20
 // Define constants.
21 21
 if ( ! defined( 'WPINV_PLUGIN_FILE' ) ) {
22
-	define( 'WPINV_PLUGIN_FILE', __FILE__ );
22
+    define( 'WPINV_PLUGIN_FILE', __FILE__ );
23 23
 }
24 24
 
25 25
 if ( ! defined( 'WPINV_VERSION' ) ) {
26
-	define( 'WPINV_VERSION', '2.1.8' );
26
+    define( 'WPINV_VERSION', '2.1.8' );
27 27
 }
28 28
 
29 29
 // Include the main Invoicing class.
30 30
 if ( ! class_exists( 'WPInv_Plugin', false ) ) {
31
-	require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
31
+    require_once plugin_dir_path( WPINV_PLUGIN_FILE ) . 'includes/class-wpinv.php';
32 32
 }
33 33
 
34 34
 /**
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
         $GLOBALS['invoicing'] = new WPInv_Plugin();
44 44
     }
45 45
 
46
-	return $GLOBALS['invoicing'];
46
+    return $GLOBALS['invoicing'];
47 47
 }
48 48
 
49 49
 /**
Please login to merge, or discard this patch.