Passed
Push — master ( 7ef8cd...457b0a )
by Brian
05:08
created
includes/gateways/class-getpaid-manual-gateway.php 1 patch
Indentation   +37 added lines, -37 removed lines patch added patch discarded remove patch
@@ -13,30 +13,30 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Manual_Gateway extends GetPaid_Payment_Gateway {
14 14
 
15 15
     /**
16
-	 * Payment method id.
17
-	 *
18
-	 * @var string
19
-	 */
16
+     * Payment method id.
17
+     *
18
+     * @var string
19
+     */
20 20
     public $id = 'manual';
21 21
 
22 22
     /**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
27 27
     protected $supports = array( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
28 28
 
29 29
     /**
30
-	 * Payment method order.
31
-	 *
32
-	 * @var int
33
-	 */
34
-	public $order = 11;
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34
+    public $order = 11;
35 35
 
36 36
     /**
37
-	 * Class constructor.
38
-	 */
39
-	public function __construct() {
37
+     * Class constructor.
38
+     */
39
+    public function __construct() {
40 40
         parent::__construct();
41 41
 
42 42
         $this->title        = __( 'Test Gateway', 'invoicing' );
@@ -46,15 +46,15 @@  discard block
 block discarded – undo
46 46
     }
47 47
 
48 48
     /**
49
-	 * Process Payment.
50
-	 *
51
-	 *
52
-	 * @param WPInv_Invoice $invoice Invoice.
53
-	 * @param array $submission_data Posted checkout fields.
54
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
55
-	 * @return array
56
-	 */
57
-	public function process_payment( $invoice, $submission_data, $submission ) {
49
+     * Process Payment.
50
+     *
51
+     *
52
+     * @param WPInv_Invoice $invoice Invoice.
53
+     * @param array $submission_data Posted checkout fields.
54
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
55
+     * @return array
56
+     */
57
+    public function process_payment( $invoice, $submission_data, $submission ) {
58 58
 
59 59
         // Mark it as paid.
60 60
         $invoice->mark_paid();
@@ -84,12 +84,12 @@  discard block
 block discarded – undo
84 84
     }
85 85
 
86 86
     /**
87
-	 * (Maybe) renews a manual subscription profile.
88
-	 *
89
-	 *
87
+     * (Maybe) renews a manual subscription profile.
88
+     *
89
+     *
90 90
      * @param WPInv_Subscription $subscription
91
-	 */
92
-	public function maybe_renew_subscription( $subscription ) {
91
+     */
92
+    public function maybe_renew_subscription( $subscription ) {
93 93
 
94 94
         // Ensure its our subscription && it's active.
95 95
         if ( $this->id === $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
@@ -109,13 +109,13 @@  discard block
 block discarded – undo
109 109
     }
110 110
 
111 111
     /**
112
-	 * Processes invoice addons.
113
-	 *
114
-	 * @param WPInv_Invoice $invoice
115
-	 * @param GetPaid_Form_Item[] $items
116
-	 * @return WPInv_Invoice
117
-	 */
118
-	public function process_addons( $invoice, $items ) {
112
+     * Processes invoice addons.
113
+     *
114
+     * @param WPInv_Invoice $invoice
115
+     * @param GetPaid_Form_Item[] $items
116
+     * @return WPInv_Invoice
117
+     */
118
+    public function process_addons( $invoice, $items ) {
119 119
 
120 120
         foreach ( $items as $item ) {
121 121
             $invoice->add_item( $item );
Please login to merge, or discard this patch.
includes/wpinv-subscription.php 1 patch
Indentation   +1023 added lines, -1023 removed lines patch added patch discarded remove patch
@@ -15,125 +15,125 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class WPInv_Subscription extends GetPaid_Data {
17 17
 
18
-	/**
19
-	 * Which data store to load.
20
-	 *
21
-	 * @var string
22
-	 */
23
-	protected $data_store_name = 'subscription';
24
-
25
-	/**
26
-	 * This is the name of this object type.
27
-	 *
28
-	 * @var string
29
-	 */
30
-	protected $object_type = 'subscription';
31
-
32
-	/**
33
-	 * Item Data array. This is the core item data exposed in APIs.
34
-	 *
35
-	 * @since 1.0.19
36
-	 * @var array
37
-	 */
38
-	protected $data = array(
39
-		'customer_id'       => 0,
40
-		'frequency'         => 1,
41
-		'period'            => 'D',
42
-		'initial_amount'    => null,
43
-		'recurring_amount'  => null,
44
-		'bill_times'        => 0,
45
-		'transaction_id'    => '',
46
-		'parent_payment_id' => null,
47
-		'product_id'        => 0,
48
-		'created'           => '0000-00-00 00:00:00',
49
-		'expiration'        => '0000-00-00 00:00:00',
50
-		'trial_period'      => '',
51
-		'status'            => 'pending',
52
-		'profile_id'        => '',
53
-		'gateway'           => '',
54
-		'customer'          => '',
55
-	);
56
-
57
-	/**
58
-	 * Stores the status transition information.
59
-	 *
60
-	 * @since 1.0.19
61
-	 * @var bool
62
-	 */
63
-	protected $status_transition = false;
64
-
65
-	/**
66
-	 * Get the subscription if ID is passed, otherwise the subscription is new and empty.
67
-	 *
68
-	 * @param  int|string|object|WPInv_Subscription $subscription Subscription id, profile_id, or object to read.
69
-	 * @param  bool $deprecated
70
-	 */
71
-	function __construct( $subscription = 0, $deprecated = false ) {
72
-
73
-		parent::__construct( $subscription );
74
-
75
-		if ( ! $deprecated && ! empty( $subscription ) && is_numeric( $subscription ) ) {
76
-			$this->set_id( $subscription );
77
-		} elseif ( $subscription instanceof self ) {
78
-			$this->set_id( $subscription->get_id() );
79
-		} elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_id' ) ) {
80
-			$this->set_id( $subscription_id );
81
-		} elseif ( ! empty( $subscription->id ) ) {
82
-			$this->set_id( $subscription->id );
83
-		} else {
84
-			$this->set_object_read( true );
85
-		}
86
-
87
-		// Load the datastore.
88
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
89
-
90
-		if ( $this->get_id() > 0 ) {
91
-			$this->data_store->read( $this );
92
-		}
93
-
94
-	}
95
-
96
-	/**
97
-	 * Given an invoice id, profile id, transaction id, it returns the subscription's id.
98
-	 *
99
-	 *
100
-	 * @static
101
-	 * @param string $value
102
-	 * @param string $field Either invoice_id, transaction_id or profile_id.
103
-	 * @since 1.0.19
104
-	 * @return int
105
-	 */
106
-	public static function get_subscription_id_by_field( $value, $field = 'profile_id' ) {
18
+    /**
19
+     * Which data store to load.
20
+     *
21
+     * @var string
22
+     */
23
+    protected $data_store_name = 'subscription';
24
+
25
+    /**
26
+     * This is the name of this object type.
27
+     *
28
+     * @var string
29
+     */
30
+    protected $object_type = 'subscription';
31
+
32
+    /**
33
+     * Item Data array. This is the core item data exposed in APIs.
34
+     *
35
+     * @since 1.0.19
36
+     * @var array
37
+     */
38
+    protected $data = array(
39
+        'customer_id'       => 0,
40
+        'frequency'         => 1,
41
+        'period'            => 'D',
42
+        'initial_amount'    => null,
43
+        'recurring_amount'  => null,
44
+        'bill_times'        => 0,
45
+        'transaction_id'    => '',
46
+        'parent_payment_id' => null,
47
+        'product_id'        => 0,
48
+        'created'           => '0000-00-00 00:00:00',
49
+        'expiration'        => '0000-00-00 00:00:00',
50
+        'trial_period'      => '',
51
+        'status'            => 'pending',
52
+        'profile_id'        => '',
53
+        'gateway'           => '',
54
+        'customer'          => '',
55
+    );
56
+
57
+    /**
58
+     * Stores the status transition information.
59
+     *
60
+     * @since 1.0.19
61
+     * @var bool
62
+     */
63
+    protected $status_transition = false;
64
+
65
+    /**
66
+     * Get the subscription if ID is passed, otherwise the subscription is new and empty.
67
+     *
68
+     * @param  int|string|object|WPInv_Subscription $subscription Subscription id, profile_id, or object to read.
69
+     * @param  bool $deprecated
70
+     */
71
+    function __construct( $subscription = 0, $deprecated = false ) {
72
+
73
+        parent::__construct( $subscription );
74
+
75
+        if ( ! $deprecated && ! empty( $subscription ) && is_numeric( $subscription ) ) {
76
+            $this->set_id( $subscription );
77
+        } elseif ( $subscription instanceof self ) {
78
+            $this->set_id( $subscription->get_id() );
79
+        } elseif ( $deprecated && $subscription_id = self::get_subscription_id_by_field( $subscription, 'profile_id' ) ) {
80
+            $this->set_id( $subscription_id );
81
+        } elseif ( ! empty( $subscription->id ) ) {
82
+            $this->set_id( $subscription->id );
83
+        } else {
84
+            $this->set_object_read( true );
85
+        }
86
+
87
+        // Load the datastore.
88
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
89
+
90
+        if ( $this->get_id() > 0 ) {
91
+            $this->data_store->read( $this );
92
+        }
93
+
94
+    }
95
+
96
+    /**
97
+     * Given an invoice id, profile id, transaction id, it returns the subscription's id.
98
+     *
99
+     *
100
+     * @static
101
+     * @param string $value
102
+     * @param string $field Either invoice_id, transaction_id or profile_id.
103
+     * @since 1.0.19
104
+     * @return int
105
+     */
106
+    public static function get_subscription_id_by_field( $value, $field = 'profile_id' ) {
107 107
         global $wpdb;
108 108
 
109
-		// Trim the value.
110
-		$value = trim( $value );
109
+        // Trim the value.
110
+        $value = trim( $value );
111 111
 
112
-		if ( empty( $value ) ) {
113
-			return 0;
114
-		}
112
+        if ( empty( $value ) ) {
113
+            return 0;
114
+        }
115 115
 
116
-		if ( 'invoice_id' == $field ) {
117
-			$field = 'parent_payment_id';
118
-		}
116
+        if ( 'invoice_id' == $field ) {
117
+            $field = 'parent_payment_id';
118
+        }
119 119
 
120 120
         // Valid fields.
121 121
         $fields = array(
122
-			'parent_payment_id',
123
-			'transaction_id',
124
-			'profile_id',
125
-		);
126
-
127
-		// Ensure a field has been passed.
128
-		if ( empty( $field ) || ! in_array( $field, $fields ) ) {
129
-			return 0;
130
-		}
131
-
132
-		// Maybe retrieve from the cache.
133
-		$subscription_id   = wp_cache_get( $value, "getpaid_subscription_{$field}s_to_subscription_ids" );
134
-		if ( ! empty( $subscription_id ) ) {
135
-			return $subscription_id;
136
-		}
122
+            'parent_payment_id',
123
+            'transaction_id',
124
+            'profile_id',
125
+        );
126
+
127
+        // Ensure a field has been passed.
128
+        if ( empty( $field ) || ! in_array( $field, $fields ) ) {
129
+            return 0;
130
+        }
131
+
132
+        // Maybe retrieve from the cache.
133
+        $subscription_id   = wp_cache_get( $value, "getpaid_subscription_{$field}s_to_subscription_ids" );
134
+        if ( ! empty( $subscription_id ) ) {
135
+            return $subscription_id;
136
+        }
137 137
 
138 138
         // Fetch from the db.
139 139
         $table            = $wpdb->prefix . 'wpinv_subscriptions';
@@ -141,34 +141,34 @@  discard block
 block discarded – undo
141 141
             $wpdb->prepare( "SELECT `id` FROM $table WHERE `$field`=%s LIMIT 1", $value )
142 142
         );
143 143
 
144
-		if ( empty( $subscription_id ) ) {
145
-			return 0;
146
-		}
144
+        if ( empty( $subscription_id ) ) {
145
+            return 0;
146
+        }
147 147
 
148
-		// Update the cache with our data.
149
-		wp_cache_set( $value, $subscription_id, "getpaid_subscription_{$field}s_to_subscription_ids" );
148
+        // Update the cache with our data.
149
+        wp_cache_set( $value, $subscription_id, "getpaid_subscription_{$field}s_to_subscription_ids" );
150 150
 
151
-		return $subscription_id;
152
-	}
151
+        return $subscription_id;
152
+    }
153 153
 
154
-	/**
154
+    /**
155 155
      * Clears the subscription's cache.
156 156
      */
157 157
     public function clear_cache() {
158
-		wp_cache_delete( $this->get_parent_payment_id(), 'getpaid_subscription_parent_payment_ids_to_subscription_ids' );
159
-		wp_cache_delete( $this->get_transaction_id(), 'getpaid_subscription_transaction_ids_to_subscription_ids' );
160
-		wp_cache_delete( $this->get_profile_id(), 'getpaid_subscription_profile_ids_to_subscription_ids' );
161
-		wp_cache_delete( $this->get_id(), 'getpaid_subscriptions' );
162
-	}
158
+        wp_cache_delete( $this->get_parent_payment_id(), 'getpaid_subscription_parent_payment_ids_to_subscription_ids' );
159
+        wp_cache_delete( $this->get_transaction_id(), 'getpaid_subscription_transaction_ids_to_subscription_ids' );
160
+        wp_cache_delete( $this->get_profile_id(), 'getpaid_subscription_profile_ids_to_subscription_ids' );
161
+        wp_cache_delete( $this->get_id(), 'getpaid_subscriptions' );
162
+    }
163 163
 
164
-	/**
164
+    /**
165 165
      * Checks if a subscription key is set.
166 166
      */
167 167
     public function _isset( $key ) {
168 168
         return isset( $this->data[ $key ] ) || method_exists( $this, "get_$key" );
169
-	}
169
+    }
170 170
 
171
-	/*
171
+    /*
172 172
 	|--------------------------------------------------------------------------
173 173
 	| CRUD methods
174 174
 	|--------------------------------------------------------------------------
@@ -177,57 +177,57 @@  discard block
 block discarded – undo
177 177
 	|
178 178
     */
179 179
 
180
-	/*
180
+    /*
181 181
 	|--------------------------------------------------------------------------
182 182
 	| Getters
183 183
 	|--------------------------------------------------------------------------
184 184
 	*/
185 185
 
186
-	/**
187
-	 * Get customer id.
188
-	 *
189
-	 * @since 1.0.19
190
-	 * @param  string $context View or edit context.
191
-	 * @return int
192
-	 */
193
-	public function get_customer_id( $context = 'view' ) {
194
-		return (int) $this->get_prop( 'customer_id', $context );
195
-	}
196
-
197
-	/**
198
-	 * Get customer information.
199
-	 *
200
-	 * @since 1.0.19
201
-	 * @param  string $context View or edit context.
202
-	 * @return WP_User|false WP_User object on success, false on failure.
203
-	 */
204
-	public function get_customer( $context = 'view' ) {
205
-		return get_userdata( $this->get_customer_id( $context ) );
206
-	}
207
-
208
-	/**
209
-	 * Get parent invoice id.
210
-	 *
211
-	 * @since 1.0.19
212
-	 * @param  string $context View or edit context.
213
-	 * @return int
214
-	 */
215
-	public function get_parent_invoice_id( $context = 'view' ) {
216
-		return (int) $this->get_prop( 'parent_payment_id', $context );
217
-	}
218
-
219
-	/**
220
-	 * Alias for self::get_parent_invoice_id().
221
-	 *
222
-	 * @since 1.0.19
223
-	 * @param  string $context View or edit context.
224
-	 * @return int
225
-	 */
186
+    /**
187
+     * Get customer id.
188
+     *
189
+     * @since 1.0.19
190
+     * @param  string $context View or edit context.
191
+     * @return int
192
+     */
193
+    public function get_customer_id( $context = 'view' ) {
194
+        return (int) $this->get_prop( 'customer_id', $context );
195
+    }
196
+
197
+    /**
198
+     * Get customer information.
199
+     *
200
+     * @since 1.0.19
201
+     * @param  string $context View or edit context.
202
+     * @return WP_User|false WP_User object on success, false on failure.
203
+     */
204
+    public function get_customer( $context = 'view' ) {
205
+        return get_userdata( $this->get_customer_id( $context ) );
206
+    }
207
+
208
+    /**
209
+     * Get parent invoice id.
210
+     *
211
+     * @since 1.0.19
212
+     * @param  string $context View or edit context.
213
+     * @return int
214
+     */
215
+    public function get_parent_invoice_id( $context = 'view' ) {
216
+        return (int) $this->get_prop( 'parent_payment_id', $context );
217
+    }
218
+
219
+    /**
220
+     * Alias for self::get_parent_invoice_id().
221
+     *
222
+     * @since 1.0.19
223
+     * @param  string $context View or edit context.
224
+     * @return int
225
+     */
226 226
     public function get_parent_payment_id( $context = 'view' ) {
227 227
         return $this->get_parent_invoice_id( $context );
228
-	}
228
+    }
229 229
 
230
-	/**
230
+    /**
231 231
      * Alias for self::get_parent_invoice_id().
232 232
      *
233 233
      * @since  1.0.0
@@ -237,484 +237,484 @@  discard block
 block discarded – undo
237 237
         return $this->get_parent_invoice_id( $context );
238 238
     }
239 239
 
240
-	/**
241
-	 * Get parent invoice.
242
-	 *
243
-	 * @since 1.0.19
244
-	 * @param  string $context View or edit context.
245
-	 * @return WPInv_Invoice
246
-	 */
247
-	public function get_parent_invoice( $context = 'view' ) {
248
-		return new WPInv_Invoice( $this->get_parent_invoice_id( $context ) );
249
-	}
250
-
251
-	/**
252
-	 * Alias for self::get_parent_invoice().
253
-	 *
254
-	 * @since 1.0.19
255
-	 * @param  string $context View or edit context.
256
-	 * @return WPInv_Invoice
257
-	 */
258
-    public function get_parent_payment( $context = 'view' ) {
259
-        return $this->get_parent_invoice( $context );
260
-	}
261
-
262
-	/**
263
-	 * Get subscription's product id.
264
-	 *
265
-	 * @since 1.0.19
266
-	 * @param  string $context View or edit context.
267
-	 * @return int
268
-	 */
269
-	public function get_product_id( $context = 'view' ) {
270
-		return (int) $this->get_prop( 'product_id', $context );
271
-	}
272
-
273
-	/**
274
-	 * Get the subscription product.
275
-	 *
276
-	 * @since 1.0.19
277
-	 * @param  string $context View or edit context.
278
-	 * @return WPInv_Item
279
-	 */
280
-	public function get_product( $context = 'view' ) {
281
-		return new WPInv_Item( $this->get_product_id( $context ) );
282
-	}
283
-
284
-	/**
285
-	 * Get parent invoice's gateway.
286
-	 *
287
-	 * Here for backwards compatibility.
288
-	 *
289
-	 * @since 1.0.19
290
-	 * @param  string $context View or edit context.
291
-	 * @return string
292
-	 */
293
-	public function get_gateway( $context = 'view' ) {
294
-		return $this->get_parent_invoice( $context )->get_gateway();
295
-	}
296
-
297
-	/**
298
-	 * Get the period of a renewal.
299
-	 *
300
-	 * @since 1.0.19
301
-	 * @param  string $context View or edit context.
302
-	 * @return string
303
-	 */
304
-	public function get_period( $context = 'view' ) {
305
-		return $this->get_prop( 'period', $context );
306
-	}
307
-
308
-	/**
309
-	 * Get number of periods each renewal is valid for.
310
-	 *
311
-	 * @since 1.0.19
312
-	 * @param  string $context View or edit context.
313
-	 * @return int
314
-	 */
315
-	public function get_frequency( $context = 'view' ) {
316
-		return (int) $this->get_prop( 'frequency', $context );
317
-	}
318
-
319
-	/**
320
-	 * Get the initial amount for the subscription.
321
-	 *
322
-	 * @since 1.0.19
323
-	 * @param  string $context View or edit context.
324
-	 * @return float
325
-	 */
326
-	public function get_initial_amount( $context = 'view' ) {
327
-		return (float) wpinv_sanitize_amount( $this->get_prop( 'initial_amount', $context ) );
328
-	}
329
-
330
-	/**
331
-	 * Get the recurring amount for the subscription.
332
-	 *
333
-	 * @since 1.0.19
334
-	 * @param  string $context View or edit context.
335
-	 * @return float
336
-	 */
337
-	public function get_recurring_amount( $context = 'view' ) {
338
-		return (float) wpinv_sanitize_amount( $this->get_prop( 'recurring_amount', $context ) );
339
-	}
340
-
341
-	/**
342
-	 * Get number of times that this subscription can be renewed.
343
-	 *
344
-	 * @since 1.0.19
345
-	 * @param  string $context View or edit context.
346
-	 * @return int
347
-	 */
348
-	public function get_bill_times( $context = 'view' ) {
349
-		return (int) $this->get_prop( 'bill_times', $context );
350
-	}
351
-
352
-	/**
353
-	 * Get transaction id of this subscription's parent invoice.
354
-	 *
355
-	 * @since 1.0.19
356
-	 * @param  string $context View or edit context.
357
-	 * @return string
358
-	 */
359
-	public function get_transaction_id( $context = 'view' ) {
360
-		return $this->get_prop( 'transaction_id', $context );
361
-	}
362
-
363
-	/**
364
-	 * Get the date that the subscription was created.
365
-	 *
366
-	 * @since 1.0.19
367
-	 * @param  string $context View or edit context.
368
-	 * @return string
369
-	 */
370
-	public function get_created( $context = 'view' ) {
371
-		return $this->get_prop( 'created', $context );
372
-	}
373
-
374
-	/**
375
-	 * Alias for self::get_created().
376
-	 *
377
-	 * @since 1.0.19
378
-	 * @param  string $context View or edit context.
379
-	 * @return string
380
-	 */
381
-	public function get_date_created( $context = 'view' ) {
382
-		return $this->get_created( $context );
383
-	}
384
-
385
-	/**
386
-	 * Retrieves the creation date in a timestamp
387
-	 *
388
-	 * @since  1.0.0
389
-	 * @return int
390
-	 */
391
-	public function get_time_created() {
392
-		$created = $this->get_date_created();
393
-		return empty( $created ) ? current_time( 'timestamp' ) : strtotime( $created, current_time( 'timestamp' ) );
394
-	}
395
-
396
-	/**
397
-	 * Get GMT date when the subscription was created.
398
-	 *
399
-	 * @since 1.0.19
400
-	 * @param  string $context View or edit context.
401
-	 * @return string
402
-	 */
403
-	public function get_date_created_gmt( $context = 'view' ) {
404
-        $date = $this->get_date_created( $context );
240
+    /**
241
+     * Get parent invoice.
242
+     *
243
+     * @since 1.0.19
244
+     * @param  string $context View or edit context.
245
+     * @return WPInv_Invoice
246
+     */
247
+    public function get_parent_invoice( $context = 'view' ) {
248
+        return new WPInv_Invoice( $this->get_parent_invoice_id( $context ) );
249
+    }
250
+
251
+    /**
252
+     * Alias for self::get_parent_invoice().
253
+     *
254
+     * @since 1.0.19
255
+     * @param  string $context View or edit context.
256
+     * @return WPInv_Invoice
257
+     */
258
+    public function get_parent_payment( $context = 'view' ) {
259
+        return $this->get_parent_invoice( $context );
260
+    }
261
+
262
+    /**
263
+     * Get subscription's product id.
264
+     *
265
+     * @since 1.0.19
266
+     * @param  string $context View or edit context.
267
+     * @return int
268
+     */
269
+    public function get_product_id( $context = 'view' ) {
270
+        return (int) $this->get_prop( 'product_id', $context );
271
+    }
272
+
273
+    /**
274
+     * Get the subscription product.
275
+     *
276
+     * @since 1.0.19
277
+     * @param  string $context View or edit context.
278
+     * @return WPInv_Item
279
+     */
280
+    public function get_product( $context = 'view' ) {
281
+        return new WPInv_Item( $this->get_product_id( $context ) );
282
+    }
283
+
284
+    /**
285
+     * Get parent invoice's gateway.
286
+     *
287
+     * Here for backwards compatibility.
288
+     *
289
+     * @since 1.0.19
290
+     * @param  string $context View or edit context.
291
+     * @return string
292
+     */
293
+    public function get_gateway( $context = 'view' ) {
294
+        return $this->get_parent_invoice( $context )->get_gateway();
295
+    }
296
+
297
+    /**
298
+     * Get the period of a renewal.
299
+     *
300
+     * @since 1.0.19
301
+     * @param  string $context View or edit context.
302
+     * @return string
303
+     */
304
+    public function get_period( $context = 'view' ) {
305
+        return $this->get_prop( 'period', $context );
306
+    }
307
+
308
+    /**
309
+     * Get number of periods each renewal is valid for.
310
+     *
311
+     * @since 1.0.19
312
+     * @param  string $context View or edit context.
313
+     * @return int
314
+     */
315
+    public function get_frequency( $context = 'view' ) {
316
+        return (int) $this->get_prop( 'frequency', $context );
317
+    }
318
+
319
+    /**
320
+     * Get the initial amount for the subscription.
321
+     *
322
+     * @since 1.0.19
323
+     * @param  string $context View or edit context.
324
+     * @return float
325
+     */
326
+    public function get_initial_amount( $context = 'view' ) {
327
+        return (float) wpinv_sanitize_amount( $this->get_prop( 'initial_amount', $context ) );
328
+    }
329
+
330
+    /**
331
+     * Get the recurring amount for the subscription.
332
+     *
333
+     * @since 1.0.19
334
+     * @param  string $context View or edit context.
335
+     * @return float
336
+     */
337
+    public function get_recurring_amount( $context = 'view' ) {
338
+        return (float) wpinv_sanitize_amount( $this->get_prop( 'recurring_amount', $context ) );
339
+    }
340
+
341
+    /**
342
+     * Get number of times that this subscription can be renewed.
343
+     *
344
+     * @since 1.0.19
345
+     * @param  string $context View or edit context.
346
+     * @return int
347
+     */
348
+    public function get_bill_times( $context = 'view' ) {
349
+        return (int) $this->get_prop( 'bill_times', $context );
350
+    }
351
+
352
+    /**
353
+     * Get transaction id of this subscription's parent invoice.
354
+     *
355
+     * @since 1.0.19
356
+     * @param  string $context View or edit context.
357
+     * @return string
358
+     */
359
+    public function get_transaction_id( $context = 'view' ) {
360
+        return $this->get_prop( 'transaction_id', $context );
361
+    }
362
+
363
+    /**
364
+     * Get the date that the subscription was created.
365
+     *
366
+     * @since 1.0.19
367
+     * @param  string $context View or edit context.
368
+     * @return string
369
+     */
370
+    public function get_created( $context = 'view' ) {
371
+        return $this->get_prop( 'created', $context );
372
+    }
373
+
374
+    /**
375
+     * Alias for self::get_created().
376
+     *
377
+     * @since 1.0.19
378
+     * @param  string $context View or edit context.
379
+     * @return string
380
+     */
381
+    public function get_date_created( $context = 'view' ) {
382
+        return $this->get_created( $context );
383
+    }
384
+
385
+    /**
386
+     * Retrieves the creation date in a timestamp
387
+     *
388
+     * @since  1.0.0
389
+     * @return int
390
+     */
391
+    public function get_time_created() {
392
+        $created = $this->get_date_created();
393
+        return empty( $created ) ? current_time( 'timestamp' ) : strtotime( $created, current_time( 'timestamp' ) );
394
+    }
395
+
396
+    /**
397
+     * Get GMT date when the subscription was created.
398
+     *
399
+     * @since 1.0.19
400
+     * @param  string $context View or edit context.
401
+     * @return string
402
+     */
403
+    public function get_date_created_gmt( $context = 'view' ) {
404
+        $date = $this->get_date_created( $context );
405
+
406
+        if ( $date ) {
407
+            $date = get_gmt_from_date( $date );
408
+        }
409
+        return $date;
410
+    }
411
+
412
+    /**
413
+     * Get the date that the subscription will renew.
414
+     *
415
+     * @since 1.0.19
416
+     * @param  string $context View or edit context.
417
+     * @return string
418
+     */
419
+    public function get_next_renewal_date( $context = 'view' ) {
420
+        return $this->get_prop( 'expiration', $context );
421
+    }
422
+
423
+    /**
424
+     * Alias for self::get_next_renewal_date().
425
+     *
426
+     * @since 1.0.19
427
+     * @param  string $context View or edit context.
428
+     * @return string
429
+     */
430
+    public function get_expiration( $context = 'view' ) {
431
+        return $this->get_next_renewal_date( $context );
432
+    }
433
+
434
+    /**
435
+     * Retrieves the expiration date in a timestamp
436
+     *
437
+     * @since  1.0.0
438
+     * @return int
439
+     */
440
+    public function get_expiration_time() {
441
+        $expiration = $this->get_expiration();
442
+
443
+        if ( empty( $expiration ) || '0000-00-00 00:00:00' == $expiration ) {
444
+            return current_time( 'timestamp' );
445
+        }
446
+
447
+        $expiration = strtotime( $expiration, current_time( 'timestamp' ) );
448
+        return $expiration < current_time( 'timestamp' ) ? current_time( 'timestamp' ) : $expiration;
449
+    }
450
+
451
+    /**
452
+     * Get GMT date when the subscription will renew.
453
+     *
454
+     * @since 1.0.19
455
+     * @param  string $context View or edit context.
456
+     * @return string
457
+     */
458
+    public function get_next_renewal_date_gmt( $context = 'view' ) {
459
+        $date = $this->get_next_renewal_date( $context );
460
+
461
+        if ( $date ) {
462
+            $date = get_gmt_from_date( $date );
463
+        }
464
+        return $date;
465
+    }
466
+
467
+    /**
468
+     * Get the subscription's trial period.
469
+     *
470
+     * @since 1.0.19
471
+     * @param  string $context View or edit context.
472
+     * @return string
473
+     */
474
+    public function get_trial_period( $context = 'view' ) {
475
+        return $this->get_prop( 'trial_period', $context );
476
+    }
477
+
478
+    /**
479
+     * Get the subscription's status.
480
+     *
481
+     * @since 1.0.19
482
+     * @param  string $context View or edit context.
483
+     * @return string
484
+     */
485
+    public function get_status( $context = 'view' ) {
486
+        return $this->get_prop( 'status', $context );
487
+    }
488
+
489
+    /**
490
+     * Get the subscription's profile id.
491
+     *
492
+     * @since 1.0.19
493
+     * @param  string $context View or edit context.
494
+     * @return string
495
+     */
496
+    public function get_profile_id( $context = 'view' ) {
497
+        return $this->get_prop( 'profile_id', $context );
498
+    }
499
+
500
+    /*
501
+	|--------------------------------------------------------------------------
502
+	| Setters
503
+	|--------------------------------------------------------------------------
504
+	*/
505
+
506
+    /**
507
+     * Set customer id.
508
+     *
509
+     * @since 1.0.19
510
+     * @param  int $value The customer's id.
511
+     */
512
+    public function set_customer_id( $value ) {
513
+        $this->set_prop( 'customer_id', (int) $value );
514
+    }
515
+
516
+    /**
517
+     * Set parent invoice id.
518
+     *
519
+     * @since 1.0.19
520
+     * @param  int $value The parent invoice id.
521
+     */
522
+    public function set_parent_invoice_id( $value ) {
523
+        $this->set_prop( 'parent_payment_id', (int) $value );
524
+    }
525
+
526
+    /**
527
+     * Alias for self::set_parent_invoice_id().
528
+     *
529
+     * @since 1.0.19
530
+     * @param  int $value The parent invoice id.
531
+     */
532
+    public function set_parent_payment_id( $value ) {
533
+        $this->set_parent_invoice_id( $value );
534
+    }
535
+
536
+    /**
537
+     * Alias for self::set_parent_invoice_id().
538
+     *
539
+     * @since 1.0.19
540
+     * @param  int $value The parent invoice id.
541
+     */
542
+    public function set_original_payment_id( $value ) {
543
+        $this->set_parent_invoice_id( $value );
544
+    }
545
+
546
+    /**
547
+     * Set subscription's product id.
548
+     *
549
+     * @since 1.0.19
550
+     * @param  int $value The subscription product id.
551
+     */
552
+    public function set_product_id( $value ) {
553
+        $this->set_prop( 'product_id', (int) $value );
554
+    }
555
+
556
+    /**
557
+     * Set the period of a renewal.
558
+     *
559
+     * @since 1.0.19
560
+     * @param  string $value The renewal period.
561
+     */
562
+    public function set_period( $value ) {
563
+        $this->set_prop( 'period', $value );
564
+    }
565
+
566
+    /**
567
+     * Set number of periods each renewal is valid for.
568
+     *
569
+     * @since 1.0.19
570
+     * @param  int $value The subscription frequency.
571
+     */
572
+    public function set_frequency( $value ) {
573
+        $value = empty( $value ) ? 1 : (int) $value;
574
+        $this->set_prop( 'frequency', absint( $value ) );
575
+    }
576
+
577
+    /**
578
+     * Set the initial amount for the subscription.
579
+     *
580
+     * @since 1.0.19
581
+     * @param  float $value The initial subcription amount.
582
+     */
583
+    public function set_initial_amount( $value ) {
584
+        $this->set_prop( 'initial_amount', wpinv_sanitize_amount( $value ) );
585
+    }
586
+
587
+    /**
588
+     * Set the recurring amount for the subscription.
589
+     *
590
+     * @since 1.0.19
591
+     * @param  float $value The recurring subcription amount.
592
+     */
593
+    public function set_recurring_amount( $value ) {
594
+        $this->set_prop( 'recurring_amount', wpinv_sanitize_amount( $value ) );
595
+    }
596
+
597
+    /**
598
+     * Set number of times that this subscription can be renewed.
599
+     *
600
+     * @since 1.0.19
601
+     * @param  int $value Bill times.
602
+     */
603
+    public function set_bill_times( $value ) {
604
+        $this->set_prop( 'bill_times', (int) $value );
605
+    }
606
+
607
+    /**
608
+     * Get transaction id of this subscription's parent invoice.
609
+     *
610
+     * @since 1.0.19
611
+     * @param string $value Bill times.
612
+     */
613
+    public function set_transaction_id( $value ) {
614
+        $this->set_prop( 'transaction_id', sanitize_text_field( $value ) );
615
+    }
616
+
617
+    /**
618
+     * Set date when this subscription started.
619
+     *
620
+     * @since 1.0.19
621
+     * @param string $value strtotime compliant date.
622
+     */
623
+    public function set_created( $value ) {
624
+        $date = strtotime( $value );
405 625
 
406
-        if ( $date ) {
407
-            $date = get_gmt_from_date( $date );
626
+        if ( $date && $value !== '0000-00-00 00:00:00' ) {
627
+            $this->set_prop( 'created', date( 'Y-m-d H:i:s', $date ) );
628
+            return;
408 629
         }
409
-		return $date;
410
-	}
411
-
412
-	/**
413
-	 * Get the date that the subscription will renew.
414
-	 *
415
-	 * @since 1.0.19
416
-	 * @param  string $context View or edit context.
417
-	 * @return string
418
-	 */
419
-	public function get_next_renewal_date( $context = 'view' ) {
420
-		return $this->get_prop( 'expiration', $context );
421
-	}
422
-
423
-	/**
424
-	 * Alias for self::get_next_renewal_date().
425
-	 *
426
-	 * @since 1.0.19
427
-	 * @param  string $context View or edit context.
428
-	 * @return string
429
-	 */
430
-	public function get_expiration( $context = 'view' ) {
431
-		return $this->get_next_renewal_date( $context );
432
-	}
433
-
434
-	/**
435
-	 * Retrieves the expiration date in a timestamp
436
-	 *
437
-	 * @since  1.0.0
438
-	 * @return int
439
-	 */
440
-	public function get_expiration_time() {
441
-		$expiration = $this->get_expiration();
442
-
443
-		if ( empty( $expiration ) || '0000-00-00 00:00:00' == $expiration ) {
444
-			return current_time( 'timestamp' );
445
-		}
446
-
447
-		$expiration = strtotime( $expiration, current_time( 'timestamp' ) );
448
-		return $expiration < current_time( 'timestamp' ) ? current_time( 'timestamp' ) : $expiration;
449
-	}
450
-
451
-	/**
452
-	 * Get GMT date when the subscription will renew.
453
-	 *
454
-	 * @since 1.0.19
455
-	 * @param  string $context View or edit context.
456
-	 * @return string
457
-	 */
458
-	public function get_next_renewal_date_gmt( $context = 'view' ) {
459
-        $date = $this->get_next_renewal_date( $context );
460 630
 
461
-        if ( $date ) {
462
-            $date = get_gmt_from_date( $date );
463
-        }
464
-		return $date;
465
-	}
466
-
467
-	/**
468
-	 * Get the subscription's trial period.
469
-	 *
470
-	 * @since 1.0.19
471
-	 * @param  string $context View or edit context.
472
-	 * @return string
473
-	 */
474
-	public function get_trial_period( $context = 'view' ) {
475
-		return $this->get_prop( 'trial_period', $context );
476
-	}
477
-
478
-	/**
479
-	 * Get the subscription's status.
480
-	 *
481
-	 * @since 1.0.19
482
-	 * @param  string $context View or edit context.
483
-	 * @return string
484
-	 */
485
-	public function get_status( $context = 'view' ) {
486
-		return $this->get_prop( 'status', $context );
487
-	}
488
-
489
-	/**
490
-	 * Get the subscription's profile id.
491
-	 *
492
-	 * @since 1.0.19
493
-	 * @param  string $context View or edit context.
494
-	 * @return string
495
-	 */
496
-	public function get_profile_id( $context = 'view' ) {
497
-		return $this->get_prop( 'profile_id', $context );
498
-	}
499
-
500
-	/*
501
-	|--------------------------------------------------------------------------
502
-	| Setters
503
-	|--------------------------------------------------------------------------
504
-	*/
631
+        $this->set_prop( 'created', '' );
505 632
 
506
-	/**
507
-	 * Set customer id.
508
-	 *
509
-	 * @since 1.0.19
510
-	 * @param  int $value The customer's id.
511
-	 */
512
-	public function set_customer_id( $value ) {
513
-		$this->set_prop( 'customer_id', (int) $value );
514
-	}
515
-
516
-	/**
517
-	 * Set parent invoice id.
518
-	 *
519
-	 * @since 1.0.19
520
-	 * @param  int $value The parent invoice id.
521
-	 */
522
-	public function set_parent_invoice_id( $value ) {
523
-		$this->set_prop( 'parent_payment_id', (int) $value );
524
-	}
525
-
526
-	/**
527
-	 * Alias for self::set_parent_invoice_id().
528
-	 *
529
-	 * @since 1.0.19
530
-	 * @param  int $value The parent invoice id.
531
-	 */
532
-    public function set_parent_payment_id( $value ) {
533
-        $this->set_parent_invoice_id( $value );
534
-	}
633
+    }
535 634
 
536
-	/**
537
-     * Alias for self::set_parent_invoice_id().
635
+    /**
636
+     * Alias for self::set_created().
538 637
      *
539 638
      * @since 1.0.19
540
-	 * @param  int $value The parent invoice id.
639
+     * @param string $value strtotime compliant date.
541 640
      */
542
-    public function set_original_payment_id( $value ) {
543
-        $this->set_parent_invoice_id( $value );
544
-	}
545
-
546
-	/**
547
-	 * Set subscription's product id.
548
-	 *
549
-	 * @since 1.0.19
550
-	 * @param  int $value The subscription product id.
551
-	 */
552
-	public function set_product_id( $value ) {
553
-		$this->set_prop( 'product_id', (int) $value );
554
-	}
555
-
556
-	/**
557
-	 * Set the period of a renewal.
558
-	 *
559
-	 * @since 1.0.19
560
-	 * @param  string $value The renewal period.
561
-	 */
562
-	public function set_period( $value ) {
563
-		$this->set_prop( 'period', $value );
564
-	}
565
-
566
-	/**
567
-	 * Set number of periods each renewal is valid for.
568
-	 *
569
-	 * @since 1.0.19
570
-	 * @param  int $value The subscription frequency.
571
-	 */
572
-	public function set_frequency( $value ) {
573
-		$value = empty( $value ) ? 1 : (int) $value;
574
-		$this->set_prop( 'frequency', absint( $value ) );
575
-	}
576
-
577
-	/**
578
-	 * Set the initial amount for the subscription.
579
-	 *
580
-	 * @since 1.0.19
581
-	 * @param  float $value The initial subcription amount.
582
-	 */
583
-	public function set_initial_amount( $value ) {
584
-		$this->set_prop( 'initial_amount', wpinv_sanitize_amount( $value ) );
585
-	}
586
-
587
-	/**
588
-	 * Set the recurring amount for the subscription.
589
-	 *
590
-	 * @since 1.0.19
591
-	 * @param  float $value The recurring subcription amount.
592
-	 */
593
-	public function set_recurring_amount( $value ) {
594
-		$this->set_prop( 'recurring_amount', wpinv_sanitize_amount( $value ) );
595
-	}
596
-
597
-	/**
598
-	 * Set number of times that this subscription can be renewed.
599
-	 *
600
-	 * @since 1.0.19
601
-	 * @param  int $value Bill times.
602
-	 */
603
-	public function set_bill_times( $value ) {
604
-		$this->set_prop( 'bill_times', (int) $value );
605
-	}
606
-
607
-	/**
608
-	 * Get transaction id of this subscription's parent invoice.
609
-	 *
610
-	 * @since 1.0.19
611
-	 * @param string $value Bill times.
612
-	 */
613
-	public function set_transaction_id( $value ) {
614
-		$this->set_prop( 'transaction_id', sanitize_text_field( $value ) );
615
-	}
616
-
617
-	/**
618
-	 * Set date when this subscription started.
619
-	 *
620
-	 * @since 1.0.19
621
-	 * @param string $value strtotime compliant date.
622
-	 */
623
-	public function set_created( $value ) {
641
+    public function set_date_created( $value ) {
642
+        $this->set_created( $value );
643
+    }
644
+
645
+    /**
646
+     * Set the date that the subscription will renew.
647
+     *
648
+     * @since 1.0.19
649
+     * @param string $value strtotime compliant date.
650
+     */
651
+    public function set_next_renewal_date( $value ) {
624 652
         $date = strtotime( $value );
625 653
 
626 654
         if ( $date && $value !== '0000-00-00 00:00:00' ) {
627
-            $this->set_prop( 'created', date( 'Y-m-d H:i:s', $date ) );
655
+            $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) );
628 656
             return;
629 657
         }
630 658
 
631
-		$this->set_prop( 'created', '' );
659
+        $this->set_prop( 'expiration', '' );
632 660
 
633
-	}
661
+    }
634 662
 
635
-	/**
636
-	 * Alias for self::set_created().
637
-	 *
638
-	 * @since 1.0.19
639
-	 * @param string $value strtotime compliant date.
640
-	 */
641
-	public function set_date_created( $value ) {
642
-		$this->set_created( $value );
663
+    /**
664
+     * Alias for self::set_next_renewal_date().
665
+     *
666
+     * @since 1.0.19
667
+     * @param string $value strtotime compliant date.
668
+     */
669
+    public function set_expiration( $value ) {
670
+        $this->set_next_renewal_date( $value );
643 671
     }
644 672
 
645
-	/**
646
-	 * Set the date that the subscription will renew.
647
-	 *
648
-	 * @since 1.0.19
649
-	 * @param string $value strtotime compliant date.
650
-	 */
651
-	public function set_next_renewal_date( $value ) {
652
-		$date = strtotime( $value );
673
+    /**
674
+     * Set the subscription's trial period.
675
+     *
676
+     * @since 1.0.19
677
+     * @param string $value trial period e.g 1 year.
678
+     */
679
+    public function set_trial_period( $value ) {
680
+        $this->set_prop( 'trial_period', $value );
681
+    }
653 682
 
654
-        if ( $date && $value !== '0000-00-00 00:00:00' ) {
655
-            $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) );
683
+    /**
684
+     * Set the subscription's status.
685
+     *
686
+     * @since 1.0.19
687
+     * @param string $new_status    New subscription status.
688
+     */
689
+    public function set_status( $new_status ) {
690
+
691
+        // Abort if this is not a valid status;
692
+        if ( ! array_key_exists( $new_status, getpaid_get_subscription_statuses() ) ) {
656 693
             return;
657
-		}
658
-
659
-		$this->set_prop( 'expiration', '' );
660
-
661
-	}
662
-
663
-	/**
664
-	 * Alias for self::set_next_renewal_date().
665
-	 *
666
-	 * @since 1.0.19
667
-	 * @param string $value strtotime compliant date.
668
-	 */
669
-	public function set_expiration( $value ) {
670
-		$this->set_next_renewal_date( $value );
671
-    }
672
-
673
-	/**
674
-	 * Set the subscription's trial period.
675
-	 *
676
-	 * @since 1.0.19
677
-	 * @param string $value trial period e.g 1 year.
678
-	 */
679
-	public function set_trial_period( $value ) {
680
-		$this->set_prop( 'trial_period', $value );
681
-	}
682
-
683
-	/**
684
-	 * Set the subscription's status.
685
-	 *
686
-	 * @since 1.0.19
687
-	 * @param string $new_status    New subscription status.
688
-	 */
689
-	public function set_status( $new_status ) {
690
-
691
-		// Abort if this is not a valid status;
692
-		if ( ! array_key_exists( $new_status, getpaid_get_subscription_statuses() ) ) {
693
-			return;
694
-		}
695
-
696
-		$old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status();
697
-		if ( true === $this->object_read && $old_status !== $new_status ) {
698
-			$this->status_transition = array(
699
-				'from' => $old_status,
700
-				'to'   => $new_status,
701
-			);
702
-		}
703
-
704
-		$this->set_prop( 'status', $new_status );
705
-	}
706
-
707
-	/**
708
-	 * Set the subscription's (remote) profile id.
709
-	 *
710
-	 * @since 1.0.19
711
-	 * @param  string $value the remote profile id.
712
-	 */
713
-	public function set_profile_id( $value ) {
714
-		$this->set_prop( 'profile_id', sanitize_text_field( $value ) );
715
-	}
716
-
717
-	/*
694
+        }
695
+
696
+        $old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status();
697
+        if ( true === $this->object_read && $old_status !== $new_status ) {
698
+            $this->status_transition = array(
699
+                'from' => $old_status,
700
+                'to'   => $new_status,
701
+            );
702
+        }
703
+
704
+        $this->set_prop( 'status', $new_status );
705
+    }
706
+
707
+    /**
708
+     * Set the subscription's (remote) profile id.
709
+     *
710
+     * @since 1.0.19
711
+     * @param  string $value the remote profile id.
712
+     */
713
+    public function set_profile_id( $value ) {
714
+        $this->set_prop( 'profile_id', sanitize_text_field( $value ) );
715
+    }
716
+
717
+    /*
718 718
 	|--------------------------------------------------------------------------
719 719
 	| Boolean methods
720 720
 	|--------------------------------------------------------------------------
@@ -723,55 +723,55 @@  discard block
 block discarded – undo
723 723
 	|
724 724
 	*/
725 725
 
726
-	/**
726
+    /**
727 727
      * Checks if the subscription has a given status.
728
-	 *
729
-	 * @param string|array String or array of strings to check for.
730
-	 * @return bool
728
+     *
729
+     * @param string|array String or array of strings to check for.
730
+     * @return bool
731 731
      */
732 732
     public function has_status( $status ) {
733 733
         return in_array( $this->get_status(), wpinv_clean( wpinv_parse_list( $status ) ) );
734
-	}
734
+    }
735 735
 
736
-	/**
736
+    /**
737 737
      * Checks if the subscription has a trial period.
738
-	 *
739
-	 * @return bool
738
+     *
739
+     * @return bool
740 740
      */
741 741
     public function has_trial_period() {
742
-		$period = $this->get_trial_period();
742
+        $period = $this->get_trial_period();
743 743
         return ! empty( $period );
744
-	}
745
-
746
-	/**
747
-	 * Is the subscription active?
748
-	 *
749
-	 * @return bool
750
-	 */
751
-	public function is_active() {
752
-		return $this->has_status( 'active trialling' ) && ! $this->is_expired();
753
-	}
754
-
755
-	/**
756
-	 * Is the subscription expired?
757
-	 *
758
-	 * @return bool
759
-	 */
760
-	public function is_expired() {
761
-		return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'timestamp' ) );
762
-	}
763
-
764
-	/**
765
-	 * Is this the last renewals?
766
-	 *
767
-	 * @return bool
768
-	 */
769
-	public function is_last_renewal() {
770
-		$max_bills = $this->get_bill_times();
771
-		return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed();
772
-	}
773
-
774
-	/*
744
+    }
745
+
746
+    /**
747
+     * Is the subscription active?
748
+     *
749
+     * @return bool
750
+     */
751
+    public function is_active() {
752
+        return $this->has_status( 'active trialling' ) && ! $this->is_expired();
753
+    }
754
+
755
+    /**
756
+     * Is the subscription expired?
757
+     *
758
+     * @return bool
759
+     */
760
+    public function is_expired() {
761
+        return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'timestamp' ) );
762
+    }
763
+
764
+    /**
765
+     * Is this the last renewals?
766
+     *
767
+     * @return bool
768
+     */
769
+    public function is_last_renewal() {
770
+        $max_bills = $this->get_bill_times();
771
+        return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed();
772
+    }
773
+
774
+    /*
775 775
 	|--------------------------------------------------------------------------
776 776
 	| Additional methods
777 777
 	|--------------------------------------------------------------------------
@@ -780,27 +780,27 @@  discard block
 block discarded – undo
780 780
 	|
781 781
 	*/
