Passed
Push — master ( cc57e9...222a59 )
by Brian
09:42
created
includes/wpinv-subscription.php 1 patch
Indentation   +1035 added lines, -1035 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,545 +177,545 @@  discard block
 block discarded – undo
177 177
 	|
178 178
     */
179 179
 
180
-	/*
181
-	|--------------------------------------------------------------------------
182
-	| Getters
183
-	|--------------------------------------------------------------------------
184
-	*/
180
+    /*
181
+	|--------------------------------------------------------------------------
182
+	| Getters
183
+	|--------------------------------------------------------------------------
184
+	*/
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
+     */
226
+    public function get_parent_payment_id( $context = 'view' ) {
227
+        return $this->get_parent_invoice_id( $context );
228
+    }
229
+
230
+    /**
231
+     * Alias for self::get_parent_invoice_id().
232
+     *
233
+     * @since  1.0.0
234
+     * @return int
235
+     */
236
+    public function get_original_payment_id( $context = 'view' ) {
237
+        return $this->get_parent_invoice_id( $context );
238
+    }
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 );
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 );
625
+
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;
629
+        }
630
+
631
+        $this->set_prop( 'created', '' );
185 632
 
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
-    public function get_parent_payment_id( $context = 'view' ) {
227
-        return $this->get_parent_invoice_id( $context );
228
-	}
633
+    }
229 634
 
230
-	/**
231
-     * Alias for self::get_parent_invoice_id().
635
+    /**
636
+     * Alias for self::set_created().
232 637
      *
233
-     * @since  1.0.0
234
-     * @return int
638
+     * @since 1.0.19
639
+     * @param string $value strtotime compliant date.
235 640
      */
236
-    public function get_original_payment_id( $context = 'view' ) {
237
-        return $this->get_parent_invoice_id( $context );
641
+    public function set_date_created( $value ) {
642
+        $this->set_created( $value );
238 643
     }
239 644
 
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 );
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 );
405 653
 
406
-        if ( $date ) {
407
-            $date = get_gmt_from_date( $date );
654
+        if ( $date && $value !== '0000-00-00 00:00:00' ) {
655
+            $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) );
656
+            return;
408 657
         }
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 658
 
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
-	*/
659
+        $this->set_prop( 'expiration', '' );
505 660
 
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
-	}
661
+    }
535 662
 
536
-	/**
537
-     * Alias for self::set_parent_invoice_id().
663
+    /**
664
+     * Alias for self::set_next_renewal_date().
538 665
      *
539 666
      * @since 1.0.19
540
-	 * @param  int $value The parent invoice id.
667
+     * @param string $value strtotime compliant date.
541 668
      */
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 );
669
+    public function set_expiration( $value ) {
670
+        $this->set_next_renewal_date( $value );
671
+    }
625 672
 
626
-        if ( $date && $value !== '0000-00-00 00:00:00' ) {
627
-            $this->set_prop( 'created', date( 'Y-m-d H:i:s', $date ) );
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() ) ) {
628 693
             return;
629 694
         }
630 695
 
631
-		$this->set_prop( 'created', '' );
632 696
 
633
-	}
697
+        $old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status();
698
+        if ( true === $this->object_read && $old_status !== $new_status ) {
699
+            $this->status_transition = array(
700
+                'from'   => $old_status,
701
+                'to'     => $new_status,
702
+            );
703
+        }
634 704
 
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 );
705
+        $this->set_prop( 'status', $new_status );
643 706
     }
644 707
 
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 );
708
+    /**
709
+     * Set the subscription's (remote) profile id.
710
+     *
711
+     * @since 1.0.19
712
+     * @param  string $value the remote profile id.
713
+     */
714
+    public function set_profile_id( $value ) {
715
+        $this->set_prop( 'profile_id', sanitize_text_field( $value ) );
716
+    }
653 717
 
654
-        if ( $date && $value !== '0000-00-00 00:00:00' ) {
655
-            $this->set_prop( 'expiration', date( 'Y-m-d H:i:s', $date ) );
656
-            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
-
697
-		$old_status = ! empty( $this->status_transition['from'] ) ? $this->status_transition['from'] : $this->get_status();
698
-		if ( true === $this->object_read && $old_status !== $new_status ) {
699
-			$this->status_transition = array(
700
-				'from'   => $old_status,
701
-				'to'     => $new_status,
702
-			);
703
-		}
704
-
705
-		$this->set_prop( 'status', $new_status );
706
-	}
707
-
708
-	/**
709
-	 * Set the subscription's (remote) profile id.
710
-	 *
711
-	 * @since 1.0.19
712
-	 * @param  string $value the remote profile id.
713
-	 */
714
-	public function set_profile_id( $value ) {
715
-		$this->set_prop( 'profile_id', sanitize_text_field( $value ) );
716
-	}
717
-
718
-	/*
718
+    /*
719 719
 	|--------------------------------------------------------------------------
720 720
 	| Boolean methods
721 721
 	|--------------------------------------------------------------------------
@@ -724,55 +724,55 @@  discard block
 block discarded – undo
724 724
 	|
725 725
 	*/
726 726
 
727
-	/**
727
+    /**
728 728
      * Checks if the subscription has a given status.
729
-	 *
730
-	 * @param string|array String or array of strings to check for.
731
-	 * @return bool
729
+     *
730
+     * @param string|array String or array of strings to check for.
731
+     * @return bool
732 732
      */
733 733
     public function has_status( $status ) {
734 734
         return in_array( $this->get_status(), wpinv_clean( wpinv_parse_list( $status ) ) );
735
-	}
735
+    }
736 736
 
737
-	/**
737
+    /**
738 738
      * Checks if the subscription has a trial period.
739
-	 *
740
-	 * @return bool
739
+     *
740
+     * @return bool
741 741
      */
742 742
     public function has_trial_period() {
743
-		$period = $this->get_trial_period();
743
+        $period = $this->get_trial_period();
744 744
         return ! empty( $period );
745
-	}
746
-
747
-	/**
748
-	 * Is the subscription active?
749
-	 *
750
-	 * @return bool
751
-	 */
752
-	public function is_active() {
753
-		return $this->has_status( 'active trialling' ) && ! $this->is_expired();
754
-	}
755
-
756
-	/**
757
-	 * Is the subscription expired?
758
-	 *
759
-	 * @return bool
760
-	 */
761
-	public function is_expired() {
762
-		return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'mysql' ) );
763
-	}
764
-
765
-	/**
766
-	 * Is this the last renewals?
767
-	 *
768
-	 * @return bool
769
-	 */
770
-	public function is_last_renewal() {
771
-		$max_bills = $this->get_bill_times();
772
-		return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed();
773
-	}
774
-
775
-	/*
745
+    }
746
+
747
+    /**
748
+     * Is the subscription active?
749
+     *
750
+     * @return bool
751
+     */
752
+    public function is_active() {
753
+        return $this->has_status( 'active trialling' ) && ! $this->is_expired();
754
+    }
755
+
756
+    /**
757
+     * Is the subscription expired?
758
+     *
759
+     * @return bool
760
+     */
761
+    public function is_expired() {
762
+        return $this->has_status( 'expired' ) || ( $this->has_status( 'active cancelled trialling' ) && $this->get_expiration_time() < current_time( 'mysql' ) );
763
+    }
764
+
765
+    /**
766
+     * Is this the last renewals?
767
+     *
768
+     * @return bool
769
+     */
770
+    public function is_last_renewal() {
771
+        $max_bills = $this->get_bill_times();
772
+        return ! empty( $max_bills ) && $max_bills <= $this->get_times_billed();
773
+    }
774
+
775
+    /*
776 776
 	|--------------------------------------------------------------------------
777 777
 	| Additional methods
778 778
 	|--------------------------------------------------------------------------
@@ -781,27 +781,27 @@  discard block
 block discarded – undo
781 781
 	|
782 782
 	*/
783 783
 
784
-	/**
785
-	 * Backwards compatibilty.
786
-	 */
787
-	public function create( $data = array() ) {
784
+    /**
785
+     * Backwards compatibilty.
786
+     */
787
+    public function create( $data = array() ) {
788 788
 
789
-		// Set the properties.
790
-		if ( is_array( $data ) ) {
791
-			$this->set_props( $data );
792
-		}
789
+        // Set the properties.
790
+        if ( is_array( $data ) ) {
791
+            $this->set_props( $data );
792
+        }
793 793
 
794
-		// Save the item.
795
-		return $this->save();
794
+        // Save the item.
795
+        return $this->save();
796 796
 
797
-	}
797
+    }
798 798
 
799
-	/**
800
-	 * Backwards compatibilty.
801
-	 */
802
-	public function update( $args = array() ) {
803
-		return $this->create( $args );
804
-	}
799
+    /**
800
+     * Backwards compatibilty.
801
+     */
802
+    public function update( $args = array() ) {
803
+        return $this->create( $args );
804
+    }
805 805
 
806 806
     /**
807 807
      * Retrieve renewal payments for a subscription
@@ -811,22 +811,22 @@  discard block
 block discarded – undo
811 811
      */
812 812
     public function get_child_payments( $hide_pending = true ) {
813 813
 
814
-		$statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' );
814
+        $statuses = array( 'publish', 'wpi-processing', 'wpi-renewal' );
815 815
 
816
-		if ( ! $hide_pending ) {
817
-			$statuses = array_keys( wpinv_get_invoice_statuses() );
818
-		}
816
+        if ( ! $hide_pending ) {
817
+            $statuses = array_keys( wpinv_get_invoice_statuses() );
818
+        }
819 819
 
820 820
         return get_posts(
821
-			array(
822
-            	'post_parent'    => $this->get_parent_payment_id(),
823
-            	'numberposts'    => -1,
824
-            	'post_status'    => $statuses,
825
-            	'orderby'        => 'ID',
826
-            	'order'          => 'ASC',
827
-            	'post_type'      => 'wpi_invoice'
828
-			)
829
-		);
821
+            array(
822
+                'post_parent'    => $this->get_parent_payment_id(),
823
+                'numberposts'    => -1,
824
+                'post_status'    => $statuses,
825
+                'orderby'        => 'ID',
826
+                'order'          => 'ASC',
827
+                'post_type'      => 'wpi_invoice'
828
+            )
829
+        );
830 830
     }
831 831
 
832 832
     /**
@@ -836,7 +836,7 @@  discard block
 block discarded – undo
836 836
      * @return int
837 837
      */
838 838
     public function get_total_payments() {
839
-		return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() );
839
+        return getpaid_count_subscription_invoices( $this->get_parent_invoice_id(), $this->get_id() );
840 840
     }
841 841
 
842 842
     /**
@@ -860,57 +860,57 @@  discard block
 block discarded – undo
860 860
      *
861 861
      * @since  2.4
862 862
      * @param  array $args Array of values for the payment, including amount and transaction ID
863
-	 * @param  WPInv_Invoice $invoice If adding an existing invoice.
863
+     * @param  WPInv_Invoice $invoice If adding an existing invoice.
864 864
      * @return bool
865 865
      */
866 866
     public function add_payment( $args = array(), $invoice = false ) {
867 867
 
868
-		// Process each payment once.
868
+        // Process each payment once.
869 869
         if ( ! empty( $args['transaction_id'] ) && $this->payment_exists( $args['transaction_id'] ) ) {
870 870
             return false;
871 871
         }
872 872
 
873
-		// Are we creating a new invoice?
874
-		if ( empty( $invoice ) ) {
875
-			$invoice = $this->create_payment();
873
+        // Are we creating a new invoice?
874
+        if ( empty( $invoice ) ) {
875
+            $invoice = $this->create_payment();
876 876
 
877
-			if ( empty( $invoice ) ) {
878
-				return false;
879
-			}
877
+            if ( empty( $invoice ) ) {
878
+                return false;
879
+            }
880 880
 
881
-		}
881
+        }
882 882
 
883
-		$invoice->set_status( 'wpi-renewal' );
883
+        $invoice->set_status( 'wpi-renewal' );
884 884
 
885
-		// Maybe set a transaction id.
886
-		if ( ! empty( $args['transaction_id'] ) ) {
887
-			$invoice->set_transaction_id( $args['transaction_id'] );
888
-		}
885
+        // Maybe set a transaction id.
886
+        if ( ! empty( $args['transaction_id'] ) ) {
887
+            $invoice->set_transaction_id( $args['transaction_id'] );
888
+        }
889 889
 
890
-		// Set the completed date.
891
-		$invoice->set_completed_date( current_time( 'mysql' ) );
890
+        // Set the completed date.
891
+        $invoice->set_completed_date( current_time( 'mysql' ) );
892 892
 
893
-		// And the gateway.
894
-		if ( ! empty( $args['gateway'] ) ) {
895
-			$invoice->set_gateway( $args['gateway'] );
896
-		}
893
+        // And the gateway.
894
+        if ( ! empty( $args['gateway'] ) ) {
895
+            $invoice->set_gateway( $args['gateway'] );
896
+        }
897 897
 
898
-		$invoice->save();
898
+        $invoice->save();
899 899
 
900
-		if ( ! $invoice->exists() ) {
901
-			return false;
902
-		}
900
+        if ( ! $invoice->exists() ) {
901
+            return false;
902
+        }
903 903
 
904
-		do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this );
905
-		do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this );
904
+        do_action( 'getpaid_after_create_subscription_renewal_invoice', $invoice, $this );
905
+        do_action( 'wpinv_recurring_add_subscription_payment', $invoice, $this );
906 906
         do_action( 'wpinv_recurring_record_payment', $invoice->get_id(), $this->get_parent_invoice_id(), $invoice->get_recurring_total(), $invoice->get_transaction_id() );
907 907
 
908 908
         update_post_meta( $invoice->get_id(), '_wpinv_subscription_id', $this->id );
909 909
 
910 910
         return $invoice->get_id();
911
-	}
911
+    }
912 912
 
913
-	/**
913
+    /**
914 914
      * Creates a new invoice and returns it.
915 915
      *
916 916
      * @since  1.0.19
@@ -918,124 +918,124 @@  discard block
 block discarded – undo
918 918
      */
919 919
     public function create_payment() {
920 920
 
921
-		$parent_invoice = $this->get_parent_payment();
922
-
923
-		if ( ! $parent_invoice->exists() ) {
924
-			return false;
925
-		}
926
-
927
-		// Duplicate the parent invoice.
928
-		$invoice = getpaid_duplicate_invoice( $parent_invoice );
929
-		$invoice->set_parent_id( $parent_invoice->get_id() );
930
-		$invoice->set_subscription_id( $this->get_id() );
931
-		$invoice->set_remote_subscription_id( $this->get_profile_id() );
932
-
933
-		// Set invoice items.
934
-		$subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() );
935
-		$allowed_items      = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] );
936
-		$invoice_items      = array();
937
-
938
-		foreach ( $invoice->get_items() as $item ) {
939
-			if ( in_array( $item->get_id(), $allowed_items ) ) {
940
-				$invoice_items[] = $item;
941
-			}
942
-		}
943
-
944
-		$invoice->set_items( $invoice_items );
945
-
946
-		if ( ! empty( $subscription_group['fees'] ) ) {
947
-			$invoice->set_fees( $subscription_group['fees'] );
948
-		}
949
-
950
-		// Maybe recalculate discount (Pre-GetPaid Fix).
951
-		$discount = new WPInv_Discount( $invoice->get_discount_code() );
952
-		if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) {
953
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
954
-		}
955
-
956
-		$invoice->recalculate_total();
957
-		$invoice->set_status( 'wpi-pending' );
958
-		$invoice->save();
959
-
960
-		return $invoice->exists() ? $invoice : false;
961
-    }
962
-
963
-	/**
964
-	 * Renews or completes a subscription
965
-	 *
966
-	 * @since  1.0.0
967
-	 * @return int The subscription's id
968
-	 */
969
-	public function renew() {
970
-
971
-		// Complete subscription if applicable
972
-		if ( $this->is_last_renewal() ) {
973
-			return $this->complete();
974
-		}
975
-
976
-		// Calculate new expiration
977
-		$frequency      = $this->get_frequency();
978
-		$period         = $this->get_period();
979
-		$new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() );
980
-
981
-		$this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) );
982
-		$this->set_status( 'active' );
983
-		$this->save();
984
-
985
-		do_action( 'getpaid_subscription_renewed', $this );
986
-
987
-		return $this->get_id();
988
-	}
989
-
990
-	/**
991
-	 * Marks a subscription as completed
992
-	 *
993
-	 * Subscription is completed when the number of payments matches the billing_times field
994
-	 *
995
-	 * @since  1.0.0
996
-	 * @return int|bool Subscription id or false if the subscription is cancelled.
997
-	 */
998
-	public function complete() {
999
-
1000
-		// Only mark a subscription as complete if it's not already cancelled.
1001
-		if ( $this->has_status( 'cancelled' ) ) {
1002
-			return false;
1003
-		}
1004
-
1005
-		$this->set_status( 'completed' );
1006
-		return $this->save();
1007
-
1008
-	}
1009
-
1010
-	/**
1011
-	 * Marks a subscription as expired
1012
-	 *
1013
-	 * @since  1.0.0
1014
-	 * @param  bool $check_expiration
1015
-	 * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future.
1016
-	 */
1017
-	public function expire( $check_expiration = false ) {
1018
-
1019
-		if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) {
1020
-			// Do not mark as expired since real expiration date is in the future
1021
-			return false;
1022
-		}
1023
-
1024
-		$this->set_status( 'expired' );
1025
-		return $this->save();
1026
-
1027
-	}
1028
-
1029
-	/**
1030
-	 * Marks a subscription as failing
1031
-	 *
1032
-	 * @since  2.4.2
1033
-	 * @return int Subscription id.
1034
-	 */
1035
-	public function failing() {
1036
-		$this->set_status( 'failing' );
1037
-		return $this->save();
1038
-	}
921
+        $parent_invoice = $this->get_parent_payment();
922
+
923
+        if ( ! $parent_invoice->exists() ) {
924
+            return false;
925
+        }
926
+
927
+        // Duplicate the parent invoice.
928
+        $invoice = getpaid_duplicate_invoice( $parent_invoice );
929
+        $invoice->set_parent_id( $parent_invoice->get_id() );
930
+        $invoice->set_subscription_id( $this->get_id() );
931
+        $invoice->set_remote_subscription_id( $this->get_profile_id() );
932
+
933
+        // Set invoice items.
934
+        $subscription_group = getpaid_get_invoice_subscription_group( $parent_invoice->get_id(), $this->get_id() );
935
+        $allowed_items      = empty( $subscription_group ) ? array( $this->get_product_id() ) : array_keys( $subscription_group['items'] );
936
+        $invoice_items      = array();
937
+
938
+        foreach ( $invoice->get_items() as $item ) {
939
+            if ( in_array( $item->get_id(), $allowed_items ) ) {
940
+                $invoice_items[] = $item;
941
+            }
942
+        }
943
+
944
+        $invoice->set_items( $invoice_items );
945
+
946
+        if ( ! empty( $subscription_group['fees'] ) ) {
947
+            $invoice->set_fees( $subscription_group['fees'] );
948
+        }
949
+
950
+        // Maybe recalculate discount (Pre-GetPaid Fix).
951
+        $discount = new WPInv_Discount( $invoice->get_discount_code() );
952
+        if ( $discount->exists() && $discount->is_recurring() && 0 == $invoice->get_total_discount() ) {
953
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
954
+        }
955
+
956
+        $invoice->recalculate_total();
957
+        $invoice->set_status( 'wpi-pending' );
958
+        $invoice->save();
959
+
960
+        return $invoice->exists() ? $invoice : false;
961
+    }
962
+
963
+    /**
964
+     * Renews or completes a subscription
965
+     *
966
+     * @since  1.0.0
967
+     * @return int The subscription's id
968
+     */
969
+    public function renew() {
970
+
971
+        // Complete subscription if applicable
972
+        if ( $this->is_last_renewal() ) {
973
+            return $this->complete();
974
+        }
975
+
976
+        // Calculate new expiration
977
+        $frequency      = $this->get_frequency();
978
+        $period         = $this->get_period();
979
+        $new_expiration = strtotime( "+ $frequency $period", $this->get_expiration_time() );
980
+
981
+        $this->set_expiration( date( 'Y-m-d H:i:s',$new_expiration ) );
982
+        $this->set_status( 'active' );
983
+        $this->save();
984
+
985
+        do_action( 'getpaid_subscription_renewed', $this );
986
+
987
+        return $this->get_id();
988
+    }
989
+
990
+    /**
991
+     * Marks a subscription as completed
992
+     *
993
+     * Subscription is completed when the number of payments matches the billing_times field
994
+     *
995
+     * @since  1.0.0
996
+     * @return int|bool Subscription id or false if the subscription is cancelled.
997
+     */
998
+    public function complete() {
999
+
1000
+        // Only mark a subscription as complete if it's not already cancelled.
1001
+        if ( $this->has_status( 'cancelled' ) ) {
1002
+            return false;
1003
+        }
1004
+
1005
+        $this->set_status( 'completed' );
1006
+        return $this->save();
1007
+
1008
+    }
1009
+
1010
+    /**
1011
+     * Marks a subscription as expired
1012
+     *
1013
+     * @since  1.0.0
1014
+     * @param  bool $check_expiration
1015
+     * @return int|bool Subscription id or false if $check_expiration is true and expiration date is in the future.
1016
+     */
1017
+    public function expire( $check_expiration = false ) {
1018
+
1019
+        if ( $check_expiration && $this->get_expiration_time() > current_time( 'timestamp' ) ) {
1020
+            // Do not mark as expired since real expiration date is in the future
1021
+            return false;
1022
+        }
1023
+
1024
+        $this->set_status( 'expired' );
1025
+        return $this->save();
1026
+
1027
+    }
1028
+
1029
+    /**
1030
+     * Marks a subscription as failing
1031
+     *
1032
+     * @since  2.4.2
1033
+     * @return int Subscription id.
1034
+     */
1035
+    public function failing() {
1036
+        $this->set_status( 'failing' );
1037
+        return $this->save();
1038
+    }
1039 1039
 
1040 1040
     /**
1041 1041
      * Marks a subscription as cancelled
@@ -1044,19 +1044,19 @@  discard block
 block discarded – undo
1044 1044
      * @return int Subscription id.
1045 1045
      */
1046 1046
     public function cancel() {
1047
-		$this->set_status( 'cancelled' );
1048
-		return $this->save();
1047
+        $this->set_status( 'cancelled' );
1048
+        return $this->save();
1049 1049
     }
1050 1050
 
1051
-	/**
1052
-	 * Determines if a subscription can be cancelled both locally and with a payment processor.
1053
-	 *
1054
-	 * @since  1.0.0
1055
-	 * @return bool
1056
-	 */
1057
-	public function can_cancel() {
1058
-		return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this );
1059
-	}
1051
+    /**
1052
+     * Determines if a subscription can be cancelled both locally and with a payment processor.
1053
+     *
1054
+     * @since  1.0.0
1055
+     * @return bool
1056
+     */
1057
+    public function can_cancel() {
1058
+        return apply_filters( 'wpinv_subscription_can_cancel', $this->has_status( $this->get_cancellable_statuses() ), $this );
1059
+    }
1060 1060
 
1061 1061
     /**
1062 1062
      * Returns an array of subscription statuses that can be cancelled
@@ -1069,96 +1069,96 @@  discard block
 block discarded – undo
1069 1069
         return apply_filters( 'wpinv_recurring_cancellable_statuses', array( 'active', 'trialling', 'failing' ) );
1070 1070
     }
1071 1071
 
1072
-	/**
1073
-	 * Retrieves the URL to cancel subscription
1074
-	 *
1075
-	 * @since  1.0.0
1076
-	 * @return string
1077
-	 */
1078
-	public function get_cancel_url() {
1079
-		$url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() );
1080
-		return apply_filters( 'wpinv_subscription_cancel_url', $url, $this );
1081
-	}
1082
-
1083
-	/**
1084
-	 * Retrieves the URL to view a subscription
1085
-	 *
1086
-	 * @since  1.0.19
1087
-	 * @return string
1088
-	 */
1089
-	public function get_view_url() {
1090
-
1091
-		$url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
1092
-		$url = add_query_arg( 'subscription', $this->get_id(), $url );
1093
-
1094
-		return apply_filters( 'getpaid_get_subscription_view_url', $url, $this );
1095
-	}
1096
-
1097
-	/**
1098
-	 * Determines if subscription can be manually renewed
1099
-	 *
1100
-	 * This method is filtered by payment gateways in order to return true on subscriptions
1101
-	 * that can be renewed manually
1102
-	 *
1103
-	 * @since  2.5
1104
-	 * @return bool
1105
-	 */
1106
-	public function can_renew() {
1107
-		return apply_filters( 'wpinv_subscription_can_renew', true, $this );
1108
-	}
1109
-
1110
-	/**
1111
-	 * Retrieves the URL to renew a subscription
1112
-	 *
1113
-	 * @since  2.5
1114
-	 * @return string
1115
-	 */
1116
-	public function get_renew_url() {
1117
-		$url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' );
1118
-		return apply_filters( 'wpinv_subscription_renew_url', $url, $this );
1119
-	}
1120
-
1121
-	/**
1122
-	 * Determines if subscription can have their payment method updated
1123
-	 *
1124
-	 * @since  1.0.0
1125
-	 * @return bool
1126
-	 */
1127
-	public function can_update() {
1128
-		return apply_filters( 'wpinv_subscription_can_update', false, $this );
1129
-	}
1130
-
1131
-	/**
1132
-	 * Retrieves the URL to update subscription
1133
-	 *
1134
-	 * @since  1.0.0
1135
-	 * @return string
1136
-	 */
1137
-	public function get_update_url() {
1138
-		$url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) );
1139
-		return apply_filters( 'wpinv_subscription_update_url', $url, $this );
1140
-	}
1141
-
1142
-	/**
1143
-	 * Retrieves the subscription status label
1144
-	 *
1145
-	 * @since  1.0.0
1146
-	 * @return string
1147
-	 */
1148
-	public function get_status_label() {
1149
-		return getpaid_get_subscription_status_label( $this->get_status() );
1150
-	}
1151
-
1152
-	/**
1153
-	 * Retrieves the subscription status class
1154
-	 *
1155
-	 * @since  1.0.19
1156
-	 * @return string
1157
-	 */
1158
-	public function get_status_class() {
1159
-		$statuses = getpaid_get_subscription_status_classes();
1160
-		return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark';
1161
-	}
1072
+    /**
1073
+     * Retrieves the URL to cancel subscription
1074
+     *
1075
+     * @since  1.0.0
1076
+     * @return string
1077
+     */
1078
+    public function get_cancel_url() {
1079
+        $url = getpaid_get_authenticated_action_url( 'subscription_cancel', $this->get_view_url() );
1080
+        return apply_filters( 'wpinv_subscription_cancel_url', $url, $this );
1081
+    }
1082
+
1083
+    /**
1084
+     * Retrieves the URL to view a subscription
1085
+     *
1086
+     * @since  1.0.19
1087
+     * @return string
1088
+     */
1089
+    public function get_view_url() {
1090
+
1091
+        $url = getpaid_get_tab_url( 'gp-subscriptions', get_permalink( (int) wpinv_get_option( 'invoice_subscription_page' ) ) );
1092
+        $url = add_query_arg( 'subscription', $this->get_id(), $url );
1093
+
1094
+        return apply_filters( 'getpaid_get_subscription_view_url', $url, $this );
1095
+    }
1096
+
1097
+    /**
1098
+     * Determines if subscription can be manually renewed
1099
+     *
1100
+     * This method is filtered by payment gateways in order to return true on subscriptions
1101
+     * that can be renewed manually
1102
+     *
1103
+     * @since  2.5
1104
+     * @return bool
1105
+     */
1106
+    public function can_renew() {
1107
+        return apply_filters( 'wpinv_subscription_can_renew', true, $this );
1108
+    }
1109
+
1110
+    /**
1111
+     * Retrieves the URL to renew a subscription
1112
+     *
1113
+     * @since  2.5
1114
+     * @return string
1115
+     */
1116
+    public function get_renew_url() {
1117
+        $url = wp_nonce_url( add_query_arg( array( 'getpaid-action' => 'renew_subscription', 'sub_id' => $this->get_id ) ), 'getpaid-nonce' );
1118
+        return apply_filters( 'wpinv_subscription_renew_url', $url, $this );
1119
+    }
1120
+
1121
+    /**
1122
+     * Determines if subscription can have their payment method updated
1123
+     *
1124
+     * @since  1.0.0
1125
+     * @return bool
1126
+     */
1127
+    public function can_update() {
1128
+        return apply_filters( 'wpinv_subscription_can_update', false, $this );
1129
+    }
1130
+
1131
+    /**
1132
+     * Retrieves the URL to update subscription
1133
+     *
1134
+     * @since  1.0.0
1135
+     * @return string
1136
+     */
1137
+    public function get_update_url() {
1138
+        $url = add_query_arg( array( 'action' => 'update', 'subscription_id' => $this->get_id() ) );
1139
+        return apply_filters( 'wpinv_subscription_update_url', $url, $this );
1140
+    }
1141
+
1142
+    /**
1143
+     * Retrieves the subscription status label
1144
+     *
1145
+     * @since  1.0.0
1146
+     * @return string
1147
+     */
1148
+    public function get_status_label() {
1149
+        return getpaid_get_subscription_status_label( $this->get_status() );
1150
+    }
1151
+
1152
+    /**
1153
+     * Retrieves the subscription status class
1154
+     *
1155
+     * @since  1.0.19
1156
+     * @return string
1157
+     */
1158
+    public function get_status_class() {
1159
+        $statuses = getpaid_get_subscription_status_classes();
1160
+        return isset( $statuses[ $this->get_status() ] ) ? $statuses[ $this->get_status() ] : 'badge-dark';
1161
+    }
1162 1162
 
