Passed
Pull Request — master (#376)
by Brian
106:18
created
includes/class-wpinv-discount.php 1 patch
Indentation   +1312 added lines, -1312 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,445 +294,445 @@  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
-	}
499
-
500
-	function wpinv_format_discount_rate( $type, $amount ) {
501
-		if ( $type == 'flat' ) {
502
-			$rate = wpinv_price( wpinv_format_amount( $amount ) );
503
-		} else {
504
-			$rate = $amount . '%';
505
-		}
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
+
500
+    function wpinv_format_discount_rate( $type, $amount ) {
501
+        if ( $type == 'flat' ) {
502
+            $rate = wpinv_price( wpinv_format_amount( $amount ) );
503
+        } else {
504
+            $rate = $amount . '%';
505
+        }
506 506
 	
507
-		return apply_filters( 'wpinv_format_discount_rate', $rate, $type, $amount );
508
-	}
507
+        return apply_filters( 'wpinv_format_discount_rate', $rate, $type, $amount );
508
+    }
509 509
 	
510
-	/**
511
-	 * Get the discount's start date.
512
-	 *
513
-	 * @since 1.0.19
514
-	 * @param  string $context View or edit context.
515
-	 * @return string
516
-	 */
517
-	public function get_start( $context = 'view' ) {
518
-		return $this->get_prop( 'start', $context );
519
-	}
510
+    /**
511
+     * Get the discount's start date.
512
+     *
513
+     * @since 1.0.19
514
+     * @param  string $context View or edit context.
515
+     * @return string
516
+     */
517
+    public function get_start( $context = 'view' ) {
518
+        return $this->get_prop( 'start', $context );
519
+    }
520 520
 	
521
-	/**
522
-	 * Alias for self::get_start().
523
-	 *
524
-	 * @since 1.0.19
525
-	 * @param  string $context View or edit context.
526
-	 * @return string
527
-	 */
528
-	public function get_start_date( $context = 'view' ) {
529
-		return $this->get_start( $context );
530
-	}
521
+    /**
522
+     * Alias for self::get_start().
523
+     *
524
+     * @since 1.0.19
525
+     * @param  string $context View or edit context.
526
+     * @return string
527
+     */
528
+    public function get_start_date( $context = 'view' ) {
529
+        return $this->get_start( $context );
530
+    }
531 531
 	
532
-	/**
533
-	 * Get the discount's expiration date.
534
-	 *
535
-	 * @since 1.0.19
536
-	 * @param  string $context View or edit context.
537
-	 * @return string
538
-	 */
539
-	public function get_expiration( $context = 'view' ) {
540
-		return $this->get_prop( 'expiration', $context );
541
-	}
532
+    /**
533
+     * Get the discount's expiration date.
534
+     *
535
+     * @since 1.0.19
536
+     * @param  string $context View or edit context.
537
+     * @return string
538
+     */
539
+    public function get_expiration( $context = 'view' ) {
540
+        return $this->get_prop( 'expiration', $context );
541
+    }
542 542
 	
543
-	/**
544
-	 * Alias for self::get_expiration().
545
-	 *
546
-	 * @since 1.0.19
547
-	 * @param  string $context View or edit context.
548
-	 * @return string
549
-	 */
550
-	public function get_expiration_date( $context = 'view' ) {
551
-		return $this->get_expiration( $context );
552
-	}
553
-
554
-	/**
555
-	 * Alias for self::get_expiration().
556
-	 *
557
-	 * @since 1.0.19
558
-	 * @param  string $context View or edit context.
559
-	 * @return string
560
-	 */
561
-	public function get_end_date( $context = 'view' ) {
562
-		return $this->get_expiration( $context );
563
-	}
543
+    /**
544
+     * Alias for self::get_expiration().
545
+     *
546
+     * @since 1.0.19
547
+     * @param  string $context View or edit context.
548
+     * @return string
549
+     */
550
+    public function get_expiration_date( $context = 'view' ) {
551
+        return $this->get_expiration( $context );
552
+    }
553
+
554
+    /**
555
+     * Alias for self::get_expiration().
556
+     *
557
+     * @since 1.0.19
558
+     * @param  string $context View or edit context.
559
+     * @return string
560
+     */
561
+    public function get_end_date( $context = 'view' ) {
562
+        return $this->get_expiration( $context );
563
+    }
564 564
 	
565
-	/**
566
-	 * Get the discount's type.
567
-	 *
568
-	 * @since 1.0.19
569
-	 * @param  string $context View or edit context.
570
-	 * @return string
571
-	 */
572
-	public function get_type( $context = 'view' ) {
573
-		return $this->get_prop( 'type', $context );
574
-	}
575
-
576
-	/**
577
-	 * Get the number of times a discount has been used.
578
-	 *
579
-	 * @since 1.0.19
580
-	 * @param  string $context View or edit context.
581
-	 * @return int
582
-	 */
583
-	public function get_uses( $context = 'view' ) {
584
-		return (int) $this->get_prop( 'uses', $context );
585
-	}
586
-
587
-	/**
588
-	 * Get the discount's usage, i.e uses / max uses.
589
-	 *
590
-	 * @since 1.0.19
591
-	 * @return string
592
-	 */
593
-	public function get_usage() {
594
-
595
-		if ( ! $this->has_limit() ) {
596
-			return $this->get_uses() . ' / ' . ' &infin;';
597
-		}
598
-
599
-		return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
600
-
601
-	}
602
-
603
-	/**
604
-	 * Get the maximum number of time a discount can be used.
605
-	 *
606
-	 * @since 1.0.19
607
-	 * @param  string $context View or edit context.
608
-	 * @return int
609
-	 */
610
-	public function get_max_uses( $context = 'view' ) {
611
-		$max_uses = $this->get_prop( 'max_uses', $context );
612
-		return empty( $max_uses ) ? null : $max_uses;
613
-	}
614
-
615
-	/**
616
-	 * Checks if this is a single use discount or not.
617
-	 *
618
-	 * @since 1.0.19
619
-	 * @param  string $context View or edit context.
620
-	 * @return bool
621
-	 */
622
-	public function get_is_single_use( $context = 'view' ) {
623
-		return $this->get_prop( 'is_single_use', $context );
624
-	}
625
-
626
-	/**
627
-	 * Get the items that can be used with this discount.
628
-	 *
629
-	 * @since 1.0.19
630
-	 * @param  string $context View or edit context.
631
-	 * @return array
632
-	 */
633
-	public function get_items( $context = 'view' ) {
634
-		return wpinv_parse_list( $this->get_prop( 'items', $context ) );
635
-	}
636
-
637
-	/**
638
-	 * Alias for self::get_items().
639
-	 *
640
-	 * @since 1.0.19
641
-	 * @param  string $context View or edit context.
642
-	 * @return array
643
-	 */
644
-	public function get_allowed_items( $context = 'view' ) {
645
-		return $this->get_items( $context );
646
-	}
647
-
648
-	/**
649
-	 * Get the items that are not allowed to use this discount.
650
-	 *
651
-	 * @since 1.0.19
652
-	 * @param  string $context View or edit context.
653
-	 * @return array
654
-	 */
655
-	public function get_excluded_items( $context = 'view' ) {
656
-		return wpinv_parse_list( $this->get_prop( 'excluded_items', $context ) );
657
-	}
658
-
659
-	/**
660
-	 * Checks if this is a recurring discount or not.
661
-	 *
662
-	 * @since 1.0.19
663
-	 * @param  string $context View or edit context.
664
-	 * @return int|string|bool
665
-	 */
666
-	public function get_is_recurring( $context = 'view' ) {
667
-		return $this->get_prop( 'is_recurring', $context );
668
-	}
669
-
670
-	/**
671
-	 * Get's the minimum total amount allowed for this discount.
672
-	 *
673
-	 * @since 1.0.19
674
-	 * @param  string $context View or edit context.
675
-	 * @return float
676
-	 */
677
-	public function get_min_total( $context = 'view' ) {
678
-		$minimum = $this->get_prop( 'min_total', $context );
679
-		return empty( $minimum ) ? null : $minimum;
680
-	}
681
-
682
-	/**
683
-	 * Alias for self::get_min_total().
684
-	 *
685
-	 * @since 1.0.19
686
-	 * @param  string $context View or edit context.
687
-	 * @return float
688
-	 */
689
-	public function get_minimum_total( $context = 'view' ) {
690
-		return $this->get_min_total( $context );
691
-	}
692
-
693
-	/**
694
-	 * Get's the maximum total amount allowed for this discount.
695
-	 *
696
-	 * @since 1.0.19
697
-	 * @param  string $context View or edit context.
698
-	 * @return float
699
-	 */
700
-	public function get_max_total( $context = 'view' ) {
701
-		$maximum = $this->get_prop( 'max_total', $context );
702
-		return empty( $maximum ) ? null : $maximum;
703
-	}
704
-
705
-	/**
706
-	 * Alias for self::get_max_total().
707
-	 *
708
-	 * @since 1.0.19
709
-	 * @param  string $context View or edit context.
710
-	 * @return float
711
-	 */
712
-	public function get_maximum_total( $context = 'view' ) {
713
-		return $this->get_max_total( $context );
714
-	}
715
-
716
-	/**
565
+    /**
566
+     * Get the discount's type.
567
+     *
568
+     * @since 1.0.19
569
+     * @param  string $context View or edit context.
570
+     * @return string
571
+     */
572
+    public function get_type( $context = 'view' ) {
573
+        return $this->get_prop( 'type', $context );
574
+    }
575
+
576
+    /**
577
+     * Get the number of times a discount has been used.
578
+     *
579
+     * @since 1.0.19
580
+     * @param  string $context View or edit context.
581
+     * @return int
582
+     */
583
+    public function get_uses( $context = 'view' ) {
584
+        return (int) $this->get_prop( 'uses', $context );
585
+    }
586
+
587
+    /**
588
+     * Get the discount's usage, i.e uses / max uses.
589
+     *
590
+     * @since 1.0.19
591
+     * @return string
592
+     */
593
+    public function get_usage() {
594
+
595
+        if ( ! $this->has_limit() ) {
596
+            return $this->get_uses() . ' / ' . ' &infin;';
597
+        }
598
+
599
+        return $this->get_uses() . ' / ' . (int) $this->get_max_uses();
600
+
601
+    }
602
+
603
+    /**
604
+     * Get the maximum number of time a discount can be used.
605
+     *
606
+     * @since 1.0.19
607
+     * @param  string $context View or edit context.
608
+     * @return int
609
+     */
610
+    public function get_max_uses( $context = 'view' ) {
611
+        $max_uses = $this->get_prop( 'max_uses', $context );
612
+        return empty( $max_uses ) ? null : $max_uses;
613
+    }
614
+
615
+    /**
616
+     * Checks if this is a single use discount or not.
617
+     *
618
+     * @since 1.0.19
619
+     * @param  string $context View or edit context.
620
+     * @return bool
621
+     */
622
+    public function get_is_single_use( $context = 'view' ) {
623
+        return $this->get_prop( 'is_single_use', $context );
624
+    }
625
+
626
+    /**
627
+     * Get the items that can be used with this discount.
628
+     *
629
+     * @since 1.0.19
630
+     * @param  string $context View or edit context.
631
+     * @return array
632
+     */
633
+    public function get_items( $context = 'view' ) {
634
+        return wpinv_parse_list( $this->get_prop( 'items', $context ) );
635
+    }
636
+
637
+    /**
638
+     * Alias for self::get_items().
639
+     *
640
+     * @since 1.0.19
641
+     * @param  string $context View or edit context.
642
+     * @return array
643
+     */
644
+    public function get_allowed_items( $context = 'view' ) {
645
+        return $this->get_items( $context );
646
+    }
647
+
648
+    /**
649
+     * Get the items that are not allowed to use this discount.
650
+     *
651
+     * @since 1.0.19
652
+     * @param  string $context View or edit context.
653
+     * @return array
654
+     */
655
+    public function get_excluded_items( $context = 'view' ) {
656
+        return wpinv_parse_list( $this->get_prop( 'excluded_items', $context ) );
657
+    }
658
+
659
+    /**
660
+     * Checks if this is a recurring discount or not.
661
+     *
662
+     * @since 1.0.19
663
+     * @param  string $context View or edit context.
664
+     * @return int|string|bool
665
+     */
666
+    public function get_is_recurring( $context = 'view' ) {
667
+        return $this->get_prop( 'is_recurring', $context );
668
+    }
669
+
670
+    /**
671
+     * Get's the minimum total amount allowed for this discount.
672
+     *
673
+     * @since 1.0.19
674
+     * @param  string $context View or edit context.
675
+     * @return float
676
+     */
677
+    public function get_min_total( $context = 'view' ) {
678
+        $minimum = $this->get_prop( 'min_total', $context );
679
+        return empty( $minimum ) ? null : $minimum;
680
+    }
681
+
682
+    /**
683
+     * Alias for self::get_min_total().
684
+     *
685
+     * @since 1.0.19
686
+     * @param  string $context View or edit context.
687
+     * @return float
688
+     */
689
+    public function get_minimum_total( $context = 'view' ) {
690
+        return $this->get_min_total( $context );
691
+    }
692
+
693
+    /**
694
+     * Get's the maximum total amount allowed for this discount.
695
+     *
696
+     * @since 1.0.19
697
+     * @param  string $context View or edit context.
698
+     * @return float
699
+     */
700
+    public function get_max_total( $context = 'view' ) {
701
+        $maximum = $this->get_prop( 'max_total', $context );
702
+        return empty( $maximum ) ? null : $maximum;
703
+    }
704
+
705
+    /**
706
+     * Alias for self::get_max_total().
707
+     *
708
+     * @since 1.0.19
709
+     * @param  string $context View or edit context.
710
+     * @return float
711
+     */
712
+    public function get_maximum_total( $context = 'view' ) {
713
+        return $this->get_max_total( $context );
714
+    }
715
+
716
+    /**
717 717
      * Margic method for retrieving a property.
718 718
      */