782 782
 
783
-	/**
784
-	 * Backwards compatibilty.
785
-	 */
786
-	public function create( $data = array() ) {
783
+    /**
784
+     * Backwards compatibilty.
785
+     */
786
+    public function create( $data = array() ) {
787 787
 
788
-		// Set the properties.
789
-		if ( is_array( $data ) ) {
790
-			$this->set_props( $data );
791
-		}
788
+        // Set the properties.
789
+        if ( is_array( $data ) ) {
790
+            $this->set_props( $data );
791
+        }
792 792
 
793
-		// Save the item.
794
-		return $this->save();
793
+        // Save the item.
794
+        return $this->save();
795 795
 
796
-	}
796
+    }
797 797
 
798
-	/**
799
-	 * Backwards compatibilty.
800
-	 */
801
-	public function update( $args = array() ) {
802
-		return $this->create( $args );
803
-	}
798
+    /**
799
+     * Backwards compatibilty.
800
+     */
801
+    public function update( $args = array() ) {
802
+        return $this->create( $args );
803
+    }
804 804
 
805 805
     /**
806 806
      * Retrieve renewal payments for a subscription
@@ -810,22 +810,22 @@  discard block
 block discarded – undo
810 810
      */
811 811
     public function get_child_payments( $hide_pending = true ) {
812 812
 
813
-		$statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' );
813
+        $statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' );
814 814
 
815
-		if ( ! $hide_pending ) {
816
-			$statuses = array_keys( wpinv_get_invoice_statuses() );
817
-		}
815
+        if ( ! $hide_pending ) {
816
+            $statuses = array_keys( wpinv_get_invoice_statuses() );
817
+        }
818 818
 
819 819
         return get_posts(
820
-			array(
821
-            	'post_parent' => $this->get_parent_payment_id(),
822
-            	'numberposts' => -1,
823
-            	'post_status' => $statuses,
824
-            	'orderby'     => 'ID',
825
-            	'order'       => 'ASC',
826
-            	'post_type'   => 'wpi_invoice',
827
-			)
828
-		);
820
+            array(
821
+                'post_parent' => $this->get_parent_payment_id(),
822
+                'numberposts' => -1,
823
+                'post_status' => $statuses,
824
+                'orderby'     => 'ID',
825
+                'order'       => 'ASC',
826
+                'post_type'   => 'wpi_invoice',
827
+            )
828
+        );
829 829
     }