1163 1163
     /**
1164 1164
      * Retrieves the subscription status label
@@ -1168,11 +1168,11 @@  discard block
 block discarded – undo
1168 1168
      */
1169 1169
     public function get_status_label_html() {
1170 1170
 
1171
-		$status_label = sanitize_text_field( $this->get_status_label() );
1172
-		$class        = esc_attr( $this->get_status_class() );
1173
-		$status       = sanitize_html_class( $this->get_status() );
1171
+        $status_label = sanitize_text_field( $this->get_status_label() );
1172
+        $class        = esc_attr( $this->get_status_class() );
1173
+        $status       = sanitize_html_class( $this->get_status() );
1174 1174
 
1175
-		return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
1175
+        return "<span class='bsui'><span class='badge $class $status'>$status_label</span></span>";
1176 1176
     }
1177 1177
 
1178 1178
     /**
@@ -1183,75 +1183,75 @@  discard block
 block discarded – undo
1183 1183
      * @return bool
1184 1184
      */
1185 1185
     public function payment_exists( $txn_id = '' ) {
1186
-		$invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' );
1186
+        $invoice_id = WPInv_Invoice::get_invoice_id_by_field( $txn_id, 'transaction_id' );
1187 1187
         return ! empty( $invoice_id );
1188
-	}
1189
-
1190
-	/**
1191
-	 * Handle the status transition.
1192
-	 */
1193
-	protected function status_transition() {
1194
-		$status_transition = $this->status_transition;
1195
-
1196
-		// Reset status transition variable.
1197
-		$this->status_transition = false;
1198
-
1199
-		if ( $status_transition ) {
1200
-			try {
1201
-
1202
-				// Fire a hook for the status change.
1203
-				do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition );
1204
-				do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition );
1205
-
1206
-				if ( ! empty( $status_transition['from'] ) ) {
1207
-
1208
-					/* translators: 1: old subscription status 2: new subscription status */
1209
-					$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'] ) );
1210
-
1211
-					// Note the transition occurred.
1212
-					$this->get_parent_payment()->add_note( $transition_note, false, false, true );
1213
-
1214
-					// Fire another hook.
1215
-					do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this );
1216
-					do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] );
1217
-
1218
-				} else {
1219
-					/* translators: %s: new invoice status */
1220
-					$transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), 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
-				}
1226
-			} catch ( Exception $e ) {
1227
-				$this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
1228
-			}
1229
-		}
1230
-
1231
-	}
1232
-
1233
-	/**
1234
-	 * Save data to the database.
1235
-	 *
1236
-	 * @since 1.0.19
1237
-	 * @return int subscription ID
1238
-	 */
1239
-	public function save() {
1240
-		parent::save();
1241
-		$this->status_transition();
1242
-		return $this->get_id();
1243
-	}
1244
-
1245
-	/**
1246
-	 * Activates a subscription.
1247
-	 *
1248
-	 * @since 1.0.19
1249
-	 * @return int subscription ID
1250
-	 */
1251
-	public function activate() {
1252
-		$status = 'trialling' == $this->get_status() ? 'trialling' : 'active';
1253
-		$this->set_status( $status );
1254
-		return $this->save();
1255
-	}
1188
+    }
1189
+
1190
+    /**
1191
+     * Handle the status transition.
1192
+     */
1193
+    protected function status_transition() {
1194
+        $status_transition = $this->status_transition;
1195
+
1196
+        // Reset status transition variable.
1197
+        $this->status_transition = false;
1198
+
1199
+        if ( $status_transition ) {
1200
+            try {
1201
+
1202
+                // Fire a hook for the status change.
1203
+                do_action( 'wpinv_subscription_' . $status_transition['to'], $this->get_id(), $this, $status_transition );
1204
+                do_action( 'getpaid_subscription_' . $status_transition['to'], $this, $status_transition );
1205
+
1206
+                if ( ! empty( $status_transition['from'] ) ) {
1207
+
1208
+                    /* translators: 1: old subscription status 2: new subscription status */
1209
+                    $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'] ) );
1210
+
1211
+                    // Note the transition occurred.
1212
+                    $this->get_parent_payment()->add_note( $transition_note, false, false, true );
1213
+
1214
+                    // Fire another hook.
1215
+                    do_action( 'getpaid_subscription_status_' . $status_transition['from'] . '_to_' . $status_transition['to'], $this->get_id(), $this );
1216
+                    do_action( 'getpaid_subscription_status_changed', $this, $status_transition['from'], $status_transition['to'] );
1217
+
1218
+                } else {
1219
+                    /* translators: %s: new invoice status */
1220
+                    $transition_note = sprintf( __( 'Subscription status set to %s.', 'invoicing' ), 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
+                }
1226
+            } catch ( Exception $e ) {
1227
+                $this->get_parent_payment()->add_note( __( 'Error during subscription status transition.', 'invoicing' ) . ' ' . $e->getMessage() );
1228
+            }
1229
+        }
1230
+
1231
+    }
1232
+
1233
+    /**
1234
+     * Save data to the database.
1235
+     *
1236
+     * @since 1.0.19
1237
+     * @return int subscription ID
1238
+     */
1239
+    public function save() {
1240
+        parent::save();
1241
+        $this->status_transition();
1242
+        return $this->get_id();
1243
+    }
1244
+
1245
+    /**
1246
+     * Activates a subscription.
1247
+     *
1248
+     * @since 1.0.19
1249
+     * @return int subscription ID
1250
+     */
1251
+    public function activate() {
1252
+        $status = 'trialling' == $this->get_status() ? 'trialling' : 'active';
1253
+        $this->set_status( $status );
1254
+        return $this->save();
1255
+    }
1256 1256
 
1257 1257
 }
Please login to merge, or discard this patch.
includes/gateways/class-getpaid-bank-transfer-gateway.php 1 patch
Indentation   +218 added lines, -218 removed lines patch added patch discarded remove patch
@@ -13,30 +13,30 @@  discard block
 block discarded – undo
13 13
 class GetPaid_Bank_Transfer_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 = 'bank_transfer';
21 21
 
22
-	/**
23
-	 * An array of features that this gateway supports.
24
-	 *
25
-	 * @var array
26
-	 */
27
-	protected $supports = array( 'subscription', 'addons', 'single_subscription_group', 'multiple_subscription_groups' );
22
+    /**
23
+     * An array of features that this gateway supports.
24
+     *
25
+     * @var array
26
+     */
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 = 8;
30
+     * Payment method order.
31
+     *
32
+     * @var int
33
+     */
34
+    public $order = 8;
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                = __( 'Direct bank transfer', 'invoicing' );
@@ -44,24 +44,24 @@  discard block
 block discarded – undo
44 44
         $this->checkout_button_text = __( 'Proceed', 'invoicing' );
45 45
         $this->instructions         = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) );
46 46
 
47
-		add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
-		add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
-		add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
-		add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
-		add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
-		add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
47
+        add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) );
48
+        add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 );
49
+        add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 );
50
+        add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 );
51
+        add_action( 'getpaid_should_renew_subscription', array( $this, 'maybe_renew_subscription' ) );
52
+        add_action( 'getpaid_invoice_status_publish', array( $this, 'invoice_paid' ), 20 );
53 53
 
54 54
     }
55 55
 
56 56
     /**
57
-	 * Process Payment.
58
-	 *
59
-	 * @param WPInv_Invoice $invoice Invoice.
60
-	 * @param array $submission_data Posted checkout fields.
61
-	 * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
-	 * @return array
63
-	 */
64
-	public function process_payment( $invoice, $submission_data, $submission ) {
57
+     * Process Payment.
58
+     *
59
+     * @param WPInv_Invoice $invoice Invoice.
60
+     * @param array $submission_data Posted checkout fields.
61
+     * @param GetPaid_Payment_Form_Submission $submission Checkout submission.
62
+     * @return array
63
+     */
64
+    public function process_payment( $invoice, $submission_data, $submission ) {
65 65
 
66 66
         // Add a transaction id.
67 67
         $invoice->set_transaction_id( $invoice->generate_key('bt_') );
@@ -82,66 +82,66 @@  discard block
 block discarded – undo
82 82
     }
83 83
 
84 84
     /**
85
-	 * Output for the order received page.
86
-	 *
87
-	 * @param WPInv_Invoice $invoice Invoice.
88
-	 */
89
-	public function thankyou_page( $invoice ) {
85
+     * Output for the order received page.
86
+     *
87
+     * @param WPInv_Invoice $invoice Invoice.
88
+     */
89
+    public function thankyou_page( $invoice ) {
90 90
 
91 91
         if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
92 92
 
93
-			echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
93
+            echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL;
94 94
 
95 95
             if ( ! empty( $this->instructions ) ) {
96 96
                 echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );
97
-			}
97
+            }
98 98
 
99
-			$this->bank_details( $invoice );
99
+            $this->bank_details( $invoice );
100 100
 
101
-			echo '</div>';
101
+            echo '</div>';
102 102
 
103 103
         }
104 104
 
105
-	}
105
+    }
106 106
 
107 107
     /**
108
-	 * Add content to the WPI emails.
109
-	 *
110
-	 * @param WPInv_Invoice $invoice Invoice.
111
-	 * @param string     $email_type Email format: plain text or HTML.
112
-	 * @param bool     $sent_to_admin Sent to admin.
113
-	 */
114
-	public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
108
+     * Add content to the WPI emails.
109
+     *
110
+     * @param WPInv_Invoice $invoice Invoice.
111
+     * @param string     $email_type Email format: plain text or HTML.
112
+     * @param bool     $sent_to_admin Sent to admin.
113
+     */
114
+    public function email_instructions( $invoice, $email_type, $sent_to_admin ) {
115 115
 
116
-		if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
116
+        if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) {
117 117
 
118
-			echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
118
+            echo '<div class="wpi-email-row getpaid-bank-transfer-details">';
119 119
 
120
-			if ( $this->instructions ) {
121
-				echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
120
+            if ( $this->instructions ) {
121
+                echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );
122 122
             }
123 123
 
124
-			$this->bank_details( $invoice );
124
+            $this->bank_details( $invoice );
125 125
 
126
-			echo '</div>';
126
+            echo '</div>';
127 127
 
128
-		}
128
+        }
129 129
 
130 130
     }
131 131
 