719 719
     public function __get( $key ) {
720 720
         return $this->get( $key );
721 721
     }
722 722
 
723
-	/**
724
-	 * Magic method for accessing discount properties.
725
-	 *
726
-	 * @since 1.0.15
727
-	 * @access public
728
-	 *
729
-	 * @param string $key Discount data to retrieve
730
-	 * @param  string $context View or edit context.
731
-	 * @return mixed Value of the given discount property (if set).
732
-	 */
733
-	public function get( $key, $context = 'view' ) {
723
+    /**
724
+     * Magic method for accessing discount properties.
725
+     *
726
+     * @since 1.0.15
727
+     * @access public
728
+     *
729
+     * @param string $key Discount data to retrieve
730
+     * @param  string $context View or edit context.
731
+     * @return mixed Value of the given discount property (if set).
732
+     */
733
+    public function get( $key, $context = 'view' ) {
734 734
 
735
-		// Check if we have a helper method for that.
735
+        // Check if we have a helper method for that.
736 736
         if ( method_exists( $this, 'get_' . $key ) ) {
737 737
             return call_user_func( array( $this, 'get_' . $key ), $context );
738 738
         }
@@ -744,9 +744,9 @@  discard block
 block discarded – undo
744 744
 
745 745
         return $this->get_prop( $key, $context );
746 746
 
747
-	}
747
+    }
748 748
 
749
-	/*
749
+    /*
750 750
 	|--------------------------------------------------------------------------
751 751
 	| Setters
752 752
 	|--------------------------------------------------------------------------
@@ -756,41 +756,41 @@  discard block
 block discarded – undo
756 756
 	| object.
757 757
 	*/
758 758
 	