830 830
 
831 831
     /**
@@ -835,7 +835,7 @@  discard block
 block discarded – undo
835 835
      * @return int
836 836
      */
837 837
     public function get_total_payments() {
838
-		return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() );
838
+        return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() );
839 839
     }
840 840
 
841 841
     /**
@@ -859,56 +859,56 @@  discard block
 block discarded – undo
859 859
      *
860 860
      * @since  2.4
861 861
      * @param  array $args Array of values for the payment, including amount and transaction ID
862
-	 * @param  WPInv_Invoice $invoice If adding an existing invoice.
862
+     * @param  WPInv_Invoice $invoice If adding an existing invoice.
863 863
      * @return bool
864 864
      */
865 865
     public function add_payment( $args = array(), $invoice = false ) {
866 866
 
867
-		// Process each payment once.
867
+        // Process each payment once.
868 868
         if ( ! empty( $args['transaction_id'] ) && $this->payment_exists( $args['transaction_id'] ) ) {
869 869
             return false;
870 870
         }
871 871
 
872
-		// Are we creating a new invoice?
873
-		if ( empty( $invoice ) ) {
874
-			$invoice = $this->create_payment();
872
+        // Are we creating a new invoice?
873
+        if ( empty( $invoice ) ) {
874
+            $invoice = $this->create_payment();
875 875
 
876
-			if ( empty( $invoice ) ) {
877
-				return false;
878
-			}
876
+            if ( empty( $invoice ) ) {
877
+                return false;
878
+            }
879 879
 }
880 880
 
881
-		$invoice->set_status( 'wpi-renewal' );
881
+        $invoice->set_status( 'wpi-renewal' );
882 882
 
883
-		// Maybe set a transaction id.
884
-		if ( ! empty( $args['transaction_id'] ) ) {
885
-			$invoice->set_transaction_id( $args['transaction_id'] );
886
-		}
883
+        // Maybe set a transaction id.
884
+        if ( ! empty( $args['transaction_id'] ) ) {
885
+            $invoice->set_transaction_id( $args['transaction_id'] );
886
+        }
887 887
 
888
-		// Set the completed date.
889
-		$invoice->set_completed_date( current_time( 'mysql' ) );
888
+        // Set the completed date.
889
+        $invoice->set_completed_date( current_time( 'mysql' ) );
890 890
 
891
-		// And the gateway.
892
-		if ( ! empty( $args['gateway'] ) ) {
893
-			$invoice->set_gateway( $args['gateway'] );
894
-		}
891
+        // And the gateway.
892
+        if ( ! empty( $args['gateway'] ) ) {
893
+            $invoice->set_gateway( $args['gateway'] );
894
+        }
895 895
 
896
-		$invoice->save();
896
+        $invoice->save();
897 897
 
898
-		if ( ! $invoice->exists() ) {
899
-			return false;
900
-		}
898
+        if ( ! $invoice->exists() ) {
899
+            return false;
900
+        }
901 901
 
902
-		do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this );
903
-		do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this );
902
+        do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this );
903
+        do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this );
904 904
         do_action( 'wpinv_recurring_record_payment', $invoice->get_id(), $this->get_parent_invoice_id(), $invoice->get_recurring_total(), $invoice->get_transaction_id() );
905 905
 
906 906
         update_post_meta( $invoice->get_id(), '_wpinv_subscription_id', $this->id );
907 907
 
908 908
         return $invoice->get_id();
909
-	}
909
+    }
910 910
 
911
-	/**
911
+    /**
912 912
      * Creates a new invoice and returns it.
913 913
      *
914 914
      * @since  1.0.19
@@ -916,124 +916,124 @@  discard block
 block discarded – undo
916 916
      */
917 917
     public function create_payment() {
918 918
 
919
-		$parent_invoice = $this->get_parent_payment();
920
-
921
-		if ( ! $parent_invoice->exists() ) {
922
-			return false;
923
-		}
924
-
925
-		// Duplicate the parent invoice.
926
-		$invoice = getpaid_duplicate_invoice( $parent_invoice );
927
-		$invoice->set_parent_id( $parent_invoice->get_id() );
928
-		$invoice->set_subscription_id( $this->get_id() );
929
-		$invoice->set_remote_subscription_id( $this->get_profile_id() );
930
-
931
-		// Set invoice items.
932
-		$subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() );
933
-		$allowed_items      = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] );
934
-		$invoice_items      = array();
935
-
936
-		foreach ( $invoice->get_items() as $item ) {
937
-			if ( in_array( $item->get_id(), $allowed_items ) ) {
938
-				$invoice_items[] = $item;
939
-			}
940
-		}
941
-
942
-		$invoice->set_items( $invoice_items );
943
-
944
-		if ( ! empty( $subscription_group['fees'] ) ) {
945
-			$invoice->set_fees( $subscription_group['fees'] );
946
-		}
947
-
948
-		// Maybe recalculate discount (Pre-GetPaid Fix).
949
-		$discount = new WPInv_Discount( $invoice->get_discount_code() );
950
-		if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) {
951
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
952
-		}
953
-
954
-		$invoice->recalculate_total();
955
-		$invoice->set_status( 'wpi-pending' );
956
-		$invoice->save();
957
-
958
-		return $invoice->exists() ? $invoice : false;
959
-    }
960
-
961
-	/**
962
-	 * Renews or completes a subscription
963
-	 *
964
-	 * @since  1.0.0
965
-	 * @return int The subscription's id
966
-	 */
967
-	public function renew() {
968
-
969
-		// Complete subscription if applicable
970
-		if ( $this->is_last_renewal() ) {
971
-			return $this->complete();
972
-		}
973
-
974
-		// Calculate new expiration
975
-		$frequency      = $this->get_frequency();
976
-		$period         = $this->get_period();
977
-		$new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() );
978
-
979
-		$this->set_expiration( date( 'Y-m-d H:i:s', $new_expiration ) );
980
-		$this->set_status( 'active' );
981
-		$this->save();
982
-
983
-		do_action( 'getpaid_subscription_renewed', $this );
984
-
985
-		return $this->get_id();
986
-	}
987
-
988
-	/**
989
-	 * Marks a subscription as completed
990
-	 *
991
-	 * Subscription is completed when the number of payments matches the billing_times field
992
-	 *
993
-	 * @since  1.0.0
994
-	 * @return int|bool Subscription id or false if the subscription is cancelled.
995
-	 */
996
-	public function complete() {
997
-
998
-		// Only mark a subscription as complete if it's not already cancelled.
999
-		if ( $this->has_status( 'cancelled' ) ) {
1000
-			return false;
1001
-		}
1002
-
1003
-		$this->set_status( 'completed' );
1004
-		return $this->save();
1005
-
1006
-	}
1007
-
1008
-	/**
1009
-	 * Marks a subscription as expired
1010
-	 *
1011
-	 * @since  1.0.0
1012
-	 * @param  bool $check_expiration
1013
-	 * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future.
1014
-	 */
1015
-	public function expire( $check_expiration = false ) {
1016
-
1017
-		if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) {
1018
-			// Do not mark as expired since real expiration date is in the future
1019
-			return false;
1020
-		}
1021
-
1022
-		$this->set_status( 'expired' );
1023
-		return $this->save();
1024
-
1025
-	}
1026
-
1027
-	/**
1028
-	 * Marks a subscription as failing
1029
-	 *
1030
-	 * @since  2.4.2
1031
-	 * @return int Subscription id.
1032
-	 */
1033
-	public function failing() {
1034
-		$this->set_status( 'failing' );
1035
-		return $this->save();
1036
-	}
919
+        $parent_invoice = $this->get_parent_payment();
920
+
921
+        if ( ! $parent_invoice->exists() ) {
922
+            return false;
923
+        }
924
+
925
+        // Duplicate the parent invoice.
926
+        $invoice = getpaid_duplicate_invoice( $parent_invoice );
927
+        $invoice->set_parent_id( $parent_invoice->get_id() );
928
+        $invoice->set_subscription_id( $this->get_id() );
929
+        $invoice->set_remote_subscription_id( $this->get_profile_id() );
930
+
931
+        // Set invoice items.
932
+        $subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() );
933
+        $allowed_items      = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] );
934
+        $invoice_items      = array();
935
+
936
+        foreach ( $invoice->get_items() as $item ) {
937
+            if ( in_array( $item->get_id(), $allowed_items ) ) {
938
+                $invoice_items[] = $item;
939
+            }
940
+        }
941
+
942
+        $invoice->set_items( $invoice_items );
943
+
944
+        if ( ! empty( $subscription_group['fees'] ) ) {
945
+            $invoice->set_fees( $subscription_group['fees'] );
946
+        }
947
+
948
+        // Maybe recalculate discount (Pre-GetPaid Fix).
949
+        $discount = new WPInv_Discount( $invoice->get_discount_code() );
950
+        if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) {
951
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
952
+        }
953
+
954
+        $invoice->recalculate_total();
955
+        $invoice->set_status( 'wpi-pending' );
956
+        $invoice->save();
957
+
958
+        return $invoice->exists() ? $invoice : false;
959
+    }
960
+
961
+    /**
962
+     * Renews or completes a subscription
963
+     *
964
+     * @since  1.0.0
965
+     * @return int The subscription's id
966
+     */
967
+    public function renew() {
968
+
969
+        // Complete subscription if applicable
970
+        if ( $this->is_last_renewal() ) {
971
+            return $this->complete();
972
+        }
973
+
974
+        // Calculate new expiration
975
+        $frequency      = $this->get_frequency();
976
+        $period         = $this->get_period();
977
+        $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() );
978
+
979
+        $this->set_expiration( date( 'Y-m-d H:i:s', $new_expiration ) );
980
+        $this->set_status( 'active' );
981
+        $this->save();
982
+
983
+        do_action( 'getpaid_subscription_renewed', $this );
984
+
985
+        return $this->get_id();
986
+    }
987
+
988
+    /**
989
+     * Marks a subscription as completed
990
+     *
991
+     * Subscription is completed when the number of payments matches the billing_times field
992
+     *
993
+     * @since  1.0.0
994
+     * @return int|bool Subscription id or false if the subscription is cancelled.
995
+     */
996
+    public function complete() {
997
+
998
+        // Only mark a subscription as complete if it's not already cancelled.
999
+        if ( $this->has_status( 'cancelled' ) ) {
1000
+            return false;
1001
+        }
1002
+
1003
+        $this->set_status( 'completed' );
1004
+        return $this->save();
1005
+
1006
+    }
1007
+
1008
+    /**
1009
+     * Marks a subscription as expired
1010
+     *
1011
+     * @since  1.0.0
1012
+     * @param  bool $check_expiration
1013
+     * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future.
1014
+     */
1015
+    public function expire( $check_expiration = false ) {
1016
+
1017
+        if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) {
1018
+            // Do not mark as expired since real expiration date is in the future
1019
+            return false;
1020
+        }
1021
+
1022
+        $this->set_status( 'expired' );
1023
+        return $this->save();
1024
+
1025
+    }
1026
+
1027
+    /**
1028
+     * Marks a subscription as failing
1029
+     *
1030
+     * @since  2.4.2
1031
+     * @return int Subscription id.
1032
+     */
1033
+    public function failing() {
1034
+        $this->set_status( 'failing' );
1035
+        return $this->save();
1036
+    }
1037 1037
 
1038 1038
     /**
1039 1039
      * Marks a subscription as cancelled
@@ -1042,19 +1042,19 @@  discard block
 block discarded – undo
1042 1042
      * @return int Subscription id.
1043 1043
      */
1044 1044
     public function cancel() {
1045
-		$this->set_status( 'cancelled' );
1046
-		return $this->save();
1045
+        $this->set_status( 'cancelled' );
1046
+        return $this->save();
1047 1047
     }
1048 1048
 
1049
-	/**
1050
-	 * Determines if a subscription can be cancelled both locally and with a payment processor.
1051
-	 *
1052
-	 * @since  1.0.0
1053
-	 * @return bool
1054
-	 */
1055
-	public function can_cancel() {
1056
-		return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this );
1057
-	}
1049
+    /**
1050
+     * Determines if a subscription can be cancelled both locally and with a payment processor.
1051
+     *
1052
+     * @since  1.0.0
1053
+     * @return bool
1054
+     */
1055
+    public function can_cancel() {
1056
+        return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this );
1057
+    }
1058 1058
 
