Passed
Push — master ( 69e6d2...8b22fd )
by Brian
04:39
created
includes/subscription-functions.php 1 patch
Indentation   +321 added lines, -321 removed lines patch added patch discarded remove patch
@@ -50,7 +50,7 @@  discard block
 block discarded – undo
50 50
  */
51 51
 function getpaid_get_invoice_subscription_group( $invoice_id, $subscription_id ) {
52 52
     $subscription_groups = getpaid_get_invoice_subscription_groups( $invoice_id );
53
-	$matching_group      = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
53
+    $matching_group      = wp_list_filter( $subscription_groups, compact( 'subscription_id' ) );
54 54
     return reset( $matching_group );
55 55
 }
56 56
 
@@ -63,11 +63,11 @@  discard block
 block discarded – undo
63 63
  */
64 64
 function getpaid_get_subscription( $subscription ) {
65 65
 
66
-	if ( ! is_a( $subscription, 'WPInv_Subscription' ) ) {
67
-		$subscription = new WPInv_Subscription( $subscription );
68
-	}
66
+    if ( ! is_a( $subscription, 'WPInv_Subscription' ) ) {
67
+        $subscription = new WPInv_Subscription( $subscription );
68
+    }
69 69
 
70
-	return $subscription->exists() ? $subscription : false;
70
+    return $subscription->exists() ? $subscription : false;
71 71
 }
72 72
 
73 73
 /**
@@ -81,28 +81,28 @@  discard block
 block discarded – undo
81 81
  */
82 82
 function getpaid_get_subscriptions( $args = array(), $return = 'results' ) {
83 83
 
84
-	// Do not retrieve all fields if we just want the count.
85
-	if ( 'count' == $return ) {
86
-		$args['fields'] = 'id';
87
-		$args['number'] = 1;
88
-	}
84
+    // Do not retrieve all fields if we just want the count.
85
+    if ( 'count' == $return ) {
86
+        $args['fields'] = 'id';
87
+        $args['number'] = 1;
88
+    }
89 89
 
90
-	// Do not count all matches if we just want the results.
91
-	if ( 'results' == $return ) {
92
-		$args['count_total'] = false;
93
-	}
90
+    // Do not count all matches if we just want the results.
91
+    if ( 'results' == $return ) {
92
+        $args['count_total'] = false;
93
+    }
94 94
 
95
-	$query = new GetPaid_Subscriptions_Query( $args );
95
+    $query = new GetPaid_Subscriptions_Query( $args );
96 96
 
97
-	if ( 'results' == $return ) {
98
-		return $query->get_results();
99
-	}
97
+    if ( 'results' == $return ) {
98
+        return $query->get_results();
99
+    }
100 100
 
101
-	if ( 'count' == $return ) {
102
-		return $query->get_total();
103
-	}
101
+    if ( 'count' == $return ) {
102
+        return $query->get_total();
103
+    }
104 104
 
105
-	return $query;
105
+    return $query;
106 106
 }
107 107
 
108 108
 /**
@@ -112,18 +112,18 @@  discard block
 block discarded – undo
112 112
  */
113 113
 function getpaid_get_subscription_statuses() {
114 114
 
115
-	return apply_filters(
116
-		'getpaid_get_subscription_statuses',
117
-		array(
118
-			'pending'   => __( 'Pending', 'invoicing' ),
119
-			'trialling' => __( 'Trialing', 'invoicing' ),
120
-			'active'    => __( 'Active', 'invoicing' ),
121
-			'failing'   => __( 'Failing', 'invoicing' ),
122
-			'expired'   => __( 'Expired', 'invoicing' ),
123
-			'completed' => __( 'Complete', 'invoicing' ),
124
-			'cancelled' => __( 'Cancelled', 'invoicing' ),
125
-		)
126
-	);
115
+    return apply_filters(
116
+        'getpaid_get_subscription_statuses',
117
+        array(
118
+            'pending'   => __( 'Pending', 'invoicing' ),
119
+            'trialling' => __( 'Trialing', 'invoicing' ),
120
+            'active'    => __( 'Active', 'invoicing' ),
121
+            'failing'   => __( 'Failing', 'invoicing' ),
122
+            'expired'   => __( 'Expired', 'invoicing' ),
123
+            'completed' => __( 'Complete', 'invoicing' ),
124
+            'cancelled' => __( 'Cancelled', 'invoicing' ),
125
+        )
126
+    );
127 127
 
128 128
 }
129 129
 
@@ -133,8 +133,8 @@  discard block
 block discarded – undo
133 133
  * @return string
134 134
  */
135 135
 function getpaid_get_subscription_status_label( $status ) {
136
-	$statuses = getpaid_get_subscription_statuses();
137
-	return isset( $statuses[ $status ] ) ? $statuses[ $status ] : ucfirst( sanitize_text_field( $status ) );
136
+    $statuses = getpaid_get_subscription_statuses();
137
+    return isset( $statuses[ $status ] ) ? $statuses[ $status ] : ucfirst( sanitize_text_field( $status ) );
138 138
 }
139 139
 
140 140
 /**
@@ -144,18 +144,18 @@  discard block
 block discarded – undo
144 144
  */
145 145
 function getpaid_get_subscription_status_classes() {
146 146
 
147
-	return apply_filters(
148
-		'getpaid_get_subscription_status_classes',
149
-		array(
150
-			'pending'   => 'badge-dark',
151
-			'trialling' => 'badge-info',
152
-			'active'    => 'badge-success',
153
-			'failing'   => 'badge-warning',
154
-			'expired'   => 'badge-danger',
155
-			'completed' => 'badge-primary',
156
-			'cancelled' => 'badge-secondary',
157
-		)
158
-	);
147
+    return apply_filters(
148
+        'getpaid_get_subscription_status_classes',
149
+        array(
150
+            'pending'   => 'badge-dark',
151
+            'trialling' => 'badge-info',
152
+            'active'    => 'badge-success',
153
+            'failing'   => 'badge-warning',
154
+            'expired'   => 'badge-danger',
155
+            'completed' => 'badge-primary',
156
+            'cancelled' => 'badge-secondary',
157
+        )
158
+    );
159 159
 
160 160
 }
161 161
 
@@ -166,15 +166,15 @@  discard block
 block discarded – undo
166 166
  */
167 167
 function getpaid_get_subscription_status_counts( $args = array() ) {
168 168
 
169
-	$statuses = array_keys( getpaid_get_subscription_statuses() );
170
-	$counts   = array();
169
+    $statuses = array_keys( getpaid_get_subscription_statuses() );
170
+    $counts   = array();
171 171
 
172
-	foreach ( $statuses as $status ) {
173
-		$_args             = wp_parse_args( "status=$status", $args );
174
-		$counts[ $status ] = getpaid_get_subscriptions( $_args, 'count' );
175
-	}
172
+    foreach ( $statuses as $status ) {
173
+        $_args             = wp_parse_args( "status=$status", $args );
174
+        $counts[ $status ] = getpaid_get_subscriptions( $_args, 'count' );
175
+    }
176 176
 
177
-	return $counts;
177
+    return $counts;
178 178
 
179 179
 }
180 180
 
@@ -185,32 +185,32 @@  discard block
 block discarded – undo
185 185
  */
186 186
 function getpaid_get_subscription_periods() {
187 187
 
188
-	return apply_filters(
189
-		'getpaid_get_subscription_periods',
190
-		array(
188
+    return apply_filters(
189
+        'getpaid_get_subscription_periods',
190
+        array(
191 191
 
192
-			'day'   => array(
193
-				'singular' => __( '%s day', 'invoicing' ),
194
-				'plural'   => __( '%d days', 'invoicing' ),
195
-			),
192
+            'day'   => array(
193
+                'singular' => __( '%s day', 'invoicing' ),
194
+                'plural'   => __( '%d days', 'invoicing' ),
195
+            ),
196 196
 
197
-			'week'  => array(
198
-				'singular' => __( '%s week', 'invoicing' ),
199
-				'plural'   => __( '%d weeks', 'invoicing' ),
200
-			),
197
+            'week'  => array(
198
+                'singular' => __( '%s week', 'invoicing' ),
199
+                'plural'   => __( '%d weeks', 'invoicing' ),
200
+            ),
201 201
 
202
-			'month' => array(
203
-				'singular' => __( '%s month', 'invoicing' ),
204
-				'plural'   => __( '%d months', 'invoicing' ),
205
-			),
202
+            'month' => array(
203
+                'singular' => __( '%s month', 'invoicing' ),
204
+                'plural'   => __( '%d months', 'invoicing' ),
205
+            ),
206 206
 
207
-			'year'  => array(
208
-				'singular' => __( '%s year', 'invoicing' ),
209
-				'plural'   => __( '%d years', 'invoicing' ),
210
-			),
207
+            'year'  => array(
208
+                'singular' => __( '%s year', 'invoicing' ),
209
+                'plural'   => __( '%d years', 'invoicing' ),
210
+            ),
211 211
 
212
-		)
213
-	);
212
+        )
213
+    );
214 214
 
215 215
 }
216 216
 
@@ -221,7 +221,7 @@  discard block
 block discarded – undo
221 221
  * @return int
222 222
  */
223 223
 function getpaid_get_subscription_trial_period_interval( $trial_period ) {
224
-	return (int) preg_replace( '/[^0-9]/', '', $trial_period );
224
+    return (int) preg_replace( '/[^0-9]/', '', $trial_period );
225 225
 }
226 226
 
227 227
 /**
@@ -231,7 +231,7 @@  discard block
 block discarded – undo
231 231
  * @return string
232 232
  */
233 233
 function getpaid_get_subscription_trial_period_period( $trial_period ) {
234
-	return preg_replace( '/[^a-z]/', '', strtolower( $trial_period ) );
234
+    return preg_replace( '/[^a-z]/', '', strtolower( $trial_period ) );
235 235
 }
236 236
 
237 237
 /**
@@ -242,8 +242,8 @@  discard block
 block discarded – undo
242 242
  * @return string
243 243
  */
244 244
 function getpaid_get_subscription_period_label( $period, $interval = 1, $singular_prefix = '1' ) {
245
-	$label = (int) $interval > 1 ? getpaid_get_plural_subscription_period_label( $period, $interval ) : getpaid_get_singular_subscription_period_label( $period, $singular_prefix );
246
-	return strtolower( sanitize_text_field( $label ) );
245
+    $label = (int) $interval > 1 ? getpaid_get_plural_subscription_period_label( $period, $interval ) : getpaid_get_singular_subscription_period_label( $period, $singular_prefix );
246
+    return strtolower( sanitize_text_field( $label ) );
247 247
 }
248 248
 
249 249
 /**
@@ -254,22 +254,22 @@  discard block
 block discarded – undo
254 254
  */
255 255
 function getpaid_get_singular_subscription_period_label( $period, $singular_prefix = '1' ) {
256 256
 
257
-	$periods = getpaid_get_subscription_periods();
258
-	$period  = strtolower( $period );
257
+    $periods = getpaid_get_subscription_periods();
258
+    $period  = strtolower( $period );
259 259
 
260
-	if ( isset( $periods[ $period ] ) ) {
261
-		return sprintf( $periods[ $period ]['singular'], $singular_prefix );
262
-	}
260
+    if ( isset( $periods[ $period ] ) ) {
261
+        return sprintf( $periods[ $period ]['singular'], $singular_prefix );
262
+    }
263 263
 
264
-	// Backwards compatibility.
265
-	foreach ( $periods as $key => $data ) {
266
-		if ( strpos( $key, $period ) === 0 ) {
267
-			return sprintf( $data['singular'], $singular_prefix );
268
-		}
269
-	}
264
+    // Backwards compatibility.
265
+    foreach ( $periods as $key => $data ) {
266
+        if ( strpos( $key, $period ) === 0 ) {
267
+            return sprintf( $data['singular'], $singular_prefix );
268
+        }
269
+    }
270 270
 
271
-	// Invalid string.
272
-	return '';
271
+    // Invalid string.
272
+    return '';
273 273
 }
274 274
 
275 275
 /**
@@ -281,22 +281,22 @@  discard block
 block discarded – undo
281 281
  */
282 282
 function getpaid_get_plural_subscription_period_label( $period, $interval ) {
283 283
 
284
-	$periods = getpaid_get_subscription_periods();
285
-	$period  = strtolower( $period );
284
+    $periods = getpaid_get_subscription_periods();
285
+    $period  = strtolower( $period );
286 286
 
287
-	if ( isset( $periods[ $period ] ) ) {
288
-		return sprintf( $periods[ $period ]['plural'], $interval );
289
-	}
287
+    if ( isset( $periods[ $period ] ) ) {
288
+        return sprintf( $periods[ $period ]['plural'], $interval );
289
+    }
290 290
 
291
-	// Backwards compatibility.
292
-	foreach ( $periods as $key => $data ) {
293
-		if ( strpos( $key, $period ) === 0 ) {
294
-			return sprintf( $data['plural'], $interval );
295
-		}
296
-	}
291
+    // Backwards compatibility.
292
+    foreach ( $periods as $key => $data ) {
293
+        if ( strpos( $key, $period ) === 0 ) {
294
+            return sprintf( $data['plural'], $interval );
295
+        }
296
+    }
297 297
 
298
-	// Invalid string.
299
-	return '';
298
+    // Invalid string.
299
+    return '';
300 300
 }
301 301
 
302 302
 /**
@@ -307,90 +307,90 @@  discard block
 block discarded – undo
307 307
  */
308 308
 function getpaid_get_formatted_subscription_amount( $subscription ) {
309 309
 
310
-	$initial    = wpinv_price( $subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency() );
311
-	$recurring  = wpinv_price( $subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency() );
312
-	$period     = getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' );
313
-	$bill_times = $subscription->get_bill_times();
314
-
315
-	if ( ! empty( $bill_times ) ) {
316
-		$bill_times = $subscription->get_frequency() * $bill_times;
317
-		$bill_times = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times );
318
-	}
319
-
320
-	// Trial periods.
321
-	if ( $subscription->has_trial_period() ) {
322
-
323
-		$trial_period   = getpaid_get_subscription_trial_period_period( $subscription->get_trial_period() );
324
-		$trial_interval = getpaid_get_subscription_trial_period_interval( $subscription->get_trial_period() );
325
-
326
-		if ( empty( $bill_times ) ) {
327
-
328
-			return sprintf(
329
-				// translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period
330
-				_x( '%1$s trial for %2$s then %3$s / %4$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year)', 'invoicing' ),
331
-				$initial,
332
-				getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
333
-				$recurring,
334
-				$period
335
-			);
336
-
337
-		}
338
-
339
-		return sprintf(
340
-			// translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period, $5: is the bill times
341
-			_x( '%1$s trial for %2$s then %3$s / %4$s for %5$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year for 4 years)', 'invoicing' ),
342
-			$initial,
343
-			getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
344
-			$recurring,
345
-			$period,
346
-			$bill_times
347
-		);
348
-
349
-	}
350
-
351
-	if ( $initial != $recurring ) {
352
-
353
-		if ( empty( $bill_times ) ) {
354
-
355
-			return sprintf(
356
-				// translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period
357
-				_x( 'Initial payment of %1$s which renews at %2$s / %3$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year)', 'invoicing' ),
358
-				$initial,
359
-				$recurring,
360
-				$period
361
-			);
362
-
363
-		}
364
-
365
-		return sprintf(
366
-			// translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period, $4: is the bill times
367
-			_x( 'Initial payment of %1$s which renews at %2$s / %3$s for %4$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year for 5 years)', 'invoicing' ),
368
-			$initial,
369
-			$recurring,
370
-			$period,
371
-			$bill_times
372
-		);
373
-
374
-	}
375
-
376
-	if ( empty( $bill_times ) ) {
377
-
378
-		return sprintf(
379
-			// translators: $1: is the recurring amount, $2: is the recurring period
380
-			_x( '%1$s / %2$s', 'Subscription amount. (e.g.: $120 / year)', 'invoicing' ),
381
-			$initial,
382
-			$period
383
-		);
384
-
385
-	}
386
-
387
-	return sprintf(
388
-		// translators: $1: is the bill times, $2: is the recurring amount, $3: is the recurring period
389
-		_x( '%2$s / %3$s for %1$s', 'Subscription amount. (e.g.: $120 / year for 5 years)', 'invoicing' ),
390
-		$bill_times,
391
-		$initial,
392
-		$period
393
-	);
310
+    $initial    = wpinv_price( $subscription->get_initial_amount(), $subscription->get_parent_payment()->get_currency() );
311
+    $recurring  = wpinv_price( $subscription->get_recurring_amount(), $subscription->get_parent_payment()->get_currency() );
312
+    $period     = getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' );
313
+    $bill_times = $subscription->get_bill_times();
314
+
315
+    if ( ! empty( $bill_times ) ) {
316
+        $bill_times = $subscription->get_frequency() * $bill_times;
317
+        $bill_times = getpaid_get_subscription_period_label( $subscription->get_period(), $bill_times );
318
+    }
319
+
320
+    // Trial periods.
321
+    if ( $subscription->has_trial_period() ) {
322
+
323
+        $trial_period   = getpaid_get_subscription_trial_period_period( $subscription->get_trial_period() );
324
+        $trial_interval = getpaid_get_subscription_trial_period_interval( $subscription->get_trial_period() );
325
+
326
+        if ( empty( $bill_times ) ) {
327
+
328
+            return sprintf(
329
+                // translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period
330
+                _x( '%1$s trial for %2$s then %3$s / %4$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year)', 'invoicing' ),
331
+                $initial,
332
+                getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
333
+                $recurring,
334
+                $period
335
+            );
336
+
337
+        }
338
+
339
+        return sprintf(
340
+            // translators: $1: is the initial amount, $2: is the trial period, $3: is the recurring amount, $4: is the recurring period, $5: is the bill times
341
+            _x( '%1$s trial for %2$s then %3$s / %4$s for %5$s', 'Subscription amount. (e.g.: $10 trial for 1 month then $120 / year for 4 years)', 'invoicing' ),
342
+            $initial,
343
+            getpaid_get_subscription_period_label( $trial_period, $trial_interval ),
344
+            $recurring,
345
+            $period,
346
+            $bill_times
347
+        );
348
+
349
+    }
350
+
351
+    if ( $initial != $recurring ) {
352
+
353
+        if ( empty( $bill_times ) ) {
354
+
355
+            return sprintf(
356
+                // translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period
357
+                _x( 'Initial payment of %1$s which renews at %2$s / %3$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year)', 'invoicing' ),
358
+                $initial,
359
+                $recurring,
360
+                $period
361
+            );
362
+
363
+        }
364
+
365
+        return sprintf(
366
+            // translators: $1: is the initial amount, $2: is the recurring amount, $3: is the recurring period, $4: is the bill times
367
+            _x( 'Initial payment of %1$s which renews at %2$s / %3$s for %4$s', 'Subscription amount. (e.g.:Initial payment of $100 which renews at $120 / year for 5 years)', 'invoicing' ),
368
+            $initial,
369
+            $recurring,
370
+            $period,
371
+            $bill_times
372
+        );
373
+
374
+    }
375
+
376
+    if ( empty( $bill_times ) ) {
377
+
378
+        return sprintf(
379
+            // translators: $1: is the recurring amount, $2: is the recurring period
380
+            _x( '%1$s / %2$s', 'Subscription amount. (e.g.: $120 / year)', 'invoicing' ),
381
+            $initial,
382
+            $period
383
+        );
384
+
385
+    }
386
+
387
+    return sprintf(
388
+        // translators: $1: is the bill times, $2: is the recurring amount, $3: is the recurring period
389
+        _x( '%2$s / %3$s for %1$s', 'Subscription amount. (e.g.: $120 / year for 5 years)', 'invoicing' ),
390
+        $bill_times,
391
+        $initial,
392
+        $period
393
+    );
394 394
 
395 395
 }
396 396
 
@@ -401,7 +401,7 @@  discard block
 block discarded – undo
401 401
  * @return WPInv_Subscription|false
402 402
  */
403 403
 function getpaid_get_invoice_subscription( $invoice ) {
404
-	return getpaid_subscriptions()->get_invoice_subscription( $invoice );
404
+    return getpaid_subscriptions()->get_invoice_subscription( $invoice );
405 405
 }
406 406
 
407 407
 /**
@@ -410,10 +410,10 @@  discard block
 block discarded – undo
410 410
  * @param WPInv_Invoice $invoice
411 411
  */