759
-	/**
760
-	 * Sets discount status.
761
-	 *
762
-	 * @since 1.0.19
763
-	 * @param  string $status New status.
764
-	 * @return array details of change.
765
-	 */
766
-	public function set_status( $status ) {
759
+    /**
760
+     * Sets discount status.
761
+     *
762
+     * @since 1.0.19
763
+     * @param  string $status New status.
764
+     * @return array details of change.
765
+     */
766
+    public function set_status( $status ) {
767 767
         $old_status = $this->get_status();
768 768
 
769 769
         $this->set_prop( 'status', $status );
770 770
 
771
-		return array(
772
-			'from' => $old_status,
773
-			'to'   => $status,
774
-		);
771
+        return array(
772
+            'from' => $old_status,
773
+            'to'   => $status,
774
+        );
775 775
     }
776 776
 
777 777
     /**
778
-	 * Set plugin version when the discount was created.
779
-	 *
780
-	 * @since 1.0.19
781
-	 */
782
-	public function set_version( $value ) {
783
-		$this->set_prop( 'version', $value );
778
+     * Set plugin version when the discount was created.
779
+     *
780
+     * @since 1.0.19
781
+     */
782
+    public function set_version( $value ) {
783
+        $this->set_prop( 'version', $value );
784 784
     }
785 785
 
786 786
     /**
787
-	 * Set date when the discount was created.
788
-	 *
789
-	 * @since 1.0.19
790
-	 * @param string $value Value to set.
787
+     * Set date when the discount was created.
788
+     *
789
+     * @since 1.0.19
790
+     * @param string $value Value to set.
791 791
      * @return bool Whether or not the date was set.
792
-	 */
793
-	public function set_date_created( $value ) {
792
+     */
793
+    public function set_date_created( $value ) {
794 794
         $date = strtotime( $value );
795 795
 
796 796
         if ( $date ) {
@@ -803,13 +803,13 @@  discard block
 block discarded – undo
803 803
     }
804 804
 
805 805
     /**
806
-	 * Set date when the discount was last modified.
807
-	 *
808
-	 * @since 1.0.19
809
-	 * @param string $value Value to set.
806
+     * Set date when the discount was last modified.
807
+     *
808
+     * @since 1.0.19
809
+     * @param string $value Value to set.
810 810
      * @return bool Whether or not the date was set.
811
-	 */
812
-	public function set_date_modified( $value ) {
811
+     */
812
+    public function set_date_modified( $value ) {
813 813
         $date = strtotime( $value );
814 814
 
815 815
         if ( $date ) {
@@ -822,347 +822,347 @@  discard block
 block discarded – undo
822 822
     }
823 823
 
824 824
     /**
825
-	 * Set the discount name.
826
-	 *
827
-	 * @since 1.0.19
828
-	 * @param  string $value New name.
829
-	 */
830
-	public function set_name( $value ) {
825
+     * Set the discount name.
826
+     *
827
+     * @since 1.0.19
828
+     * @param  string $value New name.
829
+     */
830
+    public function set_name( $value ) {
831 831
         $name = sanitize_text_field( $value );
832
-		$this->set_prop( 'name', $name );
832
+        $this->set_prop( 'name', $name );
833 833
     }
834 834
 
835 835
     /**
836
-	 * Alias of self::set_name().
837
-	 *
838
-	 * @since 1.0.19
839
-	 * @param  string $value New name.
840
-	 */
841
-	public function set_title( $value ) {
842
-		$this->set_name( $value );
836
+     * Alias of self::set_name().
837
+     *
838
+     * @since 1.0.19
839
+     * @param  string $value New name.
840
+     */
841
+    public function set_title( $value ) {
842
+        $this->set_name( $value );
843 843
     }
844 844
 
845 845
     /**
846
-	 * Set the discount description.
847
-	 *
848
-	 * @since 1.0.19
849
-	 * @param  string $value New description.
850
-	 */
851
-	public function set_description( $value ) {
846
+     * Set the discount description.
847
+     *
848
+     * @since 1.0.19
849
+     * @param  string $value New description.
850
+     */
851
+    public function set_description( $value ) {
852 852
         $description = wp_kses_post( $value );
853
-		return $this->set_prop( 'description', $description );
853
+        return $this->set_prop( 'description', $description );
854 854
     }
855 855
 
856 856
     /**
857
-	 * Alias of self::set_description().
858
-	 *
859
-	 * @since 1.0.19
860
-	 * @param  string $value New description.
861
-	 */
862
-	public function set_excerpt( $value ) {
863
-		$this->set_description( $value );
857
+     * Alias of self::set_description().
858
+     *
859
+     * @since 1.0.19
860
+     * @param  string $value New description.
861
+     */
862
+    public function set_excerpt( $value ) {
863
+        $this->set_description( $value );
864 864
     }
865 865
 
866 866
     /**
867
-	 * Alias of self::set_description().
868
-	 *
869
-	 * @since 1.0.19
870
-	 * @param  string $value New description.
871
-	 */
872
-	public function set_summary( $value ) {
873
-		$this->set_description( $value );
867
+     * Alias of self::set_description().
868
+     *
869
+     * @since 1.0.19
870
+     * @param  string $value New description.
871
+     */
872
+    public function set_summary( $value ) {
873
+        $this->set_description( $value );
874 874
     }
875 875
 
876 876
     /**
877
-	 * Set the owner of the discount.
878
-	 *
879
-	 * @since 1.0.19
880
-	 * @param  int $value New author.
881
-	 */
882
-	public function set_author( $value ) {
883
-		$this->set_prop( 'author', (int) $value );
884
-	}
877
+     * Set the owner of the discount.
878
+     *
879
+     * @since 1.0.19
880
+     * @param  int $value New author.
881
+     */
882
+    public function set_author( $value ) {
883
+        $this->set_prop( 'author', (int) $value );
884
+    }
885 885
 	
886
-	/**
887
-	 * Sets the discount code.
888
-	 *
889
-	 * @since 1.0.19
890
-	 * @param string $value New discount code.
891
-	 */
892
-	public function set_code( $value ) {
893
-		$code = sanitize_text_field( $value );
894
-		$this->set_prop( 'code', $code );
895
-	}
886
+    /**
887
+     * Sets the discount code.
888
+     *
889
+     * @since 1.0.19
890
+     * @param string $value New discount code.
891
+     */
892
+    public function set_code( $value ) {
893
+        $code = sanitize_text_field( $value );
894
+        $this->set_prop( 'code', $code );
895
+    }
896 896
 	
897
-	/**
898
-	 * Alias of self::set_code().
899
-	 *
900
-	 * @since 1.0.19
901
-	 * @param string $value New discount code.
902
-	 */
903
-	public function set_coupon_code( $value ) {
904
-		$this->set_code( $value );
905
-	}
897
+    /**
898
+     * Alias of self::set_code().
899
+     *
900
+     * @since 1.0.19
901
+     * @param string $value New discount code.
902
+     */
903
+    public function set_coupon_code( $value ) {
904
+        $this->set_code( $value );
905
+    }
906 906
 	
907
-	/**
908
-	 * Alias of self::set_code().
909
-	 *
910
-	 * @since 1.0.19
911
-	 * @param string $value New discount code.
912
-	 */
913
-	public function set_discount_code( $value ) {
914
-		$this->set_code( $value );
915
-	}
907
+    /**
908
+     * Alias of self::set_code().
909
+     *
910
+     * @since 1.0.19
911
+     * @param string $value New discount code.
912
+     */
913
+    public function set_discount_code( $value ) {
914
+        $this->set_code( $value );
915
+    }
916 916
 	
917
-	/**
918
-	 * Sets the discount amount.
919
-	 *
920
-	 * @since 1.0.19
921
-	 * @param float $value New discount code.
922
-	 */
923
-	public function set_amount( $value ) {
924
-		$amount = floatval( wpinv_sanitize_amount( $value ) );
925
-		$this->set_prop( 'amount', $amount );
926
-	}
927
-
928
-	/**
929
-	 * Sets the discount's start date.
930
-	 *
931
-	 * @since 1.0.19
932
-	 * @param float $value New start date.
933
-	 */
934
-	public function set_start( $value ) {
935
-		$date = strtotime( $value );
936
-
937
-        if ( $date ) {
938
-            $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
917
+    /**
918
+     * Sets the discount amount.
919
+     *
920
+     * @since 1.0.19
921
+     * @param float $value New discount code.
922
+     */
923
+    public function set_amount( $value ) {
924
+        $amount = floatval( wpinv_sanitize_amount( $value ) );
925
+        $this->set_prop( 'amount', $amount );
926
+    }
927
+
928
+    /**
929
+     * Sets the discount's start date.
930
+     *
931
+     * @since 1.0.19
932
+     * @param float $value New start date.
933
+     */
934
+    public function set_start( $value ) {
935
+        $date = strtotime( $value );
936
+
937
+        if ( $date ) {
938
+            $this->set_prop( 'start', date( 'Y-m-d H:i', $date ) );
939 939
             return true;
940
-		}
940
+        }
941 941
 		
942
-		$this->set_prop( 'start', '' );
942
+        $this->set_prop( 'start', '' );
943 943
 
944 944
         return false;
945
-	}
946
-
947
-	/**
948
-	 * Alias of self::set_start().
949
-	 *
950
-	 * @since 1.0.19
951
-	 * @param string $value New start date.
952
-	 */
953
-	public function set_start_date( $value ) {
954
-		$this->set_start( $value );
955
-	}
956
-
957
-	/**
958
-	 * Sets the discount's expiration date.
959
-	 *
960
-	 * @since 1.0.19
961
-	 * @param float $value New expiration date.
962
-	 */
963
-	public function set_expiration( $value ) {
964
-		$date = strtotime( $value );
945
+    }
946
+
947
+    /**
948
+     * Alias of self::set_start().
949
+     *
950
+     * @since 1.0.19
951
+     * @param string $value New start date.
952
+     */
953
+    public function set_start_date( $value ) {
954
+        $this->set_start( $value );
955
+    }
956
+
957
+    /**
958
+     * Sets the discount's expiration date.
959
+     *
960
+     * @since 1.0.19
961
+     * @param float $value New expiration date.
962
+     */
963
+    public function set_expiration( $value ) {
964
+        $date = strtotime( $value );
965 965
 
966 966
         if ( $date ) {
967 967
             $this->set_prop( 'expiration', date( 'Y-m-d H:i', $date ) );
968 968
             return true;
969 969
         }
970 970
 
971
-		$this->set_prop( 'expiration', '' );
971
+        $this->set_prop( 'expiration', '' );
972 972
         return false;
973
-	}
974
-
975
-	/**
976
-	 * Alias of self::set_expiration().
977
-	 *
978
-	 * @since 1.0.19
979
-	 * @param string $value New expiration date.
980
-	 */
981
-	public function set_expiration_date( $value ) {
982
-		$this->set_expiration( $value );
983
-	}
984
-
985
-	/**
986
-	 * Alias of self::set_expiration().
987
-	 *
988
-	 * @since 1.0.19
989
-	 * @param string $value New expiration date.
990
-	 */
991
-	public function set_end_date( $value ) {
992
-		$this->set_expiration( $value );
993
-	}
994
-
995
-	/**
996
-	 * Sets the discount type.
997
-	 *
998
-	 * @since 1.0.19
999
-	 * @param string $value New discount type.
1000
-	 */
1001
-	public function set_type( $value ) {
1002
-		if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
1003
-			$this->set_prop( 'type', sanitize_text_field( $value ) );
1004
-		}
1005
-	}
1006
-
1007
-	/**
1008
-	 * Sets the number of times a discount has been used.
1009
-	 *
1010
-	 * @since 1.0.19
1011
-	 * @param int $value usage count.
1012
-	 */
1013
-	public function set_uses( $value ) {
1014
-
1015
-		$value = (int) $value;
1016
-
1017
-		if ( $value < 0 ) {
1018
-			$value = 0;
1019
-		}
1020
-
1021
-		$this->set_prop( 'uses', (int) $value );
1022
-	}
1023
-
1024
-	/**
1025
-	 * Sets the maximum number of times a discount can be used.
1026
-	 *
1027
-	 * @since 1.0.19
1028
-	 * @param int $value maximum usage count.
1029
-	 */
1030
-	public function set_max_uses( $value ) {
1031
-		$this->set_prop( 'max_uses', absint( $value ) );
1032
-	}
1033
-
1034
-	/**
1035
-	 * Sets if this is a single use discount or not.
1036
-	 *
1037
-	 * @since 1.0.19
1038
-	 * @param int|bool $value is single use.
1039
-	 */
1040
-	public function set_is_single_use( $value ) {
1041
-		$this->set_prop( 'is_single_use', (bool) $value );
1042
-	}
1043
-
1044
-	/**
1045
-	 * Sets the items that can be used with this discount.
1046
-	 *
1047
-	 * @since 1.0.19
1048
-	 * @param array $value items.
1049
-	 */
1050
-	public function set_items( $value ) {
1051
-		$this->set_prop( 'items', wpinv_parse_list( $value ) );
1052
-	}
1053
-
1054
-	/**
1055
-	 * Alias for self::set_items().
1056
-	 *
1057
-	 * @since 1.0.19
1058
-	 * @param array $value items.
1059
-	 */
1060
-	public function set_allowed_items( $value ) {
1061
-		$this->set_items( $value );
1062
-	}
1063
-
1064
-	/**
1065
-	 * Sets the items that can not be used with this discount.
1066
-	 *
1067
-	 * @since 1.0.19
1068
-	 * @param array $value items.
1069
-	 */
1070
-	public function set_excluded_items( $value ) {
1071
-		$this->set_prop( 'excluded_items', wpinv_parse_list( $value ) );
1072
-	}
1073
-
1074
-	/**
1075
-	 * Sets if this is a recurring discounts or not.
1076
-	 *
1077
-	 * @since 1.0.19
1078
-	 * @param int|bool $value is recurring.
1079
-	 */
1080
-	public function set_is_recurring( $value ) {
1081
-		$this->set_prop( 'is_recurring', (bool) $value );
1082
-	}
1083
-
1084
-	/**
1085
-	 * Sets the minimum total that can not be used with this discount.
1086
-	 *
1087
-	 * @since 1.0.19
1088
-	 * @param float $value minimum total.
1089
-	 */
1090
-	public function set_min_total( $value ) {
1091
-		$this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1092
-	}
1093
-
1094
-	/**
1095
-	 * Alias for self::set_min_total().
1096
-	 *
1097
-	 * @since 1.0.19
1098
-	 * @param float $value minimum total.
1099
-	 */
1100
-	public function set_minimum_total( $value ) {
1101
-		$this->set_min_total( $value );
1102
-	}
1103
-
1104
-	/**
1105
-	 * Sets the maximum total that can not be used with this discount.
1106
-	 *
1107
-	 * @since 1.0.19
1108
-	 * @param float $value maximum total.
1109
-	 */
1110
-	public function set_max_total( $value ) {
1111
-		$this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1112
-	}
1113
-
1114
-	/**
1115
-	 * Alias for self::set_max_total().
1116
-	 *
1117
-	 * @since 1.0.19
1118
-	 * @param float $value maximum total.
1119
-	 */
1120
-	public function set_maximum_total( $value ) {
1121
-		$this->set_max_total( $value );
1122
-	}
1123
-
1124
-	/**
1125
-	 * Magic method for setting discount fields.
1126
-	 *
1127
-	 * This method does not update custom fields in the database.
1128
-	 *
1129
-	 * @since 1.0.15
1130
-	 * @access public
1131
-	 *
1132
-	 */
1133
-	public function __set( $key, $value ) {
1134
-
1135
-		if ( 'id' == strtolower( $key ) ) {
1136
-			return $this->set_id( $value );
1137
-		}
1138
-
1139
-		if ( method_exists( $this, "set_$key") ) {
1140
-			call_user_func( array( $this, "set_$key" ), $value );
1141
-		} else {
1142
-			$this->set_prop( $key, $value );
1143
-		}
1144
-
1145
-	}
1146
-
1147
-	/**
1148
-	 * @deprecated
1149
-	 */
1150
-	public function refresh(){}
1151
-
1152
-	/**
1153
-	 * @deprecated
1154
-	 *
1155
-	 */
1156
-	public function update_status( $status = 'publish' ){
1157
-
1158
-		if ( $this->exists() && $this->get_status() != $status ) {
1159
-			$this->set_status( $status );
1160
-			$this->save();
1161
-		}
1162
-
1163
-	}
1164
-
1165
-	/*
973
+    }
974
+
975
+    /**
976
+     * Alias of self::set_expiration().
977
+     *
978
+     * @since 1.0.19
979
+     * @param string $value New expiration date.
980
+     */
981
+    public function set_expiration_date( $value ) {
982
+        $this->set_expiration( $value );
983
+    }
984
+
985
+    /**
986
+     * Alias of self::set_expiration().
987
+     *
988
+     * @since 1.0.19
989
+     * @param string $value New expiration date.
990
+     */
991
+    public function set_end_date( $value ) {
992
+        $this->set_expiration( $value );
993
+    }
994
+
995
+    /**
996
+     * Sets the discount type.
997
+     *
998
+     * @since 1.0.19
999
+     * @param string $value New discount type.
1000
+     */
1001
+    public function set_type( $value ) {
1002
+        if ( $value && array_key_exists( sanitize_text_field( $value ), wpinv_get_discount_types() ) ) {
1003
+            $this->set_prop( 'type', sanitize_text_field( $value ) );
1004
+        }
1005
+    }
1006
+
1007
+    /**
1008
+     * Sets the number of times a discount has been used.
1009
+     *
1010
+     * @since 1.0.19
1011
+     * @param int $value usage count.
1012
+     */
1013
+    public function set_uses( $value ) {
1014
+
1015
+        $value = (int) $value;
1016
+
1017
+        if ( $value < 0 ) {
1018
+            $value = 0;
1019
+        }
1020
+
1021
+        $this->set_prop( 'uses', (int) $value );
1022
+    }
1023
+
1024
+    /**
1025
+     * Sets the maximum number of times a discount can be used.
1026
+     *
1027
+     * @since 1.0.19
1028
+     * @param int $value maximum usage count.
1029
+     */
1030
+    public function set_max_uses( $value ) {
1031
+        $this->set_prop( 'max_uses', absint( $value ) );
1032
+    }
1033
+
1034
+    /**
1035
+     * Sets if this is a single use discount or not.
1036
+     *
1037
+     * @since 1.0.19
1038
+     * @param int|bool $value is single use.
1039
+     */
1040
+    public function set_is_single_use( $value ) {
1041
+        $this->set_prop( 'is_single_use', (bool) $value );
1042
+    }
1043
+
1044
+    /**
1045
+     * Sets the items that can be used with this discount.
1046
+     *
1047
+     * @since 1.0.19
1048
+     * @param array $value items.
1049
+     */
1050
+    public function set_items( $value ) {
1051
+        $this->set_prop( 'items', wpinv_parse_list( $value ) );
1052
+    }
1053
+
1054
+    /**
1055
+     * Alias for self::set_items().
1056
+     *
1057
+     * @since 1.0.19
1058
+     * @param array $value items.
1059
+     */
1060
+    public function set_allowed_items( $value ) {
1061
+        $this->set_items( $value );
1062
+    }
1063
+
1064
+    /**
1065
+     * Sets the items that can not be used with this discount.
1066
+     *
1067
+     * @since 1.0.19
1068
+     * @param array $value items.
1069
+     */
1070
+    public function set_excluded_items( $value ) {
1071
+        $this->set_prop( 'excluded_items', wpinv_parse_list( $value ) );
1072
+    }
1073
+
1074
+    /**
1075
+     * Sets if this is a recurring discounts or not.
1076
+     *
1077
+     * @since 1.0.19
1078
+     * @param int|bool $value is recurring.
1079
+     */
1080
+    public function set_is_recurring( $value ) {
1081
+        $this->set_prop( 'is_recurring', (bool) $value );
1082
+    }
1083
+
1084
+    /**
1085
+     * Sets the minimum total that can not be used with this discount.
1086
+     *
1087
+     * @since 1.0.19
1088
+     * @param float $value minimum total.
1089
+     */
1090
+    public function set_min_total( $value ) {
1091
+        $this->set_prop( 'min_total', (float) wpinv_sanitize_amount( $value ) );
1092
+    }
1093
+
1094
+    /**
1095
+     * Alias for self::set_min_total().
1096
+     *
1097
+     * @since 1.0.19
1098
+     * @param float $value minimum total.
1099
+     */
1100
+    public function set_minimum_total( $value ) {
1101
+        $this->set_min_total( $value );
1102
+    }
1103
+
1104
+    /**
1105
+     * Sets the maximum total that can not be used with this discount.
1106
+     *
1107
+     * @since 1.0.19
1108
+     * @param float $value maximum total.
1109
+     */
1110
+    public function set_max_total( $value ) {
1111
+        $this->set_prop( 'max_total', (float) wpinv_sanitize_amount( $value ) );
1112
+    }
1113
+
1114
+    /**
1115
+     * Alias for self::set_max_total().
1116
+     *
1117
+     * @since 1.0.19
1118
+     * @param float $value maximum total.
1119
+     */
1120
+    public function set_maximum_total( $value ) {
1121
+        $this->set_max_total( $value );
1122
+    }
1123
+
1124
+    /**
1125
+     * Magic method for setting discount fields.
1126
+     *
1127
+     * This method does not update custom fields in the database.
1128
+     *
1129
+     * @since 1.0.15
1130
+     * @access public
1131
+     *
1132
+     */
1133
+    public function __set( $key, $value ) {
1134
+
1135
+        if ( 'id' == strtolower( $key ) ) {
1136
+            return $this->set_id( $value );
1137
+        }
1138
+
1139
+        if ( method_exists( $this, "set_$key") ) {
1140
+            call_user_func( array( $this, "set_$key" ), $value );
1141
+        } else {
1142
+            $this->set_prop( $key, $value );
1143
+        }
1144
+
1145
+    }
1146
+
1147
+    /**
1148
+     * @deprecated
1149
+     */
1150
+    public function refresh(){}
1151
+
1152
+    /**
1153
+     * @deprecated
1154
+     *
1155
+     */
1156
+    public function update_status( $status = 'publish' ){
1157
+
1158
+        if ( $this->exists() && $this->get_status() != $status ) {
1159
+            $this->set_status( $status );
1160
+            $this->save();
1161
+        }
1162
+
1163
+    }
1164
+
1165
+    /*
1166 1166
 	|--------------------------------------------------------------------------
1167 1167
 	| Conditionals
1168 1168
 	|--------------------------------------------------------------------------
@@ -1171,263 +1171,263 @@  discard block
 block discarded – undo
1171 1171
 	|
1172 1172
 	*/
1173 1173
 
1174
-	/**
1175
-	 * Checks whether a discount exists in the database or not
1176
-	 *
1177
-	 * @since 1.0.15
1178
-	 */
1179
-	public function exists(){
1180
-		$id = $this->get_id();
1181
-		return ! empty( $id );
1182
-	}
1183
-
1184
-	/**
1185
-	 * Checks the discount type.
1186
-	 *
1187
-	 *
1188
-	 * @param  string $type the discount type to check against
1189
-	 * @since 1.0.15
1190
-	 * @return bool
1191
-	 */
1192
-	public function is_type( $type ) {
1193
-		return $this->get_type() == $type;
1194
-	}
1195
-
1196
-	/**
1197
-	 * Checks whether the discount is published or not
1198
-	 *
1199
-	 * @since 1.0.15
1200
-	 * @return bool
1201
-	 */
1202
-	public function is_active() {
1203
-		return $this->get_status() == 'publish';
1204
-	}
1205
-
1206
-	/**
1207
-	 * Checks whether the discount has max uses
1208
-	 *
1209
-	 * @since 1.0.15
1210
-	 * @return bool
1211
-	 */
1212
-	public function has_limit() {
1213
-		$limit = $this->get_max_uses();
1214
-		return ! empty( $limit );
1215
-	}
1216
-
1217
-	/**
1218
-	 * Checks whether the discount has ever been used.
1219
-	 *
1220
-	 * @since 1.0.15
1221
-	 * @return bool
1222
-	 */
1223
-	public function has_uses() {
1224
-		return $this->get_uses() > 0;
1225
-	}
1226
-
1227
-	/**
1228
-	 * Checks whether the discount is has exided the usage limit or not
1229
-	 *
1230
-	 * @since 1.0.15
1231
-	 * @return bool
1232
-	 */
1233
-	public function has_exceeded_limit() {
1234
-
1235
-		if ( ! $this->has_limit() || ! $this->has_uses() ) {
1236
-			$exceeded = false ;
1237
-		} else {
1238
-			$exceeded = ! ( (int) $this->get_max_uses() < $this->get_uses() );
1239
-		}
1240
-
1241
-		return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code );
1242
-	}
1243
-
1244
-	/**
1245
-	 * Checks whether the discount has an expiration date.
1246
-	 *
1247
-	 * @since 1.0.15
1248
-	 * @return bool
1249
-	 */
1250
-	public function has_expiration_date() {
1251
-		$date = $this->get_expiration_date();
1252
-		return ! empty( $date );
1253
-	}
1254
-
1255
-	/**
1256
-	 * Checks if the discount is expired
1257
-	 *
1258
-	 * @since 1.0.15
1259
-	 * @return bool
1260
-	 */
1261
-	public function is_expired() {
1262
-		$expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1263
-		return apply_filters( 'wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code );
1264
-	}
1265
-
1266
-	/**
1267
-	 * Checks whether the discount has a start date.
1268
-	 *
1269
-	 * @since 1.0.15
1270
-	 * @return bool
1271
-	 */
1272
-	public function has_start_date() {
1273
-		$date = $this->get_start_date();
1274
-		return ! empty( $date );
1275
-	}
1276
-
1277
-	/**
1278
-	 * Checks the discount start date.
1279
-	 *
1280
-	 * @since 1.0.15
1281
-	 * @return bool
1282
-	 */
1283
-	public function has_started() {
1284
-		$started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1285
-		return apply_filters( 'wpinv_is_discount_started', $started, $this->ID, $this, $this->code );
1286
-	}
1287
-
1288
-	/**
1289
-	 * Checks the discount has allowed items or not.
1290
-	 *
1291
-	 * @since 1.0.15
1292
-	 * @return bool
1293
-	 */
1294
-	public function has_allowed_items() {
1295
-		$allowed_items = $this->get_allowed_items();
1296
-		return empty( $allowed_items );
1297
-	}
1298
-
1299
-	/**
1300
-	 * Checks the discount has excluded items or not.
1301
-	 *
1302
-	 * @since 1.0.15
1303
-	 * @return bool
1304
-	 */
1305
-	public function has_excluded_items() {
1306
-		$excluded_items = $this->get_excluded_items();
1307
-		return empty( $excluded_items );
1308
-	}
1309
-
1310
-	/**
1311
-	 * Check if a discount is valid for a given item id.
1312
-	 *
1313
-	 * @param  int|int[]  $item_ids
1314
-	 * @since 1.0.15
1315
-	 * @return boolean
1316
-	 */
1317
-	public function is_valid_for_items( $item_ids ) {
1318
-
1319
-		$item_ids = array_map( 'intval',  wpinv_parse_list( $item_ids ) );
1320
-		$included = array_intersect( $item_ids, $this->get_allowed_items() );
1321
-		$excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1322
-
1323
-		if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1324
-			return false;
1325
-		}
1326
-
1327
-		if ( $this->has_allowed_items() && empty( $included ) ) {
1328
-			return false;
1329
-		}
1330
-		return true;
1331
-	}
1332
-
1333
-	/**
1334
-	 * Check if a discount is valid for the given amount
1335
-	 *
1336
-	 * @param  float  $amount The amount to check against
1337
-	 * @since 1.0.15
1338
-	 * @return boolean
1339
-	 */
1340
-	public function is_valid_for_amount( $amount ) {
1341
-		return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1342
-	}
1343
-
1344
-	/**
1345
-	 * Checks if the minimum amount is set
1346
-	 *
1347
-	 * @since 1.0.15
1348
-	 * @return boolean
1349
-	 */
1350
-	public function has_minimum_amount() {
1351
-		$minimum = $this->get_minimum_total();
1352
-		return ! empty( $minimum );
1353
-	}
1354
-
1355
-	/**
1356
-	 * Checks if the minimum amount is met
1357
-	 *
1358
-	 * @param  float  $amount The amount to check against
1359
-	 * @since 1.0.15
1360
-	 * @return boolean
1361
-	 */
1362
-	public function is_minimum_amount_met( $amount ) {
1363
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1364
-		$min_met= ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1365
-		return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount );
1366
-	}
1367
-
1368
-	/**
1369
-	 * Checks if the maximum amount is set
1370
-	 *
1371
-	 * @since 1.0.15
1372
-	 * @return boolean
1373
-	 */
1374
-	public function has_maximum_amount() {
1375
-		$maximum = $this->get_maximum_total();
1376
-		return ! empty( $maximum );
1377
-	}
1378
-
1379
-	/**
1380
-	 * Checks if the maximum amount is met
1381
-	 *
1382
-	 * @param  float  $amount The amount to check against
1383
-	 * @since 1.0.15
1384
-	 * @return boolean
1385
-	 */
1386
-	public function is_maximum_amount_met( $amount ) {
1387
-		$amount = floatval( wpinv_sanitize_amount( $amount ) );
1388
-		$max_met= ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1389
-		return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount );
1390
-	}
1391
-
1392
-	/**
1393
-	 * Checks if the discount is recurring.
1394
-	 *
1395
-	 * @since 1.0.15
1396
-	 * @return boolean
1397
-	 */
1398
-	public function is_recurring() {
1399
-		$recurring = $this->get_is_recurring();
1400
-		return ! empty( $recurring );
1401
-	}
1402
-
1403
-	/**
1404
-	 * Checks if the discount is single use.
1405
-	 *
1406
-	 * @since 1.0.15
1407
-	 * @return boolean
1408
-	 */
1409
-	public function is_single_use() {
1410
-		$usage = $this->get_is_single_use();
1411
-		return ! empty( $usage );
1412
-	}
1413
-
1414
-	/**
1415
-	 * Check if a discount is valid for the given user
1416
-	 *
1417
-	 * @param  int|string  $user
1418
-	 * @since 1.0.15
1419
-	 * @return boolean
1420
-	 */
1421
-	public function is_valid_for_user( $user ) {
1422
-		global $wpi_checkout_id;
1423
-
1424
-		// Ensure that the discount is single use.
1425
-		if ( empty( $user ) || ! $this->is_single_use() ) {
1426
-			return true;
1427
-		}
1428
-
1429
-		// Prepare the user id.
1430
-		$user_id = 0;
1174
+    /**
1175
+     * Checks whether a discount exists in the database or not
1176
+     *
1177
+     * @since 1.0.15
1178
+     */
1179
+    public function exists(){
1180
+        $id = $this->get_id();
1181
+        return ! empty( $id );
1182
+    }
1183
+
1184
+    /**
1185
+     * Checks the discount type.
1186
+     *
1187
+     *
1188
+     * @param  string $type the discount type to check against
1189
+     * @since 1.0.15
1190
+     * @return bool
1191
+     */
1192
+    public function is_type( $type ) {
1193
+        return $this->get_type() == $type;
1194
+    }
1195
+
1196
+    /**
1197
+     * Checks whether the discount is published or not
1198
+     *
1199
+     * @since 1.0.15
1200
+     * @return bool
1201
+     */
1202
+    public function is_active() {
1203
+        return $this->get_status() == 'publish';
1204
+    }
1205
+
1206
+    /**
1207
+     * Checks whether the discount has max uses
1208
+     *
1209
+     * @since 1.0.15
1210
+     * @return bool
1211
+     */
1212
+    public function has_limit() {
1213
+        $limit = $this->get_max_uses();
1214
+        return ! empty( $limit );
1215
+    }
1216
+
1217
+    /**
1218
+     * Checks whether the discount has ever been used.
1219
+     *
1220
+     * @since 1.0.15
1221
+     * @return bool
1222
+     */
1223
+    public function has_uses() {
1224
+        return $this->get_uses() > 0;
1225
+    }
1226
+
1227
+    /**
1228
+     * Checks whether the discount is has exided the usage limit or not
1229
+     *
1230
+     * @since 1.0.15
1231
+     * @return bool
1232
+     */
1233
+    public function has_exceeded_limit() {
1234
+
1235
+        if ( ! $this->has_limit() || ! $this->has_uses() ) {
1236
+            $exceeded = false ;
1237
+        } else {
1238
+            $exceeded = ! ( (int) $this->get_max_uses() < $this->get_uses() );
1239
+        }
1240
+
1241
+        return apply_filters( 'wpinv_is_discount_maxed_out', $exceeded, $this->ID, $this, $this->code );
1242
+    }
1243
+
1244
+    /**
1245
+     * Checks whether the discount has an expiration date.
1246
+     *
1247
+     * @since 1.0.15
1248
+     * @return bool
1249
+     */
1250
+    public function has_expiration_date() {
1251
+        $date = $this->get_expiration_date();
1252
+        return ! empty( $date );
1253
+    }
1254
+
1255
+    /**
1256
+     * Checks if the discount is expired
1257
+     *
1258
+     * @since 1.0.15
1259
+     * @return bool
1260
+     */
1261
+    public function is_expired() {
1262
+        $expired = $this->has_expiration_date() ? current_time( 'timestamp' ) > strtotime( $this->get_expiration_date() ) : false;
1263
+        return apply_filters( 'wpinv_is_discount_expired', $expired, $this->ID, $this, $this->code );
1264
+    }
1265
+
1266
+    /**
1267
+     * Checks whether the discount has a start date.
1268
+     *
1269
+     * @since 1.0.15
1270
+     * @return bool
1271
+     */
1272
+    public function has_start_date() {
1273
+        $date = $this->get_start_date();
1274
+        return ! empty( $date );
1275
+    }
1276
+
1277
+    /**
1278
+     * Checks the discount start date.
1279
+     *
1280
+     * @since 1.0.15
1281
+     * @return bool
1282
+     */
1283
+    public function has_started() {
1284
+        $started = $this->has_start_date() ? true : current_time( 'timestamp' ) > strtotime( $this->get_start_date() );
1285
+        return apply_filters( 'wpinv_is_discount_started', $started, $this->ID, $this, $this->code );
1286
+    }
1287
+
1288
+    /**
1289
+     * Checks the discount has allowed items or not.
1290
+     *
1291
+     * @since 1.0.15
1292
+     * @return bool
1293
+     */
1294
+    public function has_allowed_items() {
1295
+        $allowed_items = $this->get_allowed_items();
1296
+        return empty( $allowed_items );
1297
+    }
1298
+
1299
+    /**
1300
+     * Checks the discount has excluded items or not.
1301
+     *
1302
+     * @since 1.0.15
1303
+     * @return bool
1304
+     */
1305
+    public function has_excluded_items() {
1306
+        $excluded_items = $this->get_excluded_items();
1307
+        return empty( $excluded_items );
1308
+    }
1309
+
1310
+    /**
1311
+     * Check if a discount is valid for a given item id.
1312
+     *
1313
+     * @param  int|int[]  $item_ids
1314
+     * @since 1.0.15
1315
+     * @return boolean
1316
+     */
1317
+    public function is_valid_for_items( $item_ids ) {
1318
+
1319
+        $item_ids = array_map( 'intval',  wpinv_parse_list( $item_ids ) );
1320
+        $included = array_intersect( $item_ids, $this->get_allowed_items() );
1321
+        $excluded = array_intersect( $item_ids, $this->get_excluded_items() );
1322
+
1323
+        if ( $this->has_excluded_items() && ! empty( $excluded ) ) {
1324
+            return false;
1325
+        }
1326
+
1327
+        if ( $this->has_allowed_items() && empty( $included ) ) {
1328
+            return false;
1329
+        }
1330
+        return true;
1331
+    }
1332
+
1333
+    /**
1334
+     * Check if a discount is valid for the given amount
1335
+     *
1336
+     * @param  float  $amount The amount to check against
1337
+     * @since 1.0.15
1338
+     * @return boolean
1339
+     */
1340
+    public function is_valid_for_amount( $amount ) {
1341
+        return $this->is_minimum_amount_met( $amount ) && $this->is_maximum_amount_met( $amount );
1342
+    }
1343
+
1344
+    /**
1345
+     * Checks if the minimum amount is set
1346
+     *
1347
+     * @since 1.0.15
1348
+     * @return boolean
1349
+     */
1350
+    public function has_minimum_amount() {
1351
+        $minimum = $this->get_minimum_total();
1352
+        return ! empty( $minimum );
1353
+    }
1354
+
1355
+    /**
1356
+     * Checks if the minimum amount is met
1357
+     *
1358
+     * @param  float  $amount The amount to check against
1359
+     * @since 1.0.15
1360
+     * @return boolean
1361
+     */
1362
+    public function is_minimum_amount_met( $amount ) {
1363
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1364
+        $min_met= ! ( $this->has_minimum_amount() && $amount < floatval( wpinv_sanitize_amount( $this->get_minimum_total() ) ) );
1365
+        return apply_filters( 'wpinv_is_discount_min_met', $min_met, $this->ID, $this, $this->code, $amount );
1366
+    }
1367
+
1368
+    /**
1369
+     * Checks if the maximum amount is set
1370
+     *
1371
+     * @since 1.0.15
1372
+     * @return boolean
1373
+     */
1374
+    public function has_maximum_amount() {
1375
+        $maximum = $this->get_maximum_total();
1376
+        return ! empty( $maximum );
1377
+    }
1378
+
1379
+    /**
1380
+     * Checks if the maximum amount is met
1381
+     *
1382
+     * @param  float  $amount The amount to check against
1383
+     * @since 1.0.15
1384
+     * @return boolean
1385
+     */
1386
+    public function is_maximum_amount_met( $amount ) {
1387
+        $amount = floatval( wpinv_sanitize_amount( $amount ) );
1388
+        $max_met= ! ( $this->has_maximum_amount() && $amount > floatval( wpinv_sanitize_amount( $this->get_maximum_total() ) ) );
1389
+        return apply_filters( 'wpinv_is_discount_max_met', $max_met, $this->ID, $this, $this->code, $amount );
1390
+    }
1391
+
1392
+    /**
1393
+     * Checks if the discount is recurring.
1394
+     *
1395
+     * @since 1.0.15
1396
+     * @return boolean
1397
+     */
1398
+    public function is_recurring() {
1399
+        $recurring = $this->get_is_recurring();
1400
+        return ! empty( $recurring );
1401
+    }
1402
+
1403
+    /**
1404
+     * Checks if the discount is single use.
1405
+     *
1406
+     * @since 1.0.15
1407
+     * @return boolean
1408
+     */
1409
+    public function is_single_use() {
1410
+        $usage = $this->get_is_single_use();
1411
+        return ! empty( $usage );
1412
+    }
1413
+
1414
+    /**
1415
+     * Check if a discount is valid for the given user
1416
+     *
1417
+     * @param  int|string  $user
1418
+     * @since 1.0.15
1419
+     * @return boolean
1420
+     */
1421
+    public function is_valid_for_user( $user ) {
1422
+        global $wpi_checkout_id;
1423
+
1424
+        // Ensure that the discount is single use.
1425
+        if ( empty( $user ) || ! $this->is_single_use() ) {
1426
+            return true;
1427
+        }
1428
+
1429
+        // Prepare the user id.
1430
+        $user_id = 0;
1431 1431
         if ( is_int( $user ) ) {
1432 1432
             $user_id = absint( $user );
1433 1433
         } else if ( is_email( $user ) && $user_data = get_user_by( 'email', $user ) ) {
@@ -1436,135 +1436,135 @@  discard block
 block discarded – undo
1436 1436
             $user_id = $user_data->ID;
1437 1437
         } else if ( absint( $user ) > 0 ) {
1438 1438
             $user_id = absint( $user );
1439
-		}
1439
+        }
1440 1440
 
1441
-		// Ensure that we have a user.
1442
-		if ( empty( $user_id ) ) {
1443
-			return true;
1444
-		}
1441
+        // Ensure that we have a user.
1442
+        if ( empty( $user_id ) ) {
1443
+            return true;
1444
+        }
1445 1445
 
1446
-		// Get all payments with matching user id.
1446
+        // Get all payments with matching user id.
1447 1447
         $payments = wpinv_get_invoices( array( 'user' => $user_id, 'limit' => false ) );
1448
-		$code     = strtolower( $this->get_code() );
1449
-
1450
-		// For each payment...
1451
-		foreach ( $payments as $payment ) {
1452
-
1453
-			// ... skip the current payment.
1454
-			if ( ! empty( $wpi_checkout_id ) && $wpi_checkout_id == $payment->ID ) {
1455
-				continue;
1456
-			}
1457
-
1458
-			// And failed payments.
1459
-			if ( $payment->has_status( array( 'wpi-cancelled', 'wpi-failed' ) ) ) {
1460
-				continue;
1461
-			}
1462
-
1463
-			// Retrieve all the discounts for the payment.
1464
-			$discounts = $payment->get_discounts( true );
1465
-			if ( empty( $discounts ) ) {
1466
-				continue;
1467
-			}
1468
-
1469
-			// And check if the current discount is amongst them.
1470
-			$discounts = array_map( 'strtolower', wpinv_parse_list( $discounts ) );
1471
-			if ( ! empty( $discounts ) && in_array( $code, $discounts ) ) {
1472
-				return false;
1473
-			}
1474
-		}
1475
-
1476
-		return true;
1477
-	}
1478
-
1479
-	/**
1480
-	 * Deletes the discount from the database
1481
-	 *
1482
-	 * @since 1.0.15
1483
-	 * @return boolean
1484
-	 */
1485
-	public function remove() {
1486
-		return $this->delete();
1487
-	}
1488
-
1489
-	/**
1490
-	 * Increases a discount's usage.
1491
-	 *
1492
-	 * @since 1.0.15
1493
-	 * @param int $by The number of usages to increas by.
1494
-	 * @return int
1495
-	 */
1496
-	public function increase_usage( $by = 1 ) {
1497
-
1498
-		// Abort if zero.
1499
-		if ( empty( $by ) ) {
1500
-			return;
1501
-		}
1502
-
1503
-		// Increase the usage.
1504
-		$this->set_uses( $this->get_uses() + (int) $by );
1505
-
1506
-		// Save the discount.
1507
-		$this->save();
1508
-
1509
-		// Fire relevant hooks.
1510
-		if( (int) $by > 0 ) {
1511
-			do_action( 'wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code,  absint( $by ) );
1512
-		} else {
1513
-			do_action( 'wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint( $by ) );
1514
-		}
1515
-
1516
-		// Return the number of times the discount has been used.
1517
-		return $this->get_uses();
1518
-	}
1519
-
1520
-	/**
1521
-	 * Alias of self::__toString()
1522
-	 *
1523
-	 * @since 1.0.15
1524
-	 * @return string|false
1525
-	 */
1526
-	public function get_data_as_json() {
1527
-		return $this->__toString();
1528
-	}
1529
-
1530
-	/**
1531
-	 * Returns a discount's discounted amount.
1532
-	 *
1533
-	 * @since 1.0.15
1534
-	 * @param float $amount
1535
-	 * @return float
1536
-	 */
1537
-	public function get_discounted_amount( $amount ) {
1538
-
1539
-		// Convert amount to float.
1540
-		$amount = (float) $amount;
1541
-
1542
-		// Get discount amount.
1543
-		$discount_amount = $this->get_amount();
1544
-
1545
-		if ( empty( $discount_amount ) ) {
1546
-			return 0;
1547
-		}
1548
-
1549
-		// Format the amount.
1550
-		$discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1448
+        $code     = strtolower( $this->get_code() );
1449
+
1450
+        // For each payment...
1451
+        foreach ( $payments as $payment ) {
1452
+
1453
+            // ... skip the current payment.
1454
+            if ( ! empty( $wpi_checkout_id ) && $wpi_checkout_id == $payment->ID ) {
1455
+                continue;
1456
+            }
1457
+
1458
+            // And failed payments.
1459
+            if ( $payment->has_status( array( 'wpi-cancelled', 'wpi-failed' ) ) ) {
1460
+                continue;
1461
+            }
1462
+
1463
+            // Retrieve all the discounts for the payment.
1464
+            $discounts = $payment->get_discounts( true );
1465
+            if ( empty( $discounts ) ) {
1466
+                continue;
1467
+            }
1468
+
1469
+            // And check if the current discount is amongst them.
1470
+            $discounts = array_map( 'strtolower', wpinv_parse_list( $discounts ) );
1471
+            if ( ! empty( $discounts ) && in_array( $code, $discounts ) ) {
1472
+                return false;
1473
+            }
1474
+        }
1475
+
1476
+        return true;
1477
+    }
1478
+
1479
+    /**
1480
+     * Deletes the discount from the database
1481
+     *
1482
+     * @since 1.0.15
1483
+     * @return boolean
1484
+     */
1485
+    public function remove() {
1486
+        return $this->delete();
1487
+    }
1488
+
1489
+    /**
1490
+     * Increases a discount's usage.
1491
+     *
1492
+     * @since 1.0.15
1493
+     * @param int $by The number of usages to increas by.
1494
+     * @return int
1495
+     */
1496
+    public function increase_usage( $by = 1 ) {
1497
+
1498
+        // Abort if zero.
1499
+        if ( empty( $by ) ) {
1500
+            return;
1501
+        }
1502
+
1503
+        // Increase the usage.
1504
+        $this->set_uses( $this->get_uses() + (int) $by );
1505
+
1506
+        // Save the discount.
1507
+        $this->save();
1508
+
1509
+        // Fire relevant hooks.
1510
+        if( (int) $by > 0 ) {
1511
+            do_action( 'wpinv_discount_increase_use_count', $this->uses, $this->ID, $this->code,  absint( $by ) );
1512
+        } else {
1513
+            do_action( 'wpinv_discount_decrease_use_count', $this->uses, $this->ID, $this->code, absint( $by ) );
1514
+        }
1515
+
1516
+        // Return the number of times the discount has been used.
1517
+        return $this->get_uses();
1518
+    }
1519
+
1520
+    /**
1521
+     * Alias of self::__toString()
1522
+     *
1523
+     * @since 1.0.15
1524
+     * @return string|false
1525
+     */
1526
+    public function get_data_as_json() {
1527
+        return $this->__toString();
1528
+    }
1529
+
1530
+    /**
1531
+     * Returns a discount's discounted amount.
1532
+     *
1533
+     * @since 1.0.15
1534
+     * @param float $amount
1535
+     * @return float
1536
+     */
1537
+    public function get_discounted_amount( $amount ) {
1538
+
1539
+        // Convert amount to float.
1540
+        $amount = (float) $amount;
1541
+
1542
+        // Get discount amount.
1543
+        $discount_amount = $this->get_amount();
1544
+
1545
+        if ( empty( $discount_amount ) ) {
1546
+            return 0;
1547
+        }
1548
+
1549
+        // Format the amount.
1550
+        $discount_amount = floatval( wpinv_sanitize_amount( $discount_amount ) );
1551 1551
 		
1552
-		// If this is a percentage discount.
1553
-		if ( $this->is_type( 'percent' ) ) {
1552
+        // If this is a percentage discount.
1553
+        if ( $this->is_type( 'percent' ) ) {
1554 1554
             $discount_amount = $amount * ( $discount_amount / 100 );
1555
-		}
1555
+        }
1556 1556
 
1557
-		// Discount can not be less than zero...
1558
-		if ( $discount_amount < 0 ) {
1559
-			$discount_amount = 0;
1560
-		}
1557
+        // Discount can not be less than zero...
1558
+        if ( $discount_amount < 0 ) {
1559
+            $discount_amount = 0;
1560
+        }
1561 1561
 
1562
-		// ... or more than the amount.
1563
-		if ( $discount_amount > $amount ) {
1564
-			$discount_amount = $amount;
1565
-		}
1562
+        // ... or more than the amount.
1563
+        if ( $discount_amount > $amount ) {
1564
+            $discount_amount = $amount;
1565
+        }
1566 1566
 
1567
-		return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1568
-	}
1567
+        return apply_filters( 'wpinv_discount_total_discount_amount', $discount_amount, $amount, $this );
1568
+    }
1569 1569
 
1570 1570
 }
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-data-store.php 1 patch
Indentation   +179 added lines, -179 removed lines patch added patch discarded remove patch
@@ -11,184 +11,184 @@
 block discarded – undo
11 11
  */
12 12
 class GetPaid_Data_Store {
13 13
 
14
-	/**
15
-	 * Contains an instance of the data store class that we are working with.
16
-	 *
17
-	 * @var GetPaid_Data_Store
18
-	 */
19
-	private $instance = null;
20
-
21
-	/**
22
-	 * Contains an array of default supported data stores.
23
-	 * Format of object name => class name.
24
-	 * Example: 'item' => 'GetPaid_Item_Data_Store'
25
-	 * You can also pass something like item-<type> for item stores and
26
-	 * that type will be used first when available, if a store is requested like
27
-	 * this and doesn't exist, then the store would fall back to 'item'.
28
-	 * Ran through `getpaid_data_stores`.
29
-	 *
30
-	 * @var array
31
-	 */
32
-	private $stores = array(
33
-		'item'         => 'GetPaid_Item_Data_Store',
34
-		'payment_form' => 'GetPaid_Payment_Form_Data_Store',
35
-		'discount'     => 'GetPaid_Discount_Data_Store',
36
-	);
37
-
38
-	/**
39
-	 * Contains the name of the current data store's class name.
40
-	 *
41
-	 * @var string
42
-	 */
43
-	private $current_class_name = '';
44
-
45
-	/**
46
-	 * The object type this store works with.
47
-	 *
48
-	 * @var string
49
-	 */
50
-	private $object_type = '';
51
-
52
-	/**
53
-	 * Tells GetPaid_Data_Store which object
54
-	 * store we want to work with.
55
-	 *
56
-	 * @param string $object_type Name of object.
57
-	 */
58
-	public function __construct( $object_type ) {
59
-		$this->object_type = $object_type;
60
-		$this->stores      = apply_filters( 'getpaid_data_stores', $this->stores );
61
-
62
-		// If this object type can't be found, check to see if we can load one
63
-		// level up (so if item-type isn't found, we try item).
64
-		if ( ! array_key_exists( $object_type, $this->stores ) ) {
65
-			$pieces      = explode( '-', $object_type );
66
-			$object_type = $pieces[0];
67
-		}
68
-
69
-		if ( array_key_exists( $object_type, $this->stores ) ) {
70
-			$store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] );
71
-			if ( is_object( $store ) ) {
72
-				$this->current_class_name = get_class( $store );
73
-				$this->instance           = $store;
74
-			} else {
75
-				if ( ! class_exists( $store ) ) {
76
-					throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) );
77
-				}
78
-				$this->current_class_name = $store;
79
-				$this->instance           = new $store();
80
-			}
81
-		} else {
82
-			throw new Exception( __( 'Invalid data store.', 'invoicing' ) );
83
-		}
84
-	}
85
-
86
-	/**
87
-	 * Only store the object type to avoid serializing the data store instance.
88
-	 *
89
-	 * @return array
90
-	 */
91
-	public function __sleep() {
92
-		return array( 'object_type' );
93
-	}
94
-
95
-	/**
96
-	 * Re-run the constructor with the object type.
97
-	 *
98
-	 * @throws Exception When validation fails.
99
-	 */
100
-	public function __wakeup() {
101
-		$this->__construct( $this->object_type );
102
-	}
103
-
104
-	/**
105
-	 * Loads a data store.
106
-	 *
107
-	 * @param string $object_type Name of object.
108
-	 *
109
-	 * @since 1.0.19
110
-	 * @throws Exception When validation fails.
111
-	 * @return GetPaid_Data_Store
112
-	 */
113
-	public static function load( $object_type ) {
114
-		return new GetPaid_Data_Store( $object_type );
115
-	}
116
-
117
-	/**
118
-	 * Returns the class name of the current data store.
119
-	 *
120
-	 * @since 1.0.19
121
-	 * @return string
122
-	 */
123
-	public function get_current_class_name() {
124
-		return $this->current_class_name;
125
-	}
126
-
127
-	/**
128
-	 * Returns the object type of the current data store.
129
-	 *
130
-	 * @since 1.0.19
131
-	 * @return string
132
-	 */
133
-	public function get_object_type() {
134
-		return $this->object_type;
135
-	}
136
-
137
-	/**
138
-	 * Reads an object from the data store.
139
-	 *
140
-	 * @since 1.0.19
141
-	 * @param GetPaid_Data $data GetPaid data instance.
142
-	 */
143
-	public function read( &$data ) {
144
-		$this->instance->read( $data );
145
-	}
146
-
147
-	/**
148
-	 * Create an object in the data store.
149
-	 *
150
-	 * @since 1.0.19
151
-	 * @param GetPaid_Data $data GetPaid data instance.
152
-	 */
153
-	public function create( &$data ) {
154
-		$this->instance->create( $data );
155
-	}
156
-
157
-	/**
158
-	 * Update an object in the data store.
159
-	 *
160
-	 * @since 1.0.19
161
-	 * @param GetPaid_Data $data GetPaid data instance.
162
-	 */
163
-	public function update( &$data ) {
164
-		$this->instance->update( $data );
165
-	}
166
-
167
-	/**
168
-	 * Delete an object from the data store.
169
-	 *
170
-	 * @since 1.0.19
171
-	 * @param GetPaid_Data $data GetPaid data instance.
172
-	 * @param array   $args Array of args to pass to the delete method.
173
-	 */
174
-	public function delete( &$data, $args = array() ) {
175
-		$this->instance->delete( $data, $args );
176
-	}
177
-
178
-	/**
179
-	 * Data stores can define additional function. This passes
180
-	 * through to the instance if that function exists.
181
-	 *
182
-	 * @since 1.0.19
183
-	 * @param string $method     Method.
184
-	 * @return mixed
185
-	 */
186
-	public function __call( $method, $parameters ) {
187
-		if ( is_callable( array( $this->instance, $method ) ) ) {
188
-			$object     = array_shift( $parameters );
189
-			$parameters = array_merge( array( &$object ), $parameters );
190
-			return call_user_func_array( array( $this->instance, $method ), $parameters );
191
-		}
192
-	}
14
+    /**
15
+     * Contains an instance of the data store class that we are working with.
16
+     *
17
+     * @var GetPaid_Data_Store
18
+     */
19
+    private $instance = null;
20
+
21
+    /**
22
+     * Contains an array of default supported data stores.
23
+     * Format of object name => class name.
24
+     * Example: 'item' => 'GetPaid_Item_Data_Store'
25
+     * You can also pass something like item-<type> for item stores and
26
+     * that type will be used first when available, if a store is requested like
27
+     * this and doesn't exist, then the store would fall back to 'item'.
28
+     * Ran through `getpaid_data_stores`.
29
+     *
30
+     * @var array
31
+     */
32
+    private $stores = array(
33
+        'item'         => 'GetPaid_Item_Data_Store',
34
+        'payment_form' => 'GetPaid_Payment_Form_Data_Store',
35
+        'discount'     => 'GetPaid_Discount_Data_Store',
36
+    );
37
+
38
+    /**
39
+     * Contains the name of the current data store's class name.
40
+     *
41
+     * @var string
42
+     */
43
+    private $current_class_name = '';
44
+
45
+    /**
46
+     * The object type this store works with.
47
+     *
48
+     * @var string
49
+     */
50
+    private $object_type = '';
51
+
52
+    /**
53
+     * Tells GetPaid_Data_Store which object
54
+     * store we want to work with.
55
+     *
56
+     * @param string $object_type Name of object.
57
+     */
58
+    public function __construct( $object_type ) {
59
+        $this->object_type = $object_type;
60
+        $this->stores      = apply_filters( 'getpaid_data_stores', $this->stores );
61
+
62
+        // If this object type can't be found, check to see if we can load one
63
+        // level up (so if item-type isn't found, we try item).
64
+        if ( ! array_key_exists( $object_type, $this->stores ) ) {
65
+            $pieces      = explode( '-', $object_type );
66
+            $object_type = $pieces[0];
67
+        }
68
+
69
+        if ( array_key_exists( $object_type, $this->stores ) ) {
70
+            $store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] );
71
+            if ( is_object( $store ) ) {
72
+                $this->current_class_name = get_class( $store );
73
+                $this->instance           = $store;
74
+            } else {
75
+                if ( ! class_exists( $store ) ) {
76
+                    throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) );
77
+                }
78
+                $this->current_class_name = $store;
79
+                $this->instance           = new $store();
80
+            }
81
+        } else {
82
+            throw new Exception( __( 'Invalid data store.', 'invoicing' ) );
83
+        }
84
+    }
85
+
86
+    /**
87
+     * Only store the object type to avoid serializing the data store instance.
88
+     *
89
+     * @return array
90
+     */
91
+    public function __sleep() {
92
+        return array( 'object_type' );
93
+    }
94
+
95
+    /**
96
+     * Re-run the constructor with the object type.
97
+     *
98
+     * @throws Exception When validation fails.
99
+     */
100
+    public function __wakeup() {
101
+        $this->__construct( $this->object_type );
102
+    }
103
+
104
+    /**
105
+     * Loads a data store.
106
+     *
107
+     * @param string $object_type Name of object.
108
+     *
109
+     * @since 1.0.19
110
+     * @throws Exception When validation fails.
111
+     * @return GetPaid_Data_Store
112
+     */
113
+    public static function load( $object_type ) {
114
+        return new GetPaid_Data_Store( $object_type );
115
+    }
116
+
117
+    /**
118
+     * Returns the class name of the current data store.
119
+     *
120
+     * @since 1.0.19
121
+     * @return string
122
+     */
123
+    public function get_current_class_name() {
124
+        return $this->current_class_name;
125
+    }
126
+
127
+    /**
128
+     * Returns the object type of the current data store.
129
+     *
130
+     * @since 1.0.19
131
+     * @return string
132
+     */
133
+    public function get_object_type() {
134
+        return $this->object_type;
135
+    }
136
+
137
+    /**
138
+     * Reads an object from the data store.
139
+     *
140
+     * @since 1.0.19
141
+     * @param GetPaid_Data $data GetPaid data instance.
142
+     */
143
+    public function read( &$data ) {
144
+        $this->instance->read( $data );
145
+    }
146
+
147
+    /**
148
+     * Create an object in the data store.
149
+     *
150
+     * @since 1.0.19
151
+     * @param GetPaid_Data $data GetPaid data instance.
152
+     */
153
+    public function create( &$data ) {
154
+        $this->instance->create( $data );
155
+    }
156
+
157
+    /**
158
+     * Update an object in the data store.
159
+     *
160
+     * @since 1.0.19
161
+     * @param GetPaid_Data $data GetPaid data instance.
162
+     */
163
+    public function update( &$data ) {
164
+        $this->instance->update( $data );
165
+    }
166
+
167
+    /**
168
+     * Delete an object from the data store.
169
+     *
170
+     * @since 1.0.19
171
+     * @param GetPaid_Data $data GetPaid data instance.
172
+     * @param array   $args Array of args to pass to the delete method.
173
+     */
174
+    public function delete( &$data, $args = array() ) {
175
+        $this->instance->delete( $data, $args );
176
+    }
177
+
178
+    /**
179
+     * Data stores can define additional function. This passes
180
+     * through to the instance if that function exists.
181
+     *
182
+     * @since 1.0.19
183
+     * @param string $method     Method.
184
+     * @return mixed
185
+     */
186
+    public function __call( $method, $parameters ) {
187
+        if ( is_callable( array( $this->instance, $method ) ) ) {
188
+            $object     = array_shift( $parameters );
189
+            $parameters = array_merge( array( &$object ), $parameters );
190
+            return call_user_func_array( array( $this->instance, $method ), $parameters );
191
+        }
192
+    }
193 193
 
194 194
 }