1059 1059
     /**
1060 1060
      * Returns an array of subscription statuses that can be cancelled
@@ -1067,109 +1067,109 @@  discard block
 block discarded – undo
1067 1067
         return apply_filters( 'wpinv_recurring_cancellable_statuses', array( 'active', 'trialling', 'failing' ) );
1068 1068
     }
1069 1069
 
1070
-	/**
1071
-	 * Retrieves the URL to cancel subscription
1072
-	 *
1073
-	 * @since  1.0.0
1074
-	 * @return string
1075
-	 */
1076
-	public function get_cancel_url() {
1077
-		$url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() );
1078
-		return apply_filters( 'wpinv_subscription_cancel_url', $url, $this );
1079
-	}
1080
-
1081
-	/**
1082
-	 * Retrieves the URL to view a subscription
1083
-	 *
1084
-	 * @since  1.0.19
1085
-	 * @return string
1086
-	 */
1087
-	public function get_view_url() {
1088
-
1089
-		$url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
1090
-		$url = add_query_arg( 'subscription', $this->get_id(), $url );
1091
-
1092
-		return apply_filters( 'getpaid_get_subscription_view_url', $url, $this );
1093
-	}
1094
-
1095
-	/**
1096
-	 * Determines if subscription can be manually renewed
1097
-	 *
1098
-	 * This method is filtered by payment gateways in order to return true on subscriptions
1099
-	 * that can be renewed manually
1100
-	 *
1101
-	 * @since  2.5
1102
-	 * @return bool
1103
-	 */
1104
-	public function can_renew() {
1105
-		return apply_filters( 'wpinv_subscription_can_renew', true, $this );
1106
-	}
1107
-
1108
-	/**
1109
-	 * Retrieves the URL to renew a subscription
1110
-	 *
1111
-	 * @since  2.5
1112
-	 * @return string
1113
-	 */
1114
-	public function get_renew_url() {
1115
-		$url = wp_nonce_url(
1070
+    /**
1071
+     * Retrieves the URL to cancel subscription
1072
+     *
1073
+     * @since  1.0.0
1074
+     * @return string
1075
+     */
1076
+    public function get_cancel_url() {
1077
+        $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() );
1078
+        return apply_filters( 'wpinv_subscription_cancel_url', $url, $this );
1079
+    }
1080
+
1081
+    /**
1082
+     * Retrieves the URL to view a subscription
1083
+     *
1084
+     * @since  1.0.19
1085
+     * @return string
1086
+     */
1087
+    public function get_view_url() {
1088
+
1089
+        $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
1090
+        $url = add_query_arg( 'subscription', $this->get_id(), $url );
1091
+
1092
+        return apply_filters( 'getpaid_get_subscription_view_url', $url, $this );
1093
+    }
1094
+
1095
+    /**
1096
+     * Determines if subscription can be manually renewed
1097
+     *
1098
+     * This method is filtered by payment gateways in order to return true on subscriptions
1099
+     * that can be renewed manually
1100
+     *
1101
+     * @since  2.5
1102
+     * @return bool
1103
+     */
1104
+    public function can_renew() {
1105
+        return apply_filters( 'wpinv_subscription_can_renew', true, $this );
1106
+    }
1107
+
1108
+    /**
1109
+     * Retrieves the URL to renew a subscription
1110
+     *
1111
+     * @since  2.5
1112
+     * @return string
1113
+     */
1114
+    public function get_renew_url() {
1115
+        $url = wp_nonce_url(
1116 1116
             add_query_arg(
1117 1117
                 array(
1118
-					'getpaid-action' => 'renew_subscription',
1119
-					'sub_id'         => $this->get_id,
1118
+                    'getpaid-action' => 'renew_subscription',
1119
+                    'sub_id'         => $this->get_id,
1120 1120
                 )
1121 1121
             ),
1122 1122
             'getpaid-nonce'
1123 1123
         );
1124
-		return apply_filters( 'wpinv_subscription_renew_url', $url, $this );
1125
-	}
1126
-
1127
-	/**
1128
-	 * Determines if subscription can have their payment method updated
1129
-	 *
1130
-	 * @since  1.0.0
1131
-	 * @return bool
1132
-	 */
1133
-	public function can_update() {
1134
-		return apply_filters( 'wpinv_subscription_can_update', false, $this );
1135
-	}
1136
-
1137
-	/**
1138
-	 * Retrieves the URL to update subscription
1139
-	 *
1140
-	 * @since  1.0.0
1141
-	 * @return string
1142
-	 */
1143
-	public function get_update_url() {
1144
-		$url = add_query_arg(
1124
+        return apply_filters( 'wpinv_subscription_renew_url', $url, $this );
1125
+    }
1126
+
1127
+    /**
1128
+     * Determines if subscription can have their payment method updated
1129
+     *
1130
+     * @since  1.0.0
1131
+     * @return bool
1132
+     */
1133
+    public function can_update() {
1134
+        return apply_filters( 'wpinv_subscription_can_update', false, $this );
1135
+    }
1136
+
1137
+    /**
1138
+     * Retrieves the URL to update subscription
1139
+     *
1140
+     * @since  1.0.0
1141
+     * @return string
1142
+     */
1143
+    public function get_update_url() {
1144
+        $url = add_query_arg(
1145 1145
             array(
1146
-				'action'          => 'update',
1147
-				'subscription_id' => $this->get_id(),
1146
+                'action'          => 'update',
1147
+                'subscription_id' => $this->get_id(),
1148 1148
             )
1149 1149
         );
1150
-		return apply_filters( 'wpinv_subscription_update_url', $url, $this );
1151
-	}
1152
-
1153
-	/**
1154
-	 * Retrieves the subscription status label
1155
-	 *
1156
-	 * @since  1.0.0
1157
-	 * @return string
1158
-	 */
1159
-	public function get_status_label() {
1160
-		return getpaid_get_subscription_status_label( $this->get_status() );
1161
-	}
1162
-
1163
-	/**
1164
-	 * Retrieves the subscription status class
1165
-	 *
1166
-	 * @since  1.0.19
1167
-	 * @return string
1168
-	 */
1169
-	public function get_status_class() {
1170
-		$statuses = getpaid_get_subscription_status_classes();
1171
-		return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark';
1172
-	}
1150
+        return apply_filters( 'wpinv_subscription_update_url', $url, $this );
1151
+    }
1152
+
1153
+    /**
1154
+     * Retrieves the subscription status label
1155
+     *
1156
+     * @since  1.0.0
1157
+     * @return string
1158
+     */
1159
+    public function get_status_label() {
1160
+        return getpaid_get_subscription_status_label( $this->get_status() );
1161
+    }
1162
+
1163
+    /**
1164
+     * Retrieves the subscription status class
1165
+     *
1166
+     * @since  1.0.19
1167
+     * @return string
1168
+     */
1169
+    public function get_status_class() {
1170
+        $statuses = getpaid_get_subscription_status_classes();
1171
+        return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark';
1172
+    }
1173 1173
 
1174 1174
     /**
1175 1175
      * Retrieves the subscription status label
@@ -1179,11 +1179,11 @@  discard block
 block discarded – undo
1179 1179
      */
1180 1180
     public function get_status_label_html() {
1181 1181
 
1182
-		$status_label = sanitize_text_field( $this->get_status_label() );
1183
-		$class        = esc_attr( $this->get_status_class() );
1184
-		$status       = sanitize_html_class( $this->get_status() );
1182
+        $status_label = sanitize_text_field( $this->get_status_label() );
1183
+        $class        = esc_attr( $this->get_status_class() );
1184
+        $status       = sanitize_html_class( $this->get_status() );
1185 1185
 
1186
-		return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
1186
+        return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
1187 1187
     }
1188 1188
 
1189 1189
     /**
@@ -1194,75 +1194,75 @@  discard block
 block discarded – undo
1194 1194
      * @return bool
1195 1195
      */
1196 1196
     public function payment_exists( $txn_id = '' ) {
1197
-		$invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' );
1197
+        $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' );
1198 1198
         return ! empty( $invoice_id );
1199
-	}
1200
-
1201
-	/**
1202
-	 * Handle the status transition.
1203
-	 */
1204
-	protected function status_transition() {
1205
-		$status_transition = $this->status_transition;
1206
-
1207
-		// Reset status transition variable.
1208
-		$this->status_transition = false;
1209
-
1210
-		if ( $status_transition ) {
1211
-			try {
1212
-
1213
-				// Fire a hook for the status change.
1214
-				do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition );
1215
-				do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition );
1216
-
1217
-				if ( ! empty( $status_transition['from'] ) ) {
1218
-
1219
-					/* translators: 1: old subscription status 2: new subscription status */
1220
-					$transition_note = sprintf( __( 'Subscription status changed from %1$s to %2$s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['from'] ), getpaid_get_subscription_status_label( $status_transition['to'] ) );
1221
-
1222
-					// Note the transition occurred.
1223
-					$this->get_parent_payment()->add_note( $transition_note, false, false, true );
1224
-
1225
-					// Fire another hook.
1226
-					do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this );
1227
-					do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] );
1228
-
1229
-				} else {
1230
-					/* translators: %s: new invoice status */
1231
-					$transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) );
1232
-
1233
-					// Note the transition occurred.
1234
-					$this->get_parent_payment()->add_note( $transition_note, false, false, true );
1235
-
1236
-				}
1237
-			} catch ( Exception $e ) {
1238
-				$this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
1239
-			}
1240
-		}
1241
-
1242
-	}
1243
-
1244
-	/**
1245
-	 * Save data to the database.
1246
-	 *
1247
-	 * @since 1.0.19
1248
-	 * @return int subscription ID
1249
-	 */
1250
-	public function save() {
1251
-		parent::save();
1252
-		$this->status_transition();
1253
-		return $this->get_id();
1254
-	}
1255
-
1256
-	/**
1257
-	 * Activates a subscription.
1258
-	 *
1259
-	 * @since 1.0.19
1260
-	 * @return int subscription ID
1261
-	 */
1262
-	public function activate() {
1263
-		$status = 'trialling' === $this->get_status() ? 'trialling' : 'active';
1264
-		$this->set_status( $status );
1265
-		return $this->save();
1266
-	}
1199
+    }
1200
+
1201
+    /**
1202
+     * Handle the status transition.
1203
+     */
1204
+    protected function status_transition() {
1205
+        $status_transition = $this->status_transition;
1206
+
1207
+        // Reset status transition variable.
1208
+        $this->status_transition = false;
1209
+
1210
+        if ( $status_transition ) {
1211
+            try {
1212
+
1213
+                // Fire a hook for the status change.
1214
+                do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition );
1215
+                do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition );
1216
+
1217
+                if ( ! empty( $status_transition['from'] ) ) {
1218
+
1219
+                    /* translators: 1: old subscription status 2: new subscription status */
1220
+                    $transition_note = sprintf( __( 'Subscription status changed from %1$s to %2$s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['from'] ), getpaid_get_subscription_status_label( $status_transition['to'] ) );
1221
+
1222
+                    // Note the transition occurred.
1223
+                    $this->get_parent_payment()->add_note( $transition_note, false, false, true );
1224
+
1225
+                    // Fire another hook.
1226
+                    do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this );
1227
+                    do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] );
1228
+
1229
+                } else {
1230
+                    /* translators: %s: new invoice status */
1231
+                    $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), getpaid_get_subscription_status_label( $status_transition['to'] ) );
1232
+
1233
+                    // Note the transition occurred.
1234
+                    $this->get_parent_payment()->add_note( $transition_note, false, false, true );
1235
+
1236
+                }
1237
+            } catch ( Exception $e ) {
1238
+                $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
1239
+            }
1240
+        }
1241
+
1242
+    }
1243
+
1244
+    /**
1245
+     * Save data to the database.
1246
+     *
1247
+     * @since 1.0.19
1248
+     * @return int subscription ID
1249
+     */
1250
+    public function save() {
1251
+        parent::save();
1252
+        $this->status_transition();
1253
+        return $this->get_id();
1254
+    }
1255
+
1256
+    /**
1257
+     * Activates a subscription.
1258
+     *
1259
+     * @since 1.0.19
1260
+     * @return int subscription ID
1261
+     */
1262
+    public function activate() {
1263
+        $status = 'trialling' === $this->get_status() ? 'trialling' : 'active';
1264
+        $this->set_status( $status );
1265
+        return $this->save();
1266
+    }
1267 1267
 
1268 1268
 }
Please login to merge, or discard this patch.
includes/class-getpaid-subscription-notification-emails.php 1 patch
Indentation   +269 added lines, -269 removed lines patch added patch discarded remove patch
@@ -13,311 +13,311 @@
 block discarded – undo
13 13
 class GetPaid_Subscription_Notification_Emails {
14 14
 
15 15
     /**
16
-	 * The array of subscription email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $subscription_actions;
16
+     * The array of subscription email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $subscription_actions;
21 21
 
22 22
     /**
23
-	 * Class constructor
23
+     * Class constructor
24 24
      *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->subscription_actions = apply_filters(
29
-			'getpaid_notification_email_subscription_triggers',
30
-			array(
31
-				'getpaid_subscription_trialling' => 'subscription_trial',
32
-				'getpaid_subscription_cancelled' => 'subscription_cancelled',
33
-				'getpaid_subscription_expired'   => 'subscription_expired',
34
-				'getpaid_subscription_completed' => 'subscription_complete',
35
-				'getpaid_daily_maintenance'      => 'renewal_reminder',
36
-			)
37
-		);
38
-
39
-		$this->init_hooks();
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->subscription_actions = apply_filters(
29
+            'getpaid_notification_email_subscription_triggers',
30
+            array(
31
+                'getpaid_subscription_trialling' => 'subscription_trial',
32
+                'getpaid_subscription_cancelled' => 'subscription_cancelled',
33
+                'getpaid_subscription_expired'   => 'subscription_expired',
34
+                'getpaid_subscription_completed' => 'subscription_complete',
35
+                'getpaid_daily_maintenance'      => 'renewal_reminder',
36
+            )
37
+        );
38
+
39
+        $this->init_hooks();
40 40
 
41 41
     }
42 42
 
43 43
     /**
44
-	 * Registers email hooks.
45
-	 */
46
-	public function init_hooks() {
47
-
48
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 );
49
-		foreach ( $this->subscription_actions as $hook => $email_type ) {
50
-
51
-			$email = new GetPaid_Notification_Email( $email_type );
52
-
53
-			if ( ! $email->is_active() ) {
54
-				continue;
55
-			}
56
-
57
-			if ( method_exists( $this, $email_type ) ) {
58
-				add_action( $hook, array( $this, $email_type ), 100, 2 );
59
-				continue;
60
-			}
61
-
62
-			do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook );
63
-
64
-		}
65
-
66
-	}
67
-
68
-	/**
69
-	 * Filters subscription merge tags.
70
-	 *
71
-	 * @param array $merge_tags
72
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
73
-	 */
74
-	public function subscription_merge_tags( $merge_tags, $object ) {
75
-
76
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
77
-			$merge_tags = array_merge(
78
-				$merge_tags,
79
-				$this->get_subscription_merge_tags( $object )
80
-			);
81
-		}
82
-
83
-		return $merge_tags;
84
-
85
-	}
86
-
87
-	/**
88
-	 * Generates subscription merge tags.
89
-	 *
90
-	 * @param WPInv_Subscription $subscription
91
-	 * @return array
92
-	 */
93
-	public function get_subscription_merge_tags( $subscription ) {
94
-
95
-		// Abort if it does not exist.
96
-		if ( ! $subscription->get_id() ) {
97
-			return array();
98
-		}
99
-
100
-		$invoice    = $subscription->get_parent_invoice();
101
-		return array(
102
-			'{subscription_renewal_date}'     => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ),
103
-			'{subscription_created}'          => getpaid_format_date_value( $subscription->get_date_created() ),
104
-			'{subscription_status}'           => sanitize_text_field( $subscription->get_status_label() ),
105
-			'{subscription_profile_id}'       => sanitize_text_field( $subscription->get_profile_id() ),
106
-			'{subscription_id}'               => absint( $subscription->get_id() ),
107
-			'{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ),
108
-			'{subscription_initial_amount}'   => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ),
109
-			'{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ),
110
-			'{subscription_bill_times}'       => $subscription->get_bill_times(),
111
-			'{subscription_url}'              => esc_url( $subscription->get_view_url() ),
112
-		);
113
-
114
-	}
115
-
116
-	/**
117
-	 * Checks if we should send a notification for a subscription.
118
-	 *
119
-	 * @param WPInv_Invoice $invoice
120
-	 * @return bool
121
-	 */
122
-	public function should_send_notification( $invoice ) {
123
-		return 0 != $invoice->get_id();
124
-	}
125
-
126
-	/**
127
-	 * Returns notification recipients.
128
-	 *
129
-	 * @param WPInv_Invoice $invoice
130
-	 * @return array
131
-	 */
132
-	public function get_recipients( $invoice ) {
133
-		$recipients = array( $invoice->get_email() );
134
-
135
-		$cc = $invoice->get_email_cc();
136
-
137
-		if ( ! empty( $cc ) ) {
138
-			$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
139
-			$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
140
-		}
141
-
142
-		return $recipients;
143
-	}
144
-
145
-	/**
146
-	 * Helper function to send an email.
147
-	 *
148
-	 * @param WPInv_Subscription $subscription
149
-	 * @param GetPaid_Notification_Email $email
150
-	 * @param string $type
151
-	 * @param array $extra_args Extra template args.
152
-	 */
153
-	public function send_email( $subscription, $email, $type, $extra_args = array() ) {
154
-
155
-		if ( empty( $subscription ) ) {
156
-			return;
157
-		}
158
-
159
-		if ( is_array( $subscription ) ) {
160
-			$subscription = current( $subscription );
161
-		}
162
-
163
-		if ( ! $subscription instanceof WPInv_Subscription ) {
164
-			return;
165
-		}
166
-
167
-		// Abort in case the parent invoice does not exist.
168
-		$invoice = $subscription->get_parent_invoice();
169
-		if ( ! $this->should_send_notification( $invoice ) ) {
170
-			return;
171
-		}
172
-
173
-		if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
174
-			return;
175
-		}
176
-
177
-		do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
178
-
179
-		$recipients  = $this->get_recipients( $invoice );
180
-		$mailer      = new GetPaid_Notification_Email_Sender();
181
-		$merge_tags  = $email->get_merge_tags();
182
-		$content     = $email->get_content( $merge_tags, $extra_args );
183
-		$subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
184
-		$attachments = $email->get_attachments();
185
-
186
-		$result = $mailer->send(
187
-			apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
188
-			$subject,
189
-			$content,
190
-			$attachments
191
-		);
192
-
193
-		// Maybe send a copy to the admin.
194
-		if ( $email->include_admin_bcc() ) {
195
-			$mailer->send(
196
-				wpinv_get_admin_email(),
197
-				$subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
198
-				$content,
199
-				$attachments
200
-			);
201
-		}
202
-
203
-		if ( $result ) {
204
-			$invoice->add_system_note(
205
-				sprintf(
206
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
207
-					sanitize_key( $type ),
208
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
209
-				)
210
-			);
211
-		} else {
212
-			$invoice->add_system_note(
213
-				sprintf(
214
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
215
-					sanitize_key( $type ),
216
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
217
-				)
218
-			);
219
-		}
220
-
221
-		do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
222
-
223
-	}
44
+     * Registers email hooks.
45
+     */
46
+    public function init_hooks() {
47
+
48
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 );
49
+        foreach ( $this->subscription_actions as $hook => $email_type ) {
50
+
51
+            $email = new GetPaid_Notification_Email( $email_type );
52
+
53
+            if ( ! $email->is_active() ) {
54
+                continue;
55
+            }
56
+
57
+            if ( method_exists( $this, $email_type ) ) {
58
+                add_action( $hook, array( $this, $email_type ), 100, 2 );
59
+                continue;
60
+            }
61
+
62
+            do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook );
63
+
64
+        }
65
+
66
+    }
224 67
 
225 68
     /**
226
-	 * Sends a new trial notification.
227
-	 *
228
-	 * @param WPInv_Subscription $subscription
229
-	 */
230
-	public function subscription_trial( $subscription ) {
69
+     * Filters subscription merge tags.
70
+     *
71
+     * @param array $merge_tags
72
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
73
+     */
74
+    public function subscription_merge_tags( $merge_tags, $object ) {
231 75
 
232
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
233
-		$this->send_email( $subscription, $email, __FUNCTION__ );
76
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
77
+            $merge_tags = array_merge(
78
+                $merge_tags,
79
+                $this->get_subscription_merge_tags( $object )
80
+            );
81
+        }
234 82
 
235
-	}
83
+        return $merge_tags;
236 84
 
237
-	/**
238
-	 * Sends a cancelled subscription notification.
239
-	 *
240
-	 * @param WPInv_Subscription $subscription
241
-	 */
242
-	public function subscription_cancelled( $subscription ) {
85
+    }
243 86
 
244
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
245
-		$this->send_email( $subscription, $email, __FUNCTION__ );
87
+    /**
88
+     * Generates subscription merge tags.
89
+     *
90
+     * @param WPInv_Subscription $subscription
91
+     * @return array
92
+     */
93
+    public function get_subscription_merge_tags( $subscription ) {
94
+
95
+        // Abort if it does not exist.
96
+        if ( ! $subscription->get_id() ) {
97
+            return array();
98
+        }
99
+
100
+        $invoice    = $subscription->get_parent_invoice();
101
+        return array(
102
+            '{subscription_renewal_date}'     => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ),
103
+            '{subscription_created}'          => getpaid_format_date_value( $subscription->get_date_created() ),
104
+            '{subscription_status}'           => sanitize_text_field( $subscription->get_status_label() ),
105
+            '{subscription_profile_id}'       => sanitize_text_field( $subscription->get_profile_id() ),
106
+            '{subscription_id}'               => absint( $subscription->get_id() ),
107
+            '{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ),
108
+            '{subscription_initial_amount}'   => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ),
109
+            '{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ),
110
+            '{subscription_bill_times}'       => $subscription->get_bill_times(),
111
+            '{subscription_url}'              => esc_url( $subscription->get_view_url() ),
112
+        );
246 113
 
247
-	}
114
+    }
248 115
 
249
-	/**
250
-	 * Sends a subscription expired notification.
251
-	 *
252
-	 * @param WPInv_Subscription $subscription
253
-	 */
254
-	public function subscription_expired( $subscription ) {
116
+    /**
117
+     * Checks if we should send a notification for a subscription.
118
+     *
119
+     * @param WPInv_Invoice $invoice
120
+     * @return bool
121
+     */
122
+    public function should_send_notification( $invoice ) {
123
+        return 0 != $invoice->get_id();
124
+    }
255 125
 
256
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
257
-		$this->send_email( $subscription, $email, __FUNCTION__ );
126
+    /**
127
+     * Returns notification recipients.
128
+     *
129
+     * @param WPInv_Invoice $invoice
130
+     * @return array
131
+     */
132
+    public function get_recipients( $invoice ) {
133
+        $recipients = array( $invoice->get_email() );
258 134
 
259
-	}
135
+        $cc = $invoice->get_email_cc();
260 136
 
261
-	/**
262
-	 * Sends a completed subscription notification.
263
-	 *
264
-	 * @param WPInv_Subscription $subscription
265
-	 */
266
-	public function subscription_complete( $subscription ) {
137
+        if ( ! empty( $cc ) ) {
138
+            $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
139
+            $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
140
+        }
267 141
 
268
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
269
-		$this->send_email( $subscription, $email, __FUNCTION__ );
142
+        return $recipients;
143
+    }
270 144
 
271
-	}
145
+    /**
146
+     * Helper function to send an email.
147
+     *
148
+     * @param WPInv_Subscription $subscription
149
+     * @param GetPaid_Notification_Email $email
150
+     * @param string $type
151
+     * @param array $extra_args Extra template args.
152
+     */
153
+    public function send_email( $subscription, $email, $type, $extra_args = array() ) {
154
+
155
+        if ( empty( $subscription ) ) {
156
+            return;
157
+        }
158
+
159
+        if ( is_array( $subscription ) ) {
160
+            $subscription = current( $subscription );
161
+        }
162
+
163
+        if ( ! $subscription instanceof WPInv_Subscription ) {
164
+            return;
165
+        }
166
+
167
+        // Abort in case the parent invoice does not exist.
168
+        $invoice = $subscription->get_parent_invoice();
169
+        if ( ! $this->should_send_notification( $invoice ) ) {
170
+            return;
171
+        }
172
+
173
+        if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
174
+            return;
175
+        }
176
+
177
+        do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
178
+
179
+        $recipients  = $this->get_recipients( $invoice );
180
+        $mailer      = new GetPaid_Notification_Email_Sender();
181
+        $merge_tags  = $email->get_merge_tags();
182
+        $content     = $email->get_content( $merge_tags, $extra_args );
183
+        $subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
184
+        $attachments = $email->get_attachments();
185
+
186
+        $result = $mailer->send(
187
+            apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
188
+            $subject,
189
+            $content,
190
+            $attachments
191
+        );
192
+
193
+        // Maybe send a copy to the admin.
194
+        if ( $email->include_admin_bcc() ) {
195
+            $mailer->send(
196
+                wpinv_get_admin_email(),
197
+                $subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
198
+                $content,
199
+                $attachments
200
+            );
201
+        }
202
+
203
+        if ( $result ) {
204
+            $invoice->add_system_note(
205
+                sprintf(
206
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
207
+                    sanitize_key( $type ),
208
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
209
+                )
210
+            );
211
+        } else {
212
+            $invoice->add_system_note(
213
+                sprintf(
214
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
215
+                    sanitize_key( $type ),
216
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
217
+                )
218
+            );
219
+        }
220
+
221
+        do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
272 222
 
273
-	/**
274
-	 * Sends a subscription renewal reminder notification.
275
-	 *
276
-	 */
277
-	public function renewal_reminder() {
223
+    }
278 224
 
279
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
225
+    /**
226
+     * Sends a new trial notification.
227
+     *
228
+     * @param WPInv_Subscription $subscription
229
+     */
230
+    public function subscription_trial( $subscription ) {
280 231
 
281
-		// Fetch reminder days.
282
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
232
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
233
+        $this->send_email( $subscription, $email, __FUNCTION__ );
283 234
 
284
-		// Abort if non is set.
285
-		if ( empty( $reminder_days ) ) {
286
-			return;
287
-		}
235
+    }
288 236
 
289
-		// Fetch matching subscriptions.
237
+    /**
238
+     * Sends a cancelled subscription notification.
239
+     *
240
+     * @param WPInv_Subscription $subscription
241
+     */
242
+    public function subscription_cancelled( $subscription ) {
243
+
244
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
245
+        $this->send_email( $subscription, $email, __FUNCTION__ );
246
+
247
+    }
248
+
249
+    /**
250
+     * Sends a subscription expired notification.
251
+     *
252
+     * @param WPInv_Subscription $subscription
253
+     */
254
+    public function subscription_expired( $subscription ) {
255
+
256
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
257
+        $this->send_email( $subscription, $email, __FUNCTION__ );
258
+
259
+    }
260
+
261
+    /**
262
+     * Sends a completed subscription notification.
263
+     *
264
+     * @param WPInv_Subscription $subscription
265
+     */
266
+    public function subscription_complete( $subscription ) {
267
+
268
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
269
+        $this->send_email( $subscription, $email, __FUNCTION__ );
270
+
271
+    }
272
+
273
+    /**
274
+     * Sends a subscription renewal reminder notification.
275
+     *
276
+     */
277
+    public function renewal_reminder() {
278
+
279
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
280
+
281
+        // Fetch reminder days.
282
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
283
+
284
+        // Abort if non is set.
285
+        if ( empty( $reminder_days ) ) {
286
+            return;
287
+        }
288
+
289
+        // Fetch matching subscriptions.
290 290
         $args  = array(
291 291
             'number'             => -1,
292
-			'count_total'        => false,
293
-			'status'             => 'trialling active',
292
+            'count_total'        => false,
293
+            'status'             => 'trialling active',
294 294
             'date_expires_query' => array(
295
-				'relation' => 'OR',
295
+                'relation' => 'OR',
296 296
             ),
297
-		);
297
+        );
298 298
 
299
-		foreach ( $reminder_days as $days ) {
300
-			$date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
299
+        foreach ( $reminder_days as $days ) {
300
+            $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
301 301
 
302
-			$args['date_expires_query'][] = array(
303
-				'year'  => $date['year'],
304
-				'month' => $date['month'],
305
-				'day'   => $date['day'],
306
-			);
302
+            $args['date_expires_query'][] = array(
303
+                'year'  => $date['year'],
304
+                'month' => $date['month'],
305
+                'day'   => $date['day'],
306
+            );
307 307
 
308
-		}
308
+        }
309 309
 
310
-		$subscriptions = new GetPaid_Subscriptions_Query( $args );
310
+        $subscriptions = new GetPaid_Subscriptions_Query( $args );
311 311
 
312 312
         foreach ( $subscriptions->get_results() as $subscription ) {
313 313
 
314
-			// Skip packages.
315
-			if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
316
-				$email->object = $subscription;
317
-            	$this->send_email( $subscription, $email, __FUNCTION__ );
318
-			}
319
-		}
314
+            // Skip packages.
315
+            if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
316
+                $email->object = $subscription;
317
+                $this->send_email( $subscription, $email, __FUNCTION__ );
318
+            }
319
+        }
320 320
 