412 412
 function getpaid_activate_invoice_subscription( $invoice ) {
413
-	$subscription = getpaid_get_invoice_subscription( $invoice );
414
-	if ( is_a( $subscription, 'WPInv_Subscription' ) ) {
415
-		$subscription->activate();
416
-	}
413
+    $subscription = getpaid_get_invoice_subscription( $invoice );
414
+    if ( is_a( $subscription, 'WPInv_Subscription' ) ) {
415
+        $subscription->activate();
416
+    }
417 417
 }
418 418
 
419 419
 /**
@@ -422,7 +422,7 @@  discard block
 block discarded – undo
422 422
  * @return WPInv_Subscriptions
423 423
  */
424 424
 function getpaid_subscriptions() {
425
-	return getpaid()->get( 'subscriptions' );
425
+    return getpaid()->get( 'subscriptions' );
426 426
 }
427 427
 
428 428
 /**
@@ -441,15 +441,15 @@  discard block
 block discarded – undo
441 441
         return false;
442 442
     }
443 443
 
444
-	// Fetch the invoice subscription.
445
-	$subscription = getpaid_get_subscriptions(
446
-		array(
447
-			'invoice_in' => $invoice->is_renewal() ? $invoice->get_parent_id() : $invoice->get_id(),
448
-			'number'     => 1,
449
-		)
450
-	);
444
+    // Fetch the invoice subscription.
445
+    $subscription = getpaid_get_subscriptions(
446
+        array(
447
+            'invoice_in' => $invoice->is_renewal() ? $invoice->get_parent_id() : $invoice->get_id(),
448
+            'number'     => 1,
449
+        )
450
+    );
451 451
 
452
-	return empty( $subscription ) ? false : $subscription[0];
452
+    return empty( $subscription ) ? false : $subscription[0];
453 453
 
454 454
 }
455 455
 
@@ -466,48 +466,48 @@  discard block
 block discarded – undo
466 466
  */
467 467
 function getpaid_get_recurring_item_key( $cart_item ) {
468 468
 
469
-	$cart_key     = 'renews_';
470
-	$interval     = $cart_item->get_recurring_interval();
471
-	$period       = $cart_item->get_recurring_period( true );
472
-	$length       = $cart_item->get_recurring_limit() * $interval;
473
-	$trial_period = $cart_item->get_trial_period( true );
474
-	$trial_length = $cart_item->get_trial_interval();
475
-
476
-	// First start with the billing interval and period
477
-	switch ( $interval ) {
478
-		case 1:
479
-			if ( 'day' == $period ) {
480
-				$cart_key .= 'daily';
481
-			} else {
482
-				$cart_key .= sprintf( '%sly', $period );
483
-			}
484
-			break;
485
-		case 2:
486
-			$cart_key .= sprintf( 'every_2nd_%s', $period );
487
-			break;
488
-		case 3:
489
-			$cart_key .= sprintf( 'every_3rd_%s', $period );
490
-		    break;
491
-		default:
492
-			$cart_key .= sprintf( 'every_%dth_%s', $interval, $period );
493
-			break;
494
-	}
495
-
496
-	// Maybe add the optional maximum billing periods...
497
-	if ( $length > 0 ) {
498
-		$cart_key .= '_for_';
499
-		$cart_key .= sprintf( '%d_%s', $length, $period );
500
-		if ( $length > 1 ) {
501
-			$cart_key .= 's';
502
-		}
503
-	}
504
-
505
-	// And an optional free trial.
506
-	if ( $cart_item->has_free_trial() ) {
507
-		$cart_key .= sprintf( '_after_a_%d_%s_trial', $trial_length, $trial_period );
508
-	}
509
-
510
-	return apply_filters( 'getpaid_get_recurring_item_key', $cart_key, $cart_item );
469
+    $cart_key     = 'renews_';
470
+    $interval     = $cart_item->get_recurring_interval();
471
+    $period       = $cart_item->get_recurring_period( true );
472
+    $length       = $cart_item->get_recurring_limit() * $interval;
473
+    $trial_period = $cart_item->get_trial_period( true );
474
+    $trial_length = $cart_item->get_trial_interval();
475
+
476
+    // First start with the billing interval and period
477
+    switch ( $interval ) {
478
+        case 1:
479
+            if ( 'day' == $period ) {
480
+                $cart_key .= 'daily';
481
+            } else {
482
+                $cart_key .= sprintf( '%sly', $period );
483
+            }
484
+            break;
485
+        case 2:
486
+            $cart_key .= sprintf( 'every_2nd_%s', $period );
487
+            break;
488
+        case 3:
489
+            $cart_key .= sprintf( 'every_3rd_%s', $period );
490
+            break;
491
+        default:
492
+            $cart_key .= sprintf( 'every_%dth_%s', $interval, $period );
493
+            break;
494
+    }
495
+
496
+    // Maybe add the optional maximum billing periods...
497
+    if ( $length > 0 ) {
498
+        $cart_key .= '_for_';
499
+        $cart_key .= sprintf( '%d_%s', $length, $period );
500
+        if ( $length > 1 ) {
501
+            $cart_key .= 's';
502
+        }
503
+    }
504
+
505
+    // And an optional free trial.
506
+    if ( $cart_item->has_free_trial() ) {
507
+        $cart_key .= sprintf( '_after_a_%d_%s_trial', $trial_length, $trial_period );
508
+    }
509
+
510
+    return apply_filters( 'getpaid_get_recurring_item_key', $cart_key, $cart_item );
511 511
 }
512 512
 
513 513
 /**
@@ -518,16 +518,16 @@  discard block
 block discarded – undo
518 518
  */