132 132
     /**
133
-	 * Get bank details and place into a list format.
134
-	 *
135
-	 * @param WPInv_Invoice $invoice Invoice.
136
-	 */
137
-	protected function bank_details( $invoice ) {
133
+     * Get bank details and place into a list format.
134
+     *
135
+     * @param WPInv_Invoice $invoice Invoice.
136
+     */
137
+    protected function bank_details( $invoice ) {
138 138
 
139
-		// Get the invoice country and country $locale.
140
-		$country = $invoice->get_country();
141
-		$locale  = $this->get_country_locale();
139
+        // Get the invoice country and country $locale.
140
+        $country = $invoice->get_country();
141
+        $locale  = $this->get_country_locale();
142 142
 
143
-		// Get sortcode label in the $locale array and use appropriate one.
144
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
143
+        // Get sortcode label in the $locale array and use appropriate one.
144
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
145 145
 
146 146
         $bank_fields = array(
147 147
             'ac_name'     => __( 'Account Name', 'invoicing' ),
@@ -170,144 +170,144 @@  discard block
 block discarded – undo
170 170
             return;
171 171
         }
172 172
 
173
-		echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL;
173
+        echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL;
174
+
175
+        echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
176
+
177
+        foreach ( $bank_info as $key => $data ) {
178
+
179
+            $key   = sanitize_html_class( $key );
180
+            $label = wp_kses_post( $data['label'] );
181
+            $value = wp_kses_post( wptexturize( $data['value'] ) );
182
+
183
+            echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL;
184
+        }
174 185
 
175
-		echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL;
186
+        echo '</table>';
176 187
 
177
-		foreach ( $bank_info as $key => $data ) {
188
+    }
178 189
 
179
-			$key   = sanitize_html_class( $key );
180
-			$label = wp_kses_post( $data['label'] );
181
-			$value = wp_kses_post( wptexturize( $data['value'] ) );
190
+    /**
191
+     * Get country locale if localized.
192
+     *
193
+     * @return array
194
+     */
195
+    public function get_country_locale() {
196
+
197
+        if ( empty( $this->locale ) ) {
198
+
199
+            // Locale information to be used - only those that are not 'Sort Code'.
200
+            $this->locale = apply_filters(
201
+                'getpaid_get_bank_transfer_locale',
202
+                array(
203
+                    'AU' => array(
204
+                        'sortcode' => array(
205
+                            'label' => __( 'BSB', 'invoicing' ),
206
+                        ),
207
+                    ),
208
+                    'CA' => array(
209
+                        'sortcode' => array(
210
+                            'label' => __( 'Bank transit number', 'invoicing' ),
211
+                        ),
212
+                    ),
213
+                    'IN' => array(
214
+                        'sortcode' => array(
215
+                            'label' => __( 'IFSC', 'invoicing' ),
216
+                        ),
217
+                    ),
218
+                    'IT' => array(
219
+                        'sortcode' => array(
220
+                            'label' => __( 'Branch sort', 'invoicing' ),
221
+                        ),
222
+                    ),
223
+                    'NZ' => array(
224
+                        'sortcode' => array(
225
+                            'label' => __( 'Bank code', 'invoicing' ),
226
+                        ),
227
+                    ),
228
+                    'SE' => array(
229
+                        'sortcode' => array(
230
+                            'label' => __( 'Bank code', 'invoicing' ),
231
+                        ),
232
+                    ),
233
+                    'US' => array(
234
+                        'sortcode' => array(
235
+                            'label' => __( 'Routing number', 'invoicing' ),
236
+                        ),
237
+                    ),
238
+                    'ZA' => array(
239
+                        'sortcode' => array(
240
+                            'label' => __( 'Branch code', 'invoicing' ),
241
+                        ),
242
+                    ),
243
+                )
244
+            );
182 245
 
183
-			echo "<tr class='getpaid-bank-transfer-$key'><th class='font-weight-bold'>$label</th><td class='w-75'>$value</td></tr>" . PHP_EOL;
184
-		}
246
+        }
185 247
 
186
-		echo '</table>';
248
+        return $this->locale;
187 249
 
188 250
     }
189 251
 
190 252
     /**
191
-	 * Get country locale if localized.
192
-	 *
193
-	 * @return array
194
-	 */
195
-	public function get_country_locale() {
196
-
197
-		if ( empty( $this->locale ) ) {
198
-
199
-			// Locale information to be used - only those that are not 'Sort Code'.
200
-			$this->locale = apply_filters(
201
-				'getpaid_get_bank_transfer_locale',
202
-				array(
203
-					'AU' => array(
204
-						'sortcode' => array(
205
-							'label' => __( 'BSB', 'invoicing' ),
206
-						),
207
-					),
208
-					'CA' => array(
209
-						'sortcode' => array(
210
-							'label' => __( 'Bank transit number', 'invoicing' ),
211
-						),
212
-					),
213
-					'IN' => array(
214
-						'sortcode' => array(
215
-							'label' => __( 'IFSC', 'invoicing' ),
216
-						),
217
-					),
218
-					'IT' => array(
219
-						'sortcode' => array(
220
-							'label' => __( 'Branch sort', 'invoicing' ),
221
-						),
222
-					),
223
-					'NZ' => array(
224
-						'sortcode' => array(
225
-							'label' => __( 'Bank code', 'invoicing' ),
226
-						),
227
-					),
228
-					'SE' => array(
229
-						'sortcode' => array(
230
-							'label' => __( 'Bank code', 'invoicing' ),
231
-						),
232
-					),
233
-					'US' => array(
234
-						'sortcode' => array(
235
-							'label' => __( 'Routing number', 'invoicing' ),
236
-						),
237
-					),
238
-					'ZA' => array(
239
-						'sortcode' => array(
240
-							'label' => __( 'Branch code', 'invoicing' ),
241
-						),
242
-					),
243
-				)
244
-			);
245
-
246
-		}
247
-
248
-		return $this->locale;
249
-
250
-	}
251
-
252
-	/**
253
-	 * Filters the gateway settings.
254
-	 *
255
-	 * @param array $admin_settings
256
-	 */
257
-	public function admin_settings( $admin_settings ) {
253
+     * Filters the gateway settings.
254
+     *
255
+     * @param array $admin_settings
256
+     */
257
+    public function admin_settings( $admin_settings ) {
258 258
 
259 259
         $admin_settings['bank_transfer_desc']['std']    = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' );
260
-		$admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
260
+        $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' );
261 261
 
262
-		$locale  = $this->get_country_locale();
262
+        $locale  = $this->get_country_locale();
263 263
 
264
-		// Get sortcode label in the $locale array and use appropriate one.
265
-		$country  = wpinv_default_billing_country();
266
-		$sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
264
+        // Get sortcode label in the $locale array and use appropriate one.
265
+        $country  = wpinv_default_billing_country();
266
+        $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' );
267 267
 
268
-		$admin_settings['bank_transfer_ac_name'] = array(
268
+        $admin_settings['bank_transfer_ac_name'] = array(
269 269
             'type' => 'text',
270 270
             'id'   => 'bank_transfer_ac_name',
271 271
             'name' => __( 'Account Name', 'invoicing' ),
272
-		);
272
+        );
273 273
 
274
-		$admin_settings['bank_transfer_ac_no'] = array(
274
+        $admin_settings['bank_transfer_ac_no'] = array(
275 275
             'type' => 'text',
276 276
             'id'   => 'bank_transfer_ac_no',
277 277
             'name' => __( 'Account Number', 'invoicing' ),
278
-		);
278
+        );
279 279
 
280
-		$admin_settings['bank_transfer_bank_name'] = array(
280
+        $admin_settings['bank_transfer_bank_name'] = array(
281 281
             'type' => 'text',
282 282
             'id'   => 'bank_transfer_bank_name',
283 283
             'name' => __( 'Bank Name', 'invoicing' ),
284
-		);
284
+        );
285 285
 
286
-		$admin_settings['bank_transfer_ifsc'] = array(
286
+        $admin_settings['bank_transfer_ifsc'] = array(
287 287
             'type' => 'text',
288 288
             'id'   => 'bank_transfer_ifsc',
289 289
             'name' => __( 'IFSC Code', 'invoicing' ),
290
-		);
290
+        );
291 291
 
292
-		$admin_settings['bank_transfer_iban'] = array(
292
+        $admin_settings['bank_transfer_iban'] = array(
293 293
             'type' => 'text',
294 294
             'id'   => 'bank_transfer_iban',
295 295
             'name' => __( 'IBAN', 'invoicing' ),
296
-		);
296
+        );
297 297
 
298
-		$admin_settings['bank_transfer_bic'] = array(
298
+        $admin_settings['bank_transfer_bic'] = array(
299 299
             'type' => 'text',
300 300
             'id'   => 'bank_transfer_bic',
301 301
             'name' => __( 'BIC/Swift Code', 'invoicing' ),
302
-		);
302
+        );
303 303
 
304
-		$admin_settings['bank_transfer_sort_code'] = array(
305
-			'type' => 'text',
306
-			'id'   => 'bank_transfer_sort_code',
307
-			'name' => $sortcode,
308
-		);
304
+        $admin_settings['bank_transfer_sort_code'] = array(
305
+            'type' => 'text',
306
+            'id'   => 'bank_transfer_sort_code',
307
+            'name' => $sortcode,
308
+        );
309 309
 
310
-		$admin_settings['bank_transfer_info'] = array(
310
+        $admin_settings['bank_transfer_info'] = array(
311 311
             'id'   => 'bank_transfer_info',
312 312
             'name' => __( 'Instructions', 'invoicing' ),
313 313
             'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ),
@@ -317,17 +317,17 @@  discard block
 block discarded – undo
317 317
             'rows' => 5
318 318
         );
319 319
 
320
-		return $admin_settings;
321
-	}
320
+        return $admin_settings;
321
+    }
322 322
 
323
-	/**
324
-	 * Processes invoice addons.
325
-	 *
326
-	 * @param WPInv_Invoice $invoice
327
-	 * @param GetPaid_Form_Item[] $items
328
-	 * @return WPInv_Invoice
329
-	 */
330
-	public function process_addons( $invoice, $items ) {
323
+    /**
324
+     * Processes invoice addons.
325
+     *
326
+     * @param WPInv_Invoice $invoice
327
+     * @param GetPaid_Form_Item[] $items
328
+     * @return WPInv_Invoice
329
+     */
330
+    public function process_addons( $invoice, $items ) {
331 331
 
332 332
         foreach ( $items as $item ) {
333 333
             $invoice->add_item( $item );
@@ -335,70 +335,70 @@  discard block
 block discarded – undo
335 335
 
336 336
         $invoice->recalculate_total();
337 337
         $invoice->save();
338
-	}
338
+    }
339 339
 
340
-	/**
341
-	 * (Maybe) renews a bank transfer subscription profile.
342
-	 *
343
-	 *
340
+    /**
341
+     * (Maybe) renews a bank transfer subscription profile.
342
+     *
343
+     *
344 344
      * @param WPInv_Subscription $subscription
345
-	 */
346
-	public function maybe_renew_subscription( $subscription ) {
345
+     */
346
+    public function maybe_renew_subscription( $subscription ) {
347 347
 
348 348
         // Ensure its our subscription && it's active.
349 349
         if ( $this->id == $subscription->get_gateway() && $subscription->has_status( 'active trialling' ) ) {
350
-			$subscription->create_payment();
350
+            $subscription->create_payment();
351 351
         }
352 352
 
353 353
     }
354 354
 
355
-	/**
356
-	 * Process a bank transfer payment.
357
-	 *
358
-	 *
355
+    /**
356
+     * Process a bank transfer payment.
357
+     *
358
+     *
359 359
      * @param WPInv_Invoice $invoice
360
-	 */
361
-	public function invoice_paid( $invoice ) {
360
+     */
361
+    public function invoice_paid( $invoice ) {
362 362
 
363
-		// Abort if not paid by bank transfer.
364
-		if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
365
-			return;
366
-		}
363
+        // Abort if not paid by bank transfer.
364
+        if ( $this->id !== $invoice->get_gateway() || ! $invoice->is_recurring() ) {
365
+            return;
366
+        }
367 367
 
368
-		// Is it a parent payment?
369
-		if ( 0 == $invoice->get_parent_id() ) {
368
+        // Is it a parent payment?
369
+        if ( 0 == $invoice->get_parent_id() ) {
370 370
 
371
-			// (Maybe) activate subscriptions.
372
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
371
+            // (Maybe) activate subscriptions.
372
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
373 373
 
374
-			if ( ! empty( $subscriptions ) ) {
375
-				$subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
374
+            if ( ! empty( $subscriptions ) ) {
375
+                $subscriptions = is_array( $subscriptions ) ? $subscriptions : array( $subscriptions );
376 376
 
377
-				foreach ( $subscriptions as $subscription ) {
378
-					if ( $subscription->exists() ) {
379
-						$duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
380
-						$expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
377
+                foreach ( $subscriptions as $subscription ) {
378
+                    if ( $subscription->exists() ) {
379
+                        $duration = strtotime( $subscription->get_expiration() ) - strtotime( $subscription->get_date_created() );
380
+                        $expiry   = date( 'Y-m-d H:i:s', ( current_time( 'timestamp' ) + $duration ) );
381 381
 
382
-						$subscription->set_next_renewal_date( $expiry );
383
-						$subscription->set_date_created( current_time( 'mysql' ) );
384
-						$subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
385
-						$subscription->activate();
386
-					}
387
-				}
382
+                        $subscription->set_next_renewal_date( $expiry );
383
+                        $subscription->set_date_created( current_time( 'mysql' ) );
384
+                        $subscription->set_profile_id( 'bt_sub_' . $invoice->get_id() . '_' . $subscription->get_id() );
385
+                        $subscription->activate();
386
+                    }
387
+                }
388 388
 
389
-			}
389
+            }
390 390
 
391
-		} else {
391
+        } else {
392 392
 
393
-			$subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
393
+            $subscription = getpaid_get_subscription( $invoice->get_subscription_id() );
394 394
 
395
-			// Renew the subscription.
396
-			if ( $subscription && $subscription->exists() ) {
397
-				$subscription->add_payment( array(), $invoice );
398
-				$subscription->renew();
399
-			}
395
+            // Renew the subscription.
396
+            if ( $subscription && $subscription->exists() ) {
397
+                $subscription->add_payment( array(), $invoice );
398
+                $subscription->renew();
399
+            }
400 400
 
401
-		}
401
+        }
402 402
 
403 403
     }
404 404
 
Please login to merge, or discard this patch.
ayecode/wp-ayecode-ui/includes/components/class-aui-component-input.php 1 patch
Indentation   +1046 added lines, -1046 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit; // Exit if accessed directly
4
+    exit; // Exit if accessed directly
5 5
 }
6 6
 
7 7
 /**
@@ -11,1056 +11,1056 @@  discard block
 block discarded – undo
11 11
  */
12 12
 class AUI_Component_Input {
13 13
 
14
-	/**
15
-	 * Build the component.
16
-	 *
17
-	 * @param array $args
18
-	 *
19
-	 * @return string The rendered component.
20
-	 */
21
-	public static function input($args = array()){
22
-		$defaults = array(
23
-			'type'       => 'text',
24
-			'name'       => '',
25
-			'class'      => '',
26
-			'wrap_class' => '',
27
-			'id'         => '',
28
-			'placeholder'=> '',
29
-			'title'      => '',
30
-			'value'      => '',
31
-			'required'   => false,
32
-			'label'      => '',
33
-			'label_after'=> false,
34
-			'label_class'=> '',
35
-			'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
36
-			'help_text'  => '',
37
-			'validation_text'   => '',
38
-			'validation_pattern' => '',
39
-			'no_wrap'    => false,
40
-			'input_group_right' => '',
41
-			'input_group_left' => '',
42
-			'input_group_right_inside' => false, // forces the input group inside the input
43
-			'input_group_left_inside' => false, // forces the input group inside the input
44
-			'step'       => '',
45
-			'switch'     => false, // to show checkbox as a switch
46
-			'checked'   => false, // set a checkbox or radio as selected
47
-			'password_toggle' => true, // toggle view/hide password
48
-			'element_require'   => '', // [%element_id%] == "1"
49
-			'extra_attributes'  => array(), // an array of extra attributes
50
-			'wrap_attributes' => array()
51
-		);
52
-
53
-		/**
54
-		 * Parse incoming $args into an array and merge it with $defaults
55
-		 */
56
-		$args   = wp_parse_args( $args, $defaults );
57
-		$output = '';
58
-		if ( ! empty( $args['type'] ) ) {
59
-			// hidden label option needs to be empty
60
-			$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
61
-
62
-			$type = sanitize_html_class( $args['type'] );
63
-
64
-			$help_text = '';
65
-			$label = '';
66
-			$label_after = $args['label_after'];
67
-			$label_args = array(
68
-				'title'=> $args['label'],
69
-				'for'=> $args['id'],
70
-				'class' => $args['label_class']." ",
71
-				'label_type' => $args['label_type']
72
-			);
73
-
74
-			// floating labels need label after
75
-			if( $args['label_type'] == 'floating' && $type != 'checkbox' ){
76
-				$label_after = true;
77
-				$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
78
-			}
79
-
80
-			// Some special sauce for files
81
-			if($type=='file' ){
82
-				$label_after = true; // if type file we need the label after
83
-				$args['class'] .= ' custom-file-input ';
84
-			}elseif($type=='checkbox'){
85
-				$label_after = true; // if type file we need the label after
86
-				$args['class'] .= ' custom-control-input ';
87
-			}elseif($type=='datepicker' || $type=='timepicker'){
88
-				$type = 'text';
89
-				//$args['class'] .= ' aui-flatpickr bg-initial ';
90
-				$args['class'] .= ' bg-initial ';
91
-
92
-				$args['extra_attributes']['data-aui-init'] = 'flatpickr';
93
-				// enqueue the script
94
-				$aui_settings = AyeCode_UI_Settings::instance();
95
-				$aui_settings->enqueue_flatpickr();
96
-			}
97
-
98
-
99
-			// open/type
100
-			$output .= '<input type="' . $type . '" ';
101
-
102
-			// name
103
-			if(!empty($args['name'])){
104
-				$output .= ' name="'.esc_attr($args['name']).'" ';
105
-			}
106
-
107
-			// id
108
-			if(!empty($args['id'])){
109
-				$output .= ' id="'.sanitize_html_class($args['id']).'" ';
110
-			}
111
-
112
-			// placeholder
113
-			if(isset($args['placeholder']) && '' != $args['placeholder'] ){
114
-				$output .= ' placeholder="'.esc_attr($args['placeholder']).'" ';
115
-			}
116
-
117
-			// title
118
-			if(!empty($args['title'])){
119
-				$output .= ' title="'.esc_attr($args['title']).'" ';
120
-			}
121
-
122
-			// value
123
-			if(!empty($args['value'])){
124
-				$output .= AUI_Component_Helper::value($args['value']);
125
-			}
126
-
127
-			// checked, for radio and checkboxes
128
-			if( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ){
129
-				$output .= ' checked ';
130
-			}
131
-
132
-			// validation text
133
-			if(!empty($args['validation_text'])){
134
-				$output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" ';
135
-				$output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
136
-			}
137
-
138
-			// validation_pattern
139
-			if(!empty($args['validation_pattern'])){
140
-				$output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
141
-			}
142
-
143
-			// step (for numbers)
144
-			if(!empty($args['step'])){
145
-				$output .= ' step="'.$args['step'].'" ';
146
-			}
147
-
148
-			// required
149
-			if(!empty($args['required'])){
150
-				$output .= ' required ';
151
-			}
152
-
153
-			// class
154
-			$class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
155
-			$output .= ' class="form-control '.$class.'" ';
156
-
157
-			// data-attributes
158
-			$output .= AUI_Component_Helper::data_attributes($args);
159
-
160
-			// extra attributes
161
-			if(!empty($args['extra_attributes'])){
162
-				$output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
163
-			}
164
-
165
-			// close
166
-			$output .= ' >';
167
-
168
-
169
-			// label
170
-			if(!empty($args['label'])){
171
-				if($type == 'file'){$label_args['class'] .= 'custom-file-label';}
172
-				elseif($type == 'checkbox'){$label_args['class'] .= 'custom-control-label';}
173
-				$label = self::label( $label_args, $type );
174
-			}
175
-
176
-			// help text
177
-			if(!empty($args['help_text'])){
178
-				$help_text = AUI_Component_Helper::help_text($args['help_text']);
179
-			}
180
-
181
-
182
-			// set help text in the correct possition
183
-			if($label_after){
184
-				$output .= $label . $help_text;
185
-			}
186
-
187
-			// some input types need a separate wrap
188
-			if($type == 'file') {
189
-				$output = self::wrap( array(
190
-					'content' => $output,
191
-					'class'   => 'form-group custom-file'
192
-				) );
193
-			}elseif($type == 'checkbox'){
194
-				$wrap_class = $args['switch'] ? 'custom-switch' : 'custom-checkbox';
195
-				$output = self::wrap( array(
196
-					'content' => $output,
197
-					'class'   => 'custom-control '.$wrap_class
198
-				) );
199
-
200
-				if($args['label_type']=='horizontal'){
201
-					$output = '<div class="col-sm-2 col-form-label"></div><div class="col-sm-10">' . $output . '</div>';
202
-				}
203
-			}elseif($type == 'password' && $args['password_toggle'] && !$args['input_group_right']){
204
-
205
-
206
-				// allow password field to toggle view
207
-				$args['input_group_right'] = '<span class="input-group-text c-pointer px-3" 
14
+    /**
15
+     * Build the component.
16
+     *
17
+     * @param array $args
18
+     *
19
+     * @return string The rendered component.
20
+     */
21
+    public static function input($args = array()){
22
+        $defaults = array(
23
+            'type'       => 'text',
24
+            'name'       => '',
25
+            'class'      => '',
26
+            'wrap_class' => '',
27
+            'id'         => '',
28
+            'placeholder'=> '',
29
+            'title'      => '',
30
+            'value'      => '',
31
+            'required'   => false,
32
+            'label'      => '',
33
+            'label_after'=> false,
34
+            'label_class'=> '',
35
+            'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
36
+            'help_text'  => '',
37
+            'validation_text'   => '',
38
+            'validation_pattern' => '',
39
+            'no_wrap'    => false,
40
+            'input_group_right' => '',
41
+            'input_group_left' => '',
42
+            'input_group_right_inside' => false, // forces the input group inside the input
43
+            'input_group_left_inside' => false, // forces the input group inside the input
44
+            'step'       => '',
45
+            'switch'     => false, // to show checkbox as a switch
46
+            'checked'   => false, // set a checkbox or radio as selected
47
+            'password_toggle' => true, // toggle view/hide password
48
+            'element_require'   => '', // [%element_id%] == "1"
49
+            'extra_attributes'  => array(), // an array of extra attributes
50
+            'wrap_attributes' => array()
51
+        );
52
+
53
+        /**
54
+         * Parse incoming $args into an array and merge it with $defaults
55
+         */
56
+        $args   = wp_parse_args( $args, $defaults );
57
+        $output = '';
58
+        if ( ! empty( $args['type'] ) ) {
59
+            // hidden label option needs to be empty
60
+            $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
61
+
62
+            $type = sanitize_html_class( $args['type'] );
63
+
64
+            $help_text = '';
65
+            $label = '';
66
+            $label_after = $args['label_after'];
67
+            $label_args = array(
68
+                'title'=> $args['label'],
69
+                'for'=> $args['id'],
70
+                'class' => $args['label_class']." ",
71
+                'label_type' => $args['label_type']
72
+            );
73
+
74
+            // floating labels need label after
75
+            if( $args['label_type'] == 'floating' && $type != 'checkbox' ){
76
+                $label_after = true;
77
+                $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
78
+            }
79
+
80
+            // Some special sauce for files
81
+            if($type=='file' ){
82
+                $label_after = true; // if type file we need the label after
83
+                $args['class'] .= ' custom-file-input ';
84
+            }elseif($type=='checkbox'){
85
+                $label_after = true; // if type file we need the label after
86
+                $args['class'] .= ' custom-control-input ';
87
+            }elseif($type=='datepicker' || $type=='timepicker'){
88
+                $type = 'text';
89
+                //$args['class'] .= ' aui-flatpickr bg-initial ';
90
+                $args['class'] .= ' bg-initial ';
91
+
92
+                $args['extra_attributes']['data-aui-init'] = 'flatpickr';
93
+                // enqueue the script
94
+                $aui_settings = AyeCode_UI_Settings::instance();
95
+                $aui_settings->enqueue_flatpickr();
96
+            }
97
+
98
+
99
+            // open/type
100
+            $output .= '<input type="' . $type . '" ';
101
+
102
+            // name
103
+            if(!empty($args['name'])){
104
+                $output .= ' name="'.esc_attr($args['name']).'" ';
105
+            }
106
+
107
+            // id
108
+            if(!empty($args['id'])){
109
+                $output .= ' id="'.sanitize_html_class($args['id']).'" ';
110
+            }
111
+
112
+            // placeholder
113
+            if(isset($args['placeholder']) && '' != $args['placeholder'] ){
114
+                $output .= ' placeholder="'.esc_attr($args['placeholder']).'" ';
115
+            }
116
+
117
+            // title
118
+            if(!empty($args['title'])){
119
+                $output .= ' title="'.esc_attr($args['title']).'" ';
120
+            }
121
+
122
+            // value
123
+            if(!empty($args['value'])){
124
+                $output .= AUI_Component_Helper::value($args['value']);
125
+            }
126
+
127
+            // checked, for radio and checkboxes
128
+            if( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ){
129
+                $output .= ' checked ';
130
+            }
131
+
132
+            // validation text
133
+            if(!empty($args['validation_text'])){
134
+                $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" ';
135
+                $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
136
+            }
137
+
138
+            // validation_pattern
139
+            if(!empty($args['validation_pattern'])){
140
+                $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
141
+            }
142
+
143
+            // step (for numbers)
144
+            if(!empty($args['step'])){
145
+                $output .= ' step="'.$args['step'].'" ';
146
+            }
147
+
148
+            // required
149
+            if(!empty($args['required'])){
150
+                $output .= ' required ';
151
+            }
152
+
153
+            // class
154
+            $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
155
+            $output .= ' class="form-control '.$class.'" ';
156
+
157
+            // data-attributes
158
+            $output .= AUI_Component_Helper::data_attributes($args);
159
+
160
+            // extra attributes
161
+            if(!empty($args['extra_attributes'])){
162
+                $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
163
+            }
164
+
165
+            // close
166
+            $output .= ' >';
167
+
168
+
169
+            // label
170
+            if(!empty($args['label'])){
171
+                if($type == 'file'){$label_args['class'] .= 'custom-file-label';}
172
+                elseif($type == 'checkbox'){$label_args['class'] .= 'custom-control-label';}
173
+                $label = self::label( $label_args, $type );
174
+            }
175
+
176
+            // help text
177
+            if(!empty($args['help_text'])){
178
+                $help_text = AUI_Component_Helper::help_text($args['help_text']);
179
+            }
180
+
181
+
182
+            // set help text in the correct possition
183
+            if($label_after){
184
+                $output .= $label . $help_text;
185
+            }
186
+
187
+            // some input types need a separate wrap
188
+            if($type == 'file') {
189
+                $output = self::wrap( array(
190
+                    'content' => $output,
191
+                    'class'   => 'form-group custom-file'
192
+                ) );
193
+            }elseif($type == 'checkbox'){
194
+                $wrap_class = $args['switch'] ? 'custom-switch' : 'custom-checkbox';
195
+                $output = self::wrap( array(
196
+                    'content' => $output,
197
+                    'class'   => 'custom-control '.$wrap_class
198
+                ) );
199
+
200
+                if($args['label_type']=='horizontal'){
201
+                    $output = '<div class="col-sm-2 col-form-label"></div><div class="col-sm-10">' . $output . '</div>';
202
+                }
203
+            }elseif($type == 'password' && $args['password_toggle'] && !$args['input_group_right']){
204
+
205
+
206
+                // allow password field to toggle view
207
+                $args['input_group_right'] = '<span class="input-group-text c-pointer px-3" 
208 208
 onclick="var $el = jQuery(this).find(\'i\');$el.toggleClass(\'fa-eye fa-eye-slash\');
209 209
 var $eli = jQuery(this).parent().parent().find(\'input\');
210 210
 if($el.hasClass(\'fa-eye\'))
211 211
 {$eli.attr(\'type\',\'text\');}
212 212
 else{$eli.attr(\'type\',\'password\');}"
213 213
 ><i class="far fa-fw fa-eye-slash"></i></span>';
214
-			}
215
-
216
-			// input group wraps
217
-			if($args['input_group_left'] || $args['input_group_right']){
218
-				$w100 = strpos($args['class'], 'w-100') !== false ? ' w-100' : '';
219
-				if($args['input_group_left']){
220
-					$output = self::wrap( array(
221
-						'content' => $output,
222
-						'class'   => $args['input_group_left_inside'] ? 'input-group-inside position-relative'.$w100  : 'input-group',
223
-						'input_group_left' => $args['input_group_left'],
224
-						'input_group_left_inside'    => $args['input_group_left_inside']
225
-					) );
226
-				}
227
-				if($args['input_group_right']){
228
-					$output = self::wrap( array(
229
-						'content' => $output,
230
-						'class'   => $args['input_group_right_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group',
231
-						'input_group_right' => $args['input_group_right'],
232
-						'input_group_right_inside'    => $args['input_group_right_inside']
233
-					) );
234
-				}
235
-
236
-			}
237
-
238
-			if(!$label_after){
239
-				$output .= $help_text;
240
-			}
241
-
242
-
243
-			if($args['label_type']=='horizontal' && $type != 'checkbox'){
244
-				$output = self::wrap( array(
245
-					'content' => $output,
246
-					'class'   => 'col-sm-10',
247
-				) );
248
-			}
249
-
250
-			if(!$label_after){
251
-				$output = $label . $output;
252
-			}
253
-
254
-			// wrap
255
-			if ( ! $args['no_wrap'] ) {
256
-				$form_group_class = $args['label_type']=='floating' && $type != 'checkbox' ? 'form-label-group' : 'form-group';
257
-				$wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class;
258
-				$wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
259
-				$output = self::wrap(array(
260
-					'content' => $output,
261
-					'class'   => $wrap_class,
262
-					'element_require'   => $args['element_require'],
263
-					'argument_id'  => $args['id'],
264
-					'wrap_attributes' => $args['wrap_attributes'],
265
-				));
266
-			}
267
-		}
268
-
269
-		return $output;
270
-	}
271
-
272
-	/**
273
-	 * Build the component.
274
-	 *
275
-	 * @param array $args
276
-	 *
277
-	 * @return string The rendered component.
278
-	 */
279
-	public static function textarea($args = array()){
280
-		$defaults = array(
281
-			'name'       => '',
282
-			'class'      => '',
283
-			'wrap_class' => '',
284
-			'id'         => '',
285
-			'placeholder'=> '',
286
-			'title'      => '',
287
-			'value'      => '',
288
-			'required'   => false,
289
-			'label'      => '',
290
-			'label_after'=> false,
291
-			'label_class'      => '',
292
-			'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
293
-			'help_text'  => '',
294
-			'validation_text'   => '',
295
-			'validation_pattern' => '',
296
-			'no_wrap'    => false,
297
-			'rows'      => '',
298
-			'wysiwyg'   => false,
299
-			'allow_tags' => false, // Allow HTML tags
300
-			'element_require'   => '', // [%element_id%] == "1"
301
-			'extra_attributes'  => array(), // an array of extra attributes
302
-			'wrap_attributes'   => array(),
303
-		);
304
-
305
-		/**
306
-		 * Parse incoming $args into an array and merge it with $defaults
307
-		 */
308
-		$args   = wp_parse_args( $args, $defaults );
309
-		$output = '';
310
-
311
-		// hidden label option needs to be empty
312
-		$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
313
-
314
-		// floating labels don't work with wysiwyg so set it as top
315
-		if($args['label_type'] == 'floating' && !empty($args['wysiwyg'])){
316
-			$args['label_type'] = 'top';
317
-		}
318
-
319
-		$label_after = $args['label_after'];
320
-
321
-		// floating labels need label after
322
-		if( $args['label_type'] == 'floating' && empty($args['wysiwyg']) ){
323
-			$label_after = true;
324
-			$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
325
-		}
326
-
327
-		// label
328
-		if(!empty($args['label']) && is_array($args['label'])){
329
-		}elseif(!empty($args['label']) && !$label_after){
330
-			$label_args = array(
331
-				'title'=> $args['label'],
332
-				'for'=> $args['id'],
333
-				'class' => $args['label_class']." ",
334
-				'label_type' => $args['label_type']
335
-			);
336
-			$output .= self::label( $label_args );
337
-		}
338
-
339
-		// maybe horizontal label
340
-		if($args['label_type']=='horizontal'){
341
-			$output .= '<div class="col-sm-10">';
342
-		}
343
-
344
-		if(!empty($args['wysiwyg'])){
345
-			ob_start();
346
-			$content = $args['value'];
347
-			$editor_id = !empty($args['id']) ? sanitize_html_class($args['id']) : 'wp_editor';
348
-			$settings = array(
349
-				'textarea_rows' => !empty(absint($args['rows'])) ? absint($args['rows']) : 4,
350
-				'quicktags'     => false,
351
-				'media_buttons' => false,
352
-				'editor_class'  => 'form-control',
353
-				'textarea_name' => !empty($args['name']) ? sanitize_html_class($args['name']) : sanitize_html_class($args['id']),
354
-				'teeny'         => true,
355
-			);
356
-
357
-			// maybe set settings if array
358
-			if(is_array($args['wysiwyg'])){
359
-				$settings  = wp_parse_args( $args['wysiwyg'], $settings );
360
-			}
361
-
362
-			wp_editor( $content, $editor_id, $settings );
363
-			$output .= ob_get_clean();
364
-		}else{
365
-
366
-			// open
367
-			$output .= '<textarea ';
368
-
369
-			// name
370
-			if(!empty($args['name'])){
371
-				$output .= ' name="'.esc_attr($args['name']).'" ';
372
-			}
373
-
374
-			// id
375
-			if(!empty($args['id'])){
376
-				$output .= ' id="'.sanitize_html_class($args['id']).'" ';
377
-			}
378
-
379
-			// placeholder
380
-			if(isset($args['placeholder']) && '' != $args['placeholder']){
381
-				$output .= ' placeholder="'.esc_attr($args['placeholder']).'" ';
382
-			}
383
-
384
-			// title
385
-			if(!empty($args['title'])){
386
-				$output .= ' title="'.esc_attr($args['title']).'" ';
387
-			}
388
-
389
-			// validation text
390
-			if(!empty($args['validation_text'])){
391
-				$output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" ';
392
-				$output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
393
-			}
394
-
395
-			// validation_pattern
396
-			if(!empty($args['validation_pattern'])){
397
-				$output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
398
-			}
399
-
400
-			// required
401
-			if(!empty($args['required'])){
402
-				$output .= ' required ';
403
-			}
404
-
405
-			// rows
406
-			if(!empty($args['rows'])){
407
-				$output .= ' rows="'.absint($args['rows']).'" ';
408
-			}
409
-
410
-
411
-			// class
412
-			$class = !empty($args['class']) ? $args['class'] : '';
413
-			$output .= ' class="form-control '.$class.'" ';
414
-
415
-			// extra attributes
416
-			if(!empty($args['extra_attributes'])){
417
-				$output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
418
-			}
419
-
420
-			// close tag
421
-			$output .= ' >';
422
-
423
-			// value
424
-			if ( ! empty( $args['value'] ) ) {
425
-				if ( ! empty( $args['allow_tags'] ) ) {
426
-					$output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML.
427
-				} else {
428
-					$output .= sanitize_textarea_field( $args['value'] );
429
-				}
430
-			}
431
-
432
-			// closing tag
433
-			$output .= '</textarea>';
434
-
435
-		}
436
-
437
-		if(!empty($args['label']) && $label_after){
438
-			$label_args = array(
439
-				'title'=> $args['label'],
440
-				'for'=> $args['id'],
441
-				'class' => $args['label_class']." ",
442
-				'label_type' => $args['label_type']
443
-			);
444
-			$output .= self::label( $label_args );
445
-		}
446
-
447
-		// help text
448
-		if(!empty($args['help_text'])){
449
-			$output .= AUI_Component_Helper::help_text($args['help_text']);
450
-		}
451
-
452
-		// maybe horizontal label
453
-		if($args['label_type']=='horizontal'){
454
-			$output .= '</div>';
455
-		}
456
-
457
-
458
-		// wrap
459
-		if(!$args['no_wrap']){
460
-			$form_group_class = $args['label_type']=='floating' ? 'form-label-group' : 'form-group';
461
-			$wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class;
462
-			$wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
463
-			$output = self::wrap(array(
464
-				'content' => $output,
465
-				'class'   => $wrap_class,
466
-				'element_require'   => $args['element_require'],
467
-				'argument_id'  => $args['id'],
468
-				'wrap_attributes' => $args['wrap_attributes'],
469
-			));
470
-		}
471
-
472
-
473
-		return $output;
474
-	}
475
-
476
-	public static function label($args = array(), $type = ''){
477
-		//<label for="exampleInputEmail1">Email address</label>
478
-		$defaults = array(
479
-			'title'       => 'div',
480
-			'for'      => '',
481
-			'class'      => '',
482
-			'label_type'    => '', // empty = hidden, top, horizontal
483
-		);
484
-
485
-		/**
486
-		 * Parse incoming $args into an array and merge it with $defaults
487
-		 */
488
-		$args   = wp_parse_args( $args, $defaults );
489
-		$output = '';
490
-
491
-		if($args['title']){
492
-
493
-			// maybe hide labels //@todo set a global option for visibility class
494
-			if($type == 'file' || $type == 'checkbox' || $type == 'radio' || !empty($args['label_type']) ){
495
-				$class = $args['class'];
496
-			}else{
497
-				$class = 'sr-only '.$args['class'];
498
-			}
499
-
500
-			// maybe horizontal
501
-			if($args['label_type']=='horizontal' && $type != 'checkbox'){
502
-				$class .= ' col-sm-2 col-form-label';
503
-			}
504
-
505
-			// open
506
-			$output .= '<label ';
507
-
508
-			// for
509
-			if(!empty($args['for'])){
510
-				$output .= ' for="'.esc_attr($args['for']).'" ';
511
-			}
512
-
513
-			// class
514
-			$class = $class ? AUI_Component_Helper::esc_classes( $class ) : '';
515
-			$output .= ' class="'.$class.'" ';
516
-
517
-			// close
518
-			$output .= '>';
519
-
520
-
521
-			// title, don't escape fully as can contain html
522
-			if(!empty($args['title'])){
523
-				$output .= wp_kses_post($args['title']);
524
-			}
525
-
526
-			// close wrap
527
-			$output .= '</label>';
528
-
529
-
530
-		}
531
-
532
-
533
-		return $output;
534
-	}
535
-
536
-	/**
537
-	 * Wrap some content in a HTML wrapper.
538
-	 *
539
-	 * @param array $args
540
-	 *
541
-	 * @return string
542
-	 */
543
-	public static function wrap($args = array()){
544
-		$defaults = array(
545
-			'type'       => 'div',
546
-			'class'      => 'form-group',
547
-			'content'   => '',
548
-			'input_group_left' => '',
549
-			'input_group_right' => '',
550
-			'input_group_left_inside' => false,
551
-			'input_group_right_inside' => false,
552
-			'element_require'   => '',
553
-			'argument_id'   => '',
554
-			'wrap_attributes' => array()
555
-		);
556
-
557
-		/**
558
-		 * Parse incoming $args into an array and merge it with $defaults
559
-		 */
560
-		$args   = wp_parse_args( $args, $defaults );
561
-		$output = '';
562
-		if($args['type']){
563
-
564
-			// open
565
-			$output .= '<'.sanitize_html_class($args['type']);
566
-
567
-			// element require
568
-			if(!empty($args['element_require'])){
569
-				$output .= AUI_Component_Helper::element_require($args['element_require']);
570
-				$args['class'] .= " aui-conditional-field";
571
-			}
572
-
573
-			// argument_id
574
-			if( !empty($args['argument_id']) ){
575
-				$output .= ' data-argument="'.esc_attr($args['argument_id']).'"';
576
-			}
577
-
578
-			// class
579
-			$class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
580
-			$output .= ' class="'.$class.'" ';
581
-
582
-			// Attributes
583
-			if ( ! empty( $args['wrap_attributes'] ) ) {
584
-				$output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] );
585
-			}
586
-
587
-			// close wrap
588
-			$output .= ' >';
589
-
590
-
591
-			// Input group left
592
-			if(!empty($args['input_group_left'])){
593
-				$position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : '';
594
-				$input_group_left = strpos($args['input_group_left'], '<') !== false ? $args['input_group_left'] : '<span class="input-group-text">'.$args['input_group_left'].'</span>';
595
-				$output .= '<div class="input-group-prepend '.$position_class.'">'.$input_group_left.'</div>';
596
-			}
597
-
598
-			// content
599
-			$output .= $args['content'];
600
-
601
-			// Input group right
602
-			if(!empty($args['input_group_right'])){
603
-				$position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : '';
604
-				$input_group_right = strpos($args['input_group_right'], '<') !== false ? $args['input_group_right'] : '<span class="input-group-text">'.$args['input_group_right'].'</span>';
605
-				$output .= '<div class="input-group-append '.$position_class.'">'.$input_group_right.'</div>';
606
-			}
607
-
608
-
609
-			// close wrap
610
-			$output .= '</'.sanitize_html_class($args['type']).'>';
611
-
612
-
613
-		}else{
614
-			$output = $args['content'];
615
-		}
616
-
617
-		return $output;
618
-	}
619
-
620
-	/**
621
-	 * Build the component.
622
-	 *
623
-	 * @param array $args
624
-	 *
625
-	 * @return string The rendered component.
626
-	 */
627
-	public static function select($args = array()){
628
-		$defaults = array(
629
-			'class'      => '',
630
-			'wrap_class' => '',
631
-			'id'         => '',
632
-			'title'      => '',
633
-			'value'      => '', // can be an array or a string
634
-			'required'   => false,
635
-			'label'      => '',
636
-			'label_after'=> false,
637
-			'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
638
-			'label_class'      => '',
639
-			'help_text'  => '',
640
-			'placeholder'=> '',
641
-			'options'    => array(), // array or string
642
-			'icon'       => '',
643
-			'multiple'   => false,
644
-			'select2'    => false,
645
-			'no_wrap'    => false,
646
-			'element_require'   => '', // [%element_id%] == "1"
647
-			'extra_attributes'  => array(), // an array of extra attributes
648
-			'wrap_attributes'   => array(),
649
-		);
650
-
651
-		/**
652
-		 * Parse incoming $args into an array and merge it with $defaults
653
-		 */
654
-		$args   = wp_parse_args( $args, $defaults );
655
-		$output = '';
656
-
657
-		// for now lets hide floating labels
658
-		if( $args['label_type'] == 'floating' ){$args['label_type'] = 'hidden';}
659
-
660
-		// hidden label option needs to be empty
661
-		$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
662
-
663
-
664
-		$label_after = $args['label_after'];
665
-
666
-		// floating labels need label after
667
-		if( $args['label_type'] == 'floating' ){
668
-			$label_after = true;
669
-			$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
670
-		}
671
-
672
-		// Maybe setup select2
673
-		$is_select2 = false;
674
-		if(!empty($args['select2'])){
675
-			$args['class'] .= ' aui-select2';
676
-			$is_select2 = true;
677
-		}elseif( strpos($args['class'], 'aui-select2') !== false){
678
-			$is_select2 = true;
679
-		}
680
-
681
-		// select2 tags
682
-		if( !empty($args['select2']) && $args['select2'] === 'tags'){ // triple equals needed here for some reason
683
-			$args['data-tags'] = 'true';
684
-			$args['data-token-separators'] = "[',']";
685
-			$args['multiple'] = true;
686
-		}
687
-
688
-		// select2 placeholder
689
-		if($is_select2 && isset($args['placeholder']) && '' != $args['placeholder'] && empty($args['data-placeholder'])){
690
-			$args['data-placeholder'] = esc_attr($args['placeholder']);
691
-			$args['data-allow-clear'] = isset($args['data-allow-clear']) ? (bool) $args['data-allow-clear'] : true;
692
-		}
693
-
694
-		// label
695
-		if(!empty($args['label']) && is_array($args['label'])){
696
-		}elseif(!empty($args['label']) && !$label_after){
697
-			$label_args = array(
698
-				'title'=> $args['label'],
699
-				'for'=> $args['id'],
700
-				'class' => $args['label_class']." ",
701
-				'label_type' => $args['label_type']
702
-			);
703
-			$output .= self::label($label_args);
704
-		}
705
-
706
-		// maybe horizontal label
707
-		if($args['label_type']=='horizontal'){
708
-			$output .= '<div class="col-sm-10">';
709
-		}
710
-
711
-		// Set hidden input to save empty value for multiselect.
712
-		if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) {
713
-			$output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value=""/>';
714
-		}
715
-
716
-		// open/type
717
-		$output .= '<select ';
718
-
719
-		// style
720
-		if($is_select2){
721
-			$output .= " style='width:100%;' ";
722
-		}
723
-
724
-		// element require
725
-		if(!empty($args['element_require'])){
726
-			$output .= AUI_Component_Helper::element_require($args['element_require']);
727
-			$args['class'] .= " aui-conditional-field";
728
-		}
729
-
730
-		// class
731
-		$class = !empty($args['class']) ? $args['class'] : '';
732
-		$output .= AUI_Component_Helper::class_attr('custom-select '.$class);
733
-
734
-		// name
735
-		if(!empty($args['name'])){
736
-			$output .= AUI_Component_Helper::name($args['name'],$args['multiple']);
737
-		}
738
-
739
-		// id
740
-		if(!empty($args['id'])){
741
-			$output .= AUI_Component_Helper::id($args['id']);
742
-		}
743
-
744
-		// title
745
-		if(!empty($args['title'])){
746
-			$output .= AUI_Component_Helper::title($args['title']);
747
-		}
748
-
749
-		// data-attributes
750
-		$output .= AUI_Component_Helper::data_attributes($args);
751
-
752
-		// aria-attributes
753
-		$output .= AUI_Component_Helper::aria_attributes($args);
754
-
755
-		// extra attributes
756
-		if(!empty($args['extra_attributes'])){
757
-			$output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
758
-		}
759
-
760
-		// required
761
-		if(!empty($args['required'])){
762
-			$output .= ' required ';
763
-		}
764
-
765
-		// multiple
766
-		if(!empty($args['multiple'])){
767
-			$output .= ' multiple ';
768
-		}
769
-
770
-		// close opening tag
771
-		$output .= ' >';
772
-
773
-		// placeholder
774
-		if(isset($args['placeholder']) && '' != $args['placeholder'] && !$is_select2){
775
-			$output .= '<option value="" disabled selected hidden>'.esc_attr($args['placeholder']).'</option>';
776
-		}elseif($is_select2 && !empty($args['placeholder'])){
777
-			$output .= "<option></option>"; // select2 needs an empty select to fill the placeholder
778
-		}
779
-
780
-		// Options
781
-		if(!empty($args['options'])){
782
-
783
-			if(!is_array($args['options'])){
784
-				$output .= $args['options']; // not the preferred way but an option
785
-			}else{
786
-				foreach($args['options'] as $val => $name){
787
-					$selected = '';
788
-					if(is_array($name)){
789
-						if (isset($name['optgroup']) && ($name['optgroup'] == 'start' || $name['optgroup'] == 'end')) {
790
-							$option_label = isset($name['label']) ? $name['label'] : '';
791
-
792
-							$output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>';
793
-						} else {
794
-							$option_label = isset($name['label']) ? $name['label'] : '';
795
-							$option_value = isset($name['value']) ? $name['value'] : '';
796
-							if(!empty($args['multiple']) && !empty($args['value']) && is_array($args['value']) ){
797
-								$selected = in_array($option_value, stripslashes_deep($args['value'])) ? "selected" : "";
798
-							} elseif(!empty($args['value'])) {
799
-								$selected = selected($option_value,stripslashes_deep($args['value']), false);
800
-							}
801
-
802
-							$output .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>';
803
-						}
804
-					}else{
805
-						if(!empty($args['value'])){
806
-							if(is_array($args['value'])){
807
-								$selected = in_array($val,$args['value']) ? 'selected="selected"' : '';
808
-							} elseif(!empty($args['value'])) {
809
-								$selected = selected( $args['value'], $val, false);
810
-							}
811
-						}
812
-						$output .= '<option value="'.esc_attr($val).'" '.$selected.'>'.esc_attr($name).'</option>';
813
-					}
814
-				}
815
-			}
816
-
817
-		}
818
-
819
-		// closing tag
820
-		$output .= '</select>';
821
-
822
-		if(!empty($args['label']) && $label_after){
823
-			$label_args = array(
824
-				'title'=> $args['label'],
825
-				'for'=> $args['id'],
826
-				'class' => $args['label_class']." ",
827
-				'label_type' => $args['label_type']
828
-			);
829
-			$output .= self::label($label_args);
830
-		}
831
-
832
-		// help text
833
-		if(!empty($args['help_text'])){
834
-			$output .= AUI_Component_Helper::help_text($args['help_text']);
835
-		}
836
-
837
-		// maybe horizontal label
838
-		if($args['label_type']=='horizontal'){
839
-			$output .= '</div>';
840
-		}
841
-
842
-
843
-		// wrap
844
-		if(!$args['no_wrap']){
845
-			$wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group';
846
-			$wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
847
-			$output = self::wrap(array(
848
-				'content' => $output,
849
-				'class'   => $wrap_class,
850
-				'element_require'   => $args['element_require'],
851
-				'argument_id'  => $args['id'],
852
-				'wrap_attributes' => $args['wrap_attributes'],
853
-			));
854
-		}
855
-
856
-
857
-		return $output;
858
-	}
859
-
860
-	/**
861
-	 * Build the component.
862
-	 *
863
-	 * @param array $args
864
-	 *
865
-	 * @return string The rendered component.
866
-	 */
867
-	public static function radio($args = array()){
868
-		$defaults = array(
869
-			'class'      => '',
870
-			'wrap_class' => '',
871
-			'id'         => '',
872
-			'title'      => '',
873
-			'horizontal' => false, // sets the lable horizontal
874
-			'value'      => '',
875
-			'label'      => '',
876
-			'label_class'=> '',
877
-			'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
878
-			'help_text'  => '',
879
-			'inline'     => true,
880
-			'required'   => false,
881
-			'options'    => array(),
882
-			'icon'       => '',
883
-			'no_wrap'    => false,
884
-			'element_require'   => '', // [%element_id%] == "1"
885
-			'extra_attributes'  => array(), // an array of extra attributes
886
-			'wrap_attributes'   => array()
887
-		);
888
-
889
-		/**
890
-		 * Parse incoming $args into an array and merge it with $defaults
891
-		 */
892
-		$args   = wp_parse_args( $args, $defaults );
893
-
894
-		// for now lets use horizontal for floating
895
-		if( $args['label_type'] == 'floating' ){$args['label_type'] = 'horizontal';}
896
-
897
-		$label_args = array(
898
-			'title'=> $args['label'],
899
-			'class' => $args['label_class']." pt-0 ",
900
-			'label_type' => $args['label_type']
901
-		);
902
-
903
-		$output = '';
904
-
905
-
906
-
907
-		// label before
908
-		if(!empty($args['label'])){
909
-			$output .= self::label( $label_args, 'radio' );
910
-		}
911
-
912
-		// maybe horizontal label
913
-		if($args['label_type']=='horizontal'){
914
-			$output .= '<div class="col-sm-10">';
915
-		}
916
-
917
-		if(!empty($args['options'])){
918
-			$count = 0;
919
-			foreach($args['options'] as $value => $label){
920
-				$option_args = $args;
921
-				$option_args['value'] = $value;
922
-				$option_args['label'] = $label;
923
-				$option_args['checked'] = $value == $args['value'] ? true : false;
924
-				$output .= self::radio_option($option_args,$count);
925
-				$count++;
926
-			}
927
-		}
928
-
929
-		// help text
930
-		$help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : '';
931
-		$output .= $help_text;
932
-
933
-		// maybe horizontal label
934
-		if($args['label_type']=='horizontal'){
935
-			$output .= '</div>';
936
-		}
937
-
938
-		// wrap
939
-		$wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group';
940
-		$wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
941
-		$output = self::wrap(array(
942
-			'content' => $output,
943
-			'class'   => $wrap_class,
944
-			'element_require'   => $args['element_require'],
945
-			'argument_id'  => $args['id'],
946
-			'wrap_attributes' => $args['wrap_attributes'],
947
-		));
948
-
949
-
950
-		return $output;
951
-	}
952
-
953
-	/**
954
-	 * Build the component.
955
-	 *
956
-	 * @param array $args
957
-	 *
958
-	 * @return string The rendered component.
959
-	 */
960
-	public static function radio_option($args = array(),$count = ''){
961
-		$defaults = array(
962
-			'class'      => '',
963
-			'id'         => '',
964
-			'title'      => '',
965
-			'value'      => '',
966
-			'required'   => false,
967
-			'inline'     => true,
968
-			'label'      => '',
969
-			'options'    => array(),
970
-			'icon'       => '',
971
-			'no_wrap'    => false,
972
-			'extra_attributes'  => array() // an array of extra attributes
973
-		);
974
-
975
-		/**
976
-		 * Parse incoming $args into an array and merge it with $defaults
977
-		 */
978
-		$args   = wp_parse_args( $args, $defaults );
979
-
980
-		$output = '';
981
-
982
-		// open/type
983
-		$output .= '<input type="radio"';
984
-
985
-		// class
986
-		$output .= ' class="form-check-input" ';
987
-
988
-		// name
989
-		if(!empty($args['name'])){
990
-			$output .= AUI_Component_Helper::name($args['name']);
991
-		}
992
-
993
-		// id
994
-		if(!empty($args['id'])){
995
-			$output .= AUI_Component_Helper::id($args['id'].$count);
996
-		}
997
-
998
-		// title
999
-		if(!empty($args['title'])){
1000
-			$output .= AUI_Component_Helper::title($args['title']);
1001
-		}
1002
-
1003
-		// value
1004
-		if(isset($args['value'])){
1005
-			$output .= AUI_Component_Helper::value($args['value']);
1006
-		}
1007
-
1008
-		// checked, for radio and checkboxes
1009
-		if( $args['checked'] ){
1010
-			$output .= ' checked ';
1011
-		}
1012
-
1013
-		// data-attributes
1014
-		$output .= AUI_Component_Helper::data_attributes($args);
1015
-
1016
-		// aria-attributes
1017
-		$output .= AUI_Component_Helper::aria_attributes($args);
1018
-
1019
-		// extra attributes
1020
-		if(!empty($args['extra_attributes'])){
1021
-			$output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
1022
-		}
1023
-
1024
-		// required
1025
-		if(!empty($args['required'])){
1026
-			$output .= ' required ';
1027
-		}
1028
-
1029
-		// close opening tag
1030
-		$output .= ' >';
1031
-
1032
-		// label
1033
-		if(!empty($args['label']) && is_array($args['label'])){
1034
-		}elseif(!empty($args['label'])){
1035
-			$output .= self::label(array('title'=>$args['label'],'for'=>$args['id'].$count,'class'=>'form-check-label'),'radio');
1036
-		}
1037
-
1038
-		// wrap
1039
-		if ( ! $args['no_wrap'] ) {
1040
-			$wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check';
1041
-
1042
-			// Unique wrap class
1043
-			$uniq_class = 'fwrap';
1044
-			if ( ! empty( $args['name'] ) ) {
1045
-				$uniq_class .= '-' . $args['name'];
1046
-			} else if ( ! empty( $args['id'] ) ) {
1047
-				$uniq_class .= '-' . $args['id'];
1048
-			}
1049
-
1050
-			if ( isset( $args['value'] ) || $args['value'] !== "" ) {
1051
-				$uniq_class .= '-' . $args['value'];
1052
-			} else {
1053
-				$uniq_class .= '-' . $count;
1054
-			}
1055
-			$wrap_class .= ' ' . sanitize_html_class( $uniq_class );
1056
-
1057
-			$output = self::wrap(array(
1058
-				'content' => $output,
1059
-				'class' => $wrap_class
1060
-			));
1061
-		}
1062
-
1063
-		return $output;
1064
-	}
214
+            }
215
+
216
+            // input group wraps
217
+            if($args['input_group_left'] || $args['input_group_right']){
218
+                $w100 = strpos($args['class'], 'w-100') !== false ? ' w-100' : '';
219
+                if($args['input_group_left']){
220
+                    $output = self::wrap( array(
221
+                        'content' => $output,
222
+                        'class'   => $args['input_group_left_inside'] ? 'input-group-inside position-relative'.$w100  : 'input-group',
223
+                        'input_group_left' => $args['input_group_left'],
224
+                        'input_group_left_inside'    => $args['input_group_left_inside']
225
+                    ) );
226
+                }
227
+                if($args['input_group_right']){
228
+                    $output = self::wrap( array(
229
+                        'content' => $output,
230
+                        'class'   => $args['input_group_right_inside'] ? 'input-group-inside position-relative'.$w100 : 'input-group',
231
+                        'input_group_right' => $args['input_group_right'],
232
+                        'input_group_right_inside'    => $args['input_group_right_inside']
233
+                    ) );
234
+                }
235
+
236
+            }
237
+
238
+            if(!$label_after){
239
+                $output .= $help_text;
240
+            }
241
+
242
+
243
+            if($args['label_type']=='horizontal' && $type != 'checkbox'){
244
+                $output = self::wrap( array(
245
+                    'content' => $output,
246
+                    'class'   => 'col-sm-10',
247
+                ) );
248
+            }
249
+
250
+            if(!$label_after){
251
+                $output = $label . $output;
252
+            }
253
+
254
+            // wrap
255
+            if ( ! $args['no_wrap'] ) {
256
+                $form_group_class = $args['label_type']=='floating' && $type != 'checkbox' ? 'form-label-group' : 'form-group';
257
+                $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class;
258
+                $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
259
+                $output = self::wrap(array(
260
+                    'content' => $output,
261
+                    'class'   => $wrap_class,
262
+                    'element_require'   => $args['element_require'],
263
+                    'argument_id'  => $args['id'],
264
+                    'wrap_attributes' => $args['wrap_attributes'],
265
+                ));
266
+            }
267
+        }
268
+
269
+        return $output;
270
+    }
271
+
272
+    /**
273
+     * Build the component.
274
+     *
275
+     * @param array $args
276
+     *
277
+     * @return string The rendered component.
278
+     */
279
+    public static function textarea($args = array()){
280
+        $defaults = array(
281
+            'name'       => '',
282
+            'class'      => '',
283
+            'wrap_class' => '',
284
+            'id'         => '',
285
+            'placeholder'=> '',
286
+            'title'      => '',
287
+            'value'      => '',
288
+            'required'   => false,
289
+            'label'      => '',
290
+            'label_after'=> false,
291
+            'label_class'      => '',
292
+            'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
293
+            'help_text'  => '',
294
+            'validation_text'   => '',
295
+            'validation_pattern' => '',
296
+            'no_wrap'    => false,
297
+            'rows'      => '',
298
+            'wysiwyg'   => false,
299
+            'allow_tags' => false, // Allow HTML tags
300
+            'element_require'   => '', // [%element_id%] == "1"
301
+            'extra_attributes'  => array(), // an array of extra attributes
302
+            'wrap_attributes'   => array(),
303
+        );
304
+
305
+        /**
306
+         * Parse incoming $args into an array and merge it with $defaults
307
+         */
308
+        $args   = wp_parse_args( $args, $defaults );
309
+        $output = '';
310
+
311
+        // hidden label option needs to be empty
312
+        $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
313
+
314
+        // floating labels don't work with wysiwyg so set it as top
315
+        if($args['label_type'] == 'floating' && !empty($args['wysiwyg'])){
316
+            $args['label_type'] = 'top';
317
+        }
318
+
319
+        $label_after = $args['label_after'];
320
+
321
+        // floating labels need label after
322
+        if( $args['label_type'] == 'floating' && empty($args['wysiwyg']) ){
323
+            $label_after = true;
324
+            $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
325
+        }
326
+
327
+        // label
328
+        if(!empty($args['label']) && is_array($args['label'])){
329
+        }elseif(!empty($args['label']) && !$label_after){
330
+            $label_args = array(
331
+                'title'=> $args['label'],
332
+                'for'=> $args['id'],
333
+                'class' => $args['label_class']." ",
334
+                'label_type' => $args['label_type']
335
+            );
336
+            $output .= self::label( $label_args );
337
+        }
338
+
339
+        // maybe horizontal label
340
+        if($args['label_type']=='horizontal'){
341
+            $output .= '<div class="col-sm-10">';
342
+        }
343
+
344
+        if(!empty($args['wysiwyg'])){
345
+            ob_start();
346
+            $content = $args['value'];
347
+            $editor_id = !empty($args['id']) ? sanitize_html_class($args['id']) : 'wp_editor';
348
+            $settings = array(
349
+                'textarea_rows' => !empty(absint($args['rows'])) ? absint($args['rows']) : 4,
350
+                'quicktags'     => false,
351
+                'media_buttons' => false,
352
+                'editor_class'  => 'form-control',
353
+                'textarea_name' => !empty($args['name']) ? sanitize_html_class($args['name']) : sanitize_html_class($args['id']),
354
+                'teeny'         => true,
355
+            );
356
+
357
+            // maybe set settings if array
358
+            if(is_array($args['wysiwyg'])){
359
+                $settings  = wp_parse_args( $args['wysiwyg'], $settings );
360
+            }
361
+
362
+            wp_editor( $content, $editor_id, $settings );
363
+            $output .= ob_get_clean();
364
+        }else{
365
+
366
+            // open
367
+            $output .= '<textarea ';
368
+
369
+            // name
370
+            if(!empty($args['name'])){
371
+                $output .= ' name="'.esc_attr($args['name']).'" ';
372
+            }
373
+
374
+            // id
375
+            if(!empty($args['id'])){
376
+                $output .= ' id="'.sanitize_html_class($args['id']).'" ';
377
+            }
378
+
379
+            // placeholder
380
+            if(isset($args['placeholder']) && '' != $args['placeholder']){
381
+                $output .= ' placeholder="'.esc_attr($args['placeholder']).'" ';
382
+            }
383
+
384
+            // title
385
+            if(!empty($args['title'])){
386
+                $output .= ' title="'.esc_attr($args['title']).'" ';
387
+            }
388
+
389
+            // validation text
390
+            if(!empty($args['validation_text'])){
391
+                $output .= ' oninvalid="setCustomValidity(\''.esc_attr($args['validation_text']).'\')" ';
392
+                $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
393
+            }
394
+
395
+            // validation_pattern
396
+            if(!empty($args['validation_pattern'])){
397
+                $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
398
+            }
399
+
400
+            // required
401
+            if(!empty($args['required'])){
402
+                $output .= ' required ';
403
+            }
404
+
405
+            // rows
406
+            if(!empty($args['rows'])){
407
+                $output .= ' rows="'.absint($args['rows']).'" ';
408
+            }
409
+
410
+
411
+            // class
412
+            $class = !empty($args['class']) ? $args['class'] : '';
413
+            $output .= ' class="form-control '.$class.'" ';
414
+
415
+            // extra attributes
416
+            if(!empty($args['extra_attributes'])){
417
+                $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
418
+            }
419
+
420
+            // close tag
421
+            $output .= ' >';
422
+
423
+            // value
424
+            if ( ! empty( $args['value'] ) ) {
425
+                if ( ! empty( $args['allow_tags'] ) ) {
426
+                    $output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML.
427
+                } else {
428
+                    $output .= sanitize_textarea_field( $args['value'] );
429
+                }
430
+            }
431
+
432
+            // closing tag
433
+            $output .= '</textarea>';
434
+
435
+        }
436
+
437
+        if(!empty($args['label']) && $label_after){
438
+            $label_args = array(
439
+                'title'=> $args['label'],
440
+                'for'=> $args['id'],
441
+                'class' => $args['label_class']." ",
442
+                'label_type' => $args['label_type']
443
+            );
444
+            $output .= self::label( $label_args );
445
+        }
446
+
447
+        // help text
448
+        if(!empty($args['help_text'])){
449
+            $output .= AUI_Component_Helper::help_text($args['help_text']);
450
+        }
451
+
452
+        // maybe horizontal label
453
+        if($args['label_type']=='horizontal'){
454
+            $output .= '</div>';
455
+        }
456
+
457
+
458
+        // wrap
459
+        if(!$args['no_wrap']){
460
+            $form_group_class = $args['label_type']=='floating' ? 'form-label-group' : 'form-group';
461
+            $wrap_class = $args['label_type']=='horizontal' ? $form_group_class . ' row' : $form_group_class;
462
+            $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
463
+            $output = self::wrap(array(
464
+                'content' => $output,
465
+                'class'   => $wrap_class,
466
+                'element_require'   => $args['element_require'],
467
+                'argument_id'  => $args['id'],
468
+                'wrap_attributes' => $args['wrap_attributes'],
469
+            ));
470
+        }
471
+
472
+
473
+        return $output;
474
+    }
475
+
476
+    public static function label($args = array(), $type = ''){
477
+        //<label for="exampleInputEmail1">Email address</label>
478
+        $defaults = array(
479
+            'title'       => 'div',
480
+            'for'      => '',
481
+            'class'      => '',
482
+            'label_type'    => '', // empty = hidden, top, horizontal
483
+        );
484
+
485
+        /**
486
+         * Parse incoming $args into an array and merge it with $defaults
487
+         */
488
+        $args   = wp_parse_args( $args, $defaults );
489
+        $output = '';
490
+
491
+        if($args['title']){
492
+
493
+            // maybe hide labels //@todo set a global option for visibility class
494
+            if($type == 'file' || $type == 'checkbox' || $type == 'radio' || !empty($args['label_type']) ){
495
+                $class = $args['class'];
496
+            }else{
497
+                $class = 'sr-only '.$args['class'];
498
+            }
499
+
500
+            // maybe horizontal
501
+            if($args['label_type']=='horizontal' && $type != 'checkbox'){
502
+                $class .= ' col-sm-2 col-form-label';
503
+            }
504
+
505
+            // open
506
+            $output .= '<label ';
507
+
508
+            // for
509
+            if(!empty($args['for'])){
510
+                $output .= ' for="'.esc_attr($args['for']).'" ';
511
+            }
512
+
513
+            // class
514
+            $class = $class ? AUI_Component_Helper::esc_classes( $class ) : '';
515
+            $output .= ' class="'.$class.'" ';
516
+
517
+            // close
518
+            $output .= '>';
519
+
520
+
521
+            // title, don't escape fully as can contain html
522
+            if(!empty($args['title'])){
523
+                $output .= wp_kses_post($args['title']);
524
+            }
525
+
526
+            // close wrap
527
+            $output .= '</label>';
528
+
529
+
530
+        }
531
+
532
+
533
+        return $output;
534
+    }
535
+
536
+    /**
537
+     * Wrap some content in a HTML wrapper.
538
+     *
539
+     * @param array $args
540
+     *
541
+     * @return string
542
+     */
543
+    public static function wrap($args = array()){
544
+        $defaults = array(
545
+            'type'       => 'div',
546
+            'class'      => 'form-group',
547
+            'content'   => '',
548
+            'input_group_left' => '',
549
+            'input_group_right' => '',
550
+            'input_group_left_inside' => false,
551
+            'input_group_right_inside' => false,
552
+            'element_require'   => '',
553
+            'argument_id'   => '',
554
+            'wrap_attributes' => array()
555
+        );
556
+
557
+        /**
558
+         * Parse incoming $args into an array and merge it with $defaults
559
+         */
560
+        $args   = wp_parse_args( $args, $defaults );
561
+        $output = '';
562
+        if($args['type']){
563
+
564
+            // open
565
+            $output .= '<'.sanitize_html_class($args['type']);
566
+
567
+            // element require
568
+            if(!empty($args['element_require'])){
569
+                $output .= AUI_Component_Helper::element_require($args['element_require']);
570
+                $args['class'] .= " aui-conditional-field";
571
+            }
572
+
573
+            // argument_id
574
+            if( !empty($args['argument_id']) ){
575
+                $output .= ' data-argument="'.esc_attr($args['argument_id']).'"';
576
+            }
577
+
578
+            // class
579
+            $class = !empty($args['class']) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
580
+            $output .= ' class="'.$class.'" ';
581
+
582
+            // Attributes
583
+            if ( ! empty( $args['wrap_attributes'] ) ) {
584
+                $output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] );
585
+            }
586
+
587
+            // close wrap
588
+            $output .= ' >';
589
+
590
+
591
+            // Input group left
592
+            if(!empty($args['input_group_left'])){
593
+                $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : '';
594
+                $input_group_left = strpos($args['input_group_left'], '<') !== false ? $args['input_group_left'] : '<span class="input-group-text">'.$args['input_group_left'].'</span>';
595
+                $output .= '<div class="input-group-prepend '.$position_class.'">'.$input_group_left.'</div>';
596
+            }
597
+
598
+            // content
599
+            $output .= $args['content'];
600
+
601
+            // Input group right
602
+            if(!empty($args['input_group_right'])){
603
+                $position_class = !empty($args['input_group_left_inside']) ? 'position-absolute h-100' : '';
604
+                $input_group_right = strpos($args['input_group_right'], '<') !== false ? $args['input_group_right'] : '<span class="input-group-text">'.$args['input_group_right'].'</span>';
605
+                $output .= '<div class="input-group-append '.$position_class.'">'.$input_group_right.'</div>';
606
+            }
607
+
608
+
609
+            // close wrap
610
+            $output .= '</'.sanitize_html_class($args['type']).'>';
611
+
612
+
613
+        }else{
614
+            $output = $args['content'];
615
+        }
616
+
617
+        return $output;
618
+    }
619
+
620
+    /**
621
+     * Build the component.
622
+     *
623
+     * @param array $args
624
+     *
625
+     * @return string The rendered component.
626
+     */
627
+    public static function select($args = array()){
628
+        $defaults = array(
629
+            'class'      => '',
630
+            'wrap_class' => '',
631
+            'id'         => '',
632
+            'title'      => '',
633
+            'value'      => '', // can be an array or a string
634
+            'required'   => false,
635
+            'label'      => '',
636
+            'label_after'=> false,
637
+            'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
638
+            'label_class'      => '',
639
+            'help_text'  => '',
640
+            'placeholder'=> '',
641
+            'options'    => array(), // array or string
642
+            'icon'       => '',
643
+            'multiple'   => false,
644
+            'select2'    => false,
645
+            'no_wrap'    => false,
646
+            'element_require'   => '', // [%element_id%] == "1"
647
+            'extra_attributes'  => array(), // an array of extra attributes
648
+            'wrap_attributes'   => array(),
649
+        );
650
+
651
+        /**
652
+         * Parse incoming $args into an array and merge it with $defaults
653
+         */
654
+        $args   = wp_parse_args( $args, $defaults );
655
+        $output = '';
656
+
657
+        // for now lets hide floating labels
658
+        if( $args['label_type'] == 'floating' ){$args['label_type'] = 'hidden';}
659
+
660
+        // hidden label option needs to be empty
661
+        $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
662
+
663
+
664
+        $label_after = $args['label_after'];
665
+
666
+        // floating labels need label after
667
+        if( $args['label_type'] == 'floating' ){
668
+            $label_after = true;
669
+            $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
670
+        }
671
+
672
+        // Maybe setup select2
673
+        $is_select2 = false;
674
+        if(!empty($args['select2'])){
675
+            $args['class'] .= ' aui-select2';
676
+            $is_select2 = true;
677
+        }elseif( strpos($args['class'], 'aui-select2') !== false){
678
+            $is_select2 = true;
679
+        }
680
+
681
+        // select2 tags
682
+        if( !empty($args['select2']) && $args['select2'] === 'tags'){ // triple equals needed here for some reason
683
+            $args['data-tags'] = 'true';
684
+            $args['data-token-separators'] = "[',']";
685
+            $args['multiple'] = true;
686
+        }
687
+
688
+        // select2 placeholder
689
+        if($is_select2 && isset($args['placeholder']) && '' != $args['placeholder'] && empty($args['data-placeholder'])){
690
+            $args['data-placeholder'] = esc_attr($args['placeholder']);
691
+            $args['data-allow-clear'] = isset($args['data-allow-clear']) ? (bool) $args['data-allow-clear'] : true;
692
+        }
693
+
694
+        // label
695
+        if(!empty($args['label']) && is_array($args['label'])){
696
+        }elseif(!empty($args['label']) && !$label_after){
697
+            $label_args = array(
698
+                'title'=> $args['label'],
699
+                'for'=> $args['id'],
700
+                'class' => $args['label_class']." ",
701
+                'label_type' => $args['label_type']
702
+            );
703
+            $output .= self::label($label_args);
704
+        }
705
+
706
+        // maybe horizontal label
707
+        if($args['label_type']=='horizontal'){
708
+            $output .= '<div class="col-sm-10">';
709
+        }
710
+
711
+        // Set hidden input to save empty value for multiselect.
712
+        if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) {
713
+            $output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value=""/>';
714
+        }
715
+
716
+        // open/type
717
+        $output .= '<select ';
718
+
719
+        // style
720
+        if($is_select2){
721
+            $output .= " style='width:100%;' ";
722
+        }
723
+
724
+        // element require
725
+        if(!empty($args['element_require'])){
726
+            $output .= AUI_Component_Helper::element_require($args['element_require']);
727
+            $args['class'] .= " aui-conditional-field";
728
+        }
729
+
730
+        // class
731
+        $class = !empty($args['class']) ? $args['class'] : '';
732
+        $output .= AUI_Component_Helper::class_attr('custom-select '.$class);
733
+
734
+        // name
735
+        if(!empty($args['name'])){
736
+            $output .= AUI_Component_Helper::name($args['name'],$args['multiple']);
737
+        }
738
+
739
+        // id
740
+        if(!empty($args['id'])){
741
+            $output .= AUI_Component_Helper::id($args['id']);
742
+        }
743
+
744
+        // title
745
+        if(!empty($args['title'])){
746
+            $output .= AUI_Component_Helper::title($args['title']);
747
+        }
748
+
749
+        // data-attributes
750
+        $output .= AUI_Component_Helper::data_attributes($args);
751
+
752
+        // aria-attributes
753
+        $output .= AUI_Component_Helper::aria_attributes($args);
754
+
755
+        // extra attributes
756
+        if(!empty($args['extra_attributes'])){
757
+            $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
758
+        }
759
+
760
+        // required
761
+        if(!empty($args['required'])){
762
+            $output .= ' required ';
763
+        }
764
+
765
+        // multiple
766
+        if(!empty($args['multiple'])){
767
+            $output .= ' multiple ';
768
+        }
769
+
770
+        // close opening tag
771
+        $output .= ' >';
772
+
773
+        // placeholder
774
+        if(isset($args['placeholder']) && '' != $args['placeholder'] && !$is_select2){
775
+            $output .= '<option value="" disabled selected hidden>'.esc_attr($args['placeholder']).'</option>';
776
+        }elseif($is_select2 && !empty($args['placeholder'])){
777
+            $output .= "<option></option>"; // select2 needs an empty select to fill the placeholder
778
+        }
779
+
780
+        // Options
781
+        if(!empty($args['options'])){
782
+
783
+            if(!is_array($args['options'])){
784
+                $output .= $args['options']; // not the preferred way but an option
785
+            }else{
786
+                foreach($args['options'] as $val => $name){
787
+                    $selected = '';
788
+                    if(is_array($name)){
789
+                        if (isset($name['optgroup']) && ($name['optgroup'] == 'start' || $name['optgroup'] == 'end')) {
790
+                            $option_label = isset($name['label']) ? $name['label'] : '';
791
+
792
+                            $output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr($option_label) . '">' : '</optgroup>';
793
+                        } else {
794
+                            $option_label = isset($name['label']) ? $name['label'] : '';
795
+                            $option_value = isset($name['value']) ? $name['value'] : '';
796
+                            if(!empty($args['multiple']) && !empty($args['value']) && is_array($args['value']) ){
797
+                                $selected = in_array($option_value, stripslashes_deep($args['value'])) ? "selected" : "";
798
+                            } elseif(!empty($args['value'])) {
799
+                                $selected = selected($option_value,stripslashes_deep($args['value']), false);
800
+                            }
801
+
802
+                            $output .= '<option value="' . esc_attr($option_value) . '" ' . $selected . '>' . $option_label . '</option>';
803
+                        }
804
+                    }else{
805
+                        if(!empty($args['value'])){
806
+                            if(is_array($args['value'])){
807
+                                $selected = in_array($val,$args['value']) ? 'selected="selected"' : '';
808
+                            } elseif(!empty($args['value'])) {
809
+                                $selected = selected( $args['value'], $val, false);
810
+                            }
811
+                        }
812
+                        $output .= '<option value="'.esc_attr($val).'" '.$selected.'>'.esc_attr($name).'</option>';
813
+                    }
814
+                }
815
+            }
816
+
817
+        }
818
+
819
+        // closing tag
820
+        $output .= '</select>';
821
+
822
+        if(!empty($args['label']) && $label_after){
823
+            $label_args = array(
824
+                'title'=> $args['label'],
825
+                'for'=> $args['id'],
826
+                'class' => $args['label_class']." ",
827
+                'label_type' => $args['label_type']
828
+            );
829
+            $output .= self::label($label_args);
830
+        }
831
+
832
+        // help text
833
+        if(!empty($args['help_text'])){
834
+            $output .= AUI_Component_Helper::help_text($args['help_text']);
835
+        }
836
+
837
+        // maybe horizontal label
838
+        if($args['label_type']=='horizontal'){
839
+            $output .= '</div>';
840
+        }
841
+
842
+
843
+        // wrap
844
+        if(!$args['no_wrap']){
845
+            $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group';
846
+            $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
847
+            $output = self::wrap(array(
848
+                'content' => $output,
849
+                'class'   => $wrap_class,
850
+                'element_require'   => $args['element_require'],
851
+                'argument_id'  => $args['id'],
852
+                'wrap_attributes' => $args['wrap_attributes'],
853
+            ));
854
+        }
855
+
856
+
857
+        return $output;
858
+    }
859
+
860
+    /**
861
+     * Build the component.
862
+     *
863
+     * @param array $args
864
+     *
865
+     * @return string The rendered component.
866
+     */
867
+    public static function radio($args = array()){
868
+        $defaults = array(
869
+            'class'      => '',
870
+            'wrap_class' => '',
871
+            'id'         => '',
872
+            'title'      => '',
873
+            'horizontal' => false, // sets the lable horizontal
874
+            'value'      => '',
875
+            'label'      => '',
876
+            'label_class'=> '',
877
+            'label_type' => '', // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
878
+            'help_text'  => '',
879
+            'inline'     => true,
880
+            'required'   => false,
881
+            'options'    => array(),
882
+            'icon'       => '',
883
+            'no_wrap'    => false,
884
+            'element_require'   => '', // [%element_id%] == "1"
885
+            'extra_attributes'  => array(), // an array of extra attributes
886
+            'wrap_attributes'   => array()
887
+        );
888
+
889
+        /**
890
+         * Parse incoming $args into an array and merge it with $defaults
891
+         */
892
+        $args   = wp_parse_args( $args, $defaults );
893
+
894
+        // for now lets use horizontal for floating
895
+        if( $args['label_type'] == 'floating' ){$args['label_type'] = 'horizontal';}
896
+
897
+        $label_args = array(
898
+            'title'=> $args['label'],
899
+            'class' => $args['label_class']." pt-0 ",
900
+            'label_type' => $args['label_type']
901
+        );
902
+
903
+        $output = '';
904
+
905
+
906
+
907
+        // label before
908
+        if(!empty($args['label'])){
909
+            $output .= self::label( $label_args, 'radio' );
910
+        }
911
+
912
+        // maybe horizontal label
913
+        if($args['label_type']=='horizontal'){
914
+            $output .= '<div class="col-sm-10">';
915
+        }
916
+
917
+        if(!empty($args['options'])){
918
+            $count = 0;
919
+            foreach($args['options'] as $value => $label){
920
+                $option_args = $args;
921
+                $option_args['value'] = $value;
922
+                $option_args['label'] = $label;
923
+                $option_args['checked'] = $value == $args['value'] ? true : false;
924
+                $output .= self::radio_option($option_args,$count);
925
+                $count++;
926
+            }
927
+        }
928
+
929
+        // help text
930
+        $help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : '';
931
+        $output .= $help_text;
932
+
933
+        // maybe horizontal label
934
+        if($args['label_type']=='horizontal'){
935
+            $output .= '</div>';
936
+        }
937
+
938
+        // wrap
939
+        $wrap_class = $args['label_type']=='horizontal' ? 'form-group row' : 'form-group';
940
+        $wrap_class = !empty($args['wrap_class']) ? $wrap_class." ".$args['wrap_class'] : $wrap_class;
941
+        $output = self::wrap(array(
942
+            'content' => $output,
943
+            'class'   => $wrap_class,
944
+            'element_require'   => $args['element_require'],
945
+            'argument_id'  => $args['id'],
946
+            'wrap_attributes' => $args['wrap_attributes'],
947
+        ));
948
+
949
+
950
+        return $output;
951
+    }
952
+
953
+    /**
954
+     * Build the component.
955
+     *
956
+     * @param array $args
957
+     *
958
+     * @return string The rendered component.
959
+     */
960
+    public static function radio_option($args = array(),$count = ''){
961
+        $defaults = array(
962
+            'class'      => '',
963
+            'id'         => '',
964
+            'title'      => '',
965
+            'value'      => '',
966
+            'required'   => false,
967
+            'inline'     => true,
968
+            'label'      => '',
969
+            'options'    => array(),
970
+            'icon'       => '',
971
+            'no_wrap'    => false,
972
+            'extra_attributes'  => array() // an array of extra attributes
973
+        );
974
+
975
+        /**
976
+         * Parse incoming $args into an array and merge it with $defaults
977
+         */
978
+        $args   = wp_parse_args( $args, $defaults );
979
+
980
+        $output = '';
981
+
982
+        // open/type
983
+        $output .= '<input type="radio"';
984
+
985
+        // class
986
+        $output .= ' class="form-check-input" ';
987
+
988
+        // name
989
+        if(!empty($args['name'])){
990
+            $output .= AUI_Component_Helper::name($args['name']);
991
+        }
992
+
993
+        // id
994
+        if(!empty($args['id'])){
995
+            $output .= AUI_Component_Helper::id($args['id'].$count);
996
+        }
997
+
998
+        // title
999
+        if(!empty($args['title'])){
1000
+            $output .= AUI_Component_Helper::title($args['title']);
1001
+        }
1002
+
1003
+        // value
1004
+        if(isset($args['value'])){
1005
+            $output .= AUI_Component_Helper::value($args['value']);
1006
+        }
1007
+
1008
+        // checked, for radio and checkboxes
1009
+        if( $args['checked'] ){
1010
+            $output .= ' checked ';
1011
+        }
1012
+
1013
+        // data-attributes
1014
+        $output .= AUI_Component_Helper::data_attributes($args);
1015
+
1016
+        // aria-attributes
1017
+        $output .= AUI_Component_Helper::aria_attributes($args);
1018
+
1019
+        // extra attributes
1020
+        if(!empty($args['extra_attributes'])){
1021
+            $output .= AUI_Component_Helper::extra_attributes($args['extra_attributes']);
1022
+        }
1023
+
1024
+        // required
1025
+        if(!empty($args['required'])){
1026
+            $output .= ' required ';
1027
+        }
1028
+
1029
+        // close opening tag
1030
+        $output .= ' >';
1031
+
1032
+        // label
1033
+        if(!empty($args['label']) && is_array($args['label'])){
1034
+        }elseif(!empty($args['label'])){
1035
+            $output .= self::label(array('title'=>$args['label'],'for'=>$args['id'].$count,'class'=>'form-check-label'),'radio');
1036
+        }
1037
+
1038
+        // wrap
1039
+        if ( ! $args['no_wrap'] ) {
1040
+            $wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check';
1041
+
1042
+            // Unique wrap class
1043
+            $uniq_class = 'fwrap';
1044
+            if ( ! empty( $args['name'] ) ) {
1045
+                $uniq_class .= '-' . $args['name'];
1046
+            } else if ( ! empty( $args['id'] ) ) {
1047
+                $uniq_class .= '-' . $args['id'];
1048
+            }
1049
+
1050
+            if ( isset( $args['value'] ) || $args['value'] !== "" ) {
1051
+                $uniq_class .= '-' . $args['value'];
1052
+            } else {
1053
+                $uniq_class .= '-' . $count;
1054
+            }
1055
+            $wrap_class .= ' ' . sanitize_html_class( $uniq_class );
1056
+
1057
+            $output = self::wrap(array(
1058
+                'content' => $output,
1059
+                'class' => $wrap_class
1060
+            ));
1061
+        }
1062
+
1063
+        return $output;
1064
+    }
1065 1065
 
1066 1066
 }
1067 1067
\ No newline at end of file
Please login to merge, or discard this patch.
includes/admin/class-getpaid-admin.php 1 patch
Indentation   +575 added lines, -575 removed lines patch added patch discarded remove patch
@@ -14,90 +14,90 @@  discard block
 block discarded – undo
14 14
 class GetPaid_Admin {
15 15
 
16 16
     /**
17
-	 * Local path to this plugins admin directory
18
-	 *
19
-	 * @var         string
20
-	 */
21
-	public $admin_path;
22
-
23
-	/**
24
-	 * Web path to this plugins admin directory
25
-	 *
26
-	 * @var         string
27
-	 */
28
-	public $admin_url;
17
+     * Local path to this plugins admin directory
18
+     *
19
+     * @var         string
20
+     */
21
+    public $admin_path;
22
+
23
+    /**
24
+     * Web path to this plugins admin directory
25
+     *
26
+     * @var         string
27
+     */
28
+    public $admin_url;
29 29
 	
30
-	/**
31
-	 * Reports components.
32
-	 *
33
-	 * @var GetPaid_Reports
34
-	 */
30
+    /**
31
+     * Reports components.
32
+     *
33
+     * @var GetPaid_Reports
34
+     */
35 35
     public $reports;
36 36
 
37 37
     /**
38
-	 * Class constructor.
39
-	 */
40
-	public function __construct(){
38
+     * Class constructor.
39
+     */
40
+    public function __construct(){
41 41
 
42 42
         $this->admin_path  = plugin_dir_path( __FILE__ );
43
-		$this->admin_url   = plugins_url( '/', __FILE__ );
44
-		$this->reports     = new GetPaid_Reports();
43
+        $this->admin_url   = plugins_url( '/', __FILE__ );
44
+        $this->reports     = new GetPaid_Reports();
45 45
 
46 46
         if ( is_admin() ) {
47
-			$this->init_admin_hooks();
47
+            $this->init_admin_hooks();
48 48
         }
49 49
 
50 50
     }
51 51
 
52 52
     /**
53
-	 * Init action and filter hooks
54
-	 *
55
-	 */
56
-	private function init_admin_hooks() {
53
+     * Init action and filter hooks
54
+     *
55
+     */
56
+    private function init_admin_hooks() {
57 57
         add_action( 'admin_enqueue_scripts', array( $this, 'enqeue_scripts' ), 9 );
58 58
         add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
59 59
         add_action( 'admin_init', array( $this, 'init_ayecode_connect_helper' ) );
60 60
         add_action( 'admin_init', array( $this, 'activation_redirect') );
61 61
         add_action( 'admin_init', array( $this, 'maybe_do_admin_action') );
62
-		add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
-		add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
-		add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
-		add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
66
-		add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
62
+        add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
+        add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
+        add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
+        add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
66
+        add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
67 67
         add_action( 'getpaid_authenticated_admin_action_reset_tax_rates', array( $this, 'admin_reset_tax_rates' ) );
68
-		add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
69
-		add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
70
-		add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
71
-		add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
72
-		add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
73
-		add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
74
-		add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
75
-		add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
76
-		do_action( 'getpaid_init_admin_hooks', $this );
77
-
78
-		// Setup/welcome
79
-		if ( ! empty( $_GET['page'] ) ) {
80
-			switch ( $_GET['page'] ) {
81
-				case 'gp-setup' :
82
-					include_once( dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php' );
83
-					break;
84
-			}
85
-		}
68
+        add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
69
+        add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
70
+        add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
71
+        add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
72
+        add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
73
+        add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
74
+        add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
75
+        add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
76
+        do_action( 'getpaid_init_admin_hooks', $this );
77
+
78
+        // Setup/welcome
79
+        if ( ! empty( $_GET['page'] ) ) {
80
+            switch ( $_GET['page'] ) {
81
+                case 'gp-setup' :
82
+                    include_once( dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php' );
83
+                    break;
84
+            }
85
+        }
86 86
 
87 87
     }
88 88
 
89 89
     /**
90
-	 * Register admin scripts
91
-	 *
92
-	 */
93
-	public function enqeue_scripts() {
90
+     * Register admin scripts
91
+     *
92
+     */
93
+    public function enqeue_scripts() {
94 94
         global $current_screen, $pagenow;
95 95
 
96
-		$page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
97
-		$editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
96
+        $page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
97
+        $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
98 98
 
99 99
         if ( ! empty( $current_screen->post_type ) ) {
100
-			$page = $current_screen->post_type;
100
+            $page = $current_screen->post_type;
101 101
         }
102 102
 
103 103
         // General styles.
@@ -118,54 +118,54 @@  discard block
 block discarded – undo
118 118
         }
119 119
 
120 120
         // Payment form scripts.
121
-		if ( 'wpi_payment_form' == $page && $editing ) {
121
+        if ( 'wpi_payment_form' == $page && $editing ) {
122 122
             $this->load_payment_form_scripts();
123 123
         }
124 124
 
125
-		if ( $page == 'wpinv-subscriptions' ) {
126
-			wp_enqueue_script( 'postbox' );
127
-		}
125
+        if ( $page == 'wpinv-subscriptions' ) {
126
+            wp_enqueue_script( 'postbox' );
127
+        }
128 128
 
129 129
     }
130 130
 
131 131
     /**
132
-	 * Returns admin js translations.
133
-	 *
134
-	 */
135
-	protected function get_admin_i18() {
132
+     * Returns admin js translations.
133
+     *
134
+     */
135
+    protected function get_admin_i18() {
136 136
         global $post;
137 137
 
138
-		$date_range = array(
139
-			'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days'
140
-		);
138
+        $date_range = array(
139
+            'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days'
140
+        );
141 141
 
142
-		if ( $date_range['period'] == 'custom' ) {
142
+        if ( $date_range['period'] == 'custom' ) {
143 143
 			
144
-			if ( isset( $_GET['from'] ) ) {
145
-				$date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
146
-			}
144
+            if ( isset( $_GET['from'] ) ) {
145
+                $date_range[ 'after' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
146
+            }
147 147
 
148
-			if ( isset( $_GET['to'] ) ) {
149
-				$date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
150
-			}
148
+            if ( isset( $_GET['to'] ) ) {
149
+                $date_range[ 'before' ] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
150
+            }
151 151
 
152
-		}
152
+        }
153 153
 
154 154
         $i18n = array(
155 155
             'ajax_url'                  => admin_url( 'admin-ajax.php' ),
156 156
             'post_ID'                   => isset( $post->ID ) ? $post->ID : '',
157
-			'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
158
-			'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
159
-			'rest_root'                 => esc_url_raw( rest_url() ),
160
-			'date_range'                => $date_range,
157
+            'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
158
+            'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
159
+            'rest_root'                 => esc_url_raw( rest_url() ),
160
+            'date_range'                => $date_range,
161 161
             'add_invoice_note_nonce'    => wp_create_nonce( 'add-invoice-note' ),
162 162
             'delete_invoice_note_nonce' => wp_create_nonce( 'delete-invoice-note' ),
163 163
             'invoice_item_nonce'        => wp_create_nonce( 'invoice-item' ),
164 164
             'billing_details_nonce'     => wp_create_nonce( 'get-billing-details' ),
165 165
             'tax'                       => wpinv_tax_amount(),
166 166
             'discount'                  => 0,
167
-			'currency_symbol'           => wpinv_currency_symbol(),
168
-			'currency'                  => wpinv_get_currency(),
167
+            'currency_symbol'           => wpinv_currency_symbol(),
168
+            'currency'                  => wpinv_get_currency(),
169 169
             'currency_pos'              => wpinv_currency_position(),
170 170
             'thousand_sep'              => wpinv_thousands_separator(),
171 171
             'decimal_sep'               => wpinv_decimal_separator(),
@@ -185,118 +185,118 @@  discard block
 block discarded – undo
185 185
             'item_description'          => __( 'Item Description', 'invoicing' ),
186 186
             'invoice_description'       => __( 'Invoice Description', 'invoicing' ),
187 187
             'discount_description'      => __( 'Discount Description', 'invoicing' ),
188
-			'searching'                 => __( 'Searching', 'invoicing' ),
189
-			'loading'                   => __( 'Loading...', 'invoicing' ),
190
-			'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
191
-			'search_items'              => __( 'Enter item name', 'invoicing' ),
188
+            'searching'                 => __( 'Searching', 'invoicing' ),
189
+            'loading'                   => __( 'Loading...', 'invoicing' ),
190
+            'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
191
+            'search_items'              => __( 'Enter item name', 'invoicing' ),
192 192
         );
193 193
 
194
-		if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
194
+        if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
195 195
 
196
-			$invoice              = new WPInv_Invoice( $post );
197
-			$i18n['save_invoice'] = sprintf(
198
-				__( 'Save %s', 'invoicing' ),
199
-				ucfirst( $invoice->get_invoice_quote_type() )
200
-			);
196
+            $invoice              = new WPInv_Invoice( $post );
197
+            $i18n['save_invoice'] = sprintf(
198
+                __( 'Save %s', 'invoicing' ),
199
+                ucfirst( $invoice->get_invoice_quote_type() )
200
+            );
201 201
 
202
-			$i18n['invoice_description'] = sprintf(
203
-				__( '%s Description', 'invoicing' ),
204
-				ucfirst( $invoice->get_invoice_quote_type() )
205
-			);
202
+            $i18n['invoice_description'] = sprintf(
203
+                __( '%s Description', 'invoicing' ),
204
+                ucfirst( $invoice->get_invoice_quote_type() )
205
+            );
206 206
 
207
-		}
208
-		return $i18n;
209
-	}
207
+        }
208
+        return $i18n;
209
+    }
210 210
 
211
-	/**
212
-	 * Change the admin footer text on GetPaid admin pages.
213
-	 *
214
-	 * @since  2.0.0
215
-	 * @param  string $footer_text
216
-	 * @return string
217
-	 */
218
-	public function admin_footer_text( $footer_text ) {
219
-		global $current_screen;
211
+    /**
212
+     * Change the admin footer text on GetPaid admin pages.
213
+     *
214
+     * @since  2.0.0
215
+     * @param  string $footer_text
216
+     * @return string
217
+     */
218
+    public function admin_footer_text( $footer_text ) {
219
+        global $current_screen;
220 220
 
221
-		$page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
221
+        $page    = isset( $_GET['page'] ) ? $_GET['page'] : '';
222 222
 
223 223
         if ( ! empty( $current_screen->post_type ) ) {
224
-			$page = $current_screen->post_type;
224
+            $page = $current_screen->post_type;
225 225
         }
226 226
 
227 227
         // General styles.
228 228
         if ( apply_filters( 'getpaid_display_admin_footer_text', wpinv_current_user_can_manage_invoicing() ) && false !== stripos( $page, 'wpi' ) ) {
229 229
 
230
-			// Change the footer text
231
-			if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
232
-
233
-				$rating_url  = esc_url(
234
-					wp_nonce_url(
235
-						admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
236
-						'getpaid-nonce',
237
-						'getpaid-nonce'
238
-						)
239
-				);
240
-
241
-				$footer_text = sprintf(
242
-					/* translators: %s: five stars */
243
-					__( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
244
-					"<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
245
-				);
246
-
247
-			} else {
248
-
249
-				$footer_text = sprintf(
250
-					/* translators: %s: GetPaid */
251
-					__( 'Thank you for using %s!', 'invoicing' ),
252
-					"<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
253
-				);
254
-
255
-			}
256
-
257
-		}
258
-
259
-		return $footer_text;
260
-	}
261
-
262
-	/**
263
-	 * Redirects to wp.org to rate the plugin.
264
-	 *
265
-	 * @since  2.0.0
266
-	 */
267
-	public function redirect_to_wordpress_rating_page() {
268
-		update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
269
-		wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
270
-		exit;
271
-	}
272
-
273
-    /**
274
-	 * Loads payment form js.
275
-	 *
276
-	 */
277
-	protected function load_payment_form_scripts() {
230
+            // Change the footer text
231
+            if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
232
+
233
+                $rating_url  = esc_url(
234
+                    wp_nonce_url(
235
+                        admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
236
+                        'getpaid-nonce',
237
+                        'getpaid-nonce'
238
+                        )
239
+                );
240
+
241
+                $footer_text = sprintf(
242
+                    /* translators: %s: five stars */
243
+                    __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
244
+                    "<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
245
+                );
246
+
247
+            } else {
248
+
249
+                $footer_text = sprintf(
250
+                    /* translators: %s: GetPaid */
251
+                    __( 'Thank you for using %s!', 'invoicing' ),
252
+                    "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
253
+                );
254
+
255
+            }
256
+
257
+        }
258
+
259
+        return $footer_text;
260
+    }
261
+
262
+    /**
263
+     * Redirects to wp.org to rate the plugin.
264
+     *
265
+     * @since  2.0.0
266
+     */
267
+    public function redirect_to_wordpress_rating_page() {
268
+        update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
269
+        wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
270
+        exit;
271
+    }
272
+
273
+    /**
274
+     * Loads payment form js.
275
+     *
276
+     */
277
+    protected function load_payment_form_scripts() {
278 278
         global $post;
279 279
 
280 280
         wp_enqueue_script( 'vue', WPINV_PLUGIN_URL . 'assets/js/vue/vue.min.js', array(), WPINV_VERSION );
281
-		wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
282
-		wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
281
+        wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
282
+        wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
283 283
 
284
-		$version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
285
-		wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ),  $version );
284
+        $version = filemtime( WPINV_PLUGIN_DIR . 'assets/js/admin-payment-forms.js' );
285
+        wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ),  $version );
286 286
 
287
-		wp_localize_script(
287
+        wp_localize_script(
288 288
             'wpinv-admin-payment-form-script',
289 289
             'wpinvPaymentFormAdmin',
290 290
             array(
291
-				'elements'      => wpinv_get_data( 'payment-form-elements' ),
292
-				'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
293
-				'currency'      => wpinv_currency_symbol(),
294
-				'position'      => wpinv_currency_position(),
295
-				'decimals'      => (int) wpinv_decimals(),
296
-				'thousands_sep' => wpinv_thousands_separator(),
297
-				'decimals_sep'  => wpinv_decimal_separator(),
298
-				'form_items'    => gepaid_get_form_items( $post->ID ),
299
-				'is_default'    => $post->ID == wpinv_get_default_payment_form(),
291
+                'elements'      => wpinv_get_data( 'payment-form-elements' ),
292
+                'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
293
+                'currency'      => wpinv_currency_symbol(),
294
+                'position'      => wpinv_currency_position(),
295
+                'decimals'      => (int) wpinv_decimals(),
296
+                'thousands_sep' => wpinv_thousands_separator(),
297
+                'decimals_sep'  => wpinv_decimal_separator(),
298
+                'form_items'    => gepaid_get_form_items( $post->ID ),
299
+                'is_default'    => $post->ID == wpinv_get_default_payment_form(),
300 300
             )
301 301
         );
302 302
 
@@ -305,20 +305,20 @@  discard block
 block discarded – undo
305 305
     }
306 306
 
307 307
     /**
308
-	 * Add our classes to admin pages.
308
+     * Add our classes to admin pages.
309 309
      *
310 310
      * @param string $classes
311 311
      * @return string
312
-	 *
313
-	 */
312
+     *
313
+     */
314 314
     public function admin_body_class( $classes ) {
315
-		global $pagenow, $post, $current_screen;
315
+        global $pagenow, $post, $current_screen;
316 316
 
317 317
 
318 318
         $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
319 319
 
320 320
         if ( ! empty( $current_screen->post_type ) ) {
321
-			$page = $current_screen->post_type;
321
+            $page = $current_screen->post_type;
322 322
         }
323 323
 
324 324
         if ( false !== stripos( $page, 'wpi' ) ) {
@@ -327,68 +327,68 @@  discard block
 block discarded – undo
327 327
 
328 328
         if ( in_array( $page, wpinv_parse_list( 'wpi_invoice wpi_payment_form wpi_quote' ) ) ) {
329 329
             $classes .= ' wpinv-cpt wpinv';
330
-		}
330
+        }
331 331
 		
332
-		if ( getpaid_is_invoice_post_type( $page ) ) {
332
+        if ( getpaid_is_invoice_post_type( $page ) ) {
333 333
             $classes .= ' getpaid-is-invoice-cpt';
334 334
         }
335 335
 
336
-		return $classes;
336
+        return $classes;
337 337
     }
338 338
 
339 339
     /**
340
-	 * Maybe show the AyeCode Connect Notice.
341
-	 */
342
-	public function init_ayecode_connect_helper(){
340
+     * Maybe show the AyeCode Connect Notice.
341
+     */
342
+    public function init_ayecode_connect_helper(){
343 343
 
344
-		// Register with the deactivation survey class.
345
-		AyeCode_Deactivation_Survey::instance(array(
346
-			'slug'		        => 'invoicing',
347
-			'version'	        => WPINV_VERSION,
348
-			'support_url'       => 'https://wpgetpaid.com/support/',
349
-			'documentation_url' => 'https://docs.wpgetpaid.com/',
350
-			'activated'         => (int) get_option( 'gepaid_installed_on' ),
351
-		));
344
+        // Register with the deactivation survey class.
345
+        AyeCode_Deactivation_Survey::instance(array(
346
+            'slug'		        => 'invoicing',
347
+            'version'	        => WPINV_VERSION,
348
+            'support_url'       => 'https://wpgetpaid.com/support/',
349
+            'documentation_url' => 'https://docs.wpgetpaid.com/',
350
+            'activated'         => (int) get_option( 'gepaid_installed_on' ),
351
+        ));
352 352
 
353 353
         new AyeCode_Connect_Helper(
354 354
             array(
355
-				'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"),
356
-				'connect_external'  => __( "Please confirm you wish to connect your site?","invoicing" ),
357
-				'connect'           => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ),
358
-				'connect_button'    => __("Connect Site","invoicing"),
359
-				'connecting_button'    => __("Connecting...","invoicing"),
360
-				'error_localhost'   => __( "This service will only work with a live domain, not a localhost.","invoicing" ),
361
-				'error'             => __( "Something went wrong, please refresh and try again.","invoicing" ),
355
+                'connect_title' => __("WP Invoicing - an AyeCode product!","invoicing"),
356
+                'connect_external'  => __( "Please confirm you wish to connect your site?","invoicing" ),
357
+                'connect'           => sprintf( __( "<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %slearn more%s","invoicing" ),"<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>","</a>" ),
358
+                'connect_button'    => __("Connect Site","invoicing"),
359
+                'connecting_button'    => __("Connecting...","invoicing"),
360
+                'error_localhost'   => __( "This service will only work with a live domain, not a localhost.","invoicing" ),
361
+                'error'             => __( "Something went wrong, please refresh and try again.","invoicing" ),
362 362
             ),
363 363
             array( 'wpi-addons' )
364 364
         );
365 365
 
366 366
     }
367 367
 
368
-	/**
369
-	 * Redirect users to settings on activation.
370
-	 *
371
-	 * @return void
372
-	 */
373
-	public function activation_redirect() {
368
+    /**
369
+     * Redirect users to settings on activation.
370
+     *
371
+     * @return void
372
+     */
373
+    public function activation_redirect() {
374 374
 
375
-		$redirected = get_option( 'wpinv_redirected_to_settings' );
375
+        $redirected = get_option( 'wpinv_redirected_to_settings' );
376 376
 
377
-		if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
378
-			return;
379
-		}
377
+        if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
378
+            return;
379
+        }
380 380
 
381
-		// Bail if activating from network, or bulk
382
-		if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
383
-			return;
384
-		}
381
+        // Bail if activating from network, or bulk
382
+        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
383
+            return;
384
+        }
385 385
 
386
-	    update_option( 'wpinv_redirected_to_settings', 1 );
386
+        update_option( 'wpinv_redirected_to_settings', 1 );
387 387
 
388 388
         wp_safe_redirect( admin_url( 'index.php?page=gp-setup' ) );
389 389
         exit;
390 390
 
391
-	}
391
+    }
392 392
 
393 393
     /**
394 394
      * Fires an admin action after verifying that a user can fire them.
@@ -402,498 +402,498 @@  discard block
 block discarded – undo
402 402
 
403 403
     }
404 404
 
405
-	/**
405
+    /**
406 406
      * Sends a payment reminder to a customer.
407
-	 * 
408
-	 * @param array $args
407
+     * 
408
+     * @param array $args
409 409
      */
410 410
     public function duplicate_payment_form( $args ) {
411 411
 
412
-		if ( empty( $args['form_id'] ) ) {
413
-			return;
414
-		}
415
-
416
-		$form = new GetPaid_Payment_Form( $args['form_id'] );
412
+        if ( empty( $args['form_id'] ) ) {
413
+            return;
414
+        }
417 415
 
418
-		if ( ! $form->exists() ) {
419
-			return;
420
-		}
416
+        $form = new GetPaid_Payment_Form( $args['form_id'] );
421 417
 
422
-		$new_form = new GetPaid_Payment_Form();
423
-		$new_form->set_author( $form->get_author( 'edit' ) );
424
-		$new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
425
-		$new_form->set_elements( $form->get_elements( 'edit' ) );
426
-		$new_form->set_items( $form->get_items( 'edit' ) );
427
-		$new_form->save();
418
+        if ( ! $form->exists() ) {
419
+            return;
420
+        }
428 421
 
429
-		if ( $new_form->exists() ) {
430
-			$this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
431
-			$url = get_edit_post_link( $new_form->get_id(), 'edit' );
432
-		} else {
433
-			$this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
434
-			$url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
435
-		}
422
+        $new_form = new GetPaid_Payment_Form();
423
+        $new_form->set_author( $form->get_author( 'edit' ) );
424
+        $new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
425
+        $new_form->set_elements( $form->get_elements( 'edit' ) );
426
+        $new_form->set_items( $form->get_items( 'edit' ) );
427
+        $new_form->save();
428
+
429
+        if ( $new_form->exists() ) {
430
+            $this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
431
+            $url = get_edit_post_link( $new_form->get_id(), 'edit' );
432
+        } else {
433
+            $this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
434
+            $url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
435
+        }
436 436
 
437
-		wp_redirect( $url );
438
-		exit;
439
-	}
437
+        wp_redirect( $url );
438
+        exit;
439
+    }
440 440
 
441
-	/**
441
+    /**
442 442
      * Sends a payment reminder to a customer.
443
-	 * 
444
-	 * @param array $args
443
+     * 
444
+     * @param array $args
445 445
      */
446 446
     public function send_customer_invoice( $args ) {
447
-		$sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
447
+        $sent = getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
448 448
 
449
-		if ( $sent ) {
450
-			$this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) );
451
-		} else {
452
-			$this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) );
453
-		}
449
+        if ( $sent ) {
450
+            $this->show_success( __( 'Invoice was successfully sent to the customer', 'invoicing' ) );
451
+        } else {
452
+            $this->show_error( __( 'Could not send the invoice to the customer', 'invoicing' ) );
453
+        }
454 454
 