321
-	}
321
+    }
322 322
 
323 323
 }
Please login to merge, or discard this patch.
includes/class-getpaid-invoice-notification-emails.php 1 patch
Indentation   +428 added lines, -428 removed lines patch added patch discarded remove patch
@@ -12,487 +12,487 @@
 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
-		$payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
-
152
-		if ( is_array( $payment_form_data ) ) {
153
-
154
-			foreach ( $payment_form_data as $label => $value ) {
155
-
156
-				$label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
-				$value = is_array( $value ) ? implode( ', ', $value ) : $value;
158
-
159
-				if ( is_scalar( $value ) ) {
160
-					$merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
-				}
162
-			}
163
-		}
164
-
165
-		return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
-	}
167
-
168
-	/**
169
-	 * Helper function to send an email.
170
-	 *
171
-	 * @param WPInv_Invoice $invoice
172
-	 * @param GetPaid_Notification_Email $email
173
-	 * @param string $type
174
-	 * @param string|array $recipients
175
-	 * @param array $extra_args Extra template args.
176
-	 */
177
-	public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
178
-
179
-		do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
-
181
-		$skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
-		if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
-			return;
184
-		}
185
-
186
-		$mailer     = new GetPaid_Notification_Email_Sender();
187
-		$merge_tags = $email->get_merge_tags();
188
-
189
-		$result = $mailer->send(
190
-			apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
-			$email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
-			$email->get_content( $merge_tags, $extra_args ),
193
-			$email->get_attachments()
194
-		);
195
-
196
-		// Maybe send a copy to the admin.
197
-		if ( $email->include_admin_bcc() ) {
198
-			$mailer->send(
199
-				wpinv_get_admin_email(),
200
-				$email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
-				$email->get_content( $merge_tags ),
202
-				$email->get_attachments()
203
-			);
204
-		}
205
-
206
-		if ( $result ) {
207
-			$invoice->add_system_note(
208
-				sprintf(
209
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
210
-					sanitize_key( $type ),
211
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
212
-				)
213
-			);
214
-		} else {
215
-			$invoice->add_system_note(
216
-				sprintf(
217
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
218
-					sanitize_key( $type ),
219
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
220
-				)
221
-			);
222
-		}
223
-
224
-		do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
225
-
226
-		return $result;
227
-	}
228
-
229
-	/**
230
-	 * Also send emails to any cc users.
231
-	 *
232
-	 * @param array $recipients
233
-	 * @param GetPaid_Notification_Email $email
234
-	 */
235
-	public function filter_email_recipients( $recipients, $email ) {
236
-
237
-		if ( ! $email->is_admin_email() ) {
238
-			$cc   = $email->object->get_email_cc();
239
-			$cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
240
-
241
-			if ( ! empty( $cc ) ) {
242
-				$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
243
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
244
-			}
245
-
246
-			if ( ! empty( $cc_2 ) ) {
247
-				$cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
248
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
249
-			}
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
+        $payment_form_data = $invoice->get_meta( 'payment_form_data', true );
151
+
152
+        if ( is_array( $payment_form_data ) ) {
153
+
154
+            foreach ( $payment_form_data as $label => $value ) {
155
+
156
+                $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
157
+                $value = is_array( $value ) ? implode( ', ', $value ) : $value;
158
+
159
+                if ( is_scalar( $value ) ) {
160
+                    $merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
161
+                }
162
+            }
163
+        }
164
+
165
+        return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
166
+    }
167
+
168
+    /**
169
+     * Helper function to send an email.
170
+     *
171
+     * @param WPInv_Invoice $invoice
172
+     * @param GetPaid_Notification_Email $email
173
+     * @param string $type
174
+     * @param string|array $recipients
175
+     * @param array $extra_args Extra template args.
176
+     */
177
+    public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
178
+
179
+        do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
180
+
181
+        $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
182
+        if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
183
+            return;
184
+        }
185
+
186
+        $mailer     = new GetPaid_Notification_Email_Sender();
187
+        $merge_tags = $email->get_merge_tags();
188
+
189
+        $result = $mailer->send(
190
+            apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
191
+            $email->add_merge_tags( $email->get_subject(), $merge_tags ),
192
+            $email->get_content( $merge_tags, $extra_args ),
193
+            $email->get_attachments()
194
+        );
195
+
196
+        // Maybe send a copy to the admin.
197
+        if ( $email->include_admin_bcc() ) {
198
+            $mailer->send(
199
+                wpinv_get_admin_email(),
200
+                $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
201
+                $email->get_content( $merge_tags ),
202
+                $email->get_attachments()
203
+            );
204
+        }
205
+
206
+        if ( $result ) {
207
+            $invoice->add_system_note(
208
+                sprintf(
209
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
210
+                    sanitize_key( $type ),
211
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
212
+                )
213
+            );
214
+        } else {
215
+            $invoice->add_system_note(
216
+                sprintf(
217
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
218
+                    sanitize_key( $type ),
219
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
220
+                )
221
+            );
222
+        }
223
+
224
+        do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
225
+
226
+        return $result;
227
+    }
228
+
229
+    /**
230
+     * Also send emails to any cc users.
231
+     *
232
+     * @param array $recipients
233
+     * @param GetPaid_Notification_Email $email
234
+     */
235
+    public function filter_email_recipients( $recipients, $email ) {
236
+
237
+        if ( ! $email->is_admin_email() ) {
238
+            $cc   = $email->object->get_email_cc();
239
+            $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
240
+
241
+            if ( ! empty( $cc ) ) {
242
+                $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
243
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
244
+            }
245
+
246
+            if ( ! empty( $cc_2 ) ) {
247
+                $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
248
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
249
+            }
250 250
 }
251 251
 
252
-		return $recipients;
252
+        return $recipients;
253 253
 
254
-	}
254
+    }
255 255
 
256
-	/**
257
-	 * Sends a new invoice notification.
258
-	 *
259
-	 * @param WPInv_Invoice $invoice
260
-	 */
261
-	public function new_invoice( $invoice ) {
256
+    /**
257
+     * Sends a new invoice notification.
258
+     *
259
+     * @param WPInv_Invoice $invoice
260
+     */
261
+    public function new_invoice( $invoice ) {
262 262
 
263
-		// Only send this email for invoices created via the admin page.
264
-		if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
265
-			return;
266
-		}
263
+        // Only send this email for invoices created via the admin page.
264
+        if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
265
+            return;
266
+        }
267 267
 
268
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
269
-		$recipient = wpinv_get_admin_email();
268
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
269
+        $recipient = wpinv_get_admin_email();
270 270
 
271
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
271
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
272 272
 
273
-	}
273
+    }
274 274
 
275
-	/**
276
-	 * Sends a cancelled invoice notification.
277
-	 *
278
-	 * @param WPInv_Invoice $invoice
279
-	 */
280
-	public function cancelled_invoice( $invoice ) {
275
+    /**
276
+     * Sends a cancelled invoice notification.
277
+     *
278
+     * @param WPInv_Invoice $invoice
279
+     */
280
+    public function cancelled_invoice( $invoice ) {
281 281
 
282
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
283
-		$recipient = $invoice->get_email();
282
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
283
+        $recipient = $invoice->get_email();
284 284
 
285
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
286
-	}
285
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
286
+    }
287 287
 
288
-	/**
289
-	 * Sends a failed invoice notification.
290
-	 *
291
-	 * @param WPInv_Invoice $invoice
292
-	 */
293
-	public function failed_invoice( $invoice ) {
288
+    /**
289
+     * Sends a failed invoice notification.
290
+     *
291
+     * @param WPInv_Invoice $invoice
292
+     */
293
+    public function failed_invoice( $invoice ) {
294 294
 
295
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
296
-		$recipient = wpinv_get_admin_email();
295
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
296
+        $recipient = wpinv_get_admin_email();
297 297
 
298
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
298
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
299 299
 
300
-	}
300
+    }
301 301
 
302
-	/**
303
-	 * Sends a notification whenever an invoice is put on hold.
304
-	 *
305
-	 * @param WPInv_Invoice $invoice
306
-	 */
307
-	public function onhold_invoice( $invoice ) {
302
+    /**
303
+     * Sends a notification whenever an invoice is put on hold.
304
+     *
305
+     * @param WPInv_Invoice $invoice
306
+     */
307
+    public function onhold_invoice( $invoice ) {
308 308
 
309
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
310
-		$recipient = $invoice->get_email();
309
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
310
+        $recipient = $invoice->get_email();
311 311
 
312
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
312
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
313 313
 
314
-	}
314
+    }
315 315
 
316
-	/**
317
-	 * Sends a notification whenever an invoice is marked as processing payment.
318
-	 *
319
-	 * @param WPInv_Invoice $invoice
320
-	 */
321
-	public function processing_invoice( $invoice ) {
316
+    /**
317
+     * Sends a notification whenever an invoice is marked as processing payment.
318
+     *
319
+     * @param WPInv_Invoice $invoice
320
+     */
321
+    public function processing_invoice( $invoice ) {
322 322
 
323
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
324
-		$recipient = $invoice->get_email();
323
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
324
+        $recipient = $invoice->get_email();
325 325
 
326
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
326
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
327 327
 
328
-	}
328
+    }
329 329
 
330
-	/**
331
-	 * Sends a notification whenever an invoice is paid.
332
-	 *
333
-	 * @param WPInv_Invoice $invoice
334
-	 */
335
-	public function completed_invoice( $invoice ) {
330
+    /**
331
+     * Sends a notification whenever an invoice is paid.
332
+     *
333
+     * @param WPInv_Invoice $invoice
334
+     */
335
+    public function completed_invoice( $invoice ) {
336 336
 
337
-		// (Maybe) abort if it is a renewal invoice.
338
-		if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
339
-			return;
340
-		}
337
+        // (Maybe) abort if it is a renewal invoice.
338
+        if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
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
-	 * Sends a notification whenever an invoice is refunded.
351
-	 *
352
-	 * @param WPInv_Invoice $invoice
353
-	 */
354
-	public function refunded_invoice( $invoice ) {
349
+    /**
350
+     * Sends a notification whenever an invoice is refunded.
351
+     *
352
+     * @param WPInv_Invoice $invoice
353
+     */
354
+    public function refunded_invoice( $invoice ) {
355 355
 
356
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
357
-		$recipient = $invoice->get_email();
358
-
359
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
356
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
357
+        $recipient = $invoice->get_email();
358
+
359
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
360 360
 
361
-	}
361
+    }
362 362
 
363
-	/**
364
-	 * Notifies a user about new invoices
365
-	 *
366
-	 * @param WPInv_Invoice $invoice
367
-	 * @param bool $force
368
-	 */
369
-	public function user_invoice( $invoice, $force = false ) {
363
+    /**
364
+     * Notifies a user about new invoices
365
+     *
366
+     * @param WPInv_Invoice $invoice
367
+     * @param bool $force
368
+     */
369
+    public function user_invoice( $invoice, $force = false ) {
370 370
 
371
-		if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
372
-			return;
373
-		}
374
-
375
-		// Only send this email for invoices created via the admin page.
376
-		if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
377
-			return;
378
-		}
371
+        if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
372
+            return;
373
+        }
374
+
375
+        // Only send this email for invoices created via the admin page.
376
+        if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
377
+            return;
378
+        }
379 379
 
380
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
381
-		$recipient = $invoice->get_email();
382
-
383
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
380
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
381
+        $recipient = $invoice->get_email();
382
+
383
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
384 384
 
385
-	}
386
-
387
-	/**
388
-	 * Checks if an invoice is a payment form invoice.
389
-	 *
390
-	 * @param int $invoice
391
-	 * @return bool
392
-	 */
393
-	public function is_payment_form_invoice( $invoice ) {
394
-		$is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
395
-		return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
396
-	}
385
+    }
386
+
387
+    /**
388
+     * Checks if an invoice is a payment form invoice.
389
+     *
390
+     * @param int $invoice
391
+     * @return bool
392
+     */
393
+    public function is_payment_form_invoice( $invoice ) {
394
+        $is_payment_form_invoice = empty( $_GET['getpaid-admin-action'] ) && ( 'payment_form' === get_post_meta( $invoice, 'wpinv_created_via', true ) || 'geodirectory' === get_post_meta( $invoice, 'wpinv_created_via', true ) );
395
+        return apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
396
+    }
397 397
 
398
-	/**
399
-	 * Notifies admin about new invoice notes
400
-	 *
401
-	 * @param WPInv_Invoice $invoice
402
-	 * @param string $note
403
-	 */
404
-	public function user_note( $invoice, $note ) {
405
-
406
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
407
-		$recipient = $invoice->get_email();
398
+    /**
399
+     * Notifies admin about new invoice notes
400
+     *
401
+     * @param WPInv_Invoice $invoice
402
+     * @param string $note
403
+     */
404
+    public function user_note( $invoice, $note ) {
405
+
406
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
407
+        $recipient = $invoice->get_email();
408 408
 
409
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
410
-
411
-	}
412
-
413
-	/**
414
-	 * (Force) Sends overdue notices.
415
-	 *
416
-	 * @param WPInv_Invoice $invoice
417
-	 */
418
-	public function force_send_overdue_notice( $invoice ) {
419
-		$email = new GetPaid_Notification_Email( 'overdue', $invoice );
420
-		return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
421
-	}
422
-
423
-	/**
424
-	 * Sends overdue notices.
425
-	 *
426
-	 * @TODO: Create an invoices query class.
427
-	 */
428
-	public function overdue() {
429
-		global $wpdb;
430
-
431
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
432
-
433
-		// Fetch reminder days.
434
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
435
-
436
-		// Abort if non is set.
437
-		if ( empty( $reminder_days ) ) {
438
-			return;
439
-		}
440
-
441
-		// Retrieve date query.
442
-		$date_query = $this->get_date_query( $reminder_days );
443
-
444
-		// Invoices table.
445
-		$table = $wpdb->prefix . 'getpaid_invoices';
446
-
447
-		// Fetch invoices.
448
-		$invoices  = $wpdb->get_col(
449
-			"SELECT posts.ID FROM $wpdb->posts as posts
409
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
410
+
411
+    }
412
+
413
+    /**
414
+     * (Force) Sends overdue notices.
415
+     *
416
+     * @param WPInv_Invoice $invoice
417
+     */
418
+    public function force_send_overdue_notice( $invoice ) {
419
+        $email = new GetPaid_Notification_Email( 'overdue', $invoice );
420
+        return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
421
+    }
422
+
423
+    /**
424
+     * Sends overdue notices.
425
+     *
426
+     * @TODO: Create an invoices query class.
427
+     */
428
+    public function overdue() {
429
+        global $wpdb;
430
+
431
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
432
+
433
+        // Fetch reminder days.
434
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
435
+
436
+        // Abort if non is set.
437
+        if ( empty( $reminder_days ) ) {
438
+            return;
439
+        }
440
+
441
+        // Retrieve date query.
442
+        $date_query = $this->get_date_query( $reminder_days );
443
+
444
+        // Invoices table.
445
+        $table = $wpdb->prefix . 'getpaid_invoices';
446
+
447
+        // Fetch invoices.
448
+        $invoices  = $wpdb->get_col(
449
+            "SELECT posts.ID FROM $wpdb->posts as posts
450 450
 			LEFT JOIN $table as invoices ON invoices.post_id = posts.ID
451 451
 			WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query"
452 452
         );
453 453
 
454
-		foreach ( $invoices as $invoice ) {
454
+        foreach ( $invoices as $invoice ) {
455 455
 
456
-			// Only send this email for invoices created via the admin page.
457
-			if ( ! $this->is_payment_form_invoice( $invoice ) ) {
458
-				$invoice       = new WPInv_Invoice( $invoice );
459
-				$email->object = $invoice;
456
+            // Only send this email for invoices created via the admin page.
457
+            if ( ! $this->is_payment_form_invoice( $invoice ) ) {
458
+                $invoice       = new WPInv_Invoice( $invoice );
459
+                $email->object = $invoice;
460 460
 
461
-				if ( $invoice->needs_payment() ) {
462
-					$this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
463
-				}
461
+                if ( $invoice->needs_payment() ) {
462
+                    $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
463
+                }
464 464
 }
465 465
 }
466 466
 
467
-	}
467
+    }
468 468
 
469
-	/**
470
-	 * Calculates the date query for an invoices query
471
-	 *
472
-	 * @param array $reminder_days
473
-	 * @return string
474
-	 */
475
-	public function get_date_query( $reminder_days ) {
469
+    /**
470
+     * Calculates the date query for an invoices query
471
+     *
472
+     * @param array $reminder_days
473
+     * @return string
474
+     */
475
+    public function get_date_query( $reminder_days ) {
476 476
 
477
-		$date_query = array(
478
-			'relation' => 'OR',
479
-		);
477
+        $date_query = array(
478
+            'relation' => 'OR',
479
+        );
480 480
 
481
-		foreach ( $reminder_days as $days ) {
482
-			$date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
481
+        foreach ( $reminder_days as $days ) {
482
+            $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
483 483
 
484
-			$date_query[] = array(
485
-				'year'  => $date['year'],
486
-				'month' => $date['month'],
487
-				'day'   => $date['day'],
488
-			);
484
+            $date_query[] = array(
485
+                'year'  => $date['year'],
486
+                'month' => $date['month'],
487
+                'day'   => $date['day'],
488
+            );
489 489
 
490
-		}
490
+        }
491 491
 
492
-		$date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
492
+        $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
493 493
 
494
-		return $date_query->get_sql();
494
+        return $date_query->get_sql();
495 495
 
496
-	}
496
+    }
497 497
 
498 498
 }
Please login to merge, or discard this patch.
templates/invoice/line-totals.php 1 patch
Indentation   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -39,40 +39,40 @@
 block discarded – undo
39 39
                                 if ( 'tax' === $key ) {
40 40
                                     wpinv_the_price( $invoice->get_total_tax(), $invoice->get_currency() );
41 41
 
42
-								if ( wpinv_use_taxes() && ! $invoice->get_disable_taxes() ) {
42
+                                if ( wpinv_use_taxes() && ! $invoice->get_disable_taxes() ) {
43 43
 
44
-									$taxes = $invoice->get_total_tax();
45
-									if ( empty( $taxes ) && GetPaid_Payment_Form_Submission_Taxes::is_eu_transaction( $invoice->get_country() ) ) {
46
-										echo ' <em class="text-muted small">';
47
-										_x( '(Reverse charged)', 'This is a legal term for reverse charging tax in the EU', 'invoicing' );
48
-										echo '</em>';
44
+                                    $taxes = $invoice->get_total_tax();
45
+                                    if ( empty( $taxes ) && GetPaid_Payment_Form_Submission_Taxes::is_eu_transaction( $invoice->get_country() ) ) {
46
+                                        echo ' <em class="text-muted small">';
47
+                                        _x( '(Reverse charged)', 'This is a legal term for reverse charging tax in the EU', 'invoicing' );
48
+                                        echo '</em>';
49 49
                                     }
50 50
 }
51 51
 }
52 52
 
53 53
                                 // Total Fee.
54 54
                                 if ( 'fee' === $key ) {
55
-								wpinv_the_price( $invoice->get_total_fees(), $invoice->get_currency() );
55
+                                wpinv_the_price( $invoice->get_total_fees(), $invoice->get_currency() );
56 56
                                 }
57 57
 
58 58
                                 // Total discount.
59 59
                                 if ( 'discount' === $key ) {
60
-								wpinv_the_price( $invoice->get_total_discount(), $invoice->get_currency() );
60
+                                wpinv_the_price( $invoice->get_total_discount(), $invoice->get_currency() );
61 61
                                 }
62 62
 
63 63
                                 // Shipping.
64 64
                                 if ( 'shipping' === $key ) {
65
-								wpinv_the_price( $invoice->get_shipping(), $invoice->get_currency() );
65
+                                wpinv_the_price( $invoice->get_shipping(), $invoice->get_currency() );
66 66
                                 }
67 67
 
68 68
                                 // Sub total.
69 69
                                 if ( 'subtotal' === $key ) {
70
-								wpinv_the_price( $invoice->get_subtotal(), $invoice->get_currency() );
70
+                                wpinv_the_price( $invoice->get_subtotal(), $invoice->get_currency() );
71 71
                                 }
72 72
 
73 73
                                 // Total.
74 74
                                 if ( 'total' === $key ) {
75
-								wpinv_the_price( $invoice->get_total(), $invoice->get_currency() );
75
+                                wpinv_the_price( $invoice->get_total(), $invoice->get_currency() );
76 76
                                 }
77 77
 
78 78
                                 // Fires when printing a cart total.
Please login to merge, or discard this patch.
includes/admin/register-settings.php 1 patch
Indentation   +309 added lines, -309 removed lines patch added patch discarded remove patch
@@ -192,13 +192,13 @@  discard block
 block discarded – undo
192 192
     $name       = isset( $option['name'] ) ? $option['name'] : '';
193 193
     $cb         = "wpinv_{$option['type']}_callback";
194 194
     $section    = "wpinv_settings_{$tab}_$section";
195
-	$is_wizzard = is_admin() && isset( $_GET['page'] ) && 'gp-setup' == $_GET['page'];
195
+    $is_wizzard = is_admin() && isset( $_GET['page'] ) && 'gp-setup' == $_GET['page'];
196 196
 
197
-	if ( isset( $option['desc'] ) && ( ! $is_wizzard && ! empty( $option['help-tip'] ) ) ) {
198
-		$tip   = wpinv_clean( $option['desc'] );
199
-		$name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
200
-		unset( $option['desc'] );
201
-	}
197
+    if ( isset( $option['desc'] ) && ( ! $is_wizzard && ! empty( $option['help-tip'] ) ) ) {
198
+        $tip   = wpinv_clean( $option['desc'] );
199
+        $name .= "<span class='dashicons dashicons-editor-help wpi-help-tip' title='$tip'></span>";
200
+        unset( $option['desc'] );
201
+    }
202 202
 
203 203
     // Loop through all tabs.
204 204
     add_settings_field(
@@ -225,9 +225,9 @@  discard block
 block discarded – undo
225 225
             'faux'            => isset( $option['faux'] ) ? $option['faux'] : false,
226 226
             'onchange'        => isset( $option['onchange'] ) ? $option['onchange'] : '',
227 227
             'custom'          => isset( $option['custom'] ) ? $option['custom'] : '',
228
-			'default_content' => isset( $option['default_content'] ) ? $option['default_content'] : '',
229
-			'class'           => isset( $option['class'] ) ? $option['class'] : '',
230
-			'style'           => isset( $option['style'] ) ? $option['style'] : '',
228
+            'default_content' => isset( $option['default_content'] ) ? $option['default_content'] : '',
229
+            'class'           => isset( $option['class'] ) ? $option['class'] : '',
230
+            'style'           => isset( $option['style'] ) ? $option['style'] : '',
231 231
             'cols'            => isset( $option['cols'] ) && (int) $option['cols'] > 0 ? (int) $option['cols'] : 50,
232 232
             'rows'            => isset( $option['rows'] ) && (int) $option['rows'] > 0 ? (int) $option['rows'] : 5,
233 233
         )
@@ -241,7 +241,7 @@  discard block
 block discarded – undo
241 241
  * @return array
242 242
  */
243 243
 function wpinv_get_registered_settings() {
244
-	return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
244
+    return array_filter( apply_filters( 'wpinv_registered_settings', wpinv_get_data( 'admin-settings' ) ) );
245 245
 }
246 246
 
247 247
 /**
@@ -260,18 +260,18 @@  discard block
 block discarded – undo
260 260
  */
261 261
 function wpinv_settings_sanitize( $input = array() ) {
262 262
 
263
-	$wpinv_options = wpinv_get_options();
264
-	$raw_referrer  = wp_get_raw_referer();
263
+    $wpinv_options = wpinv_get_options();
264
+    $raw_referrer  = wp_get_raw_referer();
265 265
 
266 266
     if ( empty( $raw_referrer ) ) {
267
-		return array_merge( $wpinv_options, $input );
267
+        return array_merge( $wpinv_options, $input );
268 268
     }
269 269
 
270 270
     wp_parse_str( $raw_referrer, $referrer );
271 271
 
272
-	if ( in_array( 'gp-setup', $referrer ) ) {
273
-		return array_merge( $wpinv_options, $input );
274
-	}
272
+    if ( in_array( 'gp-setup', $referrer ) ) {
273
+        return array_merge( $wpinv_options, $input );
274
+    }
275 275
 
276 276
     $settings = wpinv_get_registered_settings();
277 277
     $tab      = isset( $referrer['tab'] ) ? $referrer['tab'] : 'general';
@@ -293,10 +293,10 @@  discard block
 block discarded – undo
293 293
         }
294 294
 
295 295
         // General filter
296
-		$input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
296
+        $input[ $key ] = apply_filters( 'wpinv_settings_sanitize', $input[ $key ], $key );
297 297
 
298
-		// Key specific filter.
299
-		$input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
298
+        // Key specific filter.
299
+        $input[ $key ] = apply_filters( "wpinv_settings_sanitize_$key", $input[ $key ] );
300 300
     }
301 301
 
302 302
     // Loop through the whitelist and unset any that are empty for the tab being saved
@@ -339,14 +339,14 @@  discard block
 block discarded – undo
339 339
 
340 340
     foreach ( $new_rates as $rate ) {
341 341
 
342
-		$rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
343
-		$rate['name']    = sanitize_text_field( $rate['name'] );
344
-		$rate['state']   = sanitize_text_field( $rate['state'] );
345
-		$rate['country'] = sanitize_text_field( $rate['country'] );
346
-		$rate['global']  = empty( $rate['state'] );
347
-		$tax_rates[]     = $rate;
342
+        $rate['rate']    = wpinv_sanitize_amount( $rate['rate'] );
343
+        $rate['name']    = sanitize_text_field( $rate['name'] );
344
+        $rate['state']   = sanitize_text_field( $rate['state'] );
345
+        $rate['country'] = sanitize_text_field( $rate['country'] );
346
+        $rate['global']  = empty( $rate['state'] );
347
+        $tax_rates[]     = $rate;
348 348
 
349
-	}
349
+    }
350 350
 
351 351
     update_option( 'wpinv_tax_rates', $tax_rates );
352 352
 
@@ -359,21 +359,21 @@  discard block
 block discarded – undo
359 359
         return $input;
360 360
     }
361 361
 
362
-	if ( empty( $_POST['wpinv_tax_rules_nonce'] ) || ! wp_verify_nonce( $_POST['wpinv_tax_rules_nonce'], 'wpinv_tax_rules' ) ) {
363
-		return $input;
364
-	}
362
+    if ( empty( $_POST['wpinv_tax_rules_nonce'] ) || ! wp_verify_nonce( $_POST['wpinv_tax_rules_nonce'], 'wpinv_tax_rules' ) ) {
363
+        return $input;
364
+    }
365 365
 
366 366
     $new_rules = ! empty( $_POST['tax_rules'] ) ? wp_kses_post_deep( array_values( $_POST['tax_rules'] ) ) : array();
367 367
     $tax_rules = array();
368 368
 
369 369
     foreach ( $new_rules as $rule ) {
370 370
 
371
-		$rule['key']      = sanitize_title_with_dashes( $rule['key'] );
372
-		$rule['label']    = sanitize_text_field( $rule['label'] );
373
-		$rule['tax_base'] = sanitize_text_field( $rule['tax_base'] );
374
-		$tax_rules[]      = $rule;
371
+        $rule['key']      = sanitize_title_with_dashes( $rule['key'] );
372
+        $rule['label']    = sanitize_text_field( $rule['label'] );
373
+        $rule['tax_base'] = sanitize_text_field( $rule['tax_base'] );
374
+        $tax_rules[]      = $rule;
375 375
 
376
-	}
376
+    }
377 377
 