Please login to merge, or discard this patch.
includes/admin/meta-boxes/class-getpaid-meta-box-discount-details.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  */
9 9
 
10 10
 if ( ! defined( 'ABSPATH' ) ) {
11
-	exit; // Exit if accessed directly
11
+    exit; // Exit if accessed directly
12 12
 }
13 13
 
14 14
 /**
@@ -17,10 +17,10 @@  discard block
 block discarded – undo
17 17
 class GetPaid_Meta_Box_Discount_Details {
18 18
 
19 19
     /**
20
-	 * Output the metabox.
21
-	 *
22
-	 * @param WP_Post $post
23
-	 */
20
+     * Output the metabox.
21
+     *
22
+     * @param WP_Post $post
23
+     */
24 24
     public static function output( $post ) {
25 25
 
26 26
         // Prepare the discount.
@@ -368,11 +368,11 @@  discard block
 block discarded – undo
368 368
     }
369 369
 
370 370
     /**
371
-	 * Save meta box data.
372
-	 *
373
-	 * @param int $post_id
374
-	 */
375
-	public static function save( $post_id ) {
371
+     * Save meta box data.
372
+     *
373
+     * @param int $post_id
374
+     */
375
+    public static function save( $post_id ) {
376 376
 
377 377
         // verify nonce
378 378
         if ( ! isset( $_POST['wpinv_discount_metabox_nonce'] ) || ! wp_verify_nonce( $_POST['wpinv_discount_metabox_nonce'], 'wpinv_discount_metabox_nonce' ) ) {
@@ -384,23 +384,23 @@  discard block
 block discarded – undo
384 384
 
385 385
         // Load new data.
386 386
         $discount->set_props(
387
-			array(
388
-				'code'                 => isset( $_POST['wpinv_discount_code'] ) ? $_POST['wpinv_discount_code'] : null,
389
-				'amount'               => isset( $_POST['wpinv_discount_amount'] ) ? $_POST['wpinv_discount_amount'] : null,
390
-				'start'                => isset( $_POST['wpinv_discount_start'] ) ? wpinv_clean( $_POST['wpinv_discount_start'] ) : null,
391
-				'expiration'           => isset( $_POST['wpinv_discount_expiration'] ) ? wpinv_clean( $_POST['wpinv_discount_expiration'] ) : null,
392
-				'is_single_use'        => isset( $_POST['wpinv_discount_single_use'] ),
387
+            array(
388
+                'code'                 => isset( $_POST['wpinv_discount_code'] ) ? $_POST['wpinv_discount_code'] : null,
389
+                'amount'               => isset( $_POST['wpinv_discount_amount'] ) ? $_POST['wpinv_discount_amount'] : null,
390
+                'start'                => isset( $_POST['wpinv_discount_start'] ) ? wpinv_clean( $_POST['wpinv_discount_start'] ) : null,
391
+                'expiration'           => isset( $_POST['wpinv_discount_expiration'] ) ? wpinv_clean( $_POST['wpinv_discount_expiration'] ) : null,
392
+                'is_single_use'        => isset( $_POST['wpinv_discount_single_use'] ),
393 393
                 'type'                 => isset( $_POST['wpinv_discount_type'] ) ? $_POST['wpinv_discount_type'] : null,
394
-				'is_recurring'         => isset( $_POST['wpinv_discount_recurring'] ),
395
-				'items'                => isset( $_POST['wpinv_discount_items'] ) ? $_POST['wpinv_discount_items'] : null,
396
-				'excluded_items'       => isset( $_POST['wpinv_discount_excluded_items'] ) ? $_POST['wpinv_discount_excluded_items'] : null,
397
-				'max_uses'             => isset( $_POST['wpinv_discount_max_uses'] ) ? $_POST['wpinv_discount_max_uses'] : null,
398
-				'min_total'            => isset( $_POST['wpinv_discount_min_total'] ) ? $_POST['wpinv_discount_min_total'] : null,
399
-				'max_total'            => isset( $_POST['wpinv_discount_max_total'] ) ? $_POST['wpinv_discount_max_total'] : null,
400
-			)
394
+                'is_recurring'         => isset( $_POST['wpinv_discount_recurring'] ),
395
+                'items'                => isset( $_POST['wpinv_discount_items'] ) ? $_POST['wpinv_discount_items'] : null,
396
+                'excluded_items'       => isset( $_POST['wpinv_discount_excluded_items'] ) ? $_POST['wpinv_discount_excluded_items'] : null,
397
+                'max_uses'             => isset( $_POST['wpinv_discount_max_uses'] ) ? $_POST['wpinv_discount_max_uses'] : null,
398
+                'min_total'            => isset( $_POST['wpinv_discount_min_total'] ) ? $_POST['wpinv_discount_min_total'] : null,
399
+                'max_total'            => isset( $_POST['wpinv_discount_max_total'] ) ? $_POST['wpinv_discount_max_total'] : null,
400
+            )
401 401
         );
402 402
 
403
-		$discount->save();
404
-		do_action( 'getpaid_discount_metabox_save', $post_id, $discount );
405
-	}
403
+        $discount->save();
404
+        do_action( 'getpaid_discount_metabox_save', $post_id, $discount );
405
+    }
406 406
 }
Please login to merge, or discard this patch.