455
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
456
-		exit;
457
-	}
455
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
456
+        exit;
457
+    }
458 458
 
459
-	/**
459
+    /**
460 460
      * Sends a payment reminder to a customer.
461
-	 * 
462
-	 * @param array $args
461
+     * 
462
+     * @param array $args
463 463
      */
464 464
     public function send_customer_payment_reminder( $args ) {
465
-		$sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
465
+        $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
466 466
 
467
-		if ( $sent ) {
468
-			$this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
469
-		} else {
470
-			$this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
471
-		}
467
+        if ( $sent ) {
468
+            $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
469
+        } else {
470
+            $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
471
+        }
472 472
 
473
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
474
-		exit;
475
-	}
473
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
474
+        exit;
475
+    }
476 476
 
477
-	/**
477
+    /**
478 478
      * Resets tax rates.
479
-	 * 
479
+     * 
480 480
      */
481 481
     public function admin_reset_tax_rates() {
482 482
 
483
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
484
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
485
-		exit;
483
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
484
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
485
+        exit;
486 486
 
487
-	}
487
+    }
488 488
 
489
-	/**
489
+    /**
490 490
      * Resets admin pages.
491
-	 * 
491
+     * 
492 492
      */
493 493
     public function admin_create_missing_pages() {
494
-		$installer = new GetPaid_Installer();
495
-		$installer->create_pages();
496
-		$this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
497
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
498
-		exit;
499
-	}
500
-
501
-	/**
494
+        $installer = new GetPaid_Installer();
495
+        $installer->create_pages();
496
+        $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
497
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
498
+        exit;
499
+    }
500
+
501
+    /**
502 502
      * Creates an missing admin tables.
503
-	 * 
503
+     * 
504 504
      */