378 378
     update_option( 'wpinv_tax_rules', $tax_rules );
379 379
 
@@ -386,11 +386,11 @@  discard block
 block discarded – undo
386 386
     $tabs['general']  = __( 'General', 'invoicing' );
387 387
     $tabs['gateways'] = __( 'Payment Gateways', 'invoicing' );
388 388
     $tabs['taxes']    = __( 'Taxes', 'invoicing' );
389
-	$tabs['emails']   = __( 'Emails', 'invoicing' );
389
+    $tabs['emails']   = __( 'Emails', 'invoicing' );
390 390
 
391
-	if ( count( getpaid_get_integration_settings() ) > 0 ) {
392
-		$tabs['integrations'] = __( 'Integrations', 'invoicing' );
393
-	}
391
+    if ( count( getpaid_get_integration_settings() ) > 0 ) {
392
+        $tabs['integrations'] = __( 'Integrations', 'invoicing' );
393
+    }
394 394
 
395 395
     $tabs['privacy']  = __( 'Privacy', 'invoicing' );
396 396
     $tabs['misc']     = __( 'Misc', 'invoicing' );
@@ -421,53 +421,53 @@  discard block
 block discarded – undo
421 421
         'general'      => apply_filters(
422 422
             'wpinv_settings_sections_general',
423 423
             array(
424
-				'main'             => __( 'General Settings', 'invoicing' ),
425
-				'page_section'     => __( 'Page Settings', 'invoicing' ),
426
-				'currency_section' => __( 'Currency Settings', 'invoicing' ),
427
-				'labels'           => __( 'Label Texts', 'invoicing' ),
424
+                'main'             => __( 'General Settings', 'invoicing' ),
425
+                'page_section'     => __( 'Page Settings', 'invoicing' ),
426
+                'currency_section' => __( 'Currency Settings', 'invoicing' ),
427
+                'labels'           => __( 'Label Texts', 'invoicing' ),
428 428
             )
429 429
         ),
430 430
         'gateways'     => apply_filters(
431 431
             'wpinv_settings_sections_gateways',
432 432
             array(
433
-				'main' => __( 'Gateway Settings', 'invoicing' ),
433
+                'main' => __( 'Gateway Settings', 'invoicing' ),
434 434
             )
435 435
         ),
436 436
         'taxes'        => apply_filters(
437 437
             'wpinv_settings_sections_taxes',
438 438
             array(
439
-				'main'  => __( 'Tax Settings', 'invoicing' ),
440
-				'rules' => __( 'Tax Rules', 'invoicing' ),
441
-				'rates' => __( 'Tax Rates', 'invoicing' ),
442
-				'vat'   => __( 'EU VAT Settings', 'invoicing' ),
439
+                'main'  => __( 'Tax Settings', 'invoicing' ),
440
+                'rules' => __( 'Tax Rules', 'invoicing' ),
441
+                'rates' => __( 'Tax Rates', 'invoicing' ),
442
+                'vat'   => __( 'EU VAT Settings', 'invoicing' ),
443 443
             )
444 444
         ),
445 445
         'emails'       => apply_filters(
446 446
             'wpinv_settings_sections_emails',
447 447
             array(
448
-				'main' => __( 'Email Settings', 'invoicing' ),
448
+                'main' => __( 'Email Settings', 'invoicing' ),
449 449
             )
450 450
         ),
451 451
 
452
-		'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
452
+        'integrations' => wp_list_pluck( getpaid_get_integration_settings(), 'label', 'id' ),
453 453
 
454 454
         'privacy'      => apply_filters(
455 455
             'wpinv_settings_sections_privacy',
456 456
             array(
457
-				'main' => __( 'Privacy policy', 'invoicing' ),
457
+                'main' => __( 'Privacy policy', 'invoicing' ),
458 458
             )
459 459
         ),
460 460
         'misc'         => apply_filters(
461 461
             'wpinv_settings_sections_misc',
462 462
             array(
463
-				'main'       => __( 'Miscellaneous', 'invoicing' ),
464
-				'custom-css' => __( 'Custom CSS', 'invoicing' ),
463
+                'main'       => __( 'Miscellaneous', 'invoicing' ),
464
+                'custom-css' => __( 'Custom CSS', 'invoicing' ),
465 465
             )
466 466
         ),
467 467
         'tools'        => apply_filters(
468 468
             'wpinv_settings_sections_tools',
469 469
             array(
470
-				'main' => __( 'Diagnostic Tools', 'invoicing' ),
470
+                'main' => __( 'Diagnostic Tools', 'invoicing' ),
471 471
             )
472 472
         ),
473 473
     );
@@ -478,46 +478,46 @@  discard block
 block discarded – undo
478 478
 }
479 479
 
480 480
 function wpinv_get_pages( $with_slug = false, $default_label = null ) {
481
-	$pages_options = array();
481
+    $pages_options = array();
482 482
 
483
-	if ( $default_label !== null && $default_label !== false ) {
484
-		$pages_options = array( '' => $default_label ); // Blank option
485
-	}
483
+    if ( $default_label !== null && $default_label !== false ) {
484
+        $pages_options = array( '' => $default_label ); // Blank option
485
+    }
486 486
 
487
-	$pages = get_pages();
488
-	if ( $pages ) {
489
-		foreach ( $pages as $page ) {
490
-			$title = $with_slug ? $page->post_title . ' (' . $page->post_name . ')' : $page->post_title;
487
+    $pages = get_pages();
488
+    if ( $pages ) {
489
+        foreach ( $pages as $page ) {
490
+            $title = $with_slug ? $page->post_title . ' (' . $page->post_name . ')' : $page->post_title;
491 491
             $pages_options[ $page->ID ] = $title;
492
-		}
493
-	}
492
+        }
493
+    }
494 494
 
495
-	return $pages_options;
495
+    return $pages_options;
496 496
 }
497 497
 