519 519
 function getpaid_get_subscription_groups( $invoice ) {
520 520
 
521
-	// Generate subscription groups.
522
-	$subscription_groups = array();
523
-	foreach ( $invoice->get_items() as $item ) {
521
+    // Generate subscription groups.
522
+    $subscription_groups = array();
523
+    foreach ( $invoice->get_items() as $item ) {
524 524
 
525
-		if ( $item->is_recurring() ) {
526
-			$subscription_groups[ getpaid_get_recurring_item_key( $item ) ][] = $item;
527
-		}
525
+        if ( $item->is_recurring() ) {
526
+            $subscription_groups[ getpaid_get_recurring_item_key( $item ) ][] = $item;
527
+        }
528 528
 }
529 529
 
530
-	return $subscription_groups;
530
+    return $subscription_groups;
531 531
 }
532 532
 
533 533
 /**
@@ -541,56 +541,56 @@  discard block
 block discarded – undo
541 541
  */
542 542
 function getpaid_calculate_subscription_totals( $invoice ) {
543 543
 
544
-	// Generate subscription groups.
545
-	$subscription_groups = getpaid_get_subscription_groups( $invoice );
544
+    // Generate subscription groups.
545
+    $subscription_groups = getpaid_get_subscription_groups( $invoice );
546 546
 
547
-	// Now let's calculate the totals for each group of subscriptions
548
-	$subscription_totals = array();
547
+    // Now let's calculate the totals for each group of subscriptions
548
+    $subscription_totals = array();
549 549
 
550
-	foreach ( $subscription_groups as $subscription_key => $items ) {
550
+    foreach ( $subscription_groups as $subscription_key => $items ) {
551 551
 
552
-		if ( empty( $subscription_totals[ $subscription_key ] ) ) {
552
+        if ( empty( $subscription_totals[ $subscription_key ] ) ) {
553 553
 
554
-			$subscription_totals[ $subscription_key ] = array(
555
-				'initial_total'   => 0,
556
-				'recurring_total' => 0,
557
-				'items'           => array(),
558
-				'trialling'       => false,
559
-			);
554
+            $subscription_totals[ $subscription_key ] = array(
555
+                'initial_total'   => 0,
556
+                'recurring_total' => 0,
557
+                'items'           => array(),
558
+                'trialling'       => false,
559
+            );
560 560
 
561
-		}
561
+        }
562 562
 
563
-		/**
564
-		 * Get the totals of the group.
565
-		 * @var GetPaid_Form_Item $item
566
-		 */
567
-		foreach ( $items as $item ) {
563
+        /**
564
+         * Get the totals of the group.
565
+         * @var GetPaid_Form_Item $item
566
+         */
567
+        foreach ( $items as $item ) {
568 568
 
569
-			$subscription_totals[ $subscription_key ]['items'][ $item->get_id() ]  = $item->prepare_data_for_saving();
570
-			$subscription_totals[ $subscription_key ]['item_id']                 = $item->get_id();
571
-			$subscription_totals[ $subscription_key ]['period']                  = $item->get_recurring_period( true );
572
-			$subscription_totals[ $subscription_key ]['interval']                = $item->get_recurring_interval();
573
-			$subscription_totals[ $subscription_key ]['initial_total']          += $item->get_sub_total() + $item->item_tax - $item->item_discount;
574
-			$subscription_totals[ $subscription_key ]['recurring_total']        += $item->get_recurring_sub_total() + $item->item_tax - $item->recurring_item_discount;
575
-			$subscription_totals[ $subscription_key ]['recurring_limit']         = $item->get_recurring_limit();
569
+            $subscription_totals[ $subscription_key ]['items'][ $item->get_id() ]  = $item->prepare_data_for_saving();
570
+            $subscription_totals[ $subscription_key ]['item_id']                 = $item->get_id();
571
+            $subscription_totals[ $subscription_key ]['period']                  = $item->get_recurring_period( true );
572
+            $subscription_totals[ $subscription_key ]['interval']                = $item->get_recurring_interval();
573
+            $subscription_totals[ $subscription_key ]['initial_total']          += $item->get_sub_total() + $item->item_tax - $item->item_discount;
574
+            $subscription_totals[ $subscription_key ]['recurring_total']        += $item->get_recurring_sub_total() + $item->item_tax - $item->recurring_item_discount;
575
+            $subscription_totals[ $subscription_key ]['recurring_limit']         = $item->get_recurring_limit();
576 576
 
577
-			// Calculate the next renewal date.
578
-			$period       = $item->get_recurring_period( true );
579
-			$interval     = $item->get_recurring_interval();
577
+            // Calculate the next renewal date.
578
+            $period       = $item->get_recurring_period( true );
579
+            $interval     = $item->get_recurring_interval();
580 580
 
581
-			// If the subscription item has a trial period...
582
-			if ( $item->has_free_trial() ) {
583
-				$period   = $item->get_trial_period( true );
584
-				$interval = $item->get_trial_interval();
585
-				$subscription_totals[ $subscription_key ]['trialling'] = $interval . ' ' . $period;
586
-			}
581
+            // If the subscription item has a trial period...
582
+            if ( $item->has_free_trial() ) {
583
+                $period   = $item->get_trial_period( true );
584
+                $interval = $item->get_trial_interval();
585
+                $subscription_totals[ $subscription_key ]['trialling'] = $interval . ' ' . $period;
586
+            }
587 587
 
588
-			$subscription_totals[ $subscription_key ]['renews_on'] = date( 'Y-m-d H:i:s', strtotime( "+$interval $period", current_time( 'timestamp' ) ) );
588
+            $subscription_totals[ $subscription_key ]['renews_on'] = date( 'Y-m-d H:i:s', strtotime( "+$interval $period", current_time( 'timestamp' ) ) );
589 589
 
590
-		}
590
+        }
591 591
 }
592 592
 
593
-	return apply_filters( 'getpaid_calculate_subscription_totals', $subscription_totals, $invoice );
593
+    return apply_filters( 'getpaid_calculate_subscription_totals', $subscription_totals, $invoice );
594 594
 }
595 595
 
596 596
 /**
@@ -601,16 +601,16 @@  discard block
 block discarded – undo
601 601
  */
602 602
 function getpaid_should_group_subscriptions( $invoice ) {
603 603
 
604
-	$recurring_items = 0;
604
+    $recurring_items = 0;
605 605
 
606
-	foreach ( $invoice->get_items() as $item ) {
606
+    foreach ( $invoice->get_items() as $item ) {
607 607
 
608
-		if ( $item->is_recurring() ) {
609
-			$recurring_items ++;
610
-		}
608
+        if ( $item->is_recurring() ) {
609
+            $recurring_items ++;
610
+        }
611 611
 }
612 612
 
613
-	return apply_filters( 'getpaid_should_group_subscriptions', $recurring_items > 1, $invoice );
613
+    return apply_filters( 'getpaid_should_group_subscriptions', $recurring_items > 1, $invoice );
614 614
 }
615 615
 
616 616
 /**
@@ -621,39 +621,39 @@  discard block
 block discarded – undo
621 621
  * @return int
622 622
  */
623 623
 function getpaid_count_subscription_invoices( $parent_invoice_id, $subscription_id = false ) {
624
-	global $wpdb;
624
+    global $wpdb;
625 625
 
626
-	$parent_invoice_id = (int) $parent_invoice_id;
626
+    $parent_invoice_id = (int) $parent_invoice_id;
627 627
 
628
-	if ( false === $subscription_id || ! (bool) get_post_meta( $parent_invoice_id, '_wpinv_subscription_id', true ) ) {
628
+    if ( false === $subscription_id || ! (bool) get_post_meta( $parent_invoice_id, '_wpinv_subscription_id', true ) ) {
629 629
 
630
-		return (int) $wpdb->get_var(
631
-			$wpdb->prepare(
632
-				"SELECT COUNT(ID) FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
633
-				$parent_invoice_id,
634
-				$parent_invoice_id
635
-			)
636
-		);
630
+        return (int) $wpdb->get_var(
631
+            $wpdb->prepare(
632
+                "SELECT COUNT(ID) FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
633
+                $parent_invoice_id,
634
+                $parent_invoice_id
635
+            )
636
+        );
637 637
 
638
-	}
638
+    }
639 639
 
640
-	$invoice_ids = $wpdb->get_col(
641
-		$wpdb->prepare(
642
-			"SELECT ID FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
643
-			$parent_invoice_id,
644
-			$parent_invoice_id
645
-		)
646
-	);
640
+    $invoice_ids = $wpdb->get_col(
641
+        $wpdb->prepare(
642
+            "SELECT ID FROM $wpdb->posts WHERE ( post_parent=%d OR ID=%d ) AND post_status IN ( 'publish', 'wpi-processing', 'wpi-renewal' )",
643
+            $parent_invoice_id,
644
+            $parent_invoice_id
645
+        )
646
+    );
647 647
 
648
-	$count = 0;
648
+    $count = 0;
649 649
 
650
-	foreach ( wp_parse_id_list( $invoice_ids ) as $invoice_id ) {
650
+    foreach ( wp_parse_id_list( $invoice_ids ) as $invoice_id ) {
651 651
 
652
-		if ( $invoice_id == $parent_invoice_id || $subscription_id == (int) get_post_meta( $invoice_id, '_wpinv_subscription_id', true ) ) {
653
-			$count ++;
654
-			continue;
655
-		}
652
+        if ( $invoice_id == $parent_invoice_id || $subscription_id == (int) get_post_meta( $invoice_id, '_wpinv_subscription_id', true ) ) {
653
+            $count ++;
654
+            continue;
655
+        }
656 656
 }
657 657
 
658
-	return $count;
658
+    return $count;
659 659
 }
Please login to merge, or discard this patch.
includes/class-wpinv-subscriptions.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -12,8 +12,8 @@  discard block
 block discarded – undo
12 12
 class WPInv_Subscriptions {
13 13
 
14 14
     /**
15
-	 * Class constructor.
16
-	 */
15
+     * Class constructor.
16
+     */
17 17
     public function __construct() {
18 18
 
19 19
         // Fire gateway specific hooks when a subscription changes.
@@ -89,12 +89,12 @@  discard block
 block discarded – undo
89 89
     }
90 90
 
91 91
     /**
92
-	 * Processes subscription status changes.
92
+     * Processes subscription status changes.
93 93
      *
94 94
      * @param WPInv_Subscription $subscription
95 95
      * @param string $from
96 96
      * @param string $to
97
-	 */
97
+     */
98 98
     public function process_subscription_status_change( $subscription, $from, $to ) {
99 99
 
100 100
         $gateway = $subscription->get_gateway();
Please login to merge, or discard this patch.
includes/wpinv-gateway-functions.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -271,26 +271,26 @@  discard block
 block discarded – undo
271 271
 }
272 272
 
273 273
 function wpinv_get_chosen_gateway( $invoice_id = 0 ) {
274
-	$gateways = array_keys( wpinv_get_enabled_payment_gateways() );
274
+    $gateways = array_keys( wpinv_get_enabled_payment_gateways() );
275 275
 
276 276
     $chosen = false;
277 277
     if ( $invoice_id > 0 && $invoice = wpinv_get_invoice( $invoice_id ) ) {
278 278
         $chosen = $invoice->get_gateway();
279 279
     }
280 280
 
281
-	$chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
281
+    $chosen   = isset( $_REQUEST['payment-mode'] ) ? sanitize_text_field( $_REQUEST['payment-mode'] ) : $chosen;
282 282
 
283
-	if ( false !== $chosen ) {
284
-		$chosen = preg_replace( '/[^a-zA-Z0-9-_]+/', '', $chosen );
285
-	}
283
+    if ( false !== $chosen ) {
284
+        $chosen = preg_replace( '/[^a-zA-Z0-9-_]+/', '', $chosen );
285
+    }
286 286
 
287
-	if ( ! empty( $chosen ) ) {
288
-		$enabled_gateway = urldecode( $chosen );
289
-	} elseif ( ! empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
290
-		$enabled_gateway = 'manual';
291
-	} else {
292
-		$enabled_gateway = wpinv_get_default_gateway();
293
-	}
287
+    if ( ! empty( $chosen ) ) {
288
+        $enabled_gateway = urldecode( $chosen );
289
+    } elseif ( ! empty( $invoice ) && (float)$invoice->get_subtotal() <= 0 ) {
290
+        $enabled_gateway = 'manual';
291
+    } else {
292
+        $enabled_gateway = wpinv_get_default_gateway();
293
+    }
294 294
 
295 295
     if ( ! wpinv_is_gateway_active( $enabled_gateway ) && ! empty( $gateways ) ) {
296 296
         if ( wpinv_is_gateway_active( wpinv_get_default_gateway() ) ) {
@@ -300,7 +300,7 @@  discard block
 block discarded – undo
300 300
         }
301 301
 }
302 302
 
303
-	return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
303
+    return apply_filters( 'wpinv_chosen_gateway', $enabled_gateway );
304 304
 }
305 305
 
306 306
 function wpinv_record_gateway_error( $title = '', $message = '' ) {
@@ -308,22 +308,22 @@  discard block
 block discarded – undo
308 308
 }
309 309
 
310 310
 function wpinv_count_sales_by_gateway( $gateway_id = 'paypal', $status = 'publish' ) {
311
-	$ret  = 0;
312
-	$args = array(
313
-		'meta_key'    => '_wpinv_gateway',
314
-		'meta_value'  => $gateway_id,
315
-		'nopaging'    => true,
316
-		'post_type'   => 'wpi_invoice',
317
-		'post_status' => $status,
318
-		'fields'      => 'ids',
319
-	);
320
-
321
-	$payments = new WP_Query( $args );
322
-
323
-	if ( $payments ) {
324
-		$ret = $payments->post_count;
311
+    $ret  = 0;
312
+    $args = array(
313
+        'meta_key'    => '_wpinv_gateway',
314
+        'meta_value'  => $gateway_id,
315
+        'nopaging'    => true,
316
+        'post_type'   => 'wpi_invoice',
317
+        'post_status' => $status,
318
+        'fields'      => 'ids',
319
+    );
320
+
321
+    $payments = new WP_Query( $args );
322
+
323
+    if ( $payments ) {
324
+        $ret = $payments->post_count;
325 325
     }
326
-	return $ret;
326
+    return $ret;
327 327
 }
328 328
 
329 329
 /**
Please login to merge, or discard this patch.
includes/data/countries.php 1 patch
Indentation   +252 added lines, -252 removed lines patch added patch discarded remove patch
@@ -12,256 +12,256 @@
 block discarded – undo
12 12
 defined( 'ABSPATH' ) || exit;
13 13
 
14 14
 return array(
15
-	'US' => __( 'United States', 'invoicing' ),
16
-	'CA' => __( 'Canada', 'invoicing' ),
17
-	'GB' => __( 'United Kingdom', 'invoicing' ),
18
-	'AF' => __( 'Afghanistan', 'invoicing' ),
19
-	'AX' => __( 'Aland Islands', 'invoicing' ),
20
-	'AL' => __( 'Albania', 'invoicing' ),
21
-	'DZ' => __( 'Algeria', 'invoicing' ),
22
-	'AS' => __( 'American Samoa', 'invoicing' ),
23
-	'AD' => __( 'Andorra', 'invoicing' ),
24
-	'AO' => __( 'Angola', 'invoicing' ),
25
-	'AI' => __( 'Anguilla', 'invoicing' ),
26
-	'AQ' => __( 'Antarctica', 'invoicing' ),
27
-	'AG' => __( 'Antigua and Barbuda', 'invoicing' ),
28
-	'AR' => __( 'Argentina', 'invoicing' ),
29
-	'AM' => __( 'Armenia', 'invoicing' ),
30
-	'AW' => __( 'Aruba', 'invoicing' ),
31
-	'AU' => __( 'Australia', 'invoicing' ),
32
-	'AT' => __( 'Austria', 'invoicing' ),
33
-	'AZ' => __( 'Azerbaijan', 'invoicing' ),
34
-	'BS' => __( 'Bahamas', 'invoicing' ),
35
-	'BH' => __( 'Bahrain', 'invoicing' ),
36
-	'BD' => __( 'Bangladesh', 'invoicing' ),
37
-	'BB' => __( 'Barbados', 'invoicing' ),
38
-	'BY' => __( 'Belarus', 'invoicing' ),
39
-	'BE' => __( 'Belgium', 'invoicing' ),
40
-	'BZ' => __( 'Belize', 'invoicing' ),
41
-	'BJ' => __( 'Benin', 'invoicing' ),
42
-	'BM' => __( 'Bermuda', 'invoicing' ),
43
-	'BT' => __( 'Bhutan', 'invoicing' ),
44
-	'BO' => __( 'Bolivia', 'invoicing' ),
45
-	'BQ' => __( 'Bonaire, Saint Eustatius and Saba', 'invoicing' ),
46
-	'BA' => __( 'Bosnia and Herzegovina', 'invoicing' ),
47
-	'BW' => __( 'Botswana', 'invoicing' ),
48
-	'BV' => __( 'Bouvet Island', 'invoicing' ),
49
-	'BR' => __( 'Brazil', 'invoicing' ),
50
-	'IO' => __( 'British Indian Ocean Territory', 'invoicing' ),
51
-	'BN' => __( 'Brunei Darrussalam', 'invoicing' ),
52
-	'BG' => __( 'Bulgaria', 'invoicing' ),
53
-	'BF' => __( 'Burkina Faso', 'invoicing' ),
54
-	'BI' => __( 'Burundi', 'invoicing' ),
55
-	'KH' => __( 'Cambodia', 'invoicing' ),
56
-	'CM' => __( 'Cameroon', 'invoicing' ),
57
-	'CV' => __( 'Cape Verde', 'invoicing' ),
58
-	'KY' => __( 'Cayman Islands', 'invoicing' ),
59
-	'CF' => __( 'Central African Republic', 'invoicing' ),
60
-	'TD' => __( 'Chad', 'invoicing' ),
61
-	'CL' => __( 'Chile', 'invoicing' ),
62
-	'CN' => __( 'China', 'invoicing' ),
63
-	'CX' => __( 'Christmas Island', 'invoicing' ),
64
-	'CC' => __( 'Cocos Islands', 'invoicing' ),
65
-	'CO' => __( 'Colombia', 'invoicing' ),
66
-	'KM' => __( 'Comoros', 'invoicing' ),
67
-	'CD' => __( 'Congo, Democratic People\'s Republic', 'invoicing' ),
68
-	'CG' => __( 'Congo, Republic of', 'invoicing' ),
69
-	'CK' => __( 'Cook Islands', 'invoicing' ),
70
-	'CR' => __( 'Costa Rica', 'invoicing' ),
71
-	'CI' => __( 'Cote d\'Ivoire', 'invoicing' ),
72
-	'HR' => __( 'Croatia/Hrvatska', 'invoicing' ),
73
-	'CU' => __( 'Cuba', 'invoicing' ),
74
-	'CW' => __( 'Cura&Ccedil;ao', 'invoicing' ),
75
-	'CY' => __( 'Cyprus', 'invoicing' ),
76
-	'CZ' => __( 'Czech Republic', 'invoicing' ),
77
-	'DK' => __( 'Denmark', 'invoicing' ),
78
-	'DJ' => __( 'Djibouti', 'invoicing' ),
79
-	'DM' => __( 'Dominica', 'invoicing' ),
80
-	'DO' => __( 'Dominican Republic', 'invoicing' ),
81
-	'TP' => __( 'East Timor', 'invoicing' ),
82
-	'EC' => __( 'Ecuador', 'invoicing' ),
83
-	'EG' => __( 'Egypt', 'invoicing' ),
84
-	'GQ' => __( 'Equatorial Guinea', 'invoicing' ),
85
-	'SV' => __( 'El Salvador', 'invoicing' ),
86
-	'ER' => __( 'Eritrea', 'invoicing' ),
87
-	'EE' => __( 'Estonia', 'invoicing' ),
88
-	'ET' => __( 'Ethiopia', 'invoicing' ),
89
-	'FK' => __( 'Falkland Islands', 'invoicing' ),
90
-	'FO' => __( 'Faroe Islands', 'invoicing' ),
91
-	'FJ' => __( 'Fiji', 'invoicing' ),
92
-	'FI' => __( 'Finland', 'invoicing' ),
93
-	'FR' => __( 'France', 'invoicing' ),
94
-	'GF' => __( 'French Guiana', 'invoicing' ),
95
-	'PF' => __( 'French Polynesia', 'invoicing' ),
96
-	'TF' => __( 'French Southern Territories', 'invoicing' ),
97
-	'GA' => __( 'Gabon', 'invoicing' ),
98
-	'GM' => __( 'Gambia', 'invoicing' ),
99
-	'GE' => __( 'Georgia', 'invoicing' ),
100
-	'DE' => __( 'Germany', 'invoicing' ),
101
-	'GR' => __( 'Greece', 'invoicing' ),
102
-	'GH' => __( 'Ghana', 'invoicing' ),
103
-	'GI' => __( 'Gibraltar', 'invoicing' ),
104
-	'GL' => __( 'Greenland', 'invoicing' ),
105
-	'GD' => __( 'Grenada', 'invoicing' ),
106
-	'GP' => __( 'Guadeloupe', 'invoicing' ),
107
-	'GU' => __( 'Guam', 'invoicing' ),
108
-	'GT' => __( 'Guatemala', 'invoicing' ),
109
-	'GG' => __( 'Guernsey', 'invoicing' ),
110
-	'GN' => __( 'Guinea', 'invoicing' ),
111
-	'GW' => __( 'Guinea-Bissau', 'invoicing' ),
112
-	'GY' => __( 'Guyana', 'invoicing' ),
113
-	'HT' => __( 'Haiti', 'invoicing' ),
114
-	'HM' => __( 'Heard and McDonald Islands', 'invoicing' ),
115
-	'VA' => __( 'Holy See (City Vatican State)', 'invoicing' ),
116
-	'HN' => __( 'Honduras', 'invoicing' ),
117
-	'HK' => __( 'Hong Kong', 'invoicing' ),
118
-	'HU' => __( 'Hungary', 'invoicing' ),
119
-	'IS' => __( 'Iceland', 'invoicing' ),
120
-	'IN' => __( 'India', 'invoicing' ),
121
-	'ID' => __( 'Indonesia', 'invoicing' ),
122
-	'IR' => __( 'Iran', 'invoicing' ),
123
-	'IQ' => __( 'Iraq', 'invoicing' ),
124
-	'IE' => __( 'Ireland', 'invoicing' ),
125
-	'IM' => __( 'Isle of Man', 'invoicing' ),
126
-	'IL' => __( 'Israel', 'invoicing' ),
127
-	'IT' => __( 'Italy', 'invoicing' ),
128
-	'JM' => __( 'Jamaica', 'invoicing' ),
129
-	'JP' => __( 'Japan', 'invoicing' ),
130
-	'JE' => __( 'Jersey', 'invoicing' ),
131
-	'JO' => __( 'Jordan', 'invoicing' ),
132
-	'KZ' => __( 'Kazakhstan', 'invoicing' ),
133
-	'KE' => __( 'Kenya', 'invoicing' ),
134
-	'KI' => __( 'Kiribati', 'invoicing' ),
135
-	'KW' => __( 'Kuwait', 'invoicing' ),
136
-	'KG' => __( 'Kyrgyzstan', 'invoicing' ),
137
-	'LA' => __( 'Lao People\'s Democratic Republic', 'invoicing' ),
138
-	'LV' => __( 'Latvia', 'invoicing' ),
139
-	'LB' => __( 'Lebanon', 'invoicing' ),
140
-	'LS' => __( 'Lesotho', 'invoicing' ),
141
-	'LR' => __( 'Liberia', 'invoicing' ),
142
-	'LY' => __( 'Libyan Arab Jamahiriya', 'invoicing' ),
143
-	'LI' => __( 'Liechtenstein', 'invoicing' ),
144
-	'LT' => __( 'Lithuania', 'invoicing' ),
145
-	'LU' => __( 'Luxembourg', 'invoicing' ),
146
-	'MO' => __( 'Macau', 'invoicing' ),
147
-	'MK' => __( 'Macedonia', 'invoicing' ),
148
-	'MG' => __( 'Madagascar', 'invoicing' ),
149
-	'MW' => __( 'Malawi', 'invoicing' ),
150
-	'MY' => __( 'Malaysia', 'invoicing' ),
151
-	'MV' => __( 'Maldives', 'invoicing' ),
152
-	'ML' => __( 'Mali', 'invoicing' ),
153
-	'MT' => __( 'Malta', 'invoicing' ),
154
-	'MH' => __( 'Marshall Islands', 'invoicing' ),
155
-	'MQ' => __( 'Martinique', 'invoicing' ),
156
-	'MR' => __( 'Mauritania', 'invoicing' ),
157
-	'MU' => __( 'Mauritius', 'invoicing' ),
158
-	'YT' => __( 'Mayotte', 'invoicing' ),
159
-	'MX' => __( 'Mexico', 'invoicing' ),
160
-	'FM' => __( 'Micronesia', 'invoicing' ),
161
-	'MD' => __( 'Moldova, Republic of', 'invoicing' ),
162
-	'MC' => __( 'Monaco', 'invoicing' ),
163
-	'MN' => __( 'Mongolia', 'invoicing' ),
164
-	'ME' => __( 'Montenegro', 'invoicing' ),
165
-	'MS' => __( 'Montserrat', 'invoicing' ),
166
-	'MA' => __( 'Morocco', 'invoicing' ),
167
-	'MZ' => __( 'Mozambique', 'invoicing' ),
168
-	'MM' => __( 'Myanmar', 'invoicing' ),
169
-	'NA' => __( 'Namibia', 'invoicing' ),
170
-	'NR' => __( 'Nauru', 'invoicing' ),
171
-	'NP' => __( 'Nepal', 'invoicing' ),
172
-	'NL' => __( 'Netherlands', 'invoicing' ),
173
-	'AN' => __( 'Netherlands Antilles', 'invoicing' ),
174
-	'NC' => __( 'New Caledonia', 'invoicing' ),
175
-	'NZ' => __( 'New Zealand', 'invoicing' ),
176
-	'NI' => __( 'Nicaragua', 'invoicing' ),
177
-	'NE' => __( 'Niger', 'invoicing' ),
178
-	'NG' => __( 'Nigeria', 'invoicing' ),
179
-	'NU' => __( 'Niue', 'invoicing' ),
180
-	'NF' => __( 'Norfolk Island', 'invoicing' ),
181
-	'KP' => __( 'North Korea', 'invoicing' ),
182
-	'MP' => __( 'Northern Mariana Islands', 'invoicing' ),
183
-	'NO' => __( 'Norway', 'invoicing' ),
184
-	'OM' => __( 'Oman', 'invoicing' ),
185
-	'PK' => __( 'Pakistan', 'invoicing' ),
186
-	'PW' => __( 'Palau', 'invoicing' ),
187
-	'PS' => __( 'Palestinian Territories', 'invoicing' ),
188
-	'PA' => __( 'Panama', 'invoicing' ),
189
-	'PG' => __( 'Papua New Guinea', 'invoicing' ),
190
-	'PY' => __( 'Paraguay', 'invoicing' ),
191
-	'PE' => __( 'Peru', 'invoicing' ),
192
-	'PH' => __( 'Philippines', 'invoicing' ),
193
-	'PN' => __( 'Pitcairn Island', 'invoicing' ),
194
-	'PL' => __( 'Poland', 'invoicing' ),
195
-	'PT' => __( 'Portugal', 'invoicing' ),
196
-	'PR' => __( 'Puerto Rico', 'invoicing' ),
197
-	'QA' => __( 'Qatar', 'invoicing' ),
198
-	'XK' => __( 'Republic of Kosovo', 'invoicing' ),
199
-	'RE' => __( 'Reunion Island', 'invoicing' ),
200
-	'RO' => __( 'Romania', 'invoicing' ),
201
-	'RU' => __( 'Russian Federation', 'invoicing' ),
202
-	'RW' => __( 'Rwanda', 'invoicing' ),
203
-	'BL' => __( 'Saint Barth&eacute;lemy', 'invoicing' ),
204
-	'SH' => __( 'Saint Helena', 'invoicing' ),
205
-	'KN' => __( 'Saint Kitts and Nevis', 'invoicing' ),
206
-	'LC' => __( 'Saint Lucia', 'invoicing' ),
207
-	'MF' => __( 'Saint Martin (French)', 'invoicing' ),
208
-	'SX' => __( 'Saint Martin (Dutch)', 'invoicing' ),
209
-	'PM' => __( 'Saint Pierre and Miquelon', 'invoicing' ),
210
-	'VC' => __( 'Saint Vincent and the Grenadines', 'invoicing' ),
211
-	'SM' => __( 'San Marino', 'invoicing' ),
212
-	'ST' => __( 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'invoicing' ),
213
-	'SA' => __( 'Saudi Arabia', 'invoicing' ),
214
-	'SN' => __( 'Senegal', 'invoicing' ),
215
-	'RS' => __( 'Serbia', 'invoicing' ),
216
-	'SC' => __( 'Seychelles', 'invoicing' ),
217
-	'SL' => __( 'Sierra Leone', 'invoicing' ),
218
-	'SG' => __( 'Singapore', 'invoicing' ),
219
-	'SK' => __( 'Slovak Republic', 'invoicing' ),
220
-	'SI' => __( 'Slovenia', 'invoicing' ),
221
-	'SB' => __( 'Solomon Islands', 'invoicing' ),
222
-	'SO' => __( 'Somalia', 'invoicing' ),
223
-	'ZA' => __( 'South Africa', 'invoicing' ),
224
-	'GS' => __( 'South Georgia', 'invoicing' ),
225
-	'KR' => __( 'South Korea', 'invoicing' ),
226
-	'SS' => __( 'South Sudan', 'invoicing' ),
227
-	'ES' => __( 'Spain', 'invoicing' ),
228
-	'LK' => __( 'Sri Lanka', 'invoicing' ),
229
-	'SD' => __( 'Sudan', 'invoicing' ),
230
-	'SR' => __( 'Suriname', 'invoicing' ),
231
-	'SJ' => __( 'Svalbard and Jan Mayen Islands', 'invoicing' ),
232
-	'SZ' => __( 'Swaziland', 'invoicing' ),
233
-	'SE' => __( 'Sweden', 'invoicing' ),
234
-	'CH' => __( 'Switzerland', 'invoicing' ),
235
-	'SY' => __( 'Syrian Arab Republic', 'invoicing' ),
236
-	'TW' => __( 'Taiwan', 'invoicing' ),
237
-	'TJ' => __( 'Tajikistan', 'invoicing' ),
238
-	'TZ' => __( 'Tanzania', 'invoicing' ),
239
-	'TH' => __( 'Thailand', 'invoicing' ),
240
-	'TL' => __( 'Timor-Leste', 'invoicing' ),
241
-	'TG' => __( 'Togo', 'invoicing' ),
242
-	'TK' => __( 'Tokelau', 'invoicing' ),
243
-	'TO' => __( 'Tonga', 'invoicing' ),
244
-	'TT' => __( 'Trinidad and Tobago', 'invoicing' ),
245
-	'TN' => __( 'Tunisia', 'invoicing' ),
246
-	'TR' => __( 'Turkey', 'invoicing' ),
247
-	'TM' => __( 'Turkmenistan', 'invoicing' ),
248
-	'TC' => __( 'Turks and Caicos Islands', 'invoicing' ),
249
-	'TV' => __( 'Tuvalu', 'invoicing' ),
250
-	'UG' => __( 'Uganda', 'invoicing' ),
251
-	'UA' => __( 'Ukraine', 'invoicing' ),
252
-	'AE' => __( 'United Arab Emirates', 'invoicing' ),
253
-	'UY' => __( 'Uruguay', 'invoicing' ),
254
-	'UM' => __( 'US Minor Outlying Islands', 'invoicing' ),
255
-	'UZ' => __( 'Uzbekistan', 'invoicing' ),
256
-	'VU' => __( 'Vanuatu', 'invoicing' ),
257
-	'VE' => __( 'Venezuela', 'invoicing' ),
258
-	'VN' => __( 'Vietnam', 'invoicing' ),
259
-	'VG' => __( 'Virgin Islands (British)', 'invoicing' ),
260
-	'VI' => __( 'Virgin Islands (USA)', 'invoicing' ),
261
-	'WF' => __( 'Wallis and Futuna Islands', 'invoicing' ),
262
-	'EH' => __( 'Western Sahara', 'invoicing' ),
263
-	'WS' => __( 'Western Samoa', 'invoicing' ),
264
-	'YE' => __( 'Yemen', 'invoicing' ),
265
-	'ZM' => __( 'Zambia', 'invoicing' ),
266
-	'ZW' => __( 'Zimbabwe', 'invoicing' ),
15
+    'US' => __( 'United States', 'invoicing' ),
16
+    'CA' => __( 'Canada', 'invoicing' ),
17
+    'GB' => __( 'United Kingdom', 'invoicing' ),
18
+    'AF' => __( 'Afghanistan', 'invoicing' ),
19
+    'AX' => __( 'Aland Islands', 'invoicing' ),
20
+    'AL' => __( 'Albania', 'invoicing' ),
21
+    'DZ' => __( 'Algeria', 'invoicing' ),
22
+    'AS' => __( 'American Samoa', 'invoicing' ),
23
+    'AD' => __( 'Andorra', 'invoicing' ),
24
+    'AO' => __( 'Angola', 'invoicing' ),
25
+    'AI' => __( 'Anguilla', 'invoicing' ),
26
+    'AQ' => __( 'Antarctica', 'invoicing' ),
27
+    'AG' => __( 'Antigua and Barbuda', 'invoicing' ),
28
+    'AR' => __( 'Argentina', 'invoicing' ),
29
+    'AM' => __( 'Armenia', 'invoicing' ),
30
+    'AW' => __( 'Aruba', 'invoicing' ),
31
+    'AU' => __( 'Australia', 'invoicing' ),
32
+    'AT' => __( 'Austria', 'invoicing' ),
33
+    'AZ' => __( 'Azerbaijan', 'invoicing' ),
34
+    'BS' => __( 'Bahamas', 'invoicing' ),
35
+    'BH' => __( 'Bahrain', 'invoicing' ),
36
+    'BD' => __( 'Bangladesh', 'invoicing' ),
37
+    'BB' => __( 'Barbados', 'invoicing' ),
38
+    'BY' => __( 'Belarus', 'invoicing' ),
39
+    'BE' => __( 'Belgium', 'invoicing' ),
40
+    'BZ' => __( 'Belize', 'invoicing' ),
41
+    'BJ' => __( 'Benin', 'invoicing' ),
42
+    'BM' => __( 'Bermuda', 'invoicing' ),
43
+    'BT' => __( 'Bhutan', 'invoicing' ),
44
+    'BO' => __( 'Bolivia', 'invoicing' ),
45
+    'BQ' => __( 'Bonaire, Saint Eustatius and Saba', 'invoicing' ),
46
+    'BA' => __( 'Bosnia and Herzegovina', 'invoicing' ),
47
+    'BW' => __( 'Botswana', 'invoicing' ),
48
+    'BV' => __( 'Bouvet Island', 'invoicing' ),
49
+    'BR' => __( 'Brazil', 'invoicing' ),
50
+    'IO' => __( 'British Indian Ocean Territory', 'invoicing' ),
51
+    'BN' => __( 'Brunei Darrussalam', 'invoicing' ),
52
+    'BG' => __( 'Bulgaria', 'invoicing' ),
53
+    'BF' => __( 'Burkina Faso', 'invoicing' ),
54
+    'BI' => __( 'Burundi', 'invoicing' ),
55
+    'KH' => __( 'Cambodia', 'invoicing' ),
56
+    'CM' => __( 'Cameroon', 'invoicing' ),
57
+    'CV' => __( 'Cape Verde', 'invoicing' ),
58
+    'KY' => __( 'Cayman Islands', 'invoicing' ),
59
+    'CF' => __( 'Central African Republic', 'invoicing' ),
60
+    'TD' => __( 'Chad', 'invoicing' ),
61
+    'CL' => __( 'Chile', 'invoicing' ),
62
+    'CN' => __( 'China', 'invoicing' ),
63
+    'CX' => __( 'Christmas Island', 'invoicing' ),
64
+    'CC' => __( 'Cocos Islands', 'invoicing' ),
65
+    'CO' => __( 'Colombia', 'invoicing' ),
66
+    'KM' => __( 'Comoros', 'invoicing' ),
67
+    'CD' => __( 'Congo, Democratic People\'s Republic', 'invoicing' ),
68
+    'CG' => __( 'Congo, Republic of', 'invoicing' ),
69
+    'CK' => __( 'Cook Islands', 'invoicing' ),
70
+    'CR' => __( 'Costa Rica', 'invoicing' ),
71
+    'CI' => __( 'Cote d\'Ivoire', 'invoicing' ),
72
+    'HR' => __( 'Croatia/Hrvatska', 'invoicing' ),
73
+    'CU' => __( 'Cuba', 'invoicing' ),
74
+    'CW' => __( 'Cura&Ccedil;ao', 'invoicing' ),
75
+    'CY' => __( 'Cyprus', 'invoicing' ),
76
+    'CZ' => __( 'Czech Republic', 'invoicing' ),
77
+    'DK' => __( 'Denmark', 'invoicing' ),
78
+    'DJ' => __( 'Djibouti', 'invoicing' ),
79
+    'DM' => __( 'Dominica', 'invoicing' ),
80
+    'DO' => __( 'Dominican Republic', 'invoicing' ),
81
+    'TP' => __( 'East Timor', 'invoicing' ),
82
+    'EC' => __( 'Ecuador', 'invoicing' ),
83
+    'EG' => __( 'Egypt', 'invoicing' ),
84
+    'GQ' => __( 'Equatorial Guinea', 'invoicing' ),
85
+    'SV' => __( 'El Salvador', 'invoicing' ),
86
+    'ER' => __( 'Eritrea', 'invoicing' ),
87
+    'EE' => __( 'Estonia', 'invoicing' ),
88
+    'ET' => __( 'Ethiopia', 'invoicing' ),
89
+    'FK' => __( 'Falkland Islands', 'invoicing' ),
90
+    'FO' => __( 'Faroe Islands', 'invoicing' ),
91
+    'FJ' => __( 'Fiji', 'invoicing' ),
92
+    'FI' => __( 'Finland', 'invoicing' ),
93
+    'FR' => __( 'France', 'invoicing' ),
94
+    'GF' => __( 'French Guiana', 'invoicing' ),
95
+    'PF' => __( 'French Polynesia', 'invoicing' ),
96
+    'TF' => __( 'French Southern Territories', 'invoicing' ),
97
+    'GA' => __( 'Gabon', 'invoicing' ),
98
+    'GM' => __( 'Gambia', 'invoicing' ),
99
+    'GE' => __( 'Georgia', 'invoicing' ),
100
+    'DE' => __( 'Germany', 'invoicing' ),
101
+    'GR' => __( 'Greece', 'invoicing' ),
102
+    'GH' => __( 'Ghana', 'invoicing' ),
103
+    'GI' => __( 'Gibraltar', 'invoicing' ),
104
+    'GL' => __( 'Greenland', 'invoicing' ),
105
+    'GD' => __( 'Grenada', 'invoicing' ),
106
+    'GP' => __( 'Guadeloupe', 'invoicing' ),
107
+    'GU' => __( 'Guam', 'invoicing' ),
108
+    'GT' => __( 'Guatemala', 'invoicing' ),
109
+    'GG' => __( 'Guernsey', 'invoicing' ),
110
+    'GN' => __( 'Guinea', 'invoicing' ),
111
+    'GW' => __( 'Guinea-Bissau', 'invoicing' ),
112
+    'GY' => __( 'Guyana', 'invoicing' ),
113
+    'HT' => __( 'Haiti', 'invoicing' ),
114
+    'HM' => __( 'Heard and McDonald Islands', 'invoicing' ),
115
+    'VA' => __( 'Holy See (City Vatican State)', 'invoicing' ),
116
+    'HN' => __( 'Honduras', 'invoicing' ),
117
+    'HK' => __( 'Hong Kong', 'invoicing' ),
118
+    'HU' => __( 'Hungary', 'invoicing' ),
119
+    'IS' => __( 'Iceland', 'invoicing' ),
120
+    'IN' => __( 'India', 'invoicing' ),
121
+    'ID' => __( 'Indonesia', 'invoicing' ),
122
+    'IR' => __( 'Iran', 'invoicing' ),
123
+    'IQ' => __( 'Iraq', 'invoicing' ),
124
+    'IE' => __( 'Ireland', 'invoicing' ),
125
+    'IM' => __( 'Isle of Man', 'invoicing' ),
126
+    'IL' => __( 'Israel', 'invoicing' ),
127
+    'IT' => __( 'Italy', 'invoicing' ),
128
+    'JM' => __( 'Jamaica', 'invoicing' ),
129
+    'JP' => __( 'Japan', 'invoicing' ),
130
+    'JE' => __( 'Jersey', 'invoicing' ),
131
+    'JO' => __( 'Jordan', 'invoicing' ),
132
+    'KZ' => __( 'Kazakhstan', 'invoicing' ),
133
+    'KE' => __( 'Kenya', 'invoicing' ),
134
+    'KI' => __( 'Kiribati', 'invoicing' ),
135
+    'KW' => __( 'Kuwait', 'invoicing' ),
136
+    'KG' => __( 'Kyrgyzstan', 'invoicing' ),
137
+    'LA' => __( 'Lao People\'s Democratic Republic', 'invoicing' ),
138
+    'LV' => __( 'Latvia', 'invoicing' ),
139
+    'LB' => __( 'Lebanon', 'invoicing' ),
140
+    'LS' => __( 'Lesotho', 'invoicing' ),
141
+    'LR' => __( 'Liberia', 'invoicing' ),
142
+    'LY' => __( 'Libyan Arab Jamahiriya', 'invoicing' ),
143
+    'LI' => __( 'Liechtenstein', 'invoicing' ),
144
+    'LT' => __( 'Lithuania', 'invoicing' ),
145
+    'LU' => __( 'Luxembourg', 'invoicing' ),
146
+    'MO' => __( 'Macau', 'invoicing' ),
147
+    'MK' => __( 'Macedonia', 'invoicing' ),
148
+    'MG' => __( 'Madagascar', 'invoicing' ),
149
+    'MW' => __( 'Malawi', 'invoicing' ),
150
+    'MY' => __( 'Malaysia', 'invoicing' ),
151
+    'MV' => __( 'Maldives', 'invoicing' ),
152
+    'ML' => __( 'Mali', 'invoicing' ),
153
+    'MT' => __( 'Malta', 'invoicing' ),
154
+    'MH' => __( 'Marshall Islands', 'invoicing' ),
155
+    'MQ' => __( 'Martinique', 'invoicing' ),
156
+    'MR' => __( 'Mauritania', 'invoicing' ),
157
+    'MU' => __( 'Mauritius', 'invoicing' ),
158
+    'YT' => __( 'Mayotte', 'invoicing' ),
159
+    'MX' => __( 'Mexico', 'invoicing' ),
160
+    'FM' => __( 'Micronesia', 'invoicing' ),
161
+    'MD' => __( 'Moldova, Republic of', 'invoicing' ),
162
+    'MC' => __( 'Monaco', 'invoicing' ),
163
+    'MN' => __( 'Mongolia', 'invoicing' ),
164
+    'ME' => __( 'Montenegro', 'invoicing' ),
165
+    'MS' => __( 'Montserrat', 'invoicing' ),
166
+    'MA' => __( 'Morocco', 'invoicing' ),
167
+    'MZ' => __( 'Mozambique', 'invoicing' ),
168
+    'MM' => __( 'Myanmar', 'invoicing' ),
169
+    'NA' => __( 'Namibia', 'invoicing' ),
170
+    'NR' => __( 'Nauru', 'invoicing' ),
171
+    'NP' => __( 'Nepal', 'invoicing' ),
172
+    'NL' => __( 'Netherlands', 'invoicing' ),
173
+    'AN' => __( 'Netherlands Antilles', 'invoicing' ),
174
+    'NC' => __( 'New Caledonia', 'invoicing' ),
175
+    'NZ' => __( 'New Zealand', 'invoicing' ),
176
+    'NI' => __( 'Nicaragua', 'invoicing' ),
177
+    'NE' => __( 'Niger', 'invoicing' ),
178
+    'NG' => __( 'Nigeria', 'invoicing' ),
179
+    'NU' => __( 'Niue', 'invoicing' ),
180
+    'NF' => __( 'Norfolk Island', 'invoicing' ),
181
+    'KP' => __( 'North Korea', 'invoicing' ),
182
+    'MP' => __( 'Northern Mariana Islands', 'invoicing' ),
183
+    'NO' => __( 'Norway', 'invoicing' ),
184
+    'OM' => __( 'Oman', 'invoicing' ),
185
+    'PK' => __( 'Pakistan', 'invoicing' ),
186
+    'PW' => __( 'Palau', 'invoicing' ),
187
+    'PS' => __( 'Palestinian Territories', 'invoicing' ),
188
+    'PA' => __( 'Panama', 'invoicing' ),
189
+    'PG' => __( 'Papua New Guinea', 'invoicing' ),
190
+    'PY' => __( 'Paraguay', 'invoicing' ),
191
+    'PE' => __( 'Peru', 'invoicing' ),
192
+    'PH' => __( 'Philippines', 'invoicing' ),
193
+    'PN' => __( 'Pitcairn Island', 'invoicing' ),
194
+    'PL' => __( 'Poland', 'invoicing' ),
195
+    'PT' => __( 'Portugal', 'invoicing' ),
196
+    'PR' => __( 'Puerto Rico', 'invoicing' ),
197
+    'QA' => __( 'Qatar', 'invoicing' ),
198
+    'XK' => __( 'Republic of Kosovo', 'invoicing' ),
199
+    'RE' => __( 'Reunion Island', 'invoicing' ),
200
+    'RO' => __( 'Romania', 'invoicing' ),
201
+    'RU' => __( 'Russian Federation', 'invoicing' ),
202
+    'RW' => __( 'Rwanda', 'invoicing' ),
203
+    'BL' => __( 'Saint Barth&eacute;lemy', 'invoicing' ),
204
+    'SH' => __( 'Saint Helena', 'invoicing' ),
205
+    'KN' => __( 'Saint Kitts and Nevis', 'invoicing' ),
206
+    'LC' => __( 'Saint Lucia', 'invoicing' ),
207
+    'MF' => __( 'Saint Martin (French)', 'invoicing' ),
208
+    'SX' => __( 'Saint Martin (Dutch)', 'invoicing' ),
209
+    'PM' => __( 'Saint Pierre and Miquelon', 'invoicing' ),
210
+    'VC' => __( 'Saint Vincent and the Grenadines', 'invoicing' ),
211
+    'SM' => __( 'San Marino', 'invoicing' ),
212
+    'ST' => __( 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'invoicing' ),
213
+    'SA' => __( 'Saudi Arabia', 'invoicing' ),
214
+    'SN' => __( 'Senegal', 'invoicing' ),
215
+    'RS' => __( 'Serbia', 'invoicing' ),
216
+    'SC' => __( 'Seychelles', 'invoicing' ),
217
+    'SL' => __( 'Sierra Leone', 'invoicing' ),
218
+    'SG' => __( 'Singapore', 'invoicing' ),
219
+    'SK' => __( 'Slovak Republic', 'invoicing' ),
220
+    'SI' => __( 'Slovenia', 'invoicing' ),
221
+    'SB' => __( 'Solomon Islands', 'invoicing' ),
222
+    'SO' => __( 'Somalia', 'invoicing' ),
223
+    'ZA' => __( 'South Africa', 'invoicing' ),
224
+    'GS' => __( 'South Georgia', 'invoicing' ),
225
+    'KR' => __( 'South Korea', 'invoicing' ),
226
+    'SS' => __( 'South Sudan', 'invoicing' ),
227
+    'ES' => __( 'Spain', 'invoicing' ),
228
+    'LK' => __( 'Sri Lanka', 'invoicing' ),
229
+    'SD' => __( 'Sudan', 'invoicing' ),
230
+    'SR' => __( 'Suriname', 'invoicing' ),
231
+    'SJ' => __( 'Svalbard and Jan Mayen Islands', 'invoicing' ),
232
+    'SZ' => __( 'Swaziland', 'invoicing' ),
233
+    'SE' => __( 'Sweden', 'invoicing' ),
234
+    'CH' => __( 'Switzerland', 'invoicing' ),
235
+    'SY' => __( 'Syrian Arab Republic', 'invoicing' ),
236
+    'TW' => __( 'Taiwan', 'invoicing' ),
237
+    'TJ' => __( 'Tajikistan', 'invoicing' ),
238
+    'TZ' => __( 'Tanzania', 'invoicing' ),
239
+    'TH' => __( 'Thailand', 'invoicing' ),
240
+    'TL' => __( 'Timor-Leste', 'invoicing' ),
241
+    'TG' => __( 'Togo', 'invoicing' ),
242
+    'TK' => __( 'Tokelau', 'invoicing' ),
243
+    'TO' => __( 'Tonga', 'invoicing' ),
244
+    'TT' => __( 'Trinidad and Tobago', 'invoicing' ),
245
+    'TN' => __( 'Tunisia', 'invoicing' ),
246
+    'TR' => __( 'Turkey', 'invoicing' ),
247
+    'TM' => __( 'Turkmenistan', 'invoicing' ),
248
+    'TC' => __( 'Turks and Caicos Islands', 'invoicing' ),
249
+    'TV' => __( 'Tuvalu', 'invoicing' ),
250
+    'UG' => __( 'Uganda', 'invoicing' ),
251
+    'UA' => __( 'Ukraine', 'invoicing' ),
252
+    'AE' => __( 'United Arab Emirates', 'invoicing' ),
253
+    'UY' => __( 'Uruguay', 'invoicing' ),
254
+    'UM' => __( 'US Minor Outlying Islands', 'invoicing' ),
255
+    'UZ' => __( 'Uzbekistan', 'invoicing' ),
256
+    'VU' => __( 'Vanuatu', 'invoicing' ),
257
+    'VE' => __( 'Venezuela', 'invoicing' ),
258
+    'VN' => __( 'Vietnam', 'invoicing' ),
259
+    'VG' => __( 'Virgin Islands (British)', 'invoicing' ),
260
+    'VI' => __( 'Virgin Islands (USA)', 'invoicing' ),
261
+    'WF' => __( 'Wallis and Futuna Islands', 'invoicing' ),
262
+    'EH' => __( 'Western Sahara', 'invoicing' ),
263
+    'WS' => __( 'Western Samoa', 'invoicing' ),
264
+    'YE' => __( 'Yemen', 'invoicing' ),
265
+    'ZM' => __( 'Zambia', 'invoicing' ),
266
+    'ZW' => __( 'Zimbabwe', 'invoicing' ),
267 267
 );
Please login to merge, or discard this patch.
includes/data/admin-settings.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -38,8 +38,8 @@
 block discarded – undo
38 38
     $nonce = wp_create_nonce( 'reset_invoice_count' );
39 39
     $reset_number = '<a href="' . add_query_arg(
40 40
         array(
41
-			'reset_invoice_count' => 1,
42
-			'_nonce'              => $nonce,
41
+            'reset_invoice_count' => 1,
42
+            '_nonce'              => $nonce,
43 43
         )
44 44
     ) . '" class="btn button">' . __( 'Force Reset Sequence', 'invoicing' ) . '</a>';
45 45
 }
Please login to merge, or discard this patch.
includes/data/discount-schema.php 1 patch
Indentation   +172 added lines, -172 removed lines patch added patch discarded remove patch
@@ -13,177 +13,177 @@
 block discarded – undo
13 13
 
14 14
 return array(
15 15
 
16
-	'id'                => array(
17
-		'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
18
-		'type'        => 'integer',
19
-		'context'     => array( 'view', 'edit', 'embed' ),
20
-		'readonly'    => true,
21
-	),
22
-
23
-	'status'            => array(
24
-		'description' => __( 'A named status for the discount.', 'invoicing' ),
25
-		'type'        => 'string',
26
-		'enum'        => array( 'publish', 'pending', 'draft', 'expired' ),
27
-		'default'     => 'draft',
28
-		'context'     => array( 'view', 'edit', 'embed' ),
29
-	),
30
-
31
-	'version'           => array(
32
-		'description' => __( 'Plugin version when the discount was created.', 'invoicing' ),
33
-		'type'        => 'string',
34
-		'context'     => array( 'view', 'edit', 'embed' ),
35
-		'readonly'    => true,
36
-	),
37
-
38
-	'date_created'      => array(
39
-		'description' => __( "The date the discount was created, in the site's timezone.", 'invoicing' ),
40
-		'type'        => 'string',
41
-		'context'     => array( 'view', 'edit', 'embed' ),
42
-	),
43
-
44
-	'date_created_gmt'  => array(
45
-		'description' => __( 'The GMT date the discount was created.', 'invoicing' ),
46
-		'type'        => 'string',
47
-		'context'     => array( 'view', 'edit', 'embed' ),
48
-		'readonly'    => true,
49
-	),
50
-
51
-	'date_modified'     => array(
52
-		'description' => __( "The date the discount was last modified, in the site's timezone.", 'invoicing' ),
53
-		'type'        => 'string',
54
-		'context'     => array( 'view', 'edit', 'embed' ),
55
-		'readonly'    => true,
56
-	),
57
-
58
-	'date_modified_gmt' => array(
59
-		'description' => __( 'The GMT date the discount was last modified.', 'invoicing' ),
60
-		'type'        => 'string',
61
-		'context'     => array( 'view', 'edit', 'embed' ),
62
-		'readonly'    => true,
63
-	),
64
-
65
-	'name'              => array(
66
-		'description' => __( 'The discount name.', 'invoicing' ),
67
-		'type'        => 'string',
68
-		'context'     => array( 'view', 'edit', 'embed' ),
69
-	),
70
-
71
-	'description'       => array(
72
-		'description' => __( 'A description of what the discount is all about.', 'invoicing' ),
73
-		'type'        => 'string',
74
-		'context'     => array( 'view', 'edit', 'embed' ),
75
-	),
76
-
77
-	'code'              => array(
78
-		'description' => __( 'The discount code.', 'invoicing' ),
79
-		'type'        => 'string',
80
-		'context'     => array( 'view', 'edit', 'embed' ),
81
-		'required'    => true,
82
-	),
83
-
84
-	'type'              => array(
85
-		'description' => __( 'The type of discount.', 'invoicing' ),
86
-		'type'        => 'string',
87
-		'enum'        => array_keys( wpinv_get_discount_types() ),
88
-		'context'     => array( 'view', 'edit', 'embed' ),
89
-		'default'     => 'percent',
90
-	),
91
-
92
-	'amount'            => array(
93
-		'description' => __( 'The discount value.', 'invoicing' ),
94
-		'type'        => 'number',
95
-		'context'     => array( 'view', 'edit', 'embed' ),
96
-		'required'    => true,
97
-	),
98
-
99
-	'formatted_amount'  => array(
100
-		'description' => __( 'The formatted discount value.', 'invoicing' ),
101
-		'type'        => 'string',
102
-		'context'     => array( 'view', 'edit', 'embed' ),
103
-		'readonly'    => true,
104
-	),
105
-
106
-	'uses'              => array(
107
-		'description' => __( 'The number of times the discount has been used.', 'invoicing' ),
108
-		'type'        => 'integer',
109
-		'context'     => array( 'view', 'embed' ),
110
-		'readonly'    => true,
111
-	),
112
-
113
-	'max_uses'          => array(
114
-		'description' => __( 'The maximum number of times the discount can be used.', 'invoicing' ),
115
-		'type'        => 'integer',
116
-		'context'     => array( 'view', 'edit' ),
117
-	),
118
-
119
-	'usage'             => array(
120
-		'description' => __( "The discount's usage, i.e uses / max uses.", 'invoicing' ),
121
-		'type'        => 'string',
122
-		'context'     => array( 'view', 'embed' ),
123
-		'readonly'    => true,
124
-	),
125
-
126
-	'is_single_use'     => array(
127
-		'description' => __( 'Whether or not the discount can only be used once per user.', 'invoicing' ),
128
-		'type'        => 'boolean',
129
-		'context'     => array( 'view', 'edit' ),
130
-	),
131
-
132
-	'is_recurring'      => array(
133
-		'description' => __( 'Whether or not the discount applies to the initial payment only or all recurring payments.', 'invoicing' ),
134
-		'type'        => 'boolean',
135
-		'context'     => array( 'view', 'edit' ),
136
-	),
137
-
138
-	'start_date'        => array(
139
-		'description' => __( 'The start date for the discount in the format of yyyy-mm-dd hh:mm:ss. If provided, the discount can only be used after or on this date.', 'invoicing' ),
140
-		'type'        => 'string',
141
-		'context'     => array( 'view', 'edit' ),
142
-	),
143
-
144
-	'end_date'          => array(
145
-		'description' => __( 'The expiration date for the discount.', 'invoicing' ),
146
-		'type'        => 'string',
147
-		'context'     => array( 'view', 'edit' ),
148
-	),
149
-
150
-	'allowed_items'     => array(
151
-		'description' => __( 'Items which are allowed to use this discount. Leave blank to enable for all items.', 'invoicing' ),
152
-		'type'        => 'array',
153
-		'context'     => array( 'view', 'edit' ),
154
-		'items'       => array(
155
-			'type' => 'integer',
156
-		),
157
-	),
158
-
159
-	'excluded_items'    => array(
160
-		'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
161
-		'type'        => 'array',
162
-		'context'     => array( 'view', 'edit' ),
163
-		'items'       => array(
164
-			'type' => 'integer',
165
-		),
166
-	),
167
-
168
-	'required_items'    => array(
169
-		'description' => __( 'Items which are required to be in the cart before using this discount.', 'invoicing' ),
170
-		'type'        => 'array',
171
-		'context'     => array( 'view', 'edit' ),
172
-		'items'       => array(
173
-			'type' => 'integer',
174
-		),
175
-	),
176
-
177
-	'minimum_total'     => array(
178
-		'description' => __( 'The minimum total needed to use this invoice.', 'invoicing' ),
179
-		'type'        => 'number',
180
-		'context'     => array( 'view', 'edit' ),
181
-	),
182
-
183
-	'maximum_total'     => array(
184
-		'description' => __( 'The maximum total needed to use this invoice.', 'invoicing' ),
185
-		'type'        => 'number',
186
-		'context'     => array( 'view', 'edit' ),
187
-	),
16
+    'id'                => array(
17
+        'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
18
+        'type'        => 'integer',
19
+        'context'     => array( 'view', 'edit', 'embed' ),
20
+        'readonly'    => true,
21
+    ),
22
+
23
+    'status'            => array(
24
+        'description' => __( 'A named status for the discount.', 'invoicing' ),
25
+        'type'        => 'string',
26
+        'enum'        => array( 'publish', 'pending', 'draft', 'expired' ),
27
+        'default'     => 'draft',
28
+        'context'     => array( 'view', 'edit', 'embed' ),
29
+    ),
30
+
31
+    'version'           => array(
32
+        'description' => __( 'Plugin version when the discount was created.', 'invoicing' ),
33
+        'type'        => 'string',
34
+        'context'     => array( 'view', 'edit', 'embed' ),
35
+        'readonly'    => true,
36
+    ),
37
+
38
+    'date_created'      => array(
39
+        'description' => __( "The date the discount was created, in the site's timezone.", 'invoicing' ),
40
+        'type'        => 'string',
41
+        'context'     => array( 'view', 'edit', 'embed' ),
42
+    ),
43
+
44
+    'date_created_gmt'  => array(
45
+        'description' => __( 'The GMT date the discount was created.', 'invoicing' ),
46
+        'type'        => 'string',
47
+        'context'     => array( 'view', 'edit', 'embed' ),
48
+        'readonly'    => true,
49
+    ),
50
+
51
+    'date_modified'     => array(
52
+        'description' => __( "The date the discount was last modified, in the site's timezone.", 'invoicing' ),
53
+        'type'        => 'string',
54
+        'context'     => array( 'view', 'edit', 'embed' ),
55
+        'readonly'    => true,
56
+    ),
57
+
58
+    'date_modified_gmt' => array(
59
+        'description' => __( 'The GMT date the discount was last modified.', 'invoicing' ),
60
+        'type'        => 'string',
61
+        'context'     => array( 'view', 'edit', 'embed' ),
62
+        'readonly'    => true,
63
+    ),
64
+
65
+    'name'              => array(
66
+        'description' => __( 'The discount name.', 'invoicing' ),
67
+        'type'        => 'string',
68
+        'context'     => array( 'view', 'edit', 'embed' ),
69
+    ),
70
+
71
+    'description'       => array(
72
+        'description' => __( 'A description of what the discount is all about.', 'invoicing' ),
73
+        'type'        => 'string',
74
+        'context'     => array( 'view', 'edit', 'embed' ),
75
+    ),
76
+
77
+    'code'              => array(
78
+        'description' => __( 'The discount code.', 'invoicing' ),
79
+        'type'        => 'string',
80
+        'context'     => array( 'view', 'edit', 'embed' ),
81
+        'required'    => true,
82
+    ),
83
+
84
+    'type'              => array(
85
+        'description' => __( 'The type of discount.', 'invoicing' ),
86
+        'type'        => 'string',
87
+        'enum'        => array_keys( wpinv_get_discount_types() ),
88
+        'context'     => array( 'view', 'edit', 'embed' ),
89
+        'default'     => 'percent',
90
+    ),
91
+
92
+    'amount'            => array(
93
+        'description' => __( 'The discount value.', 'invoicing' ),
94
+        'type'        => 'number',
95
+        'context'     => array( 'view', 'edit', 'embed' ),
96
+        'required'    => true,
97
+    ),
98
+
99
+    'formatted_amount'  => array(
100
+        'description' => __( 'The formatted discount value.', 'invoicing' ),
101
+        'type'        => 'string',
102
+        'context'     => array( 'view', 'edit', 'embed' ),
103
+        'readonly'    => true,
104
+    ),
105
+
106
+    'uses'              => array(
107
+        'description' => __( 'The number of times the discount has been used.', 'invoicing' ),
108
+        'type'        => 'integer',
109
+        'context'     => array( 'view', 'embed' ),
110
+        'readonly'    => true,
111
+    ),
112
+
113
+    'max_uses'          => array(
114
+        'description' => __( 'The maximum number of times the discount can be used.', 'invoicing' ),
115
+        'type'        => 'integer',
116
+        'context'     => array( 'view', 'edit' ),
117
+    ),
118
+
119
+    'usage'             => array(
120
+        'description' => __( "The discount's usage, i.e uses / max uses.", 'invoicing' ),
121
+        'type'        => 'string',
122
+        'context'     => array( 'view', 'embed' ),
123
+        'readonly'    => true,
124
+    ),
125
+
126
+    'is_single_use'     => array(
127
+        'description' => __( 'Whether or not the discount can only be used once per user.', 'invoicing' ),
128
+        'type'        => 'boolean',
129
+        'context'     => array( 'view', 'edit' ),
130
+    ),
131
+
132
+    'is_recurring'      => array(
133
+        'description' => __( 'Whether or not the discount applies to the initial payment only or all recurring payments.', 'invoicing' ),
134
+        'type'        => 'boolean',
135
+        'context'     => array( 'view', 'edit' ),
136
+    ),
137
+
138
+    'start_date'        => array(
139
+        'description' => __( 'The start date for the discount in the format of yyyy-mm-dd hh:mm:ss. If provided, the discount can only be used after or on this date.', 'invoicing' ),
140
+        'type'        => 'string',
141
+        'context'     => array( 'view', 'edit' ),
142
+    ),
143
+
144
+    'end_date'          => array(
145
+        'description' => __( 'The expiration date for the discount.', 'invoicing' ),
146
+        'type'        => 'string',
147
+        'context'     => array( 'view', 'edit' ),
148
+    ),
149
+
150
+    'allowed_items'     => array(
151
+        'description' => __( 'Items which are allowed to use this discount. Leave blank to enable for all items.', 'invoicing' ),
152
+        'type'        => 'array',
153
+        'context'     => array( 'view', 'edit' ),
154
+        'items'       => array(
155
+            'type' => 'integer',
156
+        ),
157
+    ),
158
+
159
+    'excluded_items'    => array(
160
+        'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
161
+        'type'        => 'array',
162
+        'context'     => array( 'view', 'edit' ),
163
+        'items'       => array(
164
+            'type' => 'integer',
165
+        ),
166
+    ),
167
+
168
+    'required_items'    => array(
169
+        'description' => __( 'Items which are required to be in the cart before using this discount.', 'invoicing' ),
170
+        'type'        => 'array',
171
+        'context'     => array( 'view', 'edit' ),
172
+        'items'       => array(
173
+            'type' => 'integer',
174
+        ),
175
+    ),
176
+
177
+    'minimum_total'     => array(
178
+        'description' => __( 'The minimum total needed to use this invoice.', 'invoicing' ),
179
+        'type'        => 'number',
180
+        'context'     => array( 'view', 'edit' ),
181
+    ),
182
+
183
+    'maximum_total'     => array(
184
+        'description' => __( 'The maximum total needed to use this invoice.', 'invoicing' ),
185
+        'type'        => 'number',
186
+        'context'     => array( 'view', 'edit' ),
187
+    ),
188 188
 
189 189
 );
Please login to merge, or discard this patch.
includes/data/item-schema.php 1 patch
Indentation   +229 added lines, -229 removed lines patch added patch discarded remove patch
@@ -13,233 +13,233 @@
 block discarded – undo
13 13
 
14 14
 return array(
15 15
 
16
-	'id'                   => array(
17
-		'description' => __( 'Unique identifier for the item.', 'invoicing' ),
18
-		'type'        => 'integer',
19
-		'context'     => array( 'view', 'edit', 'embed' ),
20
-		'readonly'    => true,
21
-	),
22
-
23
-	'parent_id'            => array(
24
-		'description' => __( 'Parent item ID.', 'invoicing' ),
25
-		'type'        => 'integer',
26
-		'context'     => array( 'view', 'edit', 'embed' ),
27
-		'default'     => 0,
28
-	),
29
-
30
-	'status'               => array(
31
-		'description' => __( 'A named status for the item.', 'invoicing' ),
32
-		'type'        => 'string',
33
-		'enum'        => array( 'draft', 'pending', 'publish' ),
34
-		'context'     => array( 'view', 'edit', 'embed' ),
35
-		'default'     => 'draft',
36
-	),
37
-
38
-	'version'              => array(
39
-		'description' => __( 'Plugin version when the item was created.', 'invoicing' ),
40
-		'type'        => 'string',
41
-		'context'     => array( 'view', 'edit' ),
42
-		'readonly'    => true,
43
-	),
44
-
45
-	'date_created'         => array(
46
-		'description' => __( "The date the item was created, in the site's timezone.", 'invoicing' ),
47
-		'type'        => 'string',
48
-		'context'     => array( 'view', 'edit', 'embed' ),
49
-	),
50
-
51
-	'date_created_gmt'     => array(
52
-		'description' => __( 'The GMT date the item was created.', 'invoicing' ),
53
-		'type'        => 'string',
54
-		'context'     => array( 'view', 'edit', 'embed' ),
55
-		'readonly'    => true,
56
-	),
57
-
58
-	'date_modified'        => array(
59
-		'description' => __( "The date the item was last modified, in the site's timezone.", 'invoicing' ),
60
-		'type'        => 'string',
61
-		'context'     => array( 'view', 'edit', 'embed' ),
62
-		'readonly'    => true,
63
-	),
64
-
65
-	'date_modified_gmt'    => array(
66
-		'description' => __( 'The GMT date the item was last modified.', 'invoicing' ),
67
-		'type'        => 'string',
68
-		'context'     => array( 'view', 'edit', 'embed' ),
69
-		'readonly'    => true,
70
-	),
71
-
72
-	'name'                 => array(
73
-		'description' => __( "The item's name.", 'invoicing' ),
74
-		'type'        => 'string',
75
-		'context'     => array( 'view', 'edit', 'embed' ),
76
-		'required'    => true,
77
-	),
78
-
79
-	'description'          => array(
80
-		'description' => __( "The item's description.", 'invoicing' ),
81
-		'type'        => 'string',
82
-		'context'     => array( 'view', 'edit', 'embed' ),
83
-	),
84
-
85
-	'owner'                => array(
86
-		'description' => __( 'The owner of the item (user id).', 'invoicing' ),
87
-		'type'        => 'integer',
88
-		'context'     => array( 'view', 'edit', 'embed' ),
89
-	),
90
-
91
-	'price'                => array(
92
-		'description' => __( 'The price of the item.', 'invoicing' ),
93
-		'type'        => 'number',
94
-		'context'     => array( 'view', 'edit', 'embed' ),
95
-		'required'    => true,
96
-	),
97
-
98
-	'the_price'            => array(
99
-		'description' => __( 'The formatted price of the item.', 'invoicing' ),
100
-		'type'        => 'string',
101
-		'context'     => array( 'view', 'edit', 'embed' ),
102
-		'readonly'    => true,
103
-	),
104
-
105
-	'type'                 => array(
106
-		'description' => __( 'The item type.', 'invoicing' ),
107
-		'type'        => 'string',
108
-		'enum'        => wpinv_item_types(),
109
-		'default'     => 'custom',
110
-		'context'     => array( 'view', 'edit', 'embed' ),
111
-	),
112
-
113
-	'vat_rule'             => array(
114
-		'description' => __( 'VAT rule applied to the item.', 'invoicing' ),
115
-		'type'        => 'string',
116
-		'enum'        => array_keys( getpaid_get_tax_rules() ),
117
-		'context'     => array( 'view', 'edit', 'embed' ),
118
-	),
119
-
120
-	'vat_class'            => array(
121
-		'description' => __( 'VAT class for the item.', 'invoicing' ),
122
-		'type'        => 'string',
123
-		'context'     => array( 'view', 'edit', 'embed' ),
124
-		'enum'        => array_keys( getpaid_get_tax_classes() ),
125
-	),
126
-
127
-	'custom_id'            => array(
128
-		'description' => __( 'Custom id for the item.', 'invoicing' ),
129
-		'type'        => 'string',
130
-		'context'     => array( 'view', 'edit', 'embed' ),
131
-	),
132
-
133
-	'custom_name'          => array(
134
-		'description' => __( 'Custom name for the item.', 'invoicing' ),
135
-		'type'        => 'string',
136
-		'context'     => array( 'view', 'edit', 'embed' ),
137
-	),
138
-
139
-	'custom_singular_name' => array(
140
-		'description' => __( 'Custom singular name for the item.', 'invoicing' ),
141
-		'type'        => 'string',
142
-		'context'     => array( 'view', 'edit', 'embed' ),
143
-	),
144
-
145
-	'is_dynamic_pricing'   => array(
146
-		'description' => __( 'Whether or not customers can enter their own prices when checking out.', 'invoicing' ),
147
-		'type'        => 'integer',
148
-		'enum'        => array( 0, 1 ),
149
-		'context'     => array( 'view', 'edit', 'embed' ),
150
-	),
151
-
152
-	'minimum_price'        => array(
153
-		'description' => __( 'For dynamic prices, this is the minimum price that a user can set.', 'invoicing' ),
154
-		'type'        => 'number',
155
-		'context'     => array( 'view', 'edit', 'embed' ),
156
-	),
157
-
158
-	'is_recurring'         => array(
159
-		'description' => __( 'Whether or not this is a subscription item.', 'invoicing' ),
160
-		'type'        => 'integer',
161
-		'enum'        => array( 0, 1 ),
162
-		'context'     => array( 'view', 'edit', 'embed' ),
163
-	),
164
-
165
-	'initial_price'        => array(
166
-		'description' => __( 'The initial price of the item.', 'invoicing' ),
167
-		'type'        => 'number',
168
-		'context'     => array( 'view', 'edit', 'embed' ),
169
-		'readonly'    => true,
170
-	),
171
-
172
-	'the_initial_price'    => array(
173
-		'description' => __( 'The formatted initial price of the item.', 'invoicing' ),
174
-		'type'        => 'string',
175
-		'context'     => array( 'view', 'edit', 'embed' ),
176
-		'readonly'    => true,
177
-	),
178
-
179
-	'recurring_price'      => array(
180
-		'description' => __( 'The recurring price of the item.', 'invoicing' ),
181
-		'type'        => 'number',
182
-		'context'     => array( 'view', 'edit', 'embed' ),
183
-		'readonly'    => true,
184
-	),
185
-
186
-	'the_recurring_price'  => array(
187
-		'description' => __( 'The formatted recurring price of the item.', 'invoicing' ),
188
-		'type'        => 'string',
189
-		'context'     => array( 'view', 'edit', 'embed' ),
190
-		'readonly'    => true,
191
-	),
192
-
193
-	'recurring_period'     => array(
194
-		'description' => __( 'The recurring period for a recurring item.', 'invoicing' ),
195
-		'type'        => 'string',
196
-		'context'     => array( 'view', 'edit', 'embed' ),
197
-		'enum'        => array( 'D', 'W', 'M', 'Y' ),
198
-	),
199
-
200
-	'recurring_interval'   => array(
201
-		'description' => __( 'The recurring interval for a subscription item.', 'invoicing' ),
202
-		'type'        => 'integer',
203
-		'context'     => array( 'view', 'edit', 'embed' ),
204
-	),
205
-
206
-	'recurring_limit'      => array(
207
-		'description' => __( 'The maximum number of renewals for a subscription item.', 'invoicing' ),
208
-		'type'        => 'integer',
209
-		'context'     => array( 'view', 'edit', 'embed' ),
210
-	),
211
-
212
-	'is_free_trial'        => array(
213
-		'description' => __( 'Whether the item has a free trial period.', 'invoicing' ),
214
-		'type'        => 'integer',
215
-		'enum'        => array( 0, 1 ),
216
-		'context'     => array( 'view', 'edit', 'embed' ),
217
-	),
218
-
219
-	'trial_period'         => array(
220
-		'description' => __( 'The trial period.', 'invoicing' ),
221
-		'type'        => 'string',
222
-		'context'     => array( 'view', 'edit', 'embed' ),
223
-		'enum'        => array( 'D', 'W', 'M', 'Y' ),
224
-	),
225
-
226
-	'trial_interval'       => array(
227
-		'description' => __( 'The trial interval.', 'invoicing' ),
228
-		'type'        => 'integer',
229
-		'context'     => array( 'view', 'edit', 'embed' ),
230
-	),
231
-
232
-	'first_renewal_date'   => array(
233
-		'description' => __( 'The first renewal date in case the item was to be bought today.', 'invoicing' ),
234
-		'type'        => 'string',
235
-		'context'     => array( 'view', 'edit', 'embed' ),
236
-		'readonly'    => true,
237
-	),
238
-
239
-	'edit_url'             => array(
240
-		'description' => __( 'The URL to edit an item.', 'invoicing' ),
241
-		'type'        => 'string',
242
-		'context'     => array( 'view', 'edit', 'embed' ),
243
-		'readonly'    => true,
244
-	),
16
+    'id'                   => array(
17
+        'description' => __( 'Unique identifier for the item.', 'invoicing' ),
18
+        'type'        => 'integer',
19
+        'context'     => array( 'view', 'edit', 'embed' ),
20
+        'readonly'    => true,
21
+    ),
22
+
23
+    'parent_id'            => array(
24
+        'description' => __( 'Parent item ID.', 'invoicing' ),
25
+        'type'        => 'integer',
26
+        'context'     => array( 'view', 'edit', 'embed' ),
27
+        'default'     => 0,
28
+    ),
29
+
30
+    'status'               => array(
31
+        'description' => __( 'A named status for the item.', 'invoicing' ),
32
+        'type'        => 'string',
33
+        'enum'        => array( 'draft', 'pending', 'publish' ),
34
+        'context'     => array( 'view', 'edit', 'embed' ),
35
+        'default'     => 'draft',
36
+    ),
37
+
38
+    'version'              => array(
39
+        'description' => __( 'Plugin version when the item was created.', 'invoicing' ),
40
+        'type'        => 'string',
41
+        'context'     => array( 'view', 'edit' ),
42
+        'readonly'    => true,
43
+    ),
44
+
45
+    'date_created'         => array(
46
+        'description' => __( "The date the item was created, in the site's timezone.", 'invoicing' ),
47
+        'type'        => 'string',
48
+        'context'     => array( 'view', 'edit', 'embed' ),
49
+    ),
50
+
51
+    'date_created_gmt'     => array(
52
+        'description' => __( 'The GMT date the item was created.', 'invoicing' ),
53
+        'type'        => 'string',
54
+        'context'     => array( 'view', 'edit', 'embed' ),
55
+        'readonly'    => true,
56
+    ),
57
+
58
+    'date_modified'        => array(
59
+        'description' => __( "The date the item was last modified, in the site's timezone.", 'invoicing' ),
60
+        'type'        => 'string',
61
+        'context'     => array( 'view', 'edit', 'embed' ),
62
+        'readonly'    => true,
63
+    ),
64
+
65
+    'date_modified_gmt'    => array(
66
+        'description' => __( 'The GMT date the item was last modified.', 'invoicing' ),
67
+        'type'        => 'string',
68
+        'context'     => array( 'view', 'edit', 'embed' ),
69
+        'readonly'    => true,
70
+    ),
71
+
72
+    'name'                 => array(
73
+        'description' => __( "The item's name.", 'invoicing' ),
74
+        'type'        => 'string',
75
+        'context'     => array( 'view', 'edit', 'embed' ),
76
+        'required'    => true,
77
+    ),
78
+
79
+    'description'          => array(
80
+        'description' => __( "The item's description.", 'invoicing' ),
81
+        'type'        => 'string',
82
+        'context'     => array( 'view', 'edit', 'embed' ),
83
+    ),
84
+
85
+    'owner'                => array(
86
+        'description' => __( 'The owner of the item (user id).', 'invoicing' ),
87
+        'type'        => 'integer',
88
+        'context'     => array( 'view', 'edit', 'embed' ),
89
+    ),
90
+
91
+    'price'                => array(
92
+        'description' => __( 'The price of the item.', 'invoicing' ),
93
+        'type'        => 'number',
94
+        'context'     => array( 'view', 'edit', 'embed' ),
95
+        'required'    => true,
96
+    ),
97
+
98
+    'the_price'            => array(
99
+        'description' => __( 'The formatted price of the item.', 'invoicing' ),
100
+        'type'        => 'string',
101
+        'context'     => array( 'view', 'edit', 'embed' ),
102
+        'readonly'    => true,
103
+    ),
104
+
105
+    'type'                 => array(
106
+        'description' => __( 'The item type.', 'invoicing' ),
107
+        'type'        => 'string',
108
+        'enum'        => wpinv_item_types(),
109
+        'default'     => 'custom',
110
+        'context'     => array( 'view', 'edit', 'embed' ),
111
+    ),
112
+
113
+    'vat_rule'             => array(
114
+        'description' => __( 'VAT rule applied to the item.', 'invoicing' ),
115
+        'type'        => 'string',
116
+        'enum'        => array_keys( getpaid_get_tax_rules() ),
117
+        'context'     => array( 'view', 'edit', 'embed' ),
118
+    ),
119
+
120
+    'vat_class'            => array(
121
+        'description' => __( 'VAT class for the item.', 'invoicing' ),
122
+        'type'        => 'string',
123
+        'context'     => array( 'view', 'edit', 'embed' ),
124
+        'enum'        => array_keys( getpaid_get_tax_classes() ),
125
+    ),
126
+
127
+    'custom_id'            => array(
128
+        'description' => __( 'Custom id for the item.', 'invoicing' ),
129
+        'type'        => 'string',
130
+        'context'     => array( 'view', 'edit', 'embed' ),
131
+    ),
132
+
133
+    'custom_name'          => array(
134
+        'description' => __( 'Custom name for the item.', 'invoicing' ),
135
+        'type'        => 'string',
136
+        'context'     => array( 'view', 'edit', 'embed' ),
137
+    ),
138
+
139
+    'custom_singular_name' => array(
140
+        'description' => __( 'Custom singular name for the item.', 'invoicing' ),
141
+        'type'        => 'string',
142
+        'context'     => array( 'view', 'edit', 'embed' ),
143
+    ),
144
+
145
+    'is_dynamic_pricing'   => array(
146
+        'description' => __( 'Whether or not customers can enter their own prices when checking out.', 'invoicing' ),
147
+        'type'        => 'integer',
148
+        'enum'        => array( 0, 1 ),
149
+        'context'     => array( 'view', 'edit', 'embed' ),
150
+    ),
151
+
152
+    'minimum_price'        => array(
153
+        'description' => __( 'For dynamic prices, this is the minimum price that a user can set.', 'invoicing' ),
154
+        'type'        => 'number',
155
+        'context'     => array( 'view', 'edit', 'embed' ),
156
+    ),
157
+
158
+    'is_recurring'         => array(
159
+        'description' => __( 'Whether or not this is a subscription item.', 'invoicing' ),
160
+        'type'        => 'integer',
161
+        'enum'        => array( 0, 1 ),
162
+        'context'     => array( 'view', 'edit', 'embed' ),
163
+    ),
164
+
165
+    'initial_price'        => array(
166
+        'description' => __( 'The initial price of the item.', 'invoicing' ),
167
+        'type'        => 'number',
168
+        'context'     => array( 'view', 'edit', 'embed' ),
169
+        'readonly'    => true,
170
+    ),
171
+
172
+    'the_initial_price'    => array(
173
+        'description' => __( 'The formatted initial price of the item.', 'invoicing' ),
174
+        'type'        => 'string',
175
+        'context'     => array( 'view', 'edit', 'embed' ),
176
+        'readonly'    => true,
177
+    ),
178
+
179
+    'recurring_price'      => array(
180
+        'description' => __( 'The recurring price of the item.', 'invoicing' ),
181
+        'type'        => 'number',
182
+        'context'     => array( 'view', 'edit', 'embed' ),
183
+        'readonly'    => true,
184
+    ),
185
+
186
+    'the_recurring_price'  => array(
187
+        'description' => __( 'The formatted recurring price of the item.', 'invoicing' ),
188
+        'type'        => 'string',
189
+        'context'     => array( 'view', 'edit', 'embed' ),
190
+        'readonly'    => true,
191
+    ),
192
+
193
+    'recurring_period'     => array(
194
+        'description' => __( 'The recurring period for a recurring item.', 'invoicing' ),
195
+        'type'        => 'string',
196
+        'context'     => array( 'view', 'edit', 'embed' ),
197
+        'enum'        => array( 'D', 'W', 'M', 'Y' ),
198
+    ),
199
+
200
+    'recurring_interval'   => array(
201
+        'description' => __( 'The recurring interval for a subscription item.', 'invoicing' ),
202
+        'type'        => 'integer',
203
+        'context'     => array( 'view', 'edit', 'embed' ),
204
+    ),
205
+
206
+    'recurring_limit'      => array(
207
+        'description' => __( 'The maximum number of renewals for a subscription item.', 'invoicing' ),
208
+        'type'        => 'integer',
209
+        'context'     => array( 'view', 'edit', 'embed' ),
210
+    ),
211
+
212
+    'is_free_trial'        => array(
213
+        'description' => __( 'Whether the item has a free trial period.', 'invoicing' ),
214
+        'type'        => 'integer',
215
+        'enum'        => array( 0, 1 ),
216
+        'context'     => array( 'view', 'edit', 'embed' ),
217
+    ),
218
+
219
+    'trial_period'         => array(
220
+        'description' => __( 'The trial period.', 'invoicing' ),
221
+        'type'        => 'string',
222
+        'context'     => array( 'view', 'edit', 'embed' ),
223
+        'enum'        => array( 'D', 'W', 'M', 'Y' ),
224
+    ),
225
+
226
+    'trial_interval'       => array(
227
+        'description' => __( 'The trial interval.', 'invoicing' ),
228
+        'type'        => 'integer',
229
+        'context'     => array( 'view', 'edit', 'embed' ),
230
+    ),
231
+
232
+    'first_renewal_date'   => array(
233
+        'description' => __( 'The first renewal date in case the item was to be bought today.', 'invoicing' ),
234
+        'type'        => 'string',
235
+        'context'     => array( 'view', 'edit', 'embed' ),
236
+        'readonly'    => true,
237
+    ),
238
+
239
+    'edit_url'             => array(
240
+        'description' => __( 'The URL to edit an item.', 'invoicing' ),
241
+        'type'        => 'string',
242
+        'context'     => array( 'view', 'edit', 'embed' ),
243
+        'readonly'    => true,
244
+    ),
245 245
 );
Please login to merge, or discard this patch.
includes/data/eu-states.php 1 patch
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -9,31 +9,31 @@
 block discarded – undo
9 9
 defined( 'ABSPATH' ) || exit;
10 10
 
11 11
 return array(
12
-	'AT',
13
-	'BE',
14
-	'BG',
15
-	'HR',
16
-	'CY',
17
-	'CZ',
18
-	'DK',
19
-	'EE',
20
-	'FI',
21
-	'FR',
22
-	'DE',
23
-	'GR',
24
-	'HU',
25
-	'IE',
26
-	'IT',
27
-	'LV',
28
-	'LT',
29
-	'LU',
30
-	'MT',
31
-	'NL',
32
-	'PL',
33
-	'PT',
34
-	'RO',
35
-	'SK',
36
-	'SI',
37
-	'ES',
38
-	'SE',
12
+    'AT',
13
+    'BE',
14
+    'BG',
15
+    'HR',
16
+    'CY',
17
+    'CZ',
18
+    'DK',
19
+    'EE',
20
+    'FI',
21
+    'FR',
22
+    'DE',
23
+    'GR',
24
+    'HU',
25
+    'IE',
26
+    'IT',
27
+    'LV',
28
+    'LT',
29
+    'LU',
30
+    'MT',
31
+    'NL',
32
+    'PL',
33
+    'PT',
34
+    'RO',
35
+    'SK',
36
+    'SI',
37
+    'ES',
38
+    'SE',
39 39
 );
Please login to merge, or discard this patch.
includes/data/invoice-schema.php 1 patch
Indentation   +624 added lines, -624 removed lines patch added patch discarded remove patch
@@ -13,629 +13,629 @@
 block discarded – undo
13 13
 
14 14
 return array(
15 15
 
16
-	'id'                   => array(
17
-		'description' => __( 'Unique identifier for the invoice.', 'invoicing' ),
18
-		'type'        => 'integer',
19
-		'context'     => array( 'view', 'edit', 'embed' ),
20
-		'readonly'    => true,
21
-	),
22
-
23
-	'parent_id'            => array(
24
-		'description' => __( 'Parent invoice ID.', 'invoicing' ),
25
-		'type'        => 'integer',
26
-		'minimum'     => 0,
27
-		'default'     => 0,
28
-		'context'     => array( 'view', 'edit' ),
29
-	),
30
-
31
-	'key'                  => array(
32
-		'description' => __( 'A unique key for the invoice.', 'invoicing' ),
33
-		'type'        => 'string',
34
-		'context'     => array( 'view', 'edit' ),
35
-		'readonly'    => true,
36
-	),
37
-
38
-	'number'               => array(
39
-		'description' => __( 'A unique number for the invoice.', 'invoicing' ),
40
-		'type'        => 'string',
41
-		'context'     => array( 'view', 'edit', 'embed' ),
42
-	),
43
-
44
-	'type'                 => array(
45
-		'description' => __( 'Get the invoice type (e.g invoice, quote etc).', 'invoicing' ),
46
-		'type'        => 'string',
47
-		'context'     => array( 'view', 'edit', 'embed' ),
48
-		'readonly'    => true,
49
-	),
50
-
51
-	'post_type'            => array(
52
-		'description' => __( 'Get the invoice post type (e.g wpi_invoice, wpi_quote etc).', 'invoicing' ),
53
-		'type'        => 'string',
54
-		'context'     => array( 'view', 'edit', 'embed' ),
55
-		'readonly'    => true,
56
-	),
57
-
58
-	'version'              => array(
59
-		'description' => __( 'Version of GetPaid/Invoicing which last updated the invoice.', 'invoicing' ),
60
-		'type'        => 'integer',
61
-		'context'     => array( 'view', 'edit' ),
62
-		'readonly'    => true,
63
-	),
64
-
65
-	'template'             => array(
66
-		'description' => __( 'The invoice template.', 'invoicing' ),
67
-		'type'        => 'string',
68
-		'default'     => 'quantity',
69
-		'enum'        => array( 'quantity', 'hours', 'amount' ),
70
-		'context'     => array( 'view', 'edit', 'embed' ),
71
-	),
72
-
73
-	'status'               => array(
74
-		'description' => __( 'Invoice status.', 'invoicing' ),
75
-		'type'        => 'string',
76
-		'default'     => 'wpi-pending',
77
-		'enum'        => array_keys( wpinv_get_invoice_statuses( true ) ),
78
-		'context'     => array( 'view', 'edit', 'embed' ),
79
-	),
80
-
81
-	'status_nicename'      => array(
82
-		'description' => __( 'A human readable name for the invoice status.', 'invoicing' ),
83
-		'type'        => 'string',
84
-		'context'     => array( 'view', 'edit', 'embed' ),
85
-		'readonly'    => true,
86
-	),
87
-
88
-	'currency'             => array(
89
-		'description' => __( 'The invoice currency in ISO format.', 'invoicing' ),
90
-		'type'        => 'string',
91
-		'default'     => wpinv_get_currency(),
92
-		'enum'        => array_keys( wpinv_get_currencies() ),
93
-		'context'     => array( 'view', 'edit', 'embed' ),
94
-	),
95
-
96
-	'date_created'         => array(
97
-		'description' => __( "The date the invoice was created, in the site's timezone.", 'invoicing' ),
98
-		'type'        => 'string',
99
-		'context'     => array( 'view', 'edit', 'embed' ),
100
-	),
101
-
102
-	'date_created_gmt'     => array(
103
-		'description' => __( 'The GMT date the invoice was created.', 'invoicing' ),
104
-		'type'        => 'string',
105
-		'context'     => array( 'view', 'edit', 'embed' ),
106
-		'readonly'    => true,
107
-	),
108
-
109
-	'date_modified'        => array(
110
-		'description' => __( "The date the invoice was last modified, in the site's timezone.", 'invoicing' ),
111
-		'type'        => 'string',
112
-		'context'     => array( 'view', 'edit', 'embed' ),
113
-		'readonly'    => true,
114
-	),
115
-
116
-	'date_modified_gmt'    => array(
117
-		'description' => __( 'The GMT date the invoice was last modified.', 'invoicing' ),
118
-		'type'        => 'string',
119
-		'context'     => array( 'view', 'edit', 'embed' ),
120
-		'readonly'    => true,
121
-	),
122
-
123
-	'due_date'             => array(
124
-		'description' => __( "The invoice's due date, in the site's timezone.", 'invoicing' ),
125
-		'type'        => 'string',
126
-		'context'     => array( 'view', 'edit', 'embed' ),
127
-	),
128
-
129
-	'due_date_gmt'         => array(
130
-		'description' => __( 'The GMT date the invoice is/was due.', 'invoicing' ),
131
-		'type'        => 'string',
132
-		'context'     => array( 'view', 'edit', 'embed' ),
133
-		'readonly'    => true,
134
-	),
135
-
136
-	'completed_date'       => array(
137
-		'description' => __( "The date the invoice was paid, in the site's timezone.", 'invoicing' ),
138
-		'type'        => 'string',
139
-		'context'     => array( 'view', 'edit', 'embed' ),
140
-		'readonly'    => true,
141
-	),
142
-
143
-	'completed_date_gmt'   => array(
144
-		'description' => __( 'The GMT date the invoice was paid.', 'invoicing' ),
145
-		'type'        => 'string',
146
-		'context'     => array( 'view', 'edit', 'embed' ),
147
-		'readonly'    => true,
148
-	),
149
-
150
-	'total_discount'       => array(
151
-		'description' => __( 'Total discount amount for the invoice.', 'invoicing' ),
152
-		'type'        => 'number',
153
-		'context'     => array( 'view', 'edit', 'embed' ),
154
-		'readonly'    => true,
155
-	),
156
-
157
-	'total_tax'            => array(
158
-		'description' => __( 'Total tax amount for the invoice.', 'invoicing' ),
159
-		'type'        => 'number',
160
-		'context'     => array( 'view', 'edit', 'embed' ),
161
-		'readonly'    => true,
162
-	),
163
-
164
-	'total_fees'           => array(
165
-		'description' => __( 'Total fees amount for the invoice.', 'invoicing' ),
166
-		'type'        => 'number',
167
-		'context'     => array( 'view', 'edit', 'embed' ),
168
-		'readonly'    => true,
169
-	),
170
-
171
-	'subtotal'             => array(
172
-		'description' => __( 'Invoice subtotal.', 'invoicing' ),
173
-		'type'        => 'number',
174
-		'context'     => array( 'view', 'edit', 'embed' ),
175
-		'readonly'    => true,
176
-	),
177
-
178
-	'total'                => array(
179
-		'description' => __( 'Grand total.', 'invoicing' ),
180
-		'type'        => 'number',
181
-		'context'     => array( 'view', 'edit', 'embed' ),
182
-		'readonly'    => true,
183
-	),
184
-
185
-	'initial_total'        => array(
186
-		'description' => __( 'Initial total (for recurring invoices).', 'invoicing' ),
187
-		'type'        => 'number',
188
-		'context'     => array( 'view', 'edit', 'embed' ),
189
-		'readonly'    => true,
190
-	),
191
-
192
-	'recurring_total'      => array(
193
-		'description' => __( 'Recurring total (for recurring invoices).', 'invoicing' ),
194
-		'type'        => 'number',
195
-		'context'     => array( 'view', 'edit', 'embed' ),
196
-		'readonly'    => true,
197
-	),
198
-
199
-	'totals'               => array(
200
-		'description' => __( 'Invoice totals.', 'invoicing' ),
201
-		'type'        => 'object',
202
-		'context'     => array( 'view', 'edit', 'embed' ),
203
-		'readonly'    => true,
204
-	),
205
-
206
-	'fees'                 => array(
207
-		'description' => __( 'Invoice fees (Name => properties).', 'invoicing' ),
208
-		'type'        => 'object',
209
-		'context'     => array( 'view', 'edit', 'embed' ),
210
-		'items'       => array(
211
-			'type'       => 'object',
212
-			'required'   => array( 'amount' ),
213
-			'properties' => array(
214
-				'amount'    => array(
215
-					'description' => __( 'Fee amount.', 'invoicing' ),
216
-					'type'        => 'string',
217
-					'context'     => array( 'view', 'edit', 'embed' ),
218
-				),
219
-				'recurring' => array(
220
-					'description' => __( 'Whether this is a recurring or one-time fee.', 'invoicing' ),
221
-					'type'        => array( 'boolean', 'integer' ),
222
-					'context'     => array( 'view', 'edit', 'embed' ),
223
-				),
224
-			),
225
-		),
226
-	),
227
-
228
-	'discounts'            => array(
229
-		'description' => __( 'Invoice discounts (Name => properties).', 'invoicing' ),
230
-		'type'        => 'object',
231
-		'context'     => array( 'view', 'edit', 'embed' ),
232
-		'items'       => array(
233
-			'type'       => 'object',
234
-			'required'   => array( 'amount' ),
235
-			'properties' => array(
236
-				'amount'    => array(
237
-					'description' => __( 'Fee amount.', 'invoicing' ),
238
-					'type'        => 'string',
239
-					'context'     => array( 'view', 'edit', 'embed' ),
240
-				),
241
-				'recurring' => array(
242
-					'description' => __( 'Whether this is a recurring or one-time discount.', 'invoicing' ),
243
-					'type'        => array( 'boolean', 'integer' ),
244
-					'context'     => array( 'view', 'edit', 'embed' ),
245
-				),
246
-			),
247
-		),
248
-	),
249
-
250
-	'taxes'                => array(
251
-		'description' => __( 'Invoice taxes (Name => properties).', 'invoicing' ),
252
-		'type'        => 'object',
253
-		'context'     => array( 'view', 'edit', 'embed' ),
254
-		'items'       => array(
255
-			'type'       => 'object',
256
-			'required'   => array( 'amount' ),
257
-			'properties' => array(
258
-				'amount'    => array(
259
-					'description' => __( 'Fee amount.', 'invoicing' ),
260
-					'type'        => 'string',
261
-					'context'     => array( 'view', 'edit', 'embed' ),
262
-				),
263
-				'recurring' => array(
264
-					'description' => __( 'Whether this is a recurring or one-time tax.', 'invoicing' ),
265
-					'type'        => array( 'boolean', 'integer' ),
266
-					'context'     => array( 'view', 'edit', 'embed' ),
267
-				),
268
-			),
269
-		),
270
-	),
271
-
272
-	'items'                => array(
273
-		'description' => __( 'Invoice items.', 'invoicing' ),
274
-		'type'        => 'array',
275
-		'context'     => array( 'view', 'edit', 'embed' ),
276
-		'items'       => array(
277
-			'type'       => 'object',
278
-			'required'   => array( 'item_id' ),
279
-			'properties' => array(
280
-				'item_id'          => array(
281
-					'description' => __( 'Item ID.', 'invoicing' ),
282
-					'type'        => 'integer',
283
-					'context'     => array( 'view', 'edit', 'embed' ),
284
-				),
285
-				'item_name'        => array(
286
-					'description' => __( 'Item Name.', 'invoicing' ),
287
-					'type'        => 'string',
288
-					'context'     => array( 'view', 'edit', 'embed' ),
289
-				),
290
-				'item_description' => array(
291
-					'description' => __( 'Item Description.', 'invoicing' ),
292
-					'type'        => 'string',
293
-					'context'     => array( 'view', 'edit', 'embed' ),
294
-				),
295
-				'item_price'       => array(
296
-					'description' => __( 'Item Price.', 'invoicing' ),
297
-					'type'        => 'number',
298
-					'context'     => array( 'view', 'edit', 'embed' ),
299
-				),
300
-				'quantity'         => array(
301
-					'description' => __( 'Item Quantity.', 'invoicing' ),
302
-					'type'        => 'number',
303
-					'context'     => array( 'view', 'edit', 'embed' ),
304
-				),
305
-				'subtotal'         => array(
306
-					'description' => __( 'Item Subtotal.', 'invoicing' ),
307
-					'type'        => 'number',
308
-					'context'     => array( 'view', 'edit', 'embed' ),
309
-					'readonly'    => true,
310
-				),
311
-				'meta'             => array(
312
-					'description' => __( 'Item Meta.', 'invoicing' ),
313
-					'type'        => 'object',
314
-					'context'     => array( 'view', 'edit', 'embed' ),
315
-				),
316
-			),
317
-		),
318
-	),
319
-
320
-	'mode'                 => array(
321
-		'description' => __( 'The invoice transaction mode.', 'invoicing' ),
322
-		'type'        => 'string',
323
-		'context'     => array( 'view', 'edit', 'embed' ),
324
-		'enum'        => array( 'live', 'test' ),
325
-		'readonly'    => true,
326
-	),
327
-
328
-	'discount_code'        => array(
329
-		'description' => __( 'The discount code used on this invoice.', 'invoicing' ),
330
-		'type'        => 'string',
331
-		'context'     => array( 'view', 'edit', 'embed' ),
332
-	),
333
-
334
-	'gateway'              => array(
335
-		'description' => __( 'The gateway used to pay this invoice.', 'invoicing' ),
336
-		'type'        => 'string',
337
-		'context'     => array( 'view', 'edit', 'embed' ),
338
-	),
339
-
340
-	'gateway_title'        => array(
341
-		'description' => __( 'The title of the gateway used to pay this invoice.', 'invoicing' ),
342
-		'type'        => 'string',
343
-		'context'     => array( 'view', 'edit', 'embed' ),
344
-		'readonly'    => true,
345
-	),
346
-
347
-	'transaction_id'       => array(
348
-		'description' => __( 'The transaction id for this invoice.', 'invoicing' ),
349
-		'type'        => 'string',
350
-		'context'     => array( 'view', 'edit', 'embed' ),
351
-	),
352
-
353
-	'disable_taxes'        => array(
354
-		'description' => __( 'Whether or not taxes should be disabled for this invoice.', 'invoicing' ),
355
-		'type'        => 'boolean ',
356
-		'context'     => array( 'view', 'edit', 'embed' ),
357
-	),
358
-
359
-	'is_viewed'            => array(
360
-		'description' => __( 'Whether or not this invoice has been viewed by the user.', 'invoicing' ),
361
-		'type'        => 'boolean ',
362
-		'context'     => array( 'view', 'edit', 'embed' ),
363
-		'readonly'    => true,
364
-	),
365
-
366
-	'email_cc'             => array(
367
-		'description' => __( 'A comma separated list of other emails that should receive communications for this invoice.', 'invoicing' ),
368
-		'type'        => 'string ',
369
-		'context'     => array( 'view', 'edit' ),
370
-	),
371
-
372
-	'subscription_id'      => array(
373
-		'description' => __( 'The ID of the subscription associated with this invoice.', 'invoicing' ),
374
-		'type'        => 'string ',
375
-		'context'     => array( 'view', 'edit', 'embed' ),
376
-		'readonly'    => true,
377
-	),
378
-
379
-	'subscription_name'    => array(
380
-		'description' => __( 'The name of the subscription associated with this invoice.', 'invoicing' ),
381
-		'type'        => 'string ',
382
-		'context'     => array( 'view', 'edit', 'embed' ),
383
-		'readonly'    => true,
384
-	),
385
-
386
-	'subscription_name'    => array(
387
-		'description' => __( 'The name of the subscription associated with this invoice.', 'invoicing' ),
388
-		'type'        => 'string ',
389
-		'context'     => array( 'view', 'edit', 'embed' ),
390
-		'readonly'    => true,
391
-	),
392
-
393
-	'is_parent'            => array(
394
-		'description' => __( 'Whether or not this is a parent invoice.', 'invoicing' ),
395
-		'type'        => 'boolean',
396
-		'context'     => array( 'view', 'edit', 'embed' ),
397
-		'readonly'    => true,
398
-	),
399
-
400
-	'is_renewal'           => array(
401
-		'description' => __( 'Whether or not this is a renewal invoice.', 'invoicing' ),
402
-		'type'        => 'boolean',
403
-		'context'     => array( 'view', 'edit', 'embed' ),
404
-		'readonly'    => true,
405
-	),
406
-
407
-	'is_recurring'         => array(
408
-		'description' => __( 'Whether or not this is a recurring invoice.', 'invoicing' ),
409
-		'type'        => 'boolean',
410
-		'context'     => array( 'view', 'edit', 'embed' ),
411
-		'readonly'    => true,
412
-	),
413
-
414
-	'is_free'              => array(
415
-		'description' => __( 'Whether or not this invoice is free.', 'invoicing' ),
416
-		'type'        => 'boolean',
417
-		'context'     => array( 'view', 'edit', 'embed' ),
418
-		'readonly'    => true,
419
-	),
420
-
421
-	'is_paid'              => array(
422
-		'description' => __( 'Whether or not this invoice has been paid.', 'invoicing' ),
423
-		'type'        => 'boolean',
424
-		'context'     => array( 'view', 'edit', 'embed' ),
425
-		'readonly'    => true,
426
-	),
427
-
428
-	'needs_payment'        => array(
429
-		'description' => __( 'Whether or not this invoice needs payment.', 'invoicing' ),
430
-		'type'        => 'boolean',
431
-		'context'     => array( 'view', 'edit', 'embed' ),
432
-		'readonly'    => true,
433
-	),
434
-
435
-	'is_refunded'          => array(
436
-		'description' => __( 'Whether or not this invoice was refunded.', 'invoicing' ),
437
-		'type'        => 'boolean',
438
-		'context'     => array( 'view', 'edit', 'embed' ),
439
-		'readonly'    => true,
440
-	),
441
-
442
-	'is_due'               => array(
443
-		'description' => __( 'Whether or not this invoice is due.', 'invoicing' ),
444
-		'type'        => 'boolean',
445
-		'context'     => array( 'view', 'edit', 'embed' ),
446
-		'readonly'    => true,
447
-	),
448
-
449
-	'is_held'              => array(
450
-		'description' => __( 'Whether or not this invoice has been held for payment confirmation.', 'invoicing' ),
451
-		'type'        => 'boolean',
452
-		'context'     => array( 'view', 'edit', 'embed' ),
453
-		'readonly'    => true,
454
-	),
455
-
456
-	'is_draft'             => array(
457
-		'description' => __( 'Whether or not this invoice is marked as draft (cannot be viewed on the frontend).', 'invoicing' ),
458
-		'type'        => 'boolean',
459
-		'context'     => array( 'view', 'edit', 'embed' ),
460
-		'readonly'    => true,
461
-	),
462
-
463
-	'path'                 => array(
464
-		'description' => __( 'The invoice path/slug/name.', 'invoicing' ),
465
-		'type'        => 'string',
466
-		'context'     => array( 'view', 'edit', 'embed' ),
467
-		'readonly'    => true,
468
-	),
469
-
470
-	'description'          => array(
471
-		'description' => __( 'The invoice description.', 'invoicing' ),
472
-		'type'        => 'string',
473
-		'context'     => array( 'view', 'edit', 'embed' ),
474
-	),
475
-
476
-	'payment_form'         => array(
477
-		'description' => __( 'The id of the payment form used to pay for this invoice.', 'invoicing' ),
478
-		'type'        => 'integer',
479
-		'context'     => array( 'view', 'edit' ),
480
-		'readonly'    => true,
481
-	),
482
-
483
-	'submission_id'        => array(
484
-		'description' => __( 'A uniques ID of the submission details used to pay for this invoice.', 'invoicing' ),
485
-		'type'        => 'string',
486
-		'context'     => array( 'view', 'edit' ),
487
-		'readonly'    => true,
488
-	),
489
-
490
-	'customer_id'          => array(
491
-		'description' => __( 'The customer id.', 'invoicing' ),
492
-		'type'        => 'integer',
493
-		'context'     => array( 'view', 'edit', 'embed' ),
494
-	),
495
-
496
-	'customer_ip'          => array(
497
-		'description' => __( "The customer's ip address.", 'invoicing' ),
498
-		'type'        => 'string',
499
-		'format'      => 'ip',
500
-		'context'     => array( 'view', 'edit', 'embed' ),
501
-	),
502
-
503
-	'first_name'           => array(
504
-		'description' => __( "The customer's first name.", 'invoicing' ),
505
-		'type'        => 'string',
506
-		'context'     => array( 'view', 'edit', 'embed' ),
507
-	),
508
-
509
-	'last_name'            => array(
510
-		'description' => __( "The customer's last name.", 'invoicing' ),
511
-		'type'        => 'string',
512
-		'context'     => array( 'view', 'edit', 'embed' ),
513
-	),
514
-
515
-	'full_name'            => array(
516
-		'description' => __( "The customer's full name.", 'invoicing' ),
517
-		'type'        => 'string',
518
-		'context'     => array( 'view', 'edit', 'embed' ),
519
-		'readonly'    => true,
520
-	),
521
-
522
-	'phone_number'         => array(
523
-		'description' => __( "The customer's phone number.", 'invoicing' ),
524
-		'type'        => 'string',
525
-		'context'     => array( 'view', 'edit', 'embed' ),
526
-	),
527
-
528
-	'email_address'        => array(
529
-		'description' => __( "The customer's email address.", 'invoicing' ),
530
-		'type'        => 'string',
531
-		'context'     => array( 'view', 'edit', 'embed' ),
532
-		'readonly'    => true,
533
-	),
534
-
535
-	'customer_country'     => array(
536
-		'description' => __( "The customer's country.", 'invoicing' ),
537
-		'type'        => 'string',
538
-		'context'     => array( 'view', 'edit', 'embed' ),
539
-		'default'     => wpinv_get_default_country(),
540
-	),
541
-
542
-	'customer_state'       => array(
543
-		'description' => __( "The customer's state.", 'invoicing' ),
544
-		'type'        => 'string',
545
-		'context'     => array( 'view', 'edit', 'embed' ),
546
-	),
547
-
548
-	'customer_city'        => array(
549
-		'description' => __( "The customer's city.", 'invoicing' ),
550
-		'type'        => 'string',
551
-		'context'     => array( 'view', 'edit', 'embed' ),
552
-	),
553
-
554
-	'customer_zip'         => array(
555
-		'description' => __( "The customer's zip/postal code.", 'invoicing' ),
556
-		'type'        => 'string',
557
-		'context'     => array( 'view', 'edit', 'embed' ),
558
-	),
559
-
560
-	'customer_company'     => array(
561
-		'description' => __( "The customer's company name.", 'invoicing' ),
562
-		'type'        => 'string',
563
-		'context'     => array( 'view', 'edit', 'embed' ),
564
-	),
565
-
566
-	'vat_number'           => array(
567
-		'description' => __( "The customer's VAT number.", 'invoicing' ),
568
-		'type'        => 'string',
569
-		'context'     => array( 'view', 'edit', 'embed' ),
570
-	),
571
-
572
-	'vat_rate'             => array(
573
-		'description' => __( "The customer's VAT rate.", 'invoicing' ),
574
-		'type'        => 'number',
575
-		'context'     => array( 'view', 'edit', 'embed' ),
576
-		'readonly'    => true,
577
-	),
578
-
579
-	'customer_address'     => array(
580
-		'description' => __( "The customer's address.", 'invoicing' ),
581
-		'type'        => 'string',
582
-		'context'     => array( 'view', 'edit', 'embed' ),
583
-	),
584
-
585
-	'address_confirmed'    => array(
586
-		'description' => __( "Whether or not the customer's address is confirmed.", 'invoicing' ),
587
-		'type'        => 'boolean',
588
-		'context'     => array( 'view', 'edit', 'embed' ),
589
-	),
590
-
591
-	'meta_data'            => array(
592
-		'description' => __( 'Invoice meta data.', 'invoicing' ),
593
-		'type'        => 'array',
594
-		'context'     => array( 'view', 'edit', 'embed' ),
595
-		'items'       => array(
596
-			'type'       => 'object',
597
-			'properties' => array(
598
-				'id'    => array(
599
-					'description' => __( 'Meta ID.', 'invoicing' ),
600
-					'type'        => 'string',
601
-					'context'     => array( 'view', 'edit', 'embed' ),
602
-				),
603
-				'key'   => array(
604
-					'description' => __( 'Meta key.', 'invoicing' ),
605
-					'type'        => 'string',
606
-					'context'     => array( 'view', 'edit', 'embed' ),
607
-				),
608
-				'value' => array(
609
-					'description' => __( 'Meta Value.', 'invoicing' ),
610
-					'type'        => array( 'string', 'array', 'object', 'integer', 'null' ),
611
-					'context'     => array( 'view', 'edit', 'embed' ),
612
-				),
613
-			),
614
-		),
615
-	),
616
-
617
-	'view_url'             => array(
618
-		'description' => __( 'URL to the invoice.', 'invoicing' ),
619
-		'type'        => 'string',
620
-		'format'      => 'uri',
621
-		'context'     => array( 'view', 'edit', 'embed' ),
622
-		'readonly'    => true,
623
-	),
624
-
625
-	'checkout_payment_url' => array(
626
-		'description' => __( 'URL to the invoice checkout page.', 'invoicing' ),
627
-		'type'        => 'string',
628
-		'format'      => 'uri',
629
-		'context'     => array( 'view', 'edit', 'embed' ),
630
-		'readonly'    => true,
631
-	),
632
-
633
-	'receipt_url'          => array(
634
-		'description' => __( 'URL to the invoice receipt page.', 'invoicing' ),
635
-		'type'        => 'string',
636
-		'format'      => 'uri',
637
-		'context'     => array( 'view', 'edit', 'embed' ),
638
-		'readonly'    => true,
639
-	),
16
+    'id'                   => array(
17
+        'description' => __( 'Unique identifier for the invoice.', 'invoicing' ),
18
+        'type'        => 'integer',
19
+        'context'     => array( 'view', 'edit', 'embed' ),
20
+        'readonly'    => true,
21
+    ),
22
+
23
+    'parent_id'            => array(
24
+        'description' => __( 'Parent invoice ID.', 'invoicing' ),
25
+        'type'        => 'integer',
26
+        'minimum'     => 0,
27
+        'default'     => 0,
28
+        'context'     => array( 'view', 'edit' ),
29
+    ),
30
+
31
+    'key'                  => array(
32
+        'description' => __( 'A unique key for the invoice.', 'invoicing' ),
33
+        'type'        => 'string',
34
+        'context'     => array( 'view', 'edit' ),
35
+        'readonly'    => true,
36
+    ),
37
+
38
+    'number'               => array(
39
+        'description' => __( 'A unique number for the invoice.', 'invoicing' ),
40
+        'type'        => 'string',
41
+        'context'     => array( 'view', 'edit', 'embed' ),
42
+    ),
43
+
44
+    'type'                 => array(
45
+        'description' => __( 'Get the invoice type (e.g invoice, quote etc).', 'invoicing' ),
46
+        'type'        => 'string',
47
+        'context'     => array( 'view', 'edit', 'embed' ),
48
+        'readonly'    => true,
49
+    ),
50
+
51
+    'post_type'            => array(
52
+        'description' => __( 'Get the invoice post type (e.g wpi_invoice, wpi_quote etc).', 'invoicing' ),
53
+        'type'        => 'string',
54
+        'context'     => array( 'view', 'edit', 'embed' ),
55
+        'readonly'    => true,
56
+    ),
57
+
58
+    'version'              => array(
59
+        'description' => __( 'Version of GetPaid/Invoicing which last updated the invoice.', 'invoicing' ),
60
+        'type'        => 'integer',
61
+        'context'     => array( 'view', 'edit' ),
62
+        'readonly'    => true,
63
+    ),
64
+
65
+    'template'             => array(
66
+        'description' => __( 'The invoice template.', 'invoicing' ),
67
+        'type'        => 'string',
68
+        'default'     => 'quantity',
69
+        'enum'        => array( 'quantity', 'hours', 'amount' ),
70
+        'context'     => array( 'view', 'edit', 'embed' ),
71
+    ),
72
+
73
+    'status'               => array(
74
+        'description' => __( 'Invoice status.', 'invoicing' ),
75
+        'type'        => 'string',
76
+        'default'     => 'wpi-pending',
77
+        'enum'        => array_keys( wpinv_get_invoice_statuses( true ) ),
78
+        'context'     => array( 'view', 'edit', 'embed' ),
79
+    ),
80
+
81
+    'status_nicename'      => array(
82
+        'description' => __( 'A human readable name for the invoice status.', 'invoicing' ),
83
+        'type'        => 'string',
84
+        'context'     => array( 'view', 'edit', 'embed' ),
85
+        'readonly'    => true,
86
+    ),
87
+
88
+    'currency'             => array(
89
+        'description' => __( 'The invoice currency in ISO format.', 'invoicing' ),
90
+        'type'        => 'string',
91
+        'default'     => wpinv_get_currency(),
92
+        'enum'        => array_keys( wpinv_get_currencies() ),
93
+        'context'     => array( 'view', 'edit', 'embed' ),
94
+    ),
95
+
96
+    'date_created'         => array(
97
+        'description' => __( "The date the invoice was created, in the site's timezone.", 'invoicing' ),
98
+        'type'        => 'string',
99
+        'context'     => array( 'view', 'edit', 'embed' ),
100
+    ),
101
+
102
+    'date_created_gmt'     => array(
103
+        'description' => __( 'The GMT date the invoice was created.', 'invoicing' ),
104
+        'type'        => 'string',
105
+        'context'     => array( 'view', 'edit', 'embed' ),
106
+        'readonly'    => true,
107
+    ),
108
+
109
+    'date_modified'        => array(
110
+        'description' => __( "The date the invoice was last modified, in the site's timezone.", 'invoicing' ),
111
+        'type'        => 'string',
112
+        'context'     => array( 'view', 'edit', 'embed' ),
113
+        'readonly'    => true,
114
+    ),
115
+
116
+    'date_modified_gmt'    => array(
117
+        'description' => __( 'The GMT date the invoice was last modified.', 'invoicing' ),
118
+        'type'        => 'string',
119
+        'context'     => array( 'view', 'edit', 'embed' ),
120
+        'readonly'    => true,
121
+    ),
122
+
123
+    'due_date'             => array(
124
+        'description' => __( "The invoice's due date, in the site's timezone.", 'invoicing' ),
125
+        'type'        => 'string',
126
+        'context'     => array( 'view', 'edit', 'embed' ),
127
+    ),
128
+
129
+    'due_date_gmt'         => array(
130
+        'description' => __( 'The GMT date the invoice is/was due.', 'invoicing' ),
131
+        'type'        => 'string',
132
+        'context'     => array( 'view', 'edit', 'embed' ),
133
+        'readonly'    => true,
134
+    ),
135
+
136
+    'completed_date'       => array(
137
+        'description' => __( "The date the invoice was paid, in the site's timezone.", 'invoicing' ),
138
+        'type'        => 'string',
139
+        'context'     => array( 'view', 'edit', 'embed' ),
140
+        'readonly'    => true,
141
+    ),
142
+
143
+    'completed_date_gmt'   => array(
144
+        'description' => __( 'The GMT date the invoice was paid.', 'invoicing' ),
145
+        'type'        => 'string',
146
+        'context'     => array( 'view', 'edit', 'embed' ),
147
+        'readonly'    => true,
148
+    ),
149
+
150
+    'total_discount'       => array(
151
+        'description' => __( 'Total discount amount for the invoice.', 'invoicing' ),
152
+        'type'        => 'number',
153
+        'context'     => array( 'view', 'edit', 'embed' ),
154
+        'readonly'    => true,
155
+    ),
156
+
157
+    'total_tax'            => array(
158
+        'description' => __( 'Total tax amount for the invoice.', 'invoicing' ),
159
+        'type'        => 'number',
160
+        'context'     => array( 'view', 'edit', 'embed' ),
161
+        'readonly'    => true,
162
+    ),
163
+
164
+    'total_fees'           => array(
165
+        'description' => __( 'Total fees amount for the invoice.', 'invoicing' ),
166
+        'type'        => 'number',
167
+        'context'     => array( 'view', 'edit', 'embed' ),
168
+        'readonly'    => true,
169
+    ),
170
+
171
+    'subtotal'             => array(
172
+        'description' => __( 'Invoice subtotal.', 'invoicing' ),
173
+        'type'        => 'number',
174
+        'context'     => array( 'view', 'edit', 'embed' ),
175
+        'readonly'    => true,
176
+    ),
177
+
178
+    'total'                => array(
179
+        'description' => __( 'Grand total.', 'invoicing' ),
180
+        'type'        => 'number',
181
+        'context'     => array( 'view', 'edit', 'embed' ),
182
+        'readonly'    => true,
183
+    ),
184
+
185
+    'initial_total'        => array(
186
+        'description' => __( 'Initial total (for recurring invoices).', 'invoicing' ),
187
+        'type'        => 'number',
188
+        'context'     => array( 'view', 'edit', 'embed' ),
189
+        'readonly'    => true,
190
+    ),
191
+
192
+    'recurring_total'      => array(
193
+        'description' => __( 'Recurring total (for recurring invoices).', 'invoicing' ),
194
+        'type'        => 'number',
195
+        'context'     => array( 'view', 'edit', 'embed' ),
196
+        'readonly'    => true,
197
+    ),
198
+
199
+    'totals'               => array(
200
+        'description' => __( 'Invoice totals.', 'invoicing' ),
201
+        'type'        => 'object',
202
+        'context'     => array( 'view', 'edit', 'embed' ),
203
+        'readonly'    => true,
204
+    ),
205
+
206
+    'fees'                 => array(
207
+        'description' => __( 'Invoice fees (Name => properties).', 'invoicing' ),
208
+        'type'        => 'object',
209
+        'context'     => array( 'view', 'edit', 'embed' ),
210
+        'items'       => array(
211
+            'type'       => 'object',
212
+            'required'   => array( 'amount' ),
213
+            'properties' => array(
214
+                'amount'    => array(
215
+                    'description' => __( 'Fee amount.', 'invoicing' ),
216
+                    'type'        => 'string',
217
+                    'context'     => array( 'view', 'edit', 'embed' ),
218
+                ),
219
+                'recurring' => array(
220
+                    'description' => __( 'Whether this is a recurring or one-time fee.', 'invoicing' ),
221
+                    'type'        => array( 'boolean', 'integer' ),
222
+                    'context'     => array( 'view', 'edit', 'embed' ),
223
+                ),
224
+            ),
225
+        ),
226
+    ),
227
+
228
+    'discounts'            => array(
229
+        'description' => __( 'Invoice discounts (Name => properties).', 'invoicing' ),
230
+        'type'        => 'object',
231
+        'context'     => array( 'view', 'edit', 'embed' ),
232
+        'items'       => array(
233
+            'type'       => 'object',
234
+            'required'   => array( 'amount' ),
235
+            'properties' => array(
236
+                'amount'    => array(
237
+                    'description' => __( 'Fee amount.', 'invoicing' ),
238
+                    'type'        => 'string',
239
+                    'context'     => array( 'view', 'edit', 'embed' ),
240
+                ),
241
+                'recurring' => array(
242
+                    'description' => __( 'Whether this is a recurring or one-time discount.', 'invoicing' ),
243
+                    'type'        => array( 'boolean', 'integer' ),
244
+                    'context'     => array( 'view', 'edit', 'embed' ),
245
+                ),
246
+            ),
247
+        ),
248
+    ),
249
+
250
+    'taxes'                => array(
251
+        'description' => __( 'Invoice taxes (Name => properties).', 'invoicing' ),
252
+        'type'        => 'object',
253
+        'context'     => array( 'view', 'edit', 'embed' ),
254
+        'items'       => array(
255
+            'type'       => 'object',
256
+            'required'   => array( 'amount' ),
257
+            'properties' => array(
258
+                'amount'    => array(
259
+                    'description' => __( 'Fee amount.', 'invoicing' ),
260
+                    'type'        => 'string',
261
+                    'context'     => array( 'view', 'edit', 'embed' ),
262
+                ),
263
+                'recurring' => array(
264
+                    'description' => __( 'Whether this is a recurring or one-time tax.', 'invoicing' ),
265
+                    'type'        => array( 'boolean', 'integer' ),
266
+                    'context'     => array( 'view', 'edit', 'embed' ),
267
+                ),
268
+            ),
269
+        ),
270
+    ),
271
+
272
+    'items'                => array(
273
+        'description' => __( 'Invoice items.', 'invoicing' ),
274
+        'type'        => 'array',
275
+        'context'     => array( 'view', 'edit', 'embed' ),
276
+        'items'       => array(
277
+            'type'       => 'object',
278
+            'required'   => array( 'item_id' ),
279
+            'properties' => array(
280
+                'item_id'          => array(
281
+                    'description' => __( 'Item ID.', 'invoicing' ),
282
+                    'type'        => 'integer',
283
+                    'context'     => array( 'view', 'edit', 'embed' ),
284
+                ),
285
+                'item_name'        => array(
286
+                    'description' => __( 'Item Name.', 'invoicing' ),
287
+                    'type'        => 'string',
288
+                    'context'     => array( 'view', 'edit', 'embed' ),
289
+                ),
290
+                'item_description' => array(
291
+                    'description' => __( 'Item Description.', 'invoicing' ),
292
+                    'type'        => 'string',
293
+                    'context'     => array( 'view', 'edit', 'embed' ),
294
+                ),
295
+                'item_price'       => array(
296
+                    'description' => __( 'Item Price.', 'invoicing' ),
297
+                    'type'        => 'number',
298
+                    'context'     => array( 'view', 'edit', 'embed' ),
299
+                ),
300
+                'quantity'         => array(
301
+                    'description' => __( 'Item Quantity.', 'invoicing' ),
302
+                    'type'        => 'number',
303
+                    'context'     => array( 'view', 'edit', 'embed' ),
304
+                ),
305
+                'subtotal'         => array(
306
+                    'description' => __( 'Item Subtotal.', 'invoicing' ),
307
+                    'type'        => 'number',
308
+                    'context'     => array( 'view', 'edit', 'embed' ),
309
+                    'readonly'    => true,
310
+                ),
311
+                'meta'             => array(
312
+                    'description' => __( 'Item Meta.', 'invoicing' ),
313
+                    'type'        => 'object',
314
+                    'context'     => array( 'view', 'edit', 'embed' ),
315
+                ),
316
+            ),
317
+        ),
318
+    ),
319
+
320
+    'mode'                 => array(
321
+        'description' => __( 'The invoice transaction mode.', 'invoicing' ),
322
+        'type'        => 'string',
323
+        'context'     => array( 'view', 'edit', 'embed' ),
324
+        'enum'        => array( 'live', 'test' ),
325
+        'readonly'    => true,
326
+    ),
327
+
328
+    'discount_code'        => array(
329
+        'description' => __( 'The discount code used on this invoice.', 'invoicing' ),
330
+        'type'        => 'string',
331
+        'context'     => array( 'view', 'edit', 'embed' ),
332
+    ),
333
+
334
+    'gateway'              => array(
335
+        'description' => __( 'The gateway used to pay this invoice.', 'invoicing' ),
336
+        'type'        => 'string',
337
+        'context'     => array( 'view', 'edit', 'embed' ),
338
+    ),
339
+
340
+    'gateway_title'        => array(
341
+        'description' => __( 'The title of the gateway used to pay this invoice.', 'invoicing' ),
342
+        'type'        => 'string',
343
+        'context'     => array( 'view', 'edit', 'embed' ),
344
+        'readonly'    => true,
345
+    ),
346
+
347
+    'transaction_id'       => array(
348
+        'description' => __( 'The transaction id for this invoice.', 'invoicing' ),
349
+        'type'        => 'string',
350
+        'context'     => array( 'view', 'edit', 'embed' ),
351
+    ),
352
+
353
+    'disable_taxes'        => array(
354
+        'description' => __( 'Whether or not taxes should be disabled for this invoice.', 'invoicing' ),
355
+        'type'        => 'boolean ',
356
+        'context'     => array( 'view', 'edit', 'embed' ),
357
+    ),
358
+
359
+    'is_viewed'            => array(
360
+        'description' => __( 'Whether or not this invoice has been viewed by the user.', 'invoicing' ),
361
+        'type'        => 'boolean ',
362
+        'context'     => array( 'view', 'edit', 'embed' ),
363
+        'readonly'    => true,
364
+    ),
365
+
366
+    'email_cc'             => array(
367
+        'description' => __( 'A comma separated list of other emails that should receive communications for this invoice.', 'invoicing' ),
368
+        'type'        => 'string ',
369
+        'context'     => array( 'view', 'edit' ),
370
+    ),
371
+
372
+    'subscription_id'      => array(
373
+        'description' => __( 'The ID of the subscription associated with this invoice.', 'invoicing' ),
374
+        'type'        => 'string ',
375
+        'context'     => array( 'view', 'edit', 'embed' ),
376
+        'readonly'    => true,
377
+    ),
378
+
379
+    'subscription_name'    => array(
380
+        'description' => __( 'The name of the subscription associated with this invoice.', 'invoicing' ),
381
+        'type'        => 'string ',
382
+        'context'     => array( 'view', 'edit', 'embed' ),
383
+        'readonly'    => true,
384
+    ),
385
+
386
+    'subscription_name'    => array(
387
+        'description' => __( 'The name of the subscription associated with this invoice.', 'invoicing' ),
388
+        'type'        => 'string ',
389
+        'context'     => array( 'view', 'edit', 'embed' ),
390
+        'readonly'    => true,
391
+    ),
392
+
393
+    'is_parent'            => array(
394
+        'description' => __( 'Whether or not this is a parent invoice.', 'invoicing' ),
395
+        'type'        => 'boolean',
396
+        'context'     => array( 'view', 'edit', 'embed' ),
397
+        'readonly'    => true,
398
+    ),
399
+
400
+    'is_renewal'           => array(
401
+        'description' => __( 'Whether or not this is a renewal invoice.', 'invoicing' ),
402
+        'type'        => 'boolean',
403
+        'context'     => array( 'view', 'edit', 'embed' ),
404
+        'readonly'    => true,
405
+    ),
406
+
407
+    'is_recurring'         => array(
408
+        'description' => __( 'Whether or not this is a recurring invoice.', 'invoicing' ),
409
+        'type'        => 'boolean',
410
+        'context'     => array( 'view', 'edit', 'embed' ),
411
+        'readonly'    => true,
412
+    ),
413
+
414
+    'is_free'              => array(
415
+        'description' => __( 'Whether or not this invoice is free.', 'invoicing' ),
416
+        'type'        => 'boolean',
417
+        'context'     => array( 'view', 'edit', 'embed' ),
418
+        'readonly'    => true,
419
+    ),
420
+
421
+    'is_paid'              => array(
422
+        'description' => __( 'Whether or not this invoice has been paid.', 'invoicing' ),
423
+        'type'        => 'boolean',
424
+        'context'     => array( 'view', 'edit', 'embed' ),
425
+        'readonly'    => true,
426
+    ),
427
+
428
+    'needs_payment'        => array(
429
+        'description' => __( 'Whether or not this invoice needs payment.', 'invoicing' ),
430
+        'type'        => 'boolean',
431
+        'context'     => array( 'view', 'edit', 'embed' ),
432
+        'readonly'    => true,
433
+    ),
434
+
435
+    'is_refunded'          => array(
436
+        'description' => __( 'Whether or not this invoice was refunded.', 'invoicing' ),
437
+        'type'        => 'boolean',
438
+        'context'     => array( 'view', 'edit', 'embed' ),
439
+        'readonly'    => true,
440
+    ),
441
+
442
+    'is_due'               => array(
443
+        'description' => __( 'Whether or not this invoice is due.', 'invoicing' ),
444
+        'type'        => 'boolean',
445
+        'context'     => array( 'view', 'edit', 'embed' ),
446
+        'readonly'    => true,
447
+    ),
448
+
449
+    'is_held'              => array(
450
+        'description' => __( 'Whether or not this invoice has been held for payment confirmation.', 'invoicing' ),
451
+        'type'        => 'boolean',
452
+        'context'     => array( 'view', 'edit', 'embed' ),
453
+        'readonly'    => true,
454
+    ),
455
+
456
+    'is_draft'             => array(
457
+        'description' => __( 'Whether or not this invoice is marked as draft (cannot be viewed on the frontend).', 'invoicing' ),
458
+        'type'        => 'boolean',
459
+        'context'     => array( 'view', 'edit', 'embed' ),
460
+        'readonly'    => true,
461
+    ),
462
+
463
+    'path'                 => array(
464
+        'description' => __( 'The invoice path/slug/name.', 'invoicing' ),
465
+        'type'        => 'string',
466
+        'context'     => array( 'view', 'edit', 'embed' ),
467
+        'readonly'    => true,
468
+    ),
469
+
470
+    'description'          => array(
471
+        'description' => __( 'The invoice description.', 'invoicing' ),
472
+        'type'        => 'string',
473
+        'context'     => array( 'view', 'edit', 'embed' ),
474
+    ),
475
+
476
+    'payment_form'         => array(
477
+        'description' => __( 'The id of the payment form used to pay for this invoice.', 'invoicing' ),
478
+        'type'        => 'integer',
479
+        'context'     => array( 'view', 'edit' ),
480
+        'readonly'    => true,
481
+    ),
482
+
483
+    'submission_id'        => array(
484
+        'description' => __( 'A uniques ID of the submission details used to pay for this invoice.', 'invoicing' ),
485
+        'type'        => 'string',
486
+        'context'     => array( 'view', 'edit' ),
487
+        'readonly'    => true,
488
+    ),
489
+
490
+    'customer_id'          => array(
491
+        'description' => __( 'The customer id.', 'invoicing' ),
492
+        'type'        => 'integer',
493
+        'context'     => array( 'view', 'edit', 'embed' ),
494
+    ),
495
+
496
+    'customer_ip'          => array(
497
+        'description' => __( "The customer's ip address.", 'invoicing' ),
498
+        'type'        => 'string',
499
+        'format'      => 'ip',
500
+        'context'     => array( 'view', 'edit', 'embed' ),
501
+    ),
502
+
503
+    'first_name'           => array(
504
+        'description' => __( "The customer's first name.", 'invoicing' ),
505
+        'type'        => 'string',
506
+        'context'     => array( 'view', 'edit', 'embed' ),
507
+    ),
508
+
509
+    'last_name'            => array(
510
+        'description' => __( "The customer's last name.", 'invoicing' ),
511
+        'type'        => 'string',
512
+        'context'     => array( 'view', 'edit', 'embed' ),
513
+    ),
514
+
515
+    'full_name'            => array(
516
+        'description' => __( "The customer's full name.", 'invoicing' ),
517
+        'type'        => 'string',
518
+        'context'     => array( 'view', 'edit', 'embed' ),
519
+        'readonly'    => true,
520
+    ),
521
+
522
+    'phone_number'         => array(
523
+        'description' => __( "The customer's phone number.", 'invoicing' ),
524
+        'type'        => 'string',
525
+        'context'     => array( 'view', 'edit', 'embed' ),
526
+    ),
527
+
528
+    'email_address'        => array(
529
+        'description' => __( "The customer's email address.", 'invoicing' ),
530
+        'type'        => 'string',
531
+        'context'     => array( 'view', 'edit', 'embed' ),
532
+        'readonly'    => true,
533
+    ),
534
+
535
+    'customer_country'     => array(
536
+        'description' => __( "The customer's country.", 'invoicing' ),
537
+        'type'        => 'string',
538
+        'context'     => array( 'view', 'edit', 'embed' ),
539
+        'default'     => wpinv_get_default_country(),
540
+    ),
541
+
542
+    'customer_state'       => array(
543
+        'description' => __( "The customer's state.", 'invoicing' ),
544
+        'type'        => 'string',
545
+        'context'     => array( 'view', 'edit', 'embed' ),
546
+    ),
547
+
548
+    'customer_city'        => array(
549
+        'description' => __( "The customer's city.", 'invoicing' ),
550
+        'type'        => 'string',
551
+        'context'     => array( 'view', 'edit', 'embed' ),
552
+    ),
553
+
554
+    'customer_zip'         => array(
555
+        'description' => __( "The customer's zip/postal code.", 'invoicing' ),
556
+        'type'        => 'string',
557
+        'context'     => array( 'view', 'edit', 'embed' ),
558
+    ),
559
+
560
+    'customer_company'     => array(
561
+        'description' => __( "The customer's company name.", 'invoicing' ),
562
+        'type'        => 'string',
563
+        'context'     => array( 'view', 'edit', 'embed' ),
564
+    ),
565
+
566
+    'vat_number'           => array(
567
+        'description' => __( "The customer's VAT number.", 'invoicing' ),
568
+        'type'        => 'string',
569
+        'context'     => array( 'view', 'edit', 'embed' ),
570
+    ),
571
+
572
+    'vat_rate'             => array(
573
+        'description' => __( "The customer's VAT rate.", 'invoicing' ),
574
+        'type'        => 'number',
575
+        'context'     => array( 'view', 'edit', 'embed' ),
576
+        'readonly'    => true,
577
+    ),
578
+
579
+    'customer_address'     => array(
580
+        'description' => __( "The customer's address.", 'invoicing' ),
581
+        'type'        => 'string',
582
+        'context'     => array( 'view', 'edit', 'embed' ),
583
+    ),
584
+
585
+    'address_confirmed'    => array(
586
+        'description' => __( "Whether or not the customer's address is confirmed.", 'invoicing' ),
587
+        'type'        => 'boolean',
588
+        'context'     => array( 'view', 'edit', 'embed' ),
589
+    ),
590
+
591
+    'meta_data'            => array(
592
+        'description' => __( 'Invoice meta data.', 'invoicing' ),
593
+        'type'        => 'array',
594
+        'context'     => array( 'view', 'edit', 'embed' ),
595
+        'items'       => array(
596
+            'type'       => 'object',
597
+            'properties' => array(
598
+                'id'    => array(
599
+                    'description' => __( 'Meta ID.', 'invoicing' ),
600
+                    'type'        => 'string',
601
+                    'context'     => array( 'view', 'edit', 'embed' ),
602
+                ),
603
+                'key'   => array(
604
+                    'description' => __( 'Meta key.', 'invoicing' ),
605
+                    'type'        => 'string',
606
+                    'context'     => array( 'view', 'edit', 'embed' ),
607
+                ),
608
+                'value' => array(
609
+                    'description' => __( 'Meta Value.', 'invoicing' ),
610
+                    'type'        => array( 'string', 'array', 'object', 'integer', 'null' ),
611
+                    'context'     => array( 'view', 'edit', 'embed' ),
612
+                ),
613
+            ),
614
+        ),
615
+    ),
616
+
617
+    'view_url'             => array(
618
+        'description' => __( 'URL to the invoice.', 'invoicing' ),
619
+        'type'        => 'string',
620
+        'format'      => 'uri',
621
+        'context'     => array( 'view', 'edit', 'embed' ),
622
+        'readonly'    => true,
623
+    ),
624
+
625
+    'checkout_payment_url' => array(
626
+        'description' => __( 'URL to the invoice checkout page.', 'invoicing' ),
627
+        'type'        => 'string',
628
+        'format'      => 'uri',
629
+        'context'     => array( 'view', 'edit', 'embed' ),
630
+        'readonly'    => true,
631
+    ),
632
+
633
+    'receipt_url'          => array(
634
+        'description' => __( 'URL to the invoice receipt page.', 'invoicing' ),
635
+        'type'        => 'string',
636
+        'format'      => 'uri',
637
+        'context'     => array( 'view', 'edit', 'embed' ),
638
+        'readonly'    => true,
639
+    ),
640 640
 
641 641
 );
Please login to merge, or discard this patch.