505 505
     public function admin_create_missing_tables() {
506
-		global $wpdb;
507
-		$installer = new GetPaid_Installer();
506
+        global $wpdb;
507
+        $installer = new GetPaid_Installer();
508 508
 
509
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
510
-			$installer->create_subscriptions_table();
509
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}wpinv_subscriptions'" ) != $wpdb->prefix . 'wpinv_subscriptions' ) {
510
+            $installer->create_subscriptions_table();
511 511
 
512
-			if ( $wpdb->last_error !== '' ) {
513
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
514
-			}
515
-		}
512
+            if ( $wpdb->last_error !== '' ) {
513
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
514
+            }
515
+        }
516 516
 
517
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
518
-			$installer->create_invoices_table();
517
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoices'" ) != $wpdb->prefix . 'getpaid_invoices' ) {
518
+            $installer->create_invoices_table();
519 519
 
520
-			if ( $wpdb->last_error !== '' ) {
521
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
522
-			}
523
-		}
520
+            if ( $wpdb->last_error !== '' ) {
521
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
522
+            }
523
+        }
524 524
 
525
-		if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
526
-			$installer->create_invoice_items_table();
525
+        if ( $wpdb->get_var( "SHOW TABLES LIKE '{$wpdb->prefix}getpaid_invoice_items'" ) != $wpdb->prefix . 'getpaid_invoice_items' ) {
526
+            $installer->create_invoice_items_table();
527 527
 
528
-			if ( $wpdb->last_error !== '' ) {
529
-				$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
530
-			}
531
-		}
528
+            if ( $wpdb->last_error !== '' ) {
529
+                $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
530
+            }
531
+        }
532 532
 
