Passed
Pull Request — master (#375)
by Brian
87:27
created
includes/class-wpinv-item.php 1 patch
Indentation   +552 added lines, -552 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,30 +10,30 @@  discard block
 block discarded – undo
10 10
 class WPInv_Item  extends GetPaid_Data {
11 11
 
12 12
     /**
13
-	 * Which data store to load.
14
-	 *
15
-	 * @var string
16
-	 */
13
+     * Which data store to load.
14
+     *
15
+     * @var string
16
+     */
17 17
     protected $data_store_name = 'item';
18 18
 
19 19
     /**
20
-	 * This is the name of this object type.
21
-	 *
22
-	 * @var string
23
-	 */
24
-	protected $object_type = 'item';
20
+     * This is the name of this object type.
21
+     *
22
+     * @var string
23
+     */
24
+    protected $object_type = 'item';
25 25
 
26 26
     /**
27
-	 * Item Data array. This is the core item data exposed in APIs.
28
-	 *
29
-	 * @since 1.0.19
30
-	 * @var array
31
-	 */
32
-	protected $data = array(
33
-		'parent_id'            => 0,
34
-		'status'               => 'draft',
35
-		'version'              => '',
36
-		'date_created'         => null,
27
+     * Item Data array. This is the core item data exposed in APIs.
28
+     *
29
+     * @since 1.0.19
30
+     * @var array
31
+     */
32
+    protected $data = array(
33
+        'parent_id'            => 0,
34
+        'status'               => 'draft',
35
+        'version'              => '',
36
+        'date_created'         => null,
37 37
         'date_modified'        => null,
38 38
         'name'                 => '',
39 39
         'description'          => '',
@@ -58,13 +58,13 @@  discard block
 block discarded – undo
58 58
     );
59 59
 
60 60
     /**
61
-	 * Stores meta in cache for future reads.
62
-	 *
63
-	 * A group must be set to to enable caching.
64
-	 *
65
-	 * @var string
66
-	 */
67
-	protected $cache_group = 'getpaid_items';
61
+     * Stores meta in cache for future reads.
62
+     *
63
+     * A group must be set to to enable caching.
64
+     *
65
+     * @var string
66
+     */
67
+    protected $cache_group = 'getpaid_items';
68 68
 
69 69
     /**
70 70
      * Stores a reference to the original WP_Post object
@@ -74,33 +74,33 @@  discard block
 block discarded – undo
74 74
     protected $post = null; 
75 75
 
76 76
     /**
77
-	 * Get the item if ID is passed, otherwise the item is new and empty.
78
-	 *
79
-	 * @param  int|object|WPInv_Item|WP_Post $item Item to read.
80
-	 */
81
-	public function __construct( $item = 0 ) {
82
-		parent::__construct( $item );
83
-
84
-		if ( is_numeric( $item ) && $item > 0 ) {
85
-			$this->set_id( $item );
86
-		} elseif ( $item instanceof self ) {
87
-			$this->set_id( $item->get_id() );
88
-		} elseif ( ! empty( $item->ID ) ) {
89
-			$this->set_id( $item->ID );
90
-		} else {
91
-			$this->set_object_read( true );
92
-		}
77
+     * Get the item if ID is passed, otherwise the item is new and empty.
78
+     *
79
+     * @param  int|object|WPInv_Item|WP_Post $item Item to read.
80
+     */
81
+    public function __construct( $item = 0 ) {
82
+        parent::__construct( $item );
83
+
84
+        if ( is_numeric( $item ) && $item > 0 ) {
85
+            $this->set_id( $item );
86
+        } elseif ( $item instanceof self ) {
87
+            $this->set_id( $item->get_id() );
88
+        } elseif ( ! empty( $item->ID ) ) {
89
+            $this->set_id( $item->ID );
90
+        } else {
91
+            $this->set_object_read( true );
92
+        }
93 93
 
94 94
         // Load the datastore.
95
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
95
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
96 96
 
97
-		if ( $this->get_id() > 0 ) {
97
+        if ( $this->get_id() > 0 ) {
98 98
             $this->post = get_post( $this->get_id() );
99 99
             $this->ID   = $this->get_id();
100
-			$this->data_store->read( $this );
100
+            $this->data_store->read( $this );
101 101
         }
102 102
 
103
-	}
103
+    }
104 104
 
105 105
     /*
106 106
 	|--------------------------------------------------------------------------
@@ -118,176 +118,176 @@  discard block
 block discarded – undo
118 118
     */
119 119
 
120 120
     /**
121
-	 * Get parent item ID.
122
-	 *
123
-	 * @since 1.0.19
124
-	 * @param  string $context View or edit context.
125
-	 * @return int
126
-	 */
127
-	public function get_parent_id( $context = 'view' ) {
128
-		return (int) $this->get_prop( 'parent_id', $context );
121
+     * Get parent item ID.
122
+     *
123
+     * @since 1.0.19
124
+     * @param  string $context View or edit context.
125
+     * @return int
126
+     */
127
+    public function get_parent_id( $context = 'view' ) {
128
+        return (int) $this->get_prop( 'parent_id', $context );
129 129
     }
130 130
 
131 131
     /**
132
-	 * Get item status.
133
-	 *
134
-	 * @since 1.0.19
135
-	 * @param  string $context View or edit context.
136
-	 * @return string
137
-	 */
138
-	public function get_status( $context = 'view' ) {
139
-		return $this->get_prop( 'status', $context );
132
+     * Get item status.
133
+     *
134
+     * @since 1.0.19
135
+     * @param  string $context View or edit context.
136
+     * @return string
137
+     */
138
+    public function get_status( $context = 'view' ) {
139
+        return $this->get_prop( 'status', $context );
140 140
     }
141 141
 
142 142
     /**
143
-	 * Get plugin version when the item was created.
144
-	 *
145
-	 * @since 1.0.19
146
-	 * @param  string $context View or edit context.
147
-	 * @return string
148
-	 */
149
-	public function get_version( $context = 'view' ) {
150
-		return $this->get_prop( 'version', $context );
143
+     * Get plugin version when the item was created.
144
+     *
145
+     * @since 1.0.19
146
+     * @param  string $context View or edit context.
147
+     * @return string
148
+     */
149
+    public function get_version( $context = 'view' ) {
150
+        return $this->get_prop( 'version', $context );
151 151
     }
152 152
 
153 153
     /**
154
-	 * Get date when the item was created.
155
-	 *
156
-	 * @since 1.0.19
157
-	 * @param  string $context View or edit context.
158
-	 * @return string
159
-	 */
160
-	public function get_date_created( $context = 'view' ) {
161
-		return $this->get_prop( 'date_created', $context );
154
+     * Get date when the item was created.
155
+     *
156
+     * @since 1.0.19
157
+     * @param  string $context View or edit context.
158
+     * @return string
159
+     */
160
+    public function get_date_created( $context = 'view' ) {
161
+        return $this->get_prop( 'date_created', $context );
162 162
     }
163 163
 
164 164
     /**
165
-	 * Get GMT date when the item was created.
166
-	 *
167
-	 * @since 1.0.19
168
-	 * @param  string $context View or edit context.
169
-	 * @return string
170
-	 */
171
-	public function get_date_created_gmt( $context = 'view' ) {
165
+     * Get GMT date when the item was created.
166
+     *
167
+     * @since 1.0.19
168
+     * @param  string $context View or edit context.
169
+     * @return string
170
+     */
171
+    public function get_date_created_gmt( $context = 'view' ) {
172 172
         $date = $this->get_date_created( $context );
173 173
 
174 174
         if ( $date ) {
175 175
             $date = get_gmt_from_date( $date );
176 176
         }
177
-		return $date;
177
+        return $date;
178 178
     }
179 179
 
180 180
     /**
181
-	 * Get date when the item was last modified.
182
-	 *
183
-	 * @since 1.0.19
184
-	 * @param  string $context View or edit context.
185
-	 * @return string
186
-	 */
187
-	public function get_date_modified( $context = 'view' ) {
188
-		return $this->get_prop( 'date_modified', $context );
181
+     * Get date when the item was last modified.
182
+     *
183
+     * @since 1.0.19
184
+     * @param  string $context View or edit context.
185
+     * @return string
186
+     */
187
+    public function get_date_modified( $context = 'view' ) {
188
+        return $this->get_prop( 'date_modified', $context );
189 189
     }
190 190
 
191 191
     /**
192
-	 * Get GMT date when the item was last modified.
193
-	 *
194
-	 * @since 1.0.19
195
-	 * @param  string $context View or edit context.
196
-	 * @return string
197
-	 */
198
-	public function get_date_modified_gmt( $context = 'view' ) {
192
+     * Get GMT date when the item was last modified.
193
+     *
194
+     * @since 1.0.19
195
+     * @param  string $context View or edit context.
196
+     * @return string
197
+     */
198
+    public function get_date_modified_gmt( $context = 'view' ) {
199 199
         $date = $this->get_date_modified( $context );
200 200
 
201 201
         if ( $date ) {
202 202
             $date = get_gmt_from_date( $date );
203 203
         }
204
-		return $date;
204
+        return $date;
205 205
     }
206 206
 
207 207
     /**
208
-	 * Get the item name.
209
-	 *
210
-	 * @since 1.0.19
211
-	 * @param  string $context View or edit context.
212
-	 * @return string
213
-	 */
214
-	public function get_name( $context = 'view' ) {
215
-		return $this->get_prop( 'name', $context );
208
+     * Get the item name.
209
+     *
210
+     * @since 1.0.19
211
+     * @param  string $context View or edit context.
212
+     * @return string
213
+     */
214
+    public function get_name( $context = 'view' ) {
215
+        return $this->get_prop( 'name', $context );
216 216
     }
217 217
 
218 218
     /**
219
-	 * Alias of self::get_name().
220
-	 *
221
-	 * @since 1.0.19
222
-	 * @param  string $context View or edit context.
223
-	 * @return string
224
-	 */
225
-	public function get_title( $context = 'view' ) {
226
-		return $this->get_name( $context );
219
+     * Alias of self::get_name().
220
+     *
221
+     * @since 1.0.19
222
+     * @param  string $context View or edit context.
223
+     * @return string
224
+     */
225
+    public function get_title( $context = 'view' ) {
226
+        return $this->get_name( $context );
227 227
     }
228 228
 
229 229
     /**
230
-	 * Get the item description.
231
-	 *
232
-	 * @since 1.0.19
233
-	 * @param  string $context View or edit context.
234
-	 * @return string
235
-	 */
236
-	public function get_description( $context = 'view' ) {
237
-		return $this->get_prop( 'description', $context );
230
+     * Get the item description.
231
+     *
232
+     * @since 1.0.19
233
+     * @param  string $context View or edit context.
234
+     * @return string
235
+     */
236
+    public function get_description( $context = 'view' ) {
237
+        return $this->get_prop( 'description', $context );
238 238
     }
239 239
 
240 240
     /**
241
-	 * Alias of self::get_description().
242
-	 *
243
-	 * @since 1.0.19
244
-	 * @param  string $context View or edit context.
245
-	 * @return string
246
-	 */
247
-	public function get_excerpt( $context = 'view' ) {
248
-		return $this->get_description( $context );
241
+     * Alias of self::get_description().
242
+     *
243
+     * @since 1.0.19
244
+     * @param  string $context View or edit context.
245
+     * @return string
246
+     */
247
+    public function get_excerpt( $context = 'view' ) {
248
+        return $this->get_description( $context );
249 249
     }
250 250
 
251 251
     /**
252
-	 * Alias of self::get_description().
253
-	 *
254
-	 * @since 1.0.19
255
-	 * @param  string $context View or edit context.
256
-	 * @return string
257
-	 */
258
-	public function get_summary( $context = 'view' ) {
259
-		return $this->get_description( $context );
252
+     * Alias of self::get_description().
253
+     *
254
+     * @since 1.0.19
255
+     * @param  string $context View or edit context.
256
+     * @return string
257
+     */
258
+    public function get_summary( $context = 'view' ) {
259
+        return $this->get_description( $context );
260 260
     }
261 261
 
262 262
     /**
263
-	 * Get the owner of the item.
264
-	 *
265
-	 * @since 1.0.19
266
-	 * @param  string $context View or edit context.
267
-	 * @return string
268
-	 */
269
-	public function get_author( $context = 'view' ) {
270
-		return (int) $this->get_prop( 'author', $context );
263
+     * Get the owner of the item.
264
+     *
265
+     * @since 1.0.19
266
+     * @param  string $context View or edit context.
267
+     * @return string
268
+     */
269
+    public function get_author( $context = 'view' ) {
270
+        return (int) $this->get_prop( 'author', $context );
271 271
     }
272 272
 
273 273
     /**
274
-	 * Get the price of the item.
275
-	 *
276
-	 * @since 1.0.19
277
-	 * @param  string $context View or edit context.
278
-	 * @return float
279
-	 */
280
-	public function get_price( $context = 'view' ) {
274
+     * Get the price of the item.
275
+     *
276
+     * @since 1.0.19
277
+     * @param  string $context View or edit context.
278
+     * @return float
279
+     */
280
+    public function get_price( $context = 'view' ) {
281 281
         return (float) wpinv_sanitize_amount( $this->get_prop( 'price', $context ) );
282 282
     }
283 283
 
284 284
     /**
285
-	 * Returns a formated price.
286
-	 *
287
-	 * @since 1.0.19
288
-	 * @param  string $context View or edit context.
289
-	 * @return string
290
-	 */
285
+     * Returns a formated price.
286
+     *
287
+     * @since 1.0.19
288
+     * @param  string $context View or edit context.
289
+     * @return string
290
+     */
291 291
     public function get_the_price() {
292 292
         $item_price = wpinv_price( wpinv_format_amount( $this->get_price() ) );
293 293
 
@@ -295,134 +295,134 @@  discard block
 block discarded – undo
295 295
     }
296 296
 
297 297
     /**
298
-	 * Get the VAT rule of the item.
299
-	 *
300
-	 * @since 1.0.19
301
-	 * @param  string $context View or edit context.
302
-	 * @return string
303
-	 */
304
-	public function get_vat_rule( $context = 'view' ) {
298
+     * Get the VAT rule of the item.
299
+     *
300
+     * @since 1.0.19
301
+     * @param  string $context View or edit context.
302
+     * @return string
303
+     */
304
+    public function get_vat_rule( $context = 'view' ) {
305 305
         return $this->get_prop( 'vat_rule', $context );
306 306
     }
307 307
 
308 308
     /**
309
-	 * Get the VAT class of the item.
310
-	 *
311
-	 * @since 1.0.19
312
-	 * @param  string $context View or edit context.
313
-	 * @return string
314
-	 */
315
-	public function get_vat_class( $context = 'view' ) {
309
+     * Get the VAT class of the item.
310
+     *
311
+     * @since 1.0.19
312
+     * @param  string $context View or edit context.
313
+     * @return string
314
+     */
315
+    public function get_vat_class( $context = 'view' ) {
316 316
         return $this->get_prop( 'vat_class', $context );
317 317
     }
318 318
 
319 319
     /**
320
-	 * Get the type of the item.
321
-	 *
322
-	 * @since 1.0.19
323
-	 * @param  string $context View or edit context.
324
-	 * @return string
325
-	 */
326
-	public function get_type( $context = 'view' ) {
320
+     * Get the type of the item.
321
+     *
322
+     * @since 1.0.19
323
+     * @param  string $context View or edit context.
324
+     * @return string
325
+     */
326
+    public function get_type( $context = 'view' ) {
327 327
         return $this->get_prop( 'type', $context );
328 328
     }
329 329
 
330 330
     /**
331
-	 * Get the custom id of the item.
332
-	 *
333
-	 * @since 1.0.19
334
-	 * @param  string $context View or edit context.
335
-	 * @return string
336
-	 */
337
-	public function get_custom_id( $context = 'view' ) {
331
+     * Get the custom id of the item.
332
+     *
333
+     * @since 1.0.19
334
+     * @param  string $context View or edit context.
335
+     * @return string
336
+     */
337
+    public function get_custom_id( $context = 'view' ) {
338 338
         return $this->get_prop( 'custom_id', $context );
339 339
     }
340 340
 
341 341
     /**
342
-	 * Get the custom name of the item.
343
-	 *
344
-	 * @since 1.0.19
345
-	 * @param  string $context View or edit context.
346
-	 * @return string
347
-	 */
348
-	public function get_custom_name( $context = 'view' ) {
342
+     * Get the custom name of the item.
343
+     *
344
+     * @since 1.0.19
345
+     * @param  string $context View or edit context.
346
+     * @return string
347
+     */
348
+    public function get_custom_name( $context = 'view' ) {
349 349
         return $this->get_prop( 'custom_name', $context );
350 350
     }
351 351
 
352 352
     /**
353
-	 * Get the custom singular name of the item.
354
-	 *
355
-	 * @since 1.0.19
356
-	 * @param  string $context View or edit context.
357
-	 * @return string
358
-	 */
359
-	public function get_custom_singular_name( $context = 'view' ) {
353
+     * Get the custom singular name of the item.
354
+     *
355
+     * @since 1.0.19
356
+     * @param  string $context View or edit context.
357
+     * @return string
358
+     */
359
+    public function get_custom_singular_name( $context = 'view' ) {
360 360
         return $this->get_prop( 'custom_singular_name', $context );
361 361
     }
362 362
 
363 363
     /**
364
-	 * Checks if an item is editable..
365
-	 *
366
-	 * @since 1.0.19
367
-	 * @param  string $context View or edit context.
368
-	 * @return int
369
-	 */
370
-	public function get_is_editable( $context = 'view' ) {
364
+     * Checks if an item is editable..
365
+     *
366
+     * @since 1.0.19
367
+     * @param  string $context View or edit context.
368
+     * @return int
369
+     */
370
+    public function get_is_editable( $context = 'view' ) {
371 371
         return (int) $this->get_prop( 'is_editable', $context );
372 372
     }
373 373
 
374 374
     /**
375
-	 * Alias of self::get_is_editable().
376
-	 *
377
-	 * @since 1.0.19
378
-	 * @param  string $context View or edit context.
379
-	 * @return int
380
-	 */
381
-	public function get_editable( $context = 'view' ) {
382
-		return $this->get_is_editable( $context );
375
+     * Alias of self::get_is_editable().
376
+     *
377
+     * @since 1.0.19
378
+     * @param  string $context View or edit context.
379
+     * @return int
380
+     */
381
+    public function get_editable( $context = 'view' ) {
382
+        return $this->get_is_editable( $context );
383 383
     }
384 384
 
385 385
     /**
386
-	 * Checks if dynamic pricing is enabled.
387
-	 *
388
-	 * @since 1.0.19
389
-	 * @param  string $context View or edit context.
390
-	 * @return int
391
-	 */
392
-	public function get_is_dynamic_pricing( $context = 'view' ) {
386
+     * Checks if dynamic pricing is enabled.
387
+     *
388
+     * @since 1.0.19
389
+     * @param  string $context View or edit context.
390
+     * @return int
391
+     */
392
+    public function get_is_dynamic_pricing( $context = 'view' ) {
393 393
         return (int) $this->get_prop( 'is_dynamic_pricing', $context );
394 394
     }
395 395
 
396 396
     /**
397
-	 * Returns the minimum price if dynamic pricing is enabled.
398
-	 *
399
-	 * @since 1.0.19
400
-	 * @param  string $context View or edit context.
401
-	 * @return float
402
-	 */
403
-	public function get_minimum_price( $context = 'view' ) {
397
+     * Returns the minimum price if dynamic pricing is enabled.
398
+     *
399
+     * @since 1.0.19
400
+     * @param  string $context View or edit context.
401
+     * @return float
402
+     */
403
+    public function get_minimum_price( $context = 'view' ) {
404 404
         return (float) wpinv_sanitize_amount( $this->get_prop( 'minimum_price', $context ) );
405 405
     }
406 406
 
407 407
     /**
408
-	 * Checks if this is a recurring item.
409
-	 *
410
-	 * @since 1.0.19
411
-	 * @param  string $context View or edit context.
412
-	 * @return int
413
-	 */
414
-	public function get_is_recurring( $context = 'view' ) {
408
+     * Checks if this is a recurring item.
409
+     *
410
+     * @since 1.0.19
411
+     * @param  string $context View or edit context.
412
+     * @return int
413
+     */
414
+    public function get_is_recurring( $context = 'view' ) {
415 415
         return (int) $this->get_prop( 'is_recurring', $context );
416 416
     }
417 417
 
418 418
     /**
419
-	 * Get the recurring period.
420
-	 *
421
-	 * @since 1.0.19
422
-	 * @param  bool $full Return abbreviation or in full.
423
-	 * @return string
424
-	 */
425
-	public function get_recurring_period( $full = false ) {
419
+     * Get the recurring period.
420
+     *
421
+     * @since 1.0.19
422
+     * @param  bool $full Return abbreviation or in full.
423
+     * @return string
424
+     */
425
+    public function get_recurring_period( $full = false ) {
426 426
         $period = $this->get_prop( 'recurring_period', 'view' );
427 427
 
428 428
         if ( $full && ! is_bool( $full ) ) {
@@ -433,63 +433,63 @@  discard block
 block discarded – undo
433 433
     }
434 434
 
435 435
     /**
436
-	 * Get the recurring interval.
437
-	 *
438
-	 * @since 1.0.19
439
-	 * @param  string $context View or edit context.
440
-	 * @return int
441
-	 */
442
-	public function get_recurring_interval( $context = 'view' ) {
443
-		$interval = absint( $this->get_prop( 'recurring_interval', $context ) );
436
+     * Get the recurring interval.
437
+     *
438
+     * @since 1.0.19
439
+     * @param  string $context View or edit context.
440
+     * @return int
441
+     */
442
+    public function get_recurring_interval( $context = 'view' ) {
443
+        $interval = absint( $this->get_prop( 'recurring_interval', $context ) );
444 444
 
445
-		if ( $interval < 1 ) {
446
-			$interval = 1;
447
-		}
445
+        if ( $interval < 1 ) {
446
+            $interval = 1;
447
+        }
448 448
 
449 449
         return $interval;
450 450
     }
451 451
 
452 452
     /**
453
-	 * Get the recurring limit.
454
-	 *
455
-	 * @since 1.0.19
456
-	 * @param  string $context View or edit context.
457
-	 * @return int
458
-	 */
459
-	public function get_recurring_limit( $context = 'view' ) {
453
+     * Get the recurring limit.
454
+     *
455
+     * @since 1.0.19
456
+     * @param  string $context View or edit context.
457
+     * @return int
458
+     */
459
+    public function get_recurring_limit( $context = 'view' ) {
460 460
         return (int) $this->get_prop( 'recurring_limit', $context );
461 461
     }
462 462
 
463 463
     /**
464
-	 * Checks if we have a free trial.
465
-	 *
466
-	 * @since 1.0.19
467
-	 * @param  string $context View or edit context.
468
-	 * @return int
469
-	 */
470
-	public function get_is_free_trial( $context = 'view' ) {
464
+     * Checks if we have a free trial.
465
+     *
466
+     * @since 1.0.19
467
+     * @param  string $context View or edit context.
468
+     * @return int
469
+     */
470
+    public function get_is_free_trial( $context = 'view' ) {
471 471
         return (int) $this->get_prop( 'is_free_trial', $context );
472 472
     }
473 473
 
474 474
     /**
475
-	 * Alias for self::get_is_free_trial().
476
-	 *
477
-	 * @since 1.0.19
478
-	 * @param  string $context View or edit context.
479
-	 * @return int
480
-	 */
481
-	public function get_free_trial( $context = 'view' ) {
475
+     * Alias for self::get_is_free_trial().
476
+     *
477
+     * @since 1.0.19
478
+     * @param  string $context View or edit context.
479
+     * @return int
480
+     */
481
+    public function get_free_trial( $context = 'view' ) {
482 482
         return $this->get_is_free_trial( $context );
483 483
     }
484 484
 
485 485
     /**
486
-	 * Get the trial period.
487
-	 *
488
-	 * @since 1.0.19
489
-	 * @param  bool $full Return abbreviation or in full.
490
-	 * @return string
491
-	 */
492
-	public function get_trial_period( $full = false ) {
486
+     * Get the trial period.
487
+     *
488
+     * @since 1.0.19
489
+     * @param  bool $full Return abbreviation or in full.
490
+     * @return string
491
+     */
492
+    public function get_trial_period( $full = false ) {
493 493
         $period = $this->get_prop( 'trial_period', 'view' );
494 494
 
495 495
         if ( $full && ! is_bool( $full ) ) {
@@ -500,13 +500,13 @@  discard block
 block discarded – undo
500 500
     }
501 501
 
502 502
     /**
503
-	 * Get the trial interval.
504
-	 *
505
-	 * @since 1.0.19
506
-	 * @param  string $context View or edit context.
507
-	 * @return int
508
-	 */
509
-	public function get_trial_interval( $context = 'view' ) {
503
+     * Get the trial interval.
504
+     *
505
+     * @since 1.0.19
506
+     * @param  string $context View or edit context.
507
+     * @return int
508
+     */
509
+    public function get_trial_interval( $context = 'view' ) {
510 510
         return (int) $this->get_prop( 'trial_interval', $context );
511 511
     }
512 512
 
@@ -540,52 +540,52 @@  discard block
 block discarded – undo
540 540
     */
541 541
 
542 542
     /**
543
-	 * Set parent order ID.
544
-	 *
545
-	 * @since 1.0.19
546
-	 */
547
-	public function set_parent_id( $value ) {
548
-		if ( $value && ( $value === $this->get_id() || ! get_post( $value ) ) ) {
549
-			return;
550
-		}
551
-		$this->set_prop( 'parent_id', absint( $value ) );
552
-	}
553
-
554
-    /**
555
-	 * Sets item status.
556
-	 *
557
-	 * @since 1.0.19
558
-	 * @param  string $status New status.
559
-	 * @return array details of change.
560
-	 */
561
-	public function set_status( $status ) {
543
+     * Set parent order ID.
544
+     *
545
+     * @since 1.0.19
546
+     */
547
+    public function set_parent_id( $value ) {
548
+        if ( $value && ( $value === $this->get_id() || ! get_post( $value ) ) ) {
549
+            return;
550
+        }
551
+        $this->set_prop( 'parent_id', absint( $value ) );
552
+    }
553
+
554
+    /**
555
+     * Sets item status.
556
+     *
557
+     * @since 1.0.19
558
+     * @param  string $status New status.
559
+     * @return array details of change.
560
+     */
561
+    public function set_status( $status ) {
562 562
         $old_status = $this->get_status();
563 563
 
564 564
         $this->set_prop( 'status', $status );
565 565
 
566
-		return array(
567
-			'from' => $old_status,
568
-			'to'   => $status,
569
-		);
566
+        return array(
567
+            'from' => $old_status,
568
+            'to'   => $status,
569
+        );
570 570
     }
571 571
 
572 572
     /**
573
-	 * Set plugin version when the item was created.
574
-	 *
575
-	 * @since 1.0.19
576
-	 */
577
-	public function set_version( $value ) {
578
-		$this->set_prop( 'version', $value );
573
+     * Set plugin version when the item was created.
574
+     *
575
+     * @since 1.0.19
576
+     */
577
+    public function set_version( $value ) {
578
+        $this->set_prop( 'version', $value );
579 579
     }
580 580
 
581 581
     /**
582
-	 * Set date when the item was created.
583
-	 *
584
-	 * @since 1.0.19
585
-	 * @param string $value Value to set.
582
+     * Set date when the item was created.
583
+     *
584
+     * @since 1.0.19
585
+     * @param string $value Value to set.
586 586
      * @return bool Whether or not the date was set.
587
-	 */
588
-	public function set_date_created( $value ) {
587
+     */
588
+    public function set_date_created( $value ) {
589 589
         $date = strtotime( $value );
590 590
 
591 591
         if ( $date ) {
@@ -598,13 +598,13 @@  discard block
 block discarded – undo
598 598
     }
599 599
 
600 600
     /**
601
-	 * Set date when the item was last modified.
602
-	 *
603
-	 * @since 1.0.19
604
-	 * @param string $value Value to set.
601
+     * Set date when the item was last modified.
602
+     *
603
+     * @since 1.0.19
604
+     * @param string $value Value to set.
605 605
      * @return bool Whether or not the date was set.
606
-	 */
607
-	public function set_date_modified( $value ) {
606
+     */
607
+    public function set_date_modified( $value ) {
608 608
         $date = strtotime( $value );
609 609
 
610 610
         if ( $date ) {
@@ -617,105 +617,105 @@  discard block
 block discarded – undo
617 617
     }
618 618
 
619 619
     /**
620
-	 * Set the item name.
621
-	 *
622
-	 * @since 1.0.19
623
-	 * @param  string $value New name.
624
-	 */
625
-	public function set_name( $value ) {
620
+     * Set the item name.
621
+     *
622
+     * @since 1.0.19
623
+     * @param  string $value New name.
624
+     */
625
+    public function set_name( $value ) {
626 626
         $name = sanitize_text_field( $value );
627
-		$this->set_prop( 'name', $name );
627
+        $this->set_prop( 'name', $name );
628 628
     }
629 629
 
630 630
     /**
631
-	 * Alias of self::set_name().
632
-	 *
633
-	 * @since 1.0.19
634
-	 * @param  string $value New name.
635
-	 */
636
-	public function set_title( $value ) {
637
-		$this->set_name( $value );
631
+     * Alias of self::set_name().
632
+     *
633
+     * @since 1.0.19
634
+     * @param  string $value New name.
635
+     */
636
+    public function set_title( $value ) {
637
+        $this->set_name( $value );
638 638
     }
639 639
 
640 640
     /**
641
-	 * Set the item description.
642
-	 *
643
-	 * @since 1.0.19
644
-	 * @param  string $value New description.
645
-	 */
646
-	public function set_description( $value ) {
641
+     * Set the item description.
642
+     *
643
+     * @since 1.0.19
644
+     * @param  string $value New description.
645
+     */
646
+    public function set_description( $value ) {
647 647
         $description = wp_kses_post( $value );
648
-		return $this->set_prop( 'description', $description );
648
+        return $this->set_prop( 'description', $description );
649 649
     }
650 650
 
651 651
     /**
652
-	 * Alias of self::set_description().
653
-	 *
654
-	 * @since 1.0.19
655
-	 * @param  string $value New description.
656
-	 */
657
-	public function set_excerpt( $value ) {
658
-		$this->set_description( $value );
652
+     * Alias of self::set_description().
653
+     *
654
+     * @since 1.0.19
655
+     * @param  string $value New description.
656
+     */
657
+    public function set_excerpt( $value ) {
658
+        $this->set_description( $value );
659 659
     }
660 660
 
661 661
     /**
662
-	 * Alias of self::set_description().
663
-	 *
664
-	 * @since 1.0.19
665
-	 * @param  string $value New description.
666
-	 */
667
-	public function set_summary( $value ) {
668
-		$this->set_description( $value );
662
+     * Alias of self::set_description().
663
+     *
664
+     * @since 1.0.19
665
+     * @param  string $value New description.
666
+     */
667
+    public function set_summary( $value ) {
668
+        $this->set_description( $value );
669 669
     }
670 670
 
671 671
     /**
672
-	 * Set the owner of the item.
673
-	 *
674
-	 * @since 1.0.19
675
-	 * @param  int $value New author.
676
-	 */
677
-	public function set_author( $value ) {
678
-		$this->set_prop( 'author', (int) $value );
672
+     * Set the owner of the item.
673
+     *
674
+     * @since 1.0.19
675
+     * @param  int $value New author.
676
+     */
677
+    public function set_author( $value ) {
678
+        $this->set_prop( 'author', (int) $value );
679 679
     }
680 680
 
681 681
     /**
682
-	 * Set the price of the item.
683
-	 *
684
-	 * @since 1.0.19
685
-	 * @param  float $value New price.
682
+     * Set the price of the item.
683
+     *
684
+     * @since 1.0.19
685
+     * @param  float $value New price.
686 686
 ]	 */
687
-	public function set_price( $value ) {
687
+    public function set_price( $value ) {
688 688
         $this->set_prop( 'price', (float) wpinv_sanitize_amount( $value ) );
689 689
     }
690 690
 
691 691
     /**
692
-	 * Set the VAT rule of the item.
693
-	 *
694
-	 * @since 1.0.19
695
-	 * @param  string $value new rule.
696
-	 */
697
-	public function set_vat_rule( $value ) {
692
+     * Set the VAT rule of the item.
693
+     *
694
+     * @since 1.0.19
695
+     * @param  string $value new rule.
696
+     */
697
+    public function set_vat_rule( $value ) {
698 698
         $this->set_prop( 'vat_rule', $value );
699 699
     }
700 700
 
701 701
     /**
702
-	 * Set the VAT class of the item.
703
-	 *
704
-	 * @since 1.0.19
705
-	 * @param  string $value new class.
706
-	 */
707
-	public function set_vat_class( $value ) {
702
+     * Set the VAT class of the item.
703
+     *
704
+     * @since 1.0.19
705
+     * @param  string $value new class.
706
+     */
707
+    public function set_vat_class( $value ) {
708 708
         $this->set_prop( 'vat_class', $value );
709 709
     }
710 710
 
711 711
     /**
712
-	 * Set the type of the item.
713
-	 *
714
-	 * @since 1.0.19
715
-	 * @param  string $value new item type.
716
-	 * @return string
717
-	 */
718
-	public function set_type( $value ) {
712
+     * Set the type of the item.
713
+     *
714
+     * @since 1.0.19
715
+     * @param  string $value new item type.
716
+     * @return string
717
+     */
718
+    public function set_type( $value ) {
719 719
 
720 720
         if ( empty( $value ) ) {
721 721
             $value = 'custom';
@@ -725,134 +725,134 @@  discard block
 block discarded – undo
725 725
     }
726 726
 
727 727
     /**
728
-	 * Set the custom id of the item.
729
-	 *
730
-	 * @since 1.0.19
731
-	 * @param  string $value new custom id.
732
-	 */
733
-	public function set_custom_id( $value ) {
728
+     * Set the custom id of the item.
729
+     *
730
+     * @since 1.0.19
731
+     * @param  string $value new custom id.
732
+     */
733
+    public function set_custom_id( $value ) {
734 734
         $this->set_prop( 'custom_id', $value );
735 735
     }
736 736
 
737 737
     /**
738
-	 * Set the custom name of the item.
739
-	 *
740
-	 * @since 1.0.19
741
-	 * @param  string $value new custom name.
742
-	 */
743
-	public function set_custom_name( $value ) {
738
+     * Set the custom name of the item.
739
+     *
740
+     * @since 1.0.19
741
+     * @param  string $value new custom name.
742
+     */
743
+    public function set_custom_name( $value ) {
744 744
         $this->set_prop( 'custom_name', $value );
745 745
     }
746 746
 
747 747
     /**
748
-	 * Set the custom singular name of the item.
749
-	 *
750
-	 * @since 1.0.19
751
-	 * @param  string $value new custom singular name.
752
-	 */
753
-	public function set_custom_singular_name( $value ) {
748
+     * Set the custom singular name of the item.
749
+     *
750
+     * @since 1.0.19
751
+     * @param  string $value new custom singular name.
752
+     */
753
+    public function set_custom_singular_name( $value ) {
754 754
         $this->set_prop( 'custom_singular_name', $value );
755 755
     }
756 756
 
757 757
     /**
758
-	 * Sets if an item is editable..
759
-	 *
760
-	 * @since 1.0.19
761
-	 * @param  int|bool $value whether or not the item is editable.
762
-	 */
763
-	public function set_is_editable( $value ) {
764
-		if ( is_numeric( $value ) ) {
765
-			$this->set_prop( 'is_editable', (int) $value );
766
-		}
758
+     * Sets if an item is editable..
759
+     *
760
+     * @since 1.0.19
761
+     * @param  int|bool $value whether or not the item is editable.
762
+     */
763
+    public function set_is_editable( $value ) {
764
+        if ( is_numeric( $value ) ) {
765
+            $this->set_prop( 'is_editable', (int) $value );
766
+        }
767 767
     }
768 768
 
769 769
     /**
770
-	 * Sets if dynamic pricing is enabled.
771
-	 *
772
-	 * @since 1.0.19
773
-	 * @param  int|bool $value whether or not dynamic pricing is allowed.
774
-	 */
775
-	public function set_is_dynamic_pricing( $value ) {
770
+     * Sets if dynamic pricing is enabled.
771
+     *
772
+     * @since 1.0.19
773
+     * @param  int|bool $value whether or not dynamic pricing is allowed.
774
+     */
775
+    public function set_is_dynamic_pricing( $value ) {
776 776
         $this->set_prop( 'is_dynamic_pricing', (int) $value );
777 777
     }
778 778
 
779 779
     /**
780
-	 * Sets the minimum price if dynamic pricing is enabled.
781
-	 *
782
-	 * @since 1.0.19
783
-	 * @param  float $value minimum price.
784
-	 */
785
-	public function set_minimum_price( $value ) {
780
+     * Sets the minimum price if dynamic pricing is enabled.
781
+     *
782
+     * @since 1.0.19
783
+     * @param  float $value minimum price.
784
+     */
785
+    public function set_minimum_price( $value ) {
786 786
         $this->set_prop( 'minimum_price',  (float) wpinv_sanitize_amount( $value ) );
787 787
     }
788 788
 
789 789
     /**
790
-	 * Sets if this is a recurring item.
791
-	 *
792
-	 * @since 1.0.19
793
-	 * @param  int|bool $value whether or not dynamic pricing is allowed.
794
-	 */
795
-	public function set_is_recurring( $value ) {
790
+     * Sets if this is a recurring item.
791
+     *
792
+     * @since 1.0.19
793
+     * @param  int|bool $value whether or not dynamic pricing is allowed.
794
+     */
795
+    public function set_is_recurring( $value ) {
796 796
         $this->set_prop( 'is_recurring', (int) $value );
797 797
     }
798 798
 
799 799
     /**
800
-	 * Set the recurring period.
801
-	 *
802
-	 * @since 1.0.19
803
-	 * @param  string $value new period.
804
-	 */
805
-	public function set_recurring_period( $value ) {
800
+     * Set the recurring period.
801
+     *
802
+     * @since 1.0.19
803
+     * @param  string $value new period.
804
+     */
805
+    public function set_recurring_period( $value ) {
806 806
         $this->set_prop( 'recurring_period', $value );
807 807
     }
808 808
 
809 809
     /**
810
-	 * Set the recurring interval.
811
-	 *
812
-	 * @since 1.0.19
813
-	 * @param  int $value recurring interval.
814
-	 */
815
-	public function set_recurring_interval( $value ) {
810
+     * Set the recurring interval.
811
+     *
812
+     * @since 1.0.19
813
+     * @param  int $value recurring interval.
814
+     */
815
+    public function set_recurring_interval( $value ) {
816 816
         return $this->set_prop( 'recurring_interval', (int) $value );
817 817
     }
818 818
 
819 819
     /**
820
-	 * Get the recurring limit.
821
-	 * @since 1.0.19
822
-	 * @param  int $value The recurring limit.
823
-	 * @return int
824
-	 */
825
-	public function set_recurring_limit( $value ) {
820
+     * Get the recurring limit.
821
+     * @since 1.0.19
822
+     * @param  int $value The recurring limit.
823
+     * @return int
824
+     */
825
+    public function set_recurring_limit( $value ) {
826 826
         $this->set_prop( 'recurring_limit', (int) $value );
827 827
     }
828 828
 
829 829
     /**
830
-	 * Checks if we have a free trial.
831
-	 *
832
-	 * @since 1.0.19
833
-	 * @param  int|bool $value whether or not it has a free trial.
834
-	 */
835
-	public function set_is_free_trial( $value ) {
830
+     * Checks if we have a free trial.
831
+     *
832
+     * @since 1.0.19
833
+     * @param  int|bool $value whether or not it has a free trial.
834
+     */
835
+    public function set_is_free_trial( $value ) {
836 836
         $this->set_prop( 'is_free_trial', (int) $value );
837 837
     }
838 838
 
839 839
     /**
840
-	 * Set the trial period.
841
-	 *
842
-	 * @since 1.0.19
843
-	 * @param  string $value trial period.
844
-	 */
845
-	public function set_trial_period( $value ) {
840
+     * Set the trial period.
841
+     *
842
+     * @since 1.0.19
843
+     * @param  string $value trial period.
844
+     */
845
+    public function set_trial_period( $value ) {
846 846
         $this->set_prop( 'trial_period', $value );
847 847
     }
848 848
 
849 849
     /**
850
-	 * Set the trial interval.
851
-	 *
852
-	 * @since 1.0.19
853
-	 * @param  int $value trial interval.
854
-	 */
855
-	public function set_trial_interval( $value ) {
850
+     * Set the trial interval.
851
+     *
852
+     * @since 1.0.19
853
+     * @param  int $value trial interval.
854
+     */
855
+    public function set_trial_interval( $value ) {
856 856
         $this->set_prop( 'trial_interval', $value );
857 857
     }
858 858
 
@@ -860,17 +860,17 @@  discard block
 block discarded – undo
860 860
      * Create an item. For backwards compatibilty.
861 861
      * 
862 862
      * @deprecated
863
-	 * @return int item id
863
+     * @return int item id
864 864
      */
865 865
     public function create( $data = array() ) {
866 866
 
867
-		// Set the properties.
868
-		if ( is_array( $data ) ) {
869
-			$this->set_props( $data );
870
-		}
867
+        // Set the properties.
868
+        if ( is_array( $data ) ) {
869
+            $this->set_props( $data );
870
+        }
871 871
 
872
-		// Save the item.
873
-		return $this->save();
872
+        // Save the item.
873
+        return $this->save();
874 874
 
875 875
     }
876 876
 
@@ -878,7 +878,7 @@  discard block
 block discarded – undo
878 878
      * Updates an item. For backwards compatibilty.
879 879
      * 
880 880
      * @deprecated
881
-	 * @return int item id
881
+     * @return int item id
882 882
      */
883 883
     public function update( $data = array() ) {
884 884
         return $this->create( $data );
@@ -894,84 +894,84 @@  discard block
 block discarded – undo
894 894
 	*/
895 895
 
896 896
     /**
897
-	 * Checks whether the item has enabled dynamic pricing.
898
-	 *
899
-	 * @since 1.0.19
900
-	 * @return bool
901
-	 */
902
-	public function user_can_set_their_price() {
897
+     * Checks whether the item has enabled dynamic pricing.
898
+     *
899
+     * @since 1.0.19
900
+     * @return bool
901
+     */
902
+    public function user_can_set_their_price() {
903 903
         return (bool) $this->get_is_dynamic_pricing();
904
-	}
904
+    }
905 905
 	
906
-	/**
907
-	 * Checks whether the item is recurring.
908
-	 *
909
-	 * @since 1.0.19
910
-	 * @return bool
911
-	 */
912
-	public function is_recurring() {
906
+    /**
907
+     * Checks whether the item is recurring.
908
+     *
909
+     * @since 1.0.19
910
+     * @return bool
911
+     */
912
+    public function is_recurring() {
913 913
         return (bool) $this->get_is_recurring();
914 914
     }
915 915
 
916 916
     /**
917
-	 * Checks whether the item has a free trial.
918
-	 *
919
-	 * @since 1.0.19
920
-	 * @return bool
921
-	 */
917
+     * Checks whether the item has a free trial.
918
+     *
919
+     * @since 1.0.19
920
+     * @return bool
921
+     */
922 922
     public function has_free_trial() {
923 923
         $has_trial = $this->is_recurring() && (bool) $this->get_free_trial() ? true : false;
924 924
         return (bool) apply_filters( 'wpinv_item_has_free_trial', $has_trial, $this->ID, $this );
925 925
     }
926 926
 
927 927
     /**
928
-	 * Checks whether the item is free.
929
-	 *
930
-	 * @since 1.0.19
931
-	 * @return bool
932
-	 */
928
+     * Checks whether the item is free.
929
+     *
930
+     * @since 1.0.19
931
+     * @return bool
932
+     */
933 933
     public function is_free() {
934 934
         $is_free   = $this->get_price() == 0;
935 935
         return (bool) apply_filters( 'wpinv_is_free_item', $is_free, $this->ID, $this );
936 936
     }
937 937
 
938 938
     /**
939
-	 * Checks the item status against a passed in status.
940
-	 *
941
-	 * @param array|string $status Status to check.
942
-	 * @return bool
943
-	 */
944
-	public function has_status( $status ) {
945
-		$has_status = ( is_array( $status ) && in_array( $this->get_status(), $status, true ) ) || $this->get_status() === $status;
946
-		return (bool) apply_filters( 'getpaid_item_has_status', $has_status, $this, $status );
939
+     * Checks the item status against a passed in status.
940
+     *
941
+     * @param array|string $status Status to check.
942
+     * @return bool
943
+     */
944
+    public function has_status( $status ) {
945
+        $has_status = ( is_array( $status ) && in_array( $this->get_status(), $status, true ) ) || $this->get_status() === $status;
946
+        return (bool) apply_filters( 'getpaid_item_has_status', $has_status, $this, $status );
947 947
     }
948 948
 
949 949
     /**
950
-	 * Checks the item type against a passed in types.
951
-	 *
952
-	 * @param array|string $type Type to check.
953
-	 * @return bool
954
-	 */
955
-	public function is_type( $type ) {
956
-		$is_type = ( is_array( $type ) && in_array( $this->get_type(), $type, true ) ) || $this->get_type() === $type;
957
-		return (bool) apply_filters( 'getpaid_item_is_type', $is_type, $this, $type );
958
-	}
950
+     * Checks the item type against a passed in types.
951
+     *
952
+     * @param array|string $type Type to check.
953
+     * @return bool
954
+     */
955
+    public function is_type( $type ) {
956
+        $is_type = ( is_array( $type ) && in_array( $this->get_type(), $type, true ) ) || $this->get_type() === $type;
957
+        return (bool) apply_filters( 'getpaid_item_is_type', $is_type, $this, $type );
958
+    }
959 959
 
960 960
     /**
961
-	 * Checks whether the item is editable.
962
-	 *
963
-	 * @since 1.0.19
964
-	 * @return bool
965
-	 */
961
+     * Checks whether the item is editable.
962
+     *
963
+     * @since 1.0.19
964
+     * @return bool
965
+     */
966 966
     public function is_editable() {
967 967
         $is_editable = $this->get_is_editable();
968 968
         return (bool) apply_filters( 'wpinv_item_is_editable', $is_editable, $this->ID, $this );
969
-	}
969
+    }
970 970
 
971
-	/**
972
-	 * Returns an array of cart fees.
973
-	 */
974
-	public function get_fees( $type = 'fee', $item_id = 0 ) {
971
+    /**
972
+     * Returns an array of cart fees.
973
+     */
974
+    public function get_fees( $type = 'fee', $item_id = 0 ) {
975 975
         global $wpi_session;
976 976
         
977 977
         $fees = $wpi_session->get( 'wpi_cart_fees' );
@@ -1015,11 +1015,11 @@  discard block
 block discarded – undo
1015 1015
     }
1016 1016
 
1017 1017
     /**
1018
-	 * Checks whether the item is purchasable.
1019
-	 *
1020
-	 * @since 1.0.19
1021
-	 * @return bool
1022
-	 */
1018
+     * Checks whether the item is purchasable.
1019
+     *
1020
+     * @since 1.0.19
1021
+     * @return bool
1022
+     */
1023 1023
     public function can_purchase() {
1024 1024
         $can_purchase = null !== $this->get_id();
1025 1025
 
@@ -1031,11 +1031,11 @@  discard block
 block discarded – undo
1031 1031
     }
1032 1032
 
1033 1033
     /**
1034
-	 * Checks whether the item supports dynamic pricing.
1035
-	 *
1036
-	 * @since 1.0.19
1037
-	 * @return bool
1038
-	 */
1034
+     * Checks whether the item supports dynamic pricing.
1035
+     *
1036
+     * @since 1.0.19
1037
+     * @return bool
1038
+     */
1039 1039
     public function supports_dynamic_pricing() {
1040 1040
         return (bool) apply_filters( 'wpinv_item_supports_dynamic_pricing', true, $this );
1041 1041
     }
Please login to merge, or discard this patch.
includes/admin/meta-boxes/class-getpaid-meta-box-payment-form.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  */
8 8
 
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit; // Exit if accessed directly
10
+    exit; // Exit if accessed directly
11 11
 }
12 12
 
13 13
 /**
@@ -16,10 +16,10 @@  discard block
 block discarded – undo
16 16
 class GetPaid_Meta_Box_Payment_Form {
17 17
 
18 18
     /**
19
-	 * Output the metabox.
20
-	 *
21
-	 * @param WP_Post $post
22
-	 */
19
+     * Output the metabox.
20
+     *
21
+     * @param WP_Post $post
22
+     */
23 23
     public static function output( $post ) {
24 24
         ?>
25 25
         <div id="wpinv-form-builder" class="bsui">
@@ -82,11 +82,11 @@  discard block
 block discarded – undo
82 82
     }
83 83
 
84 84
     /**
85
-	 * Save meta box data.
86
-	 *
87
-	 * @param int $post_id
88
-	 */
89
-	public static function save( $post_id ) {
85
+     * Save meta box data.
86
+     *
87
+     * @param int $post_id
88
+     */
89
+    public static function save( $post_id ) {
90 90
 
91 91
         // verify nonce
92 92
         if ( ! isset( $_POST['wpinv_save_payment_form'] ) || ! wp_verify_nonce( $_POST['wpinv_save_payment_form'], 'wpinv_save_payment_form' ) ) {
Please login to merge, or discard this patch.
includes/class-getpaid-form-item.php 1 patch
Indentation   +164 added lines, -164 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,32 +10,32 @@  discard block
 block discarded – undo
10 10
 class GetPaid_Form_Item  extends WPInv_Item {
11 11
 
12 12
     /**
13
-	 * Stores a custom description for the item.
14
-	 *
15
-	 * @var string
16
-	 */
17
-	protected $custom_description = '';
18
-
19
-	/**
20
-	 * Stores the item quantity.
21
-	 *
22
-	 * @var int
23
-	 */
24
-	protected $quantity = 1;
25
-
26
-	/**
27
-	 * Is this item required?
28
-	 *
29
-	 * @var int
30
-	 */
31
-	protected $is_required = true;
32
-
33
-	/**
34
-	 * Are quantities allowed?
35
-	 *
36
-	 * @var int
37
-	 */
38
-	protected $allow_quantities = false;
13
+     * Stores a custom description for the item.
14
+     *
15
+     * @var string
16
+     */
17
+    protected $custom_description = '';
18
+
19
+    /**
20
+     * Stores the item quantity.
21
+     *
22
+     * @var int
23
+     */
24
+    protected $quantity = 1;
25
+
26
+    /**
27
+     * Is this item required?
28
+     *
29
+     * @var int
30
+     */
31
+    protected $is_required = true;
32
+
33
+    /**
34
+     * Are quantities allowed?
35
+     *
36
+     * @var int
37
+     */
38
+    protected $allow_quantities = false;
39 39
 
40 40
     /*
41 41
 	|--------------------------------------------------------------------------
@@ -53,90 +53,90 @@  discard block
 block discarded – undo
53 53
     */
54 54
 
55 55
     /**
56
-	 * Get the item name.
57
-	 *
58
-	 * @since 1.0.19
59
-	 * @param  string $context View or edit context.
60
-	 * @return string
61
-	 */
62
-	public function get_name( $context = 'view' ) {
63
-		$name = parent::get_name( $context );
64
-		return $name . wpinv_get_item_suffix( $this );
65
-	}
66
-
67
-	/**
68
-	 * Get the item description.
69
-	 *
70
-	 * @since 1.0.19
71
-	 * @param  string $context View or edit context.
72
-	 * @return string
73
-	 */
74
-	public function get_description( $context = 'view' ) {
75
-
76
-		if ( ! empty( $this->custom_description ) ) {
77
-			return $this->custom_description;
78
-		}
79
-
80
-		return parent::get_description( $context );
81
-	}
56
+     * Get the item name.
57
+     *
58
+     * @since 1.0.19
59
+     * @param  string $context View or edit context.
60
+     * @return string
61
+     */
62
+    public function get_name( $context = 'view' ) {
63
+        $name = parent::get_name( $context );
64
+        return $name . wpinv_get_item_suffix( $this );
65
+    }
66
+
67
+    /**
68
+     * Get the item description.
69
+     *
70
+     * @since 1.0.19
71
+     * @param  string $context View or edit context.
72
+     * @return string
73
+     */
74
+    public function get_description( $context = 'view' ) {
75
+
76
+        if ( ! empty( $this->custom_description ) ) {
77
+            return $this->custom_description;
78
+        }
79
+
80
+        return parent::get_description( $context );
81
+    }
82 82
 	
83
-	/**
84
-	 * Get the item qantity.
85
-	 *
86
-	 * @since 1.0.19
87
-	 * @param  string $context View or edit context.
88
-	 * @return int
89
-	 */
90
-	public function get_qantity( $context = 'view' ) {
91
-		$quantity = (int) $this->quantity;
92
-
93
-		if ( empty( $quantity ) || 1 > $quantity ) {
94
-			$quantity = 1;
95
-		}
96
-
97
-		if ( 'view' == $context ) {
98
-			return apply_filters( 'getpaid_payment_form_item_quanity', $quantity, $this );
99
-		}
100
-
101
-		return $quantity;
102
-
103
-	}
104
-
105
-	/**
106
-	 * Returns whether or not customers can update the item quantity.
107
-	 *
108
-	 * @since 1.0.19
109
-	 * @param  string $context View or edit context.
110
-	 * @return bool
111
-	 */
112
-	public function get_allow_quantities( $context = 'view' ) {
113
-		$allow_quantities = (bool) $this->allow_quantities;
114
-
115
-		if ( 'view' == $context ) {
116
-			return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
117
-		}
118
-
119
-		return $allow_quantities;
120
-
121
-	}
122
-
123
-	/**
124
-	 * Returns whether or not the item is required.
125
-	 *
126
-	 * @since 1.0.19
127
-	 * @param  string $context View or edit context.
128
-	 * @return bool
129
-	 */
130
-	public function get_is_required( $context = 'view' ) {
131
-		$is_required = (bool) $this->is_required;
132
-
133
-		if ( 'view' == $context ) {
134
-			return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
135
-		}
136
-
137
-		return $is_required;
138
-
139
-	}
83
+    /**
84
+     * Get the item qantity.
85
+     *
86
+     * @since 1.0.19
87
+     * @param  string $context View or edit context.
88
+     * @return int
89
+     */
90
+    public function get_qantity( $context = 'view' ) {
91
+        $quantity = (int) $this->quantity;
92
+
93
+        if ( empty( $quantity ) || 1 > $quantity ) {
94
+            $quantity = 1;
95
+        }
96
+
97
+        if ( 'view' == $context ) {
98
+            return apply_filters( 'getpaid_payment_form_item_quanity', $quantity, $this );
99
+        }
100
+
101
+        return $quantity;
102
+
103
+    }
104
+
105
+    /**
106
+     * Returns whether or not customers can update the item quantity.
107
+     *
108
+     * @since 1.0.19
109
+     * @param  string $context View or edit context.
110
+     * @return bool
111
+     */
112
+    public function get_allow_quantities( $context = 'view' ) {
113
+        $allow_quantities = (bool) $this->allow_quantities;
114
+
115
+        if ( 'view' == $context ) {
116
+            return apply_filters( 'getpaid_payment_form_item_allow_quantities', $allow_quantities, $this );
117
+        }
118
+
119
+        return $allow_quantities;
120
+
121
+    }
122
+
123
+    /**
124
+     * Returns whether or not the item is required.
125
+     *
126
+     * @since 1.0.19
127
+     * @param  string $context View or edit context.
128
+     * @return bool
129
+     */
130
+    public function get_is_required( $context = 'view' ) {
131
+        $is_required = (bool) $this->is_required;
132
+
133
+        if ( 'view' == $context ) {
134
+            return apply_filters( 'getpaid_payment_form_item_is_required', $is_required, $this );
135
+        }
136
+
137
+        return $is_required;
138
+
139
+    }
140 140
 
141 141
     /*
142 142
 	|--------------------------------------------------------------------------
@@ -148,60 +148,60 @@  discard block
 block discarded – undo
148 148
 	| object.
149 149
     */
150 150
 
151
-	/**
152
-	 * Set the item qantity.
153
-	 *
154
-	 * @since 1.0.19
155
-	 * @param  int $quantity The item quantity.
156
-	 */
157
-	public function set_quantity( $quantity ) {
158
-
159
-		if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
160
-			$quantity = 1;
161
-		}
162
-
163
-		$this->quantity = $quantity;
164
-
165
-	}
166
-
167
-	/**
168
-	 * Set whether or not the quantities are allowed.
169
-	 *
170
-	 * @since 1.0.19
171
-	 * @param  bool $allow_quantities
172
-	 */
173
-	public function set_allow_quantities( $allow_quantities ) {
174
-		$this->allow_quantities = (bool) $allow_quantities;
175
-	}
176
-
177
-	/**
178
-	 * Set whether or not the item is required.
179
-	 *
180
-	 * @since 1.0.19
181
-	 * @param  bool $is_required
182
-	 */
183
-	public function set_is_required( $is_required ) {
184
-		$this->is_required = (bool) $is_required;
185
-	}
186
-
187
-	/**
188
-	 * Sets the custom item description.
189
-	 *
190
-	 * @since 1.0.19
191
-	 * @param  string $description
192
-	 */
193
-	public function set_custom_description( $description ) {
194
-		$this->custom_description = $description;
195
-	}
151
+    /**
152
+     * Set the item qantity.
153
+     *
154
+     * @since 1.0.19
155
+     * @param  int $quantity The item quantity.
156
+     */
157
+    public function set_quantity( $quantity ) {
158
+
159
+        if ( empty( $quantity ) || ! is_numeric( $quantity ) ) {
160
+            $quantity = 1;
161
+        }
162
+
163
+        $this->quantity = $quantity;
164
+
165
+    }
166
+
167
+    /**
168
+     * Set whether or not the quantities are allowed.
169
+     *
170
+     * @since 1.0.19
171
+     * @param  bool $allow_quantities
172
+     */
173
+    public function set_allow_quantities( $allow_quantities ) {
174
+        $this->allow_quantities = (bool) $allow_quantities;
175
+    }
176
+
177
+    /**
178
+     * Set whether or not the item is required.
179
+     *
180
+     * @since 1.0.19
181
+     * @param  bool $is_required
182
+     */
183
+    public function set_is_required( $is_required ) {
184
+        $this->is_required = (bool) $is_required;
185
+    }
186
+
187
+    /**
188
+     * Sets the custom item description.
189
+     *
190
+     * @since 1.0.19
191
+     * @param  string $description
192
+     */
193
+    public function set_custom_description( $description ) {
194
+        $this->custom_description = $description;
195
+    }
196 196
 
197 197
     /**
198 198
      * We do not want to save items to the database.
199 199
      * 
200
-	 * @return int item id
200
+     * @return int item id
201 201
      */
202 202
     public function save( $data = array() ) {
203 203
         return $this->get_id();
204
-	}
204
+    }
205 205
 
206 206
     /*
207 207
 	|--------------------------------------------------------------------------
@@ -213,13 +213,13 @@  discard block
 block discarded – undo
213 213
 	*/
214 214
 
215 215
     /**
216
-	 * Checks whether the item has enabled dynamic pricing.
217
-	 *
218
-	 * @since 1.0.19
219
-	 * @return bool
220
-	 */
221
-	public function is_required() {
216
+     * Checks whether the item has enabled dynamic pricing.
217
+     *
218
+     * @since 1.0.19
219
+     * @return bool
220
+     */
221
+    public function is_required() {
222 222
         return (bool) $this->get_is_required();
223
-	}
223
+    }
224 224
 
225 225
 }
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-item-data-store.php 1 patch
Indentation   +193 added lines, -193 removed lines patch added patch discarded remove patch
@@ -4,7 +4,7 @@  discard block
 block discarded – undo
4 4
  *
5 5
  */
6 6
 if ( ! defined( 'ABSPATH' ) ) {
7
-	exit;
7
+    exit;
8 8
 }
9 9
 
10 10
 /**
@@ -14,212 +14,212 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class GetPaid_Item_Data_Store extends GetPaid_Data_Store_WP {
16 16
 
17
-	/**
18
-	 * Data stored in meta keys, but not considered "meta" for an item.
19
-	 *
20
-	 * @since 1.0.19
21
-	 * @var array
22
-	 */
23
-	protected $internal_meta_keys = array(
24
-		'_wpinv_price',
25
-		'_wpinv_vat_rule',
26
-		'_wpinv_vat_class',
27
-		'_wpinv_type',
28
-		'_wpinv_custom_id',
29
-		'_wpinv_custom_name',
30
-		'_wpinv_custom_singular_name',
31
-		'_wpinv_editable',
32
-		'_wpinv_dynamic_pricing',
33
-		'_minimum_price',
34
-		'_wpinv_is_recurring',
35
-		'_wpinv_recurring_period',
36
-		'_wpinv_recurring_interval',
37
-		'_wpinv_recurring_limit',
38
-		'_wpinv_free_trial',
39
-		'_wpinv_trial_period',
40
-		'_wpinv_trial_interval'
41
-	);
42
-
43
-	/**
44
-	 * A map of meta keys to data props.
45
-	 *
46
-	 * @since 1.0.19
47
-	 *
48
-	 * @var array
49
-	 */
50
-	protected $meta_key_to_props = array(
51
-		'_wpinv_price'                => 'price',
52
-		'_wpinv_vat_rule'             => 'vat_rule',
53
-		'_wpinv_vat_class'            => 'vat_class',
54
-		'_wpinv_type'                 => 'type',
55
-		'_wpinv_custom_id'            => 'custom_id',
56
-		'_wpinv_custom_name'          => 'custom_name',
57
-		'_wpinv_custom_singular_name' => 'custom_singular_name',
58
-		'_wpinv_editable'             => 'is_editable',
59
-		'_wpinv_dynamic_pricing'      => 'is_dynamic_pricing',
60
-		'_minimum_price'              => 'minimum_price',
61
-		'_wpinv_custom_name'          => 'custom_name',
62
-		'_wpinv_is_recurring'         => 'is_recurring',
63
-		'_wpinv_recurring_period'     => 'recurring_period',
64
-		'_wpinv_recurring_interval'   => 'recurring_interval',
65
-		'_wpinv_recurring_limit'      => 'recurring_limit',
66
-		'_wpinv_free_trial'           => 'is_free_trial',
67
-		'_wpinv_trial_period'         => 'trial_period',
68
-		'_wpinv_trial_interval'       => 'trial_interval',
69
-		'_wpinv_version'              => 'version',
70
-	);
71
-
72
-	/*
17
+    /**
18
+     * Data stored in meta keys, but not considered "meta" for an item.
19
+     *
20
+     * @since 1.0.19
21
+     * @var array
22
+     */
23
+    protected $internal_meta_keys = array(
24
+        '_wpinv_price',
25
+        '_wpinv_vat_rule',
26
+        '_wpinv_vat_class',
27
+        '_wpinv_type',
28
+        '_wpinv_custom_id',
29
+        '_wpinv_custom_name',
30
+        '_wpinv_custom_singular_name',
31
+        '_wpinv_editable',
32
+        '_wpinv_dynamic_pricing',
33
+        '_minimum_price',
34
+        '_wpinv_is_recurring',
35
+        '_wpinv_recurring_period',
36
+        '_wpinv_recurring_interval',
37
+        '_wpinv_recurring_limit',
38
+        '_wpinv_free_trial',
39
+        '_wpinv_trial_period',
40
+        '_wpinv_trial_interval'
41
+    );
42
+
43
+    /**
44
+     * A map of meta keys to data props.
45
+     *
46
+     * @since 1.0.19
47
+     *
48
+     * @var array
49
+     */
50
+    protected $meta_key_to_props = array(
51
+        '_wpinv_price'                => 'price',
52
+        '_wpinv_vat_rule'             => 'vat_rule',
53
+        '_wpinv_vat_class'            => 'vat_class',
54
+        '_wpinv_type'                 => 'type',
55
+        '_wpinv_custom_id'            => 'custom_id',
56
+        '_wpinv_custom_name'          => 'custom_name',
57
+        '_wpinv_custom_singular_name' => 'custom_singular_name',
58
+        '_wpinv_editable'             => 'is_editable',
59
+        '_wpinv_dynamic_pricing'      => 'is_dynamic_pricing',
60
+        '_minimum_price'              => 'minimum_price',
61
+        '_wpinv_custom_name'          => 'custom_name',
62
+        '_wpinv_is_recurring'         => 'is_recurring',
63
+        '_wpinv_recurring_period'     => 'recurring_period',
64
+        '_wpinv_recurring_interval'   => 'recurring_interval',
65
+        '_wpinv_recurring_limit'      => 'recurring_limit',
66
+        '_wpinv_free_trial'           => 'is_free_trial',
67
+        '_wpinv_trial_period'         => 'trial_period',
68
+        '_wpinv_trial_interval'       => 'trial_interval',
69
+        '_wpinv_version'              => 'version',
70
+    );
71
+
72
+    /*
73 73
 	|--------------------------------------------------------------------------
74 74
 	| CRUD Methods
75 75
 	|--------------------------------------------------------------------------
76 76
 	*/
77 77
 
78
-	/**
79
-	 * Method to create a new item in the database.
80
-	 *
81
-	 * @param WPInv_Item $item Item object.
82
-	 */
83
-	public function create( &$item ) {
84
-		$item->set_version( WPINV_VERSION );
85
-		$item->set_date_created( current_time('mysql') );
86
-
87
-		// Create a new post.
88
-		$id = wp_insert_post(
89
-			apply_filters(
90
-				'getpaid_new_item_data',
91
-				array(
92
-					'post_date'     => $item->get_date_created( 'edit' ),
93
-					'post_type'     => 'wpi_item',
94
-					'post_status'   => $this->get_post_status( $item ),
95
-					'ping_status'   => 'closed',
96
-					'post_author'   => $item->get_author( 'edit' ),
97
-					'post_title'    => $item->get_name( 'edit' ),
98
-					'post_parent'   => 0,
99
-					'post_excerpt'  => $item->get_description( 'edit' ),
100
-				)
101
-			),
102
-			true
103
-		);
104
-
105
-		if ( $id && ! is_wp_error( $id ) ) {
106
-			$item->set_id( $id );
107
-			$this->update_post_meta( $item );
108
-			$item->save_meta_data();
109
-			$item->apply_changes();
110
-			$this->clear_caches( $item );
111
-			return true;
112
-		}
113
-
114
-		if ( is_wp_error( $id ) ) {
115
-			$item->last_error = $id->get_error_message();
116
-		}
78
+    /**
79
+     * Method to create a new item in the database.
80
+     *
81
+     * @param WPInv_Item $item Item object.
82
+     */
83
+    public function create( &$item ) {
84
+        $item->set_version( WPINV_VERSION );
85
+        $item->set_date_created( current_time('mysql') );
86
+
87
+        // Create a new post.
88
+        $id = wp_insert_post(
89
+            apply_filters(
90
+                'getpaid_new_item_data',
91
+                array(
92
+                    'post_date'     => $item->get_date_created( 'edit' ),
93
+                    'post_type'     => 'wpi_item',
94
+                    'post_status'   => $this->get_post_status( $item ),
95
+                    'ping_status'   => 'closed',
96
+                    'post_author'   => $item->get_author( 'edit' ),
97
+                    'post_title'    => $item->get_name( 'edit' ),
98
+                    'post_parent'   => 0,
99
+                    'post_excerpt'  => $item->get_description( 'edit' ),
100
+                )
101
+            ),
102
+            true
103
+        );
104
+
105
+        if ( $id && ! is_wp_error( $id ) ) {
106
+            $item->set_id( $id );
107
+            $this->update_post_meta( $item );
108
+            $item->save_meta_data();
109
+            $item->apply_changes();
110
+            $this->clear_caches( $item );
111
+            return true;
112
+        }
113
+
114
+        if ( is_wp_error( $id ) ) {
115
+            $item->last_error = $id->get_error_message();
116
+        }
117 117
 		
118
-		return false;
119
-	}
120
-
121
-	/**
122
-	 * Method to read an item from the database.
123
-	 *
124
-	 * @param WPInv_Item $item Item object.
125
-	 *
126
-	 */
127
-	public function read( &$item ) {
128
-
129
-		$item->set_defaults();
130
-		$item_object = get_post( $item->get_id() );
131
-
132
-		if ( ! $item->get_id() || ! $item_object || $item_object->post_type != 'wpi_item' ) {
133
-			$item->last_error = __( 'Invalid item.', 'invoicing' );
134
-			return false;
135
-		}
136
-
137
-		$item->set_props(
138
-			array(
139
-				'parent_id'     => $item_object->post_parent,
140
-				'date_created'  => 0 < $item_object->post_date_gmt ? $item_object->post_date_gmt : null,
141
-				'date_modified' => 0 < $item_object->post_modified_gmt ? $item_object->post_modified_gmt : null,
142
-				'status'        => $item_object->post_status,
143
-				'name'          => $item_object->post_title,
144
-				'description'   => $item_object->post_excerpt,
145
-				'author'        => $item_object->post_author,
146
-			)
147
-		);
148
-
149
-		$this->read_object_data( $item, $item_object );
150
-		$item->read_meta_data();
151
-		$item->set_object_read( true );
152
-
153
-	}
154
-
155
-	/**
156
-	 * Method to update an item in the database.
157
-	 *
158
-	 * @param WPInv_Item $item Item object.
159
-	 */
160
-	public function update( &$item ) {
161
-		$item->save_meta_data();
162
-		$item->set_version( WPINV_VERSION );
163
-
164
-		if ( null === $item->get_date_created( 'edit' ) ) {
165
-			$item->set_date_created(  current_time('mysql') );
166
-		}
167
-
168
-		$changes = $item->get_changes();
169
-
170
-		// Only update the post when the post data changes.
171
-		if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'parent_id', 'post_excerpt', 'name', 'author' ), array_keys( $changes ) ) ) {
172
-			$post_data = array(
173
-				'post_date'         => $item->get_date_created( 'edit' ),
174
-				'post_status'       => $item->get_status( 'edit' ),
175
-				'post_parent'       => $item->get_parent_id( 'edit' ),
176
-				'post_excerpt'      => $item->get_description( 'edit' ),
177
-				'post_modified'     => $item->get_date_modified( 'edit' ),
178
-				'post_title'        => $item->get_name( 'edit' ),
179
-				'post_author'       => $item->get_author( 'edit' ),
180
-			);
181
-
182
-			/**
183
-			 * When updating this object, to prevent infinite loops, use $wpdb
184
-			 * to update data, since wp_update_post spawns more calls to the
185
-			 * save_post action.
186
-			 *
187
-			 * This ensures hooks are fired by either WP itself (admin screen save),
188
-			 * or an update purely from CRUD.
189
-			 */
190
-			if ( doing_action( 'save_post' ) ) {
191
-				$GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $item->get_id() ) );
192
-				clean_post_cache( $item->get_id() );
193
-			} else {
194
-				wp_update_post( array_merge( array( 'ID' => $item->get_id() ), $post_data ) );
195
-			}
196
-			$item->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
197
-		}
198
-		$this->update_post_meta( $item );
199
-		$item->apply_changes();
200
-		$this->clear_caches( $item );
201
-	}
202
-
203
-	/*
118
+        return false;
119
+    }
120
+
121
+    /**
122
+     * Method to read an item from the database.
123
+     *
124
+     * @param WPInv_Item $item Item object.
125
+     *
126
+     */
127
+    public function read( &$item ) {
128
+
129
+        $item->set_defaults();
130
+        $item_object = get_post( $item->get_id() );
131
+
132
+        if ( ! $item->get_id() || ! $item_object || $item_object->post_type != 'wpi_item' ) {
133
+            $item->last_error = __( 'Invalid item.', 'invoicing' );
134
+            return false;
135
+        }
136
+
137
+        $item->set_props(
138
+            array(
139
+                'parent_id'     => $item_object->post_parent,
140
+                'date_created'  => 0 < $item_object->post_date_gmt ? $item_object->post_date_gmt : null,
141
+                'date_modified' => 0 < $item_object->post_modified_gmt ? $item_object->post_modified_gmt : null,
142
+                'status'        => $item_object->post_status,
143
+                'name'          => $item_object->post_title,
144
+                'description'   => $item_object->post_excerpt,
145
+                'author'        => $item_object->post_author,
146
+            )
147
+        );
148
+
149
+        $this->read_object_data( $item, $item_object );
150
+        $item->read_meta_data();
151
+        $item->set_object_read( true );
152
+
153
+    }
154
+
155
+    /**
156
+     * Method to update an item in the database.
157
+     *
158
+     * @param WPInv_Item $item Item object.
159
+     */
160
+    public function update( &$item ) {
161
+        $item->save_meta_data();
162
+        $item->set_version( WPINV_VERSION );
163
+
164
+        if ( null === $item->get_date_created( 'edit' ) ) {
165
+            $item->set_date_created(  current_time('mysql') );
166
+        }
167
+
168
+        $changes = $item->get_changes();
169
+
170
+        // Only update the post when the post data changes.
171
+        if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'parent_id', 'post_excerpt', 'name', 'author' ), array_keys( $changes ) ) ) {
172
+            $post_data = array(
173
+                'post_date'         => $item->get_date_created( 'edit' ),
174
+                'post_status'       => $item->get_status( 'edit' ),
175
+                'post_parent'       => $item->get_parent_id( 'edit' ),
176
+                'post_excerpt'      => $item->get_description( 'edit' ),
177
+                'post_modified'     => $item->get_date_modified( 'edit' ),
178
+                'post_title'        => $item->get_name( 'edit' ),
179
+                'post_author'       => $item->get_author( 'edit' ),
180
+            );
181
+
182
+            /**
183
+             * When updating this object, to prevent infinite loops, use $wpdb
184
+             * to update data, since wp_update_post spawns more calls to the
185
+             * save_post action.
186
+             *
187
+             * This ensures hooks are fired by either WP itself (admin screen save),
188
+             * or an update purely from CRUD.
189
+             */
190
+            if ( doing_action( 'save_post' ) ) {
191
+                $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $item->get_id() ) );
192
+                clean_post_cache( $item->get_id() );
193
+            } else {
194
+                wp_update_post( array_merge( array( 'ID' => $item->get_id() ), $post_data ) );
195
+            }
196
+            $item->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
197
+        }
198
+        $this->update_post_meta( $item );
199
+        $item->apply_changes();
200
+        $this->clear_caches( $item );
201
+    }
202
+
203
+    /*
204 204
 	|--------------------------------------------------------------------------
205 205
 	| Additional Methods
206 206
 	|--------------------------------------------------------------------------
207 207
 	*/
208 208
 
209
-	/**
210
-	 * Helper method that updates all the post meta for an item based on it's settings in the WPInv_Item class.
211
-	 *
212
-	 * @param WPInv_Item $item WPInv_Item object.
213
-	 * @since 1.0.19
214
-	 */
215
-	protected function update_post_meta( &$item ) {
209
+    /**
210
+     * Helper method that updates all the post meta for an item based on it's settings in the WPInv_Item class.
211
+     *
212
+     * @param WPInv_Item $item WPInv_Item object.
213
+     * @since 1.0.19
214
+     */
215
+    protected function update_post_meta( &$item ) {
216 216
 
217
-		// Ensure that we have a custom id.
217
+        // Ensure that we have a custom id.
218 218
         if ( ! $item->get_custom_id() ) {
219 219
             $item->set_custom_id( $item->get_id() );
220
-		}
220
+        }
221 221
 
222
-		parent::update_post_meta( $item );
223
-	}
222
+        parent::update_post_meta( $item );
223
+    }
224 224
 
225 225
 }
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-payment-form-data-store.php 1 patch
Indentation   +153 added lines, -153 removed lines patch added patch discarded remove patch
@@ -4,7 +4,7 @@  discard block
 block discarded – undo
4 4
  *
5 5
  */
6 6
 if ( ! defined( 'ABSPATH' ) ) {
7
-	exit;
7
+    exit;
8 8
 }
9 9
 
10 10
 /**
@@ -14,163 +14,163 @@  discard block
 block discarded – undo
14 14
  */
15 15
 class GetPaid_Payment_Form_Data_Store extends GetPaid_Data_Store_WP {
16 16
 
17
-	/**
18
-	 * Data stored in meta keys, but not considered "meta" for a form.
19
-	 *
20
-	 * @since 1.0.19
21
-	 * @var array
22
-	 */
23
-	protected $internal_meta_keys = array(
24
-		'wpinv_form_elements',
25
-		'wpinv_form_items',
26
-		'wpinv_form_earned',
27
-		'wpinv_form_refunded',
28
-		'wpinv_form_cancelled',
29
-		'wpinv_form_failed'
30
-	);
31
-
32
-	/**
33
-	 * A map of meta keys to data props.
34
-	 *
35
-	 * @since 1.0.19
36
-	 *
37
-	 * @var array
38
-	 */
39
-	protected $meta_key_to_props = array(
40
-		'wpinv_form_elements'  => 'elements',
41
-		'wpinv_form_items'     => 'items',
42
-		'wpinv_form_earned'    => 'earned',
43
-		'wpinv_form_refunded'  => 'refunded',
44
-		'wpinv_form_cancelled' => 'cancelled',
45
-		'wpinv_form_failed'    => 'failed',
46
-	);
47
-
48
-	/*
17
+    /**
18
+     * Data stored in meta keys, but not considered "meta" for a form.
19
+     *
20
+     * @since 1.0.19
21
+     * @var array
22
+     */
23
+    protected $internal_meta_keys = array(
24
+        'wpinv_form_elements',
25
+        'wpinv_form_items',
26
+        'wpinv_form_earned',
27
+        'wpinv_form_refunded',
28
+        'wpinv_form_cancelled',
29
+        'wpinv_form_failed'
30
+    );
31
+
32
+    /**
33
+     * A map of meta keys to data props.
34
+     *
35
+     * @since 1.0.19
36
+     *
37
+     * @var array
38
+     */
39
+    protected $meta_key_to_props = array(
40
+        'wpinv_form_elements'  => 'elements',
41
+        'wpinv_form_items'     => 'items',
42
+        'wpinv_form_earned'    => 'earned',
43
+        'wpinv_form_refunded'  => 'refunded',
44
+        'wpinv_form_cancelled' => 'cancelled',
45
+        'wpinv_form_failed'    => 'failed',
46
+    );
47
+
48
+    /*
49 49
 	|--------------------------------------------------------------------------
50 50
 	| CRUD Methods
51 51
 	|--------------------------------------------------------------------------
52 52
 	*/
53 53
 
54
-	/**
55
-	 * Method to create a new form in the database.
56
-	 *
57
-	 * @param GetPaid_Payment_Form $form Form object.
58
-	 */
59
-	public function create( &$form ) {
60
-		$form->set_version( WPINV_VERSION );
61
-		$form->set_date_created( current_time('mysql') );
62
-
63
-		// Create a new post.
64
-		$id = wp_insert_post(
65
-			apply_filters(
66
-				'getpaid_new_payment_form_data',
67
-				array(
68
-					'post_date'     => $form->get_date_created( 'edit' ),
69
-					'post_type'     => 'wpi_payment_form',
70
-					'post_status'   => $this->get_post_status( $form ),
71
-					'ping_status'   => 'closed',
72
-					'post_author'   => $form->get_author( 'edit' ),
73
-					'post_title'    => $form->get_name( 'edit' ),
74
-				)
75
-			),
76
-			true
77
-		);
78
-
79
-		if ( $id && ! is_wp_error( $id ) ) {
80
-			$form->set_id( $id );
81
-			$this->update_post_meta( $form );
82
-			$form->save_meta_data();
83
-			$form->apply_changes();
84
-			$this->clear_caches( $form );
85
-			return true;
86
-		}
87
-
88
-		if ( is_wp_error( $id ) ) {
89
-			$form->last_error = $id->get_error_message();
90
-		}
91
-
92
-		return false;
93
-	}
94
-
95
-	/**
96
-	 * Method to read a form from the database.
97
-	 *
98
-	 * @param GetPaid_Payment_Form $form Form object.
99
-	 *
100
-	 */
101
-	public function read( &$form ) {
102
-
103
-		$form->set_defaults();
104
-		$form_object = get_post( $form->get_id() );
105
-
106
-		if ( ! $form->get_id() || ! $form_object || $form_object->post_type != 'wpi_payment_form' ) {
107
-			$form->last_error = __( 'Invalid form.', 'invoicing' );
108
-			return false;
109
-		}
110
-
111
-		$form->set_props(
112
-			array(
113
-				'date_created'  => 0 < $form_object->post_date_gmt ? $form_object->post_date_gmt : null,
114
-				'date_modified' => 0 < $form_object->post_modified_gmt ? $form_object->post_modified_gmt : null,
115
-				'status'        => $form_object->post_status,
116
-				'name'          => $form_object->post_title,
117
-				'author'        => $form_object->post_author,
118
-			)
119
-		);
120
-
121
-		$this->read_object_data( $form, $form_object );
122
-		$form->read_meta_data();
123
-		$form->set_object_read( true );
124
-
125
-	}
126
-
127
-	/**
128
-	 * Method to update a form in the database.
129
-	 *
130
-	 * @param GetPaid_Payment_Form $form Form object.
131
-	 */
132
-	public function update( &$form ) {
133
-		$form->save_meta_data();
134
-		$form->set_version( WPINV_VERSION );
135
-
136
-		if ( null === $form->get_date_created( 'edit' ) ) {
137
-			$form->set_date_created(  current_time('mysql') );
138
-		}
139
-
140
-		$changes = $form->get_changes();
141
-
142
-		// Only update the post when the post data changes.
143
-		if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author' ), array_keys( $changes ) ) ) {
144
-			$post_data = array(
145
-				'post_date'         => $form->get_date_created( 'edit' ),
146
-				'post_status'       => $form->get_status( 'edit' ),
147
-				'post_title'        => $form->get_name( 'edit' ),
148
-				'post_author'       => $form->get_author( 'edit' ),
149
-				'post_modified'     => $form->get_date_modified( 'edit' ),
150
-			);
151
-
152
-			/**
153
-			 * When updating this object, to prevent infinite loops, use $wpdb
154
-			 * to update data, since wp_update_post spawns more calls to the
155
-			 * save_post action.
156
-			 *
157
-			 * This ensures hooks are fired by either WP itself (admin screen save),
158
-			 * or an update purely from CRUD.
159
-			 */
160
-			if ( doing_action( 'save_post' ) ) {
161
-				$GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $form->get_id() ) );
162
-				clean_post_cache( $form->get_id() );
163
-			} else {
164
-				wp_update_post( array_merge( array( 'ID' => $form->get_id() ), $post_data ) );
165
-			}
166
-			$form->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
167
-		}
168
-		$this->update_post_meta( $form );
169
-		$form->apply_changes();
170
-		$this->clear_caches( $form );
171
-	}
172
-
173
-	/*
54
+    /**
55
+     * Method to create a new form in the database.
56
+     *
57
+     * @param GetPaid_Payment_Form $form Form object.
58
+     */
59
+    public function create( &$form ) {
60
+        $form->set_version( WPINV_VERSION );
61
+        $form->set_date_created( current_time('mysql') );
62
+
63
+        // Create a new post.
64
+        $id = wp_insert_post(
65
+            apply_filters(
66
+                'getpaid_new_payment_form_data',
67
+                array(
68
+                    'post_date'     => $form->get_date_created( 'edit' ),
69
+                    'post_type'     => 'wpi_payment_form',
70
+                    'post_status'   => $this->get_post_status( $form ),
71
+                    'ping_status'   => 'closed',
72
+                    'post_author'   => $form->get_author( 'edit' ),
73
+                    'post_title'    => $form->get_name( 'edit' ),
74
+                )
75
+            ),
76
+            true
77
+        );
78
+
79
+        if ( $id && ! is_wp_error( $id ) ) {
80
+            $form->set_id( $id );
81
+            $this->update_post_meta( $form );
82
+            $form->save_meta_data();
83
+            $form->apply_changes();
84
+            $this->clear_caches( $form );
85
+            return true;
86
+        }
87
+
88
+        if ( is_wp_error( $id ) ) {
89
+            $form->last_error = $id->get_error_message();
90
+        }
91
+
92
+        return false;
93
+    }
94
+
95
+    /**
96
+     * Method to read a form from the database.
97
+     *
98
+     * @param GetPaid_Payment_Form $form Form object.
99
+     *
100
+     */
101
+    public function read( &$form ) {
102
+
103
+        $form->set_defaults();
104
+        $form_object = get_post( $form->get_id() );
105
+
106
+        if ( ! $form->get_id() || ! $form_object || $form_object->post_type != 'wpi_payment_form' ) {
107
+            $form->last_error = __( 'Invalid form.', 'invoicing' );
108
+            return false;
109
+        }
110
+
111
+        $form->set_props(
112
+            array(
113
+                'date_created'  => 0 < $form_object->post_date_gmt ? $form_object->post_date_gmt : null,
114
+                'date_modified' => 0 < $form_object->post_modified_gmt ? $form_object->post_modified_gmt : null,
115
+                'status'        => $form_object->post_status,
116
+                'name'          => $form_object->post_title,
117
+                'author'        => $form_object->post_author,
118
+            )
119
+        );
120
+
121
+        $this->read_object_data( $form, $form_object );
122
+        $form->read_meta_data();
123
+        $form->set_object_read( true );
124
+
125
+    }
126
+
127
+    /**
128
+     * Method to update a form in the database.
129
+     *
130
+     * @param GetPaid_Payment_Form $form Form object.
131
+     */
132
+    public function update( &$form ) {
133
+        $form->save_meta_data();
134
+        $form->set_version( WPINV_VERSION );
135
+
136
+        if ( null === $form->get_date_created( 'edit' ) ) {
137
+            $form->set_date_created(  current_time('mysql') );
138
+        }
139
+
140
+        $changes = $form->get_changes();
141
+
142
+        // Only update the post when the post data changes.
143
+        if ( array_intersect( array( 'date_created', 'date_modified', 'status', 'name', 'author' ), array_keys( $changes ) ) ) {
144
+            $post_data = array(
145
+                'post_date'         => $form->get_date_created( 'edit' ),
146
+                'post_status'       => $form->get_status( 'edit' ),
147
+                'post_title'        => $form->get_name( 'edit' ),
148
+                'post_author'       => $form->get_author( 'edit' ),
149
+                'post_modified'     => $form->get_date_modified( 'edit' ),
150
+            );
151
+
152
+            /**
153
+             * When updating this object, to prevent infinite loops, use $wpdb
154
+             * to update data, since wp_update_post spawns more calls to the
155
+             * save_post action.
156
+             *
157
+             * This ensures hooks are fired by either WP itself (admin screen save),
158
+             * or an update purely from CRUD.
159
+             */
160
+            if ( doing_action( 'save_post' ) ) {
161
+                $GLOBALS['wpdb']->update( $GLOBALS['wpdb']->posts, $post_data, array( 'ID' => $form->get_id() ) );
162
+                clean_post_cache( $form->get_id() );
163
+            } else {
164
+                wp_update_post( array_merge( array( 'ID' => $form->get_id() ), $post_data ) );
165
+            }
166
+            $form->read_meta_data( true ); // Refresh internal meta data, in case things were hooked into `save_post` or another WP hook.
167
+        }
168
+        $this->update_post_meta( $form );
169
+        $form->apply_changes();
170
+        $this->clear_caches( $form );
171
+    }
172
+
173
+    /*
174 174
 	|--------------------------------------------------------------------------
175 175
 	| Additional Methods
176 176
 	|--------------------------------------------------------------------------
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-data.php 1 patch
Indentation   +807 added lines, -807 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  */
10 10
 
11 11
 if ( ! defined( 'ABSPATH' ) ) {
12
-	exit;
12
+    exit;
13 13
 }
14 14
 
15 15
 /**
@@ -21,814 +21,814 @@  discard block
 block discarded – undo
21 21
  */
22 22
 abstract class GetPaid_Data {
23 23
 
24
-	/**
25
-	 * ID for this object.
26
-	 *
27
-	 * @since 1.0.19
28
-	 * @var int
29
-	 */
30
-	protected $id = 0;
31
-
32
-	/**
33
-	 * Core data for this object. Name value pairs (name + default value).
34
-	 *
35
-	 * @since 1.0.19
36
-	 * @var array
37
-	 */
38
-	protected $data = array();
39
-
40
-	/**
41
-	 * Core data changes for this object.
42
-	 *
43
-	 * @since 1.0.19
44
-	 * @var array
45
-	 */
46
-	protected $changes = array();
47
-
48
-	/**
49
-	 * This is false until the object is read from the DB.
50
-	 *
51
-	 * @since 1.0.19
52
-	 * @var bool
53
-	 */
54
-	protected $object_read = false;
55
-
56
-	/**
57
-	 * This is the name of this object type.
58
-	 *
59
-	 * @since 1.0.19
60
-	 * @var string
61
-	 */
62
-	protected $object_type = 'data';
63
-
64
-	/**
65
-	 * Extra data for this object. Name value pairs (name + default value).
66
-	 * Used as a standard way for sub classes (like item types) to add
67
-	 * additional information to an inherited class.
68
-	 *
69
-	 * @since 1.0.19
70
-	 * @var array
71
-	 */
72
-	protected $extra_data = array();
73
-
74
-	/**
75
-	 * Set to _data on construct so we can track and reset data if needed.
76
-	 *
77
-	 * @since 1.0.19
78
-	 * @var array
79
-	 */
80
-	protected $default_data = array();
81
-
82
-	/**
83
-	 * Contains a reference to the data store for this class.
84
-	 *
85
-	 * @since 1.0.19
86
-	 * @var GetPaid_Data_Store
87
-	 */
88
-	protected $data_store;
89
-
90
-	/**
91
-	 * Stores meta in cache for future reads.
92
-	 * A group must be set to to enable caching.
93
-	 *
94
-	 * @since 1.0.19
95
-	 * @var string
96
-	 */
97
-	protected $cache_group = '';
98
-
99
-	/**
100
-	 * Stores the last error.
101
-	 *
102
-	 * @since 1.0.19
103
-	 * @var string
104
-	 */
105
-	public $last_error = '';
106
-
107
-	/**
108
-	 * Stores additional meta data.
109
-	 *
110
-	 * @since 1.0.19
111
-	 * @var array
112
-	 */
113
-	protected $meta_data = null;
114
-
115
-	/**
116
-	 * Default constructor.
117
-	 *
118
-	 * @param int|object|array $read ID to load from the DB (optional) or already queried data.
119
-	 */
120
-	public function __construct( $read = 0 ) {
121
-		$this->data         = array_merge( $this->data, $this->extra_data );
122
-		$this->default_data = $this->data;
123
-	}
124
-
125
-	/**
126
-	 * Only store the object ID to avoid serializing the data object instance.
127
-	 *
128
-	 * @return array
129
-	 */
130
-	public function __sleep() {
131
-		return array( 'id' );
132
-	}
133
-
134
-	/**
135
-	 * Re-run the constructor with the object ID.
136
-	 *
137
-	 * If the object no longer exists, remove the ID.
138
-	 */
139
-	public function __wakeup() {
140
-		try {
141
-			$this->__construct( absint( $this->id ) );
142
-		} catch ( Exception $e ) {
143
-			$this->set_id( 0 );
144
-			$this->set_object_read( true );
145
-		}
146
-	}
147
-
148
-	/**
149
-	 * When the object is cloned, make sure meta is duplicated correctly.
150
-	 *
151
-	 * @since 1.0.19
152
-	 */
153
-	public function __clone() {
154
-		$this->maybe_read_meta_data();
155
-		if ( ! empty( $this->meta_data ) ) {
156
-			foreach ( $this->meta_data as $array_key => $meta ) {
157
-				$this->meta_data[ $array_key ] = clone $meta;
158
-				if ( ! empty( $meta->id ) ) {
159
-					$this->meta_data[ $array_key ]->id = null;
160
-				}
161
-			}
162
-		}
163
-	}
164
-
165
-	/**
166
-	 * Get the data store.
167
-	 *
168
-	 * @since  1.0.19
169
-	 * @return object
170
-	 */
171
-	public function get_data_store() {
172
-		return $this->data_store;
173
-	}
174
-
175
-	/**
176
-	 * Get the object type.
177
-	 *
178
-	 * @since  1.0.19
179
-	 * @return string
180
-	 */
181
-	public function get_object_type() {
182
-		return $this->object_type;
183
-	}
184
-
185
-	/**
186
-	 * Returns the unique ID for this object.
187
-	 *
188
-	 * @since  1.0.19
189
-	 * @return int
190
-	 */
191
-	public function get_id() {
192
-		return $this->id;
193
-	}
194
-
195
-	/**
196
-	 * Get form status.
197
-	 *
198
-	 * @since 1.0.19
199
-	 * @param  string $context View or edit context.
200
-	 * @return string
201
-	 */
202
-	public function get_status( $context = 'view' ) {
203
-		return $this->get_prop( 'status', $context );
204
-    }
205
-
206
-	/**
207
-	 * Delete an object, set the ID to 0, and return result.
208
-	 *
209
-	 * @since  1.0.19
210
-	 * @param  bool $force_delete Should the data be deleted permanently.
211
-	 * @return bool result
212
-	 */
213
-	public function delete( $force_delete = false ) {
214
-		if ( $this->data_store ) {
215
-			$this->data_store->delete( $this, array( 'force_delete' => $force_delete ) );
216
-			$this->set_id( 0 );
217
-			return true;
218
-		}
219
-		return false;
220
-	}
221
-
222
-	/**
223
-	 * Save should create or update based on object existence.
224
-	 *
225
-	 * @since  1.0.19
226
-	 * @return int
227
-	 */
228
-	public function save() {
229
-		if ( ! $this->data_store ) {
230
-			return $this->get_id();
231
-		}
232
-
233
-		/**
234
-		 * Trigger action before saving to the DB. Allows you to adjust object props before save.
235
-		 *
236
-		 * @param GetPaid_Data          $this The object being saved.
237
-		 * @param GetPaid_Data_Store_WP $data_store The data store persisting the data.
238
-		 */
239
-		do_action( 'getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store );
240
-
241
-		if ( $this->get_id() ) {
242
-			$this->data_store->update( $this );
243
-		} else {
244
-			$this->data_store->create( $this );
245
-		}
246
-
247
-		/**
248
-		 * Trigger action after saving to the DB.
249
-		 *
250
-		 * @param GetPaid_Data          $this The object being saved.
251
-		 * @param GetPaid_Data_Store_WP $data_store The data store persisting the data.
252
-		 */
253
-		do_action( 'getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store );
254
-
255
-		return $this->get_id();
256
-	}
257
-
258
-	/**
259
-	 * Change data to JSON format.
260
-	 *
261
-	 * @since  1.0.19
262
-	 * @return string Data in JSON format.
263
-	 */
264
-	public function __toString() {
265
-		return wp_json_encode( $this->get_data() );
266
-	}
267
-
268
-	/**
269
-	 * Returns all data for this object.
270
-	 *
271
-	 * @since  1.0.19
272
-	 * @return array
273
-	 */
274
-	public function get_data() {
275
-		return array_merge( array( 'id' => $this->get_id() ), $this->data, array( 'meta_data' => $this->get_meta_data() ) );
276
-	}
277
-
278
-	/**
279
-	 * Returns array of expected data keys for this object.
280
-	 *
281
-	 * @since   1.0.19
282
-	 * @return array
283
-	 */
284
-	public function get_data_keys() {
285
-		return array_keys( $this->data );
286
-	}
287
-
288
-	/**
289
-	 * Returns all "extra" data keys for an object (for sub objects like item types).
290
-	 *
291
-	 * @since  1.0.19
292
-	 * @return array
293
-	 */
294
-	public function get_extra_data_keys() {
295
-		return array_keys( $this->extra_data );
296
-	}
297
-
298
-	/**
299
-	 * Filter null meta values from array.
300
-	 *
301
-	 * @since  1.0.19
302
-	 * @param mixed $meta Meta value to check.
303
-	 * @return bool
304
-	 */
305
-	protected function filter_null_meta( $meta ) {
306
-		return ! is_null( $meta->value );
307
-	}
308
-
309
-	/**
310
-	 * Get All Meta Data.
311
-	 *
312
-	 * @since 1.0.19
313
-	 * @return array of objects.
314
-	 */
315
-	public function get_meta_data() {
316
-		$this->maybe_read_meta_data();
317
-		return array_values( array_filter( $this->meta_data, array( $this, 'filter_null_meta' ) ) );
318
-	}
319
-
320
-	/**
321
-	 * Check if the key is an internal one.
322
-	 *
323
-	 * @since  1.0.19
324
-	 * @param  string $key Key to check.
325
-	 * @return bool   true if it's an internal key, false otherwise
326
-	 */
327
-	protected function is_internal_meta_key( $key ) {
328
-		$internal_meta_key = ! empty( $key ) && $this->data_store && in_array( $key, $this->data_store->get_internal_meta_keys(), true );
329
-
330
-		if ( ! $internal_meta_key ) {
331
-			return false;
332
-		}
333
-
334
-		$has_setter_or_getter = is_callable( array( $this, 'set_' . $key ) ) || is_callable( array( $this, 'get_' . $key ) );
335
-
336
-		if ( ! $has_setter_or_getter ) {
337
-			return false;
338
-		}
339
-
340
-		/* translators: %s: $key Key to check */
341
-		getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid' ), $key ), '1.0.19' );
342
-
343
-		return true;
344
-	}
345
-
346
-	/**
347
-	 * Get Meta Data by Key.
348
-	 *
349
-	 * @since  1.0.19
350
-	 * @param  string $key Meta Key.
351
-	 * @param  bool   $single return first found meta with key, or all with $key.
352
-	 * @param  string $context What the value is for. Valid values are view and edit.
353
-	 * @return mixed
354
-	 */
355
-	public function get_meta( $key = '', $single = true, $context = 'view' ) {
356
-
357
-		// Check if this is an internal meta key.
358
-		if ( $this->is_internal_meta_key( $key ) ) {
359
-			$function = 'get_' . $key;
360
-
361
-			if ( is_callable( array( $this, $function ) ) ) {
362
-				return $this->{$function}();
363
-			}
364
-		}
365
-
366
-		// Read the meta data if not yet read.
367
-		$this->maybe_read_meta_data();
368
-		$meta_data  = $this->get_meta_data();
369
-		$array_keys = array_keys( wp_list_pluck( $meta_data, 'key' ), $key, true );
370
-		$value      = $single ? '' : array();
371
-
372
-		if ( ! empty( $array_keys ) ) {
373
-			// We don't use the $this->meta_data property directly here because we don't want meta with a null value (i.e. meta which has been deleted via $this->delete_meta_data()).
374
-			if ( $single ) {
375
-				$value = $meta_data[ current( $array_keys ) ]->value;
376
-			} else {
377
-				$value = array_intersect_key( $meta_data, array_flip( $array_keys ) );
378
-			}
379
-		}
380
-
381
-		if ( 'view' === $context ) {
382
-			$value = apply_filters( $this->get_hook_prefix() . $key, $value, $this );
383
-		}
384
-
385
-		return $value;
386
-	}
387
-
388
-	/**
389
-	 * See if meta data exists, since get_meta always returns a '' or array().
390
-	 *
391
-	 * @since  1.0.19
392
-	 * @param  string $key Meta Key.
393
-	 * @return boolean
394
-	 */
395
-	public function meta_exists( $key = '' ) {
396
-		$this->maybe_read_meta_data();
397
-		$array_keys = wp_list_pluck( $this->get_meta_data(), 'key' );
398
-		return in_array( $key, $array_keys, true );
399
-	}
400
-
401
-	/**
402
-	 * Set all meta data from array.
403
-	 *
404
-	 * @since 1.0.19
405
-	 * @param array $data Key/Value pairs.
406
-	 */
407
-	public function set_meta_data( $data ) {
408
-		if ( ! empty( $data ) && is_array( $data ) ) {
409
-			$this->maybe_read_meta_data();
410
-			foreach ( $data as $meta ) {
411
-				$meta = (array) $meta;
412
-				if ( isset( $meta['key'], $meta['value'], $meta['id'] ) ) {
413
-					$this->meta_data[] = new GetPaid_Meta_Data(
414
-						array(
415
-							'id'    => $meta['id'],
416
-							'key'   => $meta['key'],
417
-							'value' => $meta['value'],
418
-						)
419
-					);
420
-				}
421
-			}
422
-		}
423
-	}
424
-
425
-	/**
426
-	 * Add meta data.
427
-	 *
428
-	 * @since 1.0.19
429
-	 *
430
-	 * @param string       $key Meta key.
431
-	 * @param string|array $value Meta value.
432
-	 * @param bool         $unique Should this be a unique key?.
433
-	 */
434
-	public function add_meta_data( $key, $value, $unique = false ) {
435
-		if ( $this->is_internal_meta_key( $key ) ) {
436
-			$function = 'set_' . $key;
437
-
438
-			if ( is_callable( array( $this, $function ) ) ) {
439
-				return $this->{$function}( $value );
440
-			}
441
-		}
442
-
443
-		$this->maybe_read_meta_data();
444
-		if ( $unique ) {
445
-			$this->delete_meta_data( $key );
446
-		}
447
-		$this->meta_data[] = new GetPaid_Meta_Data(
448
-			array(
449
-				'key'   => $key,
450
-				'value' => $value,
451
-			)
452
-		);
453
-	}
454
-
455
-	/**
456
-	 * Update meta data by key or ID, if provided.
457
-	 *
458
-	 * @since  1.0.19
459
-	 *
460
-	 * @param  string       $key Meta key.
461
-	 * @param  string|array $value Meta value.
462
-	 * @param  int          $meta_id Meta ID.
463
-	 */
464
-	public function update_meta_data( $key, $value, $meta_id = 0 ) {
465
-		if ( $this->is_internal_meta_key( $key ) ) {
466
-			$function = 'set_' . $key;
467
-
468
-			if ( is_callable( array( $this, $function ) ) ) {
469
-				return $this->{$function}( $value );
470
-			}
471
-		}
472
-
473
-		$this->maybe_read_meta_data();
474
-
475
-		$array_key = false;
476
-
477
-		if ( $meta_id ) {
478
-			$array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true );
479
-			$array_key  = $array_keys ? current( $array_keys ) : false;
480
-		} else {
481
-			// Find matches by key.
482
-			$matches = array();
483
-			foreach ( $this->meta_data as $meta_data_array_key => $meta ) {
484
-				if ( $meta->key === $key ) {
485
-					$matches[] = $meta_data_array_key;
486
-				}
487
-			}
488
-
489
-			if ( ! empty( $matches ) ) {
490
-				// Set matches to null so only one key gets the new value.
491
-				foreach ( $matches as $meta_data_array_key ) {
492
-					$this->meta_data[ $meta_data_array_key ]->value = null;
493
-				}
494
-				$array_key = current( $matches );
495
-			}
496
-		}
497
-
498
-		if ( false !== $array_key ) {
499
-			$meta        = $this->meta_data[ $array_key ];
500
-			$meta->key   = $key;
501
-			$meta->value = $value;
502
-		} else {
503
-			$this->add_meta_data( $key, $value, true );
504
-		}
505
-	}
506
-
507
-	/**
508
-	 * Delete meta data.
509
-	 *
510
-	 * @since 1.0.19
511
-	 * @param string $key Meta key.
512
-	 */
513
-	public function delete_meta_data( $key ) {
514
-		$this->maybe_read_meta_data();
515
-		$array_keys = array_keys( wp_list_pluck( $this->meta_data, 'key' ), $key, true );
516
-
517
-		if ( $array_keys ) {
518
-			foreach ( $array_keys as $array_key ) {
519
-				$this->meta_data[ $array_key ]->value = null;
520
-			}
521
-		}
522
-	}
523
-
524
-	/**
525
-	 * Delete meta data.
526
-	 *
527
-	 * @since 1.0.19
528
-	 * @param int $mid Meta ID.
529
-	 */
530
-	public function delete_meta_data_by_mid( $mid ) {
531
-		$this->maybe_read_meta_data();
532
-		$array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), (int) $mid, true );
533
-
534
-		if ( $array_keys ) {
535
-			foreach ( $array_keys as $array_key ) {
536
-				$this->meta_data[ $array_key ]->value = null;
537
-			}
538
-		}
539
-	}
540
-
541
-	/**
542
-	 * Read meta data if null.
543
-	 *
544
-	 * @since 1.0.19
545
-	 */
546
-	protected function maybe_read_meta_data() {
547
-		if ( is_null( $this->meta_data ) ) {
548
-			$this->read_meta_data();
549
-		}
550
-	}
551
-
552
-	/**
553
-	 * Read Meta Data from the database. Ignore any internal properties.
554
-	 * Uses it's own caches because get_metadata does not provide meta_ids.
555
-	 *
556
-	 * @since 1.0.19
557
-	 * @param bool $force_read True to force a new DB read (and update cache).
558
-	 */
559
-	public function read_meta_data( $force_read = false ) {
560
-		$this->meta_data = array();
561
-		$cache_loaded    = false;
562
-
563
-		if ( ! $this->get_id() ) {
564
-			return;
565
-		}
566
-
567
-		if ( ! $this->data_store ) {
568
-			return;
569
-		}
570
-
571
-		if ( ! empty( $this->cache_group ) ) {
572
-			$cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id();
573
-		}
574
-
575
-		if ( ! $force_read ) {
576
-			if ( ! empty( $this->cache_group ) ) {
577
-				$cached_meta  = wp_cache_get( $cache_key, $this->cache_group );
578
-				$cache_loaded = ! empty( $cached_meta );
579
-			}
580
-		}
581
-
582
-		$raw_meta_data = $cache_loaded ? $cached_meta : $this->data_store->read_meta( $this );
583
-		if ( $raw_meta_data ) {
584
-			foreach ( $raw_meta_data as $meta ) {
585
-				$this->meta_data[] = new GetPaid_Meta_Data(
586
-					array(
587
-						'id'    => (int) $meta->meta_id,
588
-						'key'   => $meta->meta_key,
589
-						'value' => maybe_unserialize( $meta->meta_value ),
590
-					)
591
-				);
592
-			}
593
-
594
-			if ( ! $cache_loaded && ! empty( $this->cache_group ) ) {
595
-				wp_cache_set( $cache_key, $raw_meta_data, $this->cache_group );
596
-			}
597
-		}
598
-	}
599
-
600
-	/**
601
-	 * Update Meta Data in the database.
602
-	 *
603
-	 * @since 1.0.19
604
-	 */
605
-	public function save_meta_data() {
606
-		if ( ! $this->data_store || is_null( $this->meta_data ) ) {
607
-			return;
608
-		}
609
-		foreach ( $this->meta_data as $array_key => $meta ) {
610
-			if ( is_null( $meta->value ) ) {
611
-				if ( ! empty( $meta->id ) ) {
612
-					$this->data_store->delete_meta( $this, $meta );
613
-					unset( $this->meta_data[ $array_key ] );
614
-				}
615
-			} elseif ( empty( $meta->id ) ) {
616
-				$meta->id = $this->data_store->add_meta( $this, $meta );
617
-				$meta->apply_changes();
618
-			} else {
619
-				if ( $meta->get_changes() ) {
620
-					$this->data_store->update_meta( $this, $meta );
621
-					$meta->apply_changes();
622
-				}
623
-			}
624
-		}
625
-		if ( ! empty( $this->cache_group ) ) {
626
-			$cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id();
627
-			wp_cache_delete( $cache_key, $this->cache_group );
628
-		}
629
-	}
630
-
631
-	/**
632
-	 * Set ID.
633
-	 *
634
-	 * @since 1.0.19
635
-	 * @param int $id ID.
636
-	 */
637
-	public function set_id( $id ) {
638
-		$this->id = absint( $id );
639
-	}
640
-
641
-	/**
642
-	 * Sets item status.
643
-	 *
644
-	 * @since 1.0.19
645
-	 * @param  string $status New status.
646
-	 * @return array details of change.
647
-	 */
648
-	public function set_status( $status ) {
24
+    /**
25
+     * ID for this object.
26
+     *
27
+     * @since 1.0.19
28
+     * @var int
29
+     */
30
+    protected $id = 0;
31
+
32
+    /**
33
+     * Core data for this object. Name value pairs (name + default value).
34
+     *
35
+     * @since 1.0.19
36
+     * @var array
37
+     */
38
+    protected $data = array();
39
+
40
+    /**
41
+     * Core data changes for this object.
42
+     *
43
+     * @since 1.0.19
44
+     * @var array
45
+     */
46
+    protected $changes = array();
47
+
48
+    /**
49
+     * This is false until the object is read from the DB.
50
+     *
51
+     * @since 1.0.19
52
+     * @var bool
53
+     */
54
+    protected $object_read = false;
55
+
56
+    /**
57
+     * This is the name of this object type.
58
+     *
59
+     * @since 1.0.19
60
+     * @var string
61
+     */
62
+    protected $object_type = 'data';
63
+
64
+    /**
65
+     * Extra data for this object. Name value pairs (name + default value).
66
+     * Used as a standard way for sub classes (like item types) to add
67
+     * additional information to an inherited class.
68
+     *
69
+     * @since 1.0.19
70
+     * @var array
71
+     */
72
+    protected $extra_data = array();
73
+
74
+    /**
75
+     * Set to _data on construct so we can track and reset data if needed.
76
+     *
77
+     * @since 1.0.19
78
+     * @var array
79
+     */
80
+    protected $default_data = array();
81
+
82
+    /**
83
+     * Contains a reference to the data store for this class.
84
+     *
85
+     * @since 1.0.19
86
+     * @var GetPaid_Data_Store
87
+     */
88
+    protected $data_store;
89
+
90
+    /**
91
+     * Stores meta in cache for future reads.
92
+     * A group must be set to to enable caching.
93
+     *
94
+     * @since 1.0.19
95
+     * @var string
96
+     */
97
+    protected $cache_group = '';
98
+
99
+    /**
100
+     * Stores the last error.
101
+     *
102
+     * @since 1.0.19
103
+     * @var string
104
+     */
105
+    public $last_error = '';
106
+
107
+    /**
108
+     * Stores additional meta data.
109
+     *
110
+     * @since 1.0.19
111
+     * @var array
112
+     */
113
+    protected $meta_data = null;
114
+
115
+    /**
116
+     * Default constructor.
117
+     *
118
+     * @param int|object|array $read ID to load from the DB (optional) or already queried data.
119
+     */
120
+    public function __construct( $read = 0 ) {
121
+        $this->data         = array_merge( $this->data, $this->extra_data );
122
+        $this->default_data = $this->data;
123
+    }
124
+
125
+    /**
126
+     * Only store the object ID to avoid serializing the data object instance.
127
+     *
128
+     * @return array
129
+     */
130
+    public function __sleep() {
131
+        return array( 'id' );
132
+    }
133
+
134
+    /**
135
+     * Re-run the constructor with the object ID.
136
+     *
137
+     * If the object no longer exists, remove the ID.
138
+     */
139
+    public function __wakeup() {
140
+        try {
141
+            $this->__construct( absint( $this->id ) );
142
+        } catch ( Exception $e ) {
143
+            $this->set_id( 0 );
144
+            $this->set_object_read( true );
145
+        }
146
+    }
147
+
148
+    /**
149
+     * When the object is cloned, make sure meta is duplicated correctly.
150
+     *
151
+     * @since 1.0.19
152
+     */
153
+    public function __clone() {
154
+        $this->maybe_read_meta_data();
155
+        if ( ! empty( $this->meta_data ) ) {
156
+            foreach ( $this->meta_data as $array_key => $meta ) {
157
+                $this->meta_data[ $array_key ] = clone $meta;
158
+                if ( ! empty( $meta->id ) ) {
159
+                    $this->meta_data[ $array_key ]->id = null;
160
+                }
161
+            }
162
+        }
163
+    }
164
+
165
+    /**
166
+     * Get the data store.
167
+     *
168
+     * @since  1.0.19
169
+     * @return object
170
+     */
171
+    public function get_data_store() {
172
+        return $this->data_store;
173
+    }
174
+
175
+    /**
176
+     * Get the object type.
177
+     *
178
+     * @since  1.0.19
179
+     * @return string
180
+     */
181
+    public function get_object_type() {
182
+        return $this->object_type;
183
+    }
184
+
185
+    /**
186
+     * Returns the unique ID for this object.
187
+     *
188
+     * @since  1.0.19
189
+     * @return int
190
+     */
191
+    public function get_id() {
192
+        return $this->id;
193
+    }
194
+
195
+    /**
196
+     * Get form status.
197
+     *
198
+     * @since 1.0.19
199
+     * @param  string $context View or edit context.
200
+     * @return string
201
+     */
202
+    public function get_status( $context = 'view' ) {
203
+        return $this->get_prop( 'status', $context );
204
+    }
205
+
206
+    /**
207
+     * Delete an object, set the ID to 0, and return result.
208
+     *
209
+     * @since  1.0.19
210
+     * @param  bool $force_delete Should the data be deleted permanently.
211
+     * @return bool result
212
+     */
213
+    public function delete( $force_delete = false ) {
214
+        if ( $this->data_store ) {
215
+            $this->data_store->delete( $this, array( 'force_delete' => $force_delete ) );
216
+            $this->set_id( 0 );
217
+            return true;
218
+        }
219
+        return false;
220
+    }
221
+
222
+    /**
223
+     * Save should create or update based on object existence.
224
+     *
225
+     * @since  1.0.19
226
+     * @return int
227
+     */
228
+    public function save() {
229
+        if ( ! $this->data_store ) {
230
+            return $this->get_id();
231
+        }
232
+
233
+        /**
234
+         * Trigger action before saving to the DB. Allows you to adjust object props before save.
235
+         *
236
+         * @param GetPaid_Data          $this The object being saved.
237
+         * @param GetPaid_Data_Store_WP $data_store The data store persisting the data.
238
+         */
239
+        do_action( 'getpaid_before_' . $this->object_type . '_object_save', $this, $this->data_store );
240
+
241
+        if ( $this->get_id() ) {
242
+            $this->data_store->update( $this );
243
+        } else {
244
+            $this->data_store->create( $this );
245
+        }
246
+
247
+        /**
248
+         * Trigger action after saving to the DB.
249
+         *
250
+         * @param GetPaid_Data          $this The object being saved.
251
+         * @param GetPaid_Data_Store_WP $data_store The data store persisting the data.
252
+         */
253
+        do_action( 'getpaid_after_' . $this->object_type . '_object_save', $this, $this->data_store );
254
+
255
+        return $this->get_id();
256
+    }
257
+
258
+    /**
259
+     * Change data to JSON format.
260
+     *
261
+     * @since  1.0.19
262
+     * @return string Data in JSON format.
263
+     */
264
+    public function __toString() {
265
+        return wp_json_encode( $this->get_data() );
266
+    }
267
+
268
+    /**
269
+     * Returns all data for this object.
270
+     *
271
+     * @since  1.0.19
272
+     * @return array
273
+     */
274
+    public function get_data() {
275
+        return array_merge( array( 'id' => $this->get_id() ), $this->data, array( 'meta_data' => $this->get_meta_data() ) );
276
+    }
277
+
278
+    /**
279
+     * Returns array of expected data keys for this object.
280
+     *
281
+     * @since   1.0.19
282
+     * @return array
283
+     */
284
+    public function get_data_keys() {
285
+        return array_keys( $this->data );
286
+    }
287
+
288
+    /**
289
+     * Returns all "extra" data keys for an object (for sub objects like item types).
290
+     *
291
+     * @since  1.0.19
292
+     * @return array
293
+     */
294
+    public function get_extra_data_keys() {
295
+        return array_keys( $this->extra_data );
296
+    }
297
+
298
+    /**
299
+     * Filter null meta values from array.
300
+     *
301
+     * @since  1.0.19
302
+     * @param mixed $meta Meta value to check.
303
+     * @return bool
304
+     */
305
+    protected function filter_null_meta( $meta ) {
306
+        return ! is_null( $meta->value );
307
+    }
308
+
309
+    /**
310
+     * Get All Meta Data.
311
+     *
312
+     * @since 1.0.19
313
+     * @return array of objects.
314
+     */
315
+    public function get_meta_data() {
316
+        $this->maybe_read_meta_data();
317
+        return array_values( array_filter( $this->meta_data, array( $this, 'filter_null_meta' ) ) );
318
+    }
319
+
320
+    /**
321
+     * Check if the key is an internal one.
322
+     *
323
+     * @since  1.0.19
324
+     * @param  string $key Key to check.
325
+     * @return bool   true if it's an internal key, false otherwise
326
+     */
327
+    protected function is_internal_meta_key( $key ) {
328
+        $internal_meta_key = ! empty( $key ) && $this->data_store && in_array( $key, $this->data_store->get_internal_meta_keys(), true );
329
+
330
+        if ( ! $internal_meta_key ) {
331
+            return false;
332
+        }
333
+
334
+        $has_setter_or_getter = is_callable( array( $this, 'set_' . $key ) ) || is_callable( array( $this, 'get_' . $key ) );
335
+
336
+        if ( ! $has_setter_or_getter ) {
337
+            return false;
338
+        }
339
+
340
+        /* translators: %s: $key Key to check */
341
+        getpaid_doing_it_wrong( __FUNCTION__, sprintf( __( 'Generic add/update/get meta methods should not be used for internal meta data, including "%s". Use getters and setters.', 'getpaid' ), $key ), '1.0.19' );
342
+
343
+        return true;
344
+    }
345
+
346
+    /**
347
+     * Get Meta Data by Key.
348
+     *
349
+     * @since  1.0.19
350
+     * @param  string $key Meta Key.
351
+     * @param  bool   $single return first found meta with key, or all with $key.
352
+     * @param  string $context What the value is for. Valid values are view and edit.
353
+     * @return mixed
354
+     */
355
+    public function get_meta( $key = '', $single = true, $context = 'view' ) {
356
+
357
+        // Check if this is an internal meta key.
358
+        if ( $this->is_internal_meta_key( $key ) ) {
359
+            $function = 'get_' . $key;
360
+
361
+            if ( is_callable( array( $this, $function ) ) ) {
362
+                return $this->{$function}();
363
+            }
364
+        }
365
+
366
+        // Read the meta data if not yet read.
367
+        $this->maybe_read_meta_data();
368
+        $meta_data  = $this->get_meta_data();
369
+        $array_keys = array_keys( wp_list_pluck( $meta_data, 'key' ), $key, true );
370
+        $value      = $single ? '' : array();
371
+
372
+        if ( ! empty( $array_keys ) ) {
373
+            // We don't use the $this->meta_data property directly here because we don't want meta with a null value (i.e. meta which has been deleted via $this->delete_meta_data()).
374
+            if ( $single ) {
375
+                $value = $meta_data[ current( $array_keys ) ]->value;
376
+            } else {
377
+                $value = array_intersect_key( $meta_data, array_flip( $array_keys ) );
378
+            }
379
+        }
380
+
381
+        if ( 'view' === $context ) {
382
+            $value = apply_filters( $this->get_hook_prefix() . $key, $value, $this );
383
+        }
384
+
385
+        return $value;
386
+    }
387
+
388
+    /**
389
+     * See if meta data exists, since get_meta always returns a '' or array().
390
+     *
391
+     * @since  1.0.19
392
+     * @param  string $key Meta Key.
393
+     * @return boolean
394
+     */
395
+    public function meta_exists( $key = '' ) {
396
+        $this->maybe_read_meta_data();
397
+        $array_keys = wp_list_pluck( $this->get_meta_data(), 'key' );
398
+        return in_array( $key, $array_keys, true );
399
+    }
400
+
401
+    /**
402
+     * Set all meta data from array.
403
+     *
404
+     * @since 1.0.19
405
+     * @param array $data Key/Value pairs.
406
+     */
407
+    public function set_meta_data( $data ) {
408
+        if ( ! empty( $data ) && is_array( $data ) ) {
409
+            $this->maybe_read_meta_data();
410
+            foreach ( $data as $meta ) {
411
+                $meta = (array) $meta;
412
+                if ( isset( $meta['key'], $meta['value'], $meta['id'] ) ) {
413
+                    $this->meta_data[] = new GetPaid_Meta_Data(
414
+                        array(
415
+                            'id'    => $meta['id'],
416
+                            'key'   => $meta['key'],
417
+                            'value' => $meta['value'],
418
+                        )
419
+                    );
420
+                }
421
+            }
422
+        }
423
+    }
424
+
425
+    /**
426
+     * Add meta data.
427
+     *
428
+     * @since 1.0.19
429
+     *
430
+     * @param string       $key Meta key.
431
+     * @param string|array $value Meta value.
432
+     * @param bool         $unique Should this be a unique key?.
433
+     */
434
+    public function add_meta_data( $key, $value, $unique = false ) {
435
+        if ( $this->is_internal_meta_key( $key ) ) {
436
+            $function = 'set_' . $key;
437
+
438
+            if ( is_callable( array( $this, $function ) ) ) {
439
+                return $this->{$function}( $value );
440
+            }
441
+        }
442
+
443
+        $this->maybe_read_meta_data();
444
+        if ( $unique ) {
445
+            $this->delete_meta_data( $key );
446
+        }
447
+        $this->meta_data[] = new GetPaid_Meta_Data(
448
+            array(
449
+                'key'   => $key,
450
+                'value' => $value,
451
+            )
452
+        );
453
+    }
454
+
455
+    /**
456
+     * Update meta data by key or ID, if provided.
457
+     *
458
+     * @since  1.0.19
459
+     *
460
+     * @param  string       $key Meta key.
461
+     * @param  string|array $value Meta value.
462
+     * @param  int          $meta_id Meta ID.
463
+     */
464
+    public function update_meta_data( $key, $value, $meta_id = 0 ) {
465
+        if ( $this->is_internal_meta_key( $key ) ) {
466
+            $function = 'set_' . $key;
467
+
468
+            if ( is_callable( array( $this, $function ) ) ) {
469
+                return $this->{$function}( $value );
470
+            }
471
+        }
472
+
473
+        $this->maybe_read_meta_data();
474
+
475
+        $array_key = false;
476
+
477
+        if ( $meta_id ) {
478
+            $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), $meta_id, true );
479
+            $array_key  = $array_keys ? current( $array_keys ) : false;
480
+        } else {
481
+            // Find matches by key.
482
+            $matches = array();
483
+            foreach ( $this->meta_data as $meta_data_array_key => $meta ) {
484
+                if ( $meta->key === $key ) {
485
+                    $matches[] = $meta_data_array_key;
486
+                }
487
+            }
488
+
489
+            if ( ! empty( $matches ) ) {
490
+                // Set matches to null so only one key gets the new value.
491
+                foreach ( $matches as $meta_data_array_key ) {
492
+                    $this->meta_data[ $meta_data_array_key ]->value = null;
493
+                }
494
+                $array_key = current( $matches );
495
+            }
496
+        }
497
+
498
+        if ( false !== $array_key ) {
499
+            $meta        = $this->meta_data[ $array_key ];
500
+            $meta->key   = $key;
501
+            $meta->value = $value;
502
+        } else {
503
+            $this->add_meta_data( $key, $value, true );
504
+        }
505
+    }
506
+
507
+    /**
508
+     * Delete meta data.
509
+     *
510
+     * @since 1.0.19
511
+     * @param string $key Meta key.
512
+     */
513
+    public function delete_meta_data( $key ) {
514
+        $this->maybe_read_meta_data();
515
+        $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'key' ), $key, true );
516
+
517
+        if ( $array_keys ) {
518
+            foreach ( $array_keys as $array_key ) {
519
+                $this->meta_data[ $array_key ]->value = null;
520
+            }
521
+        }
522
+    }
523
+
524
+    /**
525
+     * Delete meta data.
526
+     *
527
+     * @since 1.0.19
528
+     * @param int $mid Meta ID.
529
+     */
530
+    public function delete_meta_data_by_mid( $mid ) {
531
+        $this->maybe_read_meta_data();
532
+        $array_keys = array_keys( wp_list_pluck( $this->meta_data, 'id' ), (int) $mid, true );
533
+
534
+        if ( $array_keys ) {
535
+            foreach ( $array_keys as $array_key ) {
536
+                $this->meta_data[ $array_key ]->value = null;
537
+            }
538
+        }
539
+    }
540
+
541
+    /**
542
+     * Read meta data if null.
543
+     *
544
+     * @since 1.0.19
545
+     */
546
+    protected function maybe_read_meta_data() {
547
+        if ( is_null( $this->meta_data ) ) {
548
+            $this->read_meta_data();
549
+        }
550
+    }
551
+
552
+    /**
553
+     * Read Meta Data from the database. Ignore any internal properties.
554
+     * Uses it's own caches because get_metadata does not provide meta_ids.
555
+     *
556
+     * @since 1.0.19
557
+     * @param bool $force_read True to force a new DB read (and update cache).
558
+     */
559
+    public function read_meta_data( $force_read = false ) {
560
+        $this->meta_data = array();
561
+        $cache_loaded    = false;
562
+
563
+        if ( ! $this->get_id() ) {
564
+            return;
565
+        }
566
+
567
+        if ( ! $this->data_store ) {
568
+            return;
569
+        }
570
+
571
+        if ( ! empty( $this->cache_group ) ) {
572
+            $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id();
573
+        }
574
+
575
+        if ( ! $force_read ) {
576
+            if ( ! empty( $this->cache_group ) ) {
577
+                $cached_meta  = wp_cache_get( $cache_key, $this->cache_group );
578
+                $cache_loaded = ! empty( $cached_meta );
579
+            }
580
+        }
581
+
582
+        $raw_meta_data = $cache_loaded ? $cached_meta : $this->data_store->read_meta( $this );
583
+        if ( $raw_meta_data ) {
584
+            foreach ( $raw_meta_data as $meta ) {
585
+                $this->meta_data[] = new GetPaid_Meta_Data(
586
+                    array(
587
+                        'id'    => (int) $meta->meta_id,
588
+                        'key'   => $meta->meta_key,
589
+                        'value' => maybe_unserialize( $meta->meta_value ),
590
+                    )
591
+                );
592
+            }
593
+
594
+            if ( ! $cache_loaded && ! empty( $this->cache_group ) ) {
595
+                wp_cache_set( $cache_key, $raw_meta_data, $this->cache_group );
596
+            }
597
+        }
598
+    }
599
+
600
+    /**
601
+     * Update Meta Data in the database.
602
+     *
603
+     * @since 1.0.19
604
+     */
605
+    public function save_meta_data() {
606
+        if ( ! $this->data_store || is_null( $this->meta_data ) ) {
607
+            return;
608
+        }
609
+        foreach ( $this->meta_data as $array_key => $meta ) {
610
+            if ( is_null( $meta->value ) ) {
611
+                if ( ! empty( $meta->id ) ) {
612
+                    $this->data_store->delete_meta( $this, $meta );
613
+                    unset( $this->meta_data[ $array_key ] );
614
+                }
615
+            } elseif ( empty( $meta->id ) ) {
616
+                $meta->id = $this->data_store->add_meta( $this, $meta );
617
+                $meta->apply_changes();
618
+            } else {
619
+                if ( $meta->get_changes() ) {
620
+                    $this->data_store->update_meta( $this, $meta );
621
+                    $meta->apply_changes();
622
+                }
623
+            }
624
+        }
625
+        if ( ! empty( $this->cache_group ) ) {
626
+            $cache_key = GetPaid_Cache_Helper::get_cache_prefix( $this->cache_group ) . GetPaid_Cache_Helper::get_cache_prefix( 'object_' . $this->get_id() ) . 'object_meta_' . $this->get_id();
627
+            wp_cache_delete( $cache_key, $this->cache_group );
628
+        }
629
+    }
630
+
631
+    /**
632
+     * Set ID.
633
+     *
634
+     * @since 1.0.19
635
+     * @param int $id ID.
636
+     */
637
+    public function set_id( $id ) {
638
+        $this->id = absint( $id );
639
+    }
640
+
641
+    /**
642
+     * Sets item status.
643
+     *
644
+     * @since 1.0.19
645
+     * @param  string $status New status.
646
+     * @return array details of change.
647
+     */
648
+    public function set_status( $status ) {
649 649
         $old_status = $this->get_status();
650 650
 
651 651
         $this->set_prop( 'status', $status );
652 652
 
653
-		return array(
654
-			'from' => $old_status,
655
-			'to'   => $status,
656
-		);
657
-    }
658
-
659
-	/**
660
-	 * Set all props to default values.
661
-	 *
662
-	 * @since 1.0.19
663
-	 */
664
-	public function set_defaults() {
665
-		$this->data    = $this->default_data;
666
-		$this->changes = array();
667
-		$this->set_object_read( false );
668
-	}
669
-
670
-	/**
671
-	 * Set object read property.
672
-	 *
673
-	 * @since 1.0.19
674
-	 * @param boolean $read Should read?.
675
-	 */
676
-	public function set_object_read( $read = true ) {
677
-		$this->object_read = (bool) $read;
678
-	}
679
-
680
-	/**
681
-	 * Get object read property.
682
-	 *
683
-	 * @since  1.0.19
684
-	 * @return boolean
685
-	 */
686
-	public function get_object_read() {
687
-		return (bool) $this->object_read;
688
-	}
689
-
690
-	/**
691
-	 * Set a collection of props in one go, collect any errors, and return the result.
692
-	 * Only sets using public methods.
693
-	 *
694
-	 * @since  1.0.19
695
-	 *
696
-	 * @param array  $props Key value pairs to set. Key is the prop and should map to a setter function name.
697
-	 * @param string $context In what context to run this.
698
-	 *
699
-	 * @return bool|WP_Error
700
-	 */
701
-	public function set_props( $props, $context = 'set' ) {
702
-		$errors = false;
703
-
704
-		foreach ( $props as $prop => $value ) {
705
-			try {
706
-				/**
707
-				 * Checks if the prop being set is allowed, and the value is not null.
708
-				 */
709
-				if ( is_null( $value ) || in_array( $prop, array( 'prop', 'date_prop', 'meta_data' ), true ) ) {
710
-					continue;
711
-				}
712
-				$setter = "set_$prop";
713
-
714
-				if ( is_callable( array( $this, $setter ) ) ) {
715
-					$this->{$setter}( $value );
716
-				}
717
-			} catch ( Exception $e ) {
718
-				if ( ! $errors ) {
719
-					$errors = new WP_Error();
720
-				}
721
-				$errors->add( $e->getCode(), $e->getMessage() );
722
-				$this->last_error = $e->getMessage();
723
-			}
724
-		}
725
-
726
-		return $errors && count( $errors->get_error_codes() ) ? $errors : true;
727
-	}
728
-
729
-	/**
730
-	 * Sets a prop for a setter method.
731
-	 *
732
-	 * This stores changes in a special array so we can track what needs saving
733
-	 * the the DB later.
734
-	 *
735
-	 * @since 1.0.19
736
-	 * @param string $prop Name of prop to set.
737
-	 * @param mixed  $value Value of the prop.
738
-	 */
739
-	protected function set_prop( $prop, $value ) {
740
-		if ( array_key_exists( $prop, $this->data ) ) {
741
-			if ( true === $this->object_read ) {
742
-				if ( $value !== $this->data[ $prop ] || array_key_exists( $prop, $this->changes ) ) {
743
-					$this->changes[ $prop ] = $value;
744
-				}
745
-			} else {
746
-				$this->data[ $prop ] = $value;
747
-			}
748
-		}
749
-	}
750
-
751
-	/**
752
-	 * Return data changes only.
753
-	 *
754
-	 * @since 1.0.19
755
-	 * @return array
756
-	 */
757
-	public function get_changes() {
758
-		return $this->changes;
759
-	}
760
-
761
-	/**
762
-	 * Merge changes with data and clear.
763
-	 *
764
-	 * @since 1.0.19
765
-	 */
766
-	public function apply_changes() {
767
-		$this->data    = array_replace_recursive( $this->data, $this->changes );
768
-		$this->changes = array();
769
-	}
770
-
771
-	/**
772
-	 * Prefix for action and filter hooks on data.
773
-	 *
774
-	 * @since  1.0.19
775
-	 * @return string
776
-	 */
777
-	protected function get_hook_prefix() {
778
-		return 'wpinv_get_' . $this->object_type . '_';
779
-	}
780
-
781
-	/**
782
-	 * Gets a prop for a getter method.
783
-	 *
784
-	 * Gets the value from either current pending changes, or the data itself.
785
-	 * Context controls what happens to the value before it's returned.
786
-	 *
787
-	 * @since  1.0.19
788
-	 * @param  string $prop Name of prop to get.
789
-	 * @param  string $context What the value is for. Valid values are view and edit.
790
-	 * @return mixed
791
-	 */
792
-	protected function get_prop( $prop, $context = 'view' ) {
793
-		$value = null;
794
-
795
-		if ( array_key_exists( $prop, $this->data ) ) {
796
-			$value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ];
797
-
798
-			if ( 'view' === $context ) {
799
-				$value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );
800
-			}
801
-		}
802
-
803
-		return $value;
804
-	}
805
-
806
-	/**
807
-	 * Sets a date prop whilst handling formatting and datetime objects.
808
-	 *
809
-	 * @since 1.0.19
810
-	 * @param string         $prop Name of prop to set.
811
-	 * @param string|integer $value Value of the prop.
812
-	 */
813
-	protected function set_date_prop( $prop, $value ) {
814
-
815
-		if ( empty( $value ) ) {
816
-			$this->set_prop( $prop, null );
817
-			return;
818
-		}
819
-		$this->set_prop( $prop, $value );
820
-
821
-	}
822
-
823
-	/**
824
-	 * When invalid data is found, throw an exception unless reading from the DB.
825
-	 *
826
-	 * @throws Exception Data Exception.
827
-	 * @since 1.0.19
828
-	 * @param string $code             Error code.
829
-	 * @param string $message          Error message.
830
-	 */
831
-	protected function error( $code, $message ) {
832
-		throw new Exception( $message, $code );
833
-	}
653
+        return array(
654
+            'from' => $old_status,
655
+            'to'   => $status,
656
+        );
657
+    }
658
+
659
+    /**
660
+     * Set all props to default values.
661
+     *
662
+     * @since 1.0.19
663
+     */
664
+    public function set_defaults() {
665
+        $this->data    = $this->default_data;
666
+        $this->changes = array();
667
+        $this->set_object_read( false );
668
+    }
669
+
670
+    /**
671
+     * Set object read property.
672
+     *
673
+     * @since 1.0.19
674
+     * @param boolean $read Should read?.
675
+     */
676
+    public function set_object_read( $read = true ) {
677
+        $this->object_read = (bool) $read;
678
+    }
679
+
680
+    /**
681
+     * Get object read property.
682
+     *
683
+     * @since  1.0.19
684
+     * @return boolean
685
+     */
686
+    public function get_object_read() {
687
+        return (bool) $this->object_read;
688
+    }
689
+
690
+    /**
691
+     * Set a collection of props in one go, collect any errors, and return the result.
692
+     * Only sets using public methods.
693
+     *
694
+     * @since  1.0.19
695
+     *
696
+     * @param array  $props Key value pairs to set. Key is the prop and should map to a setter function name.
697
+     * @param string $context In what context to run this.
698
+     *
699
+     * @return bool|WP_Error
700
+     */
701
+    public function set_props( $props, $context = 'set' ) {
702
+        $errors = false;
703
+
704
+        foreach ( $props as $prop => $value ) {
705
+            try {
706
+                /**
707
+                 * Checks if the prop being set is allowed, and the value is not null.
708
+                 */
709
+                if ( is_null( $value ) || in_array( $prop, array( 'prop', 'date_prop', 'meta_data' ), true ) ) {
710
+                    continue;
711
+                }
712
+                $setter = "set_$prop";
713
+
714
+                if ( is_callable( array( $this, $setter ) ) ) {
715
+                    $this->{$setter}( $value );
716
+                }
717
+            } catch ( Exception $e ) {
718
+                if ( ! $errors ) {
719
+                    $errors = new WP_Error();
720
+                }
721
+                $errors->add( $e->getCode(), $e->getMessage() );
722
+                $this->last_error = $e->getMessage();
723
+            }
724
+        }
725
+
726
+        return $errors && count( $errors->get_error_codes() ) ? $errors : true;
727
+    }
728
+
729
+    /**
730
+     * Sets a prop for a setter method.
731
+     *
732
+     * This stores changes in a special array so we can track what needs saving
733
+     * the the DB later.
734
+     *
735
+     * @since 1.0.19
736
+     * @param string $prop Name of prop to set.
737
+     * @param mixed  $value Value of the prop.
738
+     */
739
+    protected function set_prop( $prop, $value ) {
740
+        if ( array_key_exists( $prop, $this->data ) ) {
741
+            if ( true === $this->object_read ) {
742
+                if ( $value !== $this->data[ $prop ] || array_key_exists( $prop, $this->changes ) ) {
743
+                    $this->changes[ $prop ] = $value;
744
+                }
745
+            } else {
746
+                $this->data[ $prop ] = $value;
747
+            }
748
+        }
749
+    }
750
+
751
+    /**
752
+     * Return data changes only.
753
+     *
754
+     * @since 1.0.19
755
+     * @return array
756
+     */
757
+    public function get_changes() {
758
+        return $this->changes;
759
+    }
760
+
761
+    /**
762
+     * Merge changes with data and clear.
763
+     *
764
+     * @since 1.0.19
765
+     */
766
+    public function apply_changes() {
767
+        $this->data    = array_replace_recursive( $this->data, $this->changes );
768
+        $this->changes = array();
769
+    }
770
+
771
+    /**
772
+     * Prefix for action and filter hooks on data.
773
+     *
774
+     * @since  1.0.19
775
+     * @return string
776
+     */
777
+    protected function get_hook_prefix() {
778
+        return 'wpinv_get_' . $this->object_type . '_';
779
+    }
780
+
781
+    /**
782
+     * Gets a prop for a getter method.
783
+     *
784
+     * Gets the value from either current pending changes, or the data itself.
785
+     * Context controls what happens to the value before it's returned.
786
+     *
787
+     * @since  1.0.19
788
+     * @param  string $prop Name of prop to get.
789
+     * @param  string $context What the value is for. Valid values are view and edit.
790
+     * @return mixed
791
+     */
792
+    protected function get_prop( $prop, $context = 'view' ) {
793
+        $value = null;
794
+
795
+        if ( array_key_exists( $prop, $this->data ) ) {
796
+            $value = array_key_exists( $prop, $this->changes ) ? $this->changes[ $prop ] : $this->data[ $prop ];
797
+
798
+            if ( 'view' === $context ) {
799
+                $value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );
800
+            }
801
+        }
802
+
803
+        return $value;
804
+    }
805
+
806
+    /**
807
+     * Sets a date prop whilst handling formatting and datetime objects.
808
+     *
809
+     * @since 1.0.19
810
+     * @param string         $prop Name of prop to set.
811
+     * @param string|integer $value Value of the prop.
812
+     */
813
+    protected function set_date_prop( $prop, $value ) {
814
+
815
+        if ( empty( $value ) ) {
816
+            $this->set_prop( $prop, null );
817
+            return;
818
+        }
819
+        $this->set_prop( $prop, $value );
820
+
821
+    }
822
+
823
+    /**
824
+     * When invalid data is found, throw an exception unless reading from the DB.
825
+     *
826
+     * @throws Exception Data Exception.
827
+     * @since 1.0.19
828
+     * @param string $code             Error code.
829
+     * @param string $message          Error message.
830
+     */
831
+    protected function error( $code, $message ) {
832
+        throw new Exception( $message, $code );
833
+    }
834 834
 }
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-data-store-wp.php 1 patch
Indentation   +333 added lines, -333 removed lines patch added patch discarded remove patch
@@ -14,341 +14,341 @@
 block discarded – undo
14 14
  */
15 15
 class GetPaid_Data_Store_WP {
16 16
 
17
-	/**
18
-	 * Meta type. This should match up with
19
-	 * the types available at https://developer.wordpress.org/reference/functions/add_metadata/.
20
-	 * WP defines 'post', 'user', 'comment', and 'term'.
21
-	 *
22
-	 * @var string
23
-	 */
24
-	protected $meta_type = 'post';
25
-
26
-	/**
27
-	 * This only needs set if you are using a custom metadata type.
28
-	 *
29
-	 * @var string
30
-	 */
31
-	protected $object_id_field_for_meta = '';
32
-
33
-	/**
34
-	 * Data stored in meta keys, but not considered "meta" for an object.
35
-	 *
36
-	 * @since 1.0.19
37
-	 *
38
-	 * @var array
39
-	 */
40
-	protected $internal_meta_keys = array();
41
-
42
-	/**
43
-	 * Meta data which should exist in the DB, even if empty.
44
-	 *
45
-	 * @since 1.0.19
46
-	 *
47
-	 * @var array
48
-	 */
49
-	protected $must_exist_meta_keys = array();
50
-
51
-	/**
52
-	 * A map of meta keys to data props.
53
-	 *
54
-	 * @since 1.0.19
55
-	 *
56
-	 * @var array
57
-	 */
58
-	protected $meta_key_to_props = array();
59
-
60
-	/**
61
-	 * Returns an array of meta for an object.
62
-	 *
63
-	 * @since  1.0.19
64
-	 * @param  GetPaid_Data $object GetPaid_Data object.
65
-	 * @return array
66
-	 */
67
-	public function read_meta( &$object ) {
68
-		global $wpdb;
69
-		$db_info       = $this->get_db_info();
70
-		$raw_meta_data = $wpdb->get_results(
71
-			$wpdb->prepare(
72
-				"SELECT {$db_info['meta_id_field']} as meta_id, meta_key, meta_value
17
+    /**
18
+     * Meta type. This should match up with
19
+     * the types available at https://developer.wordpress.org/reference/functions/add_metadata/.
20
+     * WP defines 'post', 'user', 'comment', and 'term'.
21
+     *
22
+     * @var string
23
+     */
24
+    protected $meta_type = 'post';
25
+
26
+    /**
27
+     * This only needs set if you are using a custom metadata type.
28
+     *
29
+     * @var string
30
+     */
31
+    protected $object_id_field_for_meta = '';
32
+
33
+    /**
34
+     * Data stored in meta keys, but not considered "meta" for an object.
35
+     *
36
+     * @since 1.0.19
37
+     *
38
+     * @var array
39
+     */
40
+    protected $internal_meta_keys = array();
41
+
42
+    /**
43
+     * Meta data which should exist in the DB, even if empty.
44
+     *
45
+     * @since 1.0.19
46
+     *
47
+     * @var array
48
+     */
49
+    protected $must_exist_meta_keys = array();
50
+
51
+    /**
52
+     * A map of meta keys to data props.
53
+     *
54
+     * @since 1.0.19
55
+     *
56
+     * @var array
57
+     */
58
+    protected $meta_key_to_props = array();
59
+
60
+    /**
61
+     * Returns an array of meta for an object.
62
+     *
63
+     * @since  1.0.19
64
+     * @param  GetPaid_Data $object GetPaid_Data object.
65
+     * @return array
66
+     */
67
+    public function read_meta( &$object ) {
68
+        global $wpdb;
69
+        $db_info       = $this->get_db_info();
70
+        $raw_meta_data = $wpdb->get_results(
71
+            $wpdb->prepare(
72
+                "SELECT {$db_info['meta_id_field']} as meta_id, meta_key, meta_value
73 73
 				FROM {$db_info['table']}
74 74
 				WHERE {$db_info['object_id_field']} = %d
75 75
 				ORDER BY {$db_info['meta_id_field']}",
76
-				$object->get_id()
77
-			)
78
-		);
79
-
80
-		$this->internal_meta_keys = array_merge( array_map( array( $this, 'prefix_key' ), $object->get_data_keys() ), $this->internal_meta_keys );
81
-		$meta_data                = array_filter( $raw_meta_data, array( $this, 'exclude_internal_meta_keys' ) );
82
-		return apply_filters( "getpaid_data_store_wp_{$this->meta_type}_read_meta", $meta_data, $object, $this );
83
-	}
84
-
85
-	/**
86
-	 * Deletes meta based on meta ID.
87
-	 *
88
-	 * @since  1.0.19
89
-	 * @param  GetPaid_Data  $object GetPaid_Data object.
90
-	 * @param  stdClass $meta (containing at least ->id).
91
-	 */
92
-	public function delete_meta( &$object, $meta ) {
93
-		delete_metadata_by_mid( $this->meta_type, $meta->id );
94
-	}
95
-
96
-	/**
97
-	 * Add new piece of meta.
98
-	 *
99
-	 * @since  1.0.19
100
-	 * @param  GetPaid_Data  $object GetPaid_Data object.
101
-	 * @param  stdClass $meta (containing ->key and ->value).
102
-	 * @return int meta ID
103
-	 */
104
-	public function add_meta( &$object, $meta ) {
105
-		return add_metadata( $this->meta_type, $object->get_id(), $meta->key, is_string( $meta->value ) ? wp_slash( $meta->value ) : $meta->value, false );
106
-	}
107
-
108
-	/**
109
-	 * Update meta.
110
-	 *
111
-	 * @since  1.0.19
112
-	 * @param  GetPaid_Data  $object GetPaid_Data object.
113
-	 * @param  stdClass $meta (containing ->id, ->key and ->value).
114
-	 */
115
-	public function update_meta( &$object, $meta ) {
116
-		update_metadata_by_mid( $this->meta_type, $meta->id, $meta->value, $meta->key );
117
-	}
118
-
119
-	/**
120
-	 * Table structure is slightly different between meta types, this function will return what we need to know.
121
-	 *
122
-	 * @since  1.0.19
123
-	 * @return array Array elements: table, object_id_field, meta_id_field
124
-	 */
125
-	protected function get_db_info() {
126
-		global $wpdb;
127
-
128
-		$meta_id_field = 'meta_id'; // users table calls this umeta_id so we need to track this as well.
129
-		$table         = $wpdb->prefix;
130
-
131
-		// If we are dealing with a type of metadata that is not a core type, the table should be prefixed.
132
-		if ( ! in_array( $this->meta_type, array( 'post', 'user', 'comment', 'term' ), true ) ) {
133
-			$table .= 'getpaid_';
134
-		}
135
-
136
-		$table          .= $this->meta_type . 'meta';
137
-		$object_id_field = $this->meta_type . '_id';
138
-
139
-		// Figure out our field names.
140
-		if ( 'user' === $this->meta_type ) {
141
-			$meta_id_field = 'umeta_id';
142
-			$table         = $wpdb->usermeta;
143
-		}
144
-
145
-		if ( ! empty( $this->object_id_field_for_meta ) ) {
146
-			$object_id_field = $this->object_id_field_for_meta;
147
-		}
148
-
149
-		return array(
150
-			'table'           => $table,
151
-			'object_id_field' => $object_id_field,
152
-			'meta_id_field'   => $meta_id_field,
153
-		);
154
-	}
155
-
156
-	/**
157
-	 * Internal meta keys we don't want exposed as part of meta_data. This is in
158
-	 * addition to all data props with _ prefix.
159
-	 *
160
-	 * @since 1.0.19
161
-	 *
162
-	 * @param string $key Prefix to be added to meta keys.
163
-	 * @return string
164
-	 */
165
-	protected function prefix_key( $key ) {
166
-		return '_' === substr( $key, 0, 1 ) ? $key : '_' . $key;
167
-	}
168
-
169
-	/**
170
-	 * Callback to remove unwanted meta data.
171
-	 *
172
-	 * @param object $meta Meta object to check if it should be excluded or not.
173
-	 * @return bool
174
-	 */
175
-	protected function exclude_internal_meta_keys( $meta ) {
176
-		return ! in_array( $meta->meta_key, $this->internal_meta_keys, true ) && 0 !== stripos( $meta->meta_key, 'wp_' );
177
-	}
178
-
179
-	/**
180
-	 * Gets a list of props and meta keys that need updated based on change state
181
-	 * or if they are present in the database or not.
182
-	 *
183
-	 * @param  GetPaid_Data $object         The GetPaid_Data object.
184
-	 * @param  array   $meta_key_to_props   A mapping of meta keys => prop names.
185
-	 * @param  string  $meta_type           The internal WP meta type (post, user, etc).
186
-	 * @return array                        A mapping of meta keys => prop names, filtered by ones that should be updated.
187
-	 */
188
-	protected function get_props_to_update( $object, $meta_key_to_props, $meta_type = 'post' ) {
189
-		$props_to_update = array();
190
-		$changed_props   = $object->get_changes();
191
-
192
-		// Props should be updated if they are a part of the $changed array or don't exist yet.
193
-		foreach ( $meta_key_to_props as $meta_key => $prop ) {
194
-			if ( array_key_exists( $prop, $changed_props ) || ! metadata_exists( $meta_type, $object->get_id(), $meta_key ) ) {
195
-				$props_to_update[ $meta_key ] = $prop;
196
-			}
197
-		}
198
-
199
-		return $props_to_update;
200
-	}
201
-
202
-	/**
203
-	 * Read object data.
204
-	 *
205
-	 * @param GetPaid_Data $object GetPaid_Data object.
206
-	 * @param WP_Post   $post_object Post object.
207
-	 * @since 1.0.19
208
-	 */
209
-	protected function read_object_data( &$object, $post_object ) {
210
-		$id    = $object->get_id();
211
-		$props = array();
212
-
213
-		foreach ( $this->meta_key_to_props as $meta_key => $prop ) {
214
-			$props[ $prop ] = get_post_meta( $id, $meta_key, true );
215
-		}
216
-
217
-		// Set object properties.
218
-		$object->set_props( $props );
219
-
220
-		// Gets extra data associated with the object if needed.
221
-		foreach ( $object->get_extra_data_keys() as $key ) {
222
-			$function = 'set_' . $key;
223
-			if ( is_callable( array( $object, $function ) ) ) {
224
-				$object->{$function}( get_post_meta( $object->get_id(), $key, true ) );
225
-			}
226
-		}
227
-	}
228
-
229
-	/**
230
-	 * Helper method that updates all the post meta for an object based on it's settings in the GetPaid_Data class.
231
-	 *
232
-	 * @param GetPaid_Data $object GetPaid_Data object.
233
-	 * @since 1.0.19
234
-	 */
235
-	protected function update_post_meta( &$object ) {
236
-
237
-		$updated_props   = array();
238
-		$props_to_update = $this->get_props_to_update( $object, $this->meta_key_to_props );
239
-		$object_type     = $object->get_object_type();
240
-
241
-		foreach ( $props_to_update as $meta_key => $prop ) {
242
-			$value = $object->{"get_$prop"}( 'edit' );
243
-			$value = is_string( $value ) ? wp_slash( $value ) : $value;
244
-
245
-			$updated = $this->update_or_delete_post_meta( $object, $meta_key, $value );
246
-
247
-			if ( $updated ) {
248
-				$updated_props[] = $prop;
249
-			}
250
-		}
251
-
252
-		do_action( "getpaid_{$object_type}_object_updated_props", $object, $updated_props );
253
-	}
254
-
255
-	/**
256
-	 * Update meta data in, or delete it from, the database.
257
-	 *
258
-	 * Avoids storing meta when it's either an empty string or empty array or null.
259
-	 * Other empty values such as numeric 0 should still be stored.
260
-	 * Data-stores can force meta to exist using `must_exist_meta_keys`.
261
-	 *
262
-	 * Note: WordPress `get_metadata` function returns an empty string when meta data does not exist.
263
-	 *
264
-	 * @param GetPaid_Data $object The GetPaid_Data object.
265
-	 * @param string  $meta_key Meta key to update.
266
-	 * @param mixed   $meta_value Value to save.
267
-	 *
268
-	 * @since 1.0.19 Added to prevent empty meta being stored unless required.
269
-	 *
270
-	 * @return bool True if updated/deleted.
271
-	 */
272
-	protected function update_or_delete_post_meta( $object, $meta_key, $meta_value ) {
273
-		if ( in_array( $meta_value, array( array(), '', null ), true ) && ! in_array( $meta_key, $this->must_exist_meta_keys, true ) ) {
274
-			$updated = delete_post_meta( $object->get_id(), $meta_key );
275
-		} else {
276
-			$updated = update_post_meta( $object->get_id(), $meta_key, $meta_value );
277
-		}
278
-
279
-		return (bool) $updated;
280
-	}
281
-
282
-	/**
283
-	 * Return list of internal meta keys.
284
-	 *
285
-	 * @since 1.0.19
286
-	 * @return array
287
-	 */
288
-	public function get_internal_meta_keys() {
289
-		return $this->internal_meta_keys;
290
-	}
291
-
292
-	/**
293
-	 * Clear any caches.
294
-	 *
295
-	 * @param GetPaid_Data $object GetPaid_Data object.
296
-	 * @since 1.0.19
297
-	 */
298
-	protected function clear_caches( &$object ) {
299
-		clean_post_cache( $object->get_id() );
300
-	}
301
-
302
-	/**
303
-	 * Method to delete a data object from the database.
304
-	 *
305
-	 * @param GetPaid_Data $object GetPaid_Data object.
306
-	 * @param array    $args Array of args to pass to the delete method.
307
-	 *
308
-	 * @return void
309
-	 */
310
-	public function delete( &$object, $args = array() ) {
311
-		$id          = $object->get_id();
312
-		$object_type = $object->get_object_type();
313
-		$args        = wp_parse_args(
314
-			$args,
315
-			array(
316
-				'force_delete' => false,
317
-			)
318
-		);
319
-
320
-		if ( ! $id ) {
321
-			return;
322
-		}
323
-
324
-		if ( $args['force_delete'] ) {
325
-			wp_delete_post( $id, true );
326
-			$object->set_id( 0 );
327
-			do_action( "getpaid_delete_$object_type", $id );
328
-		} else {
329
-			wp_trash_post( $id );
330
-			$object->set_status( 'trash' );
331
-			do_action( "getpaid_trash_$object_type", $id );
332
-		}
333
-	}
334
-
335
-	/**
336
-	 * Get the status to save to the post object.
337
-	 *
338
-	 *
339
-	 * @since 1.0.19
340
-	 * @param  GetPaid_Data $object GetPaid_Data object.
341
-	 * @return string
342
-	 */
343
-	protected function get_post_status( $object ) {
344
-		$object_status = $object->get_status( 'edit' );
345
-		$object_type   = $object->get_object_type();
346
-
347
-		if ( ! $object_status ) {
348
-			$object_status = apply_filters( "getpaid_default_{$object_type}_status", 'draft' );
349
-		}
350
-
351
-		return $object_status;
352
-	}
76
+                $object->get_id()
77
+            )
78
+        );
79
+
80
+        $this->internal_meta_keys = array_merge( array_map( array( $this, 'prefix_key' ), $object->get_data_keys() ), $this->internal_meta_keys );
81
+        $meta_data                = array_filter( $raw_meta_data, array( $this, 'exclude_internal_meta_keys' ) );
82
+        return apply_filters( "getpaid_data_store_wp_{$this->meta_type}_read_meta", $meta_data, $object, $this );
83
+    }
84
+
85
+    /**
86
+     * Deletes meta based on meta ID.
87
+     *
88
+     * @since  1.0.19
89
+     * @param  GetPaid_Data  $object GetPaid_Data object.
90
+     * @param  stdClass $meta (containing at least ->id).
91
+     */
92
+    public function delete_meta( &$object, $meta ) {
93
+        delete_metadata_by_mid( $this->meta_type, $meta->id );
94
+    }
95
+
96
+    /**
97
+     * Add new piece of meta.
98
+     *
99
+     * @since  1.0.19
100
+     * @param  GetPaid_Data  $object GetPaid_Data object.
101
+     * @param  stdClass $meta (containing ->key and ->value).
102
+     * @return int meta ID
103
+     */
104
+    public function add_meta( &$object, $meta ) {
105
+        return add_metadata( $this->meta_type, $object->get_id(), $meta->key, is_string( $meta->value ) ? wp_slash( $meta->value ) : $meta->value, false );
106
+    }
107
+
108
+    /**
109
+     * Update meta.
110
+     *
111
+     * @since  1.0.19
112
+     * @param  GetPaid_Data  $object GetPaid_Data object.
113
+     * @param  stdClass $meta (containing ->id, ->key and ->value).
114
+     */
115
+    public function update_meta( &$object, $meta ) {
116
+        update_metadata_by_mid( $this->meta_type, $meta->id, $meta->value, $meta->key );
117
+    }
118
+
119
+    /**
120
+     * Table structure is slightly different between meta types, this function will return what we need to know.
121
+     *
122
+     * @since  1.0.19
123
+     * @return array Array elements: table, object_id_field, meta_id_field
124
+     */
125
+    protected function get_db_info() {
126
+        global $wpdb;
127
+
128
+        $meta_id_field = 'meta_id'; // users table calls this umeta_id so we need to track this as well.
129
+        $table         = $wpdb->prefix;
130
+
131
+        // If we are dealing with a type of metadata that is not a core type, the table should be prefixed.
132
+        if ( ! in_array( $this->meta_type, array( 'post', 'user', 'comment', 'term' ), true ) ) {
133
+            $table .= 'getpaid_';
134
+        }
135
+
136
+        $table          .= $this->meta_type . 'meta';
137
+        $object_id_field = $this->meta_type . '_id';
138
+
139
+        // Figure out our field names.
140
+        if ( 'user' === $this->meta_type ) {
141
+            $meta_id_field = 'umeta_id';
142
+            $table         = $wpdb->usermeta;
143
+        }
144
+
145
+        if ( ! empty( $this->object_id_field_for_meta ) ) {
146
+            $object_id_field = $this->object_id_field_for_meta;
147
+        }
148
+
149
+        return array(
150
+            'table'           => $table,
151
+            'object_id_field' => $object_id_field,
152
+            'meta_id_field'   => $meta_id_field,
153
+        );
154
+    }
155
+
156
+    /**
157
+     * Internal meta keys we don't want exposed as part of meta_data. This is in
158
+     * addition to all data props with _ prefix.
159
+     *
160
+     * @since 1.0.19
161
+     *
162
+     * @param string $key Prefix to be added to meta keys.
163
+     * @return string
164
+     */
165
+    protected function prefix_key( $key ) {
166
+        return '_' === substr( $key, 0, 1 ) ? $key : '_' . $key;
167
+    }
168
+
169
+    /**
170
+     * Callback to remove unwanted meta data.
171
+     *
172
+     * @param object $meta Meta object to check if it should be excluded or not.
173
+     * @return bool
174
+     */
175
+    protected function exclude_internal_meta_keys( $meta ) {
176
+        return ! in_array( $meta->meta_key, $this->internal_meta_keys, true ) && 0 !== stripos( $meta->meta_key, 'wp_' );
177
+    }
178
+
179
+    /**
180
+     * Gets a list of props and meta keys that need updated based on change state
181
+     * or if they are present in the database or not.
182
+     *
183
+     * @param  GetPaid_Data $object         The GetPaid_Data object.
184
+     * @param  array   $meta_key_to_props   A mapping of meta keys => prop names.
185
+     * @param  string  $meta_type           The internal WP meta type (post, user, etc).
186
+     * @return array                        A mapping of meta keys => prop names, filtered by ones that should be updated.
187
+     */
188
+    protected function get_props_to_update( $object, $meta_key_to_props, $meta_type = 'post' ) {
189
+        $props_to_update = array();
190
+        $changed_props   = $object->get_changes();
191
+
192
+        // Props should be updated if they are a part of the $changed array or don't exist yet.
193
+        foreach ( $meta_key_to_props as $meta_key => $prop ) {
194
+            if ( array_key_exists( $prop, $changed_props ) || ! metadata_exists( $meta_type, $object->get_id(), $meta_key ) ) {
195
+                $props_to_update[ $meta_key ] = $prop;
196
+            }
197
+        }
198
+
199
+        return $props_to_update;
200
+    }
201
+
202
+    /**
203
+     * Read object data.
204
+     *
205
+     * @param GetPaid_Data $object GetPaid_Data object.
206
+     * @param WP_Post   $post_object Post object.
207
+     * @since 1.0.19
208
+     */
209
+    protected function read_object_data( &$object, $post_object ) {
210
+        $id    = $object->get_id();
211
+        $props = array();
212
+
213
+        foreach ( $this->meta_key_to_props as $meta_key => $prop ) {
214
+            $props[ $prop ] = get_post_meta( $id, $meta_key, true );
215
+        }
216
+
217
+        // Set object properties.
218
+        $object->set_props( $props );
219
+
220
+        // Gets extra data associated with the object if needed.
221
+        foreach ( $object->get_extra_data_keys() as $key ) {
222
+            $function = 'set_' . $key;
223
+            if ( is_callable( array( $object, $function ) ) ) {
224
+                $object->{$function}( get_post_meta( $object->get_id(), $key, true ) );
225
+            }
226
+        }
227
+    }
228
+
229
+    /**
230
+     * Helper method that updates all the post meta for an object based on it's settings in the GetPaid_Data class.
231
+     *
232
+     * @param GetPaid_Data $object GetPaid_Data object.
233
+     * @since 1.0.19
234
+     */
235
+    protected function update_post_meta( &$object ) {
236
+
237
+        $updated_props   = array();
238
+        $props_to_update = $this->get_props_to_update( $object, $this->meta_key_to_props );
239
+        $object_type     = $object->get_object_type();
240
+
241
+        foreach ( $props_to_update as $meta_key => $prop ) {
242
+            $value = $object->{"get_$prop"}( 'edit' );
243
+            $value = is_string( $value ) ? wp_slash( $value ) : $value;
244
+
245
+            $updated = $this->update_or_delete_post_meta( $object, $meta_key, $value );
246
+
247
+            if ( $updated ) {
248
+                $updated_props[] = $prop;
249
+            }
250
+        }
251
+
252
+        do_action( "getpaid_{$object_type}_object_updated_props", $object, $updated_props );
253
+    }
254
+
255
+    /**
256
+     * Update meta data in, or delete it from, the database.
257
+     *
258
+     * Avoids storing meta when it's either an empty string or empty array or null.
259
+     * Other empty values such as numeric 0 should still be stored.
260
+     * Data-stores can force meta to exist using `must_exist_meta_keys`.
261
+     *
262
+     * Note: WordPress `get_metadata` function returns an empty string when meta data does not exist.
263
+     *
264
+     * @param GetPaid_Data $object The GetPaid_Data object.
265
+     * @param string  $meta_key Meta key to update.
266
+     * @param mixed   $meta_value Value to save.
267
+     *
268
+     * @since 1.0.19 Added to prevent empty meta being stored unless required.
269
+     *
270
+     * @return bool True if updated/deleted.
271
+     */
272
+    protected function update_or_delete_post_meta( $object, $meta_key, $meta_value ) {
273
+        if ( in_array( $meta_value, array( array(), '', null ), true ) && ! in_array( $meta_key, $this->must_exist_meta_keys, true ) ) {
274
+            $updated = delete_post_meta( $object->get_id(), $meta_key );
275
+        } else {
276
+            $updated = update_post_meta( $object->get_id(), $meta_key, $meta_value );
277
+        }
278
+
279
+        return (bool) $updated;
280
+    }
281
+
282
+    /**
283
+     * Return list of internal meta keys.
284
+     *
285
+     * @since 1.0.19
286
+     * @return array
287
+     */
288
+    public function get_internal_meta_keys() {
289
+        return $this->internal_meta_keys;
290
+    }
291
+
292
+    /**
293
+     * Clear any caches.
294
+     *
295
+     * @param GetPaid_Data $object GetPaid_Data object.
296
+     * @since 1.0.19
297
+     */
298
+    protected function clear_caches( &$object ) {
299
+        clean_post_cache( $object->get_id() );
300
+    }
301
+
302
+    /**
303
+     * Method to delete a data object from the database.
304
+     *
305
+     * @param GetPaid_Data $object GetPaid_Data object.
306
+     * @param array    $args Array of args to pass to the delete method.
307
+     *
308
+     * @return void
309
+     */
310
+    public function delete( &$object, $args = array() ) {
311
+        $id          = $object->get_id();
312
+        $object_type = $object->get_object_type();
313
+        $args        = wp_parse_args(
314
+            $args,
315
+            array(
316
+                'force_delete' => false,
317
+            )
318
+        );
319
+
320
+        if ( ! $id ) {
321
+            return;
322
+        }
323
+
324
+        if ( $args['force_delete'] ) {
325
+            wp_delete_post( $id, true );
326
+            $object->set_id( 0 );
327
+            do_action( "getpaid_delete_$object_type", $id );
328
+        } else {
329
+            wp_trash_post( $id );
330
+            $object->set_status( 'trash' );
331
+            do_action( "getpaid_trash_$object_type", $id );
332
+        }
333
+    }
334
+
335
+    /**
336
+     * Get the status to save to the post object.
337
+     *
338
+     *
339
+     * @since 1.0.19
340
+     * @param  GetPaid_Data $object GetPaid_Data object.
341
+     * @return string
342
+     */
343
+    protected function get_post_status( $object ) {
344
+        $object_status = $object->get_status( 'edit' );
345
+        $object_type   = $object->get_object_type();
346
+
347
+        if ( ! $object_status ) {
348
+            $object_status = apply_filters( "getpaid_default_{$object_type}_status", 'draft' );
349
+        }
350
+
351
+        return $object_status;
352
+    }
353 353
 
354 354
 }
Please login to merge, or discard this patch.
includes/data-stores/class-getpaid-data-store.php 1 patch
Indentation   +178 added lines, -178 removed lines patch added patch discarded remove patch
@@ -11,183 +11,183 @@
 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
-	);
36
-
37
-	/**
38
-	 * Contains the name of the current data store's class name.
39
-	 *
40
-	 * @var string
41
-	 */
42
-	private $current_class_name = '';
43
-
44
-	/**
45
-	 * The object type this store works with.
46
-	 *
47
-	 * @var string
48
-	 */
49
-	private $object_type = '';
50
-
51
-	/**
52
-	 * Tells GetPaid_Data_Store which object
53
-	 * store we want to work with.
54
-	 *
55
-	 * @param string $object_type Name of object.
56
-	 */
57
-	public function __construct( $object_type ) {
58
-		$this->object_type = $object_type;
59
-		$this->stores      = apply_filters( 'getpaid_data_stores', $this->stores );
60
-
61
-		// If this object type can't be found, check to see if we can load one
62
-		// level up (so if item-type isn't found, we try item).
63
-		if ( ! array_key_exists( $object_type, $this->stores ) ) {
64
-			$pieces      = explode( '-', $object_type );
65
-			$object_type = $pieces[0];
66
-		}
67
-
68
-		if ( array_key_exists( $object_type, $this->stores ) ) {
69
-			$store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] );
70
-			if ( is_object( $store ) ) {
71
-				$this->current_class_name = get_class( $store );
72
-				$this->instance           = $store;
73
-			} else {
74
-				if ( ! class_exists( $store ) ) {
75
-					throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) );
76
-				}
77
-				$this->current_class_name = $store;
78
-				$this->instance           = new $store();
79
-			}
80
-		} else {
81
-			throw new Exception( __( 'Invalid data store.', 'invoicing' ) );
82
-		}
83
-	}
84
-
85
-	/**
86
-	 * Only store the object type to avoid serializing the data store instance.
87
-	 *
88
-	 * @return array
89
-	 */
90
-	public function __sleep() {
91
-		return array( 'object_type' );
92
-	}
93
-
94
-	/**
95
-	 * Re-run the constructor with the object type.
96
-	 *
97
-	 * @throws Exception When validation fails.
98
-	 */
99
-	public function __wakeup() {
100
-		$this->__construct( $this->object_type );
101
-	}
102
-
103
-	/**
104
-	 * Loads a data store.
105
-	 *
106
-	 * @param string $object_type Name of object.
107
-	 *
108
-	 * @since 1.0.19
109
-	 * @throws Exception When validation fails.
110
-	 * @return GetPaid_Data_Store
111
-	 */
112
-	public static function load( $object_type ) {
113
-		return new GetPaid_Data_Store( $object_type );
114
-	}
115
-
116
-	/**
117
-	 * Returns the class name of the current data store.
118
-	 *
119
-	 * @since 1.0.19
120
-	 * @return string
121
-	 */
122
-	public function get_current_class_name() {
123
-		return $this->current_class_name;
124
-	}
125
-
126
-	/**
127
-	 * Returns the object type of the current data store.
128
-	 *
129
-	 * @since 1.0.19
130
-	 * @return string
131
-	 */
132
-	public function get_object_type() {
133
-		return $this->object_type;
134
-	}
135
-
136
-	/**
137
-	 * Reads an object from the data store.
138
-	 *
139
-	 * @since 1.0.19
140
-	 * @param GetPaid_Data $data GetPaid data instance.
141
-	 */
142
-	public function read( &$data ) {
143
-		$this->instance->read( $data );
144
-	}
145
-
146
-	/**
147
-	 * Create an object in the data store.
148
-	 *
149
-	 * @since 1.0.19
150
-	 * @param GetPaid_Data $data GetPaid data instance.
151
-	 */
152
-	public function create( &$data ) {
153
-		$this->instance->create( $data );
154
-	}
155
-
156
-	/**
157
-	 * Update an object in the data store.
158
-	 *
159
-	 * @since 1.0.19
160
-	 * @param GetPaid_Data $data GetPaid data instance.
161
-	 */
162
-	public function update( &$data ) {
163
-		$this->instance->update( $data );
164
-	}
165
-
166
-	/**
167
-	 * Delete an object from the data store.
168
-	 *
169
-	 * @since 1.0.19
170
-	 * @param GetPaid_Data $data GetPaid data instance.
171
-	 * @param array   $args Array of args to pass to the delete method.
172
-	 */
173
-	public function delete( &$data, $args = array() ) {
174
-		$this->instance->delete( $data, $args );
175
-	}
176
-
177
-	/**
178
-	 * Data stores can define additional function. This passes
179
-	 * through to the instance if that function exists.
180
-	 *
181
-	 * @since 1.0.19
182
-	 * @param string $method     Method.
183
-	 * @return mixed
184
-	 */
185
-	public function __call( $method, $parameters ) {
186
-		if ( is_callable( array( $this->instance, $method ) ) ) {
187
-			$object     = array_shift( $parameters );
188
-			$parameters = array_merge( array( &$object ), $parameters );
189
-			return call_user_func_array( array( $this->instance, $method ), $parameters );
190
-		}
191
-	}
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
+    );
36
+
37
+    /**
38
+     * Contains the name of the current data store's class name.
39
+     *
40
+     * @var string
41
+     */
42
+    private $current_class_name = '';
43
+
44
+    /**
45
+     * The object type this store works with.
46
+     *
47
+     * @var string
48
+     */
49
+    private $object_type = '';
50
+
51
+    /**
52
+     * Tells GetPaid_Data_Store which object
53
+     * store we want to work with.
54
+     *
55
+     * @param string $object_type Name of object.
56
+     */
57
+    public function __construct( $object_type ) {
58
+        $this->object_type = $object_type;
59
+        $this->stores      = apply_filters( 'getpaid_data_stores', $this->stores );
60
+
61
+        // If this object type can't be found, check to see if we can load one
62
+        // level up (so if item-type isn't found, we try item).
63
+        if ( ! array_key_exists( $object_type, $this->stores ) ) {
64
+            $pieces      = explode( '-', $object_type );
65
+            $object_type = $pieces[0];
66
+        }
67
+
68
+        if ( array_key_exists( $object_type, $this->stores ) ) {
69
+            $store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] );
70
+            if ( is_object( $store ) ) {
71
+                $this->current_class_name = get_class( $store );
72
+                $this->instance           = $store;
73
+            } else {
74
+                if ( ! class_exists( $store ) ) {
75
+                    throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) );
76
+                }
77
+                $this->current_class_name = $store;
78
+                $this->instance           = new $store();
79
+            }
80
+        } else {
81
+            throw new Exception( __( 'Invalid data store.', 'invoicing' ) );
82
+        }
83
+    }
84
+
85
+    /**
86
+     * Only store the object type to avoid serializing the data store instance.
87
+     *
88
+     * @return array
89
+     */
90
+    public function __sleep() {
91
+        return array( 'object_type' );
92
+    }
93
+
94
+    /**
95
+     * Re-run the constructor with the object type.
96
+     *
97
+     * @throws Exception When validation fails.
98
+     */
99
+    public function __wakeup() {
100
+        $this->__construct( $this->object_type );
101
+    }
102
+
103
+    /**
104
+     * Loads a data store.
105
+     *
106
+     * @param string $object_type Name of object.
107
+     *
108
+     * @since 1.0.19
109
+     * @throws Exception When validation fails.
110
+     * @return GetPaid_Data_Store
111
+     */
112
+    public static function load( $object_type ) {
113
+        return new GetPaid_Data_Store( $object_type );
114
+    }
115
+
116
+    /**
117
+     * Returns the class name of the current data store.
118
+     *
119
+     * @since 1.0.19
120
+     * @return string
121
+     */
122
+    public function get_current_class_name() {
123
+        return $this->current_class_name;
124
+    }
125
+
126
+    /**
127
+     * Returns the object type of the current data store.
128
+     *
129
+     * @since 1.0.19
130
+     * @return string
131
+     */
132
+    public function get_object_type() {
133
+        return $this->object_type;
134
+    }
135
+
136
+    /**
137
+     * Reads an object from the data store.
138
+     *
139
+     * @since 1.0.19
140
+     * @param GetPaid_Data $data GetPaid data instance.
141
+     */
142
+    public function read( &$data ) {
143
+        $this->instance->read( $data );
144
+    }
145
+
146
+    /**
147
+     * Create an object in the data store.
148
+     *
149
+     * @since 1.0.19
150
+     * @param GetPaid_Data $data GetPaid data instance.
151
+     */
152
+    public function create( &$data ) {
153
+        $this->instance->create( $data );
154
+    }
155
+
156
+    /**
157
+     * Update an object in the data store.
158
+     *
159
+     * @since 1.0.19
160
+     * @param GetPaid_Data $data GetPaid data instance.
161
+     */
162
+    public function update( &$data ) {
163
+        $this->instance->update( $data );
164
+    }
165
+
166
+    /**
167
+     * Delete an object from the data store.
168
+     *
169
+     * @since 1.0.19
170
+     * @param GetPaid_Data $data GetPaid data instance.
171
+     * @param array   $args Array of args to pass to the delete method.
172
+     */
173
+    public function delete( &$data, $args = array() ) {
174
+        $this->instance->delete( $data, $args );
175
+    }
176
+
177
+    /**
178
+     * Data stores can define additional function. This passes
179
+     * through to the instance if that function exists.
180
+     *
181
+     * @since 1.0.19
182
+     * @param string $method     Method.
183
+     * @return mixed
184
+     */
185
+    public function __call( $method, $parameters ) {
186
+        if ( is_callable( array( $this->instance, $method ) ) ) {
187
+            $object     = array_shift( $parameters );
188
+            $parameters = array_merge( array( &$object ), $parameters );
189
+            return call_user_func_array( array( $this->instance, $method ), $parameters );
190
+        }
191
+    }
192 192
 
193 193
 }
Please login to merge, or discard this patch.
includes/class-getpaid-payment-form.php 1 patch
Indentation   +357 added lines, -357 removed lines patch added patch discarded remove patch
@@ -1,6 +1,6 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 /**
@@ -10,48 +10,48 @@  discard block
 block discarded – undo
10 10
 class GetPaid_Payment_Form  extends GetPaid_Data {
11 11
 
12 12
     /**
13
-	 * Which data store to load.
14
-	 *
15
-	 * @var string
16
-	 */
13
+     * Which data store to load.
14
+     *
15
+     * @var string
16
+     */
17 17
     protected $data_store_name = 'payment_form';
18 18
 
19 19
     /**
20
-	 * This is the name of this object type.
21
-	 *
22
-	 * @var string
23
-	 */
24
-	protected $object_type = 'payment_form';
20
+     * This is the name of this object type.
21
+     *
22
+     * @var string
23
+     */
24
+    protected $object_type = 'payment_form';
25 25
 
26 26
     /**
27
-	 * Form Data array. This is the core form data exposed in APIs.
28
-	 *
29
-	 * @since 1.0.19
30
-	 * @var array
31
-	 */
32
-	protected $data = array(
33
-		'status'               => 'draft',
34
-		'version'              => '',
35
-		'date_created'         => null,
27
+     * Form Data array. This is the core form data exposed in APIs.
28
+     *
29
+     * @since 1.0.19
30
+     * @var array
31
+     */
32
+    protected $data = array(
33
+        'status'               => 'draft',
34
+        'version'              => '',
35
+        'date_created'         => null,
36 36
         'date_modified'        => null,
37 37
         'name'                 => '',
38 38
         'author'               => 1,
39 39
         'elements'             => null,
40
-		'items'                => null,
41
-		'earned'               => 0,
42
-		'refunded'             => 0,
43
-		'cancelled'            => 0,
44
-		'failed'               => 0,
45
-	);
40
+        'items'                => null,
41
+        'earned'               => 0,
42
+        'refunded'             => 0,
43
+        'cancelled'            => 0,
44
+        'failed'               => 0,
45
+    );
46 46
 
47 47
     /**
48
-	 * Stores meta in cache for future reads.
49
-	 *
50
-	 * A group must be set to to enable caching.
51
-	 *
52
-	 * @var string
53
-	 */
54
-	protected $cache_group = 'getpaid_forms';
48
+     * Stores meta in cache for future reads.
49
+     *
50
+     * A group must be set to to enable caching.
51
+     *
52
+     * @var string
53
+     */
54
+    protected $cache_group = 'getpaid_forms';
55 55
 
56 56
     /**
57 57
      * Stores a reference to the original WP_Post object
@@ -61,32 +61,32 @@  discard block
 block discarded – undo
61 61
     protected $post = null;
62 62
 
63 63
     /**
64
-	 * Get the item if ID is passed, otherwise the item is new and empty.
65
-	 *
66
-	 * @param  int|object|WPInv_Item|WP_Post $item Item to read.
67
-	 */
68
-	public function __construct( $item = 0 ) {
69
-		parent::__construct( $item );
70
-
71
-		if ( is_numeric( $item ) && $item > 0 ) {
72
-			$this->set_id( $item );
73
-		} elseif ( $item instanceof self ) {
74
-			$this->set_id( $item->get_id() );
75
-		} elseif ( ! empty( $item->ID ) ) {
76
-			$this->set_id( $item->ID );
77
-		} else {
78
-			$this->set_object_read( true );
79
-		}
64
+     * Get the item if ID is passed, otherwise the item is new and empty.
65
+     *
66
+     * @param  int|object|WPInv_Item|WP_Post $item Item to read.
67
+     */
68
+    public function __construct( $item = 0 ) {
69
+        parent::__construct( $item );
70
+
71
+        if ( is_numeric( $item ) && $item > 0 ) {
72
+            $this->set_id( $item );
73
+        } elseif ( $item instanceof self ) {
74
+            $this->set_id( $item->get_id() );
75
+        } elseif ( ! empty( $item->ID ) ) {
76
+            $this->set_id( $item->ID );
77
+        } else {
78
+            $this->set_object_read( true );
79
+        }
80 80
 
81 81
         // Load the datastore.
82
-		$this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
82
+        $this->data_store = GetPaid_Data_Store::load( $this->data_store_name );
83 83
 
84
-		if ( $this->get_id() > 0 ) {
84
+        if ( $this->get_id() > 0 ) {
85 85
             $this->post = get_post( $this->get_id() );
86
-			$this->data_store->read( $this );
86
+            $this->data_store->read( $this );
87 87
         }
88 88
 
89
-	}
89
+    }
90 90
 
91 91
     /*
92 92
 	|--------------------------------------------------------------------------
@@ -104,223 +104,223 @@  discard block
 block discarded – undo
104 104
     */
105 105
 
106 106
     /**
107
-	 * Get plugin version when the form was created.
108
-	 *
109
-	 * @since 1.0.19
110
-	 * @param  string $context View or edit context.
111
-	 * @return string
112
-	 */
113
-	public function get_version( $context = 'view' ) {
114
-		return $this->get_prop( 'version', $context );
107
+     * Get plugin version when the form was created.
108
+     *
109
+     * @since 1.0.19
110
+     * @param  string $context View or edit context.
111
+     * @return string
112
+     */
113
+    public function get_version( $context = 'view' ) {
114
+        return $this->get_prop( 'version', $context );
115 115
     }
116 116
 
117 117
     /**
118
-	 * Get date when the form was created.
119
-	 *
120
-	 * @since 1.0.19
121
-	 * @param  string $context View or edit context.
122
-	 * @return string
123
-	 */
124
-	public function get_date_created( $context = 'view' ) {
125
-		return $this->get_prop( 'date_created', $context );
118
+     * Get date when the form was created.
119
+     *
120
+     * @since 1.0.19
121
+     * @param  string $context View or edit context.
122
+     * @return string
123
+     */
124
+    public function get_date_created( $context = 'view' ) {
125
+        return $this->get_prop( 'date_created', $context );
126 126
     }
127 127
 
128 128
     /**
129
-	 * Get GMT date when the form was created.
130
-	 *
131
-	 * @since 1.0.19
132
-	 * @param  string $context View or edit context.
133
-	 * @return string
134
-	 */
135
-	public function get_date_created_gmt( $context = 'view' ) {
129
+     * Get GMT date when the form was created.
130
+     *
131
+     * @since 1.0.19
132
+     * @param  string $context View or edit context.
133
+     * @return string
134
+     */
135
+    public function get_date_created_gmt( $context = 'view' ) {
136 136
         $date = $this->get_date_created( $context );
137 137
 
138 138
         if ( $date ) {
139 139
             $date = get_gmt_from_date( $date );
140 140
         }
141
-		return $date;
141
+        return $date;
142 142
     }
143 143
 
144 144
     /**
145
-	 * Get date when the form was last modified.
146
-	 *
147
-	 * @since 1.0.19
148
-	 * @param  string $context View or edit context.
149
-	 * @return string
150
-	 */
151
-	public function get_date_modified( $context = 'view' ) {
152
-		return $this->get_prop( 'date_modified', $context );
145
+     * Get date when the form was last modified.
146
+     *
147
+     * @since 1.0.19
148
+     * @param  string $context View or edit context.
149
+     * @return string
150
+     */
151
+    public function get_date_modified( $context = 'view' ) {
152
+        return $this->get_prop( 'date_modified', $context );
153 153
     }
154 154
 
155 155
     /**
156
-	 * Get GMT date when the form was last modified.
157
-	 *
158
-	 * @since 1.0.19
159
-	 * @param  string $context View or edit context.
160
-	 * @return string
161
-	 */
162
-	public function get_date_modified_gmt( $context = 'view' ) {
156
+     * Get GMT date when the form was last modified.
157
+     *
158
+     * @since 1.0.19
159
+     * @param  string $context View or edit context.
160
+     * @return string
161
+     */
162
+    public function get_date_modified_gmt( $context = 'view' ) {
163 163
         $date = $this->get_date_modified( $context );
164 164
 
165 165
         if ( $date ) {
166 166
             $date = get_gmt_from_date( $date );
167 167
         }
168
-		return $date;
168
+        return $date;
169 169
     }
170 170
 
171 171
     /**
172
-	 * Get the form name.
173
-	 *
174
-	 * @since 1.0.19
175
-	 * @param  string $context View or edit context.
176
-	 * @return string
177
-	 */
178
-	public function get_name( $context = 'view' ) {
179
-		return $this->get_prop( 'name', $context );
172
+     * Get the form name.
173
+     *
174
+     * @since 1.0.19
175
+     * @param  string $context View or edit context.
176
+     * @return string
177
+     */
178
+    public function get_name( $context = 'view' ) {
179
+        return $this->get_prop( 'name', $context );
180
+    }
181
+
182
+    /**
183
+     * Alias of self::get_name().
184
+     *
185
+     * @since 1.0.19
186
+     * @param  string $context View or edit context.
187
+     * @return string
188
+     */
189
+    public function get_title( $context = 'view' ) {
190
+        return $this->get_name( $context );
180 191
     }
181 192
 
182 193
     /**
183
-	 * Alias of self::get_name().
184
-	 *
185
-	 * @since 1.0.19
186
-	 * @param  string $context View or edit context.
187
-	 * @return string
188
-	 */
189
-	public function get_title( $context = 'view' ) {
190
-		return $this->get_name( $context );
191
-	}
192
-
193
-    /**
194
-	 * Get the owner of the form.
195
-	 *
196
-	 * @since 1.0.19
197
-	 * @param  string $context View or edit context.
198
-	 * @return int
199
-	 */
200
-	public function get_author( $context = 'view' ) {
201
-		return (int) $this->get_prop( 'author', $context );
194
+     * Get the owner of the form.
195
+     *
196
+     * @since 1.0.19
197
+     * @param  string $context View or edit context.
198
+     * @return int
199
+     */
200
+    public function get_author( $context = 'view' ) {
201
+        return (int) $this->get_prop( 'author', $context );
202 202
     }
203 203
 
204 204
     /**
205
-	 * Get the elements that make up the form.
206
-	 *
207
-	 * @since 1.0.19
208
-	 * @param  string $context View or edit context.
209
-	 * @return array
210
-	 */
211
-	public function get_elements( $context = 'view' ) {
212
-		$elements = $this->get_prop( 'elements', $context );
205
+     * Get the elements that make up the form.
206
+     *
207
+     * @since 1.0.19
208
+     * @param  string $context View or edit context.
209
+     * @return array
210
+     */
211
+    public function get_elements( $context = 'view' ) {
212
+        $elements = $this->get_prop( 'elements', $context );
213 213
 
214
-		if ( empty( $elements ) || ! is_array( $elements ) ) {
214
+        if ( empty( $elements ) || ! is_array( $elements ) ) {
215 215
             return wpinv_get_data( 'sample-payment-form' );
216 216
         }
217 217
         return $elements;
218
-	}
219
-
220
-	/**
221
-	 * Get the items sold via the form.
222
-	 *
223
-	 * @since 1.0.19
224
-	 * @param  string $context View or edit context.
225
-	 * @return GetPaid_Form_Item[]
226
-	 */
227
-	public function get_items( $context = 'view' ) {
228
-		$items = $this->get_prop( 'items', $context );
229
-
230
-		if ( empty( $items ) || ! is_array( $items ) ) {
218
+    }
219
+
220
+    /**
221
+     * Get the items sold via the form.
222
+     *
223
+     * @since 1.0.19
224
+     * @param  string $context View or edit context.
225
+     * @return GetPaid_Form_Item[]
226
+     */
227
+    public function get_items( $context = 'view' ) {
228
+        $items = $this->get_prop( 'items', $context );
229
+
230
+        if ( empty( $items ) || ! is_array( $items ) ) {
231 231
             $items = wpinv_get_data( 'sample-payment-form-items' );
232 232
         }
233 233
 
234
-		// Convert the items.
235
-		$prepared = array();
236
-
237
-		foreach ( $items as $key => $value ) {
238
-
239
-			// $item_id => $quantity
240
-			if ( is_numeric( $key ) && is_numeric( $value ) ) {
241
-				$item   = new GetPaid_Form_Item( $key );
242
-
243
-				if ( $item->can_purchase() ) {
244
-					$item->set_quantity( $value );
245
-					$prepared[] = $item;
246
-				}
247
-
248
-				continue;
249
-			}
250
-
251
-			if ( is_array( $value ) && isset( $value['id'] ) ) {
252
-
253
-				$item = new GetPaid_Form_Item( $value['id'] );
254
-
255
-				if ( ! $item->can_purchase() ) {
256
-					continue;
257
-				}
258
-
259
-				// Cart items.
260
-				if ( isset( $value['subtotal'] ) ) {
261
-					$item->set_price( $value['subtotal'] );
262
-					$item->set_quantity( $value['quantity'] );
263
-					$prepared[] = $item;
264
-					continue;
265
-				}
266
-
267
-				// Payment form item.
268
-				$item->set_quantity( $value['quantity'] );
269
-				$item->set_allow_quantities( $value['allow_quantities'] );
270
-				$item->set_is_required( $value['required'] );
271
-				$item->set_custom_description( $value['description'] );
272
-				$prepared[] = $item;
273
-				continue;
274
-
275
-			}
276
-		}
277
-
278
-		return $prepared;
279
-	}
280
-
281
-	/**
282
-	 * Get the total amount earned via this form.
283
-	 *
284
-	 * @since 1.0.19
285
-	 * @param  string $context View or edit context.
286
-	 * @return array
287
-	 */
288
-	public function get_earned( $context = 'view' ) {
289
-		return $this->get_prop( 'earned', $context );
290
-	}
291
-
292
-	/**
293
-	 * Get the total amount refunded via this form.
294
-	 *
295
-	 * @since 1.0.19
296
-	 * @param  string $context View or edit context.
297
-	 * @return array
298
-	 */
299
-	public function get_refunded( $context = 'view' ) {
300
-		return $this->get_prop( 'refunded', $context );
301
-	}
302
-
303
-	/**
304
-	 * Get the total amount cancelled via this form.
305
-	 *
306
-	 * @since 1.0.19
307
-	 * @param  string $context View or edit context.
308
-	 * @return array
309
-	 */
310
-	public function get_cancelled( $context = 'view' ) {
311
-		return $this->get_prop( 'cancelled', $context );
312
-	}
313
-
314
-	/**
315
-	 * Get the total amount failed via this form.
316
-	 *
317
-	 * @since 1.0.19
318
-	 * @param  string $context View or edit context.
319
-	 * @return array
320
-	 */
321
-	public function get_failed( $context = 'view' ) {
322
-		return $this->get_prop( 'failed', $context );
323
-	}
234
+        // Convert the items.
235
+        $prepared = array();
236
+
237
+        foreach ( $items as $key => $value ) {
238
+
239
+            // $item_id => $quantity
240
+            if ( is_numeric( $key ) && is_numeric( $value ) ) {
241
+                $item   = new GetPaid_Form_Item( $key );
242
+
243
+                if ( $item->can_purchase() ) {
244
+                    $item->set_quantity( $value );
245
+                    $prepared[] = $item;
246
+                }
247
+
248
+                continue;
249
+            }
250
+
251
+            if ( is_array( $value ) && isset( $value['id'] ) ) {
252
+
253
+                $item = new GetPaid_Form_Item( $value['id'] );
254
+
255
+                if ( ! $item->can_purchase() ) {
256
+                    continue;
257
+                }
258
+
259
+                // Cart items.
260
+                if ( isset( $value['subtotal'] ) ) {
261
+                    $item->set_price( $value['subtotal'] );
262
+                    $item->set_quantity( $value['quantity'] );
263
+                    $prepared[] = $item;
264
+                    continue;
265
+                }
266
+
267
+                // Payment form item.
268
+                $item->set_quantity( $value['quantity'] );
269
+                $item->set_allow_quantities( $value['allow_quantities'] );
270
+                $item->set_is_required( $value['required'] );
271
+                $item->set_custom_description( $value['description'] );
272
+                $prepared[] = $item;
273
+                continue;
274
+
275
+            }
276
+        }
277
+
278
+        return $prepared;
279
+    }
280
+
281
+    /**
282
+     * Get the total amount earned via this form.
283
+     *
284
+     * @since 1.0.19
285
+     * @param  string $context View or edit context.
286
+     * @return array
287
+     */
288
+    public function get_earned( $context = 'view' ) {
289
+        return $this->get_prop( 'earned', $context );
290
+    }
291
+
292
+    /**
293
+     * Get the total amount refunded via this form.
294
+     *
295
+     * @since 1.0.19
296
+     * @param  string $context View or edit context.
297
+     * @return array
298
+     */
299
+    public function get_refunded( $context = 'view' ) {
300
+        return $this->get_prop( 'refunded', $context );
301
+    }
302
+
303
+    /**
304
+     * Get the total amount cancelled via this form.
305
+     *
306
+     * @since 1.0.19
307
+     * @param  string $context View or edit context.
308
+     * @return array
309
+     */
310
+    public function get_cancelled( $context = 'view' ) {
311
+        return $this->get_prop( 'cancelled', $context );
312
+    }
313
+
314
+    /**
315
+     * Get the total amount failed via this form.
316
+     *
317
+     * @since 1.0.19
318
+     * @param  string $context View or edit context.
319
+     * @return array
320
+     */
321
+    public function get_failed( $context = 'view' ) {
322
+        return $this->get_prop( 'failed', $context );
323
+    }
324 324
 
325 325
     /*
326 326
 	|--------------------------------------------------------------------------
@@ -333,22 +333,22 @@  discard block
 block discarded – undo
333 333
     */
334 334
 
335 335
     /**
336
-	 * Set plugin version when the item was created.
337
-	 *
338
-	 * @since 1.0.19
339
-	 */
340
-	public function set_version( $value ) {
341
-		$this->set_prop( 'version', $value );
336
+     * Set plugin version when the item was created.
337
+     *
338
+     * @since 1.0.19
339
+     */
340
+    public function set_version( $value ) {
341
+        $this->set_prop( 'version', $value );
342 342
     }
343 343
 
344 344
     /**
345
-	 * Set date when the item was created.
346
-	 *
347
-	 * @since 1.0.19
348
-	 * @param string $value Value to set.
345
+     * Set date when the item was created.
346
+     *
347
+     * @since 1.0.19
348
+     * @param string $value Value to set.
349 349
      * @return bool Whether or not the date was set.
350
-	 */
351
-	public function set_date_created( $value ) {
350
+     */
351
+    public function set_date_created( $value ) {
352 352
         $date = strtotime( $value );
353 353
 
354 354
         if ( $date ) {
@@ -361,13 +361,13 @@  discard block
 block discarded – undo
361 361
     }
362 362
 
363 363
     /**
364
-	 * Set date when the item was last modified.
365
-	 *
366
-	 * @since 1.0.19
367
-	 * @param string $value Value to set.
364
+     * Set date when the item was last modified.
365
+     *
366
+     * @since 1.0.19
367
+     * @param string $value Value to set.
368 368
      * @return bool Whether or not the date was set.
369
-	 */
370
-	public function set_date_modified( $value ) {
369
+     */
370
+    public function set_date_modified( $value ) {
371 371
         $date = strtotime( $value );
372 372
 
373 373
         if ( $date ) {
@@ -380,118 +380,118 @@  discard block
 block discarded – undo
380 380
     }
381 381
 
382 382
     /**
383
-	 * Set the item name.
384
-	 *
385
-	 * @since 1.0.19
386
-	 * @param  string $value New name.
387
-	 */
388
-	public function set_name( $value ) {
389
-		$this->set_prop( 'name', sanitize_text_field( $value ) );
383
+     * Set the item name.
384
+     *
385
+     * @since 1.0.19
386
+     * @param  string $value New name.
387
+     */
388
+    public function set_name( $value ) {
389
+        $this->set_prop( 'name', sanitize_text_field( $value ) );
390 390
     }
391 391
 
392 392
     /**
393
-	 * Alias of self::set_name().
394
-	 *
395
-	 * @since 1.0.19
396
-	 * @param  string $value New name.
397
-	 */
398
-	public function set_title( $value ) {
399
-		$this->set_name( $value );
393
+     * Alias of self::set_name().
394
+     *
395
+     * @since 1.0.19
396
+     * @param  string $value New name.
397
+     */
398
+    public function set_title( $value ) {
399
+        $this->set_name( $value );
400
+    }
401
+
402
+    /**
403
+     * Set the owner of the item.
404
+     *
405
+     * @since 1.0.19
406
+     * @param  int $value New author.
407
+     */
408
+    public function set_author( $value ) {
409
+        $this->set_prop( 'author', (int) $value );
410
+    }
411
+
412
+    /**
413
+     * Set the form elements.
414
+     *
415
+     * @since 1.0.19
416
+     * @param  array $value Form elements.
417
+     */
418
+    public function set_elements( $value ) {
419
+        if ( is_array( $value ) ) {
420
+            $this->set_prop( 'elements', $value );
421
+        }
400 422
     }
401 423
 
402 424
     /**
403
-	 * Set the owner of the item.
404
-	 *
405
-	 * @since 1.0.19
406
-	 * @param  int $value New author.
407
-	 */
408
-	public function set_author( $value ) {
409
-		$this->set_prop( 'author', (int) $value );
410
-	}
411
-
412
-	/**
413
-	 * Set the form elements.
414
-	 *
415
-	 * @since 1.0.19
416
-	 * @param  array $value Form elements.
417
-	 */
418
-	public function set_elements( $value ) {
419
-		if ( is_array( $value ) ) {
420
-			$this->set_prop( 'elements', $value );
421
-		}
422
-	}
423
-
424
-	/**
425
-	 * Set the form items.
426
-	 *
427
-	 * @since 1.0.19
428
-	 * @param  array $value Form elements.
429
-	 */
430
-	public function set_items( $value ) {
431
-		if ( is_array( $value ) ) {
432
-			$this->set_prop( 'items', $value );
433
-		}
434
-	}
425
+     * Set the form items.
426
+     *
427
+     * @since 1.0.19
428
+     * @param  array $value Form elements.
429
+     */
430
+    public function set_items( $value ) {
431
+        if ( is_array( $value ) ) {
432
+            $this->set_prop( 'items', $value );
433
+        }
434
+    }
435 435
 	
436
-	/**
437
-	 * Set the total amount earned via this form.
438
-	 *
439
-	 * @since 1.0.19
440
-	 * @param  float $value Amount earned.
441
-	 * @return array
442
-	 */
443
-	public function set_earned( $value ) {
444
-		return $this->set_prop( 'earned', $value );
445
-	}
446
-
447
-	/**
448
-	 * Set the total amount refunded via this form.
449
-	 *
450
-	 * @since 1.0.19
451
-	 * @param  float $value Amount refunded.
452
-	 * @return array
453
-	 */
454
-	public function set_refunded( $value ) {
455
-		return $this->set_prop( 'refunded', $value );
456
-	}
457
-
458
-	/**
459
-	 * Set the total amount cancelled via this form.
460
-	 *
461
-	 * @since 1.0.19
462
-	 * @param  float $value Amount cancelled.
463
-	 * @return array
464
-	 */
465
-	public function set_cancelled( $value ) {
466
-		return $this->set_prop( 'cancelled', $value );
467
-	}
468
-
469
-	/**
470
-	 * Set the total amount failed via this form.
471
-	 *
472
-	 * @since 1.0.19
473
-	 * @param  float $value Amount cancelled.
474
-	 * @return array
475
-	 */
476
-	public function set_failed( $value ) {
477
-		return $this->set_prop( 'failed', $value );
478
-	}
436
+    /**
437
+     * Set the total amount earned via this form.
438
+     *
439
+     * @since 1.0.19
440
+     * @param  float $value Amount earned.
441
+     * @return array
442
+     */
443
+    public function set_earned( $value ) {
444
+        return $this->set_prop( 'earned', $value );
445
+    }
446
+
447
+    /**
448
+     * Set the total amount refunded via this form.
449
+     *
450
+     * @since 1.0.19
451
+     * @param  float $value Amount refunded.
452
+     * @return array
453
+     */
454
+    public function set_refunded( $value ) {
455
+        return $this->set_prop( 'refunded', $value );
456
+    }
457
+
458
+    /**
459
+     * Set the total amount cancelled via this form.
460
+     *
461
+     * @since 1.0.19
462
+     * @param  float $value Amount cancelled.
463
+     * @return array
464
+     */
465
+    public function set_cancelled( $value ) {
466
+        return $this->set_prop( 'cancelled', $value );
467
+    }
468
+
469
+    /**
470
+     * Set the total amount failed via this form.
471
+     *
472
+     * @since 1.0.19
473
+     * @param  float $value Amount cancelled.
474
+     * @return array
475
+     */
476
+    public function set_failed( $value ) {
477
+        return $this->set_prop( 'failed', $value );
478
+    }
479 479
 
480 480
     /**
481 481
      * Create an item. For backwards compatibilty.
482 482
      *
483 483
      * @deprecated
484
-	 * @return int item id
484
+     * @return int item id
485 485
      */
486 486
     public function create( $data = array() ) {
487 487
 
488
-		// Set the properties.
489
-		if ( is_array( $data ) ) {
490
-			$this->set_props( $data );
491
-		}
488
+        // Set the properties.
489
+        if ( is_array( $data ) ) {
490
+            $this->set_props( $data );
491
+        }
492 492
 
493
-		// Save the item.
494
-		return $this->save();
493
+        // Save the item.
494
+        return $this->save();
495 495
 
496 496
     }
497 497
 
@@ -499,7 +499,7 @@  discard block
 block discarded – undo
499 499
      * Updates an item. For backwards compatibilty.
500 500
      *
501 501
      * @deprecated
502
-	 * @return int item id
502
+     * @return int item id
503 503
      */
504 504
     public function update( $data = array() ) {
505 505
         return $this->create( $data );
@@ -515,22 +515,22 @@  discard block
 block discarded – undo
515 515
 	*/
516 516
 
517 517
     /**
518
-	 * Checks whether this is the default payment form.
519
-	 *
520
-	 * @since 1.0.19
521
-	 * @return bool
522
-	 */
518
+     * Checks whether this is the default payment form.
519
+     *
520
+     * @since 1.0.19
521
+     * @return bool
522
+     */
523 523
     public function is_default() {
524 524
         $is_default = $this->get_id() == wpinv_get_default_payment_form();
525 525
         return (bool) apply_filters( 'wpinv_is_default_payment_form', $is_default, $this->ID, $this );
526
-	}
526
+    }
527 527
 
528 528
     /**
529
-	 * Checks whether the form is active.
530
-	 *
531
-	 * @since 1.0.19
532
-	 * @return bool
533
-	 */
529
+     * Checks whether the form is active.
530
+     *
531
+     * @since 1.0.19
532
+     * @return bool
533
+     */
534 534
     public function is_active() {
535 535
         $is_active = null !== $this->get_id();
536 536
 
Please login to merge, or discard this patch.