Passed
Push — master ( 0abe41...74b22c )
by Brian
10:17 queued 05:29
created
includes/class-wpinv-discount.php 2 patches
Indentation   +1278 added lines, -1278 removed lines patch added patch discarded remove patch
@@ -15,30 +15,30 @@  discard block
 block discarded – undo
15 15
  */
16 16
 class WPInv_Discount extends GetPaid_Data  {
17 17
 
18
-	/**
19
-	 * Which data store to load.
20
-	 *
21
-	 * @var string
22
-	 */
18
+    /**
19
+     * Which data store to load.
20
+     *
21
+     * @var string
22
+     */
23 23
     protected $data_store_name = 'discount';
24 24
 
25 25
     /**
26
-	 * This is the name of this object type.
27
-	 *
28
-	 * @var string
29
-	 */
30
-	protected $object_type = 'discount';
31
-
32
-	/**
33
-	 * Discount Data array. This is the core item data exposed in APIs.
34
-	 *
35
-	 * @since 1.0.19
36
-	 * @var array
37
-	 */
38
-	protected $data = array(
39
-		'status'               => 'draft',
40
-		'version'              => '',
41
-		'date_created'         => null,
26
+     * This is the name of this object type.
27
+     *
28
+     * @var string
29
+     */
30
+    protected $object_type = 'discount';
31
+
32
+    /**
33
+     * Discount Data array. This is the core item data exposed in APIs.
34
+     *
35
+     * @since 1.0.19
36
+     * @var array
37
+     */
38
+    protected $data = array(
39
+        'status'               => 'draft',
40
+        'version'              => '',
41
+        'date_created'         => null,
42 42
         'date_modified'        => null,
43 43
         'name'                 => 'no-name',
44 44
         'description'          => null,
@@ -58,144 +58,144 @@  discard block
 block discarded – undo
58 58
         'amount'               => null,
59 59
     );
60 60
 
61
-	/**
62
-	 * Stores meta in cache for future reads.
63
-	 *
64
-	 * A group must be set to to enable caching.
65
-	 *
66
-	 * @var string
67
-	 */
68
-	protected $cache_group = 'getpaid_discounts';
61
+    /**
62
+     * Stores meta in cache for future reads.
63
+     *
64
+     * A group must be set to to enable caching.
65
+     *
66
+     * @var string
67
+     */
68
+    protected $cache_group = 'getpaid_discounts';
69 69
 
70 70
     /**
71 71
      * Stores a reference to the original WP_Post object
72 72
      *
73 73
      * @var WP_Post
74 74
      */
75
-	protected $post = null;
76
-
77
-	/**
78
-	 * Get the discount if ID is passed, otherwise the discount is new and empty.
79
-	 *
80
-	 * @param int|array|string|WPInv_Discount|WP_Post $discount discount data, object, ID or code.
81
-	 */
82
-	public function __construct( $discount = 0 ) {
83
-		parent::__construct( $discount );
84
-
85
-		if ( is_numeric( $discount ) && 'wpi_discount' === get_post_type( $discount ) ) {
86
-			$this->set_id( $discount );
87
-		} elseif ( $discount instanceof self ) {
88
-			$this->set_id( $discount->get_id() );
89
-		} elseif ( ! empty( $discount->ID ) ) {
90
-			$this->set_id( $discount->ID );
91
-		} elseif ( is_array( $discount ) ) {
92
-			$this->set_props( $discount );
93
-
94
-			if ( isset( $discount['ID'] ) ) {
95
-				$this->set_id( $discount['ID'] );
96
-			}
97
-
98
-		} elseif ( is_scalar( $discount ) && $discount = self::get_discount_id_by_code( $discount ) ) {
99
-			$this->set_id( $discount );
100
-		} else {
101
-			$this->set_object_read( true );
102
-		}
75
+    protected $post = null;
76
+
77
+    /**
78
+     * Get the discount if ID is passed, otherwise the discount is new and empty.
79
+     *
80
+     * @param int|array|string|WPInv_Discount|WP_Post $discount discount data, object, ID or code.
81
+     */
82
+    public function __construct( $discount = 0 ) {
83
+        parent::__construct( $discount );
84
+
85
+        if ( is_numeric( $discount ) && 'wpi_discount' === get_post_type( $discount ) ) {
86
+            $this->set_id( $discount );
87
+        } elseif ( $discount instanceof self ) {
88
+            $this->set_id( $discount->get_id() );
89
+        } elseif ( ! empty( $discount->ID ) ) {
90
+            $this->set_id( $discount->ID );
91
+        } elseif ( is_array( $discount ) ) {
92
+            $this->set_props( $discount );
93
+
94
+            if ( isset( $discount['ID'] ) ) {
95
+                $this->set_id( $discount['ID'] );
96
+            }
97
+
98
+        } elseif ( is_scalar( $discount ) && $discount = self::get_discount_id_by_code( $discount ) ) {
99
+            $this->set_id( $discount );
100
+        } else {
101
+            $this->set_object_read( true );
102
+        }
103 103
 
104 104
         // Load the datastore.
105
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
105
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
106 106
 
107
-		if ( $this->get_id() > 0 ) {
107
+        if ( $this->get_id() > 0 ) {
108 108
             $this->post = get_post( $this->get_id() );
109 109
             $this->ID   = $this->get_id();
110
-			$this->data_store->read( $this );
110
+            $this->data_store->read( $this );
111
+        }
112
+
113
+    }
114
+
115
+    /**
116
+     * Fetch a discount from the db/cache
117
+     *
118
+     *
119
+     * @static
120
+     * @param string $field The field to query against: 'ID', 'discount_code'
121
+     * @param string|int $value The field value
122
+     * @deprecated
123
+     * @since 1.0.15
124
+     * @return array|bool array of discount details on success. False otherwise.
125
+     */
126
+    public static function get_data_by( $field, $value ) {
127
+
128
+        if ( 'id' == strtolower( $field ) ) {
129
+            // Make sure the value is numeric to avoid casting objects, for example,
130
+            // to int 1.
131
+            if ( ! is_numeric( $value ) )
132
+                return false;
133
+            $value = intval( $value );
134
+            if ( $value < 1 )
135
+                return false;
136
+        }
137
+
138
+        if ( ! $value || ! is_string( $field ) ) {
139
+            return false;
140
+        }
141
+
142
+        $field = trim( $field );
143
+
144
+        // prepare query args
145
+        switch ( strtolower( $field ) ) {
146
+            case 'id':
147
+                $discount_id = $value;
148
+                $args		 = array( 'include' => array( $value ) );
149
+                break;
150
+            case 'discount_code':
151
+            case 'code':
152
+                $value       = trim( $value );
153
+                $discount_id = wp_cache_get( $value, 'WPInv_Discount_Codes' );
154
+                $args		 = array( 'meta_key' => '_wpi_discount_code', 'meta_value' => $value );
155
+                break;
156
+            case 'name':
157
+                $discount_id = 0;
158
+                $args		 = array( 'name' => trim( $value ) );
159
+                break;
160
+            default:
161
+                $args		 = apply_filters( "wpinv_discount_get_data_by_{$field}_args", null, $value );
162
+                if ( ! is_array( $args ) ) {
163
+                    return apply_filters( "wpinv_discount_get_data_by_$field", false, $value );
164
+                }
165
+
166
+        }
167
+
168
+        // Check if there is a cached value.
169
+        if ( ! empty( $discount_id ) && $discount = wp_cache_get( (int) $discount_id, 'WPInv_Discounts' ) ) {
170
+            return $discount;
171
+        }
172
+
173
+        $args = array_merge(
174
+            $args,
175
+            array(
176
+                'post_type'      => 'wpi_discount',
177
+                'posts_per_page' => 1,
178
+                'post_status'    => array( 'publish', 'pending', 'draft', 'expired' )
179
+            )
180
+        );
181
+
182
+        $discount = get_posts( $args );
183
+
184
+        if( empty( $discount ) ) {
185
+            return false;
111 186
         }
112 187
 
113
-	}
114
-
115
-	/**
116
-	 * Fetch a discount from the db/cache
117
-	 *
118
-	 *
119
-	 * @static
120
-	 * @param string $field The field to query against: 'ID', 'discount_code'
121
-	 * @param string|int $value The field value
122
-	 * @deprecated
123
-	 * @since 1.0.15
124
-	 * @return array|bool array of discount details on success. False otherwise.
125
-	 */
126
-	public static function get_data_by( $field, $value ) {
127
-
128
-		if ( 'id' == strtolower( $field ) ) {
129
-			// Make sure the value is numeric to avoid casting objects, for example,
130
-			// to int 1.
131
-			if ( ! is_numeric( $value ) )
132
-				return false;
133
-			$value = intval( $value );
134
-			if ( $value < 1 )
135
-				return false;
136
-		}
137
-
138
-		if ( ! $value || ! is_string( $field ) ) {
139
-			return false;
140
-		}
141
-
142
-		$field = trim( $field );
143
-
144
-		// prepare query args
145
-		switch ( strtolower( $field ) ) {
146
-			case 'id':
147
-				$discount_id = $value;
148
-				$args		 = array( 'include' => array( $value ) );
149
-				break;
150
-			case 'discount_code':
151
-			case 'code':
152
-				$value       = trim( $value );
153
-				$discount_id = wp_cache_get( $value, 'WPInv_Discount_Codes' );
154
-				$args		 = array( 'meta_key' => '_wpi_discount_code', 'meta_value' => $value );
155
-				break;
156
-			case 'name':
157
-				$discount_id = 0;
158
-				$args		 = array( 'name' => trim( $value ) );
159
-				break;
160
-			default:
161
-				$args		 = apply_filters( "wpinv_discount_get_data_by_{$field}_args", null, $value );
162
-				if ( ! is_array( $args ) ) {
163
-					return apply_filters( "wpinv_discount_get_data_by_$field", false, $value );
164
-				}
165
-
166
-		}
167
-
168
-		// Check if there is a cached value.
169
-		if ( ! empty( $discount_id ) && $discount = wp_cache_get( (int) $discount_id, 'WPInv_Discounts' ) ) {
170
-			return $discount;
171
-		}
172
-
173
-		$args = array_merge(
174
-			$args,
175
-			array(
176
-				'post_type'      => 'wpi_discount',
177
-				'posts_per_page' => 1,
178
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' )
179
-			)
180
-		);
181
-
182
-		$discount = get_posts( $args );
183
-
184
-		if( empty( $discount ) ) {
185
-			return false;
186
-		}
187
-
188
-		$discount = $discount[0];
189
-
190
-		// Prepare the return data.
191
-		$return = array(
188
+        $discount = $discount[0];
189
+
190
+        // Prepare the return data.
191
+        $return = array(
192 192
             'ID'                          => $discount->ID,
193 193
             'code'                        => get_post_meta( $discount->ID, '_wpi_discount_code', true ),
194 194
             'amount'                      => get_post_meta( $discount->ID, '_wpi_discount_amount', true ),
195 195
             'date_created'                => $discount->post_date,
196
-			'date_modified'               => $discount->post_modified,
197
-			'status'               		  => $discount->post_status,
198
-			'start'                  	  => get_post_meta( $discount->ID, '_wpi_discount_start', true ),
196
+            'date_modified'               => $discount->post_modified,
197
+            'status'               		  => $discount->post_status,
198
+            'start'                  	  => get_post_meta( $discount->ID, '_wpi_discount_start', true ),
199 199
             'expiration'                  => get_post_meta( $discount->ID, '_wpi_discount_expiration', true ),
200 200
             'type'               		  => get_post_meta( $discount->ID, '_wpi_discount_type', true ),
201 201
             'description'                 => $discount->post_excerpt,
@@ -209,77 +209,77 @@  discard block
 block discarded – undo
209 209
             'max_total'                   => get_post_meta( $discount->ID, '_wpi_discount_max_total', true ),
210 210
         );
211 211
 
212
-		$return = apply_filters( 'wpinv_discount_properties', $return );
213
-
214
-		// Update the cache with our data
215
-		wp_cache_add( $discount->ID, $return, 'WPInv_Discounts' );
216
-		wp_cache_add( $return['code'], $discount->ID, 'WPInv_Discount_Codes' );
217
-
218
-		return $return;
219
-	}
220
-
221
-	/**
222
-	 * Given a discount code, it returns a discount id.
223
-	 *
224
-	 *
225
-	 * @static
226
-	 * @param string $discount_code
227
-	 * @since 1.0.15
228
-	 * @return int
229
-	 */
230
-	public static function get_discount_id_by_code( $discount_code ) {
231
-
232
-		// Trim the code.
233
-		$discount_code = trim( $discount_code );
234
-
235
-		// Ensure a value has been passed.
236
-		if ( empty( $discount_code ) ) {
237
-			return 0;
238
-		}
239
-
240
-		// Maybe retrieve from the cache.
241
-		$discount_id   = wp_cache_get( $discount_code, 'getpaid_discount_codes' );
242
-		if ( ! empty( $discount_id ) ) {
243
-			return $discount_id;
244
-		}
245
-
246
-		// Fetch the first discount codes.
247
-		$discounts = get_posts(
248
-			array(
249
-				'meta_key'       => '_wpi_discount_code',
250
-				'meta_value'     => $discount_code,
251
-				'post_type'      => 'wpi_discount',
252
-				'posts_per_page' => 1,
253
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
254
-				'fields'         => 'ids',
255
-			)
256
-		);
257
-
258
-		if ( empty( $discounts ) ) {
259
-			return 0;
260
-		}
261
-
262
-		$discount_id = $discounts[0];
263
-
264
-		// Update the cache with our data
265
-		wp_cache_add( get_post_meta( $discount_id, '_wpi_discount_code', true ), $discount_id, 'getpaid_discount_codes' );
266
-
267
-		return $discount_id;
268
-	}
269
-
270
-	/**
271
-	 * Magic method for checking the existence of a certain custom field.
272
-	 *
273
-	 * @since 1.0.15
274
-	 * @access public
275
-	 *
276
-	 * @return bool Whether the given discount field is set.
277
-	 */
278
-	public function __isset( $key ){
279
-		return isset( $this->data[$key] ) || method_exists( $this, "get_$key");
280
-	}
281
-
282
-	/*
212
+        $return = apply_filters( 'wpinv_discount_properties', $return );
213
+
214
+        // Update the cache with our data
215
+        wp_cache_add( $discount->ID, $return, 'WPInv_Discounts' );
216
+        wp_cache_add( $return['code'], $discount->ID, 'WPInv_Discount_Codes' );
217
+
218
+        return $return;
219
+    }
220
+
221
+    /**
222
+     * Given a discount code, it returns a discount id.
223
+     *
224
+     *
225
+     * @static
226
+     * @param string $discount_code
227
+     * @since 1.0.15
228
+     * @return int
229
+     */
230
+    public static function get_discount_id_by_code( $discount_code ) {
231
+
232
+        // Trim the code.
233
+        $discount_code = trim( $discount_code );
234
+
235
+        // Ensure a value has been passed.
236
+        if ( empty( $discount_code ) ) {
237
+            return 0;
238
+        }
239
+
240
+        // Maybe retrieve from the cache.
241
+        $discount_id   = wp_cache_get( $discount_code, 'getpaid_discount_codes' );
242
+        if ( ! empty( $discount_id ) ) {
243
+            return $discount_id;
244
+        }
245
+
246
+        // Fetch the first discount codes.
247
+        $discounts = get_posts(
248
+            array(
249
+                'meta_key'       => '_wpi_discount_code',
250
+                'meta_value'     => $discount_code,
251
+                'post_type'      => 'wpi_discount',
252
+                'posts_per_page' => 1,
253
+                'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
254
+                'fields'         => 'ids',
255
+            )
256
+        );
257
+
258
+        if ( empty( $discounts ) ) {
259
+            return 0;
260
+        }
261
+
262
+        $discount_id = $discounts[0];
263
+
264
+        // Update the cache with our data
265
+        wp_cache_add( get_post_meta( $discount_id, '_wpi_discount_code', true ), $discount_id, 'getpaid_discount_codes' );
266
+
267
+        return $discount_id;
268
+    }
269
+
270
+    /**
271
+     * Magic method for checking the existence of a certain custom field.
272
+     *
273
+     * @since 1.0.15
274
+     * @access public
275
+     *
276
+     * @return bool Whether the given discount field is set.
277
+     */
278
+    public function __isset( $key ){
279
+        return isset( $this->data[$key] ) || method_exists( $this, "get_$key");
280
+    }
281
+
282
+    /*
283 283
 	|--------------------------------------------------------------------------
284 284
 	| CRUD methods
285 285
 	|--------------------------------------------------------------------------
@@ -294,430 +294,430 @@  discard block
 block discarded – undo
294 294
 	|--------------------------------------------------------------------------
295 295
 	*/
296 296
 
297
-	/**
298
-	 * Get discount status.
299
-	 *
300
-	 * @since 1.0.19
301
-	 * @param  string $context View or edit context.
302
-	 * @return string
303
-	 */
304
-	public function get_status( $context = 'view' ) {
305
-		return $this->get_prop( 'status', $context );
297
+    /**
298
+     * Get discount status.
299
+     *
300
+     * @since 1.0.19
301
+     * @param  string $context View or edit context.
302
+     * @return string
303
+     */
304
+    public function get_status( $context = 'view' ) {
305
+        return $this->get_prop( 'status', $context );
306 306
     }
307 307
 
308 308
     /**
309
-	 * Get plugin version when the discount was created.
310
-	 *
311
-	 * @since 1.0.19
312
-	 * @param  string $context View or edit context.
313
-	 * @return string
314
-	 */
315
-	public function get_version( $context = 'view' ) {
316
-		return $this->get_prop( 'version', $context );
309
+     * Get plugin version when the discount was created.
310
+     *
311
+     * @since 1.0.19
312
+     * @param  string $context View or edit context.
313
+     * @return string
314
+     */
315
+    public function get_version( $context = 'view' ) {
316
+        return $this->get_prop( 'version', $context );
317 317
     }
318 318
 
319 319
     /**
320
-	 * Get date when the discount was created.
321
-	 *
322
-	 * @since 1.0.19
323
-	 * @param  string $context View or edit context.
324
-	 * @return string
325
-	 */
326
-	public function get_date_created( $context = 'view' ) {
327
-		return $this->get_prop( 'date_created', $context );
320
+     * Get date when the discount was created.
321
+     *
322
+     * @since 1.0.19
323
+     * @param  string $context View or edit context.
324
+     * @return string
325
+     */
326
+    public function get_date_created( $context = 'view' ) {
327
+        return $this->get_prop( 'date_created', $context );
328 328
     }
329 329
 
330 330
     /**
331
-	 * Get GMT date when the discount was created.
332
-	 *
333
-	 * @since 1.0.19
334
-	 * @param  string $context View or edit context.
335
-	 * @return string
336
-	 */
337
-	public function get_date_created_gmt( $context = 'view' ) {
331
+     * Get GMT date when the discount was created.
332
+     *
333
+     * @since 1.0.19
334
+     * @param  string $context View or edit context.
335
+     * @return string
336
+     */
337
+    public function get_date_created_gmt( $context = 'view' ) {
338 338
         $date = $this->get_date_created( $context );
339 339
 
340 340
         if ( $date ) {
341 341
             $date = get_gmt_from_date( $date );
342 342
         }
343
-		return $date;
343
+        return $date;
344 344
     }
345 345
 
346 346
     /**
347
-	 * Get date when the discount was last modified.
348
-	 *
349
-	 * @since 1.0.19
350
-	 * @param  string $context View or edit context.
351
-	 * @return string
352
-	 */
353
-	public function get_date_modified( $context = 'view' ) {
354
-		return $this->get_prop( 'date_modified', $context );
347
+     * Get date when the discount was last modified.
348
+     *
349
+     * @since 1.0.19
350
+     * @param  string $context View or edit context.
351
+     * @return string
352
+     */
353
+    public function get_date_modified( $context = 'view' ) {
354
+        return $this->get_prop( 'date_modified', $context );
355 355
     }
356 356
 
357 357
     /**
358
-	 * Get GMT date when the discount was last modified.
359
-	 *
360
-	 * @since 1.0.19
361
-	 * @param  string $context View or edit context.
362
-	 * @return string
363
-	 */
364
-	public function get_date_modified_gmt( $context = 'view' ) {
358
+     * Get GMT date when the discount was last modified.
359
+     *
360
+     * @since 1.0.19
361
+     * @param  string $context View or edit context.
362
+     * @return string
363
+     */
364
+    public function get_date_modified_gmt( $context = 'view' ) {
365 365
         $date = $this->get_date_modified( $context );
366 366
 
367 367
         if ( $date ) {
368 368
             $date = get_gmt_from_date( $date );
369 369
         }
370
-		return $date;
370
+        return $date;
371 371
     }
372 372
 
373 373
     /**
374
-	 * Get the discount name.
375
-	 *
376
-	 * @since 1.0.19
377
-	 * @param  string $context View or edit context.
378
-	 * @return string
379
-	 */
380
-	public function get_name( $context = 'view' ) {
381
-		return $this->get_prop( 'name', $context );
374
+     * Get the discount name.
375
+     *
376
+     * @since 1.0.19
377
+     * @param  string $context View or edit context.
378
+     * @return string
379
+     */
380
+    public function get_name( $context = 'view' ) {
381
+        return $this->get_prop( 'name', $context );
382 382
     }
383 383
 
384 384
     /**
385
-	 * Alias of self::get_name().
386
-	 *
387
-	 * @since 1.0.19
388
-	 * @param  string $context View or edit context.
389
-	 * @return string
390
-	 */
391
-	public function get_title( $context = 'view' ) {
392
-		return $this->get_name( $context );
385
+     * Alias of self::get_name().
386
+     *
387
+     * @since 1.0.19
388
+     * @param  string $context View or edit context.
389
+     * @return string
390
+     */
391
+    public function get_title( $context = 'view' ) {
392
+        return $this->get_name( $context );
393 393
     }
394 394
 
395 395
     /**
396
-	 * Get the discount description.
397
-	 *
398
-	 * @since 1.0.19
399
-	 * @param  string $context View or edit context.
400
-	 * @return string
401
-	 */
402
-	public function get_description( $context = 'view' ) {
403
-		return $this->get_prop( 'description', $context );
396
+     * Get the discount description.
397
+     *
398
+     * @since 1.0.19
399
+     * @param  string $context View or edit context.
400
+     * @return string
401
+     */
402
+    public function get_description( $context = 'view' ) {
403
+        return $this->get_prop( 'description', $context );
404 404
     }
405 405
 
406 406
     /**
407
-	 * Alias of self::get_description().
408
-	 *
409
-	 * @since 1.0.19
410
-	 * @param  string $context View or edit context.
411
-	 * @return string
412
-	 */
413
-	public function get_excerpt( $context = 'view' ) {
414
-		return $this->get_description( $context );
407
+     * Alias of self::get_description().
408
+     *
409
+     * @since 1.0.19
410
+     * @param  string $context View or edit context.
411
+     * @return string
412
+     */
413
+    public function get_excerpt( $context = 'view' ) {
414
+        return $this->get_description( $context );
415 415
     }
416 416
 
417 417
     /**
418
-	 * Alias of self::get_description().
419
-	 *
420
-	 * @since 1.0.19
421
-	 * @param  string $context View or edit context.
422
-	 * @return string
423
-	 */
424
-	public function get_summary( $context = 'view' ) {
425
-		return $this->get_description( $context );
418
+     * Alias of self::get_description().
419
+     *
420
+     * @since 1.0.19
421
+     * @param  string $context View or edit context.
422
+     * @return string
423
+     */
424
+    public function get_summary( $context = 'view' ) {
425
+        return $this->get_description( $context );
426 426
     }
427 427
 
428 428
     /**
429
-	 * Get the owner of the discount.
430
-	 *
431
-	 * @since 1.0.19
432
-	 * @param  string $context View or edit context.
433
-	 * @return string
434
-	 */
435
-	public function get_author( $context = 'view' ) {
436
-		return (int) $this->get_prop( 'author', $context );
437
-	}
429
+     * Get the owner of the discount.
430
+     *
431
+     * @since 1.0.19
432
+     * @param  string $context View or edit context.
433
+     * @return string
434
+     */
435
+    public function get_author( $context = 'view' ) {
436
+        return (int) $this->get_prop( 'author', $context );
437
+    }
438 438
 	
439
-	/**
440
-	 * Get the discount code.
441
-	 *
442
-	 * @since 1.0.19
443
-	 * @param  string $context View or edit context.
444
-	 * @return string
445
-	 */
446
-	public function get_code( $context = 'view' ) {
447
-		return $this->get_prop( 'code', $context );
448
-	}
439
+    /**
440
+     * Get the discount code.
441
+     *
442
+     * @since 1.0.19
443
+     * @param  string $context View or edit context.
444
+     * @return string
445
+     */
446
+    public function get_code( $context = 'view' ) {
447
+        return $this->get_prop( 'code', $context );
448
+    }
449 449
 	
450
-	/**
451
-	 * Alias for self::get_code().
452
-	 *
453
-	 * @since 1.0.19
454
-	 * @param  string $context View or edit context.
455
-	 * @return string
456
-	 */
457
-	public function get_coupon_code( $context = 'view' ) {
458
-		return $this->get_code( $context );
459
-	}
450
+    /**
451
+     * Alias for self::get_code().
452
+     *
453
+     * @since 1.0.19
454
+     * @param  string $context View or edit context.
455
+     * @return string
456
+     */
457
+    public function get_coupon_code( $context = 'view' ) {
458
+        return $this->get_code( $context );
459
+    }
460 460
 	
461
-	/**
462
-	 * Alias for self::get_code().
463
-	 *
464
-	 * @since 1.0.19
465
-	 * @param  string $context View or edit context.
466
-	 * @return string
467
-	 */
468
-	public function get_discount_code( $context = 'view' ) {
469
-		return $this->get_code( $context );
470
-	}
461
+    /**
462
+     * Alias for self::get_code().
463
+     *
464
+     * @since 1.0.19
465
+     * @param  string $context View or edit context.
466
+     * @return string
467
+     */
468
+    public function get_discount_code( $context = 'view' ) {
469
+        return $this->get_code( $context );
470
+    }
471 471
 	
472
-	/**
473
-	 * Get the discount's amount.
474
-	 *
475
-	 * @since 1.0.19
476
-	 * @param  string $context View or edit context.
477
-	 * @return float
478
-	 */
479
-	public function get_amount( $context = 'view' ) {
480
-		return $this->get_prop( 'amount', $context );
481
-	}
482
-
483
-	/**
484
-	 * Get the discount's formated amount/rate.
485
-	 *
486
-	 * @since 1.0.19
487
-	 * @return string
488
-	 */
489
-	public function get_formatted_amount() {
490
-
491
-		if ( $this->is_type( 'flat' ) ) {
492
-			$rate = wpinv_price( wpinv_format_amount( $this->get_amount() ) );
493
-		} else {
494
-			$rate = $this->get_amount() . '%';
495
-		}
496
-
497
-		return apply_filters( 'wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount() );
498
-	}
472
+    /**
473
+     * Get the discount's amount.
474
+     *
475
+     * @since 1.0.19
476
+     * @param  string $context View or edit context.
477
+     * @return float
478
+     */
479
+    public function get_amount( $context = 'view' ) {
480
+        return $this->get_prop( 'amount', $context );
481
+    }
482
+
483
+    /**
484
+     * Get the discount's formated amount/rate.
485
+     *
486
+     * @since 1.0.19
487
+     * @return string
488
+     */
489
+    public function get_formatted_amount() {
490
+
491
+        if ( $this->is_type( 'flat' ) ) {
492
+            $rate = wpinv_price( wpinv_format_amount( $this->get_amount() ) );
493
+        } else {
494
+            $rate = $this->get_amount() . '%';
495
+        }
496
+
497
+        return apply_filters( 'wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount() );
498
+    }
499 499
 	
500
-	/**
501
-	 * Get the discount's start date.
502
-	 *
503
-	 * @since 1.0.19
504
-	 * @param  string $context View or edit context.
505
-	 * @return string
506
-	 */
507
-	public function get_start( $context = 'view' ) {
508
-		return $this->get_prop( 'start', $context );
509
-	}
500
+    /**
501
+     * Get the discount's start date.
502
+     *
503
+     * @since 1.0.19
504
+     * @param  string $context View or edit context.
505
+     * @return string
506
+     */
507
+    public function get_start( $context = 'view' ) {
508
+        return $this->get_prop( 'start', $context );
509
+    }
510 510
 	
511
-	/**
512
-	 * Alias for self::get_start().
513
-	 *
514
-	 * @since 1.0.19
515
-	 * @param  string $context View or edit context.
516
-	 * @return string
517
-	 */
518
-	public function get_start_date( $context = 'view' ) {
519
-		return $this->get_start( $context );
520
-	}
511
+    /**
512
+     * Alias for self::get_start().
513
+     *
514
+     * @since 1.0.19
515
+     * @param  string $context View or edit context.
516
+     * @return string
517
+     */
518
+    public function get_start_date( $context = 'view' ) {
519
+        return $this->get_start( $context );
520
+    }
521 521
 	
522
-	/**
523
-	 * Get the discount's expiration date.
524
-	 *
525
-	 * @since 1.0.19
526
-	 * @param  string $context View or edit context.
527
-	 * @return string
528
-	 */
529
-	public function get_expiration( $context = 'view' ) {
530
-		return $this->get_prop( 'expiration', $context );
531
-	}
522
+    /**
523
+     * Get the discount's expiration date.
524
+     *
525
+     * @since 1.0.19
526
+     * @param  string $context View or edit context.
527
+     * @return string
528
+     */
529
+    public function get_expiration( $context = 'view' ) {
530
+        return $this->get_prop( 'expiration', $context );
531
+    }
532 532
 	
533
-	/**
534
-	 * Alias for self::get_expiration().
535
-	 *
536
-	 * @since 1.0.19
537
-	 * @param  string $context View or edit context.
538
-	 * @return string
539
-	 */
540
-	public function get_expiration_date( $context = 'view' ) {
541
-		return $this->get_expiration( $context );
542
-	}
543
-
544
-	/**
545
-	 * Alias for self::get_expiration().
546
-	 *
547
-	 * @since 1.0.19
548
-	 * @param  string $context View or edit context.
549
-	 * @return string
550
-	 */
551
-	public function get_end_date( $context = 'view' ) {
552
-		return $this->get_expiration( $context );
553
-	}
533
+    /**
534
+     * Alias for self::get_expiration().
535
+     *
536
+     * @since 1.0.19
537
+     * @param  string $context View or edit context.
538
+     * @return string
539
+     */
540
+    public function get_expiration_date( $context = 'view' ) {
541
+        return $this->get_expiration( $context );
542
+    }
543
+
544
+    /**
545
+     * Alias for self::get_expiration().
546
+     *
547
+     * @since 1.0.19
548
+     * @param  string $context View or edit context.
549
+     * @return string
550
+     */
551
+    public function get_end_date( $context = 'view' ) {
552
+        return $this->get_expiration( $context );
553
+    }
554 554
 	
555
-	/**
556
-	 * Get the discount's type.
557
-	 *
558
-	 * @since 1.0.19
559
-	 * @param  string $context View or edit context.
560
-	 * @return string
561
-	 */
562
-	public function get_type( $context = 'view' ) {
563
-		return $this->get_prop( 'type', $context );
564
-	}
565
-
566
-	/**
567
-	 * Get the number of times a discount has been used.
568
-	 *
569
-	 * @since 1.0.19
570
-	 * @param  string $context View or edit context.
571
-	 * @return int
572
-	 */
573
-	public function get_uses( $context = 'view' ) {
574
-		return (int) $this->get_prop( 'uses', $context );
575
-	}
576
-
577
-	/**
578
-	 * Get the discount's usage, i.e uses / max uses.
579
-	 *
580
-	 * @since 1.0.19
581
-	 * @return string
582
-	 */
583
-	public function get_usage() {
584
-
585
-		if ( ! $this->has_limit() ) {
586
-			return $this->get_uses() . ' / ' . ' &infin;';
587
-		}
588
-
589
-		return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
590
-
591
-	}
592
-
593
-	/**
594
-	 * Get the maximum number of time a discount can be used.
595
-	 *
596
-	 * @since 1.0.19
597
-	 * @param  string $context View or edit context.
598
-	 * @return int
599
-	 */
600
-	public function get_max_uses( $context = 'view' ) {
601
-		$max_uses = $this->get_prop( 'max_uses', $context );
602
-		return empty( $max_uses ) ? null : $max_uses;
603
-	}
604
-
605
-	/**
606
-	 * Checks if this is a single use discount or not.
607
-	 *
608
-	 * @since 1.0.19
609
-	 * @param  string $context View or edit context.
610
-	 * @return bool
611
-	 */
612
-	public function get_is_single_use( $context = 'view' ) {
613
-		return $this->get_prop( 'is_single_use', $context );
614
-	}
615
-
616
-	/**
617
-	 * Get the items that can be used with this discount.
618
-	 *
619
-	 * @since 1.0.19
620
-	 * @param  string $context View or edit context.
621
-	 * @return array
622
-	 */
623
-	public function get_items( $context = 'view' ) {
624
-		return wpinv_parse_list( $this->get_prop( 'items', $context ) );
625
-	}
626
-
627
-	/**
628
-	 * Alias for self::get_items().
629
-	 *
630
-	 * @since 1.0.19
631
-	 * @param  string $context View or edit context.
632
-	 * @return array
633
-	 */
634
-	public function get_allowed_items( $context = 'view' ) {
635
-		return $this->get_items( $context );
636
-	}
637
-
638
-	/**
639
-	 * Get the items that are not allowed to use this discount.
640
-	 *
641
-	 * @since 1.0.19
642
-	 * @param  string $context View or edit context.
643
-	 * @return array
644
-	 */
645
-	public function get_excluded_items( $context = 'view' ) {
646
-		return wpinv_parse_list( $this->get_prop( 'excluded_items', $context ) );
647
-	}
648
-
649
-	/**
650
-	 * Checks if this is a recurring discount or not.
651
-	 *
652
-	 * @since 1.0.19
653
-	 * @param  string $context View or edit context.
654
-	 * @return int|string|bool
655
-	 */
656
-	public function get_is_recurring( $context = 'view' ) {
657
-		return $this->get_prop( 'is_recurring', $context );
658
-	}
659
-
660
-	/**
661
-	 * Get's the minimum total amount allowed for this discount.
662
-	 *
663
-	 * @since 1.0.19
664
-	 * @param  string $context View or edit context.
665
-	 * @return float
666
-	 */
667
-	public function get_min_total( $context = 'view' ) {
668
-		$minimum = $this->get_prop( 'min_total', $context );
669
-		return empty( $minimum ) ? null : $minimum;
670
-	}
671
-
672
-	/**
673
-	 * Alias for self::get_min_total().
674
-	 *
675
-	 * @since 1.0.19
676
-	 * @param  string $context View or edit context.
677
-	 * @return float
678
-	 */
679
-	public function get_minimum_total( $context = 'view' ) {
680
-		return $this->get_min_total( $context );
681
-	}
682
-
683
-	/**
684
-	 * Get's the maximum total amount allowed for this discount.
685
-	 *
686
-	 * @since 1.0.19
687
-	 * @param  string $context View or edit context.
688
-	 * @return float
689
-	 */
690
-	public function get_max_total( $context = 'view' ) {
691
-		$maximum = $this->get_prop( 'max_total', $context );
692
-		return empty( $maximum ) ? null : $maximum;
693
-	}
694
-
695
-	/**
696
-	 * Alias for self::get_max_total().
697
-	 *
698
-	 * @since 1.0.19
699
-	 * @param  string $context View or edit context.
700
-	 * @return float
701
-	 */
702
-	public function get_maximum_total( $context = 'view' ) {
703
-		return $this->get_max_total( $context );
704
-	}
705
-
706
-	/**
707
-	 * Magic method for accessing discount properties.
708
-	 *
709
-	 * @since 1.0.15
710
-	 * @access public
711
-	 *
712
-	 * @param string $key Discount data to retrieve
713
-	 * @param  string $context View or edit context.
714
-	 * @return mixed Value of the given discount property (if set).
715
-	 */
716
-	public function get( $key, $context = 'view' ) {
555
+    /**
556
+     * Get the discount's type.
557
+     *
558
+     * @since 1.0.19
559
+     * @param  string $context View or edit context.
560
+     * @return string
561
+     */
562
+    public function get_type( $context = 'view' ) {
563
+        return $this->get_prop( 'type', $context );
564
+    }
565
+
566
+    /**
567
+     * Get the number of times a discount has been used.
568
+     *
569
+     * @since 1.0.19
570
+     * @param  string $context View or edit context.
571
+     * @return int
572
+     */
573
+    public function get_uses( $context = 'view' ) {
574
+        return (int) $this->get_prop( 'uses', $context );
575
+    }
576
+
577
+    /**
578
+     * Get the discount's usage, i.e uses / max uses.
579
+     *
580
+     * @since 1.0.19
581
+     * @return string
582
+     */
583
+    public function get_usage() {
584
+
585
+        if ( ! $this->has_limit() ) {
586
+            return $this->get_uses() . ' / ' . ' &infin;';
587
+        }
588
+
589
+        return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
590
+
591
+    }
592
+
593
+    /**
594
+     * Get the maximum number of time a discount can be used.
595
+     *
596
+     * @since 1.0.19
597
+     * @param  string $context View or edit context.
598
+     * @return int
599
+     */
600
+    public function get_max_uses( $context = 'view' ) {
601
+        $max_uses = $this->get_prop( 'max_uses', $context );
602
+        return empty( $max_uses ) ? null : $max_uses;
603
+    }
604
+
605
+    /**
606
+     * Checks if this is a single use discount or not.
607
+     *
608
+     * @since 1.0.19
609
+     * @param  string $context View or edit context.
610
+     * @return bool
611
+     */
612
+    public function get_is_single_use( $context = 'view' ) {
613
+        return $this->get_prop( 'is_single_use', $context );
614
+    }
615
+
616
+    /**
617
+     * Get the items that can be used with this discount.
618
+     *
619
+     * @since 1.0.19
620
+     * @param  string $context View or edit context.
621
+     * @return array
622
+     */
623
+    public function get_items( $context = 'view' ) {
624
+        return wpinv_parse_list( $this->get_prop( 'items', $context ) );
625
+    }
626
+
627
+    /**
628
+     * Alias for self::get_items().
629
+     *
630
+     * @since 1.0.19
631
+     * @param  string $context View or edit context.
632
+     * @return array
633
+     */
634
+    public function get_allowed_items( $context = 'view' ) {
635
+        return $this->get_items( $context );
636
+    }
637
+
638
+    /**
639
+     * Get the items that are not allowed to use this discount.
640
+     *
641
+     * @since 1.0.19
642
+     * @param  string $context View or edit context.
643
+     * @return array
644
+     */
645
+    public function get_excluded_items( $context = 'view' ) {
646
+        return wpinv_parse_list( $this->get_prop( 'excluded_items', $context ) );
647
+    }
648
+
649
+    /**
650
+     * Checks if this is a recurring discount or not.
651
+     *
652
+     * @since 1.0.19
653
+     * @param  string $context View or edit context.
654
+     * @return int|string|bool
655
+     */
656
+    public function get_is_recurring( $context = 'view' ) {
657
+        return $this->get_prop( 'is_recurring', $context );
658
+    }
659
+
660
+    /**
661
+     * Get's the minimum total amount allowed for this discount.
662
+     *
663
+     * @since 1.0.19
664
+     * @param  string $context View or edit context.
665
+     * @return float
666
+     */
667
+    public function get_min_total( $context = 'view' ) {
668
+        $minimum = $this->get_prop( 'min_total', $context );
669
+        return empty( $minimum ) ? null : $minimum;
670
+    }
671
+
672
+    /**
673
+     * Alias for self::get_min_total().
674
+     *
675
+     * @since 1.0.19
676
+     * @param  string $context View or edit context.
677
+     * @return float
678
+     */
679
+    public function get_minimum_total( $context = 'view' ) {
680
+        return $this->get_min_total( $context );
681
+    }
682
+
683
+    /**
684
+     * Get's the maximum total amount allowed for this discount.
685
+     *
686
+     * @since 1.0.19
687
+     * @param  string $context View or edit context.
688
+     * @return float
689
+     */
690
+    public function get_max_total( $context = 'view' ) {
691
+        $maximum = $this->get_prop( 'max_total', $context );
692
+        return empty( $maximum ) ? null : $maximum;
693
+    }
694
+
695
+    /**
696
+     * Alias for self::get_max_total().
697
+     *
698
+     * @since 1.0.19
699
+     * @param  string $context View or edit context.
700
+     * @return float
701
+     */
702
+    public function get_maximum_total( $context = 'view' ) {
703
+        return $this->get_max_total( $context );
704
+    }
705
+
706
+    /**
707
+     * Magic method for accessing discount properties.
708
+     *
709
+     * @since 1.0.15
710
+     * @access public
711
+     *
712
+     * @param string $key Discount data to retrieve
713
+     * @param  string $context View or edit context.
714
+     * @return mixed Value of the given discount property (if set).
715
+     */
716
+    public function get( $key, $context = 'view' ) {
717 717
         return $this->get_prop( $key, $context );
718
-	}
718
+    }
719 719
 
720
-	/*
720
+    /*
721 721
 	|--------------------------------------------------------------------------
722 722
 	| Setters
723 723
 	|--------------------------------------------------------------------------
@@ -727,41 +727,41 @@  discard block
 block discarded – undo
727 727
 	| object.
728 728
 	*/
729 729
 	
730
-	/**
731
-	 * Sets discount status.
732
-	 *
733
-	 * @since 1.0.19
734
-	 * @param  string $status New status.
735
-	 * @return array details of change.
736
-	 */
737
-	public function set_status( $status ) {
730
+    /**
731
+     * Sets discount status.
732
+     *
733
+     * @since 1.0.19
734
+     * @param  string $status New status.
735
+     * @return array details of change.
736
+     */
737
+    public function set_status( $status ) {
738 738
         $old_status = $this->get_status();
739 739
 
740 740
         $this->set_prop( 'status', $status );
741 741
 
742
-		return array(
743
-			'from' => $old_status,
744
-			'to'   => $status,
745
-		);
742
+        return array(
743
+            'from' => $old_status,
744
+            'to'   => $status,
745
+        );
746 746
     }
747 747
 
748 748
     /**
749
-	 * Set plugin version when the discount was created.
750
-	 *
751
-	 * @since 1.0.19
752
-	 */
753
-	public function set_version( $value ) {
754
-		$this->set_prop( 'version', $value );
749
+     * Set plugin version when the discount was created.
750
+     *
751
+     * @since 1.0.19
752
+     */
753
+    public function set_version( $value ) {
754
+        $this->set_prop( 'version', $value );
755 755
     }
756 756
 
757 757
     /**
758
-	 * Set date when the discount was created.
759
-	 *
760
-	 * @since 1.0.19
761
-	 * @param string $value Value to set.
758
+     * Set date when the discount was created.
759
+     *
760
+     * @since 1.0.19
761
+     * @param string $value Value to set.
762 762
      * @return bool Whether or not the date was set.
763
-	 */
764
-	public function set_date_created( $value ) {
763
+     */
764
+    public function set_date_created( $value ) {
765 765
         $date = strtotime( $value );
766 766
 
767 767
         if ( $date ) {
@@ -774,13 +774,13 @@  discard block
 block discarded – undo
774 774
     }
775 775
 
776 776
     /**
777
-	 * Set date when the discount was last modified.
778
-	 *
779
-	 * @since 1.0.19
780
-	 * @param string $value Value to set.
777
+     * Set date when the discount was last modified.
778
+     *
779
+     * @since 1.0.19
780
+     * @param string $value Value to set.
781 781
      * @return bool Whether or not the date was set.
782
-	 */
783
-	public function set_date_modified( $value ) {
782
+     */
783
+    public function set_date_modified( $value ) {
784 784
         $date = strtotime( $value );
785 785
 
786 786
         if ( $date ) {
@@ -793,324 +793,324 @@  discard block
 block discarded – undo
793 793
     }
794 794
 
795 795
     /**
796
-	 * Set the discount name.
797
-	 *
798
-	 * @since 1.0.19
799
-	 * @param  string $value New name.
800
-	 */
801
-	public function set_name( $value ) {
796
+     * Set the discount name.
797
+     *
798
+     * @since 1.0.19
799
+     * @param  string $value New name.
800
+     */
801
+    public function set_name( $value ) {
802 802
         $name = sanitize_text_field( $value );
803
-		$this->set_prop( 'name', $name );
803
+        $this->set_prop( 'name', $name );
804 804
     }
805 805
 
806 806
     /**
807
-	 * Alias of self::set_name().
808
-	 *
809
-	 * @since 1.0.19
810
-	 * @param  string $value New name.
811
-	 */
812
-	public function set_title( $value ) {
813
-		$this->set_name( $value );
807
+     * Alias of self::set_name().
808
+     *
809
+     * @since 1.0.19
810
+     * @param  string $value New name.
811
+     */
812
+    public function set_title( $value ) {
813
+        $this->set_name( $value );
814 814
     }
815 815
 
816 816
     /**
817
-	 * Set the discount description.
818
-	 *
819
-	 * @since 1.0.19
820
-	 * @param  string $value New description.
821
-	 */
822
-	public function set_description( $value ) {
817
+     * Set the discount description.
818
+     *
819
+     * @since 1.0.19
820
+     * @param  string $value New description.
821
+     */
822
+    public function set_description( $value ) {
823 823
         $description = wp_kses_post( $value );
824
-		return $this->set_prop( 'description', $description );
824
+        return $this->set_prop( 'description', $description );
825 825
     }
826 826
 
827 827
     /**
828
-	 * Alias of self::set_description().
829
-	 *
830
-	 * @since 1.0.19
831
-	 * @param  string $value New description.
832
-	 */
833
-	public function set_excerpt( $value ) {
834
-		$this->set_description( $value );
828
+     * Alias of self::set_description().
829
+     *
830
+     * @since 1.0.19
831
+     * @param  string $value New description.
832
+     */
833
+    public function set_excerpt( $value ) {
834
+        $this->set_description( $value );
835 835
     }
836 836
 
837 837
     /**
838
-	 * Alias of self::set_description().
839
-	 *
840
-	 * @since 1.0.19
841
-	 * @param  string $value New description.
842
-	 */
843
-	public function set_summary( $value ) {
844
-		$this->set_description( $value );
838
+     * Alias of self::set_description().
839
+     *
840
+     * @since 1.0.19
841
+     * @param  string $value New description.
842
+     */
843
+    public function set_summary( $value ) {
844
+        $this->set_description( $value );
845 845
     }
846 846
 
847 847
     /**
848
-	 * Set the owner of the discount.
849
-	 *
850
-	 * @since 1.0.19
851
-	 * @param  int $value New author.
852
-	 */
853
-	public function set_author( $value ) {
854
-		$this->set_prop( 'author', (int) $value );
855
-	}
848
+     * Set the owner of the discount.
849
+     *
850
+     * @since 1.0.19
851
+     * @param  int $value New author.
852
+     */
853
+    public function set_author( $value ) {
854
+        $this->set_prop( 'author', (int) $value );
855
+    }
856 856
 	
857
-	/**
858
-	 * Sets the discount code.
859
-	 *
860
-	 * @since 1.0.19
861
-	 * @param string $value New discount code.
862
-	 */
863
-	public function set_code( $value ) {
864
-		$code = sanitize_text_field( $value );
865
-		$this->set_prop( 'code', $code );
866
-	}
857
+    /**
858
+     * Sets the discount code.
859
+     *
860
+     * @since 1.0.19
861
+     * @param string $value New discount code.
862
+     */
863
+    public function set_code( $value ) {
864
+        $code = sanitize_text_field( $value );
865
+        $this->set_prop( 'code', $code );
866
+    }
867 867
 	
868
-	/**
869
-	 * Alias of self::set_code().
870
-	 *
871
-	 * @since 1.0.19
872
-	 * @param string $value New discount code.
873
-	 */
874
-	public function set_coupon_code( $value ) {
875
-		$this->set_code( $value );
876
-	}
868
+    /**
869
+     * Alias of self::set_code().
870
+     *
871
+     * @since 1.0.19
872
+     * @param string $value New discount code.
873
+     */
874
+    public function set_coupon_code( $value ) {
875
+        $this->set_code( $value );
876
+    }
877 877
 	
878
-	/**
879
-	 * Alias of self::set_code().
880
-	 *
881
-	 * @since 1.0.19
882
-	 * @param string $value New discount code.
883
-	 */
884
-	public function set_discount_code( $value ) {
885
-		$this->set_code( $value );
886
-	}
878
+    /**
879
+     * Alias of self::set_code().
880
+     *
881
+     * @since 1.0.19
882
+     * @param string $value New discount code.
883
+     */
884
+    public function set_discount_code( $value ) {
885
+        $this->set_code( $value );
886
+    }
887 887
 	
888
-	/**
889
-	 * Sets the discount amount.
890
-	 *
891
-	 * @since 1.0.19
892
-	 * @param float $value New discount code.
893
-	 */
894
-	public function set_amount( $value ) {
895
-		$amount = floatval( wpinv_sanitize_amount( $value ) );
896
-		$this->set_prop( 'amount', $amount );
897
-	}
898
-
899
-	/**
900
-	 * Sets the discount's start date.
901
-	 *
902
-	 * @since 1.0.19
903
-	 * @param float $value New start date.
904
-	 */
905
-	public function set_start( $value ) {
906
-		$date = strtotime( $value );
888
+    /**
889
+     * Sets the discount amount.
890
+     *
891
+     * @since 1.0.19
892
+     * @param float $value New discount code.
893
+     */
894
+    public function set_amount( $value ) {
895
+        $amount = floatval( wpinv_sanitize_amount( $value ) );
896
+        $this->set_prop( 'amount', $amount );
897
+    }
907 898
 
908
-        if ( $date ) {
909
-            $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
910
-            return true;
911
-		}
899
+    /**
900
+     * Sets the discount's start date.
901
+     *
902
+     * @since 1.0.19
903
+     * @param float $value New start date.
904
+     */
905
+    public function set_start( $value ) {
906
+        $date = strtotime( $value );
907
+
908
+        if ( $date ) {
909
+            $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
910
+            return true;
911
+        }
912 912
 		
913
-		$this->set_prop( 'start', '' );
913
+        $this->set_prop( 'start', '' );
914 914
 
915 915
         return false;
916
-	}
917
-
918
-	/**
919
-	 * Alias of self::set_start().
920
-	 *
921
-	 * @since 1.0.19
922
-	 * @param string $value New start date.
923
-	 */
924
-	public function set_start_date( $value ) {
925
-		$this->set_start( $value );
926
-	}
927
-
928
-	/**
929
-	 * Sets the discount's expiration date.
930
-	 *
931
-	 * @since 1.0.19
932
-	 * @param float $value New expiration date.
933
-	 */
934
-	public function set_expiration( $value ) {
935
-		$date = strtotime( $value );
916
+    }
917
+
918
+    /**
919
+     * Alias of self::set_start().
920
+     *
921
+     * @since 1.0.19
922
+     * @param string $value New start date.
923
+     */
924
+    public function set_start_date( $value ) {
925
+        $this->set_start( $value );
926
+    }
927
+
928
+    /**
929
+     * Sets the discount's expiration date.
930
+     *
931
+     * @since 1.0.19
932
+     * @param float $value New expiration date.
933
+     */
934
+    public function set_expiration( $value ) {
935
+        $date = strtotime( $value );
936 936
 
937 937
         if ( $date ) {
938 938
             $this->set_prop( 'expiration', date( 'Y-m-d H:i', $date ) );
939 939
             return true;
940 940
         }
941 941
 
942
-		$this->set_prop( 'expiration', '' );
942
+        $this->set_prop( 'expiration', '' );
943 943
         return false;
944
-	}
945
-
946
-	/**
947
-	 * Alias of self::set_expiration().
948
-	 *
949
-	 * @since 1.0.19
950
-	 * @param string $value New expiration date.
951
-	 */
952
-	public function set_expiration_date( $value ) {
953
-		$this->set_expiration( $value );
954
-	}
955
-
956
-	/**
957
-	 * Alias of self::set_expiration().
958
-	 *
959
-	 * @since 1.0.19
960
-	 * @param string $value New expiration date.
961
-	 */
962
-	public function set_end_date( $value ) {
963
-		$this->set_expiration( $value );
964
-	}
965
-
966
-	/**
967
-	 * Sets the discount type.
968
-	 *
969
-	 * @since 1.0.19
970
-	 * @param string $value New discount type.
971
-	 */
972
-	public function set_type( $value ) {
973
-		if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
974
-			$this->set_prop( 'type', sanitize_text_field( $value ) );
975
-		}
976
-	}
977
-
978
-	/**
979
-	 * Sets the number of times a discount has been used.
980
-	 *
981
-	 * @since 1.0.19
982
-	 * @param int $value usage count.
983
-	 */
984
-	public function set_uses( $value ) {
985
-
986
-		$value = (int) $value;
987
-
988
-		if ( $value < 0 ) {
989
-			$value = 0;
990
-		}
991
-
992
-		$this->set_prop( 'uses', (int) $value );
993
-	}
994
-
995
-	/**
996
-	 * Sets the maximum number of times a discount can be used.
997
-	 *
998
-	 * @since 1.0.19
999
-	 * @param int $value maximum usage count.
1000
-	 */
1001
-	public function set_max_uses( $value ) {
1002
-		$this->set_prop( 'max_uses', absint( $value ) );
1003
-	}
1004
-
1005
-	/**
1006
-	 * Sets if this is a single use discount or not.
1007
-	 *
1008
-	 * @since 1.0.19
1009
-	 * @param int|bool $value is single use.
1010
-	 */
1011
-	public function set_is_single_use( $value ) {
1012
-		$this->set_prop( 'is_single_use', (bool) $value );
1013
-	}
1014
-
1015
-	/**
1016
-	 * Sets the items that can be used with this discount.
1017
-	 *
1018
-	 * @since 1.0.19
1019
-	 * @param array $value items.
1020
-	 */
1021
-	public function set_items( $value ) {
1022
-		$this->set_prop( 'items', wpinv_parse_list( $value ) );
1023
-	}
1024
-
1025
-	/**
1026
-	 * Alias for self::set_items().
1027
-	 *
1028
-	 * @since 1.0.19
1029
-	 * @param array $value items.
1030
-	 */
1031
-	public function set_allowed_items( $value ) {
1032
-		$this->set_items( $value );
1033
-	}
1034
-
1035
-	/**
1036
-	 * Sets the items that can not be used with this discount.
1037
-	 *
1038
-	 * @since 1.0.19
1039
-	 * @param array $value items.
1040
-	 */
1041
-	public function set_excluded_items( $value ) {
1042
-		$this->set_prop( 'excluded_items', wpinv_parse_list( $value ) );
1043
-	}
1044
-
1045
-	/**
1046
-	 * Sets if this is a recurring discounts or not.
1047
-	 *
1048
-	 * @since 1.0.19
1049
-	 * @param int|bool $value is recurring.
1050
-	 */
1051
-	public function set_is_recurring( $value ) {
1052
-		$this->set_prop( 'is_recurring', (bool) $value );
1053
-	}
1054
-
1055
-	/**
1056
-	 * Sets the minimum total that can not be used with this discount.
1057
-	 *
1058
-	 * @since 1.0.19
1059
-	 * @param float $value minimum total.
1060
-	 */
1061
-	public function set_min_total( $value ) {
1062
-		$this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1063
-	}
1064
-
1065
-	/**
1066
-	 * Alias for self::set_min_total().
1067
-	 *
1068
-	 * @since 1.0.19
1069
-	 * @param float $value minimum total.
1070
-	 */
1071
-	public function set_minimum_total( $value ) {
1072
-		$this->set_min_total( $value );
1073
-	}
1074
-
1075
-	/**
1076
-	 * Sets the maximum total that can not be used with this discount.
1077
-	 *
1078
-	 * @since 1.0.19
1079
-	 * @param float $value maximum total.
1080
-	 */
1081
-	public function set_max_total( $value ) {
1082
-		$this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1083
-	}
1084
-
1085
-	/**
1086
-	 * Alias for self::set_max_total().
1087
-	 *
1088
-	 * @since 1.0.19
1089
-	 * @param float $value maximum total.
1090
-	 */
1091
-	public function set_maximum_total( $value ) {
1092
-		$this->set_max_total( $value );
1093
-	}
1094
-
1095
-	/**
1096
-	 * @deprecated
1097
-	 */
1098
-	public function refresh(){}
1099
-
1100
-	/**
1101
-	 * @deprecated
1102
-	 *
1103
-	 */
1104
-	public function update_status( $status = 'publish' ){
1105
-
1106
-		if ( $this->exists() && $this->get_status() != $status ) {
1107
-			$this->set_status( $status );
1108
-			$this->save();
1109
-		}
1110
-
1111
-	}
1112
-
1113
-	/*
944
+    }
945
+
946
+    /**
947
+     * Alias of self::set_expiration().
948
+     *
949
+     * @since 1.0.19
950
+     * @param string $value New expiration date.
951
+     */
952
+    public function set_expiration_date( $value ) {
953
+        $this->set_expiration( $value );
954
+    }
955
+
956
+    /**
957
+     * Alias of self::set_expiration().
958
+     *
959
+     * @since 1.0.19
960
+     * @param string $value New expiration date.
961
+     */
962
+    public function set_end_date( $value ) {
963
+        $this->set_expiration( $value );
964
+    }
965
+
966
+    /**
967
+     * Sets the discount type.
968
+     *
969
+     * @since 1.0.19
970
+     * @param string $value New discount type.
971
+     */
972
+    public function set_type( $value ) {
973
+        if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
974
+            $this->set_prop( 'type', sanitize_text_field( $value ) );
975
+        }
976
+    }
977
+
978
+    /**
979
+     * Sets the number of times a discount has been used.
980
+     *
981
+     * @since 1.0.19
982
+     * @param int $value usage count.
983
+     */
984
+    public function set_uses( $value ) {
985
+
986
+        $value = (int) $value;
987
+
988
+        if ( $value < 0 ) {
989
+            $value = 0;
990
+        }
991
+
992
+        $this->set_prop( 'uses', (int) $value );
993
+    }
994
+
995
+    /**
996
+     * Sets the maximum number of times a discount can be used.
997
+     *
998
+     * @since 1.0.19
999
+     * @param int $value maximum usage count.
1000
+     */
1001
+    public function set_max_uses( $value ) {
1002
+        $this->set_prop( 'max_uses', absint( $value ) );
1003
+    }
1004
+
1005
+    /**
1006
+     * Sets if this is a single use discount or not.
1007
+     *
1008
+     * @since 1.0.19
1009
+     * @param int|bool $value is single use.
1010
+     */
1011
+    public function set_is_single_use( $value ) {
1012
+        $this->set_prop( 'is_single_use', (bool) $value );
1013
+    }
1014
+
1015
+    /**
1016
+     * Sets the items that can be used with this discount.
1017
+     *
1018
+     * @since 1.0.19
1019
+     * @param array $value items.
1020
+     */
1021
+    public function set_items( $value ) {
1022
+        $this->set_prop( 'items', wpinv_parse_list( $value ) );
1023
+    }
1024
+
1025
+    /**
1026
+     * Alias for self::set_items().
1027
+     *
1028
+     * @since 1.0.19
1029
+     * @param array $value items.
1030
+     */
1031
+    public function set_allowed_items( $value ) {
1032
+        $this->set_items( $value );
1033
+    }
1034
+
1035
+    /**
1036
+     * Sets the items that can not be used with this discount.
1037
+     *
1038
+     * @since 1.0.19
1039
+     * @param array $value items.
1040
+     */
1041
+    public function set_excluded_items( $value ) {
1042
+        $this->set_prop( 'excluded_items', wpinv_parse_list( $value ) );
1043
+    }
1044
+
1045
+    /**
1046
+     * Sets if this is a recurring discounts or not.
1047
+     *
1048
+     * @since 1.0.19
1049
+     * @param int|bool $value is recurring.
1050
+     */
1051
+    public function set_is_recurring( $value ) {
1052
+        $this->set_prop( 'is_recurring', (bool) $value );
1053
+    }
1054
+
1055
+    /**
1056
+     * Sets the minimum total that can not be used with this discount.
1057
+     *
1058
+     * @since 1.0.19
1059
+     * @param float $value minimum total.
1060
+     */
1061
+    public function set_min_total( $value ) {
1062
+        $this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1063
+    }
1064
+
1065
+    /**
1066
+     * Alias for self::set_min_total().
1067
+     *
1068
+     * @since 1.0.19
1069
+     * @param float $value minimum total.
1070
+     */
1071
+    public function set_minimum_total( $value ) {
1072
+        $this->set_min_total( $value );
1073
+    }
1074
+
1075
+    /**
1076
+     * Sets the maximum total that can not be used with this discount.
1077
+     *
1078
+     * @since 1.0.19
1079
+     * @param float $value maximum total.
1080
+     */
1081
+    public function set_max_total( $value ) {
1082
+        $this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1083
+    }
1084
+
1085
+    /**
1086
+     * Alias for self::set_max_total().
1087
+     *
1088
+     * @since 1.0.19
1089
+     * @param float $value maximum total.
1090
+     */
1091
+    public function set_maximum_total( $value ) {
1092
+        $this->set_max_total( $value );
1093
+    }
1094
+
1095
+    /**
1096
+     * @deprecated
1097
+     */
1098
+    public function refresh(){}
1099
+
1100
+    /**
1101
+     * @deprecated
1102
+     *
1103
+     */
1104
+    public function update_status( $status = 'publish' ){
1105
+
1106
+        if ( $this->exists() && $this->get_status() != $status ) {
1107
+            $this->set_status( $status );
1108
+            $this->save();
1109
+        }
1110
+
1111
+    }
1112
+
1113
+    /*
1114 1114
 	|--------------------------------------------------------------------------
1115 1115
 	| Conditionals
1116 1116
 	|--------------------------------------------------------------------------
@@ -1119,263 +1119,263 @@  discard block
 block discarded – undo
1119 1119
 	|
1120 1120
 	*/
1121 1121
 
1122
-	/**
1123
-	 * Checks whether a discount exists in the database or not
1124
-	 *
1125
-	 * @since 1.0.15
1126
-	 */
1127
-	public function exists(){
1128
-		$id = $this->get_id();
1129
-		return ! empty( $id );
1130
-	}
1131
-
1132
-	/**
1133
-	 * Checks the discount type.
1134
-	 *
1135
-	 *
1136
-	 * @param  string $type the discount type to check against
1137
-	 * @since 1.0.15
1138
-	 * @return bool
1139
-	 */
1140
-	public function is_type( $type ) {
1141
-		return $this->get_type() == $type;
1142
-	}
1143
-
1144
-	/**
1145
-	 * Checks whether the discount is published or not
1146
-	 *
1147
-	 * @since 1.0.15
1148
-	 * @return bool
1149
-	 */
1150
-	public function is_active() {
1151
-		return $this->get_status() == 'publish';
1152
-	}
1153
-
1154
-	/**
1155
-	 * Checks whether the discount has max uses
1156
-	 *
1157
-	 * @since 1.0.15
1158
-	 * @return bool
1159
-	 */
1160
-	public function has_limit() {
1161
-		$limit = $this->get_max_uses();
1162
-		return ! empty( $limit );
1163
-	}
1164
-
1165
-	/**
1166
-	 * Checks whether the discount has ever been used.
1167
-	 *
1168
-	 * @since 1.0.15
1169
-	 * @return bool
1170
-	 */
1171
-	public function has_uses() {
1172
-		return $this->get_uses() > 0;
1173
-	}
1174
-
1175
-	/**
1176
-	 * Checks whether the discount is has exided the usage limit or not
1177
-	 *
1178
-	 * @since 1.0.15
1179
-	 * @return bool
1180
-	 */
1181
-	public function has_exceeded_limit() {
1182
-
1183
-		if ( ! $this->has_limit() || ! $this->has_uses() ) {
1184
-			$exceeded = false ;
1185
-		} else {
1186
-			$exceeded = ! ( (int) $this->get_max_uses() < $this->get_uses() );
1187
-		}
1188
-
1189
-		return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code );
1190
-	}
1191
-
1192
-	/**
1193
-	 * Checks whether the discount has an expiration date.
1194
-	 *
1195
-	 * @since 1.0.15
1196
-	 * @return bool
1197
-	 */
1198
-	public function has_expiration_date() {
1199
-		$date = $this->get_expiration_date();
1200
-		return ! empty( $date );
1201
-	}
1202
-
1203
-	/**
1204
-	 * Checks if the discount is expired
1205
-	 *
1206
-	 * @since 1.0.15
1207
-	 * @return bool
1208
-	 */
1209
-	public function is_expired() {
1210
-		$expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1211
-		return apply_filters( 'wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code );
1212
-	}
1213
-
1214
-	/**
1215
-	 * Checks whether the discount has a start date.
1216
-	 *
1217
-	 * @since 1.0.15
1218
-	 * @return bool
1219
-	 */
1220
-	public function has_start_date() {
1221
-		$date = $this->get_start_date();
1222
-		return ! empty( $date );
1223
-	}
1224
-
1225
-	/**
1226
-	 * Checks the discount start date.
1227
-	 *
1228
-	 * @since 1.0.15
1229
-	 * @return bool
1230
-	 */
1231
-	public function has_started() {
1232
-		$started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1233
-		return apply_filters( 'wpinv_is_discount_started', $started, $this->ID, $this, $this->code );
1234
-	}
1235
-
1236
-	/**
1237
-	 * Checks the discount has allowed items or not.
1238
-	 *
1239
-	 * @since 1.0.15
1240
-	 * @return bool
1241
-	 */
1242
-	public function has_allowed_items() {
1243
-		$allowed_items = $this->get_allowed_items();
1244
-		return empty( $allowed_items );
1245
-	}
1246
-
1247
-	/**
1248
-	 * Checks the discount has excluded items or not.
1249
-	 *
1250
-	 * @since 1.0.15
1251
-	 * @return bool
1252
-	 */
1253
-	public function has_excluded_items() {
1254
-		$excluded_items = $this->get_excluded_items();
1255
-		return empty( $excluded_items );
1256
-	}
1257
-
1258
-	/**
1259
-	 * Check if a discount is valid for a given item id.
1260
-	 *
1261
-	 * @param  int|int[]  $item_ids
1262
-	 * @since 1.0.15
1263
-	 * @return boolean
1264
-	 */
1265
-	public function is_valid_for_items( $item_ids ) {
1266
-
1267
-		$item_ids = array_map( 'intval',  wpinv_parse_list( $item_ids ) );
1268
-		$included = array_intersect( $item_ids, $this->get_allowed_items() );
1269
-		$excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1270
-
1271
-		if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1272
-			return false;
1273
-		}
1274
-
1275
-		if ( $this->has_allowed_items() && empty( $included ) ) {
1276
-			return false;
1277
-		}
1278
-		return true;
1279
-	}
1280
-
1281
-	/**
1282
-	 * Check if a discount is valid for the given amount
1283
-	 *
1284
-	 * @param  float  $amount The amount to check against
1285
-	 * @since 1.0.15
1286
-	 * @return boolean
1287
-	 */
1288
-	public function is_valid_for_amount( $amount ) {
1289
-		return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1290
-	}
1291
-
1292
-	/**
1293
-	 * Checks if the minimum amount is set
1294
-	 *
1295
-	 * @since 1.0.15
1296
-	 * @return boolean
1297
-	 */
1298
-	public function has_minimum_amount() {
1299
-		$minimum = $this->get_minimum_total();
1300
-		return ! empty( $minimum );
1301
-	}
1302
-
1303
-	/**
1304
-	 * Checks if the minimum amount is met
1305
-	 *
1306
-	 * @param  float  $amount The amount to check against
1307
-	 * @since 1.0.15
1308
-	 * @return boolean
1309
-	 */
1310
-	public function is_minimum_amount_met( $amount ) {
1311
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1312
-		$min_met= ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1313
-		return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount );
1314
-	}
1315
-
1316
-	/**
1317
-	 * Checks if the maximum amount is set
1318
-	 *
1319
-	 * @since 1.0.15
1320
-	 * @return boolean
1321
-	 */
1322
-	public function has_maximum_amount() {
1323
-		$maximum = $this->get_maximum_total();
1324
-		return ! empty( $maximum );
1325
-	}
1326
-
1327
-	/**
1328
-	 * Checks if the maximum amount is met
1329
-	 *
1330
-	 * @param  float  $amount The amount to check against
1331
-	 * @since 1.0.15
1332
-	 * @return boolean
1333
-	 */
1334
-	public function is_maximum_amount_met( $amount ) {
1335
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1336
-		$max_met= ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1337
-		return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount );
1338
-	}
1339
-
1340
-	/**
1341
-	 * Checks if the discount is recurring.
1342
-	 *
1343
-	 * @since 1.0.15
1344
-	 * @return boolean
1345
-	 */
1346
-	public function is_recurring() {
1347
-		$recurring = $this->get_is_recurring();
1348
-		return ! empty( $recurring );
1349
-	}
1350
-
1351
-	/**
1352
-	 * Checks if the discount is single use.
1353
-	 *
1354
-	 * @since 1.0.15
1355
-	 * @return boolean
1356
-	 */
1357
-	public function is_single_use() {
1358
-		$usage = $this->get_is_single_use();
1359
-		return ! empty( $usage );
1360
-	}
1361
-
1362
-	/**
1363
-	 * Check if a discount is valid for the given user
1364
-	 *
1365
-	 * @param  int|string  $user
1366
-	 * @since 1.0.15
1367
-	 * @return boolean
1368
-	 */
1369
-	public function is_valid_for_user( $user ) {
1370
-		global $wpi_checkout_id;
1371
-
1372
-		// Ensure that the discount is single use.
1373
-		if ( empty( $user ) || ! $this->is_single_use() ) {
1374
-			return true;
1375
-		}
1376
-
1377
-		// Prepare the user id.
1378
-		$user_id = 0;
1122
+    /**
1123
+     * Checks whether a discount exists in the database or not
1124
+     *
1125
+     * @since 1.0.15
1126
+     */
1127
+    public function exists(){
1128
+        $id = $this->get_id();
1129
+        return ! empty( $id );
1130
+    }
1131
+
1132
+    /**
1133
+     * Checks the discount type.
1134
+     *
1135
+     *
1136
+     * @param  string $type the discount type to check against
1137
+     * @since 1.0.15
1138
+     * @return bool
1139
+     */
1140
+    public function is_type( $type ) {
1141
+        return $this->get_type() == $type;
1142
+    }
1143
+
1144
+    /**
1145
+     * Checks whether the discount is published or not
1146
+     *
1147
+     * @since 1.0.15
1148
+     * @return bool
1149
+     */
1150
+    public function is_active() {
1151
+        return $this->get_status() == 'publish';
1152
+    }
1153
+
1154
+    /**
1155
+     * Checks whether the discount has max uses
1156
+     *
1157
+     * @since 1.0.15
1158
+     * @return bool
1159
+     */
1160
+    public function has_limit() {
1161
+        $limit = $this->get_max_uses();
1162
+        return ! empty( $limit );
1163
+    }
1164
+
1165
+    /**
1166
+     * Checks whether the discount has ever been used.
1167
+     *
1168
+     * @since 1.0.15
1169
+     * @return bool
1170
+     */
1171
+    public function has_uses() {
1172
+        return $this->get_uses() > 0;
1173
+    }
1174
+
1175
+    /**
1176
+     * Checks whether the discount is has exided the usage limit or not
1177
+     *
1178
+     * @since 1.0.15
1179
+     * @return bool
1180
+     */
1181
+    public function has_exceeded_limit() {
1182
+
1183
+        if ( ! $this->has_limit() || ! $this->has_uses() ) {
1184
+            $exceeded = false ;
1185
+        } else {
1186
+            $exceeded = ! ( (int) $this->get_max_uses() < $this->get_uses() );
1187
+        }
1188
+
1189
+        return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code );
1190
+    }
1191
+
1192
+    /**
1193
+     * Checks whether the discount has an expiration date.
1194
+     *
1195
+     * @since 1.0.15
1196
+     * @return bool
1197
+     */
1198
+    public function has_expiration_date() {
1199
+        $date = $this->get_expiration_date();
1200
+        return ! empty( $date );
1201
+    }
1202
+
1203
+    /**
1204
+     * Checks if the discount is expired
1205
+     *
1206
+     * @since 1.0.15
1207
+     * @return bool
1208
+     */
1209
+    public function is_expired() {
1210
+        $expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1211
+        return apply_filters( 'wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code );
1212
+    }
1213
+
1214
+    /**
1215
+     * Checks whether the discount has a start date.
1216
+     *
1217
+     * @since 1.0.15
1218
+     * @return bool
1219
+     */
1220
+    public function has_start_date() {
1221
+        $date = $this->get_start_date();
1222
+        return ! empty( $date );
1223
+    }
1224
+
1225
+    /**
1226
+     * Checks the discount start date.
1227
+     *
1228
+     * @since 1.0.15
1229
+     * @return bool
1230
+     */
1231
+    public function has_started() {
1232
+        $started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1233
+        return apply_filters( 'wpinv_is_discount_started', $started, $this->ID, $this, $this->code );
1234
+    }
1235
+
1236
+    /**
1237
+     * Checks the discount has allowed items or not.
1238
+     *
1239
+     * @since 1.0.15
1240
+     * @return bool
1241
+     */
1242
+    public function has_allowed_items() {
1243
+        $allowed_items = $this->get_allowed_items();
1244
+        return empty( $allowed_items );
1245
+    }
1246
+
1247
+    /**
1248
+     * Checks the discount has excluded items or not.
1249
+     *
1250
+     * @since 1.0.15
1251
+     * @return bool
1252
+     */
1253
+    public function has_excluded_items() {
1254
+        $excluded_items = $this->get_excluded_items();
1255
+        return empty( $excluded_items );
1256
+    }
1257
+
1258
+    /**
1259
+     * Check if a discount is valid for a given item id.
1260
+     *
1261
+     * @param  int|int[]  $item_ids
1262
+     * @since 1.0.15
1263
+     * @return boolean
1264
+     */
1265
+    public function is_valid_for_items( $item_ids ) {
1266
+
1267
+        $item_ids = array_map( 'intval',  wpinv_parse_list( $item_ids ) );
1268
+        $included = array_intersect( $item_ids, $this->get_allowed_items() );
1269
+        $excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1270
+
1271
+        if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1272
+            return false;
1273
+        }
1274
+
1275
+        if ( $this->has_allowed_items() && empty( $included ) ) {
1276
+            return false;
1277
+        }
1278
+        return true;
1279
+    }
1280
+
1281
+    /**
1282
+     * Check if a discount is valid for the given amount
1283
+     *
1284
+     * @param  float  $amount The amount to check against
1285
+     * @since 1.0.15
1286
+     * @return boolean
1287
+     */
1288
+    public function is_valid_for_amount( $amount ) {
1289
+        return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1290
+    }
1291
+
1292
+    /**
1293
+     * Checks if the minimum amount is set
1294
+     *
1295
+     * @since 1.0.15
1296
+     * @return boolean
1297
+     */
1298
+    public function has_minimum_amount() {
1299
+        $minimum = $this->get_minimum_total();
1300
+        return ! empty( $minimum );
1301
+    }
1302
+
1303
+    /**
1304
+     * Checks if the minimum amount is met
1305
+     *
1306
+     * @param  float  $amount The amount to check against
1307
+     * @since 1.0.15
1308
+     * @return boolean
1309
+     */
1310
+    public function is_minimum_amount_met( $amount ) {
1311
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1312
+        $min_met= ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1313
+        return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount );
1314
+    }
1315
+
1316
+    /**
1317
+     * Checks if the maximum amount is set
1318
+     *
1319
+     * @since 1.0.15
1320
+     * @return boolean
1321
+     */
1322
+    public function has_maximum_amount() {
1323
+        $maximum = $this->get_maximum_total();
1324
+        return ! empty( $maximum );
1325
+    }
1326
+
1327
+    /**
1328
+     * Checks if the maximum amount is met
1329
+     *
1330
+     * @param  float  $amount The amount to check against
1331
+     * @since 1.0.15
1332
+     * @return boolean
1333
+     */
1334
+    public function is_maximum_amount_met( $amount ) {
1335
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1336
+        $max_met= ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1337
+        return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount );
1338
+    }
1339
+
1340
+    /**
1341
+     * Checks if the discount is recurring.
1342
+     *
1343
+     * @since 1.0.15
1344
+     * @return boolean
1345
+     */
1346
+    public function is_recurring() {
1347
+        $recurring = $this->get_is_recurring();
1348
+        return ! empty( $recurring );
1349
+    }
1350
+
1351
+    /**
1352
+     * Checks if the discount is single use.
1353
+     *
1354
+     * @since 1.0.15
1355
+     * @return boolean
1356
+     */
1357
+    public function is_single_use() {
1358
+        $usage = $this->get_is_single_use();
1359
+        return ! empty( $usage );
1360
+    }
1361
+
1362
+    /**
1363
+     * Check if a discount is valid for the given user
1364
+     *
1365
+     * @param  int|string  $user
1366
+     * @since 1.0.15
1367
+     * @return boolean
1368
+     */
1369
+    public function is_valid_for_user( $user ) {
1370
+        global $wpi_checkout_id;
1371
+
1372
+        // Ensure that the discount is single use.
1373
+        if ( empty( $user ) || ! $this->is_single_use() ) {
1374
+            return true;
1375
+        }
1376
+
1377
+        // Prepare the user id.
1378
+        $user_id = 0;
1379 1379
         if ( is_int( $user ) ) {
1380 1380
             $user_id = absint( $user );
1381 1381
         } else if ( is_email( $user ) && $user_data = get_user_by( 'email', $user ) ) {
@@ -1384,135 +1384,135 @@  discard block
 block discarded – undo
1384 1384
             $user_id = $user_data->ID;
1385 1385
         } else if ( absint( $user ) > 0 ) {
1386 1386
             $user_id = absint( $user );
1387
-		}
1387
+        }
1388 1388
 
1389
-		// Ensure that we have a user.
1390
-		if ( empty( $user_id ) ) {
1391
-			return true;
1392
-		}
1389
+        // Ensure that we have a user.
1390
+        if ( empty( $user_id ) ) {
1391
+            return true;
1392
+        }
1393 1393
 
1394
-		// Get all payments with matching user id.
1394
+        // Get all payments with matching user id.
1395 1395
         $payments = wpinv_get_invoices( array( 'user' => $user_id, 'limit' => false ) );
1396
-		$code     = strtolower( $this->get_code() );
1397
-
1398
-		// For each payment...
1399
-		foreach ( $payments as $payment ) {
1400
-
1401
-			// ... skip the current payment.
1402
-			if ( ! empty( $wpi_checkout_id ) && $wpi_checkout_id == $payment->ID ) {
1403
-				continue;
1404
-			}
1405
-
1406
-			// And failed payments.
1407
-			if ( $payment->has_status( array( 'wpi-cancelled', 'wpi-failed' ) ) ) {
1408
-				continue;
1409
-			}
1410
-
1411
-			// Retrieve all the discounts for the payment.
1412
-			$discounts = $payment->get_discounts( true );
1413
-			if ( empty( $discounts ) ) {
1414
-				continue;
1415
-			}
1416
-
1417
-			// And check if the current discount is amongst them.
1418
-			$discounts = array_map( 'strtolower', wpinv_parse_list( $discounts ) );
1419
-			if ( ! empty( $discounts ) && in_array( $code, $discounts ) ) {
1420
-				return false;
1421
-			}
1422
-		}
1423
-
1424
-		return true;
1425
-	}
1426
-
1427
-	/**
1428
-	 * Deletes the discount from the database
1429
-	 *
1430
-	 * @since 1.0.15
1431
-	 * @return boolean
1432
-	 */
1433
-	public function remove() {
1434
-		return $this->delete();
1435
-	}
1436
-
1437
-	/**
1438
-	 * Increases a discount's usage.
1439
-	 *
1440
-	 * @since 1.0.15
1441
-	 * @param int $by The number of usages to increas by.
1442
-	 * @return int
1443
-	 */
1444
-	public function increase_usage( $by = 1 ) {
1445
-
1446
-		// Abort if zero.
1447
-		if ( empty( $by ) ) {
1448
-			return;
1449
-		}
1450
-
1451
-		// Increase the usage.
1452
-		$this->set_uses( $this->get_uses() + (int) $by );
1453
-
1454
-		// Save the discount.
1455
-		$this->save();
1456
-
1457
-		// Fire relevant hooks.
1458
-		if( (int) $by > 0 ) {
1459
-			do_action( 'wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code,  absint( $by ) );
1460
-		} else {
1461
-			do_action( 'wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint( $by ) );
1462
-		}
1463
-
1464
-		// Return the number of times the discount has been used.
1465
-		return $this->get_uses();
1466
-	}
1467
-
1468
-	/**
1469
-	 * Alias of self::__toString()
1470
-	 *
1471
-	 * @since 1.0.15
1472
-	 * @return string|false
1473
-	 */
1474
-	public function get_data_as_json() {
1475
-		return $this->__toString();
1476
-	}
1477
-
1478
-	/**
1479
-	 * Returns a discount's discounted amount.
1480
-	 *
1481
-	 * @since 1.0.15
1482
-	 * @param float $amount
1483
-	 * @return float
1484
-	 */
1485
-	public function get_discounted_amount( $amount ) {
1486
-
1487
-		// Convert amount to float.
1488
-		$amount = (float) $amount;
1489
-
1490
-		// Get discount amount.
1491
-		$discount_amount = $this->get_amount();
1492
-
1493
-		if ( empty( $discount_amount ) ) {
1494
-			return 0;
1495
-		}
1496
-
1497
-		// Format the amount.
1498
-		$discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1396
+        $code     = strtolower( $this->get_code() );
1397
+
1398
+        // For each payment...
1399
+        foreach ( $payments as $payment ) {
1400
+
1401
+            // ... skip the current payment.
1402
+            if ( ! empty( $wpi_checkout_id ) && $wpi_checkout_id == $payment->ID ) {
1403
+                continue;
1404
+            }
1405
+
1406
+            // And failed payments.
1407
+            if ( $payment->has_status( array( 'wpi-cancelled', 'wpi-failed' ) ) ) {
1408
+                continue;
1409
+            }
1410
+
1411
+            // Retrieve all the discounts for the payment.
1412
+            $discounts = $payment->get_discounts( true );
1413
+            if ( empty( $discounts ) ) {
1414
+                continue;
1415
+            }
1416
+
1417
+            // And check if the current discount is amongst them.
1418
+            $discounts = array_map( 'strtolower', wpinv_parse_list( $discounts ) );
1419
+            if ( ! empty( $discounts ) && in_array( $code, $discounts ) ) {
1420
+                return false;
1421
+            }
1422
+        }
1423
+
1424
+        return true;
1425
+    }
1426
+
1427
+    /**
1428
+     * Deletes the discount from the database
1429
+     *
1430
+     * @since 1.0.15
1431
+     * @return boolean
1432
+     */
1433
+    public function remove() {
1434
+        return $this->delete();
1435
+    }
1436
+
1437
+    /**
1438
+     * Increases a discount's usage.
1439
+     *
1440
+     * @since 1.0.15
1441
+     * @param int $by The number of usages to increas by.
1442
+     * @return int
1443
+     */
1444
+    public function increase_usage( $by = 1 ) {
1445
+
1446
+        // Abort if zero.
1447
+        if ( empty( $by ) ) {
1448
+            return;
1449
+        }
1450
+
1451
+        // Increase the usage.
1452
+        $this->set_uses( $this->get_uses() + (int) $by );
1453
+
1454
+        // Save the discount.
1455
+        $this->save();
1456
+
1457
+        // Fire relevant hooks.
1458
+        if( (int) $by > 0 ) {
1459
+            do_action( 'wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code,  absint( $by ) );
1460
+        } else {
1461
+            do_action( 'wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint( $by ) );
1462
+        }
1463
+
1464
+        // Return the number of times the discount has been used.
1465
+        return $this->get_uses();
1466
+    }
1467
+
1468
+    /**
1469
+     * Alias of self::__toString()
1470
+     *
1471
+     * @since 1.0.15
1472
+     * @return string|false
1473
+     */
1474
+    public function get_data_as_json() {
1475
+        return $this->__toString();
1476
+    }
1477
+
1478
+    /**
1479
+     * Returns a discount's discounted amount.
1480
+     *
1481
+     * @since 1.0.15
1482
+     * @param float $amount
1483
+     * @return float
1484
+     */
1485
+    public function get_discounted_amount( $amount ) {
1486
+
1487
+        // Convert amount to float.
1488
+        $amount = (float) $amount;
1489
+
1490
+        // Get discount amount.
1491
+        $discount_amount = $this->get_amount();
1492
+
1493
+        if ( empty( $discount_amount ) ) {
1494
+            return 0;
1495
+        }
1496
+
1497
+        // Format the amount.
1498
+        $discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1499 1499
 		
1500
-		// If this is a percentage discount.
1501
-		if ( $this->is_type( 'percent' ) ) {
1500
+        // If this is a percentage discount.
1501
+        if ( $this->is_type( 'percent' ) ) {
1502 1502
             $discount_amount = $amount * ( $discount_amount / 100 );
1503
-		}
1503
+        }
1504 1504
 
1505
-		// Discount can not be less than zero...
1506
-		if ( $discount_amount < 0 ) {
1507
-			$discount_amount = 0;
1508
-		}
1505
+        // Discount can not be less than zero...
1506
+        if ( $discount_amount < 0 ) {
1507
+            $discount_amount = 0;
1508
+        }
1509 1509
 
1510
-		// ... or more than the amount.
1511
-		if ( $discount_amount > $amount ) {
1512
-			$discount_amount = $amount;
1513
-		}
1510
+        // ... or more than the amount.
1511
+        if ( $discount_amount > $amount ) {
1512
+            $discount_amount = $amount;
1513
+        }
1514 1514
 
1515
-		return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1516
-	}
1515
+        return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1516
+    }
1517 1517
 
1518 1518
 }
Please login to merge, or discard this patch.
Spacing   +296 added lines, -296 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @since   1.0.15
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * Discount class.
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * @since 1.0.15
14 14
  *
15 15
  */
16
-class WPInv_Discount extends GetPaid_Data  {
16
+class WPInv_Discount extends GetPaid_Data {
17 17
 
18 18
 	/**
19 19
 	 * Which data store to load.
@@ -79,35 +79,35 @@  discard block
 block discarded – undo
79 79
 	 *
80 80
 	 * @param int|array|string|WPInv_Discount|WP_Post $discount discount data, object, ID or code.
81 81
 	 */
82
-	public function __construct( $discount = 0 ) {
83
-		parent::__construct( $discount );
82
+	public function __construct($discount = 0) {
83
+		parent::__construct($discount);
84 84
 
85
-		if ( is_numeric( $discount ) && 'wpi_discount' === get_post_type( $discount ) ) {
86
-			$this->set_id( $discount );
87
-		} elseif ( $discount instanceof self ) {
88
-			$this->set_id( $discount->get_id() );
89
-		} elseif ( ! empty( $discount->ID ) ) {
90
-			$this->set_id( $discount->ID );
91
-		} elseif ( is_array( $discount ) ) {
92
-			$this->set_props( $discount );
85
+		if (is_numeric($discount) && 'wpi_discount' === get_post_type($discount)) {
86
+			$this->set_id($discount);
87
+		} elseif ($discount instanceof self) {
88
+			$this->set_id($discount->get_id());
89
+		} elseif (!empty($discount->ID)) {
90
+			$this->set_id($discount->ID);
91
+		} elseif (is_array($discount)) {
92
+			$this->set_props($discount);
93 93
 
94
-			if ( isset( $discount['ID'] ) ) {
95
-				$this->set_id( $discount['ID'] );
94
+			if (isset($discount['ID'])) {
95
+				$this->set_id($discount['ID']);
96 96
 			}
97 97
 
98
-		} elseif ( is_scalar( $discount ) && $discount = self::get_discount_id_by_code( $discount ) ) {
99
-			$this->set_id( $discount );
98
+		} elseif (is_scalar($discount) && $discount = self::get_discount_id_by_code($discount)) {
99
+			$this->set_id($discount);
100 100
 		} else {
101
-			$this->set_object_read( true );
101
+			$this->set_object_read(true);
102 102
 		}
103 103
 
104 104
         // Load the datastore.
105
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
105
+		$this->data_store = GetPaid_Data_Store::load($this->data_store_name);
106 106
 
107
-		if ( $this->get_id() > 0 ) {
108
-            $this->post = get_post( $this->get_id() );
107
+		if ($this->get_id() > 0) {
108
+            $this->post = get_post($this->get_id());
109 109
             $this->ID   = $this->get_id();
110
-			$this->data_store->read( $this );
110
+			$this->data_store->read($this);
111 111
         }
112 112
 
113 113
 	}
@@ -123,50 +123,50 @@  discard block
 block discarded – undo
123 123
 	 * @since 1.0.15
124 124
 	 * @return array|bool array of discount details on success. False otherwise.
125 125
 	 */
126
-	public static function get_data_by( $field, $value ) {
126
+	public static function get_data_by($field, $value) {
127 127
 
128
-		if ( 'id' == strtolower( $field ) ) {
128
+		if ('id' == strtolower($field)) {
129 129
 			// Make sure the value is numeric to avoid casting objects, for example,
130 130
 			// to int 1.
131
-			if ( ! is_numeric( $value ) )
131
+			if (!is_numeric($value))
132 132
 				return false;
133
-			$value = intval( $value );
134
-			if ( $value < 1 )
133
+			$value = intval($value);
134
+			if ($value < 1)
135 135
 				return false;
136 136
 		}
137 137
 
138
-		if ( ! $value || ! is_string( $field ) ) {
138
+		if (!$value || !is_string($field)) {
139 139
 			return false;
140 140
 		}
141 141
 
142
-		$field = trim( $field );
142
+		$field = trim($field);
143 143
 
144 144
 		// prepare query args
145
-		switch ( strtolower( $field ) ) {
145
+		switch (strtolower($field)) {
146 146
 			case 'id':
147 147
 				$discount_id = $value;
148
-				$args		 = array( 'include' => array( $value ) );
148
+				$args = array('include' => array($value));
149 149
 				break;
150 150
 			case 'discount_code':
151 151
 			case 'code':
152
-				$value       = trim( $value );
153
-				$discount_id = wp_cache_get( $value, 'WPInv_Discount_Codes' );
154
-				$args		 = array( 'meta_key' => '_wpi_discount_code', 'meta_value' => $value );
152
+				$value       = trim($value);
153
+				$discount_id = wp_cache_get($value, 'WPInv_Discount_Codes');
154
+				$args = array('meta_key' => '_wpi_discount_code', 'meta_value' => $value);
155 155
 				break;
156 156
 			case 'name':
157 157
 				$discount_id = 0;
158
-				$args		 = array( 'name' => trim( $value ) );
158
+				$args		 = array('name' => trim($value));
159 159
 				break;
160 160
 			default:
161
-				$args		 = apply_filters( "wpinv_discount_get_data_by_{$field}_args", null, $value );
162
-				if ( ! is_array( $args ) ) {
163
-					return apply_filters( "wpinv_discount_get_data_by_$field", false, $value );
161
+				$args		 = apply_filters("wpinv_discount_get_data_by_{$field}_args", null, $value);
162
+				if (!is_array($args)) {
163
+					return apply_filters("wpinv_discount_get_data_by_$field", false, $value);
164 164
 				}
165 165
 
166 166
 		}
167 167
 
168 168
 		// Check if there is a cached value.
169
-		if ( ! empty( $discount_id ) && $discount = wp_cache_get( (int) $discount_id, 'WPInv_Discounts' ) ) {
169
+		if (!empty($discount_id) && $discount = wp_cache_get((int) $discount_id, 'WPInv_Discounts')) {
170 170
 			return $discount;
171 171
 		}
172 172
 
@@ -175,13 +175,13 @@  discard block
 block discarded – undo
175 175
 			array(
176 176
 				'post_type'      => 'wpi_discount',
177 177
 				'posts_per_page' => 1,
178
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' )
178
+				'post_status'    => array('publish', 'pending', 'draft', 'expired')
179 179
 			)
180 180
 		);
181 181
 
182
-		$discount = get_posts( $args );
182
+		$discount = get_posts($args);
183 183
 
184
-		if( empty( $discount ) ) {
184
+		if (empty($discount)) {
185 185
 			return false;
186 186
 		}
187 187
 
@@ -190,30 +190,30 @@  discard block
 block discarded – undo
190 190
 		// Prepare the return data.
191 191
 		$return = array(
192 192
             'ID'                          => $discount->ID,
193
-            'code'                        => get_post_meta( $discount->ID, '_wpi_discount_code', true ),
194
-            'amount'                      => get_post_meta( $discount->ID, '_wpi_discount_amount', true ),
193
+            'code'                        => get_post_meta($discount->ID, '_wpi_discount_code', true),
194
+            'amount'                      => get_post_meta($discount->ID, '_wpi_discount_amount', true),
195 195
             'date_created'                => $discount->post_date,
196 196
 			'date_modified'               => $discount->post_modified,
197 197
 			'status'               		  => $discount->post_status,
198
-			'start'                  	  => get_post_meta( $discount->ID, '_wpi_discount_start', true ),
199
-            'expiration'                  => get_post_meta( $discount->ID, '_wpi_discount_expiration', true ),
200
-            'type'               		  => get_post_meta( $discount->ID, '_wpi_discount_type', true ),
198
+			'start'                  	  => get_post_meta($discount->ID, '_wpi_discount_start', true),
199
+            'expiration'                  => get_post_meta($discount->ID, '_wpi_discount_expiration', true),
200
+            'type'               		  => get_post_meta($discount->ID, '_wpi_discount_type', true),
201 201
             'description'                 => $discount->post_excerpt,
202
-            'uses'                 		  => get_post_meta( $discount->ID, '_wpi_discount_uses', true ),
203
-            'is_single_use'               => get_post_meta( $discount->ID, '_wpi_discount_is_single_use', true ),
204
-            'items'              	      => get_post_meta( $discount->ID, '_wpi_discount_items', true ),
205
-            'excluded_items'              => get_post_meta( $discount->ID, '_wpi_discount_excluded_items', true ),
206
-            'max_uses'                    => get_post_meta( $discount->ID, '_wpi_discount_max_uses', true ),
207
-            'is_recurring'                => get_post_meta( $discount->ID, '_wpi_discount_is_recurring', true ),
208
-            'min_total'                   => get_post_meta( $discount->ID, '_wpi_discount_min_total', true ),
209
-            'max_total'                   => get_post_meta( $discount->ID, '_wpi_discount_max_total', true ),
202
+            'uses'                 		  => get_post_meta($discount->ID, '_wpi_discount_uses', true),
203
+            'is_single_use'               => get_post_meta($discount->ID, '_wpi_discount_is_single_use', true),
204
+            'items'              	      => get_post_meta($discount->ID, '_wpi_discount_items', true),
205
+            'excluded_items'              => get_post_meta($discount->ID, '_wpi_discount_excluded_items', true),
206
+            'max_uses'                    => get_post_meta($discount->ID, '_wpi_discount_max_uses', true),
207
+            'is_recurring'                => get_post_meta($discount->ID, '_wpi_discount_is_recurring', true),
208
+            'min_total'                   => get_post_meta($discount->ID, '_wpi_discount_min_total', true),
209
+            'max_total'                   => get_post_meta($discount->ID, '_wpi_discount_max_total', true),
210 210
         );
211 211
 
212
-		$return = apply_filters( 'wpinv_discount_properties', $return );
212
+		$return = apply_filters('wpinv_discount_properties', $return);
213 213
 
214 214
 		// Update the cache with our data
215
-		wp_cache_add( $discount->ID, $return, 'WPInv_Discounts' );
216
-		wp_cache_add( $return['code'], $discount->ID, 'WPInv_Discount_Codes' );
215
+		wp_cache_add($discount->ID, $return, 'WPInv_Discounts');
216
+		wp_cache_add($return['code'], $discount->ID, 'WPInv_Discount_Codes');
217 217
 
218 218
 		return $return;
219 219
 	}
@@ -227,19 +227,19 @@  discard block
 block discarded – undo
227 227
 	 * @since 1.0.15
228 228
 	 * @return int
229 229
 	 */
230
-	public static function get_discount_id_by_code( $discount_code ) {
230
+	public static function get_discount_id_by_code($discount_code) {
231 231
 
232 232
 		// Trim the code.
233
-		$discount_code = trim( $discount_code );
233
+		$discount_code = trim($discount_code);
234 234
 
235 235
 		// Ensure a value has been passed.
236
-		if ( empty( $discount_code ) ) {
236
+		if (empty($discount_code)) {
237 237
 			return 0;
238 238
 		}
239 239
 
240 240
 		// Maybe retrieve from the cache.
241
-		$discount_id   = wp_cache_get( $discount_code, 'getpaid_discount_codes' );
242
-		if ( ! empty( $discount_id ) ) {
241
+		$discount_id = wp_cache_get($discount_code, 'getpaid_discount_codes');
242
+		if (!empty($discount_id)) {
243 243
 			return $discount_id;
244 244
 		}
245 245
 
@@ -250,19 +250,19 @@  discard block
 block discarded – undo
250 250
 				'meta_value'     => $discount_code,
251 251
 				'post_type'      => 'wpi_discount',
252 252
 				'posts_per_page' => 1,
253
-				'post_status'    => array( 'publish', 'pending', 'draft', 'expired' ),
253
+				'post_status'    => array('publish', 'pending', 'draft', 'expired'),
254 254
 				'fields'         => 'ids',
255 255
 			)
256 256
 		);
257 257
 
258
-		if ( empty( $discounts ) ) {
258
+		if (empty($discounts)) {
259 259
 			return 0;
260 260
 		}
261 261
 
262 262
 		$discount_id = $discounts[0];
263 263
 
264 264
 		// Update the cache with our data
265
-		wp_cache_add( get_post_meta( $discount_id, '_wpi_discount_code', true ), $discount_id, 'getpaid_discount_codes' );
265
+		wp_cache_add(get_post_meta($discount_id, '_wpi_discount_code', true), $discount_id, 'getpaid_discount_codes');
266 266
 
267 267
 		return $discount_id;
268 268
 	}
@@ -275,8 +275,8 @@  discard block
 block discarded – undo
275 275
 	 *
276 276
 	 * @return bool Whether the given discount field is set.
277 277
 	 */
278
-	public function __isset( $key ){
279
-		return isset( $this->data[$key] ) || method_exists( $this, "get_$key");
278
+	public function __isset($key) {
279
+		return isset($this->data[$key]) || method_exists($this, "get_$key");
280 280
 	}
281 281
 
282 282
 	/*
@@ -301,8 +301,8 @@  discard block
 block discarded – undo
301 301
 	 * @param  string $context View or edit context.
302 302
 	 * @return string
303 303
 	 */
304
-	public function get_status( $context = 'view' ) {
305
-		return $this->get_prop( 'status', $context );
304
+	public function get_status($context = 'view') {
305
+		return $this->get_prop('status', $context);
306 306
     }
307 307
 
308 308
     /**
@@ -312,8 +312,8 @@  discard block
 block discarded – undo
312 312
 	 * @param  string $context View or edit context.
313 313
 	 * @return string
314 314
 	 */
315
-	public function get_version( $context = 'view' ) {
316
-		return $this->get_prop( 'version', $context );
315
+	public function get_version($context = 'view') {
316
+		return $this->get_prop('version', $context);
317 317
     }
318 318
 
319 319
     /**
@@ -323,8 +323,8 @@  discard block
 block discarded – undo
323 323
 	 * @param  string $context View or edit context.
324 324
 	 * @return string
325 325
 	 */
326
-	public function get_date_created( $context = 'view' ) {
327
-		return $this->get_prop( 'date_created', $context );
326
+	public function get_date_created($context = 'view') {
327
+		return $this->get_prop('date_created', $context);
328 328
     }
329 329
 
330 330
     /**
@@ -334,11 +334,11 @@  discard block
 block discarded – undo
334 334
 	 * @param  string $context View or edit context.
335 335
 	 * @return string
336 336
 	 */
337
-	public function get_date_created_gmt( $context = 'view' ) {
338
-        $date = $this->get_date_created( $context );
337
+	public function get_date_created_gmt($context = 'view') {
338
+        $date = $this->get_date_created($context);
339 339
 
340
-        if ( $date ) {
341
-            $date = get_gmt_from_date( $date );
340
+        if ($date) {
341
+            $date = get_gmt_from_date($date);
342 342
         }
343 343
 		return $date;
344 344
     }
@@ -350,8 +350,8 @@  discard block
 block discarded – undo
350 350
 	 * @param  string $context View or edit context.
351 351
 	 * @return string
352 352
 	 */
353
-	public function get_date_modified( $context = 'view' ) {
354
-		return $this->get_prop( 'date_modified', $context );
353
+	public function get_date_modified($context = 'view') {
354
+		return $this->get_prop('date_modified', $context);
355 355
     }
356 356
 
357 357
     /**
@@ -361,11 +361,11 @@  discard block
 block discarded – undo
361 361
 	 * @param  string $context View or edit context.
362 362
 	 * @return string
363 363
 	 */
364
-	public function get_date_modified_gmt( $context = 'view' ) {
365
-        $date = $this->get_date_modified( $context );
364
+	public function get_date_modified_gmt($context = 'view') {
365
+        $date = $this->get_date_modified($context);
366 366
 
367
-        if ( $date ) {
368
-            $date = get_gmt_from_date( $date );
367
+        if ($date) {
368
+            $date = get_gmt_from_date($date);
369 369
         }
370 370
 		return $date;
371 371
     }
@@ -377,8 +377,8 @@  discard block
 block discarded – undo
377 377
 	 * @param  string $context View or edit context.
378 378
 	 * @return string
379 379
 	 */
380
-	public function get_name( $context = 'view' ) {
381
-		return $this->get_prop( 'name', $context );
380
+	public function get_name($context = 'view') {
381
+		return $this->get_prop('name', $context);
382 382
     }
383 383
 
384 384
     /**
@@ -388,8 +388,8 @@  discard block
 block discarded – undo
388 388
 	 * @param  string $context View or edit context.
389 389
 	 * @return string
390 390
 	 */
391
-	public function get_title( $context = 'view' ) {
392
-		return $this->get_name( $context );
391
+	public function get_title($context = 'view') {
392
+		return $this->get_name($context);
393 393
     }
394 394
 
395 395
     /**
@@ -399,8 +399,8 @@  discard block
 block discarded – undo
399 399
 	 * @param  string $context View or edit context.
400 400
 	 * @return string
401 401
 	 */
402
-	public function get_description( $context = 'view' ) {
403
-		return $this->get_prop( 'description', $context );
402
+	public function get_description($context = 'view') {
403
+		return $this->get_prop('description', $context);
404 404
     }
405 405
 
406 406
     /**
@@ -410,8 +410,8 @@  discard block
 block discarded – undo
410 410
 	 * @param  string $context View or edit context.
411 411
 	 * @return string
412 412
 	 */
413
-	public function get_excerpt( $context = 'view' ) {
414
-		return $this->get_description( $context );
413
+	public function get_excerpt($context = 'view') {
414
+		return $this->get_description($context);
415 415
     }
416 416
 
417 417
     /**
@@ -421,8 +421,8 @@  discard block
 block discarded – undo
421 421
 	 * @param  string $context View or edit context.
422 422
 	 * @return string
423 423
 	 */
424
-	public function get_summary( $context = 'view' ) {
425
-		return $this->get_description( $context );
424
+	public function get_summary($context = 'view') {
425
+		return $this->get_description($context);
426 426
     }
427 427
 
428 428
     /**
@@ -432,8 +432,8 @@  discard block
 block discarded – undo
432 432
 	 * @param  string $context View or edit context.
433 433
 	 * @return string
434 434
 	 */
435
-	public function get_author( $context = 'view' ) {
436
-		return (int) $this->get_prop( 'author', $context );
435
+	public function get_author($context = 'view') {
436
+		return (int) $this->get_prop('author', $context);
437 437
 	}
438 438
 	
439 439
 	/**
@@ -443,8 +443,8 @@  discard block
 block discarded – undo
443 443
 	 * @param  string $context View or edit context.
444 444
 	 * @return string
445 445
 	 */
446
-	public function get_code( $context = 'view' ) {
447
-		return $this->get_prop( 'code', $context );
446
+	public function get_code($context = 'view') {
447
+		return $this->get_prop('code', $context);
448 448
 	}
449 449
 	
450 450
 	/**
@@ -454,8 +454,8 @@  discard block
 block discarded – undo
454 454
 	 * @param  string $context View or edit context.
455 455
 	 * @return string
456 456
 	 */
457
-	public function get_coupon_code( $context = 'view' ) {
458
-		return $this->get_code( $context );
457
+	public function get_coupon_code($context = 'view') {
458
+		return $this->get_code($context);
459 459
 	}
460 460
 	
461 461
 	/**
@@ -465,8 +465,8 @@  discard block
 block discarded – undo
465 465
 	 * @param  string $context View or edit context.
466 466
 	 * @return string
467 467
 	 */
468
-	public function get_discount_code( $context = 'view' ) {
469
-		return $this->get_code( $context );
468
+	public function get_discount_code($context = 'view') {
469
+		return $this->get_code($context);
470 470
 	}
471 471
 	
472 472
 	/**
@@ -476,8 +476,8 @@  discard block
 block discarded – undo
476 476
 	 * @param  string $context View or edit context.
477 477
 	 * @return float
478 478
 	 */
479
-	public function get_amount( $context = 'view' ) {
480
-		return $this->get_prop( 'amount', $context );
479
+	public function get_amount($context = 'view') {
480
+		return $this->get_prop('amount', $context);
481 481
 	}
482 482
 
483 483
 	/**
@@ -488,13 +488,13 @@  discard block
 block discarded – undo
488 488
 	 */
489 489
 	public function get_formatted_amount() {
490 490
 
491
-		if ( $this->is_type( 'flat' ) ) {
492
-			$rate = wpinv_price( wpinv_format_amount( $this->get_amount() ) );
491
+		if ($this->is_type('flat')) {
492
+			$rate = wpinv_price(wpinv_format_amount($this->get_amount()));
493 493
 		} else {
494 494
 			$rate = $this->get_amount() . '%';
495 495
 		}
496 496
 
497
-		return apply_filters( 'wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount() );
497
+		return apply_filters('wpinv_format_discount_rate', $rate, $this->get_type(), $this->get_amount());
498 498
 	}
499 499
 	
500 500
 	/**
@@ -504,8 +504,8 @@  discard block
 block discarded – undo
504 504
 	 * @param  string $context View or edit context.
505 505
 	 * @return string
506 506
 	 */
507
-	public function get_start( $context = 'view' ) {
508
-		return $this->get_prop( 'start', $context );
507
+	public function get_start($context = 'view') {
508
+		return $this->get_prop('start', $context);
509 509
 	}
510 510
 	
511 511
 	/**
@@ -515,8 +515,8 @@  discard block
 block discarded – undo
515 515
 	 * @param  string $context View or edit context.
516 516
 	 * @return string
517 517
 	 */
518
-	public function get_start_date( $context = 'view' ) {
519
-		return $this->get_start( $context );
518
+	public function get_start_date($context = 'view') {
519
+		return $this->get_start($context);
520 520
 	}
521 521
 	
522 522
 	/**
@@ -526,8 +526,8 @@  discard block
 block discarded – undo
526 526
 	 * @param  string $context View or edit context.
527 527
 	 * @return string
528 528
 	 */
529
-	public function get_expiration( $context = 'view' ) {
530
-		return $this->get_prop( 'expiration', $context );
529
+	public function get_expiration($context = 'view') {
530
+		return $this->get_prop('expiration', $context);
531 531
 	}
532 532
 	
533 533
 	/**
@@ -537,8 +537,8 @@  discard block
 block discarded – undo
537 537
 	 * @param  string $context View or edit context.
538 538
 	 * @return string
539 539
 	 */
540
-	public function get_expiration_date( $context = 'view' ) {
541
-		return $this->get_expiration( $context );
540
+	public function get_expiration_date($context = 'view') {
541
+		return $this->get_expiration($context);
542 542
 	}
543 543
 
544 544
 	/**
@@ -548,8 +548,8 @@  discard block
 block discarded – undo
548 548
 	 * @param  string $context View or edit context.
549 549
 	 * @return string
550 550
 	 */
551
-	public function get_end_date( $context = 'view' ) {
552
-		return $this->get_expiration( $context );
551
+	public function get_end_date($context = 'view') {
552
+		return $this->get_expiration($context);
553 553
 	}
554 554
 	
555 555
 	/**
@@ -559,8 +559,8 @@  discard block
 block discarded – undo
559 559
 	 * @param  string $context View or edit context.
560 560
 	 * @return string
561 561
 	 */
562
-	public function get_type( $context = 'view' ) {
563
-		return $this->get_prop( 'type', $context );
562
+	public function get_type($context = 'view') {
563
+		return $this->get_prop('type', $context);
564 564
 	}
565 565
 
566 566
 	/**
@@ -570,8 +570,8 @@  discard block
 block discarded – undo
570 570
 	 * @param  string $context View or edit context.
571 571
 	 * @return int
572 572
 	 */
573
-	public function get_uses( $context = 'view' ) {
574
-		return (int) $this->get_prop( 'uses', $context );
573
+	public function get_uses($context = 'view') {
574
+		return (int) $this->get_prop('uses', $context);
575 575
 	}
576 576
 
577 577
 	/**
@@ -582,7 +582,7 @@  discard block
 block discarded – undo
582 582
 	 */
583 583
 	public function get_usage() {
584 584
 
585
-		if ( ! $this->has_limit() ) {
585
+		if (!$this->has_limit()) {
586 586
 			return $this->get_uses() . ' / ' . ' &infin;';
587 587
 		}
588 588
 
@@ -597,9 +597,9 @@  discard block
 block discarded – undo
597 597
 	 * @param  string $context View or edit context.
598 598
 	 * @return int
599 599
 	 */
600
-	public function get_max_uses( $context = 'view' ) {
601
-		$max_uses = $this->get_prop( 'max_uses', $context );
602
-		return empty( $max_uses ) ? null : $max_uses;
600
+	public function get_max_uses($context = 'view') {
601
+		$max_uses = $this->get_prop('max_uses', $context);
602
+		return empty($max_uses) ? null : $max_uses;
603 603
 	}
604 604
 
605 605
 	/**
@@ -609,8 +609,8 @@  discard block
 block discarded – undo
609 609
 	 * @param  string $context View or edit context.
610 610
 	 * @return bool
611 611
 	 */
612
-	public function get_is_single_use( $context = 'view' ) {
613
-		return $this->get_prop( 'is_single_use', $context );
612
+	public function get_is_single_use($context = 'view') {
613
+		return $this->get_prop('is_single_use', $context);
614 614
 	}
615 615
 
616 616
 	/**
@@ -620,8 +620,8 @@  discard block
 block discarded – undo
620 620
 	 * @param  string $context View or edit context.
621 621
 	 * @return array
622 622
 	 */
623
-	public function get_items( $context = 'view' ) {
624
-		return wpinv_parse_list( $this->get_prop( 'items', $context ) );
623
+	public function get_items($context = 'view') {
624
+		return wpinv_parse_list($this->get_prop('items', $context));
625 625
 	}
626 626
 
627 627
 	/**
@@ -631,8 +631,8 @@  discard block
 block discarded – undo
631 631
 	 * @param  string $context View or edit context.
632 632
 	 * @return array
633 633
 	 */
634
-	public function get_allowed_items( $context = 'view' ) {
635
-		return $this->get_items( $context );
634
+	public function get_allowed_items($context = 'view') {
635
+		return $this->get_items($context);
636 636
 	}
637 637
 
638 638
 	/**
@@ -642,8 +642,8 @@  discard block
 block discarded – undo
642 642
 	 * @param  string $context View or edit context.
643 643
 	 * @return array
644 644
 	 */
645
-	public function get_excluded_items( $context = 'view' ) {
646
-		return wpinv_parse_list( $this->get_prop( 'excluded_items', $context ) );
645
+	public function get_excluded_items($context = 'view') {
646
+		return wpinv_parse_list($this->get_prop('excluded_items', $context));
647 647
 	}
648 648
 
649 649
 	/**
@@ -653,8 +653,8 @@  discard block
 block discarded – undo
653 653
 	 * @param  string $context View or edit context.
654 654
 	 * @return int|string|bool
655 655
 	 */
656
-	public function get_is_recurring( $context = 'view' ) {
657
-		return $this->get_prop( 'is_recurring', $context );
656
+	public function get_is_recurring($context = 'view') {
657
+		return $this->get_prop('is_recurring', $context);
658 658
 	}
659 659
 
660 660
 	/**
@@ -664,9 +664,9 @@  discard block
 block discarded – undo
664 664
 	 * @param  string $context View or edit context.
665 665
 	 * @return float
666 666
 	 */
667
-	public function get_min_total( $context = 'view' ) {
668
-		$minimum = $this->get_prop( 'min_total', $context );
669
-		return empty( $minimum ) ? null : $minimum;
667
+	public function get_min_total($context = 'view') {
668
+		$minimum = $this->get_prop('min_total', $context);
669
+		return empty($minimum) ? null : $minimum;
670 670
 	}
671 671
 
672 672
 	/**
@@ -676,8 +676,8 @@  discard block
 block discarded – undo
676 676
 	 * @param  string $context View or edit context.
677 677
 	 * @return float
678 678
 	 */
679
-	public function get_minimum_total( $context = 'view' ) {
680
-		return $this->get_min_total( $context );
679
+	public function get_minimum_total($context = 'view') {
680
+		return $this->get_min_total($context);
681 681
 	}
682 682
 
683 683
 	/**
@@ -687,9 +687,9 @@  discard block
 block discarded – undo
687 687
 	 * @param  string $context View or edit context.
688 688
 	 * @return float
689 689
 	 */
690
-	public function get_max_total( $context = 'view' ) {
691
-		$maximum = $this->get_prop( 'max_total', $context );
692
-		return empty( $maximum ) ? null : $maximum;
690
+	public function get_max_total($context = 'view') {
691
+		$maximum = $this->get_prop('max_total', $context);
692
+		return empty($maximum) ? null : $maximum;
693 693
 	}
694 694
 
695 695
 	/**
@@ -699,8 +699,8 @@  discard block
 block discarded – undo
699 699
 	 * @param  string $context View or edit context.
700 700
 	 * @return float
701 701
 	 */
702
-	public function get_maximum_total( $context = 'view' ) {
703
-		return $this->get_max_total( $context );
702
+	public function get_maximum_total($context = 'view') {
703
+		return $this->get_max_total($context);
704 704
 	}
705 705
 
706 706
 	/**
@@ -713,8 +713,8 @@  discard block
 block discarded – undo
713 713
 	 * @param  string $context View or edit context.
714 714
 	 * @return mixed Value of the given discount property (if set).
715 715
 	 */
716
-	public function get( $key, $context = 'view' ) {
717
-        return $this->get_prop( $key, $context );
716
+	public function get($key, $context = 'view') {
717
+        return $this->get_prop($key, $context);
718 718
 	}
719 719
 
720 720
 	/*
@@ -734,10 +734,10 @@  discard block
 block discarded – undo
734 734
 	 * @param  string $status New status.
735 735
 	 * @return array details of change.
736 736
 	 */
737
-	public function set_status( $status ) {
737
+	public function set_status($status) {
738 738
         $old_status = $this->get_status();
739 739
 
740
-        $this->set_prop( 'status', $status );
740
+        $this->set_prop('status', $status);
741 741
 
742 742
 		return array(
743 743
 			'from' => $old_status,
@@ -750,8 +750,8 @@  discard block
 block discarded – undo
750 750
 	 *
751 751
 	 * @since 1.0.19
752 752
 	 */
753
-	public function set_version( $value ) {
754
-		$this->set_prop( 'version', $value );
753
+	public function set_version($value) {
754
+		$this->set_prop('version', $value);
755 755
     }
756 756
 
757 757
     /**
@@ -761,11 +761,11 @@  discard block
 block discarded – undo
761 761
 	 * @param string $value Value to set.
762 762
      * @return bool Whether or not the date was set.
763 763
 	 */
764
-	public function set_date_created( $value ) {
765
-        $date = strtotime( $value );
764
+	public function set_date_created($value) {
765
+        $date = strtotime($value);
766 766
 
767
-        if ( $date ) {
768
-            $this->set_prop( 'date_created', date( 'Y-m-d H:i:s', $date ) );
767
+        if ($date) {
768
+            $this->set_prop('date_created', date('Y-m-d H:i:s', $date));
769 769
             return true;
770 770
         }
771 771
 
@@ -780,11 +780,11 @@  discard block
 block discarded – undo
780 780
 	 * @param string $value Value to set.
781 781
      * @return bool Whether or not the date was set.
782 782
 	 */
783
-	public function set_date_modified( $value ) {
784
-        $date = strtotime( $value );
783
+	public function set_date_modified($value) {
784
+        $date = strtotime($value);
785 785
 
786
-        if ( $date ) {
787
-            $this->set_prop( 'date_modified', date( 'Y-m-d H:i:s', $date ) );
786
+        if ($date) {
787
+            $this->set_prop('date_modified', date('Y-m-d H:i:s', $date));
788 788
             return true;
789 789
         }
790 790
 
@@ -798,9 +798,9 @@  discard block
 block discarded – undo
798 798
 	 * @since 1.0.19
799 799
 	 * @param  string $value New name.
800 800
 	 */
801
-	public function set_name( $value ) {
802
-        $name = sanitize_text_field( $value );
803
-		$this->set_prop( 'name', $name );
801
+	public function set_name($value) {
802
+        $name = sanitize_text_field($value);
803
+		$this->set_prop('name', $name);
804 804
     }
805 805
 
806 806
     /**
@@ -809,8 +809,8 @@  discard block
 block discarded – undo
809 809
 	 * @since 1.0.19
810 810
 	 * @param  string $value New name.
811 811
 	 */
812
-	public function set_title( $value ) {
813
-		$this->set_name( $value );
812
+	public function set_title($value) {
813
+		$this->set_name($value);
814 814
     }
815 815
 
816 816
     /**
@@ -819,9 +819,9 @@  discard block
 block discarded – undo
819 819
 	 * @since 1.0.19
820 820
 	 * @param  string $value New description.
821 821
 	 */
822
-	public function set_description( $value ) {
823
-        $description = wp_kses_post( $value );
824
-		return $this->set_prop( 'description', $description );
822
+	public function set_description($value) {
823
+        $description = wp_kses_post($value);
824
+		return $this->set_prop('description', $description);
825 825
     }
826 826
 
827 827
     /**
@@ -830,8 +830,8 @@  discard block
 block discarded – undo
830 830
 	 * @since 1.0.19
831 831
 	 * @param  string $value New description.
832 832
 	 */
833
-	public function set_excerpt( $value ) {
834
-		$this->set_description( $value );
833
+	public function set_excerpt($value) {
834
+		$this->set_description($value);
835 835
     }
836 836
 
837 837
     /**
@@ -840,8 +840,8 @@  discard block
 block discarded – undo
840 840
 	 * @since 1.0.19
841 841
 	 * @param  string $value New description.
842 842
 	 */
843
-	public function set_summary( $value ) {
844
-		$this->set_description( $value );
843
+	public function set_summary($value) {
844
+		$this->set_description($value);
845 845
     }
846 846
 
847 847
     /**
@@ -850,8 +850,8 @@  discard block
 block discarded – undo
850 850
 	 * @since 1.0.19
851 851
 	 * @param  int $value New author.
852 852
 	 */
853
-	public function set_author( $value ) {
854
-		$this->set_prop( 'author', (int) $value );
853
+	public function set_author($value) {
854
+		$this->set_prop('author', (int) $value);
855 855
 	}
856 856
 	
857 857
 	/**
@@ -860,9 +860,9 @@  discard block
 block discarded – undo
860 860
 	 * @since 1.0.19
861 861
 	 * @param string $value New discount code.
862 862
 	 */
863
-	public function set_code( $value ) {
864
-		$code = sanitize_text_field( $value );
865
-		$this->set_prop( 'code', $code );
863
+	public function set_code($value) {
864
+		$code = sanitize_text_field($value);
865
+		$this->set_prop('code', $code);
866 866
 	}
867 867
 	
868 868
 	/**
@@ -871,8 +871,8 @@  discard block
 block discarded – undo
871 871
 	 * @since 1.0.19
872 872
 	 * @param string $value New discount code.
873 873
 	 */
874
-	public function set_coupon_code( $value ) {
875
-		$this->set_code( $value );
874
+	public function set_coupon_code($value) {
875
+		$this->set_code($value);
876 876
 	}
877 877
 	
878 878
 	/**
@@ -881,8 +881,8 @@  discard block
 block discarded – undo
881 881
 	 * @since 1.0.19
882 882
 	 * @param string $value New discount code.
883 883
 	 */
884
-	public function set_discount_code( $value ) {
885
-		$this->set_code( $value );
884
+	public function set_discount_code($value) {
885
+		$this->set_code($value);
886 886
 	}
887 887
 	
888 888
 	/**
@@ -891,9 +891,9 @@  discard block
 block discarded – undo
891 891
 	 * @since 1.0.19
892 892
 	 * @param float $value New discount code.
893 893
 	 */
894
-	public function set_amount( $value ) {
895
-		$amount = floatval( wpinv_sanitize_amount( $value ) );
896
-		$this->set_prop( 'amount', $amount );
894
+	public function set_amount($value) {
895
+		$amount = floatval(wpinv_sanitize_amount($value));
896
+		$this->set_prop('amount', $amount);
897 897
 	}
898 898
 
899 899
 	/**
@@ -902,15 +902,15 @@  discard block
 block discarded – undo
902 902
 	 * @since 1.0.19
903 903
 	 * @param float $value New start date.
904 904
 	 */
905
-	public function set_start( $value ) {
906
-		$date = strtotime( $value );
905
+	public function set_start($value) {
906
+		$date = strtotime($value);
907 907
 
908
-        if ( $date ) {
909
-            $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
908
+        if ($date) {
909
+            $this->set_prop('start', date('Y-m-d H:i', $date));
910 910
             return true;
911 911
 		}
912 912
 		
913
-		$this->set_prop( 'start', '' );
913
+		$this->set_prop('start', '');
914 914
 
915 915
         return false;
916 916
 	}
@@ -921,8 +921,8 @@  discard block
 block discarded – undo
921 921
 	 * @since 1.0.19
922 922
 	 * @param string $value New start date.
923 923
 	 */
924
-	public function set_start_date( $value ) {
925
-		$this->set_start( $value );
924
+	public function set_start_date($value) {
925
+		$this->set_start($value);
926 926
 	}
927 927
 
928 928
 	/**
@@ -931,15 +931,15 @@  discard block
 block discarded – undo
931 931
 	 * @since 1.0.19
932 932
 	 * @param float $value New expiration date.
933 933
 	 */
934
-	public function set_expiration( $value ) {
935
-		$date = strtotime( $value );
934
+	public function set_expiration($value) {
935
+		$date = strtotime($value);
936 936
 
937
-        if ( $date ) {
938
-            $this->set_prop( 'expiration', date( 'Y-m-d H:i', $date ) );
937
+        if ($date) {
938
+            $this->set_prop('expiration', date('Y-m-d H:i', $date));
939 939
             return true;
940 940
         }
941 941
 
942
-		$this->set_prop( 'expiration', '' );
942
+		$this->set_prop('expiration', '');
943 943
         return false;
944 944
 	}
945 945
 
@@ -949,8 +949,8 @@  discard block
 block discarded – undo
949 949
 	 * @since 1.0.19
950 950
 	 * @param string $value New expiration date.
951 951
 	 */
952
-	public function set_expiration_date( $value ) {
953
-		$this->set_expiration( $value );
952
+	public function set_expiration_date($value) {
953
+		$this->set_expiration($value);
954 954
 	}
955 955
 
956 956
 	/**
@@ -959,8 +959,8 @@  discard block
 block discarded – undo
959 959
 	 * @since 1.0.19
960 960
 	 * @param string $value New expiration date.
961 961
 	 */
962
-	public function set_end_date( $value ) {
963
-		$this->set_expiration( $value );
962
+	public function set_end_date($value) {
963
+		$this->set_expiration($value);
964 964
 	}
965 965
 
966 966
 	/**
@@ -969,9 +969,9 @@  discard block
 block discarded – undo
969 969
 	 * @since 1.0.19
970 970
 	 * @param string $value New discount type.
971 971
 	 */
972
-	public function set_type( $value ) {
973
-		if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
974
-			$this->set_prop( 'type', sanitize_text_field( $value ) );
972
+	public function set_type($value) {
973
+		if ($value && array_key_exists(sanitize_text_field($value), wpinv_get_discount_types())) {
974
+			$this->set_prop('type', sanitize_text_field($value));
975 975
 		}
976 976
 	}
977 977
 
@@ -981,15 +981,15 @@  discard block
 block discarded – undo
981 981
 	 * @since 1.0.19
982 982
 	 * @param int $value usage count.
983 983
 	 */
984
-	public function set_uses( $value ) {
984
+	public function set_uses($value) {
985 985
 
986 986
 		$value = (int) $value;
987 987
 
988
-		if ( $value < 0 ) {
988
+		if ($value < 0) {
989 989
 			$value = 0;
990 990
 		}
991 991
 
992
-		$this->set_prop( 'uses', (int) $value );
992
+		$this->set_prop('uses', (int) $value);
993 993
 	}
994 994
 
995 995
 	/**
@@ -998,8 +998,8 @@  discard block
 block discarded – undo
998 998
 	 * @since 1.0.19
999 999
 	 * @param int $value maximum usage count.
1000 1000
 	 */
1001
-	public function set_max_uses( $value ) {
1002
-		$this->set_prop( 'max_uses', absint( $value ) );
1001
+	public function set_max_uses($value) {
1002
+		$this->set_prop('max_uses', absint($value));
1003 1003
 	}
1004 1004
 
1005 1005
 	/**
@@ -1008,8 +1008,8 @@  discard block
 block discarded – undo
1008 1008
 	 * @since 1.0.19
1009 1009
 	 * @param int|bool $value is single use.
1010 1010
 	 */
1011
-	public function set_is_single_use( $value ) {
1012
-		$this->set_prop( 'is_single_use', (bool) $value );
1011
+	public function set_is_single_use($value) {
1012
+		$this->set_prop('is_single_use', (bool) $value);
1013 1013
 	}
1014 1014
 
1015 1015
 	/**
@@ -1018,8 +1018,8 @@  discard block
 block discarded – undo
1018 1018
 	 * @since 1.0.19
1019 1019
 	 * @param array $value items.
1020 1020
 	 */
1021
-	public function set_items( $value ) {
1022
-		$this->set_prop( 'items', wpinv_parse_list( $value ) );
1021
+	public function set_items($value) {
1022
+		$this->set_prop('items', wpinv_parse_list($value));
1023 1023
 	}
1024 1024
 
1025 1025
 	/**
@@ -1028,8 +1028,8 @@  discard block
 block discarded – undo
1028 1028
 	 * @since 1.0.19
1029 1029
 	 * @param array $value items.
1030 1030
 	 */
1031
-	public function set_allowed_items( $value ) {
1032
-		$this->set_items( $value );
1031
+	public function set_allowed_items($value) {
1032
+		$this->set_items($value);
1033 1033
 	}
1034 1034
 
1035 1035
 	/**
@@ -1038,8 +1038,8 @@  discard block
 block discarded – undo
1038 1038
 	 * @since 1.0.19
1039 1039
 	 * @param array $value items.
1040 1040
 	 */
1041
-	public function set_excluded_items( $value ) {
1042
-		$this->set_prop( 'excluded_items', wpinv_parse_list( $value ) );
1041
+	public function set_excluded_items($value) {
1042
+		$this->set_prop('excluded_items', wpinv_parse_list($value));
1043 1043
 	}
1044 1044
 
1045 1045
 	/**
@@ -1048,8 +1048,8 @@  discard block
 block discarded – undo
1048 1048
 	 * @since 1.0.19
1049 1049
 	 * @param int|bool $value is recurring.
1050 1050
 	 */
1051
-	public function set_is_recurring( $value ) {
1052
-		$this->set_prop( 'is_recurring', (bool) $value );
1051
+	public function set_is_recurring($value) {
1052
+		$this->set_prop('is_recurring', (bool) $value);
1053 1053
 	}
1054 1054
 
1055 1055
 	/**
@@ -1058,8 +1058,8 @@  discard block
 block discarded – undo
1058 1058
 	 * @since 1.0.19
1059 1059
 	 * @param float $value minimum total.
1060 1060
 	 */
1061
-	public function set_min_total( $value ) {
1062
-		$this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1061
+	public function set_min_total($value) {
1062
+		$this->set_prop('min_total', (float) wpinv_sanitize_amount($value));
1063 1063
 	}
1064 1064
 
1065 1065
 	/**
@@ -1068,8 +1068,8 @@  discard block
 block discarded – undo
1068 1068
 	 * @since 1.0.19
1069 1069
 	 * @param float $value minimum total.
1070 1070
 	 */
1071
-	public function set_minimum_total( $value ) {
1072
-		$this->set_min_total( $value );
1071
+	public function set_minimum_total($value) {
1072
+		$this->set_min_total($value);
1073 1073
 	}
1074 1074
 
1075 1075
 	/**
@@ -1078,8 +1078,8 @@  discard block
 block discarded – undo
1078 1078
 	 * @since 1.0.19
1079 1079
 	 * @param float $value maximum total.
1080 1080
 	 */
1081
-	public function set_max_total( $value ) {
1082
-		$this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1081
+	public function set_max_total($value) {
1082
+		$this->set_prop('max_total', (float) wpinv_sanitize_amount($value));
1083 1083
 	}
1084 1084
 
1085 1085
 	/**
@@ -1088,23 +1088,23 @@  discard block
 block discarded – undo
1088 1088
 	 * @since 1.0.19
1089 1089
 	 * @param float $value maximum total.
1090 1090
 	 */
1091
-	public function set_maximum_total( $value ) {
1092
-		$this->set_max_total( $value );
1091
+	public function set_maximum_total($value) {
1092
+		$this->set_max_total($value);
1093 1093
 	}
1094 1094
 
1095 1095
 	/**
1096 1096
 	 * @deprecated
1097 1097
 	 */
1098
-	public function refresh(){}
1098
+	public function refresh() {}
1099 1099
 
1100 1100
 	/**
1101 1101
 	 * @deprecated
1102 1102
 	 *
1103 1103
 	 */
1104
-	public function update_status( $status = 'publish' ){
1104
+	public function update_status($status = 'publish') {
1105 1105
 
1106
-		if ( $this->exists() && $this->get_status() != $status ) {
1107
-			$this->set_status( $status );
1106
+		if ($this->exists() && $this->get_status() != $status) {
1107
+			$this->set_status($status);
1108 1108
 			$this->save();
1109 1109
 		}
1110 1110
 
@@ -1124,9 +1124,9 @@  discard block
 block discarded – undo
1124 1124
 	 *
1125 1125
 	 * @since 1.0.15
1126 1126
 	 */
1127
-	public function exists(){
1127
+	public function exists() {
1128 1128
 		$id = $this->get_id();
1129
-		return ! empty( $id );
1129
+		return !empty($id);
1130 1130
 	}
1131 1131
 
1132 1132
 	/**
@@ -1137,7 +1137,7 @@  discard block
 block discarded – undo
1137 1137
 	 * @since 1.0.15
1138 1138
 	 * @return bool
1139 1139
 	 */
1140
-	public function is_type( $type ) {
1140
+	public function is_type($type) {
1141 1141
 		return $this->get_type() == $type;
1142 1142
 	}
1143 1143
 
@@ -1159,7 +1159,7 @@  discard block
 block discarded – undo
1159 1159
 	 */
1160 1160
 	public function has_limit() {
1161 1161
 		$limit = $this->get_max_uses();
1162
-		return ! empty( $limit );
1162
+		return !empty($limit);
1163 1163
 	}
1164 1164
 
1165 1165
 	/**
@@ -1180,13 +1180,13 @@  discard block
 block discarded – undo
1180 1180
 	 */
1181 1181
 	public function has_exceeded_limit() {
1182 1182
 
1183
-		if ( ! $this->has_limit() || ! $this->has_uses() ) {
1184
-			$exceeded = false ;
1183
+		if (!$this->has_limit() || !$this->has_uses()) {
1184
+			$exceeded = false;
1185 1185
 		} else {
1186
-			$exceeded = ! ( (int) $this->get_max_uses() < $this->get_uses() );
1186
+			$exceeded = !((int) $this->get_max_uses() < $this->get_uses());
1187 1187
 		}
1188 1188
 
1189
-		return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code );
1189
+		return apply_filters('wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code);
1190 1190
 	}
1191 1191
 
1192 1192
 	/**
@@ -1197,7 +1197,7 @@  discard block
 block discarded – undo
1197 1197
 	 */
1198 1198
 	public function has_expiration_date() {
1199 1199
 		$date = $this->get_expiration_date();
1200
-		return ! empty( $date );
1200
+		return !empty($date);
1201 1201
 	}
1202 1202
 
1203 1203
 	/**
@@ -1207,8 +1207,8 @@  discard block
 block discarded – undo
1207 1207
 	 * @return bool
1208 1208
 	 */
1209 1209
 	public function is_expired() {
1210
-		$expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1211
-		return apply_filters( 'wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code );
1210
+		$expired = $this->has_expiration_date() ? current_time('timestamp') > strtotime($this->get_expiration_date()) : false;
1211
+		return apply_filters('wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code);
1212 1212
 	}
1213 1213
 
1214 1214
 	/**
@@ -1219,7 +1219,7 @@  discard block
 block discarded – undo
1219 1219
 	 */
1220 1220
 	public function has_start_date() {
1221 1221
 		$date = $this->get_start_date();
1222
-		return ! empty( $date );
1222
+		return !empty($date);
1223 1223
 	}
1224 1224
 
1225 1225
 	/**
@@ -1229,8 +1229,8 @@  discard block
 block discarded – undo
1229 1229
 	 * @return bool
1230 1230
 	 */
1231 1231
 	public function has_started() {
1232
-		$started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1233
-		return apply_filters( 'wpinv_is_discount_started', $started, $this->ID, $this, $this->code );
1232
+		$started = $this->has_start_date() ? true : current_time('timestamp') > strtotime($this->get_start_date());
1233
+		return apply_filters('wpinv_is_discount_started', $started, $this->ID, $this, $this->code);
1234 1234
 	}
1235 1235
 
1236 1236
 	/**
@@ -1241,7 +1241,7 @@  discard block
 block discarded – undo
1241 1241
 	 */
1242 1242
 	public function has_allowed_items() {
1243 1243
 		$allowed_items = $this->get_allowed_items();
1244
-		return empty( $allowed_items );
1244
+		return empty($allowed_items);
1245 1245
 	}
1246 1246
 
1247 1247
 	/**
@@ -1252,7 +1252,7 @@  discard block
 block discarded – undo
1252 1252
 	 */
1253 1253
 	public function has_excluded_items() {
1254 1254
 		$excluded_items = $this->get_excluded_items();
1255
-		return empty( $excluded_items );
1255
+		return empty($excluded_items);
1256 1256
 	}
1257 1257
 
1258 1258
 	/**
@@ -1262,17 +1262,17 @@  discard block
 block discarded – undo
1262 1262
 	 * @since 1.0.15
1263 1263
 	 * @return boolean
1264 1264
 	 */
1265
-	public function is_valid_for_items( $item_ids ) {
1265
+	public function is_valid_for_items($item_ids) {
1266 1266
 
1267
-		$item_ids = array_map( 'intval',  wpinv_parse_list( $item_ids ) );
1268
-		$included = array_intersect( $item_ids, $this->get_allowed_items() );
1269
-		$excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1267
+		$item_ids = array_map('intval', wpinv_parse_list($item_ids));
1268
+		$included = array_intersect($item_ids, $this->get_allowed_items());
1269
+		$excluded = array_intersect($item_ids, $this->get_excluded_items());
1270 1270
 
1271
-		if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1271
+		if ($this->has_excluded_items() && !empty($excluded)) {
1272 1272
 			return false;
1273 1273
 		}
1274 1274
 
1275
-		if ( $this->has_allowed_items() && empty( $included ) ) {
1275
+		if ($this->has_allowed_items() && empty($included)) {
1276 1276
 			return false;
1277 1277
 		}
1278 1278
 		return true;
@@ -1285,8 +1285,8 @@  discard block
 block discarded – undo
1285 1285
 	 * @since 1.0.15
1286 1286
 	 * @return boolean
1287 1287
 	 */
1288
-	public function is_valid_for_amount( $amount ) {
1289
-		return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1288
+	public function is_valid_for_amount($amount) {
1289
+		return $this->is_minimum_amount_met($amount) && $this->is_maximum_amount_met($amount);
1290 1290
 	}
1291 1291
 
1292 1292
 	/**
@@ -1297,7 +1297,7 @@  discard block
 block discarded – undo
1297 1297
 	 */
1298 1298
 	public function has_minimum_amount() {
1299 1299
 		$minimum = $this->get_minimum_total();
1300
-		return ! empty( $minimum );
1300
+		return !empty($minimum);
1301 1301
 	}
1302 1302
 
1303 1303
 	/**
@@ -1307,10 +1307,10 @@  discard block
 block discarded – undo
1307 1307
 	 * @since 1.0.15
1308 1308
 	 * @return boolean
1309 1309
 	 */
1310
-	public function is_minimum_amount_met( $amount ) {
1311
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1312
-		$min_met= ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1313
-		return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount );
1310
+	public function is_minimum_amount_met($amount) {
1311
+		$amount = floatval(wpinv_sanitize_amount($amount));
1312
+		$min_met = !($this->has_minimum_amount() && $amount < floatval(wpinv_sanitize_amount($this->get_minimum_total())));
1313
+		return apply_filters('wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount);
1314 1314
 	}
1315 1315
 
1316 1316
 	/**
@@ -1321,7 +1321,7 @@  discard block
 block discarded – undo
1321 1321
 	 */
1322 1322
 	public function has_maximum_amount() {
1323 1323
 		$maximum = $this->get_maximum_total();
1324
-		return ! empty( $maximum );
1324
+		return !empty($maximum);
1325 1325
 	}
1326 1326
 
1327 1327
 	/**
@@ -1331,10 +1331,10 @@  discard block
 block discarded – undo
1331 1331
 	 * @since 1.0.15
1332 1332
 	 * @return boolean
1333 1333
 	 */
1334
-	public function is_maximum_amount_met( $amount ) {
1335
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1336
-		$max_met= ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1337
-		return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount );
1334
+	public function is_maximum_amount_met($amount) {
1335
+		$amount = floatval(wpinv_sanitize_amount($amount));
1336
+		$max_met = !($this->has_maximum_amount() && $amount > floatval(wpinv_sanitize_amount($this->get_maximum_total())));
1337
+		return apply_filters('wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount);
1338 1338
 	}
1339 1339
 
1340 1340
 	/**
@@ -1345,7 +1345,7 @@  discard block
 block discarded – undo
1345 1345
 	 */
1346 1346
 	public function is_recurring() {
1347 1347
 		$recurring = $this->get_is_recurring();
1348
-		return ! empty( $recurring );
1348
+		return !empty($recurring);
1349 1349
 	}
1350 1350
 
1351 1351
 	/**
@@ -1356,7 +1356,7 @@  discard block
 block discarded – undo
1356 1356
 	 */
1357 1357
 	public function is_single_use() {
1358 1358
 		$usage = $this->get_is_single_use();
1359
-		return ! empty( $usage );
1359
+		return !empty($usage);
1360 1360
 	}
1361 1361
 
1362 1362
 	/**
@@ -1366,57 +1366,57 @@  discard block
 block discarded – undo
1366 1366
 	 * @since 1.0.15
1367 1367
 	 * @return boolean
1368 1368
 	 */
1369
-	public function is_valid_for_user( $user ) {
1369
+	public function is_valid_for_user($user) {
1370 1370
 		global $wpi_checkout_id;
1371 1371
 
1372 1372
 		// Ensure that the discount is single use.
1373
-		if ( empty( $user ) || ! $this->is_single_use() ) {
1373
+		if (empty($user) || !$this->is_single_use()) {
1374 1374
 			return true;
1375 1375
 		}
1376 1376
 
1377 1377
 		// Prepare the user id.
1378 1378
 		$user_id = 0;
1379
-        if ( is_int( $user ) ) {
1380
-            $user_id = absint( $user );
1381
-        } else if ( is_email( $user ) && $user_data = get_user_by( 'email', $user ) ) {
1379
+        if (is_int($user)) {
1380
+            $user_id = absint($user);
1381
+        } else if (is_email($user) && $user_data = get_user_by('email', $user)) {
1382 1382
             $user_id = $user_data->ID;
1383
-        } else if ( $user_data = get_user_by( 'login', $user ) ) {
1383
+        } else if ($user_data = get_user_by('login', $user)) {
1384 1384
             $user_id = $user_data->ID;
1385
-        } else if ( absint( $user ) > 0 ) {
1386
-            $user_id = absint( $user );
1385
+        } else if (absint($user) > 0) {
1386
+            $user_id = absint($user);
1387 1387
 		}
1388 1388
 
1389 1389
 		// Ensure that we have a user.
1390
-		if ( empty( $user_id ) ) {
1390
+		if (empty($user_id)) {
1391 1391
 			return true;
1392 1392
 		}
1393 1393
 
1394 1394
 		// Get all payments with matching user id.
1395
-        $payments = wpinv_get_invoices( array( 'user' => $user_id, 'limit' => false ) );
1396
-		$code     = strtolower( $this->get_code() );
1395
+        $payments = wpinv_get_invoices(array('user' => $user_id, 'limit' => false));
1396
+		$code = strtolower($this->get_code());
1397 1397
 
1398 1398
 		// For each payment...
1399
-		foreach ( $payments as $payment ) {
1399
+		foreach ($payments as $payment) {
1400 1400
 
1401 1401
 			// ... skip the current payment.
1402
-			if ( ! empty( $wpi_checkout_id ) && $wpi_checkout_id == $payment->ID ) {
1402
+			if (!empty($wpi_checkout_id) && $wpi_checkout_id == $payment->ID) {
1403 1403
 				continue;
1404 1404
 			}
1405 1405
 
1406 1406
 			// And failed payments.
1407
-			if ( $payment->has_status( array( 'wpi-cancelled', 'wpi-failed' ) ) ) {
1407
+			if ($payment->has_status(array('wpi-cancelled', 'wpi-failed'))) {
1408 1408
 				continue;
1409 1409
 			}
1410 1410
 
1411 1411
 			// Retrieve all the discounts for the payment.
1412
-			$discounts = $payment->get_discounts( true );
1413
-			if ( empty( $discounts ) ) {
1412
+			$discounts = $payment->get_discounts(true);
1413
+			if (empty($discounts)) {
1414 1414
 				continue;
1415 1415
 			}
1416 1416
 
1417 1417
 			// And check if the current discount is amongst them.
1418
-			$discounts = array_map( 'strtolower', wpinv_parse_list( $discounts ) );
1419
-			if ( ! empty( $discounts ) && in_array( $code, $discounts ) ) {
1418
+			$discounts = array_map('strtolower', wpinv_parse_list($discounts));
1419
+			if (!empty($discounts) && in_array($code, $discounts)) {
1420 1420
 				return false;
1421 1421
 			}
1422 1422
 		}
@@ -1441,24 +1441,24 @@  discard block
 block discarded – undo
1441 1441
 	 * @param int $by The number of usages to increas by.
1442 1442
 	 * @return int
1443 1443
 	 */
1444
-	public function increase_usage( $by = 1 ) {
1444
+	public function increase_usage($by = 1) {
1445 1445
 
1446 1446
 		// Abort if zero.
1447
-		if ( empty( $by ) ) {
1447
+		if (empty($by)) {
1448 1448
 			return;
1449 1449
 		}
1450 1450
 
1451 1451
 		// Increase the usage.
1452
-		$this->set_uses( $this->get_uses() + (int) $by );
1452
+		$this->set_uses($this->get_uses() + (int) $by);
1453 1453
 
1454 1454
 		// Save the discount.
1455 1455
 		$this->save();
1456 1456
 
1457 1457
 		// Fire relevant hooks.
1458
-		if( (int) $by > 0 ) {
1459
-			do_action( 'wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code,  absint( $by ) );
1458
+		if ((int) $by > 0) {
1459
+			do_action('wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code, absint($by));
1460 1460
 		} else {
1461
-			do_action( 'wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint( $by ) );
1461
+			do_action('wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint($by));
1462 1462
 		}
1463 1463
 
1464 1464
 		// Return the number of times the discount has been used.
@@ -1482,7 +1482,7 @@  discard block
 block discarded – undo
1482 1482
 	 * @param float $amount
1483 1483
 	 * @return float
1484 1484
 	 */
1485
-	public function get_discounted_amount( $amount ) {
1485
+	public function get_discounted_amount($amount) {
1486 1486
 
1487 1487
 		// Convert amount to float.
1488 1488
 		$amount = (float) $amount;
@@ -1490,29 +1490,29 @@  discard block
 block discarded – undo
1490 1490
 		// Get discount amount.
1491 1491
 		$discount_amount = $this->get_amount();
1492 1492
 
1493
-		if ( empty( $discount_amount ) ) {
1493
+		if (empty($discount_amount)) {
1494 1494
 			return 0;
1495 1495
 		}
1496 1496
 
1497 1497
 		// Format the amount.
1498
-		$discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1498
+		$discount_amount = floatval(wpinv_sanitize_amount($discount_amount));
1499 1499
 		
1500 1500
 		// If this is a percentage discount.
1501
-		if ( $this->is_type( 'percent' ) ) {
1502
-            $discount_amount = $amount * ( $discount_amount / 100 );
1501
+		if ($this->is_type('percent')) {
1502
+            $discount_amount = $amount * ($discount_amount / 100);
1503 1503
 		}
1504 1504
 
1505 1505
 		// Discount can not be less than zero...
1506
-		if ( $discount_amount < 0 ) {
1506
+		if ($discount_amount < 0) {
1507 1507
 			$discount_amount = 0;
1508 1508
 		}
1509 1509
 
1510 1510
 		// ... or more than the amount.
1511
-		if ( $discount_amount > $amount ) {
1511
+		if ($discount_amount > $amount) {
1512 1512
 			$discount_amount = $amount;
1513 1513
 		}
1514 1514
 
1515
-		return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1515
+		return apply_filters('wpinv_discount_total_discount_amount', $discount_amount, $amount, $this);
1516 1516
 	}
1517 1517
 
1518 1518
 }
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-invoice-controller.php 2 patches
Indentation   +109 added lines, -109 removed lines patch added patch discarded remove patch
@@ -15,116 +15,116 @@
 block discarded – undo
15 15
 class WPInv_REST_Invoice_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_invoice';
23
-
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'invoices';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Invoice';
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_invoice';
37 23
 
38 24
     /**
39
-	 * Retrieves the query params for the invoices collection.
40
-	 *
41
-	 * @since 1.0.13
42
-	 *
43
-	 * @return array Collection parameters.
44
-	 */
45
-	public function get_collection_params() {
46
-
47
-		$params = array_merge(
48
-
49
-			parent::get_collection_params(),
50
-
51
-			array(
52
-
53
-
54
-				'customers' => array(
55
-					'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
56
-					'type'              => 'array',
57
-					'items'             => array(
58
-						'type'          => 'integer',
59
-					),
60
-					'default'           => array(),
61
-					'sanitize_callback' => 'wp_parse_id_list',
62
-				),
63
-
64
-				'exclude_customers'  	=> array(
65
-					'description' 		=> __( 'Exclude invoices to specific users.', 'invoicing' ),
66
-					'type'        		=> 'array',
67
-					'items'       		=> array(
68
-						'type'          => 'integer',
69
-					),
70
-					'default'     		=> array(),
71
-					'sanitize_callback' => 'wp_parse_id_list',
72
-				)
73
-
74
-			)
75
-
76
-		);
77
-
78
-		// Filter collection parameters for the invoices controller.
79
-		return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
80
-	}
81
-
82
-	/**
83
-	 * Determine the allowed query_vars for a get_items() response and
84
-	 * prepare for WP_Query.
85
-	 *
86
-	 * @param array           $prepared_args Prepared arguments.
87
-	 * @param WP_REST_Request $request Request object.
88
-	 * @return array          $query_args
89
-	 */
90
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
91
-
92
-		$query_args = parent::prepare_items_query( $prepared_args );
93
-
94
-		// Retrieve invoices for specific customers.
95
-		if ( ! empty( $request['customers'] ) ) {
96
-			$query_args['author__in'] = $request['customers'];
97
-		}
98
-
99
-		// Skip invoices for specific customers.
100
-		if ( ! empty( $request['exclude_customers'] ) ) {
101
-			$query_args['author__not_in'] = $request['exclude_customers'];
102
-		}
103
-
104
-		return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
105
-
106
-	}
107
-
108
-	/**
109
-	 * Retrieves a valid list of post statuses.
110
-	 *
111
-	 * @since 1.0.15
112
-	 *
113
-	 * @return array A list of registered item statuses.
114
-	 */
115
-	public function get_post_statuses() {
116
-		return array_keys( wpinv_get_invoice_statuses( true ) );
117
-	}
118
-
119
-	/**
120
-	 * Saves a single invoice.
121
-	 *
122
-	 * @param WPInv_Invoice $invoice Invoice to save.
123
-	 * @return WP_Error|WPInv_Invoice
124
-	 */
125
-	protected function save_object( $invoice ) {
126
-		$invoice->recalculate_total();
127
-		return parent::save_object( $invoice );
128
-	}
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'invoices';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Invoice';
37
+
38
+    /**
39
+     * Retrieves the query params for the invoices collection.
40
+     *
41
+     * @since 1.0.13
42
+     *
43
+     * @return array Collection parameters.
44
+     */
45
+    public function get_collection_params() {
46
+
47
+        $params = array_merge(
48
+
49
+            parent::get_collection_params(),
50
+
51
+            array(
52
+
53
+
54
+                'customers' => array(
55
+                    'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
56
+                    'type'              => 'array',
57
+                    'items'             => array(
58
+                        'type'          => 'integer',
59
+                    ),
60
+                    'default'           => array(),
61
+                    'sanitize_callback' => 'wp_parse_id_list',
62
+                ),
63
+
64
+                'exclude_customers'  	=> array(
65
+                    'description' 		=> __( 'Exclude invoices to specific users.', 'invoicing' ),
66
+                    'type'        		=> 'array',
67
+                    'items'       		=> array(
68
+                        'type'          => 'integer',
69
+                    ),
70
+                    'default'     		=> array(),
71
+                    'sanitize_callback' => 'wp_parse_id_list',
72
+                )
73
+
74
+            )
75
+
76
+        );
77
+
78
+        // Filter collection parameters for the invoices controller.
79
+        return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
80
+    }
81
+
82
+    /**
83
+     * Determine the allowed query_vars for a get_items() response and
84
+     * prepare for WP_Query.
85
+     *
86
+     * @param array           $prepared_args Prepared arguments.
87
+     * @param WP_REST_Request $request Request object.
88
+     * @return array          $query_args
89
+     */
90
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
91
+
92
+        $query_args = parent::prepare_items_query( $prepared_args );
93
+
94
+        // Retrieve invoices for specific customers.
95
+        if ( ! empty( $request['customers'] ) ) {
96
+            $query_args['author__in'] = $request['customers'];
97
+        }
98
+
99
+        // Skip invoices for specific customers.
100
+        if ( ! empty( $request['exclude_customers'] ) ) {
101
+            $query_args['author__not_in'] = $request['exclude_customers'];
102
+        }
103
+
104
+        return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
105
+
106
+    }
107
+
108
+    /**
109
+     * Retrieves a valid list of post statuses.
110
+     *
111
+     * @since 1.0.15
112
+     *
113
+     * @return array A list of registered item statuses.
114
+     */
115
+    public function get_post_statuses() {
116
+        return array_keys( wpinv_get_invoice_statuses( true ) );
117
+    }
118
+
119
+    /**
120
+     * Saves a single invoice.
121
+     *
122
+     * @param WPInv_Invoice $invoice Invoice to save.
123
+     * @return WP_Error|WPInv_Invoice
124
+     */
125
+    protected function save_object( $invoice ) {
126
+        $invoice->recalculate_total();
127
+        return parent::save_object( $invoice );
128
+    }
129 129
 
130 130
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API invoices controller class.
@@ -52,7 +52,7 @@  discard block
 block discarded – undo
52 52
 
53 53
 
54 54
 				'customers' => array(
55
-					'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
55
+					'description'       => __('Limit result set to invoices for specific user ids.', 'invoicing'),
56 56
 					'type'              => 'array',
57 57
 					'items'             => array(
58 58
 						'type'          => 'integer',
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
 				),
63 63
 
64 64
 				'exclude_customers'  	=> array(
65
-					'description' 		=> __( 'Exclude invoices to specific users.', 'invoicing' ),
65
+					'description' 		=> __('Exclude invoices to specific users.', 'invoicing'),
66 66
 					'type'        		=> 'array',
67 67
 					'items'       		=> array(
68 68
 						'type'          => 'integer',
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 		);
77 77
 
78 78
 		// Filter collection parameters for the invoices controller.
79
-		return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
79
+		return apply_filters('getpaid_rest_invoices_collection_params', $params, $this);
80 80
 	}
81 81
 
82 82
 	/**
@@ -87,21 +87,21 @@  discard block
 block discarded – undo
87 87
 	 * @param WP_REST_Request $request Request object.
88 88
 	 * @return array          $query_args
89 89
 	 */
90
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
90
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
91 91
 
92
-		$query_args = parent::prepare_items_query( $prepared_args );
92
+		$query_args = parent::prepare_items_query($prepared_args);
93 93
 
94 94
 		// Retrieve invoices for specific customers.
95
-		if ( ! empty( $request['customers'] ) ) {
95
+		if (!empty($request['customers'])) {
96 96
 			$query_args['author__in'] = $request['customers'];
97 97
 		}
98 98
 
99 99
 		// Skip invoices for specific customers.
100
-		if ( ! empty( $request['exclude_customers'] ) ) {
100
+		if (!empty($request['exclude_customers'])) {
101 101
 			$query_args['author__not_in'] = $request['exclude_customers'];
102 102
 		}
103 103
 
104
-		return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
104
+		return apply_filters('getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this);
105 105
 
106 106
 	}
107 107
 
@@ -113,7 +113,7 @@  discard block
 block discarded – undo
113 113
 	 * @return array A list of registered item statuses.
114 114
 	 */
115 115
 	public function get_post_statuses() {
116
-		return array_keys( wpinv_get_invoice_statuses( true ) );
116
+		return array_keys(wpinv_get_invoice_statuses(true));
117 117
 	}
118 118
 
119 119
 	/**
@@ -122,9 +122,9 @@  discard block
 block discarded – undo
122 122
 	 * @param WPInv_Invoice $invoice Invoice to save.
123 123
 	 * @return WP_Error|WPInv_Invoice
124 124
 	 */
125
-	protected function save_object( $invoice ) {
125
+	protected function save_object($invoice) {
126 126
 		$invoice->recalculate_total();
127
-		return parent::save_object( $invoice );
127
+		return parent::save_object($invoice);
128 128
 	}
129 129
 
130 130
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-posts-controller.php 2 patches
Indentation   +1005 added lines, -1005 removed lines patch added patch discarded remove patch
@@ -18,1014 +18,1014 @@
 block discarded – undo
18 18
 class GetPaid_REST_Posts_Controller extends GetPaid_REST_Controller {
19 19
 
20 20
     /**
21
-	 * Post type.
22
-	 *
23
-	 * @var string
24
-	 */
25
-	protected $post_type;
26
-
27
-	/**
28
-	 * Controls visibility on frontend.
29
-	 *
30
-	 * @var string
31
-	 */
32
-	public $public = false;
33
-
34
-	/**
35
-	 * Contains this controller's class name.
36
-	 *
37
-	 * @var string
38
-	 */
39
-	public $crud_class;
40
-
41
-	/**
42
-	 * Registers the routes for the objects of the controller.
43
-	 *
44
-	 * @since 1.0.19
45
-	 *
46
-	 * @see register_rest_route()
47
-	 */
48
-	public function register_namespace_routes( $namespace ) {
49
-
50
-		register_rest_route(
51
-			$namespace,
52
-			'/' . $this->rest_base,
53
-			array(
54
-				array(
55
-					'methods'             => WP_REST_Server::READABLE,
56
-					'callback'            => array( $this, 'get_items' ),
57
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
58
-					'args'                => $this->get_collection_params(),
59
-				),
60
-				array(
61
-					'methods'             => WP_REST_Server::CREATABLE,
62
-					'callback'            => array( $this, 'create_item' ),
63
-					'permission_callback' => array( $this, 'create_item_permissions_check' ),
64
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
65
-				),
66
-				'schema' => array( $this, 'get_public_item_schema' ),
67
-			)
68
-		);
69
-
70
-		$get_item_args = array(
71
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
72
-		);
73
-
74
-		register_rest_route(
75
-			$namespace,
76
-			'/' . $this->rest_base . '/(?P<id>[\d]+)',
77
-			array(
78
-				'args'   => array(
79
-					'id' => array(
80
-						'description' => __( 'Unique identifier for the object.', 'invoicing' ),
81
-						'type'        => 'integer',
82
-					),
83
-				),
84
-				array(
85
-					'methods'             => WP_REST_Server::READABLE,
86
-					'callback'            => array( $this, 'get_item' ),
87
-					'permission_callback' => array( $this, 'get_item_permissions_check' ),
88
-					'args'                => $get_item_args,
89
-				),
90
-				array(
91
-					'methods'             => WP_REST_Server::EDITABLE,
92
-					'callback'            => array( $this, 'update_item' ),
93
-					'permission_callback' => array( $this, 'update_item_permissions_check' ),
94
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
95
-				),
96
-				array(
97
-					'methods'             => WP_REST_Server::DELETABLE,
98
-					'callback'            => array( $this, 'delete_item' ),
99
-					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
100
-					'args'                => array(
101
-						'force' => array(
102
-							'type'        => 'boolean',
103
-							'default'     => false,
104
-							'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
105
-						),
106
-					),
107
-				),
108
-				'schema' => array( $this, 'get_public_item_schema' ),
109
-			)
110
-		);
111
-
112
-		register_rest_route(
113
-			$namespace,
114
-			'/' . $this->rest_base . '/batch',
115
-			array(
116
-				array(
117
-					'methods'             => WP_REST_Server::EDITABLE,
118
-					'callback'            => array( $this, 'batch_items' ),
119
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
120
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
121
-				),
122
-				'schema' => array( $this, 'get_public_batch_schema' ),
123
-			)
124
-		);
125
-
126
-	}
127
-
128
-	/**
129
-	 * Check permissions of items on REST API.
130
-	 *
131
-	 * @since 1.0.19
132
-	 * @param string $context   Request context.
133
-	 * @param int    $object_id Post ID.
134
-	 * @return bool
135
-	 */
136
-	public function check_post_permissions( $context = 'read', $object_id = 0 ) {
137
-
138
-		$contexts = array(
139
-			'read'   => 'read_private_posts',
140
-			'create' => 'publish_posts',
141
-			'edit'   => 'edit_post',
142
-			'delete' => 'delete_post',
143
-			'batch'  => 'edit_others_posts',
144
-		);
145
-
146
-		if ( 'revision' === $this->post_type ) {
147
-			$permission = false;
148
-		} else {
149
-			$cap              = $contexts[ $context ];
150
-			$post_type_object = get_post_type_object( $this->post_type );
151
-			$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
152
-		}
153
-
154
-		return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
155
-	}
156
-
157
-	/**
158
-	 * Check if a given request has access to read items.
159
-	 *
160
-	 * @param  WP_REST_Request $request Full details about the request.
161
-	 * @return WP_Error|boolean
162
-	 */
163
-	public function get_items_permissions_check( $request ) {
164
-		return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
165
-	}
166
-
167
-	/**
168
-	 * Check if a given request has access to create an item.
169
-	 *
170
-	 * @param  WP_REST_Request $request Full details about the request.
171
-	 * @return WP_Error|boolean
172
-	 */
173
-	public function create_item_permissions_check( $request ) {
174
-		return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
175
-	}
176
-
177
-	/**
178
-	 * Check if a given request has access to read an item.
179
-	 *
180
-	 * @param  WP_REST_Request $request Full details about the request.
181
-	 * @return WP_Error|boolean
182
-	 */
183
-	public function get_item_permissions_check( $request ) {
184
-		$post = get_post( (int) $request['id'] );
185
-
186
-		if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
187
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
188
-		}
189
-
190
-		return true;
191
-	}
192
-
193
-	/**
194
-	 * Check if a given request has access to update an item.
195
-	 *
196
-	 * @param  WP_REST_Request $request Full details about the request.
197
-	 * @return WP_Error|boolean
198
-	 */
199
-	public function update_item_permissions_check( $request ) {
200
-		$post = get_post( (int) $request['id'] );
201
-
202
-		if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
203
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
204
-		}
205
-
206
-		return true;
207
-	}
208
-
209
-	/**
210
-	 * Check if a given request has access to delete an item.
211
-	 *
212
-	 * @param  WP_REST_Request $request Full details about the request.
213
-	 * @return bool|WP_Error
214
-	 */
215
-	public function delete_item_permissions_check( $request ) {
216
-		$post = get_post( (int) $request['id'] );
217
-
218
-		if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
219
-			return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
220
-		}
221
-
222
-		return true;
223
-	}
224
-
225
-	/**
226
-	 * Check if a given request has access batch create, update and delete items.
227
-	 *
228
-	 * @param  WP_REST_Request $request Full details about the request.
229
-	 *
230
-	 * @return boolean|WP_Error
231
-	 */
232
-	public function batch_items_permissions_check( $request ) {
233
-		return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
234
-	}
235
-
236
-	/**
237
-	 * Saves a single object.
238
-	 *
239
-	 * @param GetPaid_Data $object Object to save.
240
-	 * @return WP_Error|GetPaid_Data
241
-	 */
242
-	protected function save_object( $object ) {
243
-		$object->save();
244
-
245
-		if ( ! empty( $object->last_error ) ) {
246
-			return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
247
-		}
248
-
249
-		return new $this->crud_class( $object->get_id() );
250
-	}
251
-
252
-	/**
253
-	 * Returns the item's object.
254
-	 *
255
-	 * Child classes must implement this method.
256
-	 * @since 1.0.13
257
-	 *
258
-	 * @param int|WP_Post $object_id Supplied ID.
259
-	 * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
260
-	 */
261
-	protected function get_object( $object_id ) {
262
-
263
-		// Do we have an object?
264
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
265
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
266
-		}
267
-
268
-		// Fetch the object.
269
-		$object = new $this->crud_class( $object_id );
270
-		if ( ! empty( $object->last_error ) ) {
271
-			return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
272
-		}
273
-
274
-		return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
275
-
276
-	}
277
-
278
-	/**
279
-	 * @deprecated
280
-	 */
281
-	public function get_post( $object_id ) {
282
-		return $this->get_object( $object_id );
21
+     * Post type.
22
+     *
23
+     * @var string
24
+     */
25
+    protected $post_type;
26
+
27
+    /**
28
+     * Controls visibility on frontend.
29
+     *
30
+     * @var string
31
+     */
32
+    public $public = false;
33
+
34
+    /**
35
+     * Contains this controller's class name.
36
+     *
37
+     * @var string
38
+     */
39
+    public $crud_class;
40
+
41
+    /**
42
+     * Registers the routes for the objects of the controller.
43
+     *
44
+     * @since 1.0.19
45
+     *
46
+     * @see register_rest_route()
47
+     */
48
+    public function register_namespace_routes( $namespace ) {
49
+
50
+        register_rest_route(
51
+            $namespace,
52
+            '/' . $this->rest_base,
53
+            array(
54
+                array(
55
+                    'methods'             => WP_REST_Server::READABLE,
56
+                    'callback'            => array( $this, 'get_items' ),
57
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
58
+                    'args'                => $this->get_collection_params(),
59
+                ),
60
+                array(
61
+                    'methods'             => WP_REST_Server::CREATABLE,
62
+                    'callback'            => array( $this, 'create_item' ),
63
+                    'permission_callback' => array( $this, 'create_item_permissions_check' ),
64
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
65
+                ),
66
+                'schema' => array( $this, 'get_public_item_schema' ),
67
+            )
68
+        );
69
+
70
+        $get_item_args = array(
71
+            'context' => $this->get_context_param( array( 'default' => 'view' ) ),
72
+        );
73
+
74
+        register_rest_route(
75
+            $namespace,
76
+            '/' . $this->rest_base . '/(?P<id>[\d]+)',
77
+            array(
78
+                'args'   => array(
79
+                    'id' => array(
80
+                        'description' => __( 'Unique identifier for the object.', 'invoicing' ),
81
+                        'type'        => 'integer',
82
+                    ),
83
+                ),
84
+                array(
85
+                    'methods'             => WP_REST_Server::READABLE,
86
+                    'callback'            => array( $this, 'get_item' ),
87
+                    'permission_callback' => array( $this, 'get_item_permissions_check' ),
88
+                    'args'                => $get_item_args,
89
+                ),
90
+                array(
91
+                    'methods'             => WP_REST_Server::EDITABLE,
92
+                    'callback'            => array( $this, 'update_item' ),
93
+                    'permission_callback' => array( $this, 'update_item_permissions_check' ),
94
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
95
+                ),
96
+                array(
97
+                    'methods'             => WP_REST_Server::DELETABLE,
98
+                    'callback'            => array( $this, 'delete_item' ),
99
+                    'permission_callback' => array( $this, 'delete_item_permissions_check' ),
100
+                    'args'                => array(
101
+                        'force' => array(
102
+                            'type'        => 'boolean',
103
+                            'default'     => false,
104
+                            'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
105
+                        ),
106
+                    ),
107
+                ),
108
+                'schema' => array( $this, 'get_public_item_schema' ),
109
+            )
110
+        );
111
+
112
+        register_rest_route(
113
+            $namespace,
114
+            '/' . $this->rest_base . '/batch',
115
+            array(
116
+                array(
117
+                    'methods'             => WP_REST_Server::EDITABLE,
118
+                    'callback'            => array( $this, 'batch_items' ),
119
+                    'permission_callback' => array( $this, 'batch_items_permissions_check' ),
120
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
121
+                ),
122
+                'schema' => array( $this, 'get_public_batch_schema' ),
123
+            )
124
+        );
125
+
126
+    }
127
+
128
+    /**
129
+     * Check permissions of items on REST API.
130
+     *
131
+     * @since 1.0.19
132
+     * @param string $context   Request context.
133
+     * @param int    $object_id Post ID.
134
+     * @return bool
135
+     */
136
+    public function check_post_permissions( $context = 'read', $object_id = 0 ) {
137
+
138
+        $contexts = array(
139
+            'read'   => 'read_private_posts',
140
+            'create' => 'publish_posts',
141
+            'edit'   => 'edit_post',
142
+            'delete' => 'delete_post',
143
+            'batch'  => 'edit_others_posts',
144
+        );
145
+
146
+        if ( 'revision' === $this->post_type ) {
147
+            $permission = false;
148
+        } else {
149
+            $cap              = $contexts[ $context ];
150
+            $post_type_object = get_post_type_object( $this->post_type );
151
+            $permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
152
+        }
153
+
154
+        return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
155
+    }
156
+
157
+    /**
158
+     * Check if a given request has access to read items.
159
+     *
160
+     * @param  WP_REST_Request $request Full details about the request.
161
+     * @return WP_Error|boolean
162
+     */
163
+    public function get_items_permissions_check( $request ) {
164
+        return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
165
+    }
166
+
167
+    /**
168
+     * Check if a given request has access to create an item.
169
+     *
170
+     * @param  WP_REST_Request $request Full details about the request.
171
+     * @return WP_Error|boolean
172
+     */
173
+    public function create_item_permissions_check( $request ) {
174
+        return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
175
+    }
176
+
177
+    /**
178
+     * Check if a given request has access to read an item.
179
+     *
180
+     * @param  WP_REST_Request $request Full details about the request.
181
+     * @return WP_Error|boolean
182
+     */
183
+    public function get_item_permissions_check( $request ) {
184
+        $post = get_post( (int) $request['id'] );
185
+
186
+        if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
187
+            return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
188
+        }
189
+
190
+        return true;
191
+    }
192
+
193
+    /**
194
+     * Check if a given request has access to update an item.
195
+     *
196
+     * @param  WP_REST_Request $request Full details about the request.
197
+     * @return WP_Error|boolean
198
+     */
199
+    public function update_item_permissions_check( $request ) {
200
+        $post = get_post( (int) $request['id'] );
201
+
202
+        if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
203
+            return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
204
+        }
205
+
206
+        return true;
207
+    }
208
+
209
+    /**
210
+     * Check if a given request has access to delete an item.
211
+     *
212
+     * @param  WP_REST_Request $request Full details about the request.
213
+     * @return bool|WP_Error
214
+     */
215
+    public function delete_item_permissions_check( $request ) {
216
+        $post = get_post( (int) $request['id'] );
217
+
218
+        if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
219
+            return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
220
+        }
221
+
222
+        return true;
223
+    }
224
+
225
+    /**
226
+     * Check if a given request has access batch create, update and delete items.
227
+     *
228
+     * @param  WP_REST_Request $request Full details about the request.
229
+     *
230
+     * @return boolean|WP_Error
231
+     */
232
+    public function batch_items_permissions_check( $request ) {
233
+        return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
234
+    }
235
+
236
+    /**
237
+     * Saves a single object.
238
+     *
239
+     * @param GetPaid_Data $object Object to save.
240
+     * @return WP_Error|GetPaid_Data
241
+     */
242
+    protected function save_object( $object ) {
243
+        $object->save();
244
+
245
+        if ( ! empty( $object->last_error ) ) {
246
+            return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
247
+        }
248
+
249
+        return new $this->crud_class( $object->get_id() );
250
+    }
251
+
252
+    /**
253
+     * Returns the item's object.
254
+     *
255
+     * Child classes must implement this method.
256
+     * @since 1.0.13
257
+     *
258
+     * @param int|WP_Post $object_id Supplied ID.
259
+     * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
260
+     */
261
+    protected function get_object( $object_id ) {
262
+
263
+        // Do we have an object?
264
+        if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
265
+            return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
266
+        }
267
+
268
+        // Fetch the object.
269
+        $object = new $this->crud_class( $object_id );
270
+        if ( ! empty( $object->last_error ) ) {
271
+            return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
272
+        }
273
+
274
+        return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
275
+
276
+    }
277
+
278
+    /**
279
+     * @deprecated
280
+     */
281
+    public function get_post( $object_id ) {
282
+        return $this->get_object( $object_id );
283
+    }
284
+
285
+    /**
286
+     * Get a single object.
287
+     *
288
+     * @param WP_REST_Request $request Full details about the request.
289
+     * @return WP_Error|WP_REST_Response
290
+     */
291
+    public function get_item( $request ) {
292
+
293
+        // Fetch the item.
294
+        $object = $this->get_object( $request['id'] );
295
+
296
+        if ( is_wp_error( $object ) ) {
297
+            return $object;
298
+        }
299
+
300
+        // Generate a response.
301
+        $data     = $this->prepare_item_for_response( $object, $request );
302
+        $response = rest_ensure_response( $data );
303
+
304
+        // (Maybe) add a link to the html pagee.
305
+        if ( $this->public && ! is_wp_error( $response ) ) {
306
+            $response->link_header( 'alternate', get_permalink( $object->get_id() ), array( 'type' => 'text/html' ) );
307
+        }
308
+
309
+        return $response;
310
+    }
311
+
312
+    /**
313
+     * Create a single object.
314
+     *
315
+     * @param WP_REST_Request $request Full details about the request.
316
+     * @return WP_Error|WP_REST_Response
317
+     */
318
+    public function create_item( $request ) {
319
+
320
+        // Can not create an existing item.
321
+        if ( ! empty( $request['id'] ) ) {
322
+            /* translators: %s: post type */
323
+            return new WP_Error( "getpaid_rest_{$this->post_type}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
324
+        }
325
+
326
+        // Generate a GetPaid_Data object from the request.
327
+        $object = $this->prepare_item_for_database( $request );
328
+        if ( is_wp_error( $object ) ) {
329
+            return $object;
330
+        }
331
+
332
+        // Save the object.
333
+        $object = $this->save_object( $object );
334
+        if ( is_wp_error( $object ) ) {
335
+            return $object;
336
+        }
337
+
338
+        // Save special fields.
339
+        $save_special = $this->update_additional_fields_for_object( $object, $request );
340
+        if ( is_wp_error( $save_special ) ) {
341
+            $object->delete( true );
342
+            return $save_special;
343
+        }
344
+
345
+        /**
346
+         * Fires after a single item is created or updated via the REST API.
347
+         *
348
+         * @param WP_Post         $post      Post object.
349
+         * @param WP_REST_Request $request   Request object.
350
+         * @param boolean         $creating  True when creating item, false when updating.
351
+         */
352
+        do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, true );
353
+
354
+        $request->set_param( 'context', 'edit' );
355
+        $response = $this->prepare_item_for_response( $object, $request );
356
+        $response = rest_ensure_response( $response );
357
+        $response->set_status( 201 );
358
+        $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
359
+
360
+        return $response;
361
+    }
362
+
363
+    /**
364
+     * Update a single object.
365
+     *
366
+     * @param WP_REST_Request $request Full details about the request.
367
+     * @return WP_Error|WP_REST_Response
368
+     */
369
+    public function update_item( $request ) {
370
+
371
+        // Fetch the item.
372
+        $object = $this->get_object( $request['id'] );
373
+        if ( is_wp_error( $object ) ) {
374
+            return $object;
375
+        }
376
+
377
+        // Prepare the item for saving.
378
+        $object = $this->prepare_item_for_database( $request );
379
+        if ( is_wp_error( $object ) ) {
380
+            return $object;
381
+        }
382
+
383
+        // Save the item.
384
+        $object = $this->save_object( $object );
385
+        if ( is_wp_error( $object ) ) {
386
+            return $object;
387
+        }
388
+
389
+        // Save special fields (those added via hooks).
390
+        $save_special = $this->update_additional_fields_for_object( $object, $request );
391
+        if ( is_wp_error( $save_special ) ) {
392
+            return $save_special;
393
+        }
394
+
395
+        /**
396
+         * Fires after a single item is created or updated via the REST API.
397
+         *
398
+         * @param GetPaid_Data    $object    GetPaid_Data object.
399
+         * @param WP_REST_Request $request   Request object.
400
+         * @param boolean         $creating  True when creating item, false when updating.
401
+         */
402
+        do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, false );
403
+
404
+        $request->set_param( 'context', 'edit' );
405
+        $response = $this->prepare_item_for_response( $object, $request );
406
+        return rest_ensure_response( $response );
407
+    }
408
+
409
+    /**
410
+     * Get a collection of objects.
411
+     *
412
+     * @param WP_REST_Request $request Full details about the request.
413
+     * @return WP_Error|WP_REST_Response
414
+     */
415
+    public function get_items( $request ) {
416
+        $args                         = array();
417
+        $args['offset']               = $request['offset'];
418
+        $args['order']                = $request['order'];
419
+        $args['orderby']              = $request['orderby'];
420
+        $args['paged']                = $request['page'];
421
+        $args['post__in']             = $request['include'];
422
+        $args['post__not_in']         = $request['exclude'];
423
+        $args['posts_per_page']       = $request['per_page'];
424
+        $args['name']                 = $request['slug'];
425
+        $args['post_parent__in']      = $request['parent'];
426
+        $args['post_parent__not_in']  = $request['parent_exclude'];
427
+        $args['s']                    = $request['search'];
428
+        $args['post_status']          = wpinv_parse_list( $request['status'] );
429
+
430
+        $args['date_query'] = array();
431
+        // Set before into date query. Date query must be specified as an array of an array.
432
+        if ( isset( $request['before'] ) ) {
433
+            $args['date_query'][0]['before'] = $request['before'];
434
+        }
435
+
436
+        // Set after into date query. Date query must be specified as an array of an array.
437
+        if ( isset( $request['after'] ) ) {
438
+            $args['date_query'][0]['after'] = $request['after'];
439
+        }
440
+
441
+        // Force the post_type & fields arguments, since they're not a user input variable.
442
+        $args['post_type'] = $this->post_type;
443
+        $args['fields']    = 'ids';
444
+
445
+        // Filter the query arguments for a request.
446
+        $args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
447
+        $query_args = $this->prepare_items_query( $args, $request );
448
+
449
+        $posts_query = new WP_Query();
450
+        $query_result = $posts_query->query( $query_args );
451
+
452
+        $posts = array();
453
+        foreach ( $query_result as $post_id ) {
454
+            if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
455
+                continue;
456
+            }
457
+
458
+            $data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
459
+            $posts[] = $this->prepare_response_for_collection( $data );
460
+        }
461
+
462
+        $page        = (int) $query_args['paged'];
463
+        $total_posts = $posts_query->found_posts;
464
+
465
+        if ( $total_posts < 1 ) {
466
+            // Out-of-bounds, run the query again without LIMIT for total count.
467
+            unset( $query_args['paged'] );
468
+            $count_query = new WP_Query();
469
+            $count_query->query( $query_args );
470
+            $total_posts = $count_query->found_posts;
471
+        }
472
+
473
+        $max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
474
+
475
+        $response = rest_ensure_response( $posts );
476
+        $response->header( 'X-WP-Total', (int) $total_posts );
477
+        $response->header( 'X-WP-TotalPages', (int) $max_pages );
478
+
479
+        $request_params = $request->get_query_params();
480
+        $base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
481
+
482
+        if ( $page > 1 ) {
483
+            $prev_page = $page - 1;
484
+            if ( $prev_page > $max_pages ) {
485
+                $prev_page = $max_pages;
486
+            }
487
+            $prev_link = add_query_arg( 'page', $prev_page, $base );
488
+            $response->link_header( 'prev', $prev_link );
489
+        }
490
+        if ( $max_pages > $page ) {
491
+            $next_page = $page + 1;
492
+            $next_link = add_query_arg( 'page', $next_page, $base );
493
+            $response->link_header( 'next', $next_link );
494
+        }
495
+
496
+        return $response;
497
+    }
498
+
499
+    /**
500
+     * Delete a single item.
501
+     *
502
+     * @param WP_REST_Request $request Full details about the request.
503
+     * @return WP_REST_Response|WP_Error
504
+     */
505
+    public function delete_item( $request ) {
506
+
507
+        // Fetch the item.
508
+        $item = $this->get_object( $request['id'] );
509
+        if ( is_wp_error( $item ) ) {
510
+            return $item;
511
+        }
512
+
513
+        $supports_trash = EMPTY_TRASH_DAYS > 0;
514
+        $force          = $supports_trash && (bool) $request['force'];
515
+
516
+        if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
517
+            return new WP_Error( "cannot_delete", __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
518
+        }
519
+
520
+        $request->set_param( 'context', 'edit' );
521
+        $response = $this->prepare_item_for_response( $item, $request );
522
+
523
+        if ( ! wp_delete_post( $item->ID, $force ) ) {
524
+            return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
525
+        }
526
+
527
+        return $response;
528
+    }
529
+
530
+    /**
531
+     * Prepare links for the request.
532
+     *
533
+     * @param GetPaid_Data    $object GetPaid_Data object.
534
+     * @return array Links for the given object.
535
+     */
536
+    protected function prepare_links( $object ) {
537
+
538
+        $links = array(
539
+            'self'       => array(
540
+                'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
541
+            ),
542
+            'collection' => array(
543
+                'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
544
+            ),
545
+        );
546
+
547
+        if ( is_callable( array( $object, 'get_user_id' ) ) ) {
548
+            $links['user'] = array(
549
+                'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_user_id' )  ) ),
550
+                'embeddable' => true,
551
+            );
552
+        }
553
+
554
+        if ( is_callable( array( $object, 'get_owner' ) ) ) {
555
+            $links['owner']  = array(
556
+                'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_owner' )  ) ),
557
+                'embeddable' => true,
558
+            );
559
+        }
560
+
561
+        if ( is_callable( array( $object, 'get_parent_id' ) ) ) {
562
+            $links['parent']  = array(
563
+                'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func(  array( $object, 'get_parent_id' )  ) ),
564
+                'embeddable' => true,
565
+            );
566
+        }
567
+
568
+        return $links;
569
+    }
570
+
571
+    /**
572
+     * Determine the allowed query_vars for a get_items() response and
573
+     * prepare for WP_Query.
574
+     *
575
+     * @param array           $prepared_args Prepared arguments.
576
+     * @param WP_REST_Request $request Request object.
577
+     * @return array          $query_args
578
+     */
579
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
580
+
581
+        $valid_vars = array_flip( $this->get_allowed_query_vars() );
582
+        $query_args = array();
583
+        foreach ( $valid_vars as $var => $index ) {
584
+            if ( isset( $prepared_args[ $var ] ) ) {
585
+                $query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ] );
586
+            }
587
+        }
588
+
589
+        $query_args['ignore_sticky_posts'] = true;
590
+
591
+        if ( 'include' === $query_args['orderby'] ) {
592
+            $query_args['orderby'] = 'post__in';
593
+        } elseif ( 'id' === $query_args['orderby'] ) {
594
+            $query_args['orderby'] = 'ID'; // ID must be capitalized.
595
+        } elseif ( 'slug' === $query_args['orderby'] ) {
596
+            $query_args['orderby'] = 'name';
597
+        }
598
+
599
+        return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
600
+
283 601
     }
284 602
 
285
-	/**
286
-	 * Get a single object.
287
-	 *
288
-	 * @param WP_REST_Request $request Full details about the request.
289
-	 * @return WP_Error|WP_REST_Response
290
-	 */
291
-	public function get_item( $request ) {
292
-
293
-		// Fetch the item.
294
-		$object = $this->get_object( $request['id'] );
295
-
296
-		if ( is_wp_error( $object ) ) {
297
-			return $object;
298
-		}
299
-
300
-		// Generate a response.
301
-		$data     = $this->prepare_item_for_response( $object, $request );
302
-		$response = rest_ensure_response( $data );
303
-
304
-		// (Maybe) add a link to the html pagee.
305
-		if ( $this->public && ! is_wp_error( $response ) ) {
306
-			$response->link_header( 'alternate', get_permalink( $object->get_id() ), array( 'type' => 'text/html' ) );
307
-		}
308
-
309
-		return $response;
310
-	}
311
-
312
-	/**
313
-	 * Create a single object.
314
-	 *
315
-	 * @param WP_REST_Request $request Full details about the request.
316
-	 * @return WP_Error|WP_REST_Response
317
-	 */
318
-	public function create_item( $request ) {
319
-
320
-		// Can not create an existing item.
321
-		if ( ! empty( $request['id'] ) ) {
322
-			/* translators: %s: post type */
323
-			return new WP_Error( "getpaid_rest_{$this->post_type}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
324
-		}
325
-
326
-		// Generate a GetPaid_Data object from the request.
327
-		$object = $this->prepare_item_for_database( $request );
328
-		if ( is_wp_error( $object ) ) {
329
-			return $object;
330
-		}
331
-
332
-		// Save the object.
333
-		$object = $this->save_object( $object );
334
-		if ( is_wp_error( $object ) ) {
335
-			return $object;
336
-		}
337
-
338
-		// Save special fields.
339
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
340
-		if ( is_wp_error( $save_special ) ) {
341
-			$object->delete( true );
342
-			return $save_special;
343
-		}
344
-
345
-		/**
346
-		 * Fires after a single item is created or updated via the REST API.
347
-		 *
348
-		 * @param WP_Post         $post      Post object.
349
-		 * @param WP_REST_Request $request   Request object.
350
-		 * @param boolean         $creating  True when creating item, false when updating.
351
-		 */
352
-		do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, true );
353
-
354
-		$request->set_param( 'context', 'edit' );
355
-		$response = $this->prepare_item_for_response( $object, $request );
356
-		$response = rest_ensure_response( $response );
357
-		$response->set_status( 201 );
358
-		$response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
359
-
360
-		return $response;
361
-	}
362
-
363
-	/**
364
-	 * Update a single object.
365
-	 *
366
-	 * @param WP_REST_Request $request Full details about the request.
367
-	 * @return WP_Error|WP_REST_Response
368
-	 */
369
-	public function update_item( $request ) {
370
-
371
-		// Fetch the item.
372
-		$object = $this->get_object( $request['id'] );
373
-		if ( is_wp_error( $object ) ) {
374
-			return $object;
375
-		}
376
-
377
-		// Prepare the item for saving.
378
-		$object = $this->prepare_item_for_database( $request );
379
-		if ( is_wp_error( $object ) ) {
380
-			return $object;
381
-		}
382
-
383
-		// Save the item.
384
-		$object = $this->save_object( $object );
385
-		if ( is_wp_error( $object ) ) {
386
-			return $object;
387
-		}
388
-
389
-		// Save special fields (those added via hooks).
390
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
391
-		if ( is_wp_error( $save_special ) ) {
392
-			return $save_special;
393
-		}
394
-
395
-		/**
396
-		 * Fires after a single item is created or updated via the REST API.
397
-		 *
398
-		 * @param GetPaid_Data    $object    GetPaid_Data object.
399
-		 * @param WP_REST_Request $request   Request object.
400
-		 * @param boolean         $creating  True when creating item, false when updating.
401
-		 */
402
-		do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, false );
403
-
404
-		$request->set_param( 'context', 'edit' );
405
-		$response = $this->prepare_item_for_response( $object, $request );
406
-		return rest_ensure_response( $response );
407
-	}
408
-
409
-	/**
410
-	 * Get a collection of objects.
411
-	 *
412
-	 * @param WP_REST_Request $request Full details about the request.
413
-	 * @return WP_Error|WP_REST_Response
414
-	 */
415
-	public function get_items( $request ) {
416
-		$args                         = array();
417
-		$args['offset']               = $request['offset'];
418
-		$args['order']                = $request['order'];
419
-		$args['orderby']              = $request['orderby'];
420
-		$args['paged']                = $request['page'];
421
-		$args['post__in']             = $request['include'];
422
-		$args['post__not_in']         = $request['exclude'];
423
-		$args['posts_per_page']       = $request['per_page'];
424
-		$args['name']                 = $request['slug'];
425
-		$args['post_parent__in']      = $request['parent'];
426
-		$args['post_parent__not_in']  = $request['parent_exclude'];
427
-		$args['s']                    = $request['search'];
428
-		$args['post_status']          = wpinv_parse_list( $request['status'] );
429
-
430
-		$args['date_query'] = array();
431
-		// Set before into date query. Date query must be specified as an array of an array.
432
-		if ( isset( $request['before'] ) ) {
433
-			$args['date_query'][0]['before'] = $request['before'];
434
-		}
435
-
436
-		// Set after into date query. Date query must be specified as an array of an array.
437
-		if ( isset( $request['after'] ) ) {
438
-			$args['date_query'][0]['after'] = $request['after'];
439
-		}
440
-
441
-		// Force the post_type & fields arguments, since they're not a user input variable.
442
-		$args['post_type'] = $this->post_type;
443
-		$args['fields']    = 'ids';
444
-
445
-		// Filter the query arguments for a request.
446
-		$args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
447
-		$query_args = $this->prepare_items_query( $args, $request );
448
-
449
-		$posts_query = new WP_Query();
450
-		$query_result = $posts_query->query( $query_args );
451
-
452
-		$posts = array();
453
-		foreach ( $query_result as $post_id ) {
454
-			if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
455
-				continue;
456
-			}
457
-
458
-			$data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
459
-			$posts[] = $this->prepare_response_for_collection( $data );
460
-		}
461
-
462
-		$page        = (int) $query_args['paged'];
463
-		$total_posts = $posts_query->found_posts;
464
-
465
-		if ( $total_posts < 1 ) {
466
-			// Out-of-bounds, run the query again without LIMIT for total count.
467
-			unset( $query_args['paged'] );
468
-			$count_query = new WP_Query();
469
-			$count_query->query( $query_args );
470
-			$total_posts = $count_query->found_posts;
471
-		}
472
-
473
-		$max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
474
-
475
-		$response = rest_ensure_response( $posts );
476
-		$response->header( 'X-WP-Total', (int) $total_posts );
477
-		$response->header( 'X-WP-TotalPages', (int) $max_pages );
478
-
479
-		$request_params = $request->get_query_params();
480
-		$base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
481
-
482
-		if ( $page > 1 ) {
483
-			$prev_page = $page - 1;
484
-			if ( $prev_page > $max_pages ) {
485
-				$prev_page = $max_pages;
486
-			}
487
-			$prev_link = add_query_arg( 'page', $prev_page, $base );
488
-			$response->link_header( 'prev', $prev_link );
489
-		}
490
-		if ( $max_pages > $page ) {
491
-			$next_page = $page + 1;
492
-			$next_link = add_query_arg( 'page', $next_page, $base );
493
-			$response->link_header( 'next', $next_link );
494
-		}
495
-
496
-		return $response;
497
-	}
498
-
499
-	/**
500
-	 * Delete a single item.
501
-	 *
502
-	 * @param WP_REST_Request $request Full details about the request.
503
-	 * @return WP_REST_Response|WP_Error
504
-	 */
505
-	public function delete_item( $request ) {
506
-
507
-		// Fetch the item.
508
-		$item = $this->get_object( $request['id'] );
509
-		if ( is_wp_error( $item ) ) {
510
-			return $item;
511
-		}
512
-
513
-		$supports_trash = EMPTY_TRASH_DAYS > 0;
514
-		$force          = $supports_trash && (bool) $request['force'];
515
-
516
-		if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
517
-			return new WP_Error( "cannot_delete", __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
518
-		}
519
-
520
-		$request->set_param( 'context', 'edit' );
521
-		$response = $this->prepare_item_for_response( $item, $request );
522
-
523
-		if ( ! wp_delete_post( $item->ID, $force ) ) {
524
-			return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
525
-		}
526
-
527
-		return $response;
528
-	}
529
-
530
-	/**
531
-	 * Prepare links for the request.
532
-	 *
533
-	 * @param GetPaid_Data    $object GetPaid_Data object.
534
-	 * @return array Links for the given object.
535
-	 */
536
-	protected function prepare_links( $object ) {
537
-
538
-		$links = array(
539
-			'self'       => array(
540
-				'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
541
-			),
542
-			'collection' => array(
543
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
544
-			),
545
-		);
546
-
547
-		if ( is_callable( array( $object, 'get_user_id' ) ) ) {
548
-			$links['user'] = array(
549
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_user_id' )  ) ),
550
-				'embeddable' => true,
551
-			);
552
-		}
553
-
554
-		if ( is_callable( array( $object, 'get_owner' ) ) ) {
555
-			$links['owner']  = array(
556
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_owner' )  ) ),
557
-				'embeddable' => true,
558
-			);
559
-		}
560
-
561
-		if ( is_callable( array( $object, 'get_parent_id' ) ) ) {
562
-			$links['parent']  = array(
563
-				'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func(  array( $object, 'get_parent_id' )  ) ),
564
-				'embeddable' => true,
565
-			);
566
-		}
567
-
568
-		return $links;
569
-	}
570
-
571
-	/**
572
-	 * Determine the allowed query_vars for a get_items() response and
573
-	 * prepare for WP_Query.
574
-	 *
575
-	 * @param array           $prepared_args Prepared arguments.
576
-	 * @param WP_REST_Request $request Request object.
577
-	 * @return array          $query_args
578
-	 */
579
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
580
-
581
-		$valid_vars = array_flip( $this->get_allowed_query_vars() );
582
-		$query_args = array();
583
-		foreach ( $valid_vars as $var => $index ) {
584
-			if ( isset( $prepared_args[ $var ] ) ) {
585
-				$query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ] );
586
-			}
587
-		}
588
-
589
-		$query_args['ignore_sticky_posts'] = true;
590
-
591
-		if ( 'include' === $query_args['orderby'] ) {
592
-			$query_args['orderby'] = 'post__in';
593
-		} elseif ( 'id' === $query_args['orderby'] ) {
594
-			$query_args['orderby'] = 'ID'; // ID must be capitalized.
595
-		} elseif ( 'slug' === $query_args['orderby'] ) {
596
-			$query_args['orderby'] = 'name';
597
-		}
598
-
599
-		return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
600
-
601
-	}
602
-
603
-	/**
604
-	 * Get all the WP Query vars that are allowed for the API request.
605
-	 *
606
-	 * @return array
607
-	 */
608
-	protected function get_allowed_query_vars() {
609
-		global $wp;
610
-
611
-		/**
612
-		 * Filter the publicly allowed query vars.
613
-		 *
614
-		 * Allows adjusting of the default query vars that are made public.
615
-		 *
616
-		 * @param array  Array of allowed WP_Query query vars.
617
-		 */
618
-		$valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
619
-
620
-		$post_type_obj = get_post_type_object( $this->post_type );
621
-		if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
622
-			$private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
623
-			$valid_vars = array_merge( $valid_vars, $private );
624
-		}
625
-
626
-		// Define our own in addition to WP's normal vars.
627
-		$rest_valid = array(
628
-			'post_status',
629
-			'date_query',
630
-			'ignore_sticky_posts',
631
-			'offset',
632
-			'post__in',
633
-			'post__not_in',
634
-			'post_parent',
635
-			'post_parent__in',
636
-			'post_parent__not_in',
637
-			'posts_per_page',
638
-			'meta_query',
639
-			'tax_query',
640
-			'meta_key',
641
-			'meta_value',
642
-			'meta_compare',
643
-			'meta_value_num',
644
-		);
645
-		$valid_vars = array_merge( $valid_vars, $rest_valid );
646
-
647
-		// Filter allowed query vars for the REST API.
648
-		$valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
649
-
650
-		return $valid_vars;
651
-	}
652
-
653
-	/**
654
-	 * Get the query params for collections of attachments.
655
-	 *
656
-	 * @return array
657
-	 */
658
-	public function get_collection_params() {
659
-		$params = parent::get_collection_params();
660
-
661
-		$params['context']['default'] = 'view';
662
-
663
-		$params['status'] = array(
664
-			'default'           => $this->get_post_statuses(),
665
-			'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
666
-			'type'              => array( 'array', 'string' ),
667
-			'items'             => array(
668
-				'enum'          => $this->get_post_statuses(),
669
-				'type'          => 'string',
670
-			),
671
-			'validate_callback' => 'rest_validate_request_arg',
672
-			'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
673
-		);
674
-
675
-		$params['after'] = array(
676
-			'description'        => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
677
-			'type'               => 'string',
678
-			'format'             => 'string',
679
-			'validate_callback'  => 'rest_validate_request_arg',
680
-			'sanitize_callback'  => 'sanitize_text_field',
681
-		);
682
-		$params['before'] = array(
683
-			'description'        => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
684
-			'type'               => 'string',
685
-			'format'             => 'string',
686
-			'validate_callback'  => 'rest_validate_request_arg',
687
-			'sanitize_callback'  => 'sanitize_text_field',
688
-		);
689
-		$params['exclude'] = array(
690
-			'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
691
-			'type'              => 'array',
692
-			'items'             => array(
693
-				'type'          => 'integer',
694
-			),
695
-			'default'           => array(),
696
-			'sanitize_callback' => 'wp_parse_id_list',
697
-			'validate_callback' => 'rest_validate_request_arg',
698
-		);
699
-		$params['include'] = array(
700
-			'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
701
-			'type'              => 'array',
702
-			'items'             => array(
703
-				'type'          => 'integer',
704
-			),
705
-			'default'           => array(),
706
-			'sanitize_callback' => 'wp_parse_id_list',
707
-			'validate_callback' => 'rest_validate_request_arg',
708
-		);
709
-		$params['offset'] = array(
710
-			'description'        => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
711
-			'type'               => 'integer',
712
-			'sanitize_callback'  => 'absint',
713
-			'validate_callback'  => 'rest_validate_request_arg',
714
-		);
715
-		$params['order'] = array(
716
-			'description'        => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
717
-			'type'               => 'string',
718
-			'default'            => 'desc',
719
-			'enum'               => array( 'asc', 'desc' ),
720
-			'validate_callback'  => 'rest_validate_request_arg',
721
-		);
722
-		$params['orderby'] = array(
723
-			'description'        => __( 'Sort collection by object attribute.', 'invoicing' ),
724
-			'type'               => 'string',
725
-			'default'            => 'date',
726
-			'enum'               => array(
727
-				'date',
728
-				'id',
729
-				'include',
730
-				'title',
731
-				'slug',
732
-				'modified',
733
-			),
734
-			'validate_callback'  => 'rest_validate_request_arg',
735
-		);
736
-
737
-		$post_type_obj = get_post_type_object( $this->post_type );
738
-
739
-		if ( isset( $post_type_obj->hierarchical ) && $post_type_obj->hierarchical ) {
740
-			$params['parent'] = array(
741
-				'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
742
-				'type'              => 'array',
743
-				'items'             => array(
744
-					'type'          => 'integer',
745
-				),
746
-				'sanitize_callback' => 'wp_parse_id_list',
747
-				'default'           => array(),
748
-			);
749
-			$params['parent_exclude'] = array(
750
-				'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
751
-				'type'              => 'array',
752
-				'items'             => array(
753
-					'type'          => 'integer',
754
-				),
755
-				'sanitize_callback' => 'wp_parse_id_list',
756
-				'default'           => array(),
757
-			);
758
-		}
759
-
760
-		return $params;
761
-	}
762
-
763
-	/**
764
-	 * Retrieves the items's schema, conforming to JSON Schema.
765
-	 *
766
-	 * @since 1.0.19
767
-	 *
768
-	 * @return array Item schema data.
769
-	 */
770
-	public function get_item_schema() {
771
-
772
-		// Maybe retrieve the schema from cache.
773
-		if ( $this->schema ) {
774
-			return $this->add_additional_fields_schema( $this->schema );
775
-		}
776
-
777
-		$type   = str_replace( 'wpi_', '', $this->post_type );
778
-		$schema = array(
779
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
780
-			'title'      => $this->post_type,
781
-			'type'       => 'object',
782
-			'properties' => wpinv_get_data( "$type-schema" ),
783
-		);
784
-
785
-		// Filters the invoice schema for the REST API.
603
+    /**
604
+     * Get all the WP Query vars that are allowed for the API request.
605
+     *
606
+     * @return array
607
+     */
608
+    protected function get_allowed_query_vars() {
609
+        global $wp;
610
+
611
+        /**
612
+         * Filter the publicly allowed query vars.
613
+         *
614
+         * Allows adjusting of the default query vars that are made public.
615
+         *
616
+         * @param array  Array of allowed WP_Query query vars.
617
+         */
618
+        $valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
619
+
620
+        $post_type_obj = get_post_type_object( $this->post_type );
621
+        if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
622
+            $private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
623
+            $valid_vars = array_merge( $valid_vars, $private );
624
+        }
625
+
626
+        // Define our own in addition to WP's normal vars.
627
+        $rest_valid = array(
628
+            'post_status',
629
+            'date_query',
630
+            'ignore_sticky_posts',
631
+            'offset',
632
+            'post__in',
633
+            'post__not_in',
634
+            'post_parent',
635
+            'post_parent__in',
636
+            'post_parent__not_in',
637
+            'posts_per_page',
638
+            'meta_query',
639
+            'tax_query',
640
+            'meta_key',
641
+            'meta_value',
642
+            'meta_compare',
643
+            'meta_value_num',
644
+        );
645
+        $valid_vars = array_merge( $valid_vars, $rest_valid );
646
+
647
+        // Filter allowed query vars for the REST API.
648
+        $valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
649
+
650
+        return $valid_vars;
651
+    }
652
+
653
+    /**
654
+     * Get the query params for collections of attachments.
655
+     *
656
+     * @return array
657
+     */
658
+    public function get_collection_params() {
659
+        $params = parent::get_collection_params();
660
+
661
+        $params['context']['default'] = 'view';
662
+
663
+        $params['status'] = array(
664
+            'default'           => $this->get_post_statuses(),
665
+            'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
666
+            'type'              => array( 'array', 'string' ),
667
+            'items'             => array(
668
+                'enum'          => $this->get_post_statuses(),
669
+                'type'          => 'string',
670
+            ),
671
+            'validate_callback' => 'rest_validate_request_arg',
672
+            'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
673
+        );
674
+
675
+        $params['after'] = array(
676
+            'description'        => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
677
+            'type'               => 'string',
678
+            'format'             => 'string',
679
+            'validate_callback'  => 'rest_validate_request_arg',
680
+            'sanitize_callback'  => 'sanitize_text_field',
681
+        );
682
+        $params['before'] = array(
683
+            'description'        => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
684
+            'type'               => 'string',
685
+            'format'             => 'string',
686
+            'validate_callback'  => 'rest_validate_request_arg',
687
+            'sanitize_callback'  => 'sanitize_text_field',
688
+        );
689
+        $params['exclude'] = array(
690
+            'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
691
+            'type'              => 'array',
692
+            'items'             => array(
693
+                'type'          => 'integer',
694
+            ),
695
+            'default'           => array(),
696
+            'sanitize_callback' => 'wp_parse_id_list',
697
+            'validate_callback' => 'rest_validate_request_arg',
698
+        );
699
+        $params['include'] = array(
700
+            'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
701
+            'type'              => 'array',
702
+            'items'             => array(
703
+                'type'          => 'integer',
704
+            ),
705
+            'default'           => array(),
706
+            'sanitize_callback' => 'wp_parse_id_list',
707
+            'validate_callback' => 'rest_validate_request_arg',
708
+        );
709
+        $params['offset'] = array(
710
+            'description'        => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
711
+            'type'               => 'integer',
712
+            'sanitize_callback'  => 'absint',
713
+            'validate_callback'  => 'rest_validate_request_arg',
714
+        );
715
+        $params['order'] = array(
716
+            'description'        => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
717
+            'type'               => 'string',
718
+            'default'            => 'desc',
719
+            'enum'               => array( 'asc', 'desc' ),
720
+            'validate_callback'  => 'rest_validate_request_arg',
721
+        );
722
+        $params['orderby'] = array(
723
+            'description'        => __( 'Sort collection by object attribute.', 'invoicing' ),
724
+            'type'               => 'string',
725
+            'default'            => 'date',
726
+            'enum'               => array(
727
+                'date',
728
+                'id',
729
+                'include',
730
+                'title',
731
+                'slug',
732
+                'modified',
733
+            ),
734
+            'validate_callback'  => 'rest_validate_request_arg',
735
+        );
736
+
737
+        $post_type_obj = get_post_type_object( $this->post_type );
738
+
739
+        if ( isset( $post_type_obj->hierarchical ) && $post_type_obj->hierarchical ) {
740
+            $params['parent'] = array(
741
+                'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
742
+                'type'              => 'array',
743
+                'items'             => array(
744
+                    'type'          => 'integer',
745
+                ),
746
+                'sanitize_callback' => 'wp_parse_id_list',
747
+                'default'           => array(),
748
+            );
749
+            $params['parent_exclude'] = array(
750
+                'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
751
+                'type'              => 'array',
752
+                'items'             => array(
753
+                    'type'          => 'integer',
754
+                ),
755
+                'sanitize_callback' => 'wp_parse_id_list',
756
+                'default'           => array(),
757
+            );
758
+        }
759
+
760
+        return $params;
761
+    }
762
+
763
+    /**
764
+     * Retrieves the items's schema, conforming to JSON Schema.
765
+     *
766
+     * @since 1.0.19
767
+     *
768
+     * @return array Item schema data.
769
+     */
770
+    public function get_item_schema() {
771
+
772
+        // Maybe retrieve the schema from cache.
773
+        if ( $this->schema ) {
774
+            return $this->add_additional_fields_schema( $this->schema );
775
+        }
776
+
777
+        $type   = str_replace( 'wpi_', '', $this->post_type );
778
+        $schema = array(
779
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
780
+            'title'      => $this->post_type,
781
+            'type'       => 'object',
782
+            'properties' => wpinv_get_data( "$type-schema" ),
783
+        );
784
+
785
+        // Filters the invoice schema for the REST API.
786 786
         $schema = apply_filters( "wpinv_rest_{$type}_schema", $schema );
787 787
 
788
-		// Cache the invoice schema.
789
-		$this->schema = $schema;
790
-
791
-		return $this->add_additional_fields_schema( $this->schema );
792
-	}
793
-
794
-	/**
795
-	 * Only return writable props from schema.
796
-	 *
797
-	 * @param  array $schema Schema.
798
-	 * @return bool
799
-	 */
800
-	public function filter_writable_props( $schema ) {
801
-		return empty( $schema['readonly'] );
802
-	}
803
-
804
-	/**
805
-	 * Sanitizes and validates the list of post statuses.
806
-	 *
807
-	 * @since 1.0.13
808
-	 *
809
-	 * @param string|array    $statuses  One or more post statuses.
810
-	 * @param WP_REST_Request $request   Full details about the request.
811
-	 * @param string          $parameter Additional parameter to pass to validation.
812
-	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
813
-	 */
814
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
815
-		return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
816
-	}
817
-
818
-	/**
819
-	 * Retrieves a valid list of post statuses.
820
-	 *
821
-	 * @since 1.0.19
822
-	 *
823
-	 * @return array A list of registered item statuses.
824
-	 */
825
-	public function get_post_statuses() {
826
-		return get_post_stati();
827
-	}
828
-
829
-	/**
830
-	 * Prepare a single object for create or update.
831
-	 *
832
-	 * @since 1.0.19
833
-	 * @param  WP_REST_Request $request Request object.
834
-	 * @return GetPaid_Data|WP_Error Data object or WP_Error.
835
-	 */
836
-	protected function prepare_item_for_database( $request ) {
837
-
838
-		// Do we have an object?
839
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
840
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
841
-		}
842
-
843
-		// Prepare the object.
844
-		$id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
845
-		$object    = new $this->crud_class( $id );
846
-
847
-		// Abort if an error exists.
848
-		if ( ! empty( $object->last_error ) ) {
849
-			return new WP_Error( 'invalid_item', $object->last_error );
850
-		}
851
-
852
-		$schema    = $this->get_item_schema();
853
-		$data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
854
-
855
-		// Handle all writable props.
856
-		foreach ( $data_keys as $key ) {
857
-			$value = $request[ $key ];
858
-
859
-			if ( ! is_null( $value ) ) {
860
-				switch ( $key ) {
861
-
862
-					case 'meta_data':
863
-						if ( is_array( $value ) ) {
864
-							foreach ( $value as $meta ) {
865
-								$object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
866
-							}
867
-						}
868
-						break;
869
-
870
-					default:
871
-						if ( is_callable( array( $object, "set_{$key}" ) ) ) {
872
-							$object->{"set_{$key}"}( $value );
873
-						}
874
-						break;
875
-				}
876
-			}
877
-
878
-		}
879
-
880
-		// Filters an object before it is inserted via the REST API..
881
-		return apply_filters( "getpaid_rest_pre_insert_{$this->post_type}_object", $object, $request );
882
-	}
883
-
884
-	/**
885
-	 * Retrieves data from a GetPaid class.
886
-	 *
887
-	 * @since  1.0.19
888
-	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
889
-	 * @return array
890
-	 */
891
-	protected function prepare_object_meta_data( $meta_data ) {
892
-		$meta = array();
893
-
894
-		foreach( $meta_data as $object ) {
895
-			$meta[] = $object->get_data();
896
-		}
897
-
898
-		return $meta;
899
-	}
900
-
901
-	/**
902
-	 * Retrieves invoice items.
903
-	 *
904
-	 * @since  1.0.19
905
-	 * @param  WPInv_Invoice $invoice  Invoice items.
906
-	 * @return array
907
-	 */
908
-	protected function prepare_invoice_items( $invoice ) {
909
-		$items = array();
910
-
911
-		foreach( $invoice->get_items() as $item ) {
912
-			$item_data = $item->prepare_data_for_saving();
913
-
914
-			if ( 'amount' == $invoice->get_template() ) {
915
-				$item_data['quantity'] = 1;
916
-			}
917
-
918
-			$items[] = $item_data;
919
-		}
920
-
921
-		return $items;
922
-	}
923
-
924
-	/**
925
-	 * Retrieves data from a GetPaid class.
926
-	 *
927
-	 * @since  1.0.19
928
-	 * @param  GetPaid_Data    $object  Data object.
929
-	 * @param array            $fields Fields to include.
930
-	 * @param string           $context either view or edit.
931
-	 * @return array
932
-	 */
933
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
934
-
935
-		$data      = array();
936
-		$schema    = $this->get_item_schema();
937
-		$data_keys = array_keys( $schema['properties'] );
938
-
939
-		// Handle all writable props.
940
-		foreach ( $data_keys as $key ) {
941
-
942
-			// Abort if it is not included.
943
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
944
-				continue;
945
-			}
946
-
947
-			// Or this current object does not support the field.
948
-			if ( ! $this->object_supports_field( $object, $key ) ) {
949
-				continue;
950
-			}
951
-
952
-			// Handle meta data.
953
-			if ( $key == 'meta_data' ) {
954
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
955
-				continue;
956
-			}
957
-
958
-			// Handle items.
959
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
960
-				$data['items'] = $this->prepare_invoice_items( $object );
961
-				continue;
962
-			}
963
-
964
-			// Booleans.
965
-			if ( is_callable( array( $object, $key ) ) ) {
966
-				$data[ $key ] = $object->$key( $context );
967
-				continue;
968
-			}
969
-
970
-			// Get object value.
971
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
972
-				$value = $object->{"get_{$key}"}( $context );
973
-
974
-				// If the value is an instance of GetPaid_Data...
975
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
976
-					$value = $value->get_data( $context );
977
-				}
978
-
979
-				// For objects, retrieves it's properties.
980
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
981
-				continue;
982
-			}
983
-
984
-			// The value does not exist on an object.
985
-			$data[ $key ]     = apply_filters( "getpaid_{$this->post_type}_{$key}_object_data", null, $object );
986
-
987
-		}
988
-
989
-		return $data;
990
-	}
991
-
992
-	/**
993
-	 * Checks if a key should be included in a response.
994
-	 *
995
-	 * @since  1.0.19
996
-	 * @param  GetPaid_Data $object  Data object.
997
-	 * @param  string       $field_key The key to check for.
998
-	 * @return bool
999
-	 */
1000
-	public function object_supports_field( $object, $field_key ) {
1001
-		return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", true, $object, $field_key );
1002
-	}
1003
-
1004
-	/**
1005
-	 * Prepare a single object output for response.
1006
-	 *
1007
-	 * @since  1.0.19
1008
-	 * @param  GetPaid_Data    $object  Data object.
1009
-	 * @param  WP_REST_Request $request Request object.
1010
-	 * @return WP_REST_Response
1011
-	 */
1012
-	public function prepare_item_for_response( $object, $request ) {
1013
-
1014
-		// Fetch the fields to include in this response.
1015
-		$fields = $this->get_fields_for_response( $request );
1016
-
1017
-		// Prepare object data.
1018
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
1019
-		$data    = $this->prepare_object_data( $object, $fields, $context );
1020
-		$data    = $this->add_additional_fields_to_object( $data, $request );
1021
-		$data    = $this->filter_response_by_context( $data, $context );
1022
-
1023
-		// Prepare the response.
1024
-		$response = rest_ensure_response( $data );
1025
-		$response->add_links( $this->prepare_links( $object, $request ) );
1026
-
1027
-		// Filter item response.
1028
-		return apply_filters( "getpaid_rest_prepare_{$this->post_type}_object", $response, $object, $request );
1029
-	}
788
+        // Cache the invoice schema.
789
+        $this->schema = $schema;
790
+
791
+        return $this->add_additional_fields_schema( $this->schema );
792
+    }
793
+
794
+    /**
795
+     * Only return writable props from schema.
796
+     *
797
+     * @param  array $schema Schema.
798
+     * @return bool
799
+     */
800
+    public function filter_writable_props( $schema ) {
801
+        return empty( $schema['readonly'] );
802
+    }
803
+
804
+    /**
805
+     * Sanitizes and validates the list of post statuses.
806
+     *
807
+     * @since 1.0.13
808
+     *
809
+     * @param string|array    $statuses  One or more post statuses.
810
+     * @param WP_REST_Request $request   Full details about the request.
811
+     * @param string          $parameter Additional parameter to pass to validation.
812
+     * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
813
+     */
814
+    public function sanitize_post_statuses( $statuses, $request, $parameter ) {
815
+        return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
816
+    }
817
+
818
+    /**
819
+     * Retrieves a valid list of post statuses.
820
+     *
821
+     * @since 1.0.19
822
+     *
823
+     * @return array A list of registered item statuses.
824
+     */
825
+    public function get_post_statuses() {
826
+        return get_post_stati();
827
+    }
828
+
829
+    /**
830
+     * Prepare a single object for create or update.
831
+     *
832
+     * @since 1.0.19
833
+     * @param  WP_REST_Request $request Request object.
834
+     * @return GetPaid_Data|WP_Error Data object or WP_Error.
835
+     */
836
+    protected function prepare_item_for_database( $request ) {
837
+
838
+        // Do we have an object?
839
+        if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
840
+            return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
841
+        }
842
+
843
+        // Prepare the object.
844
+        $id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
845
+        $object    = new $this->crud_class( $id );
846
+
847
+        // Abort if an error exists.
848
+        if ( ! empty( $object->last_error ) ) {
849
+            return new WP_Error( 'invalid_item', $object->last_error );
850
+        }
851
+
852
+        $schema    = $this->get_item_schema();
853
+        $data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
854
+
855
+        // Handle all writable props.
856
+        foreach ( $data_keys as $key ) {
857
+            $value = $request[ $key ];
858
+
859
+            if ( ! is_null( $value ) ) {
860
+                switch ( $key ) {
861
+
862
+                    case 'meta_data':
863
+                        if ( is_array( $value ) ) {
864
+                            foreach ( $value as $meta ) {
865
+                                $object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
866
+                            }
867
+                        }
868
+                        break;
869
+
870
+                    default:
871
+                        if ( is_callable( array( $object, "set_{$key}" ) ) ) {
872
+                            $object->{"set_{$key}"}( $value );
873
+                        }
874
+                        break;
875
+                }
876
+            }
877
+
878
+        }
879
+
880
+        // Filters an object before it is inserted via the REST API..
881
+        return apply_filters( "getpaid_rest_pre_insert_{$this->post_type}_object", $object, $request );
882
+    }
883
+
884
+    /**
885
+     * Retrieves data from a GetPaid class.
886
+     *
887
+     * @since  1.0.19
888
+     * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
889
+     * @return array
890
+     */
891
+    protected function prepare_object_meta_data( $meta_data ) {
892
+        $meta = array();
893
+
894
+        foreach( $meta_data as $object ) {
895
+            $meta[] = $object->get_data();
896
+        }
897
+
898
+        return $meta;
899
+    }
900
+
901
+    /**
902
+     * Retrieves invoice items.
903
+     *
904
+     * @since  1.0.19
905
+     * @param  WPInv_Invoice $invoice  Invoice items.
906
+     * @return array
907
+     */
908
+    protected function prepare_invoice_items( $invoice ) {
909
+        $items = array();
910
+
911
+        foreach( $invoice->get_items() as $item ) {
912
+            $item_data = $item->prepare_data_for_saving();
913
+
914
+            if ( 'amount' == $invoice->get_template() ) {
915
+                $item_data['quantity'] = 1;
916
+            }
917
+
918
+            $items[] = $item_data;
919
+        }
920
+
921
+        return $items;
922
+    }
923
+
924
+    /**
925
+     * Retrieves data from a GetPaid class.
926
+     *
927
+     * @since  1.0.19
928
+     * @param  GetPaid_Data    $object  Data object.
929
+     * @param array            $fields Fields to include.
930
+     * @param string           $context either view or edit.
931
+     * @return array
932
+     */
933
+    protected function prepare_object_data( $object, $fields, $context = 'view' ) {
934
+
935
+        $data      = array();
936
+        $schema    = $this->get_item_schema();
937
+        $data_keys = array_keys( $schema['properties'] );
938
+
939
+        // Handle all writable props.
940
+        foreach ( $data_keys as $key ) {
941
+
942
+            // Abort if it is not included.
943
+            if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
944
+                continue;
945
+            }
946
+
947
+            // Or this current object does not support the field.
948
+            if ( ! $this->object_supports_field( $object, $key ) ) {
949
+                continue;
950
+            }
951
+
952
+            // Handle meta data.
953
+            if ( $key == 'meta_data' ) {
954
+                $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
955
+                continue;
956
+            }
957
+
958
+            // Handle items.
959
+            if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
960
+                $data['items'] = $this->prepare_invoice_items( $object );
961
+                continue;
962
+            }
963
+
964
+            // Booleans.
965
+            if ( is_callable( array( $object, $key ) ) ) {
966
+                $data[ $key ] = $object->$key( $context );
967
+                continue;
968
+            }
969
+
970
+            // Get object value.
971
+            if ( is_callable( array( $object, "get_{$key}" ) ) ) {
972
+                $value = $object->{"get_{$key}"}( $context );
973
+
974
+                // If the value is an instance of GetPaid_Data...
975
+                if ( is_a( $value, 'GetPaid_Data' ) ) {
976
+                    $value = $value->get_data( $context );
977
+                }
978
+
979
+                // For objects, retrieves it's properties.
980
+                $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
981
+                continue;
982
+            }
983
+
984
+            // The value does not exist on an object.
985
+            $data[ $key ]     = apply_filters( "getpaid_{$this->post_type}_{$key}_object_data", null, $object );
986
+
987
+        }
988
+
989
+        return $data;
990
+    }
991
+
992
+    /**
993
+     * Checks if a key should be included in a response.
994
+     *
995
+     * @since  1.0.19
996
+     * @param  GetPaid_Data $object  Data object.
997
+     * @param  string       $field_key The key to check for.
998
+     * @return bool
999
+     */
1000
+    public function object_supports_field( $object, $field_key ) {
1001
+        return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", true, $object, $field_key );
1002
+    }
1003
+
1004
+    /**
1005
+     * Prepare a single object output for response.
1006
+     *
1007
+     * @since  1.0.19
1008
+     * @param  GetPaid_Data    $object  Data object.
1009
+     * @param  WP_REST_Request $request Request object.
1010
+     * @return WP_REST_Response
1011
+     */
1012
+    public function prepare_item_for_response( $object, $request ) {
1013
+
1014
+        // Fetch the fields to include in this response.
1015
+        $fields = $this->get_fields_for_response( $request );
1016
+
1017
+        // Prepare object data.
1018
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
1019
+        $data    = $this->prepare_object_data( $object, $fields, $context );
1020
+        $data    = $this->add_additional_fields_to_object( $data, $request );
1021
+        $data    = $this->filter_response_by_context( $data, $context );
1022
+
1023
+        // Prepare the response.
1024
+        $response = rest_ensure_response( $data );
1025
+        $response->add_links( $this->prepare_links( $object, $request ) );
1026
+
1027
+        // Filter item response.
1028
+        return apply_filters( "getpaid_rest_prepare_{$this->post_type}_object", $response, $object, $request );
1029
+    }
1030 1030
 
1031 1031
 }
Please login to merge, or discard this patch.
Spacing   +234 added lines, -234 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @version 1.0.19
9 9
  */
10 10
 
11
-defined( 'ABSPATH' ) || exit;
11
+defined('ABSPATH') || exit;
12 12
 
13 13
 /**
14 14
  * GetPaid REST Posts controller class.
@@ -45,7 +45,7 @@  discard block
 block discarded – undo
45 45
 	 *
46 46
 	 * @see register_rest_route()
47 47
 	 */
48
-	public function register_namespace_routes( $namespace ) {
48
+	public function register_namespace_routes($namespace) {
49 49
 
50 50
 		register_rest_route(
51 51
 			$namespace,
@@ -53,22 +53,22 @@  discard block
 block discarded – undo
53 53
 			array(
54 54
 				array(
55 55
 					'methods'             => WP_REST_Server::READABLE,
56
-					'callback'            => array( $this, 'get_items' ),
57
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
56
+					'callback'            => array($this, 'get_items'),
57
+					'permission_callback' => array($this, 'get_items_permissions_check'),
58 58
 					'args'                => $this->get_collection_params(),
59 59
 				),
60 60
 				array(
61 61
 					'methods'             => WP_REST_Server::CREATABLE,
62
-					'callback'            => array( $this, 'create_item' ),
63
-					'permission_callback' => array( $this, 'create_item_permissions_check' ),
64
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
62
+					'callback'            => array($this, 'create_item'),
63
+					'permission_callback' => array($this, 'create_item_permissions_check'),
64
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE),
65 65
 				),
66
-				'schema' => array( $this, 'get_public_item_schema' ),
66
+				'schema' => array($this, 'get_public_item_schema'),
67 67
 			)
68 68
 		);
69 69
 
70 70
 		$get_item_args = array(
71
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
71
+			'context' => $this->get_context_param(array('default' => 'view')),
72 72
 		);
73 73
 
74 74
 		register_rest_route(
@@ -77,35 +77,35 @@  discard block
 block discarded – undo
77 77
 			array(
78 78
 				'args'   => array(
79 79
 					'id' => array(
80
-						'description' => __( 'Unique identifier for the object.', 'invoicing' ),
80
+						'description' => __('Unique identifier for the object.', 'invoicing'),
81 81
 						'type'        => 'integer',
82 82
 					),
83 83
 				),
84 84
 				array(
85 85
 					'methods'             => WP_REST_Server::READABLE,
86
-					'callback'            => array( $this, 'get_item' ),
87
-					'permission_callback' => array( $this, 'get_item_permissions_check' ),
86
+					'callback'            => array($this, 'get_item'),
87
+					'permission_callback' => array($this, 'get_item_permissions_check'),
88 88
 					'args'                => $get_item_args,
89 89
 				),
90 90
 				array(
91 91
 					'methods'             => WP_REST_Server::EDITABLE,
92
-					'callback'            => array( $this, 'update_item' ),
93
-					'permission_callback' => array( $this, 'update_item_permissions_check' ),
94
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
92
+					'callback'            => array($this, 'update_item'),
93
+					'permission_callback' => array($this, 'update_item_permissions_check'),
94
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
95 95
 				),
96 96
 				array(
97 97
 					'methods'             => WP_REST_Server::DELETABLE,
98
-					'callback'            => array( $this, 'delete_item' ),
99
-					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
98
+					'callback'            => array($this, 'delete_item'),
99
+					'permission_callback' => array($this, 'delete_item_permissions_check'),
100 100
 					'args'                => array(
101 101
 						'force' => array(
102 102
 							'type'        => 'boolean',
103 103
 							'default'     => false,
104
-							'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
104
+							'description' => __('Whether to bypass Trash and force deletion.', 'invoicing'),
105 105
 						),
106 106
 					),
107 107
 				),
108
-				'schema' => array( $this, 'get_public_item_schema' ),
108
+				'schema' => array($this, 'get_public_item_schema'),
109 109
 			)
110 110
 		);
111 111
 
@@ -115,11 +115,11 @@  discard block
 block discarded – undo
115 115
 			array(
116 116
 				array(
117 117
 					'methods'             => WP_REST_Server::EDITABLE,
118
-					'callback'            => array( $this, 'batch_items' ),
119
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
120
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
118
+					'callback'            => array($this, 'batch_items'),
119
+					'permission_callback' => array($this, 'batch_items_permissions_check'),
120
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
121 121
 				),
122
-				'schema' => array( $this, 'get_public_batch_schema' ),
122
+				'schema' => array($this, 'get_public_batch_schema'),
123 123
 			)
124 124
 		);
125 125
 
@@ -133,7 +133,7 @@  discard block
 block discarded – undo
133 133
 	 * @param int    $object_id Post ID.
134 134
 	 * @return bool
135 135
 	 */
136
-	public function check_post_permissions( $context = 'read', $object_id = 0 ) {
136
+	public function check_post_permissions($context = 'read', $object_id = 0) {
137 137
 
138 138
 		$contexts = array(
139 139
 			'read'   => 'read_private_posts',
@@ -143,15 +143,15 @@  discard block
 block discarded – undo
143 143
 			'batch'  => 'edit_others_posts',
144 144
 		);
145 145
 
146
-		if ( 'revision' === $this->post_type ) {
146
+		if ('revision' === $this->post_type) {
147 147
 			$permission = false;
148 148
 		} else {
149
-			$cap              = $contexts[ $context ];
150
-			$post_type_object = get_post_type_object( $this->post_type );
151
-			$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
149
+			$cap              = $contexts[$context];
150
+			$post_type_object = get_post_type_object($this->post_type);
151
+			$permission       = current_user_can($post_type_object->cap->$cap, $object_id);
152 152
 		}
153 153
 
154
-		return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
154
+		return apply_filters('getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type);
155 155
 	}
156 156
 
157 157
 	/**
@@ -160,8 +160,8 @@  discard block
 block discarded – undo
160 160
 	 * @param  WP_REST_Request $request Full details about the request.
161 161
 	 * @return WP_Error|boolean
162 162
 	 */
163
-	public function get_items_permissions_check( $request ) {
164
-		return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
163
+	public function get_items_permissions_check($request) {
164
+		return $this->check_post_permissions() ? true : new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
165 165
 	}
166 166
 
167 167
 	/**
@@ -170,8 +170,8 @@  discard block
 block discarded – undo
170 170
 	 * @param  WP_REST_Request $request Full details about the request.
171 171
 	 * @return WP_Error|boolean
172 172
 	 */
173
-	public function create_item_permissions_check( $request ) {
174
-		return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
173
+	public function create_item_permissions_check($request) {
174
+		return $this->check_post_permissions('create') ? true : new WP_Error('rest_cannot_create', __('Sorry, you are not allowed to create resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
175 175
 	}
176 176
 
177 177
 	/**
@@ -180,11 +180,11 @@  discard block
 block discarded – undo
180 180
 	 * @param  WP_REST_Request $request Full details about the request.
181 181
 	 * @return WP_Error|boolean
182 182
 	 */
183
-	public function get_item_permissions_check( $request ) {
184
-		$post = get_post( (int) $request['id'] );
183
+	public function get_item_permissions_check($request) {
184
+		$post = get_post((int) $request['id']);
185 185
 
186
-		if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
187
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
186
+		if ($post && !$this->check_post_permissions('read', $post->ID)) {
187
+			return new WP_Error('rest_cannot_view', __('Sorry, you cannot view this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
188 188
 		}
189 189
 
190 190
 		return true;
@@ -196,11 +196,11 @@  discard block
 block discarded – undo
196 196
 	 * @param  WP_REST_Request $request Full details about the request.
197 197
 	 * @return WP_Error|boolean
198 198
 	 */
199
-	public function update_item_permissions_check( $request ) {
200
-		$post = get_post( (int) $request['id'] );
199
+	public function update_item_permissions_check($request) {
200
+		$post = get_post((int) $request['id']);
201 201
 
202
-		if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
203
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
202
+		if ($post && !$this->check_post_permissions('edit', $post->ID)) {
203
+			return new WP_Error('rest_cannot_edit', __('Sorry, you are not allowed to edit this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
204 204
 		}
205 205
 
206 206
 		return true;
@@ -212,11 +212,11 @@  discard block
 block discarded – undo
212 212
 	 * @param  WP_REST_Request $request Full details about the request.
213 213
 	 * @return bool|WP_Error
214 214
 	 */
215
-	public function delete_item_permissions_check( $request ) {
216
-		$post = get_post( (int) $request['id'] );
215
+	public function delete_item_permissions_check($request) {
216
+		$post = get_post((int) $request['id']);
217 217
 
218
-		if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
219
-			return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
218
+		if ($post && !$this->check_post_permissions('delete', $post->ID)) {
219
+			return new WP_Error('rest_cannot_delete', __('Sorry, you are not allowed to delete this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
220 220
 		}
221 221
 
222 222
 		return true;
@@ -229,8 +229,8 @@  discard block
 block discarded – undo
229 229
 	 *
230 230
 	 * @return boolean|WP_Error
231 231
 	 */
232
-	public function batch_items_permissions_check( $request ) {
233
-		return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
232
+	public function batch_items_permissions_check($request) {
233
+		return $this->check_post_permissions('batch') ? true : new WP_Error('rest_cannot_batch', __('Sorry, you are not allowed to batch manipulate this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
234 234
 	}
235 235
 
236 236
 	/**
@@ -239,14 +239,14 @@  discard block
 block discarded – undo
239 239
 	 * @param GetPaid_Data $object Object to save.
240 240
 	 * @return WP_Error|GetPaid_Data
241 241
 	 */
242
-	protected function save_object( $object ) {
242
+	protected function save_object($object) {
243 243
 		$object->save();
244 244
 
245
-		if ( ! empty( $object->last_error ) ) {
246
-			return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
245
+		if (!empty($object->last_error)) {
246
+			return new WP_Error('rest_cannot_save', $object->last_error, array('status' => 400));
247 247
 		}
248 248
 
249
-		return new $this->crud_class( $object->get_id() );
249
+		return new $this->crud_class($object->get_id());
250 250
 	}
251 251
 
252 252
 	/**
@@ -258,28 +258,28 @@  discard block
 block discarded – undo
258 258
 	 * @param int|WP_Post $object_id Supplied ID.
259 259
 	 * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
260 260
 	 */
261
-	protected function get_object( $object_id ) {
261
+	protected function get_object($object_id) {
262 262
 
263 263
 		// Do we have an object?
264
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
265
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
264
+		if (empty($this->crud_class) || !class_exists($this->crud_class)) {
265
+			return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing'));
266 266
 		}
267 267
 
268 268
 		// Fetch the object.
269
-		$object = new $this->crud_class( $object_id );
270
-		if ( ! empty( $object->last_error ) ) {
271
-			return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
269
+		$object = new $this->crud_class($object_id);
270
+		if (!empty($object->last_error)) {
271
+			return new WP_Error('rest_object_invalid_id', $object->last_error, array('status' => 404));
272 272
 		}
273 273
 
274
-		return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
274
+		return $object->get_id() ? $object : new WP_Error('rest_object_invalid_id', __('Invalid ID.', 'invoicing'), array('status' => 404));
275 275
 
276 276
 	}
277 277
 
278 278
 	/**
279 279
 	 * @deprecated
280 280
 	 */
281
-	public function get_post( $object_id ) {
282
-		return $this->get_object( $object_id );
281
+	public function get_post($object_id) {
282
+		return $this->get_object($object_id);
283 283
     }
284 284
 
285 285
 	/**
@@ -288,22 +288,22 @@  discard block
 block discarded – undo
288 288
 	 * @param WP_REST_Request $request Full details about the request.
289 289
 	 * @return WP_Error|WP_REST_Response
290 290
 	 */
291
-	public function get_item( $request ) {
291
+	public function get_item($request) {
292 292
 
293 293
 		// Fetch the item.
294
-		$object = $this->get_object( $request['id'] );
294
+		$object = $this->get_object($request['id']);
295 295
 
296
-		if ( is_wp_error( $object ) ) {
296
+		if (is_wp_error($object)) {
297 297
 			return $object;
298 298
 		}
299 299
 
300 300
 		// Generate a response.
301
-		$data     = $this->prepare_item_for_response( $object, $request );
302
-		$response = rest_ensure_response( $data );
301
+		$data     = $this->prepare_item_for_response($object, $request);
302
+		$response = rest_ensure_response($data);
303 303
 
304 304
 		// (Maybe) add a link to the html pagee.
305
-		if ( $this->public && ! is_wp_error( $response ) ) {
306
-			$response->link_header( 'alternate', get_permalink( $object->get_id() ), array( 'type' => 'text/html' ) );
305
+		if ($this->public && !is_wp_error($response)) {
306
+			$response->link_header('alternate', get_permalink($object->get_id()), array('type' => 'text/html'));
307 307
 		}
308 308
 
309 309
 		return $response;
@@ -315,30 +315,30 @@  discard block
 block discarded – undo
315 315
 	 * @param WP_REST_Request $request Full details about the request.
316 316
 	 * @return WP_Error|WP_REST_Response
317 317
 	 */
318
-	public function create_item( $request ) {
318
+	public function create_item($request) {
319 319
 
320 320
 		// Can not create an existing item.
321
-		if ( ! empty( $request['id'] ) ) {
321
+		if (!empty($request['id'])) {
322 322
 			/* translators: %s: post type */
323
-			return new WP_Error( "getpaid_rest_{$this->post_type}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
323
+			return new WP_Error("getpaid_rest_{$this->post_type}_exists", __('Cannot create existing resource.', 'invoicing'), array('status' => 400));
324 324
 		}
325 325
 
326 326
 		// Generate a GetPaid_Data object from the request.
327
-		$object = $this->prepare_item_for_database( $request );
328
-		if ( is_wp_error( $object ) ) {
327
+		$object = $this->prepare_item_for_database($request);
328
+		if (is_wp_error($object)) {
329 329
 			return $object;
330 330
 		}
331 331
 
332 332
 		// Save the object.
333
-		$object = $this->save_object( $object );
334
-		if ( is_wp_error( $object ) ) {
333
+		$object = $this->save_object($object);
334
+		if (is_wp_error($object)) {
335 335
 			return $object;
336 336
 		}
337 337
 
338 338
 		// Save special fields.
339
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
340
-		if ( is_wp_error( $save_special ) ) {
341
-			$object->delete( true );
339
+		$save_special = $this->update_additional_fields_for_object($object, $request);
340
+		if (is_wp_error($save_special)) {
341
+			$object->delete(true);
342 342
 			return $save_special;
343 343
 		}
344 344
 
@@ -349,13 +349,13 @@  discard block
 block discarded – undo
349 349
 		 * @param WP_REST_Request $request   Request object.
350 350
 		 * @param boolean         $creating  True when creating item, false when updating.
351 351
 		 */
352
-		do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, true );
352
+		do_action("getpaid_rest_insert_{$this->post_type}", $object, $request, true);
353 353
 
354
-		$request->set_param( 'context', 'edit' );
355
-		$response = $this->prepare_item_for_response( $object, $request );
356
-		$response = rest_ensure_response( $response );
357
-		$response->set_status( 201 );
358
-		$response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
354
+		$request->set_param('context', 'edit');
355
+		$response = $this->prepare_item_for_response($object, $request);
356
+		$response = rest_ensure_response($response);
357
+		$response->set_status(201);
358
+		$response->header('Location', rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id())));
359 359
 
360 360
 		return $response;
361 361
 	}
@@ -366,29 +366,29 @@  discard block
 block discarded – undo
366 366
 	 * @param WP_REST_Request $request Full details about the request.
367 367
 	 * @return WP_Error|WP_REST_Response
368 368
 	 */
369
-	public function update_item( $request ) {
369
+	public function update_item($request) {
370 370
 
371 371
 		// Fetch the item.
372
-		$object = $this->get_object( $request['id'] );
373
-		if ( is_wp_error( $object ) ) {
372
+		$object = $this->get_object($request['id']);
373
+		if (is_wp_error($object)) {
374 374
 			return $object;
375 375
 		}
376 376
 
377 377
 		// Prepare the item for saving.
378
-		$object = $this->prepare_item_for_database( $request );
379
-		if ( is_wp_error( $object ) ) {
378
+		$object = $this->prepare_item_for_database($request);
379
+		if (is_wp_error($object)) {
380 380
 			return $object;
381 381
 		}
382 382
 
383 383
 		// Save the item.
384
-		$object = $this->save_object( $object );
385
-		if ( is_wp_error( $object ) ) {
384
+		$object = $this->save_object($object);
385
+		if (is_wp_error($object)) {
386 386
 			return $object;
387 387
 		}
388 388
 
389 389
 		// Save special fields (those added via hooks).
390
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
391
-		if ( is_wp_error( $save_special ) ) {
390
+		$save_special = $this->update_additional_fields_for_object($object, $request);
391
+		if (is_wp_error($save_special)) {
392 392
 			return $save_special;
393 393
 		}
394 394
 
@@ -399,11 +399,11 @@  discard block
 block discarded – undo
399 399
 		 * @param WP_REST_Request $request   Request object.
400 400
 		 * @param boolean         $creating  True when creating item, false when updating.
401 401
 		 */
402
-		do_action( "getpaid_rest_insert_{$this->post_type}", $object, $request, false );
402
+		do_action("getpaid_rest_insert_{$this->post_type}", $object, $request, false);
403 403
 
404
-		$request->set_param( 'context', 'edit' );
405
-		$response = $this->prepare_item_for_response( $object, $request );
406
-		return rest_ensure_response( $response );
404
+		$request->set_param('context', 'edit');
405
+		$response = $this->prepare_item_for_response($object, $request);
406
+		return rest_ensure_response($response);
407 407
 	}
408 408
 
409 409
 	/**
@@ -412,7 +412,7 @@  discard block
 block discarded – undo
412 412
 	 * @param WP_REST_Request $request Full details about the request.
413 413
 	 * @return WP_Error|WP_REST_Response
414 414
 	 */
415
-	public function get_items( $request ) {
415
+	public function get_items($request) {
416 416
 		$args                         = array();
417 417
 		$args['offset']               = $request['offset'];
418 418
 		$args['order']                = $request['order'];
@@ -425,16 +425,16 @@  discard block
 block discarded – undo
425 425
 		$args['post_parent__in']      = $request['parent'];
426 426
 		$args['post_parent__not_in']  = $request['parent_exclude'];
427 427
 		$args['s']                    = $request['search'];
428
-		$args['post_status']          = wpinv_parse_list( $request['status'] );
428
+		$args['post_status']          = wpinv_parse_list($request['status']);
429 429
 
430 430
 		$args['date_query'] = array();
431 431
 		// Set before into date query. Date query must be specified as an array of an array.
432
-		if ( isset( $request['before'] ) ) {
432
+		if (isset($request['before'])) {
433 433
 			$args['date_query'][0]['before'] = $request['before'];
434 434
 		}
435 435
 
436 436
 		// Set after into date query. Date query must be specified as an array of an array.
437
-		if ( isset( $request['after'] ) ) {
437
+		if (isset($request['after'])) {
438 438
 			$args['date_query'][0]['after'] = $request['after'];
439 439
 		}
440 440
 
@@ -443,54 +443,54 @@  discard block
 block discarded – undo
443 443
 		$args['fields']    = 'ids';
444 444
 
445 445
 		// Filter the query arguments for a request.
446
-		$args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
447
-		$query_args = $this->prepare_items_query( $args, $request );
446
+		$args       = apply_filters("getpaid_rest_{$this->post_type}_query", $args, $request);
447
+		$query_args = $this->prepare_items_query($args, $request);
448 448
 
449 449
 		$posts_query = new WP_Query();
450
-		$query_result = $posts_query->query( $query_args );
450
+		$query_result = $posts_query->query($query_args);
451 451
 
452 452
 		$posts = array();
453
-		foreach ( $query_result as $post_id ) {
454
-			if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
453
+		foreach ($query_result as $post_id) {
454
+			if (!$this->check_post_permissions('read', $post_id)) {
455 455
 				continue;
456 456
 			}
457 457
 
458
-			$data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
459
-			$posts[] = $this->prepare_response_for_collection( $data );
458
+			$data    = $this->prepare_item_for_response($this->get_object($post_id), $request);
459
+			$posts[] = $this->prepare_response_for_collection($data);
460 460
 		}
461 461
 
462 462
 		$page        = (int) $query_args['paged'];
463 463
 		$total_posts = $posts_query->found_posts;
464 464
 
465
-		if ( $total_posts < 1 ) {
465
+		if ($total_posts < 1) {
466 466
 			// Out-of-bounds, run the query again without LIMIT for total count.
467
-			unset( $query_args['paged'] );
467
+			unset($query_args['paged']);
468 468
 			$count_query = new WP_Query();
469
-			$count_query->query( $query_args );
469
+			$count_query->query($query_args);
470 470
 			$total_posts = $count_query->found_posts;
471 471
 		}
472 472
 
473
-		$max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
473
+		$max_pages = ceil($total_posts / (int) $query_args['posts_per_page']);
474 474
 
475
-		$response = rest_ensure_response( $posts );
476
-		$response->header( 'X-WP-Total', (int) $total_posts );
477
-		$response->header( 'X-WP-TotalPages', (int) $max_pages );
475
+		$response = rest_ensure_response($posts);
476
+		$response->header('X-WP-Total', (int) $total_posts);
477
+		$response->header('X-WP-TotalPages', (int) $max_pages);
478 478
 
479 479
 		$request_params = $request->get_query_params();
480
-		$base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
480
+		$base = add_query_arg($request_params, rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)));
481 481
 
482
-		if ( $page > 1 ) {
482
+		if ($page > 1) {
483 483
 			$prev_page = $page - 1;
484
-			if ( $prev_page > $max_pages ) {
484
+			if ($prev_page > $max_pages) {
485 485
 				$prev_page = $max_pages;
486 486
 			}
487
-			$prev_link = add_query_arg( 'page', $prev_page, $base );
488
-			$response->link_header( 'prev', $prev_link );
487
+			$prev_link = add_query_arg('page', $prev_page, $base);
488
+			$response->link_header('prev', $prev_link);
489 489
 		}
490
-		if ( $max_pages > $page ) {
490
+		if ($max_pages > $page) {
491 491
 			$next_page = $page + 1;
492
-			$next_link = add_query_arg( 'page', $next_page, $base );
493
-			$response->link_header( 'next', $next_link );
492
+			$next_link = add_query_arg('page', $next_page, $base);
493
+			$response->link_header('next', $next_link);
494 494
 		}
495 495
 
496 496
 		return $response;
@@ -502,26 +502,26 @@  discard block
 block discarded – undo
502 502
 	 * @param WP_REST_Request $request Full details about the request.
503 503
 	 * @return WP_REST_Response|WP_Error
504 504
 	 */
505
-	public function delete_item( $request ) {
505
+	public function delete_item($request) {
506 506
 
507 507
 		// Fetch the item.
508
-		$item = $this->get_object( $request['id'] );
509
-		if ( is_wp_error( $item ) ) {
508
+		$item = $this->get_object($request['id']);
509
+		if (is_wp_error($item)) {
510 510
 			return $item;
511 511
 		}
512 512
 
513 513
 		$supports_trash = EMPTY_TRASH_DAYS > 0;
514 514
 		$force          = $supports_trash && (bool) $request['force'];
515 515
 
516
-		if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
517
-			return new WP_Error( "cannot_delete", __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
516
+		if (!$this->check_post_permissions('delete', $item->ID)) {
517
+			return new WP_Error("cannot_delete", __('Sorry, you are not allowed to delete this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
518 518
 		}
519 519
 
520
-		$request->set_param( 'context', 'edit' );
521
-		$response = $this->prepare_item_for_response( $item, $request );
520
+		$request->set_param('context', 'edit');
521
+		$response = $this->prepare_item_for_response($item, $request);
522 522
 
523
-		if ( ! wp_delete_post( $item->ID, $force ) ) {
524
-			return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
523
+		if (!wp_delete_post($item->ID, $force)) {
524
+			return new WP_Error('rest_cannot_delete', sprintf(__('The resource cannot be deleted.', 'invoicing'), $this->post_type), array('status' => 500));
525 525
 		}
526 526
 
527 527
 		return $response;
@@ -533,34 +533,34 @@  discard block
 block discarded – undo
533 533
 	 * @param GetPaid_Data    $object GetPaid_Data object.
534 534
 	 * @return array Links for the given object.
535 535
 	 */
536
-	protected function prepare_links( $object ) {
536
+	protected function prepare_links($object) {
537 537
 
538 538
 		$links = array(
539 539
 			'self'       => array(
540
-				'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
540
+				'href'   => rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id())),
541 541
 			),
542 542
 			'collection' => array(
543
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
543
+				'href'   => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)),
544 544
 			),
545 545
 		);
546 546
 
547
-		if ( is_callable( array( $object, 'get_user_id' ) ) ) {
547
+		if (is_callable(array($object, 'get_user_id'))) {
548 548
 			$links['user'] = array(
549
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_user_id' )  ) ),
549
+				'href'       => rest_url('wp/v2/users/' . call_user_func(array($object, 'get_user_id'))),
550 550
 				'embeddable' => true,
551 551
 			);
552 552
 		}
553 553
 
554
-		if ( is_callable( array( $object, 'get_owner' ) ) ) {
555
-			$links['owner']  = array(
556
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func(  array( $object, 'get_owner' )  ) ),
554
+		if (is_callable(array($object, 'get_owner'))) {
555
+			$links['owner'] = array(
556
+				'href'       => rest_url('wp/v2/users/' . call_user_func(array($object, 'get_owner'))),
557 557
 				'embeddable' => true,
558 558
 			);
559 559
 		}
560 560
 
561
-		if ( is_callable( array( $object, 'get_parent_id' ) ) ) {
562
-			$links['parent']  = array(
563
-				'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func(  array( $object, 'get_parent_id' )  ) ),
561
+		if (is_callable(array($object, 'get_parent_id'))) {
562
+			$links['parent'] = array(
563
+				'href'       => rest_url("$this->namespace/$this->rest_base/" . call_user_func(array($object, 'get_parent_id'))),
564 564
 				'embeddable' => true,
565 565
 			);
566 566
 		}
@@ -576,27 +576,27 @@  discard block
 block discarded – undo
576 576
 	 * @param WP_REST_Request $request Request object.
577 577
 	 * @return array          $query_args
578 578
 	 */
579
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
579
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
580 580
 
581
-		$valid_vars = array_flip( $this->get_allowed_query_vars() );
581
+		$valid_vars = array_flip($this->get_allowed_query_vars());
582 582
 		$query_args = array();
583
-		foreach ( $valid_vars as $var => $index ) {
584
-			if ( isset( $prepared_args[ $var ] ) ) {
585
-				$query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ] );
583
+		foreach ($valid_vars as $var => $index) {
584
+			if (isset($prepared_args[$var])) {
585
+				$query_args[$var] = apply_filters("getpaid_rest_query_var-{$var}", $prepared_args[$var]);
586 586
 			}
587 587
 		}
588 588
 
589 589
 		$query_args['ignore_sticky_posts'] = true;
590 590
 
591
-		if ( 'include' === $query_args['orderby'] ) {
591
+		if ('include' === $query_args['orderby']) {
592 592
 			$query_args['orderby'] = 'post__in';
593
-		} elseif ( 'id' === $query_args['orderby'] ) {
593
+		} elseif ('id' === $query_args['orderby']) {
594 594
 			$query_args['orderby'] = 'ID'; // ID must be capitalized.
595
-		} elseif ( 'slug' === $query_args['orderby'] ) {
595
+		} elseif ('slug' === $query_args['orderby']) {
596 596
 			$query_args['orderby'] = 'name';
597 597
 		}
598 598
 
599
-		return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
599
+		return apply_filters('getpaid_rest_prepare_items_query', $query_args, $request, $this);
600 600
 
601 601
 	}
602 602
 
@@ -615,12 +615,12 @@  discard block
 block discarded – undo
615 615
 		 *
616 616
 		 * @param array  Array of allowed WP_Query query vars.
617 617
 		 */
618
-		$valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
618
+		$valid_vars = apply_filters('query_vars', $wp->public_query_vars);
619 619
 
620
-		$post_type_obj = get_post_type_object( $this->post_type );
621
-		if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
622
-			$private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
623
-			$valid_vars = array_merge( $valid_vars, $private );
620
+		$post_type_obj = get_post_type_object($this->post_type);
621
+		if (current_user_can($post_type_obj->cap->edit_posts)) {
622
+			$private = apply_filters('getpaid_rest_private_query_vars', $wp->private_query_vars);
623
+			$valid_vars = array_merge($valid_vars, $private);
624 624
 		}
625 625
 
626 626
 		// Define our own in addition to WP's normal vars.
@@ -642,10 +642,10 @@  discard block
 block discarded – undo
642 642
 			'meta_compare',
643 643
 			'meta_value_num',
644 644
 		);
645
-		$valid_vars = array_merge( $valid_vars, $rest_valid );
645
+		$valid_vars = array_merge($valid_vars, $rest_valid);
646 646
 
647 647
 		// Filter allowed query vars for the REST API.
648
-		$valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
648
+		$valid_vars = apply_filters('getpaid_rest_query_vars', $valid_vars, $this);
649 649
 
650 650
 		return $valid_vars;
651 651
 	}
@@ -662,32 +662,32 @@  discard block
 block discarded – undo
662 662
 
663 663
 		$params['status'] = array(
664 664
 			'default'           => $this->get_post_statuses(),
665
-			'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
666
-			'type'              => array( 'array', 'string' ),
665
+			'description'       => __('Limit result set to resources assigned one or more statuses.', 'invoicing'),
666
+			'type'              => array('array', 'string'),
667 667
 			'items'             => array(
668 668
 				'enum'          => $this->get_post_statuses(),
669 669
 				'type'          => 'string',
670 670
 			),
671 671
 			'validate_callback' => 'rest_validate_request_arg',
672
-			'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
672
+			'sanitize_callback' => array($this, 'sanitize_post_statuses'),
673 673
 		);
674 674
 
675 675
 		$params['after'] = array(
676
-			'description'        => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
676
+			'description'        => __('Limit response to resources created after a given ISO8601 compliant date.', 'invoicing'),
677 677
 			'type'               => 'string',
678 678
 			'format'             => 'string',
679 679
 			'validate_callback'  => 'rest_validate_request_arg',
680 680
 			'sanitize_callback'  => 'sanitize_text_field',
681 681
 		);
682 682
 		$params['before'] = array(
683
-			'description'        => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
683
+			'description'        => __('Limit response to resources created before a given ISO8601 compliant date.', 'invoicing'),
684 684
 			'type'               => 'string',
685 685
 			'format'             => 'string',
686 686
 			'validate_callback'  => 'rest_validate_request_arg',
687 687
 			'sanitize_callback'  => 'sanitize_text_field',
688 688
 		);
689 689
 		$params['exclude'] = array(
690
-			'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
690
+			'description'       => __('Ensure result set excludes specific IDs.', 'invoicing'),
691 691
 			'type'              => 'array',
692 692
 			'items'             => array(
693 693
 				'type'          => 'integer',
@@ -697,7 +697,7 @@  discard block
 block discarded – undo
697 697
 			'validate_callback' => 'rest_validate_request_arg',
698 698
 		);
699 699
 		$params['include'] = array(
700
-			'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
700
+			'description'       => __('Limit result set to specific ids.', 'invoicing'),
701 701
 			'type'              => 'array',
702 702
 			'items'             => array(
703 703
 				'type'          => 'integer',
@@ -707,20 +707,20 @@  discard block
 block discarded – undo
707 707
 			'validate_callback' => 'rest_validate_request_arg',
708 708
 		);
709 709
 		$params['offset'] = array(
710
-			'description'        => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
710
+			'description'        => __('Offset the result set by a specific number of items.', 'invoicing'),
711 711
 			'type'               => 'integer',
712 712
 			'sanitize_callback'  => 'absint',
713 713
 			'validate_callback'  => 'rest_validate_request_arg',
714 714
 		);
715 715
 		$params['order'] = array(
716
-			'description'        => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
716
+			'description'        => __('Order sort attribute ascending or descending.', 'invoicing'),
717 717
 			'type'               => 'string',
718 718
 			'default'            => 'desc',
719
-			'enum'               => array( 'asc', 'desc' ),
719
+			'enum'               => array('asc', 'desc'),
720 720
 			'validate_callback'  => 'rest_validate_request_arg',
721 721
 		);
722 722
 		$params['orderby'] = array(
723
-			'description'        => __( 'Sort collection by object attribute.', 'invoicing' ),
723
+			'description'        => __('Sort collection by object attribute.', 'invoicing'),
724 724
 			'type'               => 'string',
725 725
 			'default'            => 'date',
726 726
 			'enum'               => array(
@@ -734,11 +734,11 @@  discard block
 block discarded – undo
734 734
 			'validate_callback'  => 'rest_validate_request_arg',
735 735
 		);
736 736
 
737
-		$post_type_obj = get_post_type_object( $this->post_type );
737
+		$post_type_obj = get_post_type_object($this->post_type);
738 738
 
739
-		if ( isset( $post_type_obj->hierarchical ) && $post_type_obj->hierarchical ) {
739
+		if (isset($post_type_obj->hierarchical) && $post_type_obj->hierarchical) {
740 740
 			$params['parent'] = array(
741
-				'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
741
+				'description'       => __('Limit result set to those of particular parent IDs.', 'invoicing'),
742 742
 				'type'              => 'array',
743 743
 				'items'             => array(
744 744
 					'type'          => 'integer',
@@ -747,7 +747,7 @@  discard block
 block discarded – undo
747 747
 				'default'           => array(),
748 748
 			);
749 749
 			$params['parent_exclude'] = array(
750
-				'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
750
+				'description'       => __('Limit result set to all items except those of a particular parent ID.', 'invoicing'),
751 751
 				'type'              => 'array',
752 752
 				'items'             => array(
753 753
 					'type'          => 'integer',
@@ -770,25 +770,25 @@  discard block
 block discarded – undo
770 770
 	public function get_item_schema() {
771 771
 
772 772
 		// Maybe retrieve the schema from cache.
773
-		if ( $this->schema ) {
774
-			return $this->add_additional_fields_schema( $this->schema );
773
+		if ($this->schema) {
774
+			return $this->add_additional_fields_schema($this->schema);
775 775
 		}
776 776
 
777
-		$type   = str_replace( 'wpi_', '', $this->post_type );
777
+		$type   = str_replace('wpi_', '', $this->post_type);
778 778
 		$schema = array(
779 779
 			'$schema'    => 'http://json-schema.org/draft-04/schema#',
780 780
 			'title'      => $this->post_type,
781 781
 			'type'       => 'object',
782
-			'properties' => wpinv_get_data( "$type-schema" ),
782
+			'properties' => wpinv_get_data("$type-schema"),
783 783
 		);
784 784
 
785 785
 		// Filters the invoice schema for the REST API.
786
-        $schema = apply_filters( "wpinv_rest_{$type}_schema", $schema );
786
+        $schema = apply_filters("wpinv_rest_{$type}_schema", $schema);
787 787
 
788 788
 		// Cache the invoice schema.
789 789
 		$this->schema = $schema;
790 790
 
791
-		return $this->add_additional_fields_schema( $this->schema );
791
+		return $this->add_additional_fields_schema($this->schema);
792 792
 	}
793 793
 
794 794
 	/**
@@ -797,8 +797,8 @@  discard block
 block discarded – undo
797 797
 	 * @param  array $schema Schema.
798 798
 	 * @return bool
799 799
 	 */
800
-	public function filter_writable_props( $schema ) {
801
-		return empty( $schema['readonly'] );
800
+	public function filter_writable_props($schema) {
801
+		return empty($schema['readonly']);
802 802
 	}
803 803
 
804 804
 	/**
@@ -811,8 +811,8 @@  discard block
 block discarded – undo
811 811
 	 * @param string          $parameter Additional parameter to pass to validation.
812 812
 	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
813 813
 	 */
814
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
815
-		return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
814
+	public function sanitize_post_statuses($statuses, $request, $parameter) {
815
+		return array_intersect(wp_parse_slug_list($statuses), $this->get_post_statuses());
816 816
 	}
817 817
 
818 818
 	/**
@@ -833,43 +833,43 @@  discard block
 block discarded – undo
833 833
 	 * @param  WP_REST_Request $request Request object.
834 834
 	 * @return GetPaid_Data|WP_Error Data object or WP_Error.
835 835
 	 */
836
-	protected function prepare_item_for_database( $request ) {
836
+	protected function prepare_item_for_database($request) {
837 837
 
838 838
 		// Do we have an object?
839
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
840
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
839
+		if (empty($this->crud_class) || !class_exists($this->crud_class)) {
840
+			return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing'));
841 841
 		}
842 842
 
843 843
 		// Prepare the object.
844
-		$id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
845
-		$object    = new $this->crud_class( $id );
844
+		$id        = isset($request['id']) ? absint($request['id']) : 0;
845
+		$object    = new $this->crud_class($id);
846 846
 
847 847
 		// Abort if an error exists.
848
-		if ( ! empty( $object->last_error ) ) {
849
-			return new WP_Error( 'invalid_item', $object->last_error );
848
+		if (!empty($object->last_error)) {
849
+			return new WP_Error('invalid_item', $object->last_error);
850 850
 		}
851 851
 
852 852
 		$schema    = $this->get_item_schema();
853
-		$data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
853
+		$data_keys = array_keys(array_filter($schema['properties'], array($this, 'filter_writable_props')));
854 854
 
855 855
 		// Handle all writable props.
856
-		foreach ( $data_keys as $key ) {
857
-			$value = $request[ $key ];
856
+		foreach ($data_keys as $key) {
857
+			$value = $request[$key];
858 858
 
859
-			if ( ! is_null( $value ) ) {
860
-				switch ( $key ) {
859
+			if (!is_null($value)) {
860
+				switch ($key) {
861 861
 
862 862
 					case 'meta_data':
863
-						if ( is_array( $value ) ) {
864
-							foreach ( $value as $meta ) {
865
-								$object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
863
+						if (is_array($value)) {
864
+							foreach ($value as $meta) {
865
+								$object->update_meta_data($meta['key'], $meta['value'], isset($meta['id']) ? $meta['id'] : '');
866 866
 							}
867 867
 						}
868 868
 						break;
869 869
 
870 870
 					default:
871
-						if ( is_callable( array( $object, "set_{$key}" ) ) ) {
872
-							$object->{"set_{$key}"}( $value );
871
+						if (is_callable(array($object, "set_{$key}"))) {
872
+							$object->{"set_{$key}"}($value);
873 873
 						}
874 874
 						break;
875 875
 				}
@@ -878,7 +878,7 @@  discard block
 block discarded – undo
878 878
 		}
879 879
 
880 880
 		// Filters an object before it is inserted via the REST API..
881
-		return apply_filters( "getpaid_rest_pre_insert_{$this->post_type}_object", $object, $request );
881
+		return apply_filters("getpaid_rest_pre_insert_{$this->post_type}_object", $object, $request);
882 882
 	}
883 883
 
884 884
 	/**
@@ -888,10 +888,10 @@  discard block
 block discarded – undo
888 888
 	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
889 889
 	 * @return array
890 890
 	 */
891
-	protected function prepare_object_meta_data( $meta_data ) {
891
+	protected function prepare_object_meta_data($meta_data) {
892 892
 		$meta = array();
893 893
 
894
-		foreach( $meta_data as $object ) {
894
+		foreach ($meta_data as $object) {
895 895
 			$meta[] = $object->get_data();
896 896
 		}
897 897
 
@@ -905,13 +905,13 @@  discard block
 block discarded – undo
905 905
 	 * @param  WPInv_Invoice $invoice  Invoice items.
906 906
 	 * @return array
907 907
 	 */
908
-	protected function prepare_invoice_items( $invoice ) {
908
+	protected function prepare_invoice_items($invoice) {
909 909
 		$items = array();
910 910
 
911
-		foreach( $invoice->get_items() as $item ) {
911
+		foreach ($invoice->get_items() as $item) {
912 912
 			$item_data = $item->prepare_data_for_saving();
913 913
 
914
-			if ( 'amount' == $invoice->get_template() ) {
914
+			if ('amount' == $invoice->get_template()) {
915 915
 				$item_data['quantity'] = 1;
916 916
 			}
917 917
 
@@ -930,59 +930,59 @@  discard block
 block discarded – undo
930 930
 	 * @param string           $context either view or edit.
931 931
 	 * @return array
932 932
 	 */
933
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
933
+	protected function prepare_object_data($object, $fields, $context = 'view') {
934 934
 
935 935
 		$data      = array();
936 936
 		$schema    = $this->get_item_schema();
937
-		$data_keys = array_keys( $schema['properties'] );
937
+		$data_keys = array_keys($schema['properties']);
938 938
 
939 939
 		// Handle all writable props.
940
-		foreach ( $data_keys as $key ) {
940
+		foreach ($data_keys as $key) {
941 941
 
942 942
 			// Abort if it is not included.
943
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
943
+			if (!empty($fields) && !$this->is_field_included($key, $fields)) {
944 944
 				continue;
945 945
 			}
946 946
 
947 947
 			// Or this current object does not support the field.
948
-			if ( ! $this->object_supports_field( $object, $key ) ) {
948
+			if (!$this->object_supports_field($object, $key)) {
949 949
 				continue;
950 950
 			}
951 951
 
952 952
 			// Handle meta data.
953
-			if ( $key == 'meta_data' ) {
954
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
953
+			if ($key == 'meta_data') {
954
+				$data['meta_data'] = $this->prepare_object_meta_data($object->get_meta_data());
955 955
 				continue;
956 956
 			}
957 957
 
958 958
 			// Handle items.
959
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
960
-				$data['items'] = $this->prepare_invoice_items( $object );
959
+			if ($key == 'items' && is_a($object, 'WPInv_Invoice')) {
960
+				$data['items'] = $this->prepare_invoice_items($object);
961 961
 				continue;
962 962
 			}
963 963
 
964 964
 			// Booleans.
965
-			if ( is_callable( array( $object, $key ) ) ) {
966
-				$data[ $key ] = $object->$key( $context );
965
+			if (is_callable(array($object, $key))) {
966
+				$data[$key] = $object->$key($context);
967 967
 				continue;
968 968
 			}
969 969
 
970 970
 			// Get object value.
971
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
972
-				$value = $object->{"get_{$key}"}( $context );
971
+			if (is_callable(array($object, "get_{$key}"))) {
972
+				$value = $object->{"get_{$key}"}($context);
973 973
 
974 974
 				// If the value is an instance of GetPaid_Data...
975
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
976
-					$value = $value->get_data( $context );
975
+				if (is_a($value, 'GetPaid_Data')) {
976
+					$value = $value->get_data($context);
977 977
 				}
978 978
 
979 979
 				// For objects, retrieves it's properties.
980
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
980
+				$data[$key] = is_object($value) ? get_object_vars($value) : $value;
981 981
 				continue;
982 982
 			}
983 983
 
984 984
 			// The value does not exist on an object.
985
-			$data[ $key ]     = apply_filters( "getpaid_{$this->post_type}_{$key}_object_data", null, $object );
985
+			$data[$key] = apply_filters("getpaid_{$this->post_type}_{$key}_object_data", null, $object);
986 986
 
987 987
 		}
988 988
 
@@ -997,8 +997,8 @@  discard block
 block discarded – undo
997 997
 	 * @param  string       $field_key The key to check for.
998 998
 	 * @return bool
999 999
 	 */
1000
-	public function object_supports_field( $object, $field_key ) {
1001
-		return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", true, $object, $field_key );
1000
+	public function object_supports_field($object, $field_key) {
1001
+		return apply_filters("getpaid_rest_{$this->post_type}_object_supports_key", true, $object, $field_key);
1002 1002
 	}
1003 1003
 
1004 1004
 	/**
@@ -1009,23 +1009,23 @@  discard block
 block discarded – undo
1009 1009
 	 * @param  WP_REST_Request $request Request object.
1010 1010
 	 * @return WP_REST_Response
1011 1011
 	 */
1012
-	public function prepare_item_for_response( $object, $request ) {
1012
+	public function prepare_item_for_response($object, $request) {
1013 1013
 
1014 1014
 		// Fetch the fields to include in this response.
1015
-		$fields = $this->get_fields_for_response( $request );
1015
+		$fields = $this->get_fields_for_response($request);
1016 1016
 
1017 1017
 		// Prepare object data.
1018
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
1019
-		$data    = $this->prepare_object_data( $object, $fields, $context );
1020
-		$data    = $this->add_additional_fields_to_object( $data, $request );
1021
-		$data    = $this->filter_response_by_context( $data, $context );
1018
+		$context = !empty($request['context']) ? $request['context'] : 'view';
1019
+		$data    = $this->prepare_object_data($object, $fields, $context);
1020
+		$data    = $this->add_additional_fields_to_object($data, $request);
1021
+		$data    = $this->filter_response_by_context($data, $context);
1022 1022
 
1023 1023
 		// Prepare the response.
1024
-		$response = rest_ensure_response( $data );
1025
-		$response->add_links( $this->prepare_links( $object, $request ) );
1024
+		$response = rest_ensure_response($data);
1025
+		$response->add_links($this->prepare_links($object, $request));
1026 1026
 
1027 1027
 		// Filter item response.
1028
-		return apply_filters( "getpaid_rest_prepare_{$this->post_type}_object", $response, $object, $request );
1028
+		return apply_filters("getpaid_rest_prepare_{$this->post_type}_object", $response, $object, $request);
1029 1029
 	}
1030 1030
 
1031 1031
 }
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-items-controller.php 2 patches
Indentation   +163 added lines, -163 removed lines patch added patch discarded remove patch
@@ -15,172 +15,172 @@
 block discarded – undo
15 15
 class WPInv_REST_Items_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_item';
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_item';
23 23
 	
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'items';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Item';
37
-
38
-	/**
39
-	 * Registers the routes for the objects of the controller.
40
-	 *
41
-	 * @since 1.0.19
42
-	 *
43
-	 * @see register_rest_route()
44
-	 */
45
-	public function register_namespace_routes( $namespace ) {
46
-
47
-		parent::register_namespace_routes( $namespace );
48
-
49
-		register_rest_route(
50
-			$this->namespace,
51
-			'/' . $this->rest_base . '/item-types',
52
-			array(
53
-				array(
54
-					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_item_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
-				),
58
-			)
59
-		);
60
-
61
-	}
62
-
63
-	/**
64
-	 * Handles rest requests for item types.
65
-	 *
66
-	 * @since 1.0.13
67
-	 * 
68
-	 * 
69
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
-	 */
71
-	public function get_item_types() {
72
-		return rest_ensure_response( wpinv_get_item_types() );
73
-	}
24
+    /**
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'items';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Item';
37
+
38
+    /**
39
+     * Registers the routes for the objects of the controller.
40
+     *
41
+     * @since 1.0.19
42
+     *
43
+     * @see register_rest_route()
44
+     */
45
+    public function register_namespace_routes( $namespace ) {
46
+
47
+        parent::register_namespace_routes( $namespace );
48
+
49
+        register_rest_route(
50
+            $this->namespace,
51
+            '/' . $this->rest_base . '/item-types',
52
+            array(
53
+                array(
54
+                    'methods'             => WP_REST_Server::READABLE,
55
+                    'callback'            => array( $this, 'get_item_types' ),
56
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
+                ),
58
+            )
59
+        );
60
+
61
+    }
62
+
63
+    /**
64
+     * Handles rest requests for item types.
65
+     *
66
+     * @since 1.0.13
67
+     * 
68
+     * 
69
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
+     */
71
+    public function get_item_types() {
72
+        return rest_ensure_response( wpinv_get_item_types() );
73
+    }
74
+
75
+    /**
76
+     * Retrieves the query params for the items collection.
77
+     *
78
+     * @since 1.0.13
79
+     *
80
+     * @return array Collection parameters.
81
+     */
82
+    public function get_collection_params() {
83
+
84
+        $params = array_merge(
85
+
86
+            parent::get_collection_params(),
87
+
88
+            array(
89
+
90
+                // Item types
91
+                'type'                  => array(
92
+                    'description'       => __( 'Type of items to fetch.', 'invoicing' ),
93
+                    'type'              => array( 'array', 'string' ),
94
+                    'default'           => 'any',
95
+                    'validate_callback' => 'rest_validate_request_arg',
96
+                    'sanitize_callback' => 'wpinv_parse_list',
97
+                    'items'             => array(
98
+                        'enum'          => array_merge( array( 'any' ), wpinv_item_types() ),
99
+                        'type'          => 'string',
100
+                    ),
101
+                ),
102
+
103
+            )
104
+        );
105
+
106
+        // Filter collection parameters for the items controller.
107
+        return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
108
+
109
+    }
110
+
111
+    /**
112
+     * Determine the allowed query_vars for a get_items() response and
113
+     * prepare for WP_Query.
114
+     *
115
+     * @param array           $prepared_args Prepared arguments.
116
+     * @param WP_REST_Request $request Request object.
117
+     * @return array          $query_args
118
+     */
119
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
120
+
121
+        $query_args = parent::prepare_items_query( $prepared_args );
122
+
123
+        // Retrieve items by type.
124
+        if ( ! in_array( 'any', $request['type'] ) ) {
125
+
126
+            if ( empty( $query_args['meta_query'] ) ) {
127
+                $query_args['meta_query'] = array();
128
+            }
129
+
130
+            $query_args['meta_query'][] = array(
131
+                'key'     => '_wpinv_type',
132
+                'value'   => implode( ',', $request['type'] ),
133
+                'compare' => 'IN',
134
+            );
135
+
136
+        }
137
+
138
+        return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
139
+
140
+    }
141
+
142
+    /**
143
+     * Retrieves a valid list of post statuses.
144
+     *
145
+     * @since 1.0.15
146
+     *
147
+     * @return array A list of registered item statuses.
148
+     */
149
+    public function get_post_statuses() {
150
+        return array( 'draft', 'pending', 'publish' );
151
+    }
74 152
 
75 153
     /**
76
-	 * Retrieves the query params for the items collection.
77
-	 *
78
-	 * @since 1.0.13
79
-	 *
80
-	 * @return array Collection parameters.
81
-	 */
82
-	public function get_collection_params() {
83
-
84
-		$params = array_merge(
85
-
86
-			parent::get_collection_params(),
87
-
88
-        	array(
89
-
90
-				// Item types
91
-				'type'                  => array(
92
-					'description'       => __( 'Type of items to fetch.', 'invoicing' ),
93
-					'type'              => array( 'array', 'string' ),
94
-					'default'           => 'any',
95
-					'validate_callback' => 'rest_validate_request_arg',
96
-					'sanitize_callback' => 'wpinv_parse_list',
97
-					'items'             => array(
98
-						'enum'          => array_merge( array( 'any' ), wpinv_item_types() ),
99
-						'type'          => 'string',
100
-					),
101
-				),
102
-
103
-			)
104
-		);
105
-
106
-		// Filter collection parameters for the items controller.
107
-		return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
108
-
109
-	}
110
-
111
-	/**
112
-	 * Determine the allowed query_vars for a get_items() response and
113
-	 * prepare for WP_Query.
114
-	 *
115
-	 * @param array           $prepared_args Prepared arguments.
116
-	 * @param WP_REST_Request $request Request object.
117
-	 * @return array          $query_args
118
-	 */
119
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
120
-
121
-		$query_args = parent::prepare_items_query( $prepared_args );
122
-
123
-		// Retrieve items by type.
124
-		if ( ! in_array( 'any', $request['type'] ) ) {
125
-
126
-			if ( empty( $query_args['meta_query'] ) ) {
127
-				$query_args['meta_query'] = array();
128
-			}
129
-
130
-			$query_args['meta_query'][] = array(
131
-				'key'     => '_wpinv_type',
132
-				'value'   => implode( ',', $request['type'] ),
133
-				'compare' => 'IN',
134
-			);
135
-
136
-		}
137
-
138
-		return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
139
-
140
-	}
141
-
142
-	/**
143
-	 * Retrieves a valid list of post statuses.
144
-	 *
145
-	 * @since 1.0.15
146
-	 *
147
-	 * @return array A list of registered item statuses.
148
-	 */
149
-	public function get_post_statuses() {
150
-		return array( 'draft', 'pending', 'publish' );
151
-	}
152
-
153
-	/**
154
-	 * Checks if a key should be included in a response.
155
-	 *
156
-	 * @since  1.0.19
157
-	 * @param  WPInv_Item   $item  Item object.
158
-	 * @param  string       $field_key The key to check for.
159
-	 * @return bool
160
-	 */
161
-	public function object_supports_field( $item, $field_key ) {
162
-
163
-		if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
164
-			return false;
165
-		}
166
-
167
-		foreach( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
168
-
169
-			if ( $key == $field_key && ! $item->is_recurring() ) {
170
-				return false;
171
-			}
172
-
173
-		}
174
-
175
-		foreach( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
176
-
177
-			if ( $key == $field_key && ! $item->has_free_trial() ) {
178
-				return false;
179
-			}
180
-
181
-		}
154
+     * Checks if a key should be included in a response.
155
+     *
156
+     * @since  1.0.19
157
+     * @param  WPInv_Item   $item  Item object.
158
+     * @param  string       $field_key The key to check for.
159
+     * @return bool
160
+     */
161
+    public function object_supports_field( $item, $field_key ) {
162
+
163
+        if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
164
+            return false;
165
+        }
166
+
167
+        foreach( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
168
+
169
+            if ( $key == $field_key && ! $item->is_recurring() ) {
170
+                return false;
171
+            }
172
+
173
+        }
174
+
175
+        foreach( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
176
+
177
+            if ( $key == $field_key && ! $item->has_free_trial() ) {
178
+                return false;
179
+            }
180
+
181
+        }
182 182
 
183
-		return parent::object_supports_field( $item, $field_key );
184
-	}
183
+        return parent::object_supports_field( $item, $field_key );
184
+    }
185 185
 
186 186
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API items controller class.
@@ -42,9 +42,9 @@  discard block
 block discarded – undo
42 42
 	 *
43 43
 	 * @see register_rest_route()
44 44
 	 */
45
-	public function register_namespace_routes( $namespace ) {
45
+	public function register_namespace_routes($namespace) {
46 46
 
47
-		parent::register_namespace_routes( $namespace );
47
+		parent::register_namespace_routes($namespace);
48 48
 
49 49
 		register_rest_route(
50 50
 			$this->namespace,
@@ -52,8 +52,8 @@  discard block
 block discarded – undo
52 52
 			array(
53 53
 				array(
54 54
 					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_item_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
55
+					'callback'            => array($this, 'get_item_types'),
56
+					'permission_callback' => array($this, 'get_items_permissions_check'),
57 57
 				),
58 58
 			)
59 59
 		);
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70 70
 	 */
71 71
 	public function get_item_types() {
72
-		return rest_ensure_response( wpinv_get_item_types() );
72
+		return rest_ensure_response(wpinv_get_item_types());
73 73
 	}
74 74
 
75 75
     /**
@@ -89,13 +89,13 @@  discard block
 block discarded – undo
89 89
 
90 90
 				// Item types
91 91
 				'type'                  => array(
92
-					'description'       => __( 'Type of items to fetch.', 'invoicing' ),
93
-					'type'              => array( 'array', 'string' ),
92
+					'description'       => __('Type of items to fetch.', 'invoicing'),
93
+					'type'              => array('array', 'string'),
94 94
 					'default'           => 'any',
95 95
 					'validate_callback' => 'rest_validate_request_arg',
96 96
 					'sanitize_callback' => 'wpinv_parse_list',
97 97
 					'items'             => array(
98
-						'enum'          => array_merge( array( 'any' ), wpinv_item_types() ),
98
+						'enum'          => array_merge(array('any'), wpinv_item_types()),
99 99
 						'type'          => 'string',
100 100
 					),
101 101
 				),
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
 		);
105 105
 
106 106
 		// Filter collection parameters for the items controller.
107
-		return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
107
+		return apply_filters('getpaid_rest_items_collection_params', $params, $this);
108 108
 
109 109
 	}
110 110
 
@@ -116,26 +116,26 @@  discard block
 block discarded – undo
116 116
 	 * @param WP_REST_Request $request Request object.
117 117
 	 * @return array          $query_args
118 118
 	 */
119
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
119
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
120 120
 
121
-		$query_args = parent::prepare_items_query( $prepared_args );
121
+		$query_args = parent::prepare_items_query($prepared_args);
122 122
 
123 123
 		// Retrieve items by type.
124
-		if ( ! in_array( 'any', $request['type'] ) ) {
124
+		if (!in_array('any', $request['type'])) {
125 125
 
126
-			if ( empty( $query_args['meta_query'] ) ) {
126
+			if (empty($query_args['meta_query'])) {
127 127
 				$query_args['meta_query'] = array();
128 128
 			}
129 129
 
130 130
 			$query_args['meta_query'][] = array(
131 131
 				'key'     => '_wpinv_type',
132
-				'value'   => implode( ',', $request['type'] ),
132
+				'value'   => implode(',', $request['type']),
133 133
 				'compare' => 'IN',
134 134
 			);
135 135
 
136 136
 		}
137 137
 
138
-		return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
138
+		return apply_filters('getpaid_rest_items_prepare_items_query', $query_args, $request, $this);
139 139
 
140 140
 	}
141 141
 
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 	 * @return array A list of registered item statuses.
148 148
 	 */
149 149
 	public function get_post_statuses() {
150
-		return array( 'draft', 'pending', 'publish' );
150
+		return array('draft', 'pending', 'publish');
151 151
 	}
152 152
 
153 153
 	/**
@@ -158,29 +158,29 @@  discard block
 block discarded – undo
158 158
 	 * @param  string       $field_key The key to check for.
159 159
 	 * @return bool
160 160
 	 */
161
-	public function object_supports_field( $item, $field_key ) {
161
+	public function object_supports_field($item, $field_key) {
162 162
 
163
-		if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
163
+		if ('minimum_price' == $field_key && !$item->user_can_set_their_price()) {
164 164
 			return false;
165 165
 		}
166 166
 
167
-		foreach( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
167
+		foreach (wpinv_parse_list('initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date') as $key) {
168 168
 
169
-			if ( $key == $field_key && ! $item->is_recurring() ) {
169
+			if ($key == $field_key && !$item->is_recurring()) {
170 170
 				return false;
171 171
 			}
172 172
 
173 173
 		}
174 174
 
175
-		foreach( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
175
+		foreach (wpinv_parse_list('trial_period trial_interval') as $key) {
176 176
 
177
-			if ( $key == $field_key && ! $item->has_free_trial() ) {
177
+			if ($key == $field_key && !$item->has_free_trial()) {
178 178
 				return false;
179 179
 			}
180 180
 
181 181
 		}
182 182
 
183
-		return parent::object_supports_field( $item, $field_key );
183
+		return parent::object_supports_field($item, $field_key);
184 184
 	}
185 185
 
186 186
 }
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-discounts-controller.php 2 patches
Indentation   +131 added lines, -131 removed lines patch added patch discarded remove patch
@@ -15,138 +15,138 @@
 block discarded – undo
15 15
 class WPInv_REST_Discounts_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_discount';
23
-
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'discounts';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Discount';
37
-
38
-	/**
39
-	 * Registers the routes for the objects of the controller.
40
-	 *
41
-	 * @since 1.0.19
42
-	 *
43
-	 * @see register_rest_route()
44
-	 */
45
-	public function register_namespace_routes( $namespace ) {
46
-
47
-		parent::register_namespace_routes( $namespace );
48
-
49
-		register_rest_route(
50
-			$this->namespace,
51
-			'/' . $this->rest_base . '/discount-types',
52
-			array(
53
-				array(
54
-					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_discount_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
-				),
58
-			)
59
-		);
60
-
61
-	}
62
-
63
-	/**
64
-	 * Handles rest requests for discount types.
65
-	 *
66
-	 * @since 1.0.13
67
-	 *
68
-	 *
69
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
-	 */
71
-	public function get_discount_types() {
72
-		return rest_ensure_response( wpinv_get_discount_types() );
73
-	}
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_discount';
74 23
 
75 24
     /**
76
-	 * Retrieves the query params for the discount collection.
77
-	 *
78
-	 * @since 1.0.13
79
-	 *
80
-	 * @return array Collection parameters.
81
-	 */
82
-	public function get_collection_params() {
83
-
84
-		$params = array_merge(
85
-
86
-			parent::get_collection_params(),
87
-
88
-        	array(
89
-
90
-				// Discount types
91
-				'type'                  => array(
92
-					'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
93
-					'type'              => array( 'array', 'string' ),
94
-					'default'           => 'any',
95
-					'validate_callback' => 'rest_validate_request_arg',
96
-					'sanitize_callback' => 'wpinv_parse_list',
97
-					'items'             => array(
98
-						'enum'          => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
99
-						'type'          => 'string',
100
-					),
101
-				),
102
-
103
-			)
104
-		);
105
-
106
-		// Filter collection parameters for the discounts controller.
107
-		return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
108
-	}
109
-
110
-	/**
111
-	 * Determine the allowed query_vars for a get_items() response and
112
-	 * prepare for WP_Query.
113
-	 *
114
-	 * @param array           $prepared_args Prepared arguments.
115
-	 * @param WP_REST_Request $request Request object.
116
-	 * @return array          $query_args
117
-	 */
118
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
119
-
120
-		$query_args = parent::prepare_items_query( $prepared_args );
121
-
122
-		// Retrieve items by type.
123
-		if ( ! in_array( 'any', $request['type'] ) ) {
124
-
125
-			if ( empty( $query_args['meta_query'] ) ) {
126
-				$query_args['meta_query'] = array();
127
-			}
128
-
129
-			$query_args['meta_query'][] = array(
130
-				'key'     => '_wpi_discount_type',
131
-				'value'   => implode( ',', $request['type'] ),
132
-				'compare' => 'IN',
133
-			);
134
-
135
-		}
136
-
137
-		return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
138
-
139
-	}
140
-
141
-	/**
142
-	 * Retrieves a valid list of post statuses.
143
-	 *
144
-	 * @since 1.0.15
145
-	 *
146
-	 * @return array A list of registered item statuses.
147
-	 */
148
-	public function get_post_statuses() {
149
-		return array( 'publish', 'pending', 'draft', 'expired' );
150
-	}
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'discounts';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Discount';
37
+
38
+    /**
39
+     * Registers the routes for the objects of the controller.
40
+     *
41
+     * @since 1.0.19
42
+     *
43
+     * @see register_rest_route()
44
+     */
45
+    public function register_namespace_routes( $namespace ) {
46
+
47
+        parent::register_namespace_routes( $namespace );
48
+
49
+        register_rest_route(
50
+            $this->namespace,
51
+            '/' . $this->rest_base . '/discount-types',
52
+            array(
53
+                array(
54
+                    'methods'             => WP_REST_Server::READABLE,
55
+                    'callback'            => array( $this, 'get_discount_types' ),
56
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
+                ),
58
+            )
59
+        );
60
+
61
+    }
62
+
63
+    /**
64
+     * Handles rest requests for discount types.
65
+     *
66
+     * @since 1.0.13
67
+     *
68
+     *
69
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
+     */
71
+    public function get_discount_types() {
72
+        return rest_ensure_response( wpinv_get_discount_types() );
73
+    }
74
+
75
+    /**
76
+     * Retrieves the query params for the discount collection.
77
+     *
78
+     * @since 1.0.13
79
+     *
80
+     * @return array Collection parameters.
81
+     */
82
+    public function get_collection_params() {
83
+
84
+        $params = array_merge(
85
+
86
+            parent::get_collection_params(),
87
+
88
+            array(
89
+
90
+                // Discount types
91
+                'type'                  => array(
92
+                    'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
93
+                    'type'              => array( 'array', 'string' ),
94
+                    'default'           => 'any',
95
+                    'validate_callback' => 'rest_validate_request_arg',
96
+                    'sanitize_callback' => 'wpinv_parse_list',
97
+                    'items'             => array(
98
+                        'enum'          => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
99
+                        'type'          => 'string',
100
+                    ),
101
+                ),
102
+
103
+            )
104
+        );
105
+
106
+        // Filter collection parameters for the discounts controller.
107
+        return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
108
+    }
109
+
110
+    /**
111
+     * Determine the allowed query_vars for a get_items() response and
112
+     * prepare for WP_Query.
113
+     *
114
+     * @param array           $prepared_args Prepared arguments.
115
+     * @param WP_REST_Request $request Request object.
116
+     * @return array          $query_args
117
+     */
118
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
119
+
120
+        $query_args = parent::prepare_items_query( $prepared_args );
121
+
122
+        // Retrieve items by type.
123
+        if ( ! in_array( 'any', $request['type'] ) ) {
124
+
125
+            if ( empty( $query_args['meta_query'] ) ) {
126
+                $query_args['meta_query'] = array();
127
+            }
128
+
129
+            $query_args['meta_query'][] = array(
130
+                'key'     => '_wpi_discount_type',
131
+                'value'   => implode( ',', $request['type'] ),
132
+                'compare' => 'IN',
133
+            );
134
+
135
+        }
136
+
137
+        return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
138
+
139
+    }
140
+
141
+    /**
142
+     * Retrieves a valid list of post statuses.
143
+     *
144
+     * @since 1.0.15
145
+     *
146
+     * @return array A list of registered item statuses.
147
+     */
148
+    public function get_post_statuses() {
149
+        return array( 'publish', 'pending', 'draft', 'expired' );
150
+    }
151 151
 
152 152
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API discounts controller class.
@@ -42,9 +42,9 @@  discard block
 block discarded – undo
42 42
 	 *
43 43
 	 * @see register_rest_route()
44 44
 	 */
45
-	public function register_namespace_routes( $namespace ) {
45
+	public function register_namespace_routes($namespace) {
46 46
 
47
-		parent::register_namespace_routes( $namespace );
47
+		parent::register_namespace_routes($namespace);
48 48
 
49 49
 		register_rest_route(
50 50
 			$this->namespace,
@@ -52,8 +52,8 @@  discard block
 block discarded – undo
52 52
 			array(
53 53
 				array(
54 54
 					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_discount_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
55
+					'callback'            => array($this, 'get_discount_types'),
56
+					'permission_callback' => array($this, 'get_items_permissions_check'),
57 57
 				),
58 58
 			)
59 59
 		);
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70 70
 	 */
71 71
 	public function get_discount_types() {
72
-		return rest_ensure_response( wpinv_get_discount_types() );
72
+		return rest_ensure_response(wpinv_get_discount_types());
73 73
 	}
74 74
 
75 75
     /**
@@ -89,13 +89,13 @@  discard block
 block discarded – undo
89 89
 
90 90
 				// Discount types
91 91
 				'type'                  => array(
92
-					'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
93
-					'type'              => array( 'array', 'string' ),
92
+					'description'       => __('Type of discounts to fetch.', 'invoicing'),
93
+					'type'              => array('array', 'string'),
94 94
 					'default'           => 'any',
95 95
 					'validate_callback' => 'rest_validate_request_arg',
96 96
 					'sanitize_callback' => 'wpinv_parse_list',
97 97
 					'items'             => array(
98
-						'enum'          => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
98
+						'enum'          => array_merge(array('any'), array_keys(wpinv_get_discount_types())),
99 99
 						'type'          => 'string',
100 100
 					),
101 101
 				),
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
 		);
105 105
 
106 106
 		// Filter collection parameters for the discounts controller.
107
-		return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
107
+		return apply_filters('getpaid_rest_discounts_collection_params', $params, $this);
108 108
 	}
109 109
 
110 110
 	/**
@@ -115,26 +115,26 @@  discard block
 block discarded – undo
115 115
 	 * @param WP_REST_Request $request Request object.
116 116
 	 * @return array          $query_args
117 117
 	 */
118
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
118
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
119 119
 
120
-		$query_args = parent::prepare_items_query( $prepared_args );
120
+		$query_args = parent::prepare_items_query($prepared_args);
121 121
 
122 122
 		// Retrieve items by type.
123
-		if ( ! in_array( 'any', $request['type'] ) ) {
123
+		if (!in_array('any', $request['type'])) {
124 124
 
125
-			if ( empty( $query_args['meta_query'] ) ) {
125
+			if (empty($query_args['meta_query'])) {
126 126
 				$query_args['meta_query'] = array();
127 127
 			}
128 128
 
129 129
 			$query_args['meta_query'][] = array(
130 130
 				'key'     => '_wpi_discount_type',
131
-				'value'   => implode( ',', $request['type'] ),
131
+				'value'   => implode(',', $request['type']),
132 132
 				'compare' => 'IN',
133 133
 			);
134 134
 
135 135
 		}
136 136
 
137
-		return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
137
+		return apply_filters('getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this);
138 138
 
139 139
 	}
140 140
 
@@ -146,7 +146,7 @@  discard block
 block discarded – undo
146 146
 	 * @return array A list of registered item statuses.
147 147
 	 */
148 148
 	public function get_post_statuses() {
149
-		return array( 'publish', 'pending', 'draft', 'expired' );
149
+		return array('publish', 'pending', 'draft', 'expired');
150 150
 	}
151 151
 
152 152
 }
Please login to merge, or discard this patch.
includes/data/discount-schema.php 2 patches
Indentation   +162 added lines, -162 removed lines patch added patch discarded remove patch
@@ -13,168 +13,168 @@
 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
-	),
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 167
 	
168
-	'minimum_total'   => array(
169
-		'description' => __( 'The minimum total needed to use this invoice.', 'invoicing' ),
170
-		'type'        => 'number',
171
-		'context'     => array( 'view', 'edit' ),
172
-	),
173
-
174
-	'maximum_total'   => array(
175
-		'description' => __( 'The maximum total needed to use this invoice.', 'invoicing' ),
176
-		'type'        => 'number',
177
-		'context'     => array( 'view', 'edit' ),
178
-	),
168
+    'minimum_total'   => array(
169
+        'description' => __( 'The minimum total needed to use this invoice.', 'invoicing' ),
170
+        'type'        => 'number',
171
+        'context'     => array( 'view', 'edit' ),
172
+    ),
173
+
174
+    'maximum_total'   => array(
175
+        'description' => __( 'The maximum total needed to use this invoice.', 'invoicing' ),
176
+        'type'        => 'number',
177
+        'context'     => array( 'view', 'edit' ),
178
+    ),
179 179
 
180 180
 );
Please login to merge, or discard this patch.
Spacing   +51 added lines, -51 removed lines patch added patch discarded remove patch
@@ -9,172 +9,172 @@
 block discarded – undo
9 9
  * @version 1.0.19
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 return array(
15 15
 
16 16
 	'id'              => array(
17
-		'description' => __( 'Unique identifier for the discount.', 'invoicing' ),
17
+		'description' => __('Unique identifier for the discount.', 'invoicing'),
18 18
 		'type'        => 'integer',
19
-		'context'     => array( 'view', 'edit', 'embed' ),
19
+		'context'     => array('view', 'edit', 'embed'),
20 20
 		'readonly'    => true,
21 21
 	),
22 22
 
23 23
 	'status'          => array(
24
-		'description' => __( 'A named status for the discount.', 'invoicing' ),
24
+		'description' => __('A named status for the discount.', 'invoicing'),
25 25
 		'type'        => 'string',
26
-		'enum'        => array( 'publish', 'pending', 'draft', 'expired' ),
26
+		'enum'        => array('publish', 'pending', 'draft', 'expired'),
27 27
 		'default'     => 'draft',
28
-		'context'     => array( 'view', 'edit', 'embed' ),
28
+		'context'     => array('view', 'edit', 'embed'),
29 29
 	),
30 30
 
31 31
 	'version'         => array(
32
-		'description' => __( 'Plugin version when the discount was created.', 'invoicing' ),
32
+		'description' => __('Plugin version when the discount was created.', 'invoicing'),
33 33
 		'type'        => 'string',
34
-		'context'     => array( 'view', 'edit', 'embed' ),
34
+		'context'     => array('view', 'edit', 'embed'),
35 35
 		'readonly'    => true,
36 36
 	),
37 37
 
38 38
 	'date_created'    => array(
39
-		'description' => __( "The date the discount was created, in the site's timezone.", 'invoicing' ),
39
+		'description' => __("The date the discount was created, in the site's timezone.", 'invoicing'),
40 40
 		'type'        => 'string',
41
-		'context'     => array( 'view', 'edit', 'embed' ),
41
+		'context'     => array('view', 'edit', 'embed'),
42 42
 	),
43 43
 
44 44
 	'date_created_gmt'    => array(
45
-		'description' => __( 'The GMT date the discount was created.', 'invoicing' ),
45
+		'description' => __('The GMT date the discount was created.', 'invoicing'),
46 46
 		'type'        => 'string',
47
-		'context'     => array( 'view', 'edit', 'embed' ),
47
+		'context'     => array('view', 'edit', 'embed'),
48 48
 		'readonly'    => true,
49 49
 	),
50 50
 
51 51
 	'date_modified'   => array(
52
-		'description' => __( "The date the discount was last modified, in the site's timezone.", 'invoicing' ),
52
+		'description' => __("The date the discount was last modified, in the site's timezone.", 'invoicing'),
53 53
 		'type'        => 'string',
54
-		'context'     => array( 'view', 'edit', 'embed' ),
54
+		'context'     => array('view', 'edit', 'embed'),
55 55
 		'readonly'    => true,
56 56
 	),
57 57
 
58 58
 	'date_modified_gmt'    => array(
59
-		'description' => __( 'The GMT date the discount was last modified.', 'invoicing' ),
59
+		'description' => __('The GMT date the discount was last modified.', 'invoicing'),
60 60
 		'type'        => 'string',
61
-		'context'     => array( 'view', 'edit', 'embed' ),
61
+		'context'     => array('view', 'edit', 'embed'),
62 62
 		'readonly'    => true,
63 63
 	),
64 64
 
65 65
 	'name'			  => array(
66
-		'description' => __( 'The discount name.', 'invoicing' ),
66
+		'description' => __('The discount name.', 'invoicing'),
67 67
 		'type'        => 'string',
68
-		'context'     => array( 'view', 'edit', 'embed' ),
68
+		'context'     => array('view', 'edit', 'embed'),
69 69
 	),
70 70
 
71 71
 	'description'     => array(
72
-		'description' => __( 'A description of what the discount is all about.', 'invoicing' ),
72
+		'description' => __('A description of what the discount is all about.', 'invoicing'),
73 73
 		'type'        => 'string',
74
-		'context'     => array( 'view', 'edit', 'embed' ),
74
+		'context'     => array('view', 'edit', 'embed'),
75 75
 	),
76 76
 
77 77
 	'code'            => array(
78
-		'description' => __( 'The discount code.', 'invoicing' ),
78
+		'description' => __('The discount code.', 'invoicing'),
79 79
 		'type'        => 'string',
80
-		'context'     => array( 'view', 'edit', 'embed' ),
80
+		'context'     => array('view', 'edit', 'embed'),
81 81
 		'required'	  => true,
82 82
 	),
83 83
 
84 84
 	'type'            => array(
85
-		'description' => __( 'The type of discount.', 'invoicing' ),
85
+		'description' => __('The type of discount.', 'invoicing'),
86 86
 		'type'        => 'string',
87
-		'enum'        => array_keys( wpinv_get_discount_types() ),
88
-		'context'     => array( 'view', 'edit', 'embed' ),
87
+		'enum'        => array_keys(wpinv_get_discount_types()),
88
+		'context'     => array('view', 'edit', 'embed'),
89 89
 		'default'	  => 'percent',
90 90
 	),
91 91
 
92 92
 	'amount'        => array(
93
-		'description' => __( 'The discount value.', 'invoicing' ),
93
+		'description' => __('The discount value.', 'invoicing'),
94 94
 		'type'        => 'number',
95
-		'context'     => array( 'view', 'edit', 'embed' ),
95
+		'context'     => array('view', 'edit', 'embed'),
96 96
 		'required'	  => true,
97 97
 	),
98 98
 
99 99
 	'formatted_amount'        => array(
100
-		'description' => __( 'The formatted discount value.', 'invoicing' ),
100
+		'description' => __('The formatted discount value.', 'invoicing'),
101 101
 		'type'        => 'string',
102
-		'context'     => array( 'view', 'edit', 'embed' ),
102
+		'context'     => array('view', 'edit', 'embed'),
103 103
 		'readonly'    => true,
104 104
 	),
105 105
 
106 106
 	'uses'            => array(
107
-		'description' => __( 'The number of times the discount has been used.', 'invoicing' ),
107
+		'description' => __('The number of times the discount has been used.', 'invoicing'),
108 108
 		'type'        => 'integer',
109
-		'context'     => array( 'view', 'embed' ),
109
+		'context'     => array('view', 'embed'),
110 110
 		'readonly'    => true,
111 111
 	),
112 112
 
113 113
 	'max_uses'        => array(
114
-		'description' => __( 'The maximum number of times the discount can be used.', 'invoicing' ),
114
+		'description' => __('The maximum number of times the discount can be used.', 'invoicing'),
115 115
 		'type'        => 'integer',
116
-		'context'     => array( 'view', 'edit' ),
116
+		'context'     => array('view', 'edit'),
117 117
 	),
118 118
 
119 119
 	'usage'           => array(
120
-		'description' => __( "The discount's usage, i.e uses / max uses.", 'invoicing' ),
120
+		'description' => __("The discount's usage, i.e uses / max uses.", 'invoicing'),
121 121
 		'type'        => 'string',
122
-		'context'     => array( 'view', 'embed' ),
122
+		'context'     => array('view', 'embed'),
123 123
 		'readonly'    => true,
124 124
 	),
125 125
 
126 126
 	'is_single_use'   => array(
127
-		'description' => __( 'Whether or not the discount can only be used once per user.', 'invoicing' ),
127
+		'description' => __('Whether or not the discount can only be used once per user.', 'invoicing'),
128 128
 		'type'        => 'boolean',
129
-		'context'     => array( 'view', 'edit' ),
129
+		'context'     => array('view', 'edit'),
130 130
 	),
131 131
 
132 132
 	'is_recurring'   => array(
133
-		'description' => __( 'Whether or not the discount applies to the initial payment only or all recurring payments.', 'invoicing' ),
133
+		'description' => __('Whether or not the discount applies to the initial payment only or all recurring payments.', 'invoicing'),
134 134
 		'type'        => 'boolean',
135
-		'context'     => array( 'view', 'edit' ),
135
+		'context'     => array('view', 'edit'),
136 136
 	),
137 137
 
138 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' ),
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 140
 		'type'        => 'string',
141
-		'context'     => array( 'view', 'edit' ),
141
+		'context'     => array('view', 'edit'),
142 142
 	),
143 143
 
144 144
 	'end_date'        => array(
145
-		'description' => __( 'The expiration date for the discount.', 'invoicing' ),
145
+		'description' => __('The expiration date for the discount.', 'invoicing'),
146 146
 		'type'        => 'string',
147
-		'context'     => array( 'view', 'edit' ),
147
+		'context'     => array('view', 'edit'),
148 148
 	),
149 149
 
150 150
 	'allowed_items'   => array(
151
-		'description' => __( 'Items which are allowed to use this discount. Leave blank to enable for all items.', 'invoicing' ),
151
+		'description' => __('Items which are allowed to use this discount. Leave blank to enable for all items.', 'invoicing'),
152 152
 		'type'        => 'array',
153
-		'context'     => array( 'view', 'edit' ),
153
+		'context'     => array('view', 'edit'),
154 154
 		'items'       => array(
155 155
 			'type'    => 'integer'
156 156
 		)
157 157
 	),
158 158
 
159 159
 	'excluded_items'  => array(
160
-		'description' => __( 'Items which are NOT allowed to use this discount.', 'invoicing' ),
160
+		'description' => __('Items which are NOT allowed to use this discount.', 'invoicing'),
161 161
 		'type'        => 'array',
162
-		'context'     => array( 'view', 'edit' ),
162
+		'context'     => array('view', 'edit'),
163 163
 		'items'       => array(
164 164
 			'type'    => 'integer'
165 165
 		)
166 166
 	),
167 167
 	
168 168
 	'minimum_total'   => array(
169
-		'description' => __( 'The minimum total needed to use this invoice.', 'invoicing' ),
169
+		'description' => __('The minimum total needed to use this invoice.', 'invoicing'),
170 170
 		'type'        => 'number',
171
-		'context'     => array( 'view', 'edit' ),
171
+		'context'     => array('view', 'edit'),
172 172
 	),
173 173
 
174 174
 	'maximum_total'   => array(
175
-		'description' => __( 'The maximum total needed to use this invoice.', 'invoicing' ),
175
+		'description' => __('The maximum total needed to use this invoice.', 'invoicing'),
176 176
 		'type'        => 'number',
177
-		'context'     => array( 'view', 'edit' ),
177
+		'context'     => array('view', 'edit'),
178 178
 	),
179 179
 
180 180
 );
Please login to merge, or discard this patch.
includes/class-wpinv-api.php 1 patch
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@  discard block
 block discarded – undo
6 6
  * @since    1.0.19
7 7
  */
8 8
 
9
-defined( 'ABSPATH' ) || exit;
9
+defined('ABSPATH') || exit;
10 10
 
11 11
 /**
12 12
  * The main API class
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
         $this->discounts = new WPInv_REST_Discounts_Controller();
49 49
 
50 50
         // Fires after loading the rest api.
51
-        do_action( 'getpaid_rest_api_loaded', $this );
51
+        do_action('getpaid_rest_api_loaded', $this);
52 52
     }
53 53
 
54 54
 }
Please login to merge, or discard this patch.