533
-		if ( ! $this->has_notices() ) {
534
-			$this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
535
-		}
533
+        if ( ! $this->has_notices() ) {
534
+            $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
535
+        }
536 536
 
537
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
538
-		exit;
539
-	}
537
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
538
+        exit;
539
+    }
540 540
 
541
-	/**
541
+    /**
542 542
      * Migrates old invoices to the new database tables.
543
-	 * 
543
+     * 
544 544
      */
545 545
     public function admin_migrate_old_invoices() {
546 546
 
547
-		// Migrate the invoices.
548
-		$installer = new GetPaid_Installer();
549
-		$installer->migrate_old_invoices();
547
+        // Migrate the invoices.
548
+        $installer = new GetPaid_Installer();
549
+        $installer->migrate_old_invoices();
550 550
 
551
-		// Show an admin message.
552
-		$this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
551
+        // Show an admin message.
552
+        $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
553 553
 
554
-		// Redirect the admin.
555
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
556
-		exit;
554
+        // Redirect the admin.
555
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
556
+        exit;
557 557
 
558
-	}
558
+    }
559 559
 
560
-	/**
560
+    /**
561 561
      * Download customers.
562
-	 * 
562
+     * 
563 563
      */
564 564
     public function admin_download_customers() {
565
-		global $wpdb;
565
+        global $wpdb;
566 566
 
567
-		$output = fopen( 'php://output', 'w' ) or die( __( 'Unsupported server', 'invoicing' ) );
567
+        $output = fopen( 'php://output', 'w' ) or die( __( 'Unsupported server', 'invoicing' ) );
568 568
 
569
-		header( "Content-Type:text/csv" );
570
-		header( "Content-Disposition:attachment;filename=customers.csv" );
569
+        header( "Content-Type:text/csv" );
570
+        header( "Content-Disposition:attachment;filename=customers.csv" );
571 571
 
572
-		$post_types = '';
572
+        $post_types = '';
573 573
 
574
-		foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
575
-			$post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type );
576
-		}
574
+        foreach ( array_keys( getpaid_get_invoice_post_types() ) as $post_type ) {
575
+            $post_types .= $wpdb->prepare( "post_type=%s OR ", $post_type );
576
+        }
577 577
 
578
-		$post_types = rtrim( $post_types, ' OR' );
578
+        $post_types = rtrim( $post_types, ' OR' );
579 579
 
580
-		$customers = $wpdb->get_col(
581
-			$wpdb->prepare(
582
-				"SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types"
583
-			)
584
-		);
580
+        $customers = $wpdb->get_col(
581
+            $wpdb->prepare(
582
+                "SELECT DISTINCT( post_author ) FROM $wpdb->posts WHERE $post_types"
583
+            )
584
+        );
585 585
 
586
-		$columns = array(
587
-			'name'     => __( 'Name', 'invoicing' ),
588
-			'email'    => __( 'Email', 'invoicing' ),
589
-			'country'  => __( 'Country', 'invoicing' ),
590
-			'state'    => __( 'State', 'invoicing' ),
591
-			'city'     => __( 'City', 'invoicing' ),
592
-			'zip'      => __( 'ZIP', 'invoicing' ),
593
-			'address'  => __( 'Address', 'invoicing' ),
594
-			'phone'    => __( 'Phone', 'invoicing' ),
595
-			'company'  => __( 'Company', 'invoicing' ),
596
-			'company_id'  => __( 'Company ID', 'invoicing' ),
597
-			'invoices' => __( 'Invoices', 'invoicing' ),
598
-			'total_raw' => __( 'Total Spend', 'invoicing' ),
599
-			'signup'   => __( 'Date created', 'invoicing' ),
600
-		);
586
+        $columns = array(
587
+            'name'     => __( 'Name', 'invoicing' ),
588
+            'email'    => __( 'Email', 'invoicing' ),
589
+            'country'  => __( 'Country', 'invoicing' ),
590
+            'state'    => __( 'State', 'invoicing' ),
591
+            'city'     => __( 'City', 'invoicing' ),
592
+            'zip'      => __( 'ZIP', 'invoicing' ),
593
+            'address'  => __( 'Address', 'invoicing' ),
594
+            'phone'    => __( 'Phone', 'invoicing' ),
595
+            'company'  => __( 'Company', 'invoicing' ),
596
+            'company_id'  => __( 'Company ID', 'invoicing' ),
597
+            'invoices' => __( 'Invoices', 'invoicing' ),
598
+            'total_raw' => __( 'Total Spend', 'invoicing' ),
599
+            'signup'   => __( 'Date created', 'invoicing' ),
600
+        );
601 601
 
602
-		// Output the csv column headers.
603
-		fputcsv( $output, array_values( $columns ) );
602
+        // Output the csv column headers.
603
+        fputcsv( $output, array_values( $columns ) );
604 604
 
605
-		// Loop through
606
-		$table = new WPInv_Customers_Table();
607
-		foreach ( $customers as $customer_id ) {
605
+        // Loop through
606
+        $table = new WPInv_Customers_Table();
607
+        foreach ( $customers as $customer_id ) {
608 608
 
609
-			$user = get_user_by( 'id', $customer_id );
610
-			$row  = array();
611
-			if ( empty( $user ) ) {
612
-				continue;
613
-			}
609
+            $user = get_user_by( 'id', $customer_id );
610
+            $row  = array();
611
+            if ( empty( $user ) ) {
612
+                continue;
613
+            }
614 614
 
615
-			foreach ( array_keys( $columns ) as $column ) {
615
+            foreach ( array_keys( $columns ) as $column ) {
616 616
 
617
-				$method = 'column_' . $column;
617
+                $method = 'column_' . $column;
618 618
 
619
-				if ( 'name' == $column ) {
620
-					$value = esc_html( $user->display_name );
621
-				} else if( 'email' == $column ) {
622
-					$value = sanitize_email( $user->user_email );
623
-				} else if ( is_callable( array( $table, $method ) ) ) {
624
-					$value = strip_tags( $table->$method( $user ) );
625
-				}
619
+                if ( 'name' == $column ) {
620
+                    $value = esc_html( $user->display_name );
621
+                } else if( 'email' == $column ) {
622
+                    $value = sanitize_email( $user->user_email );
623
+                } else if ( is_callable( array( $table, $method ) ) ) {
624
+                    $value = strip_tags( $table->$method( $user ) );
625
+                }
626 626
 
627
-				if ( empty( $value ) ) {
628
-					$value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) );
629
-				}
627
+                if ( empty( $value ) ) {
628
+                    $value = esc_html( get_user_meta( $user->ID, '_wpinv_' . $column, true ) );
629
+                }
630 630
 
631
-				$row[] = $value;
631
+                $row[] = $value;
632 632
 
633
-			}
633
+            }
634 634
 
635
-			fputcsv( $output, $row );
636
-		}
635
+            fputcsv( $output, $row );
636
+        }
637 637
 
638
-		fclose( $output );
639
-		exit;
638
+        fclose( $output );
639
+        exit;
640 640
 
641
-	}
641
+    }
642 642
 
643
-	/**
643
+    /**
644 644
      * Installs a plugin.
645
-	 *
646
-	 * @param array $data
645
+     *
646
+     * @param array $data
647 647
      */
648 648
     public function admin_install_plugin( $data ) {
649 649
 
650
-		if ( ! empty( $data['plugins'] ) ) {
651
-			include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
652
-			wp_cache_flush();
650
+        if ( ! empty( $data['plugins'] ) ) {
651
+            include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
652
+            wp_cache_flush();
653 653
 
654
-			foreach ( $data['plugins'] as $slug => $file ) {
655
-				$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
656
-				$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
657
-				$installed  = $upgrader->install( $plugin_zip );
654
+            foreach ( $data['plugins'] as $slug => $file ) {
655
+                $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
656
+                $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
657
+                $installed  = $upgrader->install( $plugin_zip );
658 658
 
659
-				if ( ! is_wp_error( $installed ) && $installed ) {
660
-					activate_plugin( $file, '', false, true );
661
-				} else {
662
-					wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
663
-				}
659
+                if ( ! is_wp_error( $installed ) && $installed ) {
660
+                    activate_plugin( $file, '', false, true );
661
+                } else {
662
+                    wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
663
+                }
664 664
 
665
-			}
665
+            }
666 666
 
667
-		}
667
+        }
668 668
 
669
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
670
-		wp_safe_redirect( $redirect );
671
-		exit;
669
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
670
+        wp_safe_redirect( $redirect );
671
+        exit;
672 672
 
673
-	}
673
+    }
674 674
 
675
-	/**
675
+    /**
676 676
      * Connects a gateway.
677
-	 *
678
-	 * @param array $data
677
+     *
678
+     * @param array $data
679 679
      */
680 680
     public function admin_connect_gateway( $data ) {
681 681
 
682
-		if ( ! empty( $data['plugin'] ) ) {
682
+        if ( ! empty( $data['plugin'] ) ) {
683 683
 
684
-			$gateway     = sanitize_key( $data['plugin'] );
685
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
684
+            $gateway     = sanitize_key( $data['plugin'] );
685
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
686 686
 
687
-			if ( ! empty( $connect_url ) ) {
688
-				wp_redirect( $connect_url );
689
-				exit;
690
-			}
687
+            if ( ! empty( $connect_url ) ) {
688
+                wp_redirect( $connect_url );
689
+                exit;
690
+            }
691 691
 
692
-			if ( 'stripe' == $data['plugin'] ) {
693
-				require_once ABSPATH . 'wp-admin/includes/plugin.php';
694
-				include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
695
-				wp_cache_flush();
692
+            if ( 'stripe' == $data['plugin'] ) {
693
+                require_once ABSPATH . 'wp-admin/includes/plugin.php';
694
+                include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
695
+                wp_cache_flush();
696 696
 
697
-				if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
698
-					$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
699
-					$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
700
-					$upgrader->install( $plugin_zip );
701
-				}
697
+                if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
698
+                    $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
699
+                    $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
700
+                    $upgrader->install( $plugin_zip );
701
+                }
702 702
 
703
-				activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
704
-			}
703
+                activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
704
+            }
705 705
 
706
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
707
-			if ( ! empty( $connect_url ) ) {
708
-				wp_redirect( $connect_url );
709
-				exit;
710
-			}
706
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
707
+            if ( ! empty( $connect_url ) ) {
708
+                wp_redirect( $connect_url );
709
+                exit;
710
+            }
711 711
 
712
-		}
712
+        }
713 713
 
714
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
715
-		wp_safe_redirect( $redirect );
716
-		exit;
714
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
715
+        wp_safe_redirect( $redirect );
716
+        exit;
717 717
 
718
-	}
718
+    }
719 719
 
720
-	/**
720
+    /**
721 721
      * Recalculates discounts.
722
-	 * 
722
+     * 
723 723
      */
724 724
     public function admin_recalculate_discounts() {
725
-		global $wpdb;
725
+        global $wpdb;
726 726
 
727
-		// Fetch all invoices that have discount codes.
728
-		$table    = $wpdb->prefix . 'getpaid_invoices';
729
-		$invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
727
+        // Fetch all invoices that have discount codes.
728
+        $table    = $wpdb->prefix . 'getpaid_invoices';
729
+        $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
730 730
 
731
-		foreach ( $invoices as $invoice ) {
731
+        foreach ( $invoices as $invoice ) {
732 732
 
733
-			$invoice = new WPInv_Invoice( $invoice );
733
+            $invoice = new WPInv_Invoice( $invoice );
734 734
 
735
-			if ( ! $invoice->exists() ) {
736
-				continue;
737
-			}
735
+            if ( ! $invoice->exists() ) {
736
+                continue;
737
+            }
738 738
 
739
-			// Abort if the discount does not exist or does not apply here.
740
-			$discount = new WPInv_Discount( $invoice->get_discount_code() );
741
-			if ( ! $discount->exists() ) {
742
-				continue;
743
-			}
739
+            // Abort if the discount does not exist or does not apply here.
740
+            $discount = new WPInv_Discount( $invoice->get_discount_code() );
741
+            if ( ! $discount->exists() ) {
742
+                continue;
743
+            }
744 744
 
745
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
746
-			$invoice->recalculate_total();
745
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
746
+            $invoice->recalculate_total();
747 747
 
748
-			if ( $invoice->get_total_discount() > 0 ) {
749
-				$invoice->save();
750
-			}
748
+            if ( $invoice->get_total_discount() > 0 ) {
749
+                $invoice->save();
750
+            }
751 751
 
752
-		}
752
+        }
753 753
 
754
-		// Show an admin message.
755
-		$this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
754
+        // Show an admin message.
755
+        $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
756 756
 
757
-		// Redirect the admin.
758
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
759
-		exit;
757
+        // Redirect the admin.
758
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
759
+        exit;
760 760
 
761
-	}
761
+    }
762 762
 