498 498
 function wpinv_header_callback( $args ) {
499
-	if ( ! empty( $args['desc'] ) ) {
499
+    if ( ! empty( $args['desc'] ) ) {
500 500
         echo wp_kses_post( $args['desc'] );
501 501
     }
502 502
 }
503 503
 
504 504
 function wpinv_hidden_callback( $args ) {
505 505
 
506
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
507
-	$value   = wpinv_get_option( $args['id'], $std );
506
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
507
+    $value   = wpinv_get_option( $args['id'], $std );
508 508
 
509
-	if ( isset( $args['set_value'] ) ) {
510
-		$value = $args['set_value'];
511
-	}
509
+    if ( isset( $args['set_value'] ) ) {
510
+        $value = $args['set_value'];
511
+    }
512 512
 
513
-	if ( isset( $args['faux'] ) && true === $args['faux'] ) {
514
-		$args['readonly'] = true;
515
-		$name  = '';
516
-	} else {
517
-		$name = 'wpinv_settings[' . esc_attr( $args['id'] ) . ']';
518
-	}
513
+    if ( isset( $args['faux'] ) && true === $args['faux'] ) {
514
+        $args['readonly'] = true;
515
+        $name  = '';
516
+    } else {
517
+        $name = 'wpinv_settings[' . esc_attr( $args['id'] ) . ']';
518
+    }
519 519
 
520
-	echo '<input type="hidden" id="wpinv_settings[' . esc_attr( $args['id'] ) . ']" name="' . esc_attr( $name ) . '" value="' . esc_attr( stripslashes( $value ) ) . '" />';
520
+    echo '<input type="hidden" id="wpinv_settings[' . esc_attr( $args['id'] ) . ']" name="' . esc_attr( $name ) . '" value="' . esc_attr( stripslashes( $value ) ) . '" />';
521 521
 
522 522
 }
523 523
 
@@ -526,12 +526,12 @@  discard block
 block discarded – undo
526 526
  */
527 527
 function wpinv_checkbox_callback( $args ) {
528 528
 
529
-	$std = isset( $args['std'] ) ? $args['std'] : '';
530
-	$std = wpinv_get_option( $args['id'], $std );
531
-	$id  = esc_attr( $args['id'] );
529
+    $std = isset( $args['std'] ) ? $args['std'] : '';
530
+    $std = wpinv_get_option( $args['id'], $std );
531
+    $id  = esc_attr( $args['id'] );
532 532
 
533
-	getpaid_hidden_field( "wpinv_settings[$id]", '0' );
534
-	?>
533
+    getpaid_hidden_field( "wpinv_settings[$id]", '0' );
534
+    ?>
535 535
 		<fieldset>
536 536
 			<label>
537 537
 				<input id="wpinv-settings-<?php echo esc_attr( $id ); ?>" name="wpinv_settings[<?php echo esc_attr( $id ); ?>]" <?php checked( empty( $std ), false ); ?> value="1" type="checkbox" />
@@ -543,75 +543,75 @@  discard block
 block discarded – undo
543 543
 
544 544
 function wpinv_multicheck_callback( $args ) {
545 545
 
546
-	$sanitize_id = wpinv_sanitize_key( $args['id'] );
547
-	$class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
546
+    $sanitize_id = wpinv_sanitize_key( $args['id'] );
547
+    $class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
548 548
 
549
-	if ( ! empty( $args['options'] ) ) {
549
+    if ( ! empty( $args['options'] ) ) {
550 550
 
551
-		$std     = isset( $args['std'] ) ? $args['std'] : array();
552
-		$value   = wpinv_get_option( $args['id'], $std );
551
+        $std     = isset( $args['std'] ) ? $args['std'] : array();
552
+        $value   = wpinv_get_option( $args['id'], $std );
553 553
 
554
-		echo '<div class="wpi-mcheck-rows wpi-mcheck-' . esc_attr( $sanitize_id . $class ) . '">';
554
+        echo '<div class="wpi-mcheck-rows wpi-mcheck-' . esc_attr( $sanitize_id . $class ) . '">';
555 555
         foreach ( $args['options'] as $key => $option ) :
556
-			$sanitize_key = esc_attr( wpinv_sanitize_key( $key ) );
557
-			if ( in_array( $sanitize_key, $value ) ) {
558
-				$enabled = $sanitize_key;
559
-			} else {
560
-				$enabled = null;
561
-			}
562
-			echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
563
-			echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']">' . wp_kses_post( $option ) . '</label></div>';
564
-		endforeach;
565
-		echo '</div>';
566
-		echo '<p class="description">' . wp_kses_post( $args['desc'] ) . '</p>';
567
-	}
556
+            $sanitize_key = esc_attr( wpinv_sanitize_key( $key ) );
557
+            if ( in_array( $sanitize_key, $value ) ) {
558
+                $enabled = $sanitize_key;
559
+            } else {
560
+                $enabled = null;
561
+            }
562
+            echo '<div class="wpi-mcheck-row"><input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $sanitize_key ) . '" ' . checked( $sanitize_key, $enabled, false ) . '/>&nbsp;';
563
+            echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']">' . wp_kses_post( $option ) . '</label></div>';
564
+        endforeach;
565
+        echo '</div>';
566
+        echo '<p class="description">' . wp_kses_post( $args['desc'] ) . '</p>';
567
+    }
568 568
 }
569 569
 
570 570
 function wpinv_payment_icons_callback( $args ) {
571 571
 
572 572
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
573
-	$value   = wpinv_get_option( $args['id'], false );
573
+    $value   = wpinv_get_option( $args['id'], false );
574 574
 
575
-	if ( ! empty( $args['options'] ) ) {
576
-		foreach ( $args['options'] as $key => $option ) {
575
+    if ( ! empty( $args['options'] ) ) {
576
+        foreach ( $args['options'] as $key => $option ) {
577 577
             $sanitize_key = wpinv_sanitize_key( $key );
578 578
 
579
-			if ( empty( $value ) ) {
580
-				$enabled = $option;
581
-			} else {
582
-				$enabled = null;
583
-			}
584
-
585
-			echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
586
-
587
-				echo '<input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
588
-
589
-				if ( wpinv_string_is_image_url( $key ) ) {
590
-				echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
591
-				} else {
592
-				$card = strtolower( str_replace( ' ', '', $option ) );
593
-
594
-				if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
595
-					$image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
596
-					} else {
597
-					$image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
598
-					$content_dir = WP_CONTENT_DIR;
599
-
600
-					if ( function_exists( 'wp_normalize_path' ) ) {
601
-						// Replaces backslashes with forward slashes for Windows systems
602
-						$image = wp_normalize_path( $image );
603
-						$content_dir = wp_normalize_path( $content_dir );
604
-						}
605
-
606
-					$image = str_replace( $content_dir, content_url(), $image );
607
-					}
608
-
609
-				echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
610
-				}
611
-			echo wp_kses_post( $option ) . '</label>';
612
-		}
613
-		echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
614
-	}
579
+            if ( empty( $value ) ) {
580
+                $enabled = $option;
581
+            } else {
582
+                $enabled = null;
583
+            }
584
+
585
+            echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" style="margin-right:10px;line-height:16px;height:16px;display:inline-block;">';
586
+
587
+                echo '<input name="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" id="wpinv_settings[' . esc_attr( $sanitize_id ) . '][' . esc_attr( $sanitize_key ) . ']" type="checkbox" value="' . esc_attr( $option ) . '" ' . checked( $option, $enabled, false ) . '/>&nbsp;';
588
+
589
+                if ( wpinv_string_is_image_url( $key ) ) {
590
+                echo '<img class="payment-icon" src="' . esc_url( $key ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
591
+                } else {
592
+                $card = strtolower( str_replace( ' ', '', $option ) );
593
+
594
+                if ( has_filter( 'wpinv_accepted_payment_' . $card . '_image' ) ) {
595
+                    $image = apply_filters( 'wpinv_accepted_payment_' . $card . '_image', '' );
596
+                    } else {
597
+                    $image       = wpinv_locate_template( 'images' . DIRECTORY_SEPARATOR . 'icons' . DIRECTORY_SEPARATOR . $card . '.gif', false );
598
+                    $content_dir = WP_CONTENT_DIR;
599
+
600
+                    if ( function_exists( 'wp_normalize_path' ) ) {
601
+                        // Replaces backslashes with forward slashes for Windows systems
602
+                        $image = wp_normalize_path( $image );
603
+                        $content_dir = wp_normalize_path( $content_dir );
604
+                        }
605
+
606
+                    $image = str_replace( $content_dir, content_url(), $image );
607
+                    }
608
+
609
+                echo '<img class="payment-icon" src="' . esc_url( $image ) . '" style="width:32px;height:24px;position:relative;top:6px;margin-right:5px;"/>';
610
+                }
611
+            echo wp_kses_post( $option ) . '</label>';
612
+        }
613
+        echo '<p class="description" style="margin-top:16px;">' . wp_kses_post( $args['desc'] ) . '</p>';
614
+    }
615 615
 }
616 616
 
617 617
 /**
@@ -619,9 +619,9 @@  discard block
 block discarded – undo
619 619
  */
620 620
 function wpinv_radio_callback( $args ) {
621 621
 
622
-	$std = isset( $args['std'] ) ? $args['std'] : '';
623
-	$std = wpinv_get_option( $args['id'], $std );
624
-	?>
622
+    $std = isset( $args['std'] ) ? $args['std'] : '';
623
+    $std = wpinv_get_option( $args['id'], $std );
624
+    ?>
625 625
 		<fieldset>
626 626
 			<ul id="wpinv-settings-<?php echo esc_attr( $args['id'] ); ?>" style="margin-top: 0;">
627 627
 				<?php foreach ( $args['options'] as $key => $option ) : ?>
@@ -635,7 +635,7 @@  discard block
 block discarded – undo
635 635
 			</ul>
636 636
 		</fieldset>
637 637
 	<?php
638
-	getpaid_settings_description_callback( $args );
638
+    getpaid_settings_description_callback( $args );
639 639
 }
640 640
 
641 641
 /**
@@ -643,10 +643,10 @@  discard block
 block discarded – undo
643 643
  */
644 644
 function getpaid_settings_description_callback( $args ) {
645 645
 
646
-	if ( ! empty( $args['desc'] ) ) {
647
-		$description = $args['desc'];
648
-		echo wp_kses_post( "<p class='description'>$description</p>" );
649
-	}
646
+    if ( ! empty( $args['desc'] ) ) {
647
+        $description = $args['desc'];
648
+        echo wp_kses_post( "<p class='description'>$description</p>" );
649
+    }
650 650
 
651 651
 }
652 652
 
@@ -655,7 +655,7 @@  discard block
 block discarded – undo
655 655
  */
656 656
 function wpinv_gateways_callback() {
657 657
 
658
-	?>
658
+    ?>
659 659
 		</td>
660 660
 	</tr>
661 661
 	<tr class="bsui">
@@ -669,26 +669,26 @@  discard block
 block discarded – undo
669 669
 
670 670
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
671 671
     $class = ! empty( $args['class'] ) ? ' ' . esc_attr( $args['class'] ) : '';
672
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
673
-	$value   = wpinv_get_option( $args['id'], $std );
672
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
673
+    $value   = wpinv_get_option( $args['id'], $std );
674 674
 
675
-	echo '<select name="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" class="' . esc_attr( $class ) . '" >';
675
+    echo '<select name="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" class="' . esc_attr( $class ) . '" >';
676 676
 
677
-	foreach ( $args['options'] as $key => $option ) :
677
+    foreach ( $args['options'] as $key => $option ) :
678 678
 
679
-		echo '<option value="' . esc_attr( $key ) . '" ';
679
+        echo '<option value="' . esc_attr( $key ) . '" ';
680 680
 
681
-		if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
681
+        if ( isset( $args['selected'] ) && $args['selected'] !== null && $args['selected'] !== false ) {
682 682
             selected( $key, $args['selected'] );
683 683
         } else {
684 684
             selected( $key, $value );
685 685
         }
686 686
 
687
-		echo '>' . esc_html( $option['admin_label'] ) . '</option>';
688
-	endforeach;
687
+        echo '>' . esc_html( $option['admin_label'] ) . '</option>';
688
+    endforeach;
689 689
 
690
-	echo '</select>';
691
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
690
+    echo '</select>';
691
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
692 692
 }
693 693
 
694 694
 /**
@@ -699,38 +699,38 @@  discard block
 block discarded – undo
699 699
  */
700 700
 function wpinv_settings_attrs_helper( $args ) {
701 701
 
702
-	$value = isset( $args['std'] ) ? $args['std'] : '';
703
-	$id    = esc_attr( $args['id'] );
704
-	$value = is_scalar( $value ) ? $value : '';
705
-
706
-	$attrs = array(
707
-		'name'     => ! empty( $args['faux'] ) ? false : "wpinv_settings[$id]",
708
-		'readonly' => ! empty( $args['faux'] ),
709
-		'value'    => ! empty( $args['faux'] ) ? $value : wpinv_get_option( $args['id'], $value ),
710
-		'id'       => 'wpinv-settings-' . $args['id'],
711
-		'style'    => $args['style'],
712
-		'class'    => $args['class'],
713
-		'placeholder' => $args['placeholder'],
714
-		'data-placeholder' => $args['placeholder'],
715
-	);
702
+    $value = isset( $args['std'] ) ? $args['std'] : '';
703
+    $id    = esc_attr( $args['id'] );
704
+    $value = is_scalar( $value ) ? $value : '';
705
+
706
+    $attrs = array(
707
+        'name'     => ! empty( $args['faux'] ) ? false : "wpinv_settings[$id]",
708
+        'readonly' => ! empty( $args['faux'] ),
709
+        'value'    => ! empty( $args['faux'] ) ? $value : wpinv_get_option( $args['id'], $value ),
710
+        'id'       => 'wpinv-settings-' . $args['id'],
711
+        'style'    => $args['style'],
712
+        'class'    => $args['class'],
713
+        'placeholder' => $args['placeholder'],
714
+        'data-placeholder' => $args['placeholder'],
715
+    );
716 716
 
717
-	if ( ! empty( $args['onchange'] ) ) {
718
-		$attrs['onchange'] = $args['onchange'];
719
-	}
717
+    if ( ! empty( $args['onchange'] ) ) {
718
+        $attrs['onchange'] = $args['onchange'];
719
+    }
720 720
 
721
-	foreach ( $attrs as $key => $value ) {
721
+    foreach ( $attrs as $key => $value ) {
722 722
 
723
-		if ( false === $value ) {
724
-			continue;
725
-		}
723
+        if ( false === $value ) {
724
+            continue;
725
+        }
726 726
 
727
-		if ( true === $value ) {
728
-			echo ' ' . esc_attr( $key );
729
-		} else {
730
-			echo ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
731
-		}
727
+        if ( true === $value ) {
728
+            echo ' ' . esc_attr( $key );
729
+        } else {
730
+            echo ' ' . esc_attr( $key ) . '="' . esc_attr( $value ) . '"';
731
+        }
732 732
 
733
-	}
733
+    }
734 734
 
735 735
 }
736 736
 
@@ -739,9 +739,9 @@  discard block
 block discarded – undo
739 739
  */
740 740
 function wpinv_text_callback( $args ) {
741 741
 
742
-	$desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
742
+    $desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
743 743
 
744
-	?>
744
+    ?>
745 745
 		<label style="width: 100%;">
746 746
 			<input type="text" <?php wpinv_settings_attrs_helper( $args ); ?>>
747 747
 			<?php echo wp_kses_post( $desc ); ?>
@@ -755,9 +755,9 @@  discard block
 block discarded – undo
755 755
  */
756 756
 function wpinv_number_callback( $args ) {
757 757
 
758
-	$desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
758
+    $desc = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
759 759
 
760
-	?>
760
+    ?>
761 761
 		<label style="width: 100%;">
762 762
 			<input type="number" step="<?php echo esc_attr( $args['step'] ); ?>" max="<?php echo intval( $args['max'] ); ?>" min="<?php echo intval( $args['min'] ); ?>" <?php wpinv_settings_attrs_helper( $args ); ?>>
763 763
 			<?php echo wp_kses_post( $desc ); ?>
@@ -769,34 +769,34 @@  discard block
 block discarded – undo
769 769
 function wpinv_textarea_callback( $args ) {
770 770
 
771 771
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
772
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
773
-	$value   = wpinv_get_option( $args['id'], $std );
772
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
773
+    $value   = wpinv_get_option( $args['id'], $std );
774 774
 
775 775
     $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
776 776
     $class = ( isset( $args['class'] ) && ! is_null( $args['class'] ) ) ? $args['class'] : 'large-text';
777 777
 
778
-	echo '<textarea class="' . esc_attr( $class ) . ' txtarea-' . esc_attr( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . esc_attr( $args['cols'] ) . '" rows="' . esc_attr( $args['rows'] ) . '" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
779
-	echo '<br /><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
778
+    echo '<textarea class="' . esc_attr( $class ) . ' txtarea-' . esc_attr( $size ) . ' wpi-' . esc_attr( sanitize_html_class( $sanitize_id ) ) . ' " cols="' . esc_attr( $args['cols'] ) . '" rows="' . esc_attr( $args['rows'] ) . '" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
779
+    echo '<br /><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
780 780
 
781 781
 }
782 782
 
783 783
 function wpinv_password_callback( $args ) {
784 784
 
785 785
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
786
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
787
-	$value   = wpinv_get_option( $args['id'], $std );
786
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
787
+    $value   = wpinv_get_option( $args['id'], $std );
788 788
 
789
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
790
-	echo '<input type="password" class="' . esc_attr( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
791
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
789
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
790
+    echo '<input type="password" class="' . esc_attr( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '"/>';
791
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
792 792
 
793 793
 }
794 794
 
795 795
 function wpinv_missing_callback( $args ) {
796
-	printf(
797
-		esc_html__( 'The callback function used for the %s setting is missing.', 'invoicing' ),
798
-		'<strong>' . esc_html( $args['id'] ) . '</strong>'
799
-	);
796
+    printf(
797
+        esc_html__( 'The callback function used for the %s setting is missing.', 'invoicing' ),
798
+        '<strong>' . esc_html( $args['id'] ) . '</strong>'
799
+    );
800 800
 }
801 801
 
802 802
 /**
@@ -804,13 +804,13 @@  discard block
 block discarded – undo
804 804
  */
805 805
 function wpinv_select_callback( $args ) {
806 806
 
807
-	$desc   = wp_kses_post( $args['desc'] );
808
-	$desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
809
-	$value  = isset( $args['std'] ) ? $args['std'] : '';
810
-	$value  = wpinv_get_option( $args['id'], $value );
811
-	$rand   = uniqid( 'random_id' );
807
+    $desc   = wp_kses_post( $args['desc'] );
808
+    $desc   = empty( $desc ) ? '' : "<p class='description'>$desc</p>";
809
+    $value  = isset( $args['std'] ) ? $args['std'] : '';
810
+    $value  = wpinv_get_option( $args['id'], $value );
811
+    $rand   = uniqid( 'random_id' );
812 812
 
813
-	?>
813
+    ?>
814 814
 		<label style="width: 100%;">
815 815
 			<select <?php wpinv_settings_attrs_helper( $args ); ?> data-allow-clear="true">
816 816
 				<?php foreach ( $args['options'] as $option => $name ) : ?>
@@ -843,50 +843,50 @@  discard block
 block discarded – undo
843 843
 function wpinv_color_select_callback( $args ) {
844 844
 
845 845
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
846
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
847
-	$value   = wpinv_get_option( $args['id'], $std );
846
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
847
+    $value   = wpinv_get_option( $args['id'], $std );
848 848
 
849
-	echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
849
+    echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']"/>';
850 850
 
851
-	foreach ( $args['options'] as $option => $color ) {
852
-		echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $color['label'] ) . '</option>';
853
-	}
851
+    foreach ( $args['options'] as $option => $color ) {
852
+        echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $color['label'] ) . '</option>';
853
+    }
854 854
 
855
-	echo '</select>';
856
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
855
+    echo '</select>';
856
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
857 857
 
858 858
 }
859 859
 
860 860
 function wpinv_rich_editor_callback( $args ) {
861
-	global $wp_version;
861
+    global $wp_version;
862 862
 
863 863
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
864 864
 
865
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
866
-	$value   = wpinv_get_option( $args['id'], $std );
865
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
866
+    $value   = wpinv_get_option( $args['id'], $std );
867 867
 
868
-	if ( ! empty( $args['allow_blank'] ) && empty( $value ) ) {
869
-		$value = $std;
870
-	}
868
+    if ( ! empty( $args['allow_blank'] ) && empty( $value ) ) {
869
+        $value = $std;
870
+    }
871 871
 
872
-	$rows = isset( $args['size'] ) ? $args['size'] : 20;
872
+    $rows = isset( $args['size'] ) ? $args['size'] : 20;
873 873
 
874
-	echo '<div class="getpaid-settings-editor-input">';
875
-	if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
876
-		wp_editor(
874
+    echo '<div class="getpaid-settings-editor-input">';
875
+    if ( $wp_version >= 3.3 && function_exists( 'wp_editor' ) ) {
876
+        wp_editor(
877 877
             stripslashes( $value ),
878 878
             'wpinv_settings_' . esc_attr( $args['id'] ),
879 879
             array(
880
-				'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']',
881
-				'textarea_rows' => absint( $rows ),
882
-				'media_buttons' => false,
880
+                'textarea_name' => 'wpinv_settings[' . esc_attr( $args['id'] ) . ']',
881
+                'textarea_rows' => absint( $rows ),
882
+                'media_buttons' => false,
883 883
             )
884 884
         );
885
-	} else {
886
-		echo '<textarea class="large-text" rows="10" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
887
-	}
885
+    } else {
886
+        echo '<textarea class="large-text" rows="10" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="wpi-' . esc_attr( sanitize_html_class( $args['id'] ) ) . '">' . esc_textarea( stripslashes( $value ) ) . '</textarea>';
887
+    }
888 888
 
889
-	echo '</div><br/><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
889
+    echo '</div><br/><label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
890 890
 
891 891
 }
892 892
 
@@ -894,51 +894,51 @@  discard block
 block discarded – undo
894 894
 
895 895
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
896 896
 
897
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
898
-	$value   = wpinv_get_option( $args['id'], $std );
897
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
898
+    $value   = wpinv_get_option( $args['id'], $std );
899 899
 
900
-	$size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
901
-	echo '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
902
-	echo '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . esc_attr__( 'Upload File', 'invoicing' ) . '"/></span>';
903
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
900
+    $size = ( isset( $args['size'] ) && ! is_null( $args['size'] ) ) ? $args['size'] : 'regular';
901
+    echo '<input type="text" class="' . sanitize_html_class( $size ) . '-text" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( stripslashes( $value ) ) . '"/>';
902
+    echo '<span>&nbsp;<input type="button" class="wpinv_settings_upload_button button-secondary" value="' . esc_attr__( 'Upload File', 'invoicing' ) . '"/></span>';
903
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
904 904
 
905 905
 }
906 906
 
907 907
 function wpinv_color_callback( $args ) {
908 908
 
909
-	$std         = isset( $args['std'] ) ? $args['std'] : '';
910
-	$value       = wpinv_get_option( $args['id'], $std );
909
+    $std         = isset( $args['std'] ) ? $args['std'] : '';
910
+    $value       = wpinv_get_option( $args['id'], $std );
911 911
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
912 912
 
913
-	echo '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $std ) . '" />';
914
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
913
+    echo '<input type="text" class="wpinv-color-picker" id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" value="' . esc_attr( $value ) . '" data-default-color="' . esc_attr( $std ) . '" />';
914
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
915 915
 
916 916
 }
917 917
 
918 918
 function wpinv_country_states_callback( $args ) {
919 919
 
920
-	$std     = isset( $args['std'] ) ? $args['std'] : '';
921
-	$value   = wpinv_get_option( $args['id'], $std );
920
+    $std     = isset( $args['std'] ) ? $args['std'] : '';
921
+    $value   = wpinv_get_option( $args['id'], $std );
922 922
 
923 923
     $sanitize_id = wpinv_sanitize_key( $args['id'] );
924 924
 
925
-	if ( isset( $args['placeholder'] ) ) {
926
-		$placeholder = $args['placeholder'];
927
-	} else {
928
-		$placeholder = '';
929
-	}
925
+    if ( isset( $args['placeholder'] ) ) {
926
+        $placeholder = $args['placeholder'];
927
+    } else {
928
+        $placeholder = '';
929
+    }
930 930
 
931
-	$states = wpinv_get_country_states();
931
+    $states = wpinv_get_country_states();
932 932
 
933
-	$class = empty( $states ) ? 'wpinv-no-states' : 'wpi_select2';
934
-	echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="' . esc_attr( $class ) . '" data-placeholder="' . esc_html( $placeholder ) . '"/>';
933
+    $class = empty( $states ) ? 'wpinv-no-states' : 'wpi_select2';
934
+    echo '<select id="wpinv_settings[' . esc_attr( $sanitize_id ) . ']" name="wpinv_settings[' . esc_attr( $args['id'] ) . ']" class="' . esc_attr( $class ) . '" data-placeholder="' . esc_html( $placeholder ) . '"/>';
935 935
 
936
-	foreach ( $states as $option => $name ) {
937
-		echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $name ) . '</option>';
938
-	}
936
+    foreach ( $states as $option => $name ) {
937
+        echo '<option value="' . esc_attr( $option ) . '" ' . selected( $option, $value ) . '>' . esc_html( $name ) . '</option>';
938
+    }
939 939
 
940
-	echo '</select>';
941
-	echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
940
+    echo '</select>';
941
+    echo '<label for="wpinv_settings[' . esc_attr( $sanitize_id ) . ']"> ' . wp_kses_post( $args['desc'] ) . '</label>';
942 942
 
943 943
 }
944 944
 
@@ -947,7 +947,7 @@  discard block
 block discarded – undo
947 947
  */
948 948
 function wpinv_tax_rates_callback() {
949 949
 
950
-	?>
950
+    ?>
951 951
 		</td>
952 952
 	</tr>
953 953
 	<tr class="bsui">
@@ -963,9 +963,9 @@  discard block
 block discarded – undo
963 963
  */
964 964
 function wpinv_tax_rate_callback( $tax_rate, $key ) {
965 965
 
966
-	$key                      = sanitize_key( $key );
967
-	$tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
968
-	include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
966
+    $key                      = sanitize_key( $key );
967
+    $tax_rate['reduced_rate'] = empty( $tax_rate['reduced_rate'] ) ? 0 : $tax_rate['reduced_rate'];
968
+    include plugin_dir_path( __FILE__ ) . 'views/html-tax-rate-edit.php';
969 969
 
970 970
 }
971 971
 
@@ -974,7 +974,7 @@  discard block
 block discarded – undo
974 974
  */
975 975
 function wpinv_tax_rules_callback() {
976 976
 
977
-	?>
977
+    ?>
978 978
 		</td>
979 979
 	</tr>
980 980
 	<tr class="bsui">
@@ -1012,14 +1012,14 @@  discard block
 block discarded – undo
1012 1012
                 <td>
1013 1013
 					<a href="
1014 1014
                     <?php
1015
-						echo esc_url(
1016
-							wp_nonce_url(
1017
-								add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
1018
-								'getpaid-nonce',
1019
-								'getpaid-nonce'
1020
-							)
1021
-						);
1022
-					?>
1015
+                        echo esc_url(
1016
+                            wp_nonce_url(
1017
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
1018
+                                'getpaid-nonce',
1019
+                                'getpaid-nonce'
1020
+                            )
1021
+                        );
1022
+                    ?>
1023 1023
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1024 1024
                 </td>
1025 1025
             </tr>
@@ -1031,14 +1031,14 @@  discard block
 block discarded – undo
1031 1031
                 <td>
1032 1032
 					<a href="
1033 1033
                     <?php
1034
-						echo esc_url(
1035
-							wp_nonce_url(
1036
-								add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1037
-								'getpaid-nonce',
1038
-								'getpaid-nonce'
1039
-							)
1040
-						);
1041
-					?>
1034
+                        echo esc_url(
1035
+                            wp_nonce_url(
1036
+                                add_query_arg( 'getpaid-admin-action', 'create_missing_tables' ),
1037
+                                'getpaid-nonce',
1038
+                                'getpaid-nonce'
1039
+                            )
1040
+                        );
1041
+                    ?>
1042 1042
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1043 1043
                 </td>
1044 1044
             </tr>
@@ -1050,14 +1050,14 @@  discard block
 block discarded – undo
1050 1050
                 <td>
1051 1051
 					<a href="
1052 1052
                     <?php
1053
-						echo esc_url(
1054
-							wp_nonce_url(
1055
-								add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1056
-								'getpaid-nonce',
1057
-								'getpaid-nonce'
1058
-							)
1059
-						);
1060
-					?>
1053
+                        echo esc_url(
1054
+                            wp_nonce_url(
1055
+                                add_query_arg( 'getpaid-admin-action', 'migrate_old_invoices' ),
1056
+                                'getpaid-nonce',
1057
+                                'getpaid-nonce'
1058
+                            )
1059
+                        );
1060
+                    ?>
1061 1061
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1062 1062
                 </td>
1063 1063
             </tr>
@@ -1070,14 +1070,14 @@  discard block
 block discarded – undo
1070 1070
                 <td>
1071 1071
 					<a href="
1072 1072
                     <?php
1073
-						echo esc_url(
1074
-							wp_nonce_url(
1075
-								add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1076
-								'getpaid-nonce',
1077
-								'getpaid-nonce'
1078
-							)
1079
-						);
1080
-					?>
1073
+                        echo esc_url(
1074
+                            wp_nonce_url(
1075
+                                add_query_arg( 'getpaid-admin-action', 'recalculate_discounts' ),
1076
+                                'getpaid-nonce',
1077
+                                'getpaid-nonce'
1078
+                            )
1079
+                        );
1080
+                    ?>
1081 1081
                     " class="button button-primary"><?php esc_html_e( 'Run', 'invoicing' ); ?></a>
1082 1082
                 </td>
1083 1083
             </tr>
@@ -1090,8 +1090,8 @@  discard block
 block discarded – undo
1090 1090
                 <td>
1091 1091
 					<a href="
1092 1092
                     <?php
1093
-						echo esc_url( admin_url( 'index.php?page=gp-setup' ) );
1094
-					?>
1093
+                        echo esc_url( admin_url( 'index.php?page=gp-setup' ) );
1094
+                    ?>
1095 1095
                     " class="button button-primary"><?php esc_html_e( 'Launch', 'invoicing' ); ?></a>
1096 1096
                 </td>
1097 1097
             </tr>
@@ -1105,19 +1105,19 @@  discard block
 block discarded – undo
1105 1105
 
1106 1106
 
1107 1107
 function wpinv_descriptive_text_callback( $args ) {
1108
-	echo wp_kses_post( $args['desc'] );
1108
+    echo wp_kses_post( $args['desc'] );
1109 1109
 }
1110 1110
 
1111 1111
 function wpinv_raw_html_callback( $args ) {
1112
-	echo wp_kses( $args['desc'], getpaid_allowed_html() );
1112
+    echo wp_kses( $args['desc'], getpaid_allowed_html() );
1113 1113
 }
1114 1114
 
1115 1115
 function wpinv_hook_callback( $args ) {
1116
-	do_action( 'wpinv_' . $args['id'], $args );
1116
+    do_action( 'wpinv_' . $args['id'], $args );
1117 1117
 }
1118 1118
 
1119 1119
 function wpinv_set_settings_cap() {
1120
-	return wpinv_get_capability();
1120
+    return wpinv_get_capability();
1121 1121
 }
1122 1122
 add_filter( 'option_page_capability_wpinv_settings', 'wpinv_set_settings_cap' );
1123 1123
 
@@ -1141,15 +1141,15 @@  discard block
 block discarded – undo
1141 1141
  */
1142 1142
 function wpinv_get_merge_tags_help_text( $subscription = false ) {
1143 1143
 
1144
-	$url  = $subscription ? 'https://gist.github.com/picocodes/3d213982d57c34edf7a46fd3f0e8583e' : 'https://gist.github.com/picocodes/43bdc4d4bbba844534b2722e2af0b58f';
1145
-	$link = sprintf(
1146
-		'<strong><a href="%s" target="_blank">%s</a></strong>',
1147
-		$url,
1148
-		esc_html__( 'View available merge tags.', 'wpinv-quotes' )
1149
-	);
1144
+    $url  = $subscription ? 'https://gist.github.com/picocodes/3d213982d57c34edf7a46fd3f0e8583e' : 'https://gist.github.com/picocodes/43bdc4d4bbba844534b2722e2af0b58f';
1145
+    $link = sprintf(
1146
+        '<strong><a href="%s" target="_blank">%s</a></strong>',
1147
+        $url,
1148
+        esc_html__( 'View available merge tags.', 'wpinv-quotes' )
1149
+    );
1150 1150
 
1151
-	$description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1151
+    $description = esc_html__( 'The content of the email (Merge Tags and HTML are allowed).', 'invoicing' );
1152 1152
 
1153
-	return "$description $link";
1153
+    return "$description $link";
1154 1154
 
1155 1155
 }
Please login to merge, or discard this patch.
includes/admin/class-wpinv-customers-table.php 1 patch
Indentation   +368 added lines, -368 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
 
12 12
 // Load WP_List_Table if not loaded
13 13
 if ( ! class_exists( 'WP_List_Table' ) ) {
14
-	require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
14
+    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
15 15
 }
16 16
 
17 17
 /**
@@ -23,375 +23,375 @@  discard block
 block discarded – undo
23 23
  */
24 24
 class WPInv_Customers_Table extends WP_List_Table {
25 25
 
26
-	/**
27
-	 * @var int Number of items per page
28
-	 * @since 1.0.19
29
-	 */
30
-	public $per_page = 10;
31
-
32
-	/**
33
-	 * @var int Number of items
34
-	 * @since 1.0.19
35
-	 */
36
-	public $total = 0;
37
-
38
-	/**
39
-	 * Get things started
40
-	 *
41
-	 * @since 1.0.19
42
-	 * @see WP_List_Table::__construct()
43
-	 */
44
-	public function __construct() {
45
-
46
-		// Set parent defaults
47
-		parent::__construct(
26
+    /**
27
+     * @var int Number of items per page
28
+     * @since 1.0.19
29
+     */
30
+    public $per_page = 10;
31
+
32
+    /**
33
+     * @var int Number of items
34
+     * @since 1.0.19
35
+     */
36
+    public $total = 0;
37
+
38
+    /**
39
+     * Get things started
40
+     *
41
+     * @since 1.0.19
42
+     * @see WP_List_Table::__construct()
43
+     */
44
+    public function __construct() {
45
+
46
+        // Set parent defaults
47
+        parent::__construct(
48 48
             array(
49
-				'singular' => 'id',
50
-				'plural'   => 'ids',
51
-				'ajax'     => false,
49
+                'singular' => 'id',
50
+                'plural'   => 'ids',
51
+                'ajax'     => false,
52 52
             )
53 53
         );
54 54
 
55
-	}
56
-
57
-	/**
58
-	 * Gets the name of the primary column.
59
-	 *
60
-	 * @since 1.0.19
61
-	 * @access protected
62
-	 *
63
-	 * @return string Name of the primary column.
64
-	 */
65
-	protected function get_primary_column_name() {
66
-		return 'name';
67
-	}
68
-
69
-	/**
70
-	 * This function renders most of the columns in the list table.
71
-	 *
72
-	 * @since 1.0.19
73
-	 *
74
-	 * @param WP_User $item
75
-	 * @param string $column_name The name of the column
76
-	 *
77
-	 * @return string Column Name
78
-	 */
79
-	public function column_default( $item, $column_name ) {
80
-		$value = esc_html( get_user_meta( $item->ID, '_wpinv_' . $column_name, true ) );
81
-		return apply_filters( 'wpinv_customers_table_column' . $column_name, $value, $item );
82
-	}
83
-
84
-	/**
85
-	 * Displays the country column.
86
-	 *
87
-	 * @since 1.0.19
88
-	 *
89
-	 * @param WP_User $user
90
-	 *
91
-	 * @return string Column Name
92
-	 */
93
-	public function column_country( $user ) {
94
-		$country = wpinv_sanitize_country( $user->_wpinv_country );
95
-		if ( $country ) {
96
-			$country = wpinv_country_name( $country );
97
-		}
98
-		return esc_html( $country );
99
-	}
100
-
101
-	/**
102
-	 * Displays the state column.
103
-	 *
104
-	 * @since 1.0.19
105
-	 *
106
-	 * @param WP_User $user
107
-	 *
108
-	 * @return string Column Name
109
-	 */
110
-	public function column_state( $user ) {
111
-		$country = wpinv_sanitize_country( $user->_wpinv_country );
112
-		$state   = $user->_wpinv_state;
113
-		if ( $state ) {
114
-			$state = wpinv_state_name( $state, $country );
115
-		}
116
-
117
-		return esc_html( $state );
118
-	}
119
-
120
-	/**
121
-	 * Displays the signup column.
122
-	 *
123
-	 * @since 1.0.19
124
-	 *
125
-	 * @param WP_User $user
126
-	 *
127
-	 * @return string Column Name
128
-	 */
129
-	public function column_signup( $user ) {
130
-		return getpaid_format_date_value( $user->user_registered );
131
-	}
132
-
133
-	/**
134
-	 * Displays the total spent column.
135
-	 *
136
-	 * @since 1.0.19
137
-	 *
138
-	 * @param WP_User $user
139
-	 *
140
-	 * @return string Column Name
141
-	 */
142
-	public function column_total( $user ) {
143
-		return wpinv_price( $this->column_total_raw( $user ) );
144
-	}
145
-
146
-	/**
147
-	 * Displays the total spent column.
148
-	 *
149
-	 * @since 1.0.19
150
-	 *
151
-	 * @param WP_User $user
152
-	 *
153
-	 * @return float
154
-	 */
155
-	public function column_total_raw( $user ) {
156
-
157
-		$args = array(
158
-			'data'           => array(
159
-
160
-				'total' => array(
161
-					'type'     => 'invoice_data',
162
-					'function' => 'SUM',
163
-					'name'     => 'total_sales',
164
-				),
165
-
166
-			),
167
-			'where'          => array(
168
-
169
-				'author' => array(
170
-					'type'     => 'post_data',
171
-					'value'    => absint( $user->ID ),
172
-					'key'      => 'posts.post_author',
173
-					'operator' => '=',
174
-				),
175
-
176
-			),
177
-			'query_type'     => 'get_var',
178
-			'invoice_status' => array( 'wpi-renewal', 'wpi-processing', 'publish' ),
179
-		);
180
-
181
-		return wpinv_round_amount( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
182
-
183
-	}
184
-
185
-	/**
186
-	 * Displays the total spent column.
187
-	 *
188
-	 * @since 1.0.19
189
-	 *
190
-	 * @param WP_User $user
191
-	 *
192
-	 * @return string Column Name
193
-	 */
194
-	public function column_invoices( $user ) {
195
-
196
-		$args = array(
197
-			'data'           => array(
198
-
199
-				'ID' => array(
200
-					'type'     => 'post_data',
201
-					'function' => 'COUNT',
202
-					'name'     => 'count',
203
-					'distinct' => true,
204
-				),
205
-
206
-			),
207
-			'where'          => array(
208
-
209
-				'author' => array(
210
-					'type'     => 'post_data',
211
-					'value'    => absint( $user->ID ),
212
-					'key'      => 'posts.post_author',
213
-					'operator' => '=',
214
-				),
215
-
216
-			),
217
-			'query_type'     => 'get_var',
218
-			'invoice_status' => array_keys( wpinv_get_invoice_statuses() ),
219
-		);
220
-
221
-		$value = absint( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
222
-		$url   = add_query_arg( array( 'post_type' => 'wpi_invoice', 'author' => $user->ID ), admin_url( 'edit.php' ) );
223
-		return empty( $value ) ? '0' : '<a href="' . esc_url( $url ) . '">' . absint( $value ) . '</a>';
224
-
225
-	}
226
-
227
-	/**
228
-	 * Generates content for a single row of the table
229
-	 * @since 1.0.19
230
-	 *
231
-	 * @param int $item The user id.
232
-	 */
233
-	public function single_row( $item ) {
234
-		$item = get_user_by( 'id', $item );
235
-
236
-		if ( empty( $item ) ) {
237
-			return;
238
-		}
239
-
240
-		echo '<tr>';
241
-		$this->single_row_columns( $item );
242
-		echo '</tr>';
243
-	}
244
-
245
-	/**
246
-	 * Displays the customers name
247
-	 *
248
-	 * @param  WP_User $customer customer.
249
-	 * @return string
250
-	 */
251
-	public function column_name( $customer ) {
252
-
253
-		// Customer view URL.
254
-		$view_url    = esc_url( add_query_arg( 'user_id', $customer->ID, admin_url( 'user-edit.php' ) ) );
255
-		$row_actions = $this->row_actions(
256
-			array(
257
-				'view' => '<a href="' . $view_url . '#getpaid-fieldset-billing">' . __( 'Edit Details', 'invoicing' ) . '</a>',
258
-			)
259
-		);
260
-
261
-		// Get user's address.
262
-		$address = wpinv_get_user_address( $customer->ID );
263
-
264
-		// Customer email address.
265
-		$email       = sanitize_email( $customer->user_email );
266
-
267
-		// Customer's avatar.
268
-		$avatar = esc_url( get_avatar_url( $email ) );
269
-		$avatar = "<img src='$avatar' height='32' width='32'/>";
270
-
271
-		// Customer's name.
272
-		$name   = esc_html( "{$address['first_name']} {$address['last_name']}" );
273
-
274
-		if ( empty( trim( $name ) ) ) {
275
-			$name = esc_html( $address['display_name'] );
276
-		}
277
-
278
-		if ( ! empty( $name ) ) {
279
-			$name = "<div style='overflow: hidden;height: 18px;'>$name</div>";
280
-		}
281
-
282
-		$email = "<div class='row-title'><a href='$view_url'>$email</a></div>";
283
-
284
-		return "<div style='display: flex;'><div>$avatar</div><div style='margin-left: 10px;'>$name<strong>$email</strong>$row_actions</div></div>";
285
-
286
-	}
287
-
288
-	/**
289
-	 * Retrieve the table columns
290
-	 *
291
-	 * @since 1.0.19
292
-	 * @return array $columns Array of all the list table columns
293
-	 */
294
-	public function get_columns() {
295
-
296
-		$columns = array(
297
-			'name'     => __( 'Name', 'invoicing' ),
298
-			'country'  => __( 'Country', 'invoicing' ),
299
-			'state'    => __( 'State', 'invoicing' ),
300
-			'city'     => __( 'City', 'invoicing' ),
301
-			'zip'      => __( 'ZIP', 'invoicing' ),
302
-			'address'  => __( 'Address', 'invoicing' ),
303
-			'phone'    => __( 'Phone', 'invoicing' ),
304
-			'company'  => __( 'Company', 'invoicing' ),
305
-			'invoices' => __( 'Invoices', 'invoicing' ),
306
-			'total'    => __( 'Total Spend', 'invoicing' ),
307
-			'signup'   => __( 'Date created', 'invoicing' ),
308
-		);
309
-		return apply_filters( 'wpinv_customers_table_columns', $columns );
310
-
311
-	}
312
-
313
-	/**
314
-	 * Retrieve the current page number
315
-	 *
316
-	 * @since 1.0.19
317
-	 * @return int Current page number
318
-	 */
319
-	public function get_paged() {
320
-		return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
321
-	}
322
-
323
-	/**
324
-	 * Returns bulk actions.
325
-	 *
326
-	 * @since 1.0.19
327
-	 * @return void
328
-	 */
329
-	public function bulk_actions( $which = '' ) {
330
-		return array();
331
-	}
332
-
333
-	/**
334
-	 *  Prepares the display query
335
-	 */
336
-	public function prepare_query() {
337
-		global $wpdb;
338
-
339
-		$post_types = '';
340
-
341
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
342
-			$post_types .= $wpdb->prepare( 'post_type=%s OR ', $post_type );
343
-		}
344
-
345
-		$post_types = rtrim( $post_types, ' OR' );
346
-
347
-		// Maybe search.
348
-		if ( ! empty( $_POST['s'] ) ) {
349
-			$users = get_users(
350
-				array(
351
-					'search'         => '*' . sanitize_text_field( urldecode( $_POST['s'] ) ) . '*',
352
-					'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
353
-					'fields'         => 'ID',
354
-				)
355
-			);
356
-
357
-			$users      = implode( ', ', $users );
358
-			$post_types = "($post_types) AND ( post_author IN ( $users ) )";
359
-		}
360
-
361
-		// Users with invoices.
362
-    	$customers = $wpdb->get_col(
363
-			$wpdb->prepare(
364
-				"SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types LIMIT %d,%d",
365
-				$this->get_paged() * 10 - 10,
366
-				$this->per_page
367
-			)
368
-		);
369
-
370
-		$this->items = $customers;
371
-		$this->total = (int) $wpdb->get_var( "SELECT COUNT( DISTINCT( post_author ) ) FROM $wpdb->posts WHERE $post_types" );
372
-
373
-	}
374
-
375
-	/**
376
-	 * Setup the final data for the table
377
-	 *
378
-	 * @since 1.0.19
379
-	 * @return void
380
-	 */
381
-	public function prepare_items() {
382
-		$columns               = $this->get_columns();
383
-		$hidden                = array(); // No hidden columns
384
-		$sortable              = $this->get_sortable_columns();
385
-		$this->_column_headers = array( $columns, $hidden, $sortable );
386
-		$this->prepare_query();
387
-
388
-		$this->set_pagination_args(
389
-			array(
390
-				'total_items' => $this->total,
391
-				'per_page'    => $this->per_page,
392
-				'total_pages' => ceil( $this->total / $this->per_page ),
393
-			)
394
-		);
395
-
396
-	}
55
+    }
56
+
57
+    /**
58
+     * Gets the name of the primary column.
59
+     *
60
+     * @since 1.0.19
61
+     * @access protected
62
+     *
63
+     * @return string Name of the primary column.
64
+     */
65
+    protected function get_primary_column_name() {
66
+        return 'name';
67
+    }
68
+
69
+    /**
70
+     * This function renders most of the columns in the list table.
71
+     *
72
+     * @since 1.0.19
73
+     *
74
+     * @param WP_User $item
75
+     * @param string $column_name The name of the column
76
+     *
77
+     * @return string Column Name
78
+     */
79
+    public function column_default( $item, $column_name ) {
80
+        $value = esc_html( get_user_meta( $item->ID, '_wpinv_' . $column_name, true ) );
81
+        return apply_filters( 'wpinv_customers_table_column' . $column_name, $value, $item );
82
+    }
83
+
84
+    /**
85
+     * Displays the country column.
86
+     *
87
+     * @since 1.0.19
88
+     *
89
+     * @param WP_User $user
90
+     *
91
+     * @return string Column Name
92
+     */
93
+    public function column_country( $user ) {
94
+        $country = wpinv_sanitize_country( $user->_wpinv_country );
95
+        if ( $country ) {
96
+            $country = wpinv_country_name( $country );
97
+        }
98
+        return esc_html( $country );
99
+    }
100
+
101
+    /**
102
+     * Displays the state column.
103
+     *
104
+     * @since 1.0.19
105
+     *
106
+     * @param WP_User $user
107
+     *
108
+     * @return string Column Name
109
+     */
110
+    public function column_state( $user ) {
111
+        $country = wpinv_sanitize_country( $user->_wpinv_country );
112
+        $state   = $user->_wpinv_state;
113
+        if ( $state ) {
114
+            $state = wpinv_state_name( $state, $country );
115
+        }
116
+
117
+        return esc_html( $state );
118
+    }
119
+
120
+    /**
121
+     * Displays the signup column.
122
+     *
123
+     * @since 1.0.19
124
+     *
125
+     * @param WP_User $user
126
+     *
127
+     * @return string Column Name
128
+     */
129
+    public function column_signup( $user ) {
130
+        return getpaid_format_date_value( $user->user_registered );
131
+    }
132
+
133
+    /**
134
+     * Displays the total spent column.
135
+     *
136
+     * @since 1.0.19
137
+     *
138
+     * @param WP_User $user
139
+     *
140
+     * @return string Column Name
141
+     */
142
+    public function column_total( $user ) {
143
+        return wpinv_price( $this->column_total_raw( $user ) );
144
+    }
145
+
146
+    /**
147
+     * Displays the total spent column.
148
+     *
149
+     * @since 1.0.19
150
+     *
151
+     * @param WP_User $user
152
+     *
153
+     * @return float
154
+     */
155
+    public function column_total_raw( $user ) {
156
+
157
+        $args = array(
158
+            'data'           => array(
159
+
160
+                'total' => array(
161
+                    'type'     => 'invoice_data',
162
+                    'function' => 'SUM',
163
+                    'name'     => 'total_sales',
164
+                ),
165
+
166
+            ),
167
+            'where'          => array(
168
+
169
+                'author' => array(
170
+                    'type'     => 'post_data',
171
+                    'value'    => absint( $user->ID ),
172
+                    'key'      => 'posts.post_author',
173
+                    'operator' => '=',
174
+                ),
175
+
176
+            ),
177
+            'query_type'     => 'get_var',
178
+            'invoice_status' => array( 'wpi-renewal', 'wpi-processing', 'publish' ),
179
+        );
180
+
181
+        return wpinv_round_amount( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
182
+
183
+    }
184
+
185
+    /**
186
+     * Displays the total spent column.
187
+     *
188
+     * @since 1.0.19
189
+     *
190
+     * @param WP_User $user
191
+     *
192
+     * @return string Column Name
193
+     */
194
+    public function column_invoices( $user ) {
195
+
196
+        $args = array(
197
+            'data'           => array(
198
+
199
+                'ID' => array(
200
+                    'type'     => 'post_data',
201
+                    'function' => 'COUNT',
202
+                    'name'     => 'count',
203
+                    'distinct' => true,
204
+                ),
205
+
206
+            ),
207
+            'where'          => array(
208
+
209
+                'author' => array(
210
+                    'type'     => 'post_data',
211
+                    'value'    => absint( $user->ID ),
212
+                    'key'      => 'posts.post_author',
213
+                    'operator' => '=',
214
+                ),
215
+
216
+            ),
217
+            'query_type'     => 'get_var',
218
+            'invoice_status' => array_keys( wpinv_get_invoice_statuses() ),
219
+        );
220
+
221
+        $value = absint( GetPaid_Reports_Helper::get_invoice_report_data( $args ) );
222
+        $url   = add_query_arg( array( 'post_type' => 'wpi_invoice', 'author' => $user->ID ), admin_url( 'edit.php' ) );
223
+        return empty( $value ) ? '0' : '<a href="' . esc_url( $url ) . '">' . absint( $value ) . '</a>';
224
+
225
+    }
226
+
227
+    /**
228
+     * Generates content for a single row of the table
229
+     * @since 1.0.19
230
+     *
231
+     * @param int $item The user id.
232
+     */
233
+    public function single_row( $item ) {
234
+        $item = get_user_by( 'id', $item );
235
+
236
+        if ( empty( $item ) ) {
237
+            return;
238
+        }
239
+
240
+        echo '<tr>';
241
+        $this->single_row_columns( $item );
242
+        echo '</tr>';
243
+    }
244
+
245
+    /**
246
+     * Displays the customers name
247
+     *
248
+     * @param  WP_User $customer customer.
249
+     * @return string
250
+     */
251
+    public function column_name( $customer ) {
252
+
253
+        // Customer view URL.
254
+        $view_url    = esc_url( add_query_arg( 'user_id', $customer->ID, admin_url( 'user-edit.php' ) ) );
255
+        $row_actions = $this->row_actions(
256
+            array(
257
+                'view' => '<a href="' . $view_url . '#getpaid-fieldset-billing">' . __( 'Edit Details', 'invoicing' ) . '</a>',
258
+            )
259
+        );
260
+
261
+        // Get user's address.
262
+        $address = wpinv_get_user_address( $customer->ID );
263
+
264
+        // Customer email address.
265
+        $email       = sanitize_email( $customer->user_email );
266
+
267
+        // Customer's avatar.
268
+        $avatar = esc_url( get_avatar_url( $email ) );
269
+        $avatar = "<img src='$avatar' height='32' width='32'/>";
270
+
271
+        // Customer's name.
272
+        $name   = esc_html( "{$address['first_name']} {$address['last_name']}" );
273
+
274
+        if ( empty( trim( $name ) ) ) {
275
+            $name = esc_html( $address['display_name'] );
276
+        }
277
+
278
+        if ( ! empty( $name ) ) {
279
+            $name = "<div style='overflow: hidden;height: 18px;'>$name</div>";
280
+        }
281
+
282
+        $email = "<div class='row-title'><a href='$view_url'>$email</a></div>";
283
+
284
+        return "<div style='display: flex;'><div>$avatar</div><div style='margin-left: 10px;'>$name<strong>$email</strong>$row_actions</div></div>";
285
+
286
+    }
287
+
288
+    /**
289
+     * Retrieve the table columns
290
+     *
291
+     * @since 1.0.19
292
+     * @return array $columns Array of all the list table columns
293
+     */
294
+    public function get_columns() {
295
+
296
+        $columns = array(
297
+            'name'     => __( 'Name', 'invoicing' ),
298
+            'country'  => __( 'Country', 'invoicing' ),
299
+            'state'    => __( 'State', 'invoicing' ),
300
+            'city'     => __( 'City', 'invoicing' ),
301
+            'zip'      => __( 'ZIP', 'invoicing' ),
302
+            'address'  => __( 'Address', 'invoicing' ),
303
+            'phone'    => __( 'Phone', 'invoicing' ),
304
+            'company'  => __( 'Company', 'invoicing' ),
305
+            'invoices' => __( 'Invoices', 'invoicing' ),
306
+            'total'    => __( 'Total Spend', 'invoicing' ),
307
+            'signup'   => __( 'Date created', 'invoicing' ),
308
+        );
309
+        return apply_filters( 'wpinv_customers_table_columns', $columns );
310
+
311
+    }
312
+
313
+    /**
314
+     * Retrieve the current page number
315
+     *
316
+     * @since 1.0.19
317
+     * @return int Current page number
318
+     */
319
+    public function get_paged() {
320
+        return isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;
321
+    }
322
+
323
+    /**
324
+     * Returns bulk actions.
325
+     *
326
+     * @since 1.0.19
327
+     * @return void
328
+     */
329
+    public function bulk_actions( $which = '' ) {
330
+        return array();
331
+    }
332
+
333
+    /**
334
+     *  Prepares the display query
335
+     */
336
+    public function prepare_query() {
337
+        global $wpdb;
338
+
339
+        $post_types = '';
340
+
341
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
342
+            $post_types .= $wpdb->prepare( 'post_type=%s OR ', $post_type );
343
+        }
344
+
345
+        $post_types = rtrim( $post_types, ' OR' );
346
+
347
+        // Maybe search.
348
+        if ( ! empty( $_POST['s'] ) ) {
349
+            $users = get_users(
350
+                array(
351
+                    'search'         => '*' . sanitize_text_field( urldecode( $_POST['s'] ) ) . '*',
352
+                    'search_columns' => array( 'user_login', 'user_email', 'display_name' ),
353
+                    'fields'         => 'ID',
354
+                )
355
+            );
356
+
357
+            $users      = implode( ', ', $users );
358
+            $post_types = "($post_types) AND ( post_author IN ( $users ) )";
359
+        }
360
+
361
+        // Users with invoices.
362
+        $customers = $wpdb->get_col(
363
+            $wpdb->prepare(
364
+                "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types LIMIT %d,%d",
365
+                $this->get_paged() * 10 - 10,
366
+                $this->per_page
367
+            )
368
+        );
369
+
370
+        $this->items = $customers;
371
+        $this->total = (int) $wpdb->get_var( "SELECT COUNT( DISTINCT( post_author ) ) FROM $wpdb->posts WHERE $post_types" );
372
+
373
+    }
374
+
375
+    /**
376
+     * Setup the final data for the table
377
+     *
378
+     * @since 1.0.19
379
+     * @return void
380
+     */
381
+    public function prepare_items() {
382
+        $columns               = $this->get_columns();
383
+        $hidden                = array(); // No hidden columns
384
+        $sortable              = $this->get_sortable_columns();
385
+        $this->_column_headers = array( $columns, $hidden, $sortable );
386
+        $this->prepare_query();
387
+
388
+        $this->set_pagination_args(
389
+            array(
390
+                'total_items' => $this->total,
391
+                'per_page'    => $this->per_page,
392
+                'total_pages' => ceil( $this->total / $this->per_page ),
393
+            )
394
+        );
395
+
396
+    }
397 397
 }
Please login to merge, or discard this patch.
templates/payment-forms/form.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
 
58 58
         // And the optional invoice id.
59 59
         if ( ! empty( $form->invoice ) ) {
60
-		    getpaid_hidden_field( 'invoice_id', $form->invoice->get_id() );
60
+            getpaid_hidden_field( 'invoice_id', $form->invoice->get_id() );
61 61
         }
62 62
 
63 63
         // We also want to include the form id.
@@ -77,7 +77,7 @@  discard block
 block discarded – undo
77 77
 
78 78
                     foreach ( $form->get_elements() as $element ) {
79 79
 
80
-					    if ( isset( $element['type'] ) ) {
80
+                        if ( isset( $element['type'] ) ) {
81 81
                             $grid_class = getpaid_get_form_element_grid_class( $element );
82 82
                             echo "<div class='" . esc_attr( $grid_class ) . "'>";
83 83
                             do_action( 'getpaid_payment_form_element', $element, $form );
Please login to merge, or discard this patch.
includes/admin/meta-boxes/class-getpaid-meta-box-description.php 1 patch
Indentation   +19 added lines, -19 removed lines patch added patch discarded remove patch
@@ -13,25 +13,25 @@
 block discarded – undo
13 13
  */
14 14
 class GetPaid_Meta_Box_Description {
15 15
 
16
-	/**
17
-	 * Output the metabox.
18
-	 *
19
-	 * @param WP_Post $post Post object.
20
-	 */
21
-	public static function output( $post ) {
16
+    /**
17
+     * Output the metabox.
18
+     *
19
+     * @param WP_Post $post Post object.
20
+     */
21
+    public static function output( $post ) {
22 22
 
23
-		$settings = array(
24
-			'textarea_name' => 'excerpt',
25
-			'quicktags'     => array( 'buttons' => 'em,strong,link' ),
26
-			'teeny'         => true,
27
-			'media_buttons' => false,
28
-			'tinymce'       => array(
29
-				'theme_advanced_buttons1' => 'bold,italic,strikethrough,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,separator,undo,redo,separator',
30
-				'theme_advanced_buttons2' => '',
31
-			),
32
-			'editor_css'    => '<style>#wp-excerpt-editor-container .wp-editor-area{height:175px; width:100%;}</style>',
33
-		);
23
+        $settings = array(
24
+            'textarea_name' => 'excerpt',
25
+            'quicktags'     => array( 'buttons' => 'em,strong,link' ),
26
+            'teeny'         => true,
27
+            'media_buttons' => false,
28
+            'tinymce'       => array(
29
+                'theme_advanced_buttons1' => 'bold,italic,strikethrough,separator,justifyleft,justifycenter,justifyright,separator,link,unlink,separator,undo,redo,separator',
30
+                'theme_advanced_buttons2' => '',
31
+            ),
32
+            'editor_css'    => '<style>#wp-excerpt-editor-container .wp-editor-area{height:175px; width:100%;}</style>',
33
+        );
34 34
 
35
-		wp_editor( htmlspecialchars_decode( $post->post_excerpt, ENT_QUOTES ), 'excerpt', apply_filters( 'getpaid_description_editor_settings', $settings ) );
36
-	}
35
+        wp_editor( htmlspecialchars_decode( $post->post_excerpt, ENT_QUOTES ), 'excerpt', apply_filters( 'getpaid_description_editor_settings', $settings ) );
36
+    }
37 37
 }
Please login to merge, or discard this patch.