763 763
     /**
764
-	 * Returns an array of admin notices.
765
-	 *
766
-	 * @since       1.0.19
764
+     * Returns an array of admin notices.
765
+     *
766
+     * @since       1.0.19
767 767
      * @return array
768
-	 */
769
-	public function get_notices() {
770
-		$notices = get_option( 'wpinv_admin_notices' );
768
+     */
769
+    public function get_notices() {
770
+        $notices = get_option( 'wpinv_admin_notices' );
771 771
         return is_array( $notices ) ? $notices : array();
772
-	}
772
+    }
773 773
 
774
-	/**
775
-	 * Checks if we have any admin notices.
776
-	 *
777
-	 * @since       2.0.4
774
+    /**
775
+     * Checks if we have any admin notices.
776
+     *
777
+     * @since       2.0.4
778 778
      * @return array
779
-	 */
780
-	public function has_notices() {
781
-		return count( $this->get_notices() ) > 0;
782
-	}
783
-
784
-	/**
785
-	 * Clears all admin notices
786
-	 *
787
-	 * @access      public
788
-	 * @since       1.0.19
789
-	 */
790
-	public function clear_notices() {
791
-		delete_option( 'wpinv_admin_notices' );
792
-	}
793
-
794
-	/**
795
-	 * Saves a new admin notice
796
-	 *
797
-	 * @access      public
798
-	 * @since       1.0.19
799
-	 */
800
-	public function save_notice( $type, $message ) {
801
-		$notices = $this->get_notices();
802
-
803
-		if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) {
804
-			$notices[ $type ] = array();
805
-		}
806
-
807
-		$notices[ $type ][] = $message;
808
-
809
-		update_option( 'wpinv_admin_notices', $notices );
810
-	}
811
-
812
-	/**
813
-	 * Displays a success notice
814
-	 *
815
-	 * @param       string $msg The message to qeue.
816
-	 * @access      public
817
-	 * @since       1.0.19
818
-	 */
819
-	public function show_success( $msg ) {
820
-		$this->save_notice( 'success', $msg );
821
-	}
822
-
823
-	/**
824
-	 * Displays a error notice
825
-	 *
826
-	 * @access      public
827
-	 * @param       string $msg The message to qeue.
828
-	 * @since       1.0.19
829
-	 */
830
-	public function show_error( $msg ) {
831
-		$this->save_notice( 'error', $msg );
832
-	}
833
-
834
-	/**
835
-	 * Displays a warning notice
836
-	 *
837
-	 * @access      public
838
-	 * @param       string $msg The message to qeue.
839
-	 * @since       1.0.19
840
-	 */
841
-	public function show_warning( $msg ) {
842
-		$this->save_notice( 'warning', $msg );
843
-	}
844
-
845
-	/**
846
-	 * Displays a info notice
847
-	 *
848
-	 * @access      public
849
-	 * @param       string $msg The message to qeue.
850
-	 * @since       1.0.19
851
-	 */
852
-	public function show_info( $msg ) {
853
-		$this->save_notice( 'info', $msg );
854
-	}
855
-
856
-	/**
857
-	 * Show notices
858
-	 *
859
-	 * @access      public
860
-	 * @since       1.0.19
861
-	 */
862
-	public function show_notices() {
779
+     */
780
+    public function has_notices() {
781
+        return count( $this->get_notices() ) > 0;
782
+    }
783
+
784
+    /**
785
+     * Clears all admin notices
786
+     *
787
+     * @access      public
788
+     * @since       1.0.19
789
+     */
790
+    public function clear_notices() {
791
+        delete_option( 'wpinv_admin_notices' );
792
+    }
793
+
794
+    /**
795
+     * Saves a new admin notice
796
+     *
797
+     * @access      public
798
+     * @since       1.0.19
799
+     */
800
+    public function save_notice( $type, $message ) {
801
+        $notices = $this->get_notices();
802
+
803
+        if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ]) ) {
804
+            $notices[ $type ] = array();
805
+        }
806
+
807
+        $notices[ $type ][] = $message;
808
+
809
+        update_option( 'wpinv_admin_notices', $notices );
810
+    }
811
+
812
+    /**
813
+     * Displays a success notice
814
+     *
815
+     * @param       string $msg The message to qeue.
816
+     * @access      public
817
+     * @since       1.0.19
818
+     */
819
+    public function show_success( $msg ) {
820
+        $this->save_notice( 'success', $msg );
821
+    }
822
+
823
+    /**
824
+     * Displays a error notice
825
+     *
826
+     * @access      public
827
+     * @param       string $msg The message to qeue.
828
+     * @since       1.0.19
829
+     */
830
+    public function show_error( $msg ) {
831
+        $this->save_notice( 'error', $msg );
832
+    }
833
+
834
+    /**
835
+     * Displays a warning notice
836
+     *
837
+     * @access      public
838
+     * @param       string $msg The message to qeue.
839
+     * @since       1.0.19
840
+     */
841
+    public function show_warning( $msg ) {
842
+        $this->save_notice( 'warning', $msg );
843
+    }
844
+
845
+    /**
846
+     * Displays a info notice
847
+     *
848
+     * @access      public
849
+     * @param       string $msg The message to qeue.
850
+     * @since       1.0.19
851
+     */
852
+    public function show_info( $msg ) {
853
+        $this->save_notice( 'info', $msg );
854
+    }
855
+
856
+    /**
857
+     * Show notices
858
+     *
859
+     * @access      public
860
+     * @since       1.0.19
861
+     */
862
+    public function show_notices() {
863 863
 
864 864
         $notices = $this->get_notices();
865 865
         $this->clear_notices();
866 866
 
867
-		foreach ( $notices as $type => $messages ) {
867
+        foreach ( $notices as $type => $messages ) {
868 868
 
869
-			if ( ! is_array( $messages ) ) {
870
-				continue;
871
-			}
869
+            if ( ! is_array( $messages ) ) {
870
+                continue;
871
+            }
872 872
 
873 873
             $type  = sanitize_key( $type );
874
-			foreach ( $messages as $message ) {
874
+            foreach ( $messages as $message ) {
875 875
                 $message = wp_kses_post( $message );
876
-				echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>";
876
+                echo "<div class='notice notice-$type is-dismissible'><p>$message</p></div>";
877 877
             }
878 878
 
879 879
         }
880 880
 
881
-		foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
882
-
883
-			if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
884
-				$url     = wp_nonce_url(
885
-					add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
886
-					'getpaid-nonce',
887
-					'getpaid-nonce'
888
-				);
889
-				$message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
890
-				$message2 = __( 'Generate Pages', 'invoicing' );
891
-				echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>";
892
-				break;
893
-			}
881
+        foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
882
+
883
+            if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
884
+                $url     = wp_nonce_url(
885
+                    add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
886
+                    'getpaid-nonce',
887
+                    'getpaid-nonce'
888
+                );
889
+                $message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
890
+                $message2 = __( 'Generate Pages', 'invoicing' );
891
+                echo "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>";
892
+                break;
893
+            }
894 894
 
895
-		}
895
+        }
896 896
 
897
-	}
897
+    }
898 898
 
899 899
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-deactivation-survey/wp-deactivation-survey.php 1 patch
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -1,103 +1,103 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit;
4
+    exit;
5 5
 }
6 6
 
7 7
 if ( ! class_exists( 'AyeCode_Deactivation_Survey' ) ) {
8 8
 
9
-	class AyeCode_Deactivation_Survey {
9
+    class AyeCode_Deactivation_Survey {
10 10
 
11
-		/**
12
-		 * AyeCode_Deactivation_Survey instance.
13
-		 *
14
-		 * @access private
15
-		 * @since  1.0.0
16
-		 * @var    AyeCode_Deactivation_Survey There can be only one!
17
-		 */
18
-		private static $instance = null;
11
+        /**
12
+         * AyeCode_Deactivation_Survey instance.
13
+         *
14
+         * @access private
15
+         * @since  1.0.0
16
+         * @var    AyeCode_Deactivation_Survey There can be only one!
17
+         */
18
+        private static $instance = null;
19 19
 
20
-		public static $plugins;
20
+        public static $plugins;
21 21
 
22
-		public $version = "1.0.4";
22
+        public $version = "1.0.4";
23 23
 
24
-		public static function instance( $plugin = array() ) {
25
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_Deactivation_Survey ) ) {
26
-				self::$instance = new AyeCode_Deactivation_Survey;
27
-				self::$plugins = array();
24
+        public static function instance( $plugin = array() ) {
25
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_Deactivation_Survey ) ) {
26
+                self::$instance = new AyeCode_Deactivation_Survey;
27
+                self::$plugins = array();
28 28
 
29
-				add_action( 'admin_enqueue_scripts', array( self::$instance, 'scripts' ) );
29
+                add_action( 'admin_enqueue_scripts', array( self::$instance, 'scripts' ) );
30 30
 
31
-				do_action( 'ayecode_deactivation_survey_loaded' );
32
-			}
31
+                do_action( 'ayecode_deactivation_survey_loaded' );
32
+            }
33 33
 
34
-			if(!empty($plugin)){
35
-				self::$plugins[] = (object)$plugin;
36
-			}
34
+            if(!empty($plugin)){
35
+                self::$plugins[] = (object)$plugin;
36
+            }
37 37
 
38
-			return self::$instance;
39
-		}
38
+            return self::$instance;
39
+        }
40 40
 
41
-		public function scripts() {
42
-			global $pagenow;
41
+        public function scripts() {
42
+            global $pagenow;
43 43
 
44
-			// Bail if we are not on the plugins page
45
-			if ( $pagenow != "plugins.php" ) {
46
-				return;
47
-			}
44
+            // Bail if we are not on the plugins page
45
+            if ( $pagenow != "plugins.php" ) {
46
+                return;
47
+            }
48 48
 
49
-			// Enqueue scripts
50
-			add_thickbox();
51
-			wp_enqueue_script('ayecode-deactivation-survey', plugin_dir_url(__FILE__) . 'ayecode-ds.js');
49
+            // Enqueue scripts
50
+            add_thickbox();
51
+            wp_enqueue_script('ayecode-deactivation-survey', plugin_dir_url(__FILE__) . 'ayecode-ds.js');
52 52
 
53
-			/*
53
+            /*
54 54
 			 * Localized strings. Strings can be localised by plugins using this class.
55 55
 			 * We deliberately don't add textdomains here so that double textdomain warning is not given in theme review.
56 56
 			 */
57
-			wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_strings', array(
58
-				'quick_feedback'			=> 'Quick Feedback',
59
-				'foreword'					=> 'If you would be kind enough, please tell us why you\'re deactivating?',
60
-				'better_plugins_name'		=> 'Please tell us which plugin?',
61
-				'please_tell_us'			=> 'Please tell us the reason so we can improve the plugin',
62
-				'do_not_attach_email'		=> 'Do not send my e-mail address with this feedback',
63
-				'brief_description'			=> 'Please give us any feedback that could help us improve',
64
-				'cancel'					=> 'Cancel',
65
-				'skip_and_deactivate'		=> 'Skip &amp; Deactivate',
66
-				'submit_and_deactivate'		=> 'Submit &amp; Deactivate',
67
-				'please_wait'				=> 'Please wait',
68
-				'get_support'				=> 'Get Support',
69
-				'documentation'				=> 'Documentation',
70
-				'thank_you'					=> 'Thank you!',
71
-			));
72
-
73
-			// Plugins
74
-			$plugins = apply_filters('ayecode_deactivation_survey_plugins', self::$plugins);
75
-
76
-			// Reasons
77
-			$defaultReasons = array(
78
-				'suddenly-stopped-working'	=> 'The plugin suddenly stopped working',
79
-				'plugin-broke-site'			=> 'The plugin broke my site',
80
-				'plugin-setup-difficult'	=> 'Too difficult to setup',
81
-				'plugin-design-difficult'	=> 'Too difficult to get the design i want',
82
-				'no-longer-needed'			=> 'I don\'t need this plugin any more',
83
-				'found-better-plugin'		=> 'I found a better plugin',
84
-				'temporary-deactivation'	=> 'It\'s a temporary deactivation, I\'m troubleshooting',
85
-				'other'						=> 'Other',
86
-			);
87
-
88
-			foreach($plugins as $plugin)
89
-			{
90
-				$plugin->reasons = apply_filters('ayecode_deactivation_survey_reasons', $defaultReasons, $plugin);
91
-				$plugin->url = home_url();
92
-				$plugin->activated = 0;
93
-			}
94
-
95
-			// Send plugin data
96
-			wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_plugins', $plugins);
97
-
98
-		}
57
+            wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_strings', array(
58
+                'quick_feedback'			=> 'Quick Feedback',
59
+                'foreword'					=> 'If you would be kind enough, please tell us why you\'re deactivating?',
60
+                'better_plugins_name'		=> 'Please tell us which plugin?',
61
+                'please_tell_us'			=> 'Please tell us the reason so we can improve the plugin',
62
+                'do_not_attach_email'		=> 'Do not send my e-mail address with this feedback',
63
+                'brief_description'			=> 'Please give us any feedback that could help us improve',
64
+                'cancel'					=> 'Cancel',
65
+                'skip_and_deactivate'		=> 'Skip &amp; Deactivate',
66
+                'submit_and_deactivate'		=> 'Submit &amp; Deactivate',
67
+                'please_wait'				=> 'Please wait',
68
+                'get_support'				=> 'Get Support',
69
+                'documentation'				=> 'Documentation',
70
+                'thank_you'					=> 'Thank you!',
71
+            ));
72
+
73
+            // Plugins
74
+            $plugins = apply_filters('ayecode_deactivation_survey_plugins', self::$plugins);
75
+
76
+            // Reasons
77
+            $defaultReasons = array(
78
+                'suddenly-stopped-working'	=> 'The plugin suddenly stopped working',
79
+                'plugin-broke-site'			=> 'The plugin broke my site',
80
+                'plugin-setup-difficult'	=> 'Too difficult to setup',
81
+                'plugin-design-difficult'	=> 'Too difficult to get the design i want',
82
+                'no-longer-needed'			=> 'I don\'t need this plugin any more',
83
+                'found-better-plugin'		=> 'I found a better plugin',
84
+                'temporary-deactivation'	=> 'It\'s a temporary deactivation, I\'m troubleshooting',
85
+                'other'						=> 'Other',
86
+            );
87
+
88
+            foreach($plugins as $plugin)
89
+            {
90
+                $plugin->reasons = apply_filters('ayecode_deactivation_survey_reasons', $defaultReasons, $plugin);
91
+                $plugin->url = home_url();
92
+                $plugin->activated = 0;
93
+            }
94
+
95
+            // Send plugin data
96
+            wp_localize_script('ayecode-deactivation-survey', 'ayecodeds_deactivate_feedback_form_plugins', $plugins);
97
+
98
+        }
99 99
 		
100 100
 
101
-	}
101
+    }
102 102
 
103 103
 }
104 104
\ No newline at end of file
Please login to merge, or discard this patch.
includes/payments/class-getpaid-form-item.php 1 patch
Indentation   +359 added lines, -359 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,67 +10,67 @@  discard block
 block discarded – undo
10 10
 class GetPaid_Form_Item  extends WPInv_Item {
11 11
 
12 12
     /**
13
-	 * Stores a custom description for the item.
14
-	 *
15
-	 * @var string
16
-	 */
17
-	protected $custom_description = null;
18
-
19
-	/**
20
-	 * Stores the item quantity.
21
-	 *
22
-	 * @var float
23
-	 */
24
-	protected $quantity = 1;
25
-
26
-	/**
27
-	 * Stores the item meta.
28
-	 *
29
-	 * @var array
30
-	 */
31
-	protected $meta = array();
32
-
33
-	/**
34
-	 * Is this item required?
35
-	 *
36
-	 * @var int
37
-	 */
38
-	protected $is_required = true;
39
-
40
-	/**
41
-	 * Are quantities allowed?
42
-	 *
43
-	 * @var int
44
-	 */
45
-	protected $allow_quantities = false;
46
-
47
-	/**
48
-	 * Associated invoice.
49
-	 *
50
-	 * @var int
51
-	 */
52
-	public $invoice_id = 0;
53
-
54
-	/**
55
-	 * Item discount.
56
-	 *
57
-	 * @var float
58
-	 */
59
-	public $item_discount = 0;
60
-
61
-	/**
62
-	 * Recurring item discount.
63
-	 *
64
-	 * @var float
65
-	 */
66
-	public $recurring_item_discount = 0;
67
-
68
-	/**
69
-	 * Item tax.
70
-	 *
71
-	 * @var float
72
-	 */
73
-	public $item_tax = 0;
13
+     * Stores a custom description for the item.
14
+     *
15
+     * @var string
16
+     */
17
+    protected $custom_description = null;
18
+
19
+    /**
20
+     * Stores the item quantity.
21
+     *
22
+     * @var float
23
+     */
24
+    protected $quantity = 1;
25
+
26
+    /**
27
+     * Stores the item meta.
28
+     *
29
+     * @var array
30
+     */
31
+    protected $meta = array();
32
+
33
+    /**
34
+     * Is this item required?
35
+     *
36
+     * @var int
37
+     */
38
+    protected $is_required = true;
39
+
40
+    /**
41
+     * Are quantities allowed?
42
+     *
43
+     * @var int
44
+     */
45
+    protected $allow_quantities = false;
46
+
47
+    /**
48
+     * Associated invoice.
49
+     *
50
+     * @var int
51
+     */
52
+    public $invoice_id = 0;
53
+
54
+    /**
55
+     * Item discount.
56
+     *
57
+     * @var float
58
+     */
59
+    public $item_discount = 0;
60
+
61
+    /**
62
+     * Recurring item discount.
63
+     *
64
+     * @var float
65
+     */
66
+    public $recurring_item_discount = 0;
67
+
68
+    /**
69
+     * Item tax.
70
+     *
71
+     * @var float
72
+     */
73
+    public $item_tax = 0;
74 74
 
75 75
     /*
76 76
 	|--------------------------------------------------------------------------
@@ -88,230 +88,230 @@  discard block
 block discarded – undo
88 88
     */
89 89
 
90 90
     /**
91
-	 * Get the item name.
92
-	 *
93
-	 * @since 1.0.19
94
-	 * @param  string $context View or edit context.
95
-	 * @return string
96
-	 */
97
-	public function get_name( $context = 'view' ) {
98
-		$name = parent::get_name( $context );
99
-		return $name . wpinv_get_item_suffix( $this );
100
-	}
101
-
102
-	/**
103
-	 * Get the item name without a suffix.
104
-	 *
105
-	 * @since 1.0.19
106
-	 * @param  string $context View or edit context.
107
-	 * @return string
108
-	 */
109
-	public function get_raw_name( $context = 'view' ) {
110
-		return parent::get_name( $context );
111
-	}
112
-
113
-	/**
114
-	 * Get the item description.
115
-	 *
116
-	 * @since 1.0.19
117
-	 * @param  string $context View or edit context.
118
-	 * @return string
119
-	 */
120
-	public function get_description( $context = 'view' ) {
121
-
122
-		if ( isset( $this->custom_description ) ) {
123
-			return $this->custom_description;
124
-		}
125
-
126
-		return parent::get_description( $context );
127
-	}
128
-
129
-	/**
130
-	 * Returns the sub total.
131
-	 *
132
-	 * @since 1.0.19
133
-	 * @param  string $context View or edit context.
134
-	 * @return float
135
-	 */
136
-	public function get_sub_total( $context = 'view' ) {
137
-		return $this->get_quantity( $context ) * $this->get_initial_price( $context );
138
-	}
139
-
140
-	/**
141
-	 * Returns the recurring sub total.
142
-	 *
143
-	 * @since 1.0.19
144
-	 * @param  string $context View or edit context.
145
-	 * @return float
146
-	 */
147
-	public function get_recurring_sub_total( $context = 'view' ) {
148
-
149
-		if ( $this->is_recurring() ) {
150
-			return $this->get_quantity( $context ) * $this->get_price( $context );
151
-		}
152
-
153
-		return 0;
154
-	}
155
-
156
-	/**
157
-	 * @deprecated
158
-	 */
159
-	public function get_qantity( $context = 'view' ) {
160
-		return $this->get_quantity( $context );
161
-	}
162
-
163
-	/**
164
-	 * Get the item quantity.
165
-	 *
166
-	 * @since 1.0.19
167
-	 * @param  string $context View or edit context.
168
-	 * @return float
169
-	 */
170
-	public function get_quantity( $context = 'view' ) {
171
-		$quantity = (float) $this->quantity;
172
-
173
-		if ( 'view' == $context ) {
174
-			return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
175
-		}
176
-
177
-		return $quantity;
178
-
179
-	}
180
-
181
-	/**
182
-	 * Get the item meta data.
183
-	 *
184
-	 * @since 1.0.19
185
-	 * @param  string $context View or edit context.
186
-	 * @return meta
187
-	 */
188
-	public function get_item_meta( $context = 'view' ) {
189
-		$meta = $this->meta;
190
-
191
-		if ( 'view' == $context ) {
192
-			return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
193
-		}
194
-
195
-		return $meta;
196
-
197
-	}
198
-
199
-	/**
200
-	 * Returns whether or not customers can update the item quantity.
201
-	 *
202
-	 * @since 1.0.19
203
-	 * @param  string $context View or edit context.
204
-	 * @return bool
205
-	 */
206
-	public function get_allow_quantities( $context = 'view' ) {
207
-		$allow_quantities = (bool) $this->allow_quantities;
208
-
209
-		if ( 'view' == $context ) {
210
-			return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
211
-		}
212
-
213
-		return $allow_quantities;
214
-
215
-	}
216
-
217
-	/**
218
-	 * Returns whether or not the item is required.
219
-	 *
220
-	 * @since 1.0.19
221
-	 * @param  string $context View or edit context.
222
-	 * @return bool
223
-	 */
224
-	public function get_is_required( $context = 'view' ) {
225
-		$is_required = (bool) $this->is_required;
226
-
227
-		if ( 'view' == $context ) {
228
-			return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
229
-		}
230
-
231
-		return $is_required;
232
-
233
-	}
234
-
235
-	/**
236
-	 * Prepares form data for use.
237
-	 *
238
-	 * @since 1.0.19
239
-	 * @return array
240
-	 */
241
-	public function prepare_data_for_use( $required = null ) {
242
-
243
-		$required = is_null( $required ) ? $this->is_required() : $required;
244
-		return array(
245
-			'title'            => strip_tags( $this->get_name() ),
246
-			'id'               => $this->get_id(),
247
-			'price'            => $this->get_price(),
248
-			'recurring'        => $this->is_recurring(),
249
-			'description'      => $this->get_description(),
250
-			'allow_quantities' => $this->allows_quantities(),
251
-			'required'         => $required,
252
-		);
253
-
254
-	}
255
-
256
-	/**
257
-	 * Prepares form data for ajax use.
258
-	 *
259
-	 * @since 1.0.19
260
-	 * @return array
261
-	 */
262
-	public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
263
-
264
-		$description = getpaid_item_recurring_price_help_text( $this, $currency );
265
-
266
-		if ( $description ) {
267
-			$description = "<div class='getpaid-subscription-help-text'>$description</div>";
268
-		}
269
-
270
-		$price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
271
-		$subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
272
-		return array(
273
-			'id'     => $this->get_id(),
274
-			'texts'  => array(
275
-				'item-name'        => sanitize_text_field( $this->get_name() ),
276
-				'item-description' => wp_kses_post( $this->get_description() ) . $description,
277
-				'item-quantity'    => floatval( $this->get_quantity() ),
278
-				'item-price'       => wpinv_price( $price, $currency ),
279
-				'item-total'       => wpinv_price( $subtotal, $currency ),
280
-			),
281
-			'inputs' => array(
282
-				'item-id'          => $this->get_id(),
283
-				'item-name'        => sanitize_text_field( $this->get_name() ),
284
-				'item-description' => wp_kses_post( $this->get_description() ),
285
-				'item-quantity'    => floatval( $this->get_quantity() ),
286
-				'item-price'       => $price,
287
-			)
288
-		);
289
-
290
-	}
291
-
292
-	/**
293
-	 * Prepares form data for saving (cart_details).
294
-	 *
295
-	 * @since 1.0.19
296
-	 * @return array
297
-	 */
298
-	public function prepare_data_for_saving() {
299
-
300
-		return array(
301
-			'post_id'           => $this->invoice_id,
302
-			'item_id'           => $this->get_id(),
303
-			'item_name'         => sanitize_text_field( $this->get_raw_name( 'edit' ) ),
304
-			'item_description'  => $this->get_description( 'edit' ),
305
-			'tax'               => $this->item_tax,
306
-			'item_price'        => $this->get_price( 'edit' ),
307
-			'quantity'          => (float) $this->get_quantity( 'edit' ),
308
-			'discount'          => $this->item_discount,
309
-			'subtotal'          => $this->get_sub_total( 'edit' ),
310
-			'price'             => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount,
311
-			'meta'              => $this->get_item_meta( 'edit' ),
312
-		);
313
-
314
-	}
91
+     * Get the item name.
92
+     *
93
+     * @since 1.0.19
94
+     * @param  string $context View or edit context.
95
+     * @return string
96
+     */
97
+    public function get_name( $context = 'view' ) {
98
+        $name = parent::get_name( $context );
99
+        return $name . wpinv_get_item_suffix( $this );
100
+    }
101
+
102
+    /**
103
+     * Get the item name without a suffix.
104
+     *
105
+     * @since 1.0.19
106
+     * @param  string $context View or edit context.
107
+     * @return string
108
+     */
109
+    public function get_raw_name( $context = 'view' ) {
110
+        return parent::get_name( $context );
111
+    }
112
+
113
+    /**
114
+     * Get the item description.
115
+     *
116
+     * @since 1.0.19
117
+     * @param  string $context View or edit context.
118
+     * @return string
119
+     */
120
+    public function get_description( $context = 'view' ) {
121
+
122
+        if ( isset( $this->custom_description ) ) {
123
+            return $this->custom_description;
124
+        }
125
+
126
+        return parent::get_description( $context );
127
+    }
128
+
129
+    /**
130
+     * Returns the sub total.
131
+     *
132
+     * @since 1.0.19
133
+     * @param  string $context View or edit context.
134
+     * @return float
135
+     */
136
+    public function get_sub_total( $context = 'view' ) {
137
+        return $this->get_quantity( $context ) * $this->get_initial_price( $context );
138
+    }
139
+
140
+    /**
141
+     * Returns the recurring sub total.
142
+     *
143
+     * @since 1.0.19
144
+     * @param  string $context View or edit context.
145
+     * @return float
146
+     */
147
+    public function get_recurring_sub_total( $context = 'view' ) {
148
+
149
+        if ( $this->is_recurring() ) {
150
+            return $this->get_quantity( $context ) * $this->get_price( $context );
151
+        }
152
+
153
+        return 0;
154
+    }
155
+
156
+    /**
157
+     * @deprecated
158
+     */
159
+    public function get_qantity( $context = 'view' ) {
160
+        return $this->get_quantity( $context );
161
+    }
162
+
163
+    /**
164
+     * Get the item quantity.
165
+     *
166
+     * @since 1.0.19
167
+     * @param  string $context View or edit context.
168
+     * @return float
169
+     */
170
+    public function get_quantity( $context = 'view' ) {
171
+        $quantity = (float) $this->quantity;
172
+
173
+        if ( 'view' == $context ) {
174
+            return apply_filters( 'getpaid_payment_form_item_quantity', $quantity, $this );
175
+        }
176
+
177
+        return $quantity;
178
+
179
+    }
180
+
181
+    /**
182
+     * Get the item meta data.
183
+     *
184
+     * @since 1.0.19
185
+     * @param  string $context View or edit context.
186
+     * @return meta
187
+     */
188
+    public function get_item_meta( $context = 'view' ) {
189
+        $meta = $this->meta;
190
+
191
+        if ( 'view' == $context ) {
192
+            return apply_filters( 'getpaid_payment_form_item_meta', $meta, $this );
193
+        }
194
+
195
+        return $meta;
196
+
197
+    }
198
+
199
+    /**
200
+     * Returns whether or not customers can update the item quantity.
201
+     *
202
+     * @since 1.0.19
203
+     * @param  string $context View or edit context.
204
+     * @return bool
205
+     */
206
+    public function get_allow_quantities( $context = 'view' ) {
207
+        $allow_quantities = (bool) $this->allow_quantities;
208
+
209
+        if ( 'view' == $context ) {
210
+            return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
211
+        }
212
+
213
+        return $allow_quantities;
214
+
215
+    }
216
+
217
+    /**
218
+     * Returns whether or not the item is required.
219
+     *
220
+     * @since 1.0.19
221
+     * @param  string $context View or edit context.
222
+     * @return bool
223
+     */
224
+    public function get_is_required( $context = 'view' ) {
225
+        $is_required = (bool) $this->is_required;
226
+
227
+        if ( 'view' == $context ) {
228
+            return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
229
+        }
230
+
231
+        return $is_required;
232
+
233
+    }
234
+
235
+    /**
236
+     * Prepares form data for use.
237
+     *
238
+     * @since 1.0.19
239
+     * @return array
240
+     */
241
+    public function prepare_data_for_use( $required = null ) {
242
+
243
+        $required = is_null( $required ) ? $this->is_required() : $required;
244
+        return array(
245
+            'title'            => strip_tags( $this->get_name() ),
246
+            'id'               => $this->get_id(),
247
+            'price'            => $this->get_price(),
248
+            'recurring'        => $this->is_recurring(),
249
+            'description'      => $this->get_description(),
250
+            'allow_quantities' => $this->allows_quantities(),
251
+            'required'         => $required,
252
+        );
253
+
254
+    }
255
+
256
+    /**
257
+     * Prepares form data for ajax use.
258
+     *
259
+     * @since 1.0.19
260
+     * @return array
261
+     */
262
+    public function prepare_data_for_invoice_edit_ajax( $currency = '', $is_renewal = false ) {
263
+
264
+        $description = getpaid_item_recurring_price_help_text( $this, $currency );
265
+
266
+        if ( $description ) {
267
+            $description = "<div class='getpaid-subscription-help-text'>$description</div>";
268
+        }
269
+
270
+        $price    = ! $is_renewal ? $this->get_price() : $this->get_recurring_price();
271
+        $subtotal = ! $is_renewal ? $this->get_sub_total() : $this->get_recurring_sub_total();
272
+        return array(
273
+            'id'     => $this->get_id(),
274
+            'texts'  => array(
275
+                'item-name'        => sanitize_text_field( $this->get_name() ),
276
+                'item-description' => wp_kses_post( $this->get_description() ) . $description,
277
+                'item-quantity'    => floatval( $this->get_quantity() ),
278
+                'item-price'       => wpinv_price( $price, $currency ),
279
+                'item-total'       => wpinv_price( $subtotal, $currency ),
280
+            ),
281
+            'inputs' => array(
282
+                'item-id'          => $this->get_id(),
283
+                'item-name'        => sanitize_text_field( $this->get_name() ),
284
+                'item-description' => wp_kses_post( $this->get_description() ),
285
+                'item-quantity'    => floatval( $this->get_quantity() ),
286
+                'item-price'       => $price,
287
+            )
288
+        );
289
+
290
+    }
291
+
292
+    /**
293
+     * Prepares form data for saving (cart_details).
294
+     *
295
+     * @since 1.0.19
296
+     * @return array
297
+     */
298
+    public function prepare_data_for_saving() {
299
+
300
+        return array(
301
+            'post_id'           => $this->invoice_id,
302
+            'item_id'           => $this->get_id(),
303
+            'item_name'         => sanitize_text_field( $this->get_raw_name( 'edit' ) ),
304
+            'item_description'  => $this->get_description( 'edit' ),
305
+            'tax'               => $this->item_tax,
306
+            'item_price'        => $this->get_price( 'edit' ),
307
+            'quantity'          => (float) $this->get_quantity( 'edit' ),
308
+            'discount'          => $this->item_discount,
309
+            'subtotal'          => $this->get_sub_total( 'edit' ),
310
+            'price'             => $this->get_sub_total( 'edit' ) + $this->item_tax - $this->item_discount,
311
+            'meta'              => $this->get_item_meta( 'edit' ),
312
+        );
313
+
314
+    }
315 315
 
316 316
     /*
317 317
 	|--------------------------------------------------------------------------
@@ -323,70 +323,70 @@  discard block
 block discarded – undo
323 323
 	| object.
324 324
     */
325 325
 
326
-	/**
327
-	 * Set the item qantity.
328
-	 *
329
-	 * @since 1.0.19
330
-	 * @param  float $quantity The item quantity.
331
-	 */
332
-	public function set_quantity( $quantity ) {
333
-
334
-		if ( ! is_numeric( $quantity ) ) {
335
-			$quantity = 1;
336
-		}
337
-
338
-		$this->quantity = (float) $quantity;
339
-
340
-	}
341
-
342
-	/**
343
-	 * Set the item meta data.
344
-	 *
345
-	 * @since 1.0.19
346
-	 * @param  array $meta The item meta data.
347
-	 */
348
-	public function set_item_meta( $meta ) {
349
-		$this->meta = maybe_unserialize( $meta );
350
-	}
351
-
352
-	/**
353
-	 * Set whether or not the quantities are allowed.
354
-	 *
355
-	 * @since 1.0.19
356
-	 * @param  bool $allow_quantities
357
-	 */
358
-	public function set_allow_quantities( $allow_quantities ) {
359
-		$this->allow_quantities = (bool) $allow_quantities;
360
-	}
361
-
362
-	/**
363
-	 * Set whether or not the item is required.
364
-	 *
365
-	 * @since 1.0.19
366
-	 * @param  bool $is_required
367
-	 */
368
-	public function set_is_required( $is_required ) {
369
-		$this->is_required = (bool) $is_required;
370
-	}
371
-
372
-	/**
373
-	 * Sets the custom item description.
374
-	 *
375
-	 * @since 1.0.19
376
-	 * @param  string $description
377
-	 */
378
-	public function set_custom_description( $description ) {
379
-		$this->custom_description = $description;
380
-	}
326
+    /**
327
+     * Set the item qantity.
328
+     *
329
+     * @since 1.0.19
330
+     * @param  float $quantity The item quantity.
331
+     */
332
+    public function set_quantity( $quantity ) {
333
+
334
+        if ( ! is_numeric( $quantity ) ) {
335
+            $quantity = 1;
336
+        }
337
+
338
+        $this->quantity = (float) $quantity;
339
+
340
+    }
341
+
342
+    /**
343
+     * Set the item meta data.
344
+     *
345
+     * @since 1.0.19
346
+     * @param  array $meta The item meta data.
347
+     */
348
+    public function set_item_meta( $meta ) {
349
+        $this->meta = maybe_unserialize( $meta );
350
+    }
351
+
352
+    /**
353
+     * Set whether or not the quantities are allowed.
354
+     *
355
+     * @since 1.0.19
356
+     * @param  bool $allow_quantities
357
+     */
358
+    public function set_allow_quantities( $allow_quantities ) {
359
+        $this->allow_quantities = (bool) $allow_quantities;
360
+    }
361
+
362
+    /**
363
+     * Set whether or not the item is required.
364
+     *
365
+     * @since 1.0.19
366
+     * @param  bool $is_required
367
+     */
368
+    public function set_is_required( $is_required ) {
369
+        $this->is_required = (bool) $is_required;
370
+    }
371
+
372
+    /**
373
+     * Sets the custom item description.
374
+     *
375
+     * @since 1.0.19
376
+     * @param  string $description
377
+     */
378
+    public function set_custom_description( $description ) {
379
+        $this->custom_description = $description;
380
+    }
381 381
 
382 382
     /**
383 383
      * We do not want to save items to the database.
384 384
      * 
385
-	 * @return int item id
385
+     * @return int item id
386 386
      */
387 387
     public function save( $data = array() ) {
388 388
         return $this->get_id();
389
-	}
389
+    }
390 390
 
391 391
     /*
392 392
 	|--------------------------------------------------------------------------
@@ -398,23 +398,23 @@  discard block
 block discarded – undo
398 398
 	*/
399 399
 
400 400
     /**
401
-	 * Checks whether the item has enabled dynamic pricing.
402
-	 *
403
-	 * @since 1.0.19
404
-	 * @return bool
405
-	 */
406
-	public function is_required() {
401
+     * Checks whether the item has enabled dynamic pricing.
402
+     *
403
+     * @since 1.0.19
404
+     * @return bool
405
+     */
406
+    public function is_required() {
407 407
         return (bool) $this->get_is_required();
408
-	}
409
-
410
-	/**
411
-	 * Checks whether users can edit the quantities.
412
-	 *
413
-	 * @since 1.0.19
414
-	 * @return bool
415
-	 */
416
-	public function allows_quantities() {
408
+    }
409
+
410
+    /**
411
+     * Checks whether users can edit the quantities.
412
+     *
413
+     * @since 1.0.19
414
+     * @return bool
415
+     */
416
+    public function allows_quantities() {
417 417
         return (bool) $this->get_allow_quantities();
418
-	}
418
+    }
419 419
 
420 420
 }
Please login to merge, or discard this patch.
templates/payment-forms/elements/file_upload.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -21,22 +21,22 @@
 block discarded – undo
21 21
 
22 22
 foreach ( $file_types as $file_type ) {
23 23
 
24
-	if ( isset( $all_types[ $file_type ] ) ) {
25
-		$types[]   = $all_types[ $file_type ];
26
-		$file_type = explode( '|', $file_type );
24
+    if ( isset( $all_types[ $file_type ] ) ) {
25
+        $types[]   = $all_types[ $file_type ];
26
+        $file_type = explode( '|', $file_type );
27 27
 
28
-		foreach ( $file_type as $type ) {
29
-			$type     = trim( $type );
30
-			$types[]  = ".$type";
31
-			$_types[] = $type;
32
-		}
28
+        foreach ( $file_type as $type ) {
29
+            $type     = trim( $type );
30
+            $types[]  = ".$type";
31
+            $_types[] = $type;
32
+        }
33 33
 
34
-	}
34
+    }
35 35
 
36 36
 }
37 37
 
38 38
 if ( ! empty( $required ) ) {
39
-	$label .= "<span class='text-danger'> *</span>";
39
+    $label .= "<span class='text-danger'> *</span>";
40 40
 }
41 41
 
42 42
 ?>
Please login to merge, or discard this patch.
includes/class-wpinv-ajax.php 1 patch
Indentation   +66 added lines, -66 removed lines patch added patch discarded remove patch
@@ -14,70 +14,70 @@  discard block
 block discarded – undo
14 14
 class WPInv_Ajax {
15 15
 
16 16
     /**
17
-	 * Hook in ajax handlers.
18
-	 */
19
-	public static function init() {
20
-		add_action( 'init', array( __CLASS__, 'define_ajax' ), 0 );
21
-		add_action( 'template_redirect', array( __CLASS__, 'do_wpinv_ajax' ), 0 );
22
-		self::add_ajax_events();
17
+     * Hook in ajax handlers.
18
+     */
19
+    public static function init() {
20
+        add_action( 'init', array( __CLASS__, 'define_ajax' ), 0 );
21
+        add_action( 'template_redirect', array( __CLASS__, 'do_wpinv_ajax' ), 0 );
22
+        self::add_ajax_events();
23 23
     }
24 24
 
25 25
     /**
26
-	 * Set GetPaid AJAX constant and headers.
27
-	 */
28
-	public static function define_ajax() {
29
-
30
-		if ( ! empty( $_GET['wpinv-ajax'] ) ) {
31
-			getpaid_maybe_define_constant( 'DOING_AJAX', true );
32
-			getpaid_maybe_define_constant( 'WPInv_DOING_AJAX', true );
33
-			if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) {
34
-				/** @scrutinizer ignore-unhandled */ @ini_set( 'display_errors', 0 );
35
-			}
36
-			$GLOBALS['wpdb']->hide_errors();
37
-		}
26
+     * Set GetPaid AJAX constant and headers.
27
+     */
28
+    public static function define_ajax() {
29
+
30
+        if ( ! empty( $_GET['wpinv-ajax'] ) ) {
31
+            getpaid_maybe_define_constant( 'DOING_AJAX', true );
32
+            getpaid_maybe_define_constant( 'WPInv_DOING_AJAX', true );
33
+            if ( ! WP_DEBUG || ( WP_DEBUG && ! WP_DEBUG_DISPLAY ) ) {
34
+                /** @scrutinizer ignore-unhandled */ @ini_set( 'display_errors', 0 );
35
+            }
36
+            $GLOBALS['wpdb']->hide_errors();
37
+        }
38 38
 
39 39
     }
40 40
     
41 41
     /**
42
-	 * Send headers for GetPaid Ajax Requests.
43
-	 *
44
-	 * @since 1.0.18
45
-	 */
46
-	private static function wpinv_ajax_headers() {
47
-		if ( ! headers_sent() ) {
48
-			send_origin_headers();
49
-			send_nosniff_header();
50
-			nocache_headers();
51
-			header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
52
-			header( 'X-Robots-Tag: noindex' );
53
-			status_header( 200 );
54
-		}
42
+     * Send headers for GetPaid Ajax Requests.
43
+     *
44
+     * @since 1.0.18
45
+     */
46
+    private static function wpinv_ajax_headers() {
47
+        if ( ! headers_sent() ) {
48
+            send_origin_headers();
49
+            send_nosniff_header();
50
+            nocache_headers();
51
+            header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
52
+            header( 'X-Robots-Tag: noindex' );
53
+            status_header( 200 );
54
+        }
55 55
     }
56 56
     
57 57
     /**
58
-	 * Check for GetPaid Ajax request and fire action.
59
-	 */
60
-	public static function do_wpinv_ajax() {
61
-		global $wp_query;
58
+     * Check for GetPaid Ajax request and fire action.
59
+     */
60
+    public static function do_wpinv_ajax() {
61
+        global $wp_query;
62 62
 
63
-		if ( ! empty( $_GET['wpinv-ajax'] ) ) {
64
-			$wp_query->set( 'wpinv-ajax', sanitize_text_field( wp_unslash( $_GET['wpinv-ajax'] ) ) );
65
-		}
63
+        if ( ! empty( $_GET['wpinv-ajax'] ) ) {
64
+            $wp_query->set( 'wpinv-ajax', sanitize_text_field( wp_unslash( $_GET['wpinv-ajax'] ) ) );
65
+        }
66 66
 
67
-		$action = $wp_query->get( 'wpinv-ajax' );
67
+        $action = $wp_query->get( 'wpinv-ajax' );
68 68
 
69
-		if ( $action ) {
70
-			self::wpinv_ajax_headers();
71
-			$action = sanitize_text_field( $action );
72
-			do_action( 'wpinv_ajax_' . $action );
73
-			wp_die();
74
-		}
69
+        if ( $action ) {
70
+            self::wpinv_ajax_headers();
71
+            $action = sanitize_text_field( $action );
72
+            do_action( 'wpinv_ajax_' . $action );
73
+            wp_die();
74
+        }
75 75
 
76 76
     }
77 77
 
78 78
     /**
79
-	 * Hook in ajax methods.
80
-	 */
79
+     * Hook in ajax methods.
80
+     */
81 81
     public static function add_ajax_events() {
82 82
 
83 83
         // array( 'event' => is_frontend )
@@ -261,18 +261,18 @@  discard block
 block discarded – undo
261 261
         check_ajax_referer( 'getpaid_form_nonce' );
262 262
 
263 263
         // Is the request set up correctly?
264
-		if ( empty( $_GET['form'] ) && empty( $_GET['item'] ) && empty( $_GET['invoice'] ) ) {
265
-			echo aui()->alert(
266
-				array(
267
-					'type'    => 'warning',
268
-					'content' => __( 'No payment form or item provided', 'invoicing' ),
269
-				)
264
+        if ( empty( $_GET['form'] ) && empty( $_GET['item'] ) && empty( $_GET['invoice'] ) ) {
265
+            echo aui()->alert(
266
+                array(
267
+                    'type'    => 'warning',
268
+                    'content' => __( 'No payment form or item provided', 'invoicing' ),
269
+                )
270 270
             );
271 271
             exit;
272 272
         }
273 273
 
274 274
         // Payment form or button?
275
-		if ( ! empty( $_GET['form'] ) ) {
275
+        if ( ! empty( $_GET['form'] ) ) {
276 276
             $form = urldecode( $_GET['form'] );
277 277
 
278 278
             if ( false !== strpos( $form, '|' ) ) {
@@ -326,11 +326,11 @@  discard block
 block discarded – undo
326 326
                 getpaid_display_payment_form( $form );
327 327
             }
328 328
 
329
-		} else if( ! empty( $_GET['invoice'] ) ) {
330
-		    getpaid_display_invoice_payment_form( urldecode( $_GET['invoice'] ) );
329
+        } else if( ! empty( $_GET['invoice'] ) ) {
330
+            getpaid_display_invoice_payment_form( urldecode( $_GET['invoice'] ) );
331 331
         } else {
332
-			$items = getpaid_convert_items_to_array( urldecode( $_GET['item'] ) );
333
-		    getpaid_display_item_payment_form( $items );
332
+            $items = getpaid_convert_items_to_array( urldecode( $_GET['item'] ) );
333
+            getpaid_display_item_payment_form( $items );
334 334
         }
335 335
 
336 336
         exit;
@@ -651,7 +651,7 @@  discard block
 block discarded – undo
651 651
         if ( is_wp_error( $error ) ) {
652 652
             $alert = $error->get_error_message();
653 653
             wp_send_json_success( compact( 'alert' ) );
654
-         }
654
+            }
655 655
 
656 656
         // Update totals.
657 657
         $invoice->recalculate_total();
@@ -1085,12 +1085,12 @@  discard block
 block discarded – undo
1085 1085
     }
1086 1086
 
1087 1087
     /**
1088
-	 * Handles file uploads.
1089
-	 *
1090
-	 * @since       1.0.0
1091
-	 * @return      void
1092
-	 */
1093
-	public static function file_upload() {
1088
+     * Handles file uploads.
1089
+     *
1090
+     * @since       1.0.0
1091
+     * @return      void
1092
+     */
1093
+    public static function file_upload() {
1094 1094
 
1095 1095
         // Check nonce.
1096 1096
         check_ajax_referer( 'getpaid_form_nonce' );
@@ -1151,7 +1151,7 @@  discard block
 block discarded – undo
1151 1151
 
1152 1152
         wp_send_json_success( $response );
1153 1153
 
1154
-	}
1154
+    }
1155 1155
 
1156 1156
 }
1157 1157
 
Please login to merge, or discard this patch.
includes/wpinv-helper-functions.php 1 patch
Indentation   +57 added lines, -57 removed lines patch added patch discarded remove patch
@@ -136,13 +136,13 @@  discard block
 block discarded – undo
136 136
  */
137 137
 function wpinv_get_invoice_statuses( $draft = false, $trashed = false, $invoice = false ) {
138 138
 
139
-	$invoice_statuses = array(
140
-		'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
139
+    $invoice_statuses = array(
140
+        'wpi-pending'    => _x( 'Pending payment', 'Invoice status', 'invoicing' ),
141 141
         'publish'        => _x( 'Paid', 'Invoice status', 'invoicing' ),
142 142
         'wpi-processing' => _x( 'Processing', 'Invoice status', 'invoicing' ),
143
-		'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
144
-		'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
145
-		'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
143
+        'wpi-onhold'     => _x( 'On hold', 'Invoice status', 'invoicing' ),
144
+        'wpi-cancelled'  => _x( 'Cancelled', 'Invoice status', 'invoicing' ),
145
+        'wpi-refunded'   => _x( 'Refunded', 'Invoice status', 'invoicing' ),
146 146
         'wpi-failed'     => _x( 'Failed', 'Invoice status', 'invoicing' ),
147 147
         'wpi-renewal'    => _x( 'Renewal Payment', 'Invoice status', 'invoicing' ),
148 148
     );
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
         $invoice = $invoice->get_post_type();
160 160
     }
161 161
 
162
-	return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
162
+    return apply_filters( 'wpinv_statuses', $invoice_statuses, $invoice );
163 163
 }
164 164
 
165 165
 /**
@@ -277,25 +277,25 @@  discard block
 block discarded – undo
277 277
  * @return string
278 278
  */
279 279
 function getpaid_get_price_format() {
280
-	$currency_pos = wpinv_currency_position();
281
-	$format       = '%1$s%2$s';
282
-
283
-	switch ( $currency_pos ) {
284
-		case 'left':
285
-			$format = '%1$s%2$s';
286
-			break;
287
-		case 'right':
288
-			$format = '%2$s%1$s';
289
-			break;
290
-		case 'left_space':
291
-			$format = '%1$s&nbsp;%2$s';
292
-			break;
293
-		case 'right_space':
294
-			$format = '%2$s&nbsp;%1$s';
295
-			break;
296
-	}
297
-
298
-	return apply_filters( 'getpaid_price_format', $format, $currency_pos );
280
+    $currency_pos = wpinv_currency_position();
281
+    $format       = '%1$s%2$s';
282
+
283
+    switch ( $currency_pos ) {
284
+        case 'left':
285
+            $format = '%1$s%2$s';
286
+            break;
287
+        case 'right':
288
+            $format = '%2$s%1$s';
289
+            break;
290
+        case 'left_space':
291
+            $format = '%1$s&nbsp;%2$s';
292
+            break;
293
+        case 'right_space':
294
+            $format = '%2$s&nbsp;%1$s';
295
+            break;
296
+    }
297
+
298
+    return apply_filters( 'getpaid_price_format', $format, $currency_pos );
299 299
 }
300 300
 
301 301
 /**
@@ -390,13 +390,13 @@  discard block
 block discarded – undo
390 390
  * @param mixed  $value Value.
391 391
  */
392 392
 function getpaid_maybe_define_constant( $name, $value ) {
393
-	if ( ! defined( $name ) ) {
394
-		define( $name, $value );
395
-	}
393
+    if ( ! defined( $name ) ) {
394
+        define( $name, $value );
395
+    }
396 396
 }
397 397
 
398 398
 function wpinv_get_php_arg_separator_output() {
399
-	return ini_get( 'arg_separator.output' );
399
+    return ini_get( 'arg_separator.output' );
400 400
 }
401 401
 
402 402
 function wpinv_rgb_from_hex( $color ) {
@@ -751,11 +751,11 @@  discard block
 block discarded – undo
751 751
         $list = array();
752 752
     }
753 753
 
754
-	if ( ! is_array( $list ) ) {
755
-		return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
756
-	}
754
+    if ( ! is_array( $list ) ) {
755
+        return preg_split( '/[\s,]+/', $list, -1, PREG_SPLIT_NO_EMPTY );
756
+    }
757 757
 
758
-	return $list;
758
+    return $list;
759 759
 }
760 760
 
761 761
 /**
@@ -775,9 +775,9 @@  discard block
 block discarded – undo
775 775
     }
776 776
 
777 777
     $data = apply_filters( "wpinv_get_$key", include WPINV_PLUGIN_DIR . "includes/data/$key.php" );
778
-	wp_cache_set( "wpinv-data-$key", $data, 'wpinv' );
778
+    wp_cache_set( "wpinv-data-$key", $data, 'wpinv' );
779 779
 
780
-	return $data;
780
+    return $data;
781 781
 }
782 782
 
783 783
 /**
@@ -806,17 +806,17 @@  discard block
 block discarded – undo
806 806
  */
807 807
 function wpinv_clean( $var ) {
808 808
 
809
-	if ( is_array( $var ) ) {
810
-		return array_map( 'wpinv_clean', $var );
809
+    if ( is_array( $var ) ) {
810
+        return array_map( 'wpinv_clean', $var );
811 811
     }
812 812
 
813 813
     if ( is_object( $var ) ) {
814
-		$object_vars = get_object_vars( $var );
815
-		foreach ( $object_vars as $property_name => $property_value ) {
816
-			$var->$property_name = wpinv_clean( $property_value );
814
+        $object_vars = get_object_vars( $var );
815
+        foreach ( $object_vars as $property_name => $property_value ) {
816
+            $var->$property_name = wpinv_clean( $property_value );
817 817
         }
818 818
         return $var;
819
-	}
819
+    }
820 820
 
821 821
     return is_string( $var ) ? sanitize_text_field( stripslashes( $var ) ) : $var;
822 822
 }
@@ -829,7 +829,7 @@  discard block
 block discarded – undo
829 829
  */
830 830
 function getpaid_convert_price_string_to_options( $str ) {
831 831
 
832
-	$raw_options = array_map( 'trim', explode( ',', $str ) );
832
+    $raw_options = array_map( 'trim', explode( ',', $str ) );
833 833
     $options     = array();
834 834
 
835 835
     foreach ( $raw_options as $option ) {
@@ -912,7 +912,7 @@  discard block
 block discarded – undo
912 912
  * @return string
913 913
  */
914 914
 function getpaid_date_format() {
915
-	return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
915
+    return apply_filters( 'getpaid_date_format', get_option( 'date_format' ) );
916 916
 }
917 917
 
918 918
 /**
@@ -921,7 +921,7 @@  discard block
 block discarded – undo
921 921
  * @return string
922 922
  */
923 923
 function getpaid_time_format() {
924
-	return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
924
+    return apply_filters( 'getpaid_time_format', get_option( 'time_format' ) );
925 925
 }
926 926
 
927 927
 /**
@@ -934,15 +934,15 @@  discard block
 block discarded – undo
934 934
 function getpaid_limit_length( $string, $limit ) {
935 935
     $str_limit = $limit - 3;
936 936
 
937
-	if ( function_exists( 'mb_strimwidth' ) ) {
938
-		if ( mb_strlen( $string ) > $limit ) {
939
-			$string = mb_strimwidth( $string, 0, $str_limit ) . '...';
940
-		}
941
-	} else {
942
-		if ( strlen( $string ) > $limit ) {
943
-			$string = substr( $string, 0, $str_limit ) . '...';
944
-		}
945
-	}
937
+    if ( function_exists( 'mb_strimwidth' ) ) {
938
+        if ( mb_strlen( $string ) > $limit ) {
939
+            $string = mb_strimwidth( $string, 0, $str_limit ) . '...';
940
+        }
941
+    } else {
942
+        if ( strlen( $string ) > $limit ) {
943
+            $string = substr( $string, 0, $str_limit ) . '...';
944
+        }
945
+    }
946 946
     return $string;
947 947
 
948 948
 }
@@ -1073,12 +1073,12 @@  discard block
 block discarded – undo
1073 1073
     $types = get_allowed_mime_types();
1074 1074
 
1075 1075
     if ( isset( $types['htm|html'] ) ) {
1076
-		unset( $types['htm|html'] );
1077
-	}
1076
+        unset( $types['htm|html'] );
1077
+    }
1078 1078
 
1079 1079
     if ( isset( $types['js'] ) ) {
1080
-		unset( $types['js'] );
1081
-	}
1080
+        unset( $types['js'] );
1081
+    }
1082 1082
 
1083 1083
     return $types;
1084 1084
 
Please login to merge, or discard this patch.