Passed
Push — master ( afad5e...c5d98b )
by Stiofan
05:31
created
templates/emails/wpinv-email-new_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
templates/emails/wpinv-email-completed_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
templates/emails/wpinv-email-user_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
templates/emails/wpinv-email-cancelled_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
templates/emails/wpinv-email-refunded_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
templates/emails/wpinv-email-failed_invoice.php 1 patch
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -7,22 +7,22 @@
 block discarded – undo
7 7
  * @version 1.0.19
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 // Print the email header.
13
-do_action( 'wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin );
13
+do_action('wpinv_email_header', $email_heading, $invoice, $email_type, $sent_to_admin);
14 14
 
15 15
 // Generate the custom message body.
16 16
 echo $message_body;
17 17
 
18 18
 // Print invoice details.
19
-do_action( 'wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin );
19
+do_action('wpinv_email_invoice_details', $invoice, $email_type, $sent_to_admin);
20 20
 
21 21
 // Print invoice items.
22
-do_action( 'wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin );
22
+do_action('wpinv_email_invoice_items', $invoice, $email_type, $sent_to_admin);
23 23
 
24 24
 // Print the billing details.
25
-do_action( 'wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin );
25
+do_action('wpinv_email_billing_details', $invoice, $email_type, $sent_to_admin);
26 26
 
27 27
 // Print the email footer.
28
-do_action( 'wpinv_email_footer', $invoice, $email_type, $sent_to_admin );
28
+do_action('wpinv_email_footer', $invoice, $email_type, $sent_to_admin);
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-crud-controller.php 2 patches
Indentation   +471 added lines, -471 removed lines patch added patch discarded remove patch
@@ -17,476 +17,476 @@
 block discarded – undo
17 17
  */
18 18
 class GetPaid_REST_CRUD_Controller extends GetPaid_REST_Controller {
19 19
 
20
-	/**
21
-	 * Contains this controller's class name.
22
-	 *
23
-	 * @var string
24
-	 */
25
-	public $crud_class;
26
-
27
-	/**
28
-	 * Contains the current CRUD object.
29
-	 *
30
-	 * @var GetPaid_Data
31
-	 */
32
-	protected $data_object;
33
-
34
-	/**
35
-	 * Registers the routes for the objects of the controller.
36
-	 *
37
-	 * @since 1.0.19
38
-	 *
39
-	 * @see register_rest_route()
40
-	 */
41
-	public function register_namespace_routes( $namespace ) {
42
-
43
-		register_rest_route(
44
-			$namespace,
45
-			'/' . $this->rest_base,
46
-			array(
47
-				array(
48
-					'methods'             => WP_REST_Server::READABLE,
49
-					'callback'            => array( $this, 'get_items' ),
50
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
51
-					'args'                => $this->get_collection_params(),
52
-				),
53
-				array(
54
-					'methods'             => WP_REST_Server::CREATABLE,
55
-					'callback'            => array( $this, 'create_item' ),
56
-					'permission_callback' => array( $this, 'create_item_permissions_check' ),
57
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
58
-				),
59
-				'schema' => array( $this, 'get_public_item_schema' ),
60
-			)
61
-		);
62
-
63
-		$get_item_args = array(
64
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
65
-		);
66
-
67
-		register_rest_route(
68
-			$namespace,
69
-			'/' . $this->rest_base . '/(?P<id>[\d]+)',
70
-			array(
71
-				'args'   => array(
72
-					'id' => array(
73
-						'description' => __( 'Unique identifier for the object.', 'invoicing' ),
74
-						'type'        => 'integer',
75
-					),
76
-				),
77
-				array(
78
-					'methods'             => WP_REST_Server::READABLE,
79
-					'callback'            => array( $this, 'get_item' ),
80
-					'permission_callback' => array( $this, 'get_item_permissions_check' ),
81
-					'args'                => $get_item_args,
82
-				),
83
-				array(
84
-					'methods'             => WP_REST_Server::EDITABLE,
85
-					'callback'            => array( $this, 'update_item' ),
86
-					'permission_callback' => array( $this, 'update_item_permissions_check' ),
87
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
88
-				),
89
-				array(
90
-					'methods'             => WP_REST_Server::DELETABLE,
91
-					'callback'            => array( $this, 'delete_item' ),
92
-					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
93
-					'args'                => array(
94
-						'force' => array(
95
-							'type'        => 'boolean',
96
-							'default'     => false,
97
-							'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
98
-						),
99
-					),
100
-				),
101
-				'schema' => array( $this, 'get_public_item_schema' ),
102
-			)
103
-		);
104
-
105
-	}
106
-
107
-	/**
108
-	 * Saves a single object.
109
-	 *
110
-	 * @param GetPaid_Data $object Object to save.
111
-	 * @return WP_Error|GetPaid_Data
112
-	 */
113
-	protected function save_object( $object ) {
114
-		$object->save();
115
-
116
-		if ( ! empty( $object->last_error ) ) {
117
-			return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
118
-		}
119
-
120
-		return new $this->crud_class( $object->get_id() );
121
-	}
122
-
123
-	/**
124
-	 * Retrieves a single object.
125
-	 *
126
-	 * @since 1.0.13
127
-	 *
128
-	 * @param int|WP_Post $object_id Supplied ID.
129
-	 * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
130
-	 */
131
-	protected function get_object( $object_id ) {
132
-
133
-		// Do we have an object?
134
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
135
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
136
-		}
137
-
138
-		// Fetch the object.
139
-		$object = new $this->crud_class( $object_id );
140
-		if ( ! empty( $object->last_error ) ) {
141
-			return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
142
-		}
143
-
144
-		$this->data_object = $object;
145
-		return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
146
-
147
-	}
148
-
149
-	/**
150
-	 * Get a single object.
151
-	 *
152
-	 * @param WP_REST_Request $request Full details about the request.
153
-	 * @return WP_Error|WP_REST_Response
154
-	 */
155
-	public function get_item( $request ) {
156
-
157
-		// Fetch the item.
158
-		$object = $this->get_object( $request['id'] );
159
-
160
-		if ( is_wp_error( $object ) ) {
161
-			return $object;
162
-		}
163
-
164
-		// Generate a response.
165
-		return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) );
166
-
167
-	}
168
-
169
-	/**
170
-	 * Create a single object.
171
-	 *
172
-	 * @param WP_REST_Request $request Full details about the request.
173
-	 * @return WP_Error|WP_REST_Response
174
-	 */
175
-	public function create_item( $request ) {
176
-
177
-		// Can not create an existing item.
178
-		if ( ! empty( $request['id'] ) ) {
179
-			/* translators: %s: post type */
180
-			return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
181
-		}
182
-
183
-		// Generate a GetPaid_Data object from the request.
184
-		$object = $this->prepare_item_for_database( $request );
185
-		if ( is_wp_error( $object ) ) {
186
-			return $object;
187
-		}
188
-
189
-		// Save the object.
190
-		$object = $this->save_object( $object );
191
-		if ( is_wp_error( $object ) ) {
192
-			return $object;
193
-		}
194
-
195
-		// Save special fields.
196
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
197
-		if ( is_wp_error( $save_special ) ) {
198
-			$object->delete( true );
199
-			return $save_special;
200
-		}
201
-
202
-		$request->set_param( 'context', 'edit' );
203
-		$response = $this->prepare_item_for_response( $object, $request );
204
-		$response = rest_ensure_response( $response );
205
-		$response->set_status( 201 );
206
-		$response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
207
-
208
-		return $response;
209
-	}
210
-
211
-	/**
212
-	 * Update a single object.
213
-	 *
214
-	 * @param WP_REST_Request $request Full details about the request.
215
-	 * @return WP_Error|WP_REST_Response
216
-	 */
217
-	public function update_item( $request ) {
218
-
219
-		// Fetch the item.
220
-		$object = $this->get_object( $request['id'] );
221
-		if ( is_wp_error( $object ) ) {
222
-			return $object;
223
-		}
224
-
225
-		// Prepare the item for saving.
226
-		$object = $this->prepare_item_for_database( $request );
227
-		if ( is_wp_error( $object ) ) {
228
-			return $object;
229
-		}
230
-
231
-		// Save the item.
232
-		$object = $this->save_object( $object );
233
-		if ( is_wp_error( $object ) ) {
234
-			return $object;
235
-		}
236
-
237
-		// Save special fields (those added via hooks).
238
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
239
-		if ( is_wp_error( $save_special ) ) {
240
-			return $save_special;
241
-		}
242
-
243
-		$request->set_param( 'context', 'edit' );
244
-		$response = $this->prepare_item_for_response( $object, $request );
245
-		return rest_ensure_response( $response );
246
-	}
247
-
248
-	/**
249
-	 * Prepare links for the request.
250
-	 *
251
-	 * @param GetPaid_Data    $object GetPaid_Data object.
252
-	 * @return array Links for the given object.
253
-	 */
254
-	protected function prepare_links( $object ) {
255
-
256
-		$links = array(
257
-			'self'       => array(
258
-				'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
259
-			),
260
-			'collection' => array(
261
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
262
-			),
263
-		);
264
-
265
-		return $links;
266
-	}
267
-
268
-	/**
269
-	 * Get the query params for collections of attachments.
270
-	 *
271
-	 * @return array
272
-	 */
273
-	public function get_collection_params() {
274
-		$params = parent::get_collection_params();
275
-		$params['context']['default'] = 'view';
276
-		return $params;
277
-	}
278
-
279
-	/**
280
-	 * Only return writable props from schema.
281
-	 *
282
-	 * @param  array $schema Schema.
283
-	 * @return bool
284
-	 */
285
-	public function filter_writable_props( $schema ) {
286
-		return empty( $schema['readonly'] );
287
-	}
288
-
289
-	/**
290
-	 * Prepare a single object for create or update.
291
-	 *
292
-	 * @since 1.0.19
293
-	 * @param  WP_REST_Request $request Request object.
294
-	 * @return GetPaid_Data|WP_Error Data object or WP_Error.
295
-	 */
296
-	protected function prepare_item_for_database( $request ) {
297
-
298
-		// Do we have an object?
299
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
300
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
301
-		}
302
-
303
-		// Prepare the object.
304
-		$id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
305
-		$object    = new $this->crud_class( $id );
306
-
307
-		// Abort if an error exists.
308
-		if ( ! empty( $object->last_error ) ) {
309
-			return new WP_Error( 'invalid_item', $object->last_error );
310
-		}
311
-
312
-		$schema    = $this->get_item_schema();
313
-		$data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
314
-
315
-		// Handle all writable props.
316
-		foreach ( $data_keys as $key ) {
317
-			$value = $request[ $key ];
318
-
319
-			if ( ! is_null( $value ) ) {
320
-				switch ( $key ) {
321
-
322
-					case 'meta_data':
323
-						if ( is_array( $value ) ) {
324
-							foreach ( $value as $meta ) {
325
-								$object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
326
-							}
327
-						}
328
-						break;
329
-
330
-					default:
331
-						if ( is_callable( array( $object, "set_{$key}" ) ) ) {
332
-							$object->{"set_{$key}"}( $value );
333
-						}
334
-						break;
335
-				}
336
-			}
337
-
338
-		}
339
-
340
-		// Filters an object before it is inserted via the REST API..
341
-		return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
342
-	}
343
-
344
-	/**
345
-	 * Retrieves data from a GetPaid class.
346
-	 *
347
-	 * @since  1.0.19
348
-	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
349
-	 * @return array
350
-	 */
351
-	protected function prepare_object_meta_data( $meta_data ) {
352
-		$meta = array();
353
-
354
-		foreach( $meta_data as $object ) {
355
-			$meta[] = $object->get_data();
356
-		}
357
-
358
-		return $meta;
359
-	}
360
-
361
-	/**
362
-	 * Retrieves invoice items.
363
-	 *
364
-	 * @since  1.0.19
365
-	 * @param  WPInv_Invoice $invoice  Invoice items.
366
-	 * @param array            $fields Fields to include.
367
-	 * @return array
368
-	 */
369
-	protected function prepare_invoice_items( $invoice ) {
370
-		$items = array();
371
-
372
-		foreach( $invoice->get_items() as $item ) {
373
-
374
-			$item_data = $item->prepare_data_for_saving();
375
-
376
-			if ( 'amount' == $invoice->get_template() ) {
377
-				$item_data['quantity'] = 1;
378
-			}
379
-
380
-			$items[] = $item_data;
381
-		}
382
-
383
-		return $items;
384
-	}
385
-
386
-	/**
387
-	 * Retrieves data from a GetPaid class.
388
-	 *
389
-	 * @since  1.0.19
390
-	 * @param  GetPaid_Data    $object  Data object.
391
-	 * @param array            $fields Fields to include.
392
-	 * @param string           $context either view or edit.
393
-	 * @return array
394
-	 */
395
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
396
-
397
-		$data = array();
398
-
399
-		// Handle all writable props.
400
-		foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
401
-
402
-			// Abort if it is not included.
403
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
404
-				continue;
405
-			}
406
-
407
-			// Or this current object does not support the field.
408
-			if ( ! $this->object_supports_field( $object, $key ) ) {
409
-				continue;
410
-			}
411
-
412
-			// Handle meta data.
413
-			if ( $key == 'meta_data' ) {
414
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
415
-				continue;
416
-			}
417
-
418
-			// Handle items.
419
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
420
-				$data['items'] = $this->prepare_invoice_items( $object );
421
-				continue;
422
-			}
423
-
424
-			// Booleans.
425
-			if ( is_callable( array( $object, $key ) ) ) {
426
-				$data[ $key ] = $object->$key( $context );
427
-				continue;
428
-			}
429
-
430
-			// Get object value.
431
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
432
-				$value = $object->{"get_{$key}"}( $context );
433
-
434
-				// If the value is an instance of GetPaid_Data...
435
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
436
-					$value = $value->get_data( $context );
437
-				}
438
-
439
-				// For objects, retrieves it's properties.
440
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
441
-				continue;
442
-			}
443
-
444
-		}
445
-
446
-		return $data;
447
-	}
448
-
449
-	/**
450
-	 * Checks if a key should be included in a response.
451
-	 *
452
-	 * @since  1.0.19
453
-	 * @param  GetPaid_Data $object  Data object.
454
-	 * @param  string       $field_key The key to check for.
455
-	 * @return bool
456
-	 */
457
-	public function object_supports_field( $object, $field_key ) {
458
-		return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
459
-	}
460
-
461
-	/**
462
-	 * Prepare a single object output for response.
463
-	 *
464
-	 * @since  1.0.19
465
-	 * @param  GetPaid_Data    $object  Data object.
466
-	 * @param  WP_REST_Request $request Request object.
467
-	 * @return WP_REST_Response
468
-	 */
469
-	public function prepare_item_for_response( $object, $request ) {
470
-		remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
471
-
472
-		$this->data_object = $object;
473
-
474
-		// Fetch the fields to include in this response.
475
-		$fields = $this->get_fields_for_response( $request );
476
-
477
-		// Prepare object data.
478
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
479
-		$data    = $this->prepare_object_data( $object, $fields, $context );
480
-		$data    = $this->add_additional_fields_to_object( $data, $request );
481
-		$data    = $this->limit_object_to_requested_fields( $data, $fields );
482
-		$data    = $this->filter_response_by_context( $data, $context );
483
-
484
-		// Prepare the response.
485
-		$response = rest_ensure_response( $data );
486
-		$response->add_links( $this->prepare_links( $object, $request ) );
487
-
488
-		// Filter item response.
489
-		return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
490
-	}
20
+    /**
21
+     * Contains this controller's class name.
22
+     *
23
+     * @var string
24
+     */
25
+    public $crud_class;
26
+
27
+    /**
28
+     * Contains the current CRUD object.
29
+     *
30
+     * @var GetPaid_Data
31
+     */
32
+    protected $data_object;
33
+
34
+    /**
35
+     * Registers the routes for the objects of the controller.
36
+     *
37
+     * @since 1.0.19
38
+     *
39
+     * @see register_rest_route()
40
+     */
41
+    public function register_namespace_routes( $namespace ) {
42
+
43
+        register_rest_route(
44
+            $namespace,
45
+            '/' . $this->rest_base,
46
+            array(
47
+                array(
48
+                    'methods'             => WP_REST_Server::READABLE,
49
+                    'callback'            => array( $this, 'get_items' ),
50
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
51
+                    'args'                => $this->get_collection_params(),
52
+                ),
53
+                array(
54
+                    'methods'             => WP_REST_Server::CREATABLE,
55
+                    'callback'            => array( $this, 'create_item' ),
56
+                    'permission_callback' => array( $this, 'create_item_permissions_check' ),
57
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
58
+                ),
59
+                'schema' => array( $this, 'get_public_item_schema' ),
60
+            )
61
+        );
62
+
63
+        $get_item_args = array(
64
+            'context' => $this->get_context_param( array( 'default' => 'view' ) ),
65
+        );
66
+
67
+        register_rest_route(
68
+            $namespace,
69
+            '/' . $this->rest_base . '/(?P<id>[\d]+)',
70
+            array(
71
+                'args'   => array(
72
+                    'id' => array(
73
+                        'description' => __( 'Unique identifier for the object.', 'invoicing' ),
74
+                        'type'        => 'integer',
75
+                    ),
76
+                ),
77
+                array(
78
+                    'methods'             => WP_REST_Server::READABLE,
79
+                    'callback'            => array( $this, 'get_item' ),
80
+                    'permission_callback' => array( $this, 'get_item_permissions_check' ),
81
+                    'args'                => $get_item_args,
82
+                ),
83
+                array(
84
+                    'methods'             => WP_REST_Server::EDITABLE,
85
+                    'callback'            => array( $this, 'update_item' ),
86
+                    'permission_callback' => array( $this, 'update_item_permissions_check' ),
87
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
88
+                ),
89
+                array(
90
+                    'methods'             => WP_REST_Server::DELETABLE,
91
+                    'callback'            => array( $this, 'delete_item' ),
92
+                    'permission_callback' => array( $this, 'delete_item_permissions_check' ),
93
+                    'args'                => array(
94
+                        'force' => array(
95
+                            'type'        => 'boolean',
96
+                            'default'     => false,
97
+                            'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
98
+                        ),
99
+                    ),
100
+                ),
101
+                'schema' => array( $this, 'get_public_item_schema' ),
102
+            )
103
+        );
104
+
105
+    }
106
+
107
+    /**
108
+     * Saves a single object.
109
+     *
110
+     * @param GetPaid_Data $object Object to save.
111
+     * @return WP_Error|GetPaid_Data
112
+     */
113
+    protected function save_object( $object ) {
114
+        $object->save();
115
+
116
+        if ( ! empty( $object->last_error ) ) {
117
+            return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
118
+        }
119
+
120
+        return new $this->crud_class( $object->get_id() );
121
+    }
122
+
123
+    /**
124
+     * Retrieves a single object.
125
+     *
126
+     * @since 1.0.13
127
+     *
128
+     * @param int|WP_Post $object_id Supplied ID.
129
+     * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
130
+     */
131
+    protected function get_object( $object_id ) {
132
+
133
+        // Do we have an object?
134
+        if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
135
+            return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
136
+        }
137
+
138
+        // Fetch the object.
139
+        $object = new $this->crud_class( $object_id );
140
+        if ( ! empty( $object->last_error ) ) {
141
+            return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
142
+        }
143
+
144
+        $this->data_object = $object;
145
+        return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
146
+
147
+    }
148
+
149
+    /**
150
+     * Get a single object.
151
+     *
152
+     * @param WP_REST_Request $request Full details about the request.
153
+     * @return WP_Error|WP_REST_Response
154
+     */
155
+    public function get_item( $request ) {
156
+
157
+        // Fetch the item.
158
+        $object = $this->get_object( $request['id'] );
159
+
160
+        if ( is_wp_error( $object ) ) {
161
+            return $object;
162
+        }
163
+
164
+        // Generate a response.
165
+        return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) );
166
+
167
+    }
168
+
169
+    /**
170
+     * Create a single object.
171
+     *
172
+     * @param WP_REST_Request $request Full details about the request.
173
+     * @return WP_Error|WP_REST_Response
174
+     */
175
+    public function create_item( $request ) {
176
+
177
+        // Can not create an existing item.
178
+        if ( ! empty( $request['id'] ) ) {
179
+            /* translators: %s: post type */
180
+            return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
181
+        }
182
+
183
+        // Generate a GetPaid_Data object from the request.
184
+        $object = $this->prepare_item_for_database( $request );
185
+        if ( is_wp_error( $object ) ) {
186
+            return $object;
187
+        }
188
+
189
+        // Save the object.
190
+        $object = $this->save_object( $object );
191
+        if ( is_wp_error( $object ) ) {
192
+            return $object;
193
+        }
194
+
195
+        // Save special fields.
196
+        $save_special = $this->update_additional_fields_for_object( $object, $request );
197
+        if ( is_wp_error( $save_special ) ) {
198
+            $object->delete( true );
199
+            return $save_special;
200
+        }
201
+
202
+        $request->set_param( 'context', 'edit' );
203
+        $response = $this->prepare_item_for_response( $object, $request );
204
+        $response = rest_ensure_response( $response );
205
+        $response->set_status( 201 );
206
+        $response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
207
+
208
+        return $response;
209
+    }
210
+
211
+    /**
212
+     * Update a single object.
213
+     *
214
+     * @param WP_REST_Request $request Full details about the request.
215
+     * @return WP_Error|WP_REST_Response
216
+     */
217
+    public function update_item( $request ) {
218
+
219
+        // Fetch the item.
220
+        $object = $this->get_object( $request['id'] );
221
+        if ( is_wp_error( $object ) ) {
222
+            return $object;
223
+        }
224
+
225
+        // Prepare the item for saving.
226
+        $object = $this->prepare_item_for_database( $request );
227
+        if ( is_wp_error( $object ) ) {
228
+            return $object;
229
+        }
230
+
231
+        // Save the item.
232
+        $object = $this->save_object( $object );
233
+        if ( is_wp_error( $object ) ) {
234
+            return $object;
235
+        }
236
+
237
+        // Save special fields (those added via hooks).
238
+        $save_special = $this->update_additional_fields_for_object( $object, $request );
239
+        if ( is_wp_error( $save_special ) ) {
240
+            return $save_special;
241
+        }
242
+
243
+        $request->set_param( 'context', 'edit' );
244
+        $response = $this->prepare_item_for_response( $object, $request );
245
+        return rest_ensure_response( $response );
246
+    }
247
+
248
+    /**
249
+     * Prepare links for the request.
250
+     *
251
+     * @param GetPaid_Data    $object GetPaid_Data object.
252
+     * @return array Links for the given object.
253
+     */
254
+    protected function prepare_links( $object ) {
255
+
256
+        $links = array(
257
+            'self'       => array(
258
+                'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
259
+            ),
260
+            'collection' => array(
261
+                'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
262
+            ),
263
+        );
264
+
265
+        return $links;
266
+    }
267
+
268
+    /**
269
+     * Get the query params for collections of attachments.
270
+     *
271
+     * @return array
272
+     */
273
+    public function get_collection_params() {
274
+        $params = parent::get_collection_params();
275
+        $params['context']['default'] = 'view';
276
+        return $params;
277
+    }
278
+
279
+    /**
280
+     * Only return writable props from schema.
281
+     *
282
+     * @param  array $schema Schema.
283
+     * @return bool
284
+     */
285
+    public function filter_writable_props( $schema ) {
286
+        return empty( $schema['readonly'] );
287
+    }
288
+
289
+    /**
290
+     * Prepare a single object for create or update.
291
+     *
292
+     * @since 1.0.19
293
+     * @param  WP_REST_Request $request Request object.
294
+     * @return GetPaid_Data|WP_Error Data object or WP_Error.
295
+     */
296
+    protected function prepare_item_for_database( $request ) {
297
+
298
+        // Do we have an object?
299
+        if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
300
+            return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
301
+        }
302
+
303
+        // Prepare the object.
304
+        $id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
305
+        $object    = new $this->crud_class( $id );
306
+
307
+        // Abort if an error exists.
308
+        if ( ! empty( $object->last_error ) ) {
309
+            return new WP_Error( 'invalid_item', $object->last_error );
310
+        }
311
+
312
+        $schema    = $this->get_item_schema();
313
+        $data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
314
+
315
+        // Handle all writable props.
316
+        foreach ( $data_keys as $key ) {
317
+            $value = $request[ $key ];
318
+
319
+            if ( ! is_null( $value ) ) {
320
+                switch ( $key ) {
321
+
322
+                    case 'meta_data':
323
+                        if ( is_array( $value ) ) {
324
+                            foreach ( $value as $meta ) {
325
+                                $object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
326
+                            }
327
+                        }
328
+                        break;
329
+
330
+                    default:
331
+                        if ( is_callable( array( $object, "set_{$key}" ) ) ) {
332
+                            $object->{"set_{$key}"}( $value );
333
+                        }
334
+                        break;
335
+                }
336
+            }
337
+
338
+        }
339
+
340
+        // Filters an object before it is inserted via the REST API..
341
+        return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
342
+    }
343
+
344
+    /**
345
+     * Retrieves data from a GetPaid class.
346
+     *
347
+     * @since  1.0.19
348
+     * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
349
+     * @return array
350
+     */
351
+    protected function prepare_object_meta_data( $meta_data ) {
352
+        $meta = array();
353
+
354
+        foreach( $meta_data as $object ) {
355
+            $meta[] = $object->get_data();
356
+        }
357
+
358
+        return $meta;
359
+    }
360
+
361
+    /**
362
+     * Retrieves invoice items.
363
+     *
364
+     * @since  1.0.19
365
+     * @param  WPInv_Invoice $invoice  Invoice items.
366
+     * @param array            $fields Fields to include.
367
+     * @return array
368
+     */
369
+    protected function prepare_invoice_items( $invoice ) {
370
+        $items = array();
371
+
372
+        foreach( $invoice->get_items() as $item ) {
373
+
374
+            $item_data = $item->prepare_data_for_saving();
375
+
376
+            if ( 'amount' == $invoice->get_template() ) {
377
+                $item_data['quantity'] = 1;
378
+            }
379
+
380
+            $items[] = $item_data;
381
+        }
382
+
383
+        return $items;
384
+    }
385
+
386
+    /**
387
+     * Retrieves data from a GetPaid class.
388
+     *
389
+     * @since  1.0.19
390
+     * @param  GetPaid_Data    $object  Data object.
391
+     * @param array            $fields Fields to include.
392
+     * @param string           $context either view or edit.
393
+     * @return array
394
+     */
395
+    protected function prepare_object_data( $object, $fields, $context = 'view' ) {
396
+
397
+        $data = array();
398
+
399
+        // Handle all writable props.
400
+        foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
401
+
402
+            // Abort if it is not included.
403
+            if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
404
+                continue;
405
+            }
406
+
407
+            // Or this current object does not support the field.
408
+            if ( ! $this->object_supports_field( $object, $key ) ) {
409
+                continue;
410
+            }
411
+
412
+            // Handle meta data.
413
+            if ( $key == 'meta_data' ) {
414
+                $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
415
+                continue;
416
+            }
417
+
418
+            // Handle items.
419
+            if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
420
+                $data['items'] = $this->prepare_invoice_items( $object );
421
+                continue;
422
+            }
423
+
424
+            // Booleans.
425
+            if ( is_callable( array( $object, $key ) ) ) {
426
+                $data[ $key ] = $object->$key( $context );
427
+                continue;
428
+            }
429
+
430
+            // Get object value.
431
+            if ( is_callable( array( $object, "get_{$key}" ) ) ) {
432
+                $value = $object->{"get_{$key}"}( $context );
433
+
434
+                // If the value is an instance of GetPaid_Data...
435
+                if ( is_a( $value, 'GetPaid_Data' ) ) {
436
+                    $value = $value->get_data( $context );
437
+                }
438
+
439
+                // For objects, retrieves it's properties.
440
+                $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
441
+                continue;
442
+            }
443
+
444
+        }
445
+
446
+        return $data;
447
+    }
448
+
449
+    /**
450
+     * Checks if a key should be included in a response.
451
+     *
452
+     * @since  1.0.19
453
+     * @param  GetPaid_Data $object  Data object.
454
+     * @param  string       $field_key The key to check for.
455
+     * @return bool
456
+     */
457
+    public function object_supports_field( $object, $field_key ) {
458
+        return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
459
+    }
460
+
461
+    /**
462
+     * Prepare a single object output for response.
463
+     *
464
+     * @since  1.0.19
465
+     * @param  GetPaid_Data    $object  Data object.
466
+     * @param  WP_REST_Request $request Request object.
467
+     * @return WP_REST_Response
468
+     */
469
+    public function prepare_item_for_response( $object, $request ) {
470
+        remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
471
+
472
+        $this->data_object = $object;
473
+
474
+        // Fetch the fields to include in this response.
475
+        $fields = $this->get_fields_for_response( $request );
476
+
477
+        // Prepare object data.
478
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
479
+        $data    = $this->prepare_object_data( $object, $fields, $context );
480
+        $data    = $this->add_additional_fields_to_object( $data, $request );
481
+        $data    = $this->limit_object_to_requested_fields( $data, $fields );
482
+        $data    = $this->filter_response_by_context( $data, $context );
483
+
484
+        // Prepare the response.
485
+        $response = rest_ensure_response( $data );
486
+        $response->add_links( $this->prepare_links( $object, $request ) );
487
+
488
+        // Filter item response.
489
+        return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
490
+    }
491 491
 
492 492
 }
Please login to merge, or discard this patch.
Spacing   +117 added lines, -117 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @version 1.0.19
9 9
  */
10 10
 
11
-defined( 'ABSPATH' ) || exit;
11
+defined('ABSPATH') || exit;
12 12
 
13 13
 /**
14 14
  * GetPaid REST CRUD controller class.
@@ -38,7 +38,7 @@  discard block
 block discarded – undo
38 38
 	 *
39 39
 	 * @see register_rest_route()
40 40
 	 */
41
-	public function register_namespace_routes( $namespace ) {
41
+	public function register_namespace_routes($namespace) {
42 42
 
43 43
 		register_rest_route(
44 44
 			$namespace,
@@ -46,22 +46,22 @@  discard block
 block discarded – undo
46 46
 			array(
47 47
 				array(
48 48
 					'methods'             => WP_REST_Server::READABLE,
49
-					'callback'            => array( $this, 'get_items' ),
50
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
49
+					'callback'            => array($this, 'get_items'),
50
+					'permission_callback' => array($this, 'get_items_permissions_check'),
51 51
 					'args'                => $this->get_collection_params(),
52 52
 				),
53 53
 				array(
54 54
 					'methods'             => WP_REST_Server::CREATABLE,
55
-					'callback'            => array( $this, 'create_item' ),
56
-					'permission_callback' => array( $this, 'create_item_permissions_check' ),
57
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
55
+					'callback'            => array($this, 'create_item'),
56
+					'permission_callback' => array($this, 'create_item_permissions_check'),
57
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::CREATABLE),
58 58
 				),
59
-				'schema' => array( $this, 'get_public_item_schema' ),
59
+				'schema' => array($this, 'get_public_item_schema'),
60 60
 			)
61 61
 		);
62 62
 
63 63
 		$get_item_args = array(
64
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
64
+			'context' => $this->get_context_param(array('default' => 'view')),
65 65
 		);
66 66
 
67 67
 		register_rest_route(
@@ -70,35 +70,35 @@  discard block
 block discarded – undo
70 70
 			array(
71 71
 				'args'   => array(
72 72
 					'id' => array(
73
-						'description' => __( 'Unique identifier for the object.', 'invoicing' ),
73
+						'description' => __('Unique identifier for the object.', 'invoicing'),
74 74
 						'type'        => 'integer',
75 75
 					),
76 76
 				),
77 77
 				array(
78 78
 					'methods'             => WP_REST_Server::READABLE,
79
-					'callback'            => array( $this, 'get_item' ),
80
-					'permission_callback' => array( $this, 'get_item_permissions_check' ),
79
+					'callback'            => array($this, 'get_item'),
80
+					'permission_callback' => array($this, 'get_item_permissions_check'),
81 81
 					'args'                => $get_item_args,
82 82
 				),
83 83
 				array(
84 84
 					'methods'             => WP_REST_Server::EDITABLE,
85
-					'callback'            => array( $this, 'update_item' ),
86
-					'permission_callback' => array( $this, 'update_item_permissions_check' ),
87
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
85
+					'callback'            => array($this, 'update_item'),
86
+					'permission_callback' => array($this, 'update_item_permissions_check'),
87
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
88 88
 				),
89 89
 				array(
90 90
 					'methods'             => WP_REST_Server::DELETABLE,
91
-					'callback'            => array( $this, 'delete_item' ),
92
-					'permission_callback' => array( $this, 'delete_item_permissions_check' ),
91
+					'callback'            => array($this, 'delete_item'),
92
+					'permission_callback' => array($this, 'delete_item_permissions_check'),
93 93
 					'args'                => array(
94 94
 						'force' => array(
95 95
 							'type'        => 'boolean',
96 96
 							'default'     => false,
97
-							'description' => __( 'Whether to bypass Trash and force deletion.', 'invoicing' ),
97
+							'description' => __('Whether to bypass Trash and force deletion.', 'invoicing'),
98 98
 						),
99 99
 					),
100 100
 				),
101
-				'schema' => array( $this, 'get_public_item_schema' ),
101
+				'schema' => array($this, 'get_public_item_schema'),
102 102
 			)
103 103
 		);
104 104
 
@@ -110,14 +110,14 @@  discard block
 block discarded – undo
110 110
 	 * @param GetPaid_Data $object Object to save.
111 111
 	 * @return WP_Error|GetPaid_Data
112 112
 	 */
113
-	protected function save_object( $object ) {
113
+	protected function save_object($object) {
114 114
 		$object->save();
115 115
 
116
-		if ( ! empty( $object->last_error ) ) {
117
-			return new WP_Error( 'rest_cannot_save', $object->last_error, array( 'status' => 400 ) );
116
+		if (!empty($object->last_error)) {
117
+			return new WP_Error('rest_cannot_save', $object->last_error, array('status' => 400));
118 118
 		}
119 119
 
120
-		return new $this->crud_class( $object->get_id() );
120
+		return new $this->crud_class($object->get_id());
121 121
 	}
122 122
 
123 123
 	/**
@@ -128,21 +128,21 @@  discard block
 block discarded – undo
128 128
 	 * @param int|WP_Post $object_id Supplied ID.
129 129
 	 * @return GetPaid_Data|WP_Error GetPaid_Data object if ID is valid, WP_Error otherwise.
130 130
 	 */
131
-	protected function get_object( $object_id ) {
131
+	protected function get_object($object_id) {
132 132
 
133 133
 		// Do we have an object?
134
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
135
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
134
+		if (empty($this->crud_class) || !class_exists($this->crud_class)) {
135
+			return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing'));
136 136
 		}
137 137
 
138 138
 		// Fetch the object.
139
-		$object = new $this->crud_class( $object_id );
140
-		if ( ! empty( $object->last_error ) ) {
141
-			return new WP_Error( 'rest_object_invalid_id', $object->last_error, array( 'status' => 404 ) );
139
+		$object = new $this->crud_class($object_id);
140
+		if (!empty($object->last_error)) {
141
+			return new WP_Error('rest_object_invalid_id', $object->last_error, array('status' => 404));
142 142
 		}
143 143
 
144 144
 		$this->data_object = $object;
145
-		return $object->get_id() ? $object : new WP_Error( 'rest_object_invalid_id', __( 'Invalid ID.', 'invoicing' ), array( 'status' => 404 ) );
145
+		return $object->get_id() ? $object : new WP_Error('rest_object_invalid_id', __('Invalid ID.', 'invoicing'), array('status' => 404));
146 146
 
147 147
 	}
148 148
 
@@ -152,17 +152,17 @@  discard block
 block discarded – undo
152 152
 	 * @param WP_REST_Request $request Full details about the request.
153 153
 	 * @return WP_Error|WP_REST_Response
154 154
 	 */
155
-	public function get_item( $request ) {
155
+	public function get_item($request) {
156 156
 
157 157
 		// Fetch the item.
158
-		$object = $this->get_object( $request['id'] );
158
+		$object = $this->get_object($request['id']);
159 159
 
160
-		if ( is_wp_error( $object ) ) {
160
+		if (is_wp_error($object)) {
161 161
 			return $object;
162 162
 		}
163 163
 
164 164
 		// Generate a response.
165
-		return rest_ensure_response( $this->prepare_item_for_response( $object, $request ) );
165
+		return rest_ensure_response($this->prepare_item_for_response($object, $request));
166 166
 
167 167
 	}
168 168
 
@@ -172,38 +172,38 @@  discard block
 block discarded – undo
172 172
 	 * @param WP_REST_Request $request Full details about the request.
173 173
 	 * @return WP_Error|WP_REST_Response
174 174
 	 */
175
-	public function create_item( $request ) {
175
+	public function create_item($request) {
176 176
 
177 177
 		// Can not create an existing item.
178
-		if ( ! empty( $request['id'] ) ) {
178
+		if (!empty($request['id'])) {
179 179
 			/* translators: %s: post type */
180
-			return new WP_Error( "getpaid_rest_{$this->rest_base}_exists", __( 'Cannot create existing resource.', 'invoicing' ), array( 'status' => 400 ) );
180
+			return new WP_Error("getpaid_rest_{$this->rest_base}_exists", __('Cannot create existing resource.', 'invoicing'), array('status' => 400));
181 181
 		}
182 182
 
183 183
 		// Generate a GetPaid_Data object from the request.
184
-		$object = $this->prepare_item_for_database( $request );
185
-		if ( is_wp_error( $object ) ) {
184
+		$object = $this->prepare_item_for_database($request);
185
+		if (is_wp_error($object)) {
186 186
 			return $object;
187 187
 		}
188 188
 
189 189
 		// Save the object.
190
-		$object = $this->save_object( $object );
191
-		if ( is_wp_error( $object ) ) {
190
+		$object = $this->save_object($object);
191
+		if (is_wp_error($object)) {
192 192
 			return $object;
193 193
 		}
194 194
 
195 195
 		// Save special fields.
196
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
197
-		if ( is_wp_error( $save_special ) ) {
198
-			$object->delete( true );
196
+		$save_special = $this->update_additional_fields_for_object($object, $request);
197
+		if (is_wp_error($save_special)) {
198
+			$object->delete(true);
199 199
 			return $save_special;
200 200
 		}
201 201
 
202
-		$request->set_param( 'context', 'edit' );
203
-		$response = $this->prepare_item_for_response( $object, $request );
204
-		$response = rest_ensure_response( $response );
205
-		$response->set_status( 201 );
206
-		$response->header( 'Location', rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ) );
202
+		$request->set_param('context', 'edit');
203
+		$response = $this->prepare_item_for_response($object, $request);
204
+		$response = rest_ensure_response($response);
205
+		$response->set_status(201);
206
+		$response->header('Location', rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id())));
207 207
 
208 208
 		return $response;
209 209
 	}
@@ -214,35 +214,35 @@  discard block
 block discarded – undo
214 214
 	 * @param WP_REST_Request $request Full details about the request.
215 215
 	 * @return WP_Error|WP_REST_Response
216 216
 	 */
217
-	public function update_item( $request ) {
217
+	public function update_item($request) {
218 218
 
219 219
 		// Fetch the item.
220
-		$object = $this->get_object( $request['id'] );
221
-		if ( is_wp_error( $object ) ) {
220
+		$object = $this->get_object($request['id']);
221
+		if (is_wp_error($object)) {
222 222
 			return $object;
223 223
 		}
224 224
 
225 225
 		// Prepare the item for saving.
226
-		$object = $this->prepare_item_for_database( $request );
227
-		if ( is_wp_error( $object ) ) {
226
+		$object = $this->prepare_item_for_database($request);
227
+		if (is_wp_error($object)) {
228 228
 			return $object;
229 229
 		}
230 230
 
231 231
 		// Save the item.
232
-		$object = $this->save_object( $object );
233
-		if ( is_wp_error( $object ) ) {
232
+		$object = $this->save_object($object);
233
+		if (is_wp_error($object)) {
234 234
 			return $object;
235 235
 		}
236 236
 
237 237
 		// Save special fields (those added via hooks).
238
-		$save_special = $this->update_additional_fields_for_object( $object, $request );
239
-		if ( is_wp_error( $save_special ) ) {
238
+		$save_special = $this->update_additional_fields_for_object($object, $request);
239
+		if (is_wp_error($save_special)) {
240 240
 			return $save_special;
241 241
 		}
242 242
 
243
-		$request->set_param( 'context', 'edit' );
244
-		$response = $this->prepare_item_for_response( $object, $request );
245
-		return rest_ensure_response( $response );
243
+		$request->set_param('context', 'edit');
244
+		$response = $this->prepare_item_for_response($object, $request);
245
+		return rest_ensure_response($response);
246 246
 	}
247 247
 
248 248
 	/**
@@ -251,14 +251,14 @@  discard block
 block discarded – undo
251 251
 	 * @param GetPaid_Data    $object GetPaid_Data object.
252 252
 	 * @return array Links for the given object.
253 253
 	 */
254
-	protected function prepare_links( $object ) {
254
+	protected function prepare_links($object) {
255 255
 
256 256
 		$links = array(
257 257
 			'self'       => array(
258
-				'href'   => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id() ) ),
258
+				'href'   => rest_url(sprintf('/%s/%s/%d', $this->namespace, $this->rest_base, $object->get_id())),
259 259
 			),
260 260
 			'collection' => array(
261
-				'href'   => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ),
261
+				'href'   => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)),
262 262
 			),
263 263
 		);
264 264
 
@@ -282,8 +282,8 @@  discard block
 block discarded – undo
282 282
 	 * @param  array $schema Schema.
283 283
 	 * @return bool
284 284
 	 */
285
-	public function filter_writable_props( $schema ) {
286
-		return empty( $schema['readonly'] );
285
+	public function filter_writable_props($schema) {
286
+		return empty($schema['readonly']);
287 287
 	}
288 288
 
289 289
 	/**
@@ -293,43 +293,43 @@  discard block
 block discarded – undo
293 293
 	 * @param  WP_REST_Request $request Request object.
294 294
 	 * @return GetPaid_Data|WP_Error Data object or WP_Error.
295 295
 	 */
296
-	protected function prepare_item_for_database( $request ) {
296
+	protected function prepare_item_for_database($request) {
297 297
 
298 298
 		// Do we have an object?
299
-		if ( empty( $this->crud_class ) || ! class_exists( $this->crud_class ) ) {
300
-			return new WP_Error( 'no_crud_class', __( 'You need to specify a CRUD class for this controller', 'invoicing' ) );
299
+		if (empty($this->crud_class) || !class_exists($this->crud_class)) {
300
+			return new WP_Error('no_crud_class', __('You need to specify a CRUD class for this controller', 'invoicing'));
301 301
 		}
302 302
 
303 303
 		// Prepare the object.
304
-		$id        = isset( $request['id'] ) ? absint( $request['id'] ) : 0;
305
-		$object    = new $this->crud_class( $id );
304
+		$id        = isset($request['id']) ? absint($request['id']) : 0;
305
+		$object    = new $this->crud_class($id);
306 306
 
307 307
 		// Abort if an error exists.
308
-		if ( ! empty( $object->last_error ) ) {
309
-			return new WP_Error( 'invalid_item', $object->last_error );
308
+		if (!empty($object->last_error)) {
309
+			return new WP_Error('invalid_item', $object->last_error);
310 310
 		}
311 311
 
312 312
 		$schema    = $this->get_item_schema();
313
-		$data_keys = array_keys( array_filter( $schema['properties'], array( $this, 'filter_writable_props' ) ) );
313
+		$data_keys = array_keys(array_filter($schema['properties'], array($this, 'filter_writable_props')));
314 314
 
315 315
 		// Handle all writable props.
316
-		foreach ( $data_keys as $key ) {
317
-			$value = $request[ $key ];
316
+		foreach ($data_keys as $key) {
317
+			$value = $request[$key];
318 318
 
319
-			if ( ! is_null( $value ) ) {
320
-				switch ( $key ) {
319
+			if (!is_null($value)) {
320
+				switch ($key) {
321 321
 
322 322
 					case 'meta_data':
323
-						if ( is_array( $value ) ) {
324
-							foreach ( $value as $meta ) {
325
-								$object->update_meta_data( $meta['key'], $meta['value'], isset( $meta['id'] ) ? $meta['id'] : '' );
323
+						if (is_array($value)) {
324
+							foreach ($value as $meta) {
325
+								$object->update_meta_data($meta['key'], $meta['value'], isset($meta['id']) ? $meta['id'] : '');
326 326
 							}
327 327
 						}
328 328
 						break;
329 329
 
330 330
 					default:
331
-						if ( is_callable( array( $object, "set_{$key}" ) ) ) {
332
-							$object->{"set_{$key}"}( $value );
331
+						if (is_callable(array($object, "set_{$key}"))) {
332
+							$object->{"set_{$key}"}($value);
333 333
 						}
334 334
 						break;
335 335
 				}
@@ -338,7 +338,7 @@  discard block
 block discarded – undo
338 338
 		}
339 339
 
340 340
 		// Filters an object before it is inserted via the REST API..
341
-		return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
341
+		return apply_filters("getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request);
342 342
 	}
343 343
 
344 344
 	/**
@@ -348,10 +348,10 @@  discard block
 block discarded – undo
348 348
 	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
349 349
 	 * @return array
350 350
 	 */
351
-	protected function prepare_object_meta_data( $meta_data ) {
351
+	protected function prepare_object_meta_data($meta_data) {
352 352
 		$meta = array();
353 353
 
354
-		foreach( $meta_data as $object ) {
354
+		foreach ($meta_data as $object) {
355 355
 			$meta[] = $object->get_data();
356 356
 		}
357 357
 
@@ -366,14 +366,14 @@  discard block
 block discarded – undo
366 366
 	 * @param array            $fields Fields to include.
367 367
 	 * @return array
368 368
 	 */
369
-	protected function prepare_invoice_items( $invoice ) {
369
+	protected function prepare_invoice_items($invoice) {
370 370
 		$items = array();
371 371
 
372
-		foreach( $invoice->get_items() as $item ) {
372
+		foreach ($invoice->get_items() as $item) {
373 373
 
374 374
 			$item_data = $item->prepare_data_for_saving();
375 375
 
376
-			if ( 'amount' == $invoice->get_template() ) {
376
+			if ('amount' == $invoice->get_template()) {
377 377
 				$item_data['quantity'] = 1;
378 378
 			}
379 379
 
@@ -392,52 +392,52 @@  discard block
 block discarded – undo
392 392
 	 * @param string           $context either view or edit.
393 393
 	 * @return array
394 394
 	 */
395
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
395
+	protected function prepare_object_data($object, $fields, $context = 'view') {
396 396
 
397 397
 		$data = array();
398 398
 
399 399
 		// Handle all writable props.
400
-		foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
400
+		foreach (array_keys($this->get_schema_properties()) as $key) {
401 401
 
402 402
 			// Abort if it is not included.
403
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
403
+			if (!empty($fields) && !$this->is_field_included($key, $fields)) {
404 404
 				continue;
405 405
 			}
406 406
 
407 407
 			// Or this current object does not support the field.
408
-			if ( ! $this->object_supports_field( $object, $key ) ) {
408
+			if (!$this->object_supports_field($object, $key)) {
409 409
 				continue;
410 410
 			}
411 411
 
412 412
 			// Handle meta data.
413
-			if ( $key == 'meta_data' ) {
414
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
413
+			if ($key == 'meta_data') {
414
+				$data['meta_data'] = $this->prepare_object_meta_data($object->get_meta_data());
415 415
 				continue;
416 416
 			}
417 417
 
418 418
 			// Handle items.
419
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' )  ) {
420
-				$data['items'] = $this->prepare_invoice_items( $object );
419
+			if ($key == 'items' && is_a($object, 'WPInv_Invoice')) {
420
+				$data['items'] = $this->prepare_invoice_items($object);
421 421
 				continue;
422 422
 			}
423 423
 
424 424
 			// Booleans.
425
-			if ( is_callable( array( $object, $key ) ) ) {
426
-				$data[ $key ] = $object->$key( $context );
425
+			if (is_callable(array($object, $key))) {
426
+				$data[$key] = $object->$key($context);
427 427
 				continue;
428 428
 			}
429 429
 
430 430
 			// Get object value.
431
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
432
-				$value = $object->{"get_{$key}"}( $context );
431
+			if (is_callable(array($object, "get_{$key}"))) {
432
+				$value = $object->{"get_{$key}"}($context);
433 433
 
434 434
 				// If the value is an instance of GetPaid_Data...
435
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
436
-					$value = $value->get_data( $context );
435
+				if (is_a($value, 'GetPaid_Data')) {
436
+					$value = $value->get_data($context);
437 437
 				}
438 438
 
439 439
 				// For objects, retrieves it's properties.
440
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) :  $value ;
440
+				$data[$key] = is_object($value) ? get_object_vars($value) : $value;
441 441
 				continue;
442 442
 			}
443 443
 
@@ -454,8 +454,8 @@  discard block
 block discarded – undo
454 454
 	 * @param  string       $field_key The key to check for.
455 455
 	 * @return bool
456 456
 	 */
457
-	public function object_supports_field( $object, $field_key ) {
458
-		return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
457
+	public function object_supports_field($object, $field_key) {
458
+		return apply_filters('getpaid_rest_object_supports_key', true, $object, $field_key);
459 459
 	}
460 460
 
461 461
 	/**
@@ -466,27 +466,27 @@  discard block
 block discarded – undo
466 466
 	 * @param  WP_REST_Request $request Request object.
467 467
 	 * @return WP_REST_Response
468 468
 	 */
469
-	public function prepare_item_for_response( $object, $request ) {
470
-		remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
469
+	public function prepare_item_for_response($object, $request) {
470
+		remove_filter('rest_post_dispatch', 'rest_filter_response_fields', 10);
471 471
 
472 472
 		$this->data_object = $object;
473 473
 
474 474
 		// Fetch the fields to include in this response.
475
-		$fields = $this->get_fields_for_response( $request );
475
+		$fields = $this->get_fields_for_response($request);
476 476
 
477 477
 		// Prepare object data.
478
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
479
-		$data    = $this->prepare_object_data( $object, $fields, $context );
480
-		$data    = $this->add_additional_fields_to_object( $data, $request );
481
-		$data    = $this->limit_object_to_requested_fields( $data, $fields );
482
-		$data    = $this->filter_response_by_context( $data, $context );
478
+		$context = !empty($request['context']) ? $request['context'] : 'view';
479
+		$data    = $this->prepare_object_data($object, $fields, $context);
480
+		$data    = $this->add_additional_fields_to_object($data, $request);
481
+		$data    = $this->limit_object_to_requested_fields($data, $fields);
482
+		$data    = $this->filter_response_by_context($data, $context);
483 483
 
484 484
 		// Prepare the response.
485
-		$response = rest_ensure_response( $data );
486
-		$response->add_links( $this->prepare_links( $object, $request ) );
485
+		$response = rest_ensure_response($data);
486
+		$response->add_links($this->prepare_links($object, $request));
487 487
 
488 488
 		// Filter item response.
489
-		return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
489
+		return apply_filters("getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request);
490 490
 	}
491 491
 
492 492
 }
Please login to merge, or discard this patch.
includes/class-getpaid-subscriptions-query.php 2 patches
Indentation   +490 added lines, -490 removed lines patch added patch discarded remove patch
@@ -16,495 +16,495 @@
 block discarded – undo
16 16
  */
17 17
 class GetPaid_Subscriptions_Query {
18 18
 
19
-	/**
20
-	 * Query vars, after parsing
21
-	 *
22
-	 * @since 1.0.19
23
-	 * @var array
24
-	 */
25
-	public $query_vars = array();
26
-
27
-	/**
28
-	 * List of found subscriptions.
29
-	 *
30
-	 * @since 1.0.19
31
-	 * @var array
32
-	 */
33
-	private $results;
34
-
35
-	/**
36
-	 * Total number of found subscriptions for the current query
37
-	 *
38
-	 * @since 1.0.19
39
-	 * @var int
40
-	 */
41
-	private $total_subscriptions = 0;
42
-
43
-	/**
44
-	 * The SQL query used to fetch matching subscriptions.
45
-	 *
46
-	 * @since 1.0.19
47
-	 * @var string
48
-	 */
49
-	public $request;
50
-
51
-	// SQL clauses
52
-
53
-	/**
54
-	 * Contains the 'FIELDS' sql clause
55
-	 *
56
-	 * @since 1.0.19
57
-	 * @var string
58
-	 */
59
-	public $query_fields;
60
-
61
-	/**
62
-	 * Contains the 'FROM' sql clause
63
-	 *
64
-	 * @since 1.0.19
65
-	 * @var string
66
-	 */
67
-	public $query_from;
68
-
69
-	/**
70
-	 * Contains the 'WHERE' sql clause
71
-	 *
72
-	 * @since 1.0.19
73
-	 * @var string
74
-	 */
75
-	public $query_where;
76
-
77
-	/**
78
-	 * Contains the 'ORDER BY' sql clause
79
-	 *
80
-	 * @since 1.0.19
81
-	 * @var string
82
-	 */
83
-	public $query_orderby;
84
-
85
-	/**
86
-	 * Contains the 'LIMIT' sql clause
87
-	 *
88
-	 * @since 1.0.19
89
-	 * @var string
90
-	 */
91
-	public $query_limit;
92
-
93
-	/**
94
-	 * Class constructor.
95
-	 *
96
-	 * @since 1.0.19
97
-	 *
98
-	 * @param null|string|array $query Optional. The query variables.
99
-	 */
100
-	public function __construct( $query = null ) {
101
-		if ( ! is_null( $query ) ) {
102
-			$this->prepare_query( $query );
103
-			$this->query();
104
-		}
105
-	}
106
-
107
-	/**
108
-	 * Fills in missing query variables with default values.
109
-	 *
110
-	 * @since 1.0.19
111
-	 *
112
-	 * @param  string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`.
113
-	 * @return array Complete query variables with undefined ones filled in with defaults.
114
-	 */
115
-	public static function fill_query_vars( $args ) {
116
-		$defaults = array(
117
-			'status'            => 'all',
118
-			'customer_in'       => array(),
119
-			'customer_not_in'   => array(),
120
-			'product_in'        => array(),
121
-			'product_not_in'    => array(),
122
-			'include'           => array(),
123
-			'exclude'           => array(),
124
-			'orderby'           => 'id',
125
-			'order'             => 'DESC',
126
-			'offset'            => '',
127
-			'number'            => 10,
128
-			'paged'             => 1,
129
-			'count_total'       => true,
130
-			'fields'            => 'all',
131
-		);
132
-
133
-		return wp_parse_args( $args, $defaults );
134
-	}
135
-
136
-	/**
137
-	 * Prepare the query variables.
138
-	 *
139
-	 * @since 1.0.19
140
-	 *
141
-	 * @global wpdb $wpdb WordPress database abstraction object.
142
-	 *
143
-	 * @param string|array $query {
144
-	 *     Optional. Array or string of Query parameters.
145
-	 *
146
-	 *     @type string|array $status              The subscription status to filter by. Can either be a single status or an array of statuses.
147
-	 *                                             Default is all.
148
-	 *     @type int[]        $customer_in         An array of customer ids to filter by.
149
-	 *     @type int[]        $customer_not_in     An array of customer ids whose subscriptions should be excluded.
150
-	 *     @type int[]        $invoice_in          An array of invoice ids to filter by.
151
-	 *     @type int[]        $invoice_not_in      An array of invoice ids whose subscriptions should be excluded.
152
-	 *     @type int[]        $product_in          An array of product ids to filter by.
153
-	 *     @type int[]        $product_not_in      An array of product ids whose subscriptions should be excluded.
154
-	 *     @type array        $date_created_query  A WP_Date_Query compatible array use to filter subscriptions by their date of creation.
155
-	 *     @type array        $date_expires_query  A WP_Date_Query compatible array use to filter subscriptions by their expiration date.
156
-	 *     @type array        $include             An array of subscription IDs to include. Default empty array.
157
-	 *     @type array        $exclude             An array of subscription IDs to exclude. Default empty array.
158
-	 *     @type string|array $orderby             Field(s) to sort the retrieved subscription by. May be a single value,
159
-	 *                                             an array of values, or a multi-dimensional array with fields as
160
-	 *                                             keys and orders ('ASC' or 'DESC') as values. Accepted values are
161
-	 *                                             'id', 'customer_id', 'frequency', 'period', 'initial_amount,
162
-	 *                                             'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration'
163
-	 *                                             'transaction_id', 'product_id', 'trial_period', 'include', 'status', 'profile_id'. Default array( 'id' ).
164
-	 *     @type string       $order               Designates ascending or descending order of subscriptions. Order values
165
-	 *                                             passed as part of an `$orderby` array take precedence over this
166
-	 *                                             parameter. Accepts 'ASC', 'DESC'. Default 'DESC'.
167
-	 *     @type int          $offset              Number of subscriptions to offset in retrieved results. Can be used in
168
-	 *                                             conjunction with pagination. Default 0.
169
-	 *     @type int          $number              Number of subscriptions to limit the query for. Can be used in
170
-	 *                                             conjunction with pagination. Value -1 (all) is supported, but
171
-	 *                                             should be used with caution on larger sites.
172
-	 *                                             Default 10.
173
-	 *     @type int          $paged               When used with number, defines the page of results to return.
174
-	 *                                             Default 1.
175
-	 *     @type bool         $count_total         Whether to count the total number of subscriptions found. If pagination
176
-	 *                                             is not needed, setting this to false can improve performance.
177
-	 *                                             Default true.
178
-	 *     @type string|array $fields              Which fields to return. Single or all fields (string), or array
179
-	 *                                             of fields. Accepts 'id', 'customer_id', 'frequency', 'period', 'initial_amount,
180
-	 *                                             'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration'
181
-	 *                                             'transaction_id', 'product_id', 'trial_period', 'status', 'profile_id'.
182
-	 *                                             Use 'all' for all fields. Default 'all'.
183
-	 * }
184
-	 */
185
-	public function prepare_query( $query = array() ) {
186
-		global $wpdb;
187
-
188
-		if ( empty( $this->query_vars ) || ! empty( $query ) ) {
189
-			$this->query_limit = null;
190
-			$this->query_vars  = $this->fill_query_vars( $query );
191
-		}
192
-
193
-		if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) {
194
-			$this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] );
195
-		}
196
-
197
-		do_action( 'getpaid_pre_get_subscriptions', array( &$this ) );
198
-
199
-		// Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'.
200
-		$qv                =& $this->query_vars;
201
-		$qv                = $this->fill_query_vars( $qv );
202
-		$table             = $wpdb->prefix . 'wpinv_subscriptions';
203
-		$this->query_from  = "FROM $table";
204
-
205
-		// Prepare query fields.
206
-		$this->prepare_query_fields( $qv, $table );
207
-
208
-		// Prepare query where.
209
-		$this->prepare_query_where( $qv, $table );
210
-
211
-		// Prepare query order.
212
-		$this->prepare_query_order( $qv, $table );
213
-
214
-		// limit
215
-		if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
216
-			if ( $qv['offset'] ) {
217
-				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] );
218
-			} else {
219
-				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] );
220
-			}
221
-		}
222
-
223
-		do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) );
224
-	}
225
-
226
-	/**
227
-	 * Prepares the query fields.
228
-	 *
229
-	 * @since 1.0.19
230
-	 *
231
-	 * @param array $qv Query vars.
232
-	 * @param string $table Table name.
233
-	 */
234
-	protected function prepare_query_fields( &$qv, $table ) {
235
-
236
-		if ( is_array( $qv['fields'] ) ) {
237
-			$qv['fields'] = array_unique( $qv['fields'] );
238
-
239
-			$query_fields = array();
240
-			foreach ( $qv['fields'] as $field ) {
241
-				$field          = sanitize_key( $field );
242
-				$query_fields[] = "$table.`$field`";
243
-			}
244
-			$this->query_fields = implode( ',', $query_fields );
245
-		} else {
246
-			$this->query_fields = "$table.*";
247
-		}
248
-
249
-		if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
250
-			$this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
251
-		}
252
-
253
-	}
254
-
255
-	/**
256
-	 * Prepares the query where.
257
-	 *
258
-	 * @since 1.0.19
259
-	 *
260
-	 * @param array $qv Query vars.
261
-	 * @param string $table Table name.
262
-	 */
263
-	protected function prepare_query_where( &$qv, $table ) {
264
-		global $wpdb;
265
-		$this->query_where = 'WHERE 1=1';
266
-
267
-		// Status.
268
-		if ( 'all' !== $qv['status'] ) {
269
-			$statuses           = wpinv_clean( wpinv_parse_list( $qv['status'] ) );
270
-			$prepared_statuses  = join( ',', array_fill( 0, count( $statuses ), '%s' ) );
271
-			$this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses );
272
-		}
273
-
274
-		if ( ! empty( $qv['customer_in'] ) ) {
275
-			$customer_in        = implode( ',', wp_parse_id_list( $qv['customer_in'] ) );
276
-			$this->query_where .= " AND $table.`customer_id` IN ($customer_in)";
277
-		} elseif ( ! empty( $qv['customer_not_in'] ) ) {
278
-			$customer_not_in    = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) );
279
-			$this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)";
280
-		}
281
-
282
-		if ( ! empty( $qv['product_in'] ) ) {
283
-			$product_in         = implode( ',', wp_parse_id_list( $qv['product_in'] ) );
284
-			$this->query_where .= " AND $table.`product_id` IN ($product_in)";
285
-		} elseif ( ! empty( $qv['product_not_in'] ) ) {
286
-			$product_not_in     = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) );
287
-			$this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)";
288
-		}
289
-
290
-		if ( ! empty( $qv['invoice_in'] ) ) {
291
-			$invoice_in         = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) );
292
-			$this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)";
293
-		} elseif ( ! empty( $qv['invoice_not_in'] ) ) {
294
-			$invoice_not_in     = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) );
295
-			$this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)";
296
-		}
297
-
298
-		if ( ! empty( $qv['include'] ) ) {
299
-			$include            = implode( ',', wp_parse_id_list( $qv['include'] ) );
300
-			$this->query_where .= " AND $table.`id` IN ($include)";
301
-		} elseif ( ! empty( $qv['exclude'] ) ) {
302
-			$exclude            = implode( ',', wp_parse_id_list( $qv['exclude'] ) );
303
-			$this->query_where .= " AND $table.`id` NOT IN ($exclude)";
304
-		}
305
-
306
-		// Date queries are allowed for the subscription creation date.
307
-		if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) {
308
-			$date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" );
309
-			$this->query_where .= $date_created_query->get_sql();
310
-		}
311
-
312
-		// Date queries are also allowed for the subscription expiration date.
313
-		if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) {
314
-			$date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" );
315
-			$this->query_where .= $date_expires_query->get_sql();
316
-		}
317
-
318
-	}
319
-
320
-	/**
321
-	 * Prepares the query order.
322
-	 *
323
-	 * @since 1.0.19
324
-	 *
325
-	 * @param array $qv Query vars.
326
-	 * @param string $table Table name.
327
-	 */
328
-	protected function prepare_query_order( &$qv, $table ) {
329
-
330
-		// sorting.
331
-		$qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : '';
332
-		$order       = $this->parse_order( $qv['order'] );
333
-
334
-		// Default order is by 'id' (latest subscriptions).
335
-		if ( empty( $qv['orderby'] ) ) {
336
-			$qv['orderby'] = array( 'id' );
337
-		}
338
-
339
-		// 'orderby' values may be an array, comma- or space-separated list.
340
-		$ordersby      = array_filter( wpinv_parse_list(  $qv['orderby'] ) );
341
-
342
-		$orderby_array = array();
343
-		foreach ( $ordersby as $_key => $_value ) {
344
-
345
-			if ( is_int( $_key ) ) {
346
-				// Integer key means this is a flat array of 'orderby' fields.
347
-				$_orderby = $_value;
348
-				$_order   = $order;
349
-			} else {
350
-				// Non-integer key means that the key is the field and the value is ASC/DESC.
351
-				$_orderby = $_key;
352
-				$_order   = $_value;
353
-			}
354
-
355
-			$parsed = $this->parse_orderby( $_orderby, $table );
356
-
357
-			if ( $parsed ) {
358
-				$orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
359
-			}
360
-
361
-		}
362
-
363
-		// If no valid clauses were found, order by id.
364
-		if ( empty( $orderby_array ) ) {
365
-			$orderby_array[] = "id $order";
366
-		}
367
-
368
-		$this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array );
369
-
370
-	}
371
-
372
-	/**
373
-	 * Execute the query, with the current variables.
374
-	 *
375
-	 * @since 1.0.19
376
-	 *
377
-	 * @global wpdb $wpdb WordPress database abstraction object.
378
-	 */
379
-	public function query() {
380
-		global $wpdb;
381
-
382
-		$qv =& $this->query_vars;
383
-
384
-		// Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the
385
-		// total_subscriptions property.
386
-		$this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) );
387
-
388
-		if ( null === $this->results ) {
389
-			$this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit";
390
-
391
-			if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) {
392
-				$this->results = $wpdb->get_results( $this->request );
393
-			} else {
394
-				$this->results = $wpdb->get_col( $this->request );
395
-			}
396
-
397
-			if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
398
-				$found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this );
399
-				$this->total_subscriptions   = (int) $wpdb->get_var( $found_subscriptions_query );
400
-			}
401
-		}
402
-
403
-		if ( 'all' == $qv['fields'] ) {
404
-			foreach ( $this->results as $key => $subscription ) {
405
-				wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' );
406
-				wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' );
407
-				wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
408
-				wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
409
-				$this->results[ $key ] = new WPInv_Subscription( $subscription );
410
-			}
411
-		}
412
-
413
-	}
414
-
415
-	/**
416
-	 * Retrieve query variable.
417
-	 *
418
-	 * @since 1.0.19
419
-	 *
420
-	 * @param string $query_var Query variable key.
421
-	 * @return mixed
422
-	 */
423
-	public function get( $query_var ) {
424
-		if ( isset( $this->query_vars[ $query_var ] ) ) {
425
-			return $this->query_vars[ $query_var ];
426
-		}
427
-
428
-		return null;
429
-	}
430
-
431
-	/**
432
-	 * Set query variable.
433
-	 *
434
-	 * @since 1.0.19
435
-	 *
436
-	 * @param string $query_var Query variable key.
437
-	 * @param mixed $value Query variable value.
438
-	 */
439
-	public function set( $query_var, $value ) {
440
-		$this->query_vars[ $query_var ] = $value;
441
-	}
442
-
443
-	/**
444
-	 * Return the list of subscriptions.
445
-	 *
446
-	 * @since 1.0.19
447
-	 *
448
-	 * @return WPInv_Subscription[]|array Found subscriptions.
449
-	 */
450
-	public function get_results() {
451
-		return $this->results;
452
-	}
453
-
454
-	/**
455
-	 * Return the total number of subscriptions for the current query.
456
-	 *
457
-	 * @since 1.0.19
458
-	 *
459
-	 * @return int Number of total subscriptions.
460
-	 */
461
-	public function get_total() {
462
-		return $this->total_subscriptions;
463
-	}
464
-
465
-	/**
466
-	 * Parse and sanitize 'orderby' keys passed to the subscriptions query.
467
-	 *
468
-	 * @since 1.0.19
469
-	 *
470
-	 * @param string $orderby Alias for the field to order by.
471
-	 *  @param string $table The current table.
472
-	 * @return string Value to use in the ORDER clause, if `$orderby` is valid.
473
-	 */
474
-	protected function parse_orderby( $orderby, $table ) {
475
-
476
-		$_orderby = '';
477
-		if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) {
478
-			$_orderby = "$table.`$orderby`";
479
-		} elseif ( 'id' === strtolower( $orderby ) ) {
480
-			$_orderby = "$table.id";
481
-		} elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) {
482
-			$include     = wp_parse_id_list( $this->query_vars['include'] );
483
-			$include_sql = implode( ',', $include );
484
-			$_orderby    = "FIELD( $table.id, $include_sql )";
485
-		}
486
-
487
-		return $_orderby;
488
-	}
489
-
490
-	/**
491
-	 * Parse an 'order' query variable and cast it to ASC or DESC as necessary.
492
-	 *
493
-	 * @since 1.0.19
494
-	 *
495
-	 * @param string $order The 'order' query variable.
496
-	 * @return string The sanitized 'order' query variable.
497
-	 */
498
-	protected function parse_order( $order ) {
499
-		if ( ! is_string( $order ) || empty( $order ) ) {
500
-			return 'DESC';
501
-		}
502
-
503
-		if ( 'ASC' === strtoupper( $order ) ) {
504
-			return 'ASC';
505
-		} else {
506
-			return 'DESC';
507
-		}
508
-	}
19
+    /**
20
+     * Query vars, after parsing
21
+     *
22
+     * @since 1.0.19
23
+     * @var array
24
+     */
25
+    public $query_vars = array();
26
+
27
+    /**
28
+     * List of found subscriptions.
29
+     *
30
+     * @since 1.0.19
31
+     * @var array
32
+     */
33
+    private $results;
34
+
35
+    /**
36
+     * Total number of found subscriptions for the current query
37
+     *
38
+     * @since 1.0.19
39
+     * @var int
40
+     */
41
+    private $total_subscriptions = 0;
42
+
43
+    /**
44
+     * The SQL query used to fetch matching subscriptions.
45
+     *
46
+     * @since 1.0.19
47
+     * @var string
48
+     */
49
+    public $request;
50
+
51
+    // SQL clauses
52
+
53
+    /**
54
+     * Contains the 'FIELDS' sql clause
55
+     *
56
+     * @since 1.0.19
57
+     * @var string
58
+     */
59
+    public $query_fields;
60
+
61
+    /**
62
+     * Contains the 'FROM' sql clause
63
+     *
64
+     * @since 1.0.19
65
+     * @var string
66
+     */
67
+    public $query_from;
68
+
69
+    /**
70
+     * Contains the 'WHERE' sql clause
71
+     *
72
+     * @since 1.0.19
73
+     * @var string
74
+     */
75
+    public $query_where;
76
+
77
+    /**
78
+     * Contains the 'ORDER BY' sql clause
79
+     *
80
+     * @since 1.0.19
81
+     * @var string
82
+     */
83
+    public $query_orderby;
84
+
85
+    /**
86
+     * Contains the 'LIMIT' sql clause
87
+     *
88
+     * @since 1.0.19
89
+     * @var string
90
+     */
91
+    public $query_limit;
92
+
93
+    /**
94
+     * Class constructor.
95
+     *
96
+     * @since 1.0.19
97
+     *
98
+     * @param null|string|array $query Optional. The query variables.
99
+     */
100
+    public function __construct( $query = null ) {
101
+        if ( ! is_null( $query ) ) {
102
+            $this->prepare_query( $query );
103
+            $this->query();
104
+        }
105
+    }
106
+
107
+    /**
108
+     * Fills in missing query variables with default values.
109
+     *
110
+     * @since 1.0.19
111
+     *
112
+     * @param  string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`.
113
+     * @return array Complete query variables with undefined ones filled in with defaults.
114
+     */
115
+    public static function fill_query_vars( $args ) {
116
+        $defaults = array(
117
+            'status'            => 'all',
118
+            'customer_in'       => array(),
119
+            'customer_not_in'   => array(),
120
+            'product_in'        => array(),
121
+            'product_not_in'    => array(),
122
+            'include'           => array(),
123
+            'exclude'           => array(),
124
+            'orderby'           => 'id',
125
+            'order'             => 'DESC',
126
+            'offset'            => '',
127
+            'number'            => 10,
128
+            'paged'             => 1,
129
+            'count_total'       => true,
130
+            'fields'            => 'all',
131
+        );
132
+
133
+        return wp_parse_args( $args, $defaults );
134
+    }
135
+
136
+    /**
137
+     * Prepare the query variables.
138
+     *
139
+     * @since 1.0.19
140
+     *
141
+     * @global wpdb $wpdb WordPress database abstraction object.
142
+     *
143
+     * @param string|array $query {
144
+     *     Optional. Array or string of Query parameters.
145
+     *
146
+     *     @type string|array $status              The subscription status to filter by. Can either be a single status or an array of statuses.
147
+     *                                             Default is all.
148
+     *     @type int[]        $customer_in         An array of customer ids to filter by.
149
+     *     @type int[]        $customer_not_in     An array of customer ids whose subscriptions should be excluded.
150
+     *     @type int[]        $invoice_in          An array of invoice ids to filter by.
151
+     *     @type int[]        $invoice_not_in      An array of invoice ids whose subscriptions should be excluded.
152
+     *     @type int[]        $product_in          An array of product ids to filter by.
153
+     *     @type int[]        $product_not_in      An array of product ids whose subscriptions should be excluded.
154
+     *     @type array        $date_created_query  A WP_Date_Query compatible array use to filter subscriptions by their date of creation.
155
+     *     @type array        $date_expires_query  A WP_Date_Query compatible array use to filter subscriptions by their expiration date.
156
+     *     @type array        $include             An array of subscription IDs to include. Default empty array.
157
+     *     @type array        $exclude             An array of subscription IDs to exclude. Default empty array.
158
+     *     @type string|array $orderby             Field(s) to sort the retrieved subscription by. May be a single value,
159
+     *                                             an array of values, or a multi-dimensional array with fields as
160
+     *                                             keys and orders ('ASC' or 'DESC') as values. Accepted values are
161
+     *                                             'id', 'customer_id', 'frequency', 'period', 'initial_amount,
162
+     *                                             'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration'
163
+     *                                             'transaction_id', 'product_id', 'trial_period', 'include', 'status', 'profile_id'. Default array( 'id' ).
164
+     *     @type string       $order               Designates ascending or descending order of subscriptions. Order values
165
+     *                                             passed as part of an `$orderby` array take precedence over this
166
+     *                                             parameter. Accepts 'ASC', 'DESC'. Default 'DESC'.
167
+     *     @type int          $offset              Number of subscriptions to offset in retrieved results. Can be used in
168
+     *                                             conjunction with pagination. Default 0.
169
+     *     @type int          $number              Number of subscriptions to limit the query for. Can be used in
170
+     *                                             conjunction with pagination. Value -1 (all) is supported, but
171
+     *                                             should be used with caution on larger sites.
172
+     *                                             Default 10.
173
+     *     @type int          $paged               When used with number, defines the page of results to return.
174
+     *                                             Default 1.
175
+     *     @type bool         $count_total         Whether to count the total number of subscriptions found. If pagination
176
+     *                                             is not needed, setting this to false can improve performance.
177
+     *                                             Default true.
178
+     *     @type string|array $fields              Which fields to return. Single or all fields (string), or array
179
+     *                                             of fields. Accepts 'id', 'customer_id', 'frequency', 'period', 'initial_amount,
180
+     *                                             'recurring_amount', 'bill_times', 'parent_payment_id', 'created', 'expiration'
181
+     *                                             'transaction_id', 'product_id', 'trial_period', 'status', 'profile_id'.
182
+     *                                             Use 'all' for all fields. Default 'all'.
183
+     * }
184
+     */
185
+    public function prepare_query( $query = array() ) {
186
+        global $wpdb;
187
+
188
+        if ( empty( $this->query_vars ) || ! empty( $query ) ) {
189
+            $this->query_limit = null;
190
+            $this->query_vars  = $this->fill_query_vars( $query );
191
+        }
192
+
193
+        if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) {
194
+            $this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] );
195
+        }
196
+
197
+        do_action( 'getpaid_pre_get_subscriptions', array( &$this ) );
198
+
199
+        // Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'.
200
+        $qv                =& $this->query_vars;
201
+        $qv                = $this->fill_query_vars( $qv );
202
+        $table             = $wpdb->prefix . 'wpinv_subscriptions';
203
+        $this->query_from  = "FROM $table";
204
+
205
+        // Prepare query fields.
206
+        $this->prepare_query_fields( $qv, $table );
207
+
208
+        // Prepare query where.
209
+        $this->prepare_query_where( $qv, $table );
210
+
211
+        // Prepare query order.
212
+        $this->prepare_query_order( $qv, $table );
213
+
214
+        // limit
215
+        if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
216
+            if ( $qv['offset'] ) {
217
+                $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] );
218
+            } else {
219
+                $this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] );
220
+            }
221
+        }
222
+
223
+        do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) );
224
+    }
225
+
226
+    /**
227
+     * Prepares the query fields.
228
+     *
229
+     * @since 1.0.19
230
+     *
231
+     * @param array $qv Query vars.
232
+     * @param string $table Table name.
233
+     */
234
+    protected function prepare_query_fields( &$qv, $table ) {
235
+
236
+        if ( is_array( $qv['fields'] ) ) {
237
+            $qv['fields'] = array_unique( $qv['fields'] );
238
+
239
+            $query_fields = array();
240
+            foreach ( $qv['fields'] as $field ) {
241
+                $field          = sanitize_key( $field );
242
+                $query_fields[] = "$table.`$field`";
243
+            }
244
+            $this->query_fields = implode( ',', $query_fields );
245
+        } else {
246
+            $this->query_fields = "$table.*";
247
+        }
248
+
249
+        if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
250
+            $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
251
+        }
252
+
253
+    }
254
+
255
+    /**
256
+     * Prepares the query where.
257
+     *
258
+     * @since 1.0.19
259
+     *
260
+     * @param array $qv Query vars.
261
+     * @param string $table Table name.
262
+     */
263
+    protected function prepare_query_where( &$qv, $table ) {
264
+        global $wpdb;
265
+        $this->query_where = 'WHERE 1=1';
266
+
267
+        // Status.
268
+        if ( 'all' !== $qv['status'] ) {
269
+            $statuses           = wpinv_clean( wpinv_parse_list( $qv['status'] ) );
270
+            $prepared_statuses  = join( ',', array_fill( 0, count( $statuses ), '%s' ) );
271
+            $this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses );
272
+        }
273
+
274
+        if ( ! empty( $qv['customer_in'] ) ) {
275
+            $customer_in        = implode( ',', wp_parse_id_list( $qv['customer_in'] ) );
276
+            $this->query_where .= " AND $table.`customer_id` IN ($customer_in)";
277
+        } elseif ( ! empty( $qv['customer_not_in'] ) ) {
278
+            $customer_not_in    = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) );
279
+            $this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)";
280
+        }
281
+
282
+        if ( ! empty( $qv['product_in'] ) ) {
283
+            $product_in         = implode( ',', wp_parse_id_list( $qv['product_in'] ) );
284
+            $this->query_where .= " AND $table.`product_id` IN ($product_in)";
285
+        } elseif ( ! empty( $qv['product_not_in'] ) ) {
286
+            $product_not_in     = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) );
287
+            $this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)";
288
+        }
289
+
290
+        if ( ! empty( $qv['invoice_in'] ) ) {
291
+            $invoice_in         = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) );
292
+            $this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)";
293
+        } elseif ( ! empty( $qv['invoice_not_in'] ) ) {
294
+            $invoice_not_in     = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) );
295
+            $this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)";
296
+        }
297
+
298
+        if ( ! empty( $qv['include'] ) ) {
299
+            $include            = implode( ',', wp_parse_id_list( $qv['include'] ) );
300
+            $this->query_where .= " AND $table.`id` IN ($include)";
301
+        } elseif ( ! empty( $qv['exclude'] ) ) {
302
+            $exclude            = implode( ',', wp_parse_id_list( $qv['exclude'] ) );
303
+            $this->query_where .= " AND $table.`id` NOT IN ($exclude)";
304
+        }
305
+
306
+        // Date queries are allowed for the subscription creation date.
307
+        if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) {
308
+            $date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" );
309
+            $this->query_where .= $date_created_query->get_sql();
310
+        }
311
+
312
+        // Date queries are also allowed for the subscription expiration date.
313
+        if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) {
314
+            $date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" );
315
+            $this->query_where .= $date_expires_query->get_sql();
316
+        }
317
+
318
+    }
319
+
320
+    /**
321
+     * Prepares the query order.
322
+     *
323
+     * @since 1.0.19
324
+     *
325
+     * @param array $qv Query vars.
326
+     * @param string $table Table name.
327
+     */
328
+    protected function prepare_query_order( &$qv, $table ) {
329
+
330
+        // sorting.
331
+        $qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : '';
332
+        $order       = $this->parse_order( $qv['order'] );
333
+
334
+        // Default order is by 'id' (latest subscriptions).
335
+        if ( empty( $qv['orderby'] ) ) {
336
+            $qv['orderby'] = array( 'id' );
337
+        }
338
+
339
+        // 'orderby' values may be an array, comma- or space-separated list.
340
+        $ordersby      = array_filter( wpinv_parse_list(  $qv['orderby'] ) );
341
+
342
+        $orderby_array = array();
343
+        foreach ( $ordersby as $_key => $_value ) {
344
+
345
+            if ( is_int( $_key ) ) {
346
+                // Integer key means this is a flat array of 'orderby' fields.
347
+                $_orderby = $_value;
348
+                $_order   = $order;
349
+            } else {
350
+                // Non-integer key means that the key is the field and the value is ASC/DESC.
351
+                $_orderby = $_key;
352
+                $_order   = $_value;
353
+            }
354
+
355
+            $parsed = $this->parse_orderby( $_orderby, $table );
356
+
357
+            if ( $parsed ) {
358
+                $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
359
+            }
360
+
361
+        }
362
+
363
+        // If no valid clauses were found, order by id.
364
+        if ( empty( $orderby_array ) ) {
365
+            $orderby_array[] = "id $order";
366
+        }
367
+
368
+        $this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array );
369
+
370
+    }
371
+
372
+    /**
373
+     * Execute the query, with the current variables.
374
+     *
375
+     * @since 1.0.19
376
+     *
377
+     * @global wpdb $wpdb WordPress database abstraction object.
378
+     */
379
+    public function query() {
380
+        global $wpdb;
381
+
382
+        $qv =& $this->query_vars;
383
+
384
+        // Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the
385
+        // total_subscriptions property.
386
+        $this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) );
387
+
388
+        if ( null === $this->results ) {
389
+            $this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit";
390
+
391
+            if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) {
392
+                $this->results = $wpdb->get_results( $this->request );
393
+            } else {
394
+                $this->results = $wpdb->get_col( $this->request );
395
+            }
396
+
397
+            if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
398
+                $found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this );
399
+                $this->total_subscriptions   = (int) $wpdb->get_var( $found_subscriptions_query );
400
+            }
401
+        }
402
+
403
+        if ( 'all' == $qv['fields'] ) {
404
+            foreach ( $this->results as $key => $subscription ) {
405
+                wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' );
406
+                wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' );
407
+                wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
408
+                wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
409
+                $this->results[ $key ] = new WPInv_Subscription( $subscription );
410
+            }
411
+        }
412
+
413
+    }
414
+
415
+    /**
416
+     * Retrieve query variable.
417
+     *
418
+     * @since 1.0.19
419
+     *
420
+     * @param string $query_var Query variable key.
421
+     * @return mixed
422
+     */
423
+    public function get( $query_var ) {
424
+        if ( isset( $this->query_vars[ $query_var ] ) ) {
425
+            return $this->query_vars[ $query_var ];
426
+        }
427
+
428
+        return null;
429
+    }
430
+
431
+    /**
432
+     * Set query variable.
433
+     *
434
+     * @since 1.0.19
435
+     *
436
+     * @param string $query_var Query variable key.
437
+     * @param mixed $value Query variable value.
438
+     */
439
+    public function set( $query_var, $value ) {
440
+        $this->query_vars[ $query_var ] = $value;
441
+    }
442
+
443
+    /**
444
+     * Return the list of subscriptions.
445
+     *
446
+     * @since 1.0.19
447
+     *
448
+     * @return WPInv_Subscription[]|array Found subscriptions.
449
+     */
450
+    public function get_results() {
451
+        return $this->results;
452
+    }
453
+
454
+    /**
455
+     * Return the total number of subscriptions for the current query.
456
+     *
457
+     * @since 1.0.19
458
+     *
459
+     * @return int Number of total subscriptions.
460
+     */
461
+    public function get_total() {
462
+        return $this->total_subscriptions;
463
+    }
464
+
465
+    /**
466
+     * Parse and sanitize 'orderby' keys passed to the subscriptions query.
467
+     *
468
+     * @since 1.0.19
469
+     *
470
+     * @param string $orderby Alias for the field to order by.
471
+     *  @param string $table The current table.
472
+     * @return string Value to use in the ORDER clause, if `$orderby` is valid.
473
+     */
474
+    protected function parse_orderby( $orderby, $table ) {
475
+
476
+        $_orderby = '';
477
+        if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) {
478
+            $_orderby = "$table.`$orderby`";
479
+        } elseif ( 'id' === strtolower( $orderby ) ) {
480
+            $_orderby = "$table.id";
481
+        } elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) {
482
+            $include     = wp_parse_id_list( $this->query_vars['include'] );
483
+            $include_sql = implode( ',', $include );
484
+            $_orderby    = "FIELD( $table.id, $include_sql )";
485
+        }
486
+
487
+        return $_orderby;
488
+    }
489
+
490
+    /**
491
+     * Parse an 'order' query variable and cast it to ASC or DESC as necessary.
492
+     *
493
+     * @since 1.0.19
494
+     *
495
+     * @param string $order The 'order' query variable.
496
+     * @return string The sanitized 'order' query variable.
497
+     */
498
+    protected function parse_order( $order ) {
499
+        if ( ! is_string( $order ) || empty( $order ) ) {
500
+            return 'DESC';
501
+        }
502
+
503
+        if ( 'ASC' === strtoupper( $order ) ) {
504
+            return 'ASC';
505
+        } else {
506
+            return 'DESC';
507
+        }
508
+    }
509 509
 
510 510
 }
Please login to merge, or discard this patch.
Spacing   +96 added lines, -96 removed lines patch added patch discarded remove patch
@@ -97,9 +97,9 @@  discard block
 block discarded – undo
97 97
 	 *
98 98
 	 * @param null|string|array $query Optional. The query variables.
99 99
 	 */
100
-	public function __construct( $query = null ) {
101
-		if ( ! is_null( $query ) ) {
102
-			$this->prepare_query( $query );
100
+	public function __construct($query = null) {
101
+		if (!is_null($query)) {
102
+			$this->prepare_query($query);
103 103
 			$this->query();
104 104
 		}
105 105
 	}
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
 	 * @param  string|array $args Query vars, as passed to `GetPaid_Subscriptions_Query`.
113 113
 	 * @return array Complete query variables with undefined ones filled in with defaults.
114 114
 	 */
115
-	public static function fill_query_vars( $args ) {
115
+	public static function fill_query_vars($args) {
116 116
 		$defaults = array(
117 117
 			'status'            => 'all',
118 118
 			'customer_in'       => array(),
@@ -130,7 +130,7 @@  discard block
 block discarded – undo
130 130
 			'fields'            => 'all',
131 131
 		);
132 132
 
133
-		return wp_parse_args( $args, $defaults );
133
+		return wp_parse_args($args, $defaults);
134 134
 	}
135 135
 
136 136
 	/**
@@ -182,45 +182,45 @@  discard block
 block discarded – undo
182 182
 	 *                                             Use 'all' for all fields. Default 'all'.
183 183
 	 * }
184 184
 	 */
185
-	public function prepare_query( $query = array() ) {
185
+	public function prepare_query($query = array()) {
186 186
 		global $wpdb;
187 187
 
188
-		if ( empty( $this->query_vars ) || ! empty( $query ) ) {
188
+		if (empty($this->query_vars) || !empty($query)) {
189 189
 			$this->query_limit = null;
190
-			$this->query_vars  = $this->fill_query_vars( $query );
190
+			$this->query_vars  = $this->fill_query_vars($query);
191 191
 		}
192 192
 
193
-		if ( ! empty( $this->query_vars['fields'] ) && 'all' !== $this->query_vars['fields'] ) {
194
-			$this->query_vars['fields'] = wpinv_parse_list( $this->query_vars['fields'] );
193
+		if (!empty($this->query_vars['fields']) && 'all' !== $this->query_vars['fields']) {
194
+			$this->query_vars['fields'] = wpinv_parse_list($this->query_vars['fields']);
195 195
 		}
196 196
 
197
-		do_action( 'getpaid_pre_get_subscriptions', array( &$this ) );
197
+		do_action('getpaid_pre_get_subscriptions', array(&$this));
198 198
 
199 199
 		// Ensure that query vars are filled after 'getpaid_pre_get_subscriptions'.
200
-		$qv                =& $this->query_vars;
201
-		$qv                = $this->fill_query_vars( $qv );
200
+		$qv                = & $this->query_vars;
201
+		$qv                = $this->fill_query_vars($qv);
202 202
 		$table             = $wpdb->prefix . 'wpinv_subscriptions';
203 203
 		$this->query_from  = "FROM $table";
204 204
 
205 205
 		// Prepare query fields.
206
-		$this->prepare_query_fields( $qv, $table );
206
+		$this->prepare_query_fields($qv, $table);
207 207
 
208 208
 		// Prepare query where.
209
-		$this->prepare_query_where( $qv, $table );
209
+		$this->prepare_query_where($qv, $table);
210 210
 
211 211
 		// Prepare query order.
212
-		$this->prepare_query_order( $qv, $table );
212
+		$this->prepare_query_order($qv, $table);
213 213
 
214 214
 		// limit
215
-		if ( isset( $qv['number'] ) && $qv['number'] > 0 ) {
216
-			if ( $qv['offset'] ) {
217
-				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['offset'], $qv['number'] );
215
+		if (isset($qv['number']) && $qv['number'] > 0) {
216
+			if ($qv['offset']) {
217
+				$this->query_limit = $wpdb->prepare('LIMIT %d, %d', $qv['offset'], $qv['number']);
218 218
 			} else {
219
-				$this->query_limit = $wpdb->prepare( 'LIMIT %d, %d', $qv['number'] * ( $qv['paged'] - 1 ), $qv['number'] );
219
+				$this->query_limit = $wpdb->prepare('LIMIT %d, %d', $qv['number'] * ($qv['paged'] - 1), $qv['number']);
220 220
 			}
221 221
 		}
222 222
 
223
-		do_action_ref_array( 'getpaid_after_subscriptions_query', array( &$this ) );
223
+		do_action_ref_array('getpaid_after_subscriptions_query', array(&$this));
224 224
 	}
225 225
 
226 226
 	/**
@@ -231,22 +231,22 @@  discard block
 block discarded – undo
231 231
 	 * @param array $qv Query vars.
232 232
 	 * @param string $table Table name.
233 233
 	 */
234
-	protected function prepare_query_fields( &$qv, $table ) {
234
+	protected function prepare_query_fields(&$qv, $table) {
235 235
 
236
-		if ( is_array( $qv['fields'] ) ) {
237
-			$qv['fields'] = array_unique( $qv['fields'] );
236
+		if (is_array($qv['fields'])) {
237
+			$qv['fields'] = array_unique($qv['fields']);
238 238
 
239 239
 			$query_fields = array();
240
-			foreach ( $qv['fields'] as $field ) {
241
-				$field          = sanitize_key( $field );
240
+			foreach ($qv['fields'] as $field) {
241
+				$field          = sanitize_key($field);
242 242
 				$query_fields[] = "$table.`$field`";
243 243
 			}
244
-			$this->query_fields = implode( ',', $query_fields );
244
+			$this->query_fields = implode(',', $query_fields);
245 245
 		} else {
246 246
 			$this->query_fields = "$table.*";
247 247
 		}
248 248
 
249
-		if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
249
+		if (isset($qv['count_total']) && $qv['count_total']) {
250 250
 			$this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
251 251
 		}
252 252
 
@@ -260,58 +260,58 @@  discard block
 block discarded – undo
260 260
 	 * @param array $qv Query vars.
261 261
 	 * @param string $table Table name.
262 262
 	 */
263
-	protected function prepare_query_where( &$qv, $table ) {
263
+	protected function prepare_query_where(&$qv, $table) {
264 264
 		global $wpdb;
265 265
 		$this->query_where = 'WHERE 1=1';
266 266
 
267 267
 		// Status.
268
-		if ( 'all' !== $qv['status'] ) {
269
-			$statuses           = wpinv_clean( wpinv_parse_list( $qv['status'] ) );
270
-			$prepared_statuses  = join( ',', array_fill( 0, count( $statuses ), '%s' ) );
271
-			$this->query_where .= $wpdb->prepare( " AND $table.`status` IN ( $prepared_statuses )", $statuses );
268
+		if ('all' !== $qv['status']) {
269
+			$statuses           = wpinv_clean(wpinv_parse_list($qv['status']));
270
+			$prepared_statuses  = join(',', array_fill(0, count($statuses), '%s'));
271
+			$this->query_where .= $wpdb->prepare(" AND $table.`status` IN ( $prepared_statuses )", $statuses);
272 272
 		}
273 273
 
274
-		if ( ! empty( $qv['customer_in'] ) ) {
275
-			$customer_in        = implode( ',', wp_parse_id_list( $qv['customer_in'] ) );
274
+		if (!empty($qv['customer_in'])) {
275
+			$customer_in        = implode(',', wp_parse_id_list($qv['customer_in']));
276 276
 			$this->query_where .= " AND $table.`customer_id` IN ($customer_in)";
277
-		} elseif ( ! empty( $qv['customer_not_in'] ) ) {
278
-			$customer_not_in    = implode( ',', wp_parse_id_list( $qv['customer_not_in'] ) );
277
+		} elseif (!empty($qv['customer_not_in'])) {
278
+			$customer_not_in    = implode(',', wp_parse_id_list($qv['customer_not_in']));
279 279
 			$this->query_where .= " AND $table.`customer_id` NOT IN ($customer_not_in)";
280 280
 		}
281 281
 
282
-		if ( ! empty( $qv['product_in'] ) ) {
283
-			$product_in         = implode( ',', wp_parse_id_list( $qv['product_in'] ) );
282
+		if (!empty($qv['product_in'])) {
283
+			$product_in         = implode(',', wp_parse_id_list($qv['product_in']));
284 284
 			$this->query_where .= " AND $table.`product_id` IN ($product_in)";
285
-		} elseif ( ! empty( $qv['product_not_in'] ) ) {
286
-			$product_not_in     = implode( ',', wp_parse_id_list( $qv['product_not_in'] ) );
285
+		} elseif (!empty($qv['product_not_in'])) {
286
+			$product_not_in     = implode(',', wp_parse_id_list($qv['product_not_in']));
287 287
 			$this->query_where .= " AND $table.`product_id` NOT IN ($product_not_in)";
288 288
 		}
289 289
 
290
-		if ( ! empty( $qv['invoice_in'] ) ) {
291
-			$invoice_in         = implode( ',', wp_parse_id_list( $qv['invoice_in'] ) );
290
+		if (!empty($qv['invoice_in'])) {
291
+			$invoice_in         = implode(',', wp_parse_id_list($qv['invoice_in']));
292 292
 			$this->query_where .= " AND $table.`parent_payment_id` IN ($invoice_in)";
293
-		} elseif ( ! empty( $qv['invoice_not_in'] ) ) {
294
-			$invoice_not_in     = implode( ',', wp_parse_id_list( $qv['invoice_not_in'] ) );
293
+		} elseif (!empty($qv['invoice_not_in'])) {
294
+			$invoice_not_in     = implode(',', wp_parse_id_list($qv['invoice_not_in']));
295 295
 			$this->query_where .= " AND $table.`parent_payment_id` NOT IN ($invoice_not_in)";
296 296
 		}
297 297
 
298
-		if ( ! empty( $qv['include'] ) ) {
299
-			$include            = implode( ',', wp_parse_id_list( $qv['include'] ) );
298
+		if (!empty($qv['include'])) {
299
+			$include            = implode(',', wp_parse_id_list($qv['include']));
300 300
 			$this->query_where .= " AND $table.`id` IN ($include)";
301
-		} elseif ( ! empty( $qv['exclude'] ) ) {
302
-			$exclude            = implode( ',', wp_parse_id_list( $qv['exclude'] ) );
301
+		} elseif (!empty($qv['exclude'])) {
302
+			$exclude            = implode(',', wp_parse_id_list($qv['exclude']));
303 303
 			$this->query_where .= " AND $table.`id` NOT IN ($exclude)";
304 304
 		}
305 305
 
306 306
 		// Date queries are allowed for the subscription creation date.
307
-		if ( ! empty( $qv['date_created_query'] ) && is_array( $qv['date_created_query'] ) ) {
308
-			$date_created_query = new WP_Date_Query( $qv['date_created_query'], "$table.created" );
307
+		if (!empty($qv['date_created_query']) && is_array($qv['date_created_query'])) {
308
+			$date_created_query = new WP_Date_Query($qv['date_created_query'], "$table.created");
309 309
 			$this->query_where .= $date_created_query->get_sql();
310 310
 		}
311 311
 
312 312
 		// Date queries are also allowed for the subscription expiration date.
313
-		if ( ! empty( $qv['date_expires_query'] ) && is_array( $qv['date_expires_query'] ) ) {
314
-			$date_expires_query = new WP_Date_Query( $qv['date_expires_query'], "$table.expiration" );
313
+		if (!empty($qv['date_expires_query']) && is_array($qv['date_expires_query'])) {
314
+			$date_expires_query = new WP_Date_Query($qv['date_expires_query'], "$table.expiration");
315 315
 			$this->query_where .= $date_expires_query->get_sql();
316 316
 		}
317 317
 
@@ -325,24 +325,24 @@  discard block
 block discarded – undo
325 325
 	 * @param array $qv Query vars.
326 326
 	 * @param string $table Table name.
327 327
 	 */
328
-	protected function prepare_query_order( &$qv, $table ) {
328
+	protected function prepare_query_order(&$qv, $table) {
329 329
 
330 330
 		// sorting.
331
-		$qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : '';
332
-		$order       = $this->parse_order( $qv['order'] );
331
+		$qv['order'] = isset($qv['order']) ? strtoupper($qv['order']) : '';
332
+		$order       = $this->parse_order($qv['order']);
333 333
 
334 334
 		// Default order is by 'id' (latest subscriptions).
335
-		if ( empty( $qv['orderby'] ) ) {
336
-			$qv['orderby'] = array( 'id' );
335
+		if (empty($qv['orderby'])) {
336
+			$qv['orderby'] = array('id');
337 337
 		}
338 338
 
339 339
 		// 'orderby' values may be an array, comma- or space-separated list.
340
-		$ordersby      = array_filter( wpinv_parse_list(  $qv['orderby'] ) );
340
+		$ordersby      = array_filter(wpinv_parse_list($qv['orderby']));
341 341
 
342 342
 		$orderby_array = array();
343
-		foreach ( $ordersby as $_key => $_value ) {
343
+		foreach ($ordersby as $_key => $_value) {
344 344
 
345
-			if ( is_int( $_key ) ) {
345
+			if (is_int($_key)) {
346 346
 				// Integer key means this is a flat array of 'orderby' fields.
347 347
 				$_orderby = $_value;
348 348
 				$_order   = $order;
@@ -352,20 +352,20 @@  discard block
 block discarded – undo
352 352
 				$_order   = $_value;
353 353
 			}
354 354
 
355
-			$parsed = $this->parse_orderby( $_orderby, $table );
355
+			$parsed = $this->parse_orderby($_orderby, $table);
356 356
 
357
-			if ( $parsed ) {
358
-				$orderby_array[] = $parsed . ' ' . $this->parse_order( $_order );
357
+			if ($parsed) {
358
+				$orderby_array[] = $parsed . ' ' . $this->parse_order($_order);
359 359
 			}
360 360
 
361 361
 		}
362 362
 
363 363
 		// If no valid clauses were found, order by id.
364
-		if ( empty( $orderby_array ) ) {
364
+		if (empty($orderby_array)) {
365 365
 			$orderby_array[] = "id $order";
366 366
 		}
367 367
 
368
-		$this->query_orderby = 'ORDER BY ' . implode( ', ', $orderby_array );
368
+		$this->query_orderby = 'ORDER BY ' . implode(', ', $orderby_array);
369 369
 
370 370
 	}
371 371
 
@@ -379,34 +379,34 @@  discard block
 block discarded – undo
379 379
 	public function query() {
380 380
 		global $wpdb;
381 381
 
382
-		$qv =& $this->query_vars;
382
+		$qv = & $this->query_vars;
383 383
 
384 384
 		// Return a non-null value to bypass the default GetPaid subscriptions query and remember to set the
385 385
 		// total_subscriptions property.
386
-		$this->results = apply_filters_ref_array( 'getpaid_subscriptions_pre_query', array( null, &$this ) );
386
+		$this->results = apply_filters_ref_array('getpaid_subscriptions_pre_query', array(null, &$this));
387 387
 
388
-		if ( null === $this->results ) {
388
+		if (null === $this->results) {
389 389
 			$this->request = "SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit";
390 390
 
391
-			if ( ( is_array( $qv['fields'] ) && 1 != count( $qv['fields'] ) ) || 'all' == $qv['fields'] ) {
392
-				$this->results = $wpdb->get_results( $this->request );
391
+			if ((is_array($qv['fields']) && 1 != count($qv['fields'])) || 'all' == $qv['fields']) {
392
+				$this->results = $wpdb->get_results($this->request);
393 393
 			} else {
394
-				$this->results = $wpdb->get_col( $this->request );
394
+				$this->results = $wpdb->get_col($this->request);
395 395
 			}
396 396
 
397
-			if ( isset( $qv['count_total'] ) && $qv['count_total'] ) {
398
-				$found_subscriptions_query = apply_filters( 'getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this );
399
-				$this->total_subscriptions   = (int) $wpdb->get_var( $found_subscriptions_query );
397
+			if (isset($qv['count_total']) && $qv['count_total']) {
398
+				$found_subscriptions_query = apply_filters('getpaid_found_subscriptions_query', 'SELECT FOUND_ROWS()', $this);
399
+				$this->total_subscriptions = (int) $wpdb->get_var($found_subscriptions_query);
400 400
 			}
401 401
 		}
402 402
 
403
-		if ( 'all' == $qv['fields'] ) {
404
-			foreach ( $this->results as $key => $subscription ) {
405
-				wp_cache_set( $subscription->id, $subscription, 'getpaid_subscriptions' );
406
-				wp_cache_set( $subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids' );
407
-				wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
408
-				wp_cache_set( $subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids' );
409
-				$this->results[ $key ] = new WPInv_Subscription( $subscription );
403
+		if ('all' == $qv['fields']) {
404
+			foreach ($this->results as $key => $subscription) {
405
+				wp_cache_set($subscription->id, $subscription, 'getpaid_subscriptions');
406
+				wp_cache_set($subscription->profile_id, $subscription->id, 'getpaid_subscription_profile_ids_to_subscription_ids');
407
+				wp_cache_set($subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids');
408
+				wp_cache_set($subscription->transaction_id, $subscription->id, 'getpaid_subscription_transaction_ids_to_subscription_ids');
409
+				$this->results[$key] = new WPInv_Subscription($subscription);
410 410
 			}
411 411
 		}
412 412
 
@@ -420,9 +420,9 @@  discard block
 block discarded – undo
420 420
 	 * @param string $query_var Query variable key.
421 421
 	 * @return mixed
422 422
 	 */
423
-	public function get( $query_var ) {
424
-		if ( isset( $this->query_vars[ $query_var ] ) ) {
425
-			return $this->query_vars[ $query_var ];
423
+	public function get($query_var) {
424
+		if (isset($this->query_vars[$query_var])) {
425
+			return $this->query_vars[$query_var];
426 426
 		}
427 427
 
428 428
 		return null;
@@ -436,8 +436,8 @@  discard block
 block discarded – undo
436 436
 	 * @param string $query_var Query variable key.
437 437
 	 * @param mixed $value Query variable value.
438 438
 	 */
439
-	public function set( $query_var, $value ) {
440
-		$this->query_vars[ $query_var ] = $value;
439
+	public function set($query_var, $value) {
440
+		$this->query_vars[$query_var] = $value;
441 441
 	}
442 442
 
443 443
 	/**
@@ -471,16 +471,16 @@  discard block
 block discarded – undo
471 471
 	 *  @param string $table The current table.
472 472
 	 * @return string Value to use in the ORDER clause, if `$orderby` is valid.
473 473
 	 */
474
-	protected function parse_orderby( $orderby, $table ) {
474
+	protected function parse_orderby($orderby, $table) {
475 475
 
476 476
 		$_orderby = '';
477
-		if ( in_array( $orderby, array( 'customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id' ) ) ) {
477
+		if (in_array($orderby, array('customer_id', 'frequency', 'period', 'initial_amount', 'recurring_amount', 'bill_times', 'transaction_id', 'parent_payment_id', 'product_id', 'created', 'expiration', 'trial_period', 'status', 'profile_id'))) {
478 478
 			$_orderby = "$table.`$orderby`";
479
-		} elseif ( 'id' === strtolower( $orderby ) ) {
479
+		} elseif ('id' === strtolower($orderby)) {
480 480
 			$_orderby = "$table.id";
481
-		} elseif ( 'include' === $orderby && ! empty( $this->query_vars['include'] ) ) {
482
-			$include     = wp_parse_id_list( $this->query_vars['include'] );
483
-			$include_sql = implode( ',', $include );
481
+		} elseif ('include' === $orderby && !empty($this->query_vars['include'])) {
482
+			$include     = wp_parse_id_list($this->query_vars['include']);
483
+			$include_sql = implode(',', $include);
484 484
 			$_orderby    = "FIELD( $table.id, $include_sql )";
485 485
 		}
486 486
 
@@ -495,12 +495,12 @@  discard block
 block discarded – undo
495 495
 	 * @param string $order The 'order' query variable.
496 496
 	 * @return string The sanitized 'order' query variable.
497 497
 	 */
498
-	protected function parse_order( $order ) {
499
-		if ( ! is_string( $order ) || empty( $order ) ) {
498
+	protected function parse_order($order) {
499
+		if (!is_string($order) || empty($order)) {
500 500
 			return 'DESC';
501 501
 		}
502 502
 
503
-		if ( 'ASC' === strtoupper( $order ) ) {
503
+		if ('ASC' === strtoupper($order)) {
504 504
 			return 'ASC';
505 505
 		} else {
506 506
 			return 'DESC';
Please login to merge, or discard this patch.
includes/wpinv-email-functions.php 2 patches
Indentation   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -110,8 +110,8 @@  discard block
 block discarded – undo
110 110
     $css = getpaid_get_email_css();
111 111
 
112 112
     // include css inliner
113
-	if ( ! class_exists( 'Emogrifier' ) ) {
114
-		include_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php' );
113
+    if ( ! class_exists( 'Emogrifier' ) ) {
114
+        include_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php' );
115 115
     }
116 116
 
117 117
     // Inline the css.
@@ -190,7 +190,7 @@  discard block
 block discarded – undo
190 190
     $message = wpinv_email_style_body( $message );
191 191
     $to      = array_merge( wpinv_parse_list( $to ), wpinv_parse_list( $cc ) );
192 192
 
193
-	return $mailer->send(
193
+    return $mailer->send(
194 194
         $to,
195 195
         $subject,
196 196
         $message,
Please login to merge, or discard this patch.
Spacing   +126 added lines, -126 removed lines patch added patch discarded remove patch
@@ -6,7 +6,7 @@  discard block
 block discarded – undo
6 6
  * Please use GetPaid_Notification_Email_Sender
7 7
  */
8 8
 
9
-defined( 'ABSPATH' ) || exit;
9
+defined('ABSPATH') || exit;
10 10
 
11 11
 /*
12 12
 |--------------------------------------------------------------------------
@@ -17,19 +17,19 @@  discard block
 block discarded – undo
17 17
 /**
18 18
  * Generates the email header.
19 19
  */
20
-function wpinv_email_header( $email_heading ) {
21
-    wpinv_get_template( 'emails/wpinv-email-header.php', compact( 'email_heading' ) );
20
+function wpinv_email_header($email_heading) {
21
+    wpinv_get_template('emails/wpinv-email-header.php', compact('email_heading'));
22 22
 }
23
-add_action( 'wpinv_email_header', 'wpinv_email_header' );
23
+add_action('wpinv_email_header', 'wpinv_email_header');
24 24
 
25 25
 
26 26
 /**
27 27
  * Generates the email footer.
28 28
  */
29 29
 function wpinv_email_footer() {
30
-    wpinv_get_template( 'emails/wpinv-email-footer.php' );
30
+    wpinv_get_template('emails/wpinv-email-footer.php');
31 31
 }
32
-add_action( 'wpinv_email_footer', 'wpinv_email_footer' );
32
+add_action('wpinv_email_footer', 'wpinv_email_footer');
33 33
 
34 34
 
35 35
 /**
@@ -39,13 +39,13 @@  discard block
 block discarded – undo
39 39
  * @param string $email_type
40 40
  * @param bool $sent_to_admin
41 41
  */
42
-function wpinv_email_invoice_details( $invoice,  $email_type, $sent_to_admin ) {
42
+function wpinv_email_invoice_details($invoice, $email_type, $sent_to_admin) {
43 43
 
44
-    $args = compact( 'invoice', 'email_type', 'sent_to_admin' );
45
-    wpinv_get_template( 'emails/invoice-details.php', $args );
44
+    $args = compact('invoice', 'email_type', 'sent_to_admin');
45
+    wpinv_get_template('emails/invoice-details.php', $args);
46 46
 
47 47
 }
48
-add_action( 'wpinv_email_invoice_details', 'wpinv_email_invoice_details', 10, 3 );
48
+add_action('wpinv_email_invoice_details', 'wpinv_email_invoice_details', 10, 3);
49 49
 
50 50
 /**
51 51
  * Display line items in emails.
@@ -54,17 +54,17 @@  discard block
 block discarded – undo
54 54
  * @param string $email_type
55 55
  * @param bool $sent_to_admin
56 56
  */
57
-function wpinv_email_invoice_items( $invoice, $email_type, $sent_to_admin ) {
57
+function wpinv_email_invoice_items($invoice, $email_type, $sent_to_admin) {
58 58
 
59 59
     // Prepare line items.
60
-    $columns = getpaid_invoice_item_columns( $invoice );
61
-    $columns = apply_filters( 'getpaid_invoice_line_items_table_columns', $columns, $invoice );
60
+    $columns = getpaid_invoice_item_columns($invoice);
61
+    $columns = apply_filters('getpaid_invoice_line_items_table_columns', $columns, $invoice);
62 62
 
63 63
     // Load the template.
64
-    wpinv_get_template( 'emails/invoice-items.php', compact( 'invoice', 'columns', 'email_type', 'sent_to_admin' ) );
64
+    wpinv_get_template('emails/invoice-items.php', compact('invoice', 'columns', 'email_type', 'sent_to_admin'));
65 65
 
66 66
 }
67
-add_action( 'wpinv_email_invoice_items', 'wpinv_email_invoice_items', 10, 3 );
67
+add_action('wpinv_email_invoice_items', 'wpinv_email_invoice_items', 10, 3);
68 68
 
69 69
 
70 70
 /**
@@ -74,13 +74,13 @@  discard block
 block discarded – undo
74 74
  * @param string $email_type
75 75
  * @param bool $sent_to_admin
76 76
  */
77
-function wpinv_email_billing_details( $invoice, $email_type, $sent_to_admin ) {
77
+function wpinv_email_billing_details($invoice, $email_type, $sent_to_admin) {
78 78
 
79
-    $args = compact( 'invoice', 'email_type', 'sent_to_admin' );
80
-    wpinv_get_template( 'emails/wpinv-email-billing-details.php', $args );
79
+    $args = compact('invoice', 'email_type', 'sent_to_admin');
80
+    wpinv_get_template('emails/wpinv-email-billing-details.php', $args);
81 81
 
82 82
 }
83
-add_action( 'wpinv_email_billing_details', 'wpinv_email_billing_details', 10, 3 );
83
+add_action('wpinv_email_billing_details', 'wpinv_email_billing_details', 10, 3);
84 84
 
85 85
 /**
86 86
  * Returns email css.
@@ -88,8 +88,8 @@  discard block
 block discarded – undo
88 88
  */
89 89
 function getpaid_get_email_css() {
90 90
 
91
-    $css = wpinv_get_template_html( 'emails/wpinv-email-styles.php' );
92
-    return apply_filters( 'wpinv_email_styles', $css );
91
+    $css = wpinv_get_template_html('emails/wpinv-email-styles.php');
92
+    return apply_filters('wpinv_email_styles', $css);
93 93
 
94 94
 }
95 95
 
@@ -100,26 +100,26 @@  discard block
 block discarded – undo
100 100
  * @return string
101 101
  * 
102 102
  */
103
-function wpinv_email_style_body( $content ) {
103
+function wpinv_email_style_body($content) {
104 104
 
105
-    if ( ! class_exists( 'DOMDocument' ) ) {
105
+    if (!class_exists('DOMDocument')) {
106 106
         return $content;
107 107
     }
108 108
 
109 109
     $css = getpaid_get_email_css();
110 110
 
111 111
     // include css inliner
112
-	if ( ! class_exists( 'Emogrifier' ) ) {
113
-		include_once( WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php' );
112
+	if (!class_exists('Emogrifier')) {
113
+		include_once(WPINV_PLUGIN_DIR . 'includes/libraries/class-emogrifier.php');
114 114
     }
115 115
 
116 116
     // Inline the css.
117 117
     try {
118
-        $emogrifier = new Emogrifier( $content, $css );
118
+        $emogrifier = new Emogrifier($content, $css);
119 119
         $_content   = $emogrifier->emogrify();
120 120
         $content    = $_content;
121
-    } catch ( Exception $e ) {
122
-        wpinv_error_log( $e->getMessage(), 'emogrifier' );
121
+    } catch (Exception $e) {
122
+        wpinv_error_log($e->getMessage(), 'emogrifier');
123 123
     }
124 124
 
125 125
     return $content;
@@ -128,37 +128,37 @@  discard block
 block discarded – undo
128 128
 
129 129
 // Backwards compatibility.
130 130
 function wpinv_init_transactional_emails() {
131
-    foreach ( apply_filters( 'wpinv_email_actions', array() ) as $action ) {
132
-        add_action( $action, 'wpinv_send_transactional_email', 10, 10 );
131
+    foreach (apply_filters('wpinv_email_actions', array()) as $action) {
132
+        add_action($action, 'wpinv_send_transactional_email', 10, 10);
133 133
     }
134 134
 }
135
-add_action( 'init', 'wpinv_init_transactional_emails' );
135
+add_action('init', 'wpinv_init_transactional_emails');
136 136
 
137 137
 function wpinv_send_transactional_email() {
138 138
     $args       = func_get_args();
139 139
     $function   = current_filter() . '_notification';
140
-    do_action_ref_array( $function, $args );
140
+    do_action_ref_array($function, $args);
141 141
 }
142 142
 
143 143
 function wpinv_mail_get_from_address() {
144
-    $from_address = apply_filters( 'wpinv_mail_from_address', wpinv_get_option( 'email_from', get_option( 'admin_email' ) ) );
145
-    return sanitize_email( $from_address );
144
+    $from_address = apply_filters('wpinv_mail_from_address', wpinv_get_option('email_from', get_option('admin_email')));
145
+    return sanitize_email($from_address);
146 146
 }
147 147
 
148 148
 function wpinv_mail_get_from_name() {
149
-    $from_name = apply_filters( 'wpinv_mail_from_name', wpinv_get_option( 'email_from_name', get_bloginfo( 'name', 'display' ) ) );
150
-    return wp_specialchars_decode( esc_html( $from_name ), ENT_QUOTES );
149
+    $from_name = apply_filters('wpinv_mail_from_name', wpinv_get_option('email_from_name', get_bloginfo('name', 'display')));
150
+    return wp_specialchars_decode(esc_html($from_name), ENT_QUOTES);
151 151
 }
152 152
 
153
-function wpinv_mail_admin_bcc_active( $mail_type = '' ) {
154
-    $active = apply_filters( 'wpinv_mail_admin_bcc_active', wpinv_get_option( 'email_' . $mail_type . '_admin_bcc' ) );
155
-    return ( $active ? true : false );
153
+function wpinv_mail_admin_bcc_active($mail_type = '') {
154
+    $active = apply_filters('wpinv_mail_admin_bcc_active', wpinv_get_option('email_' . $mail_type . '_admin_bcc'));
155
+    return ($active ? true : false);
156 156
 }
157 157
     
158
-function wpinv_mail_get_content_type(  $content_type = 'text/html', $email_type = 'html' ) {
159
-    $email_type = apply_filters( 'wpinv_mail_content_type', $email_type );
158
+function wpinv_mail_get_content_type($content_type = 'text/html', $email_type = 'html') {
159
+    $email_type = apply_filters('wpinv_mail_content_type', $email_type);
160 160
 
161
-    switch ( $email_type ) {
161
+    switch ($email_type) {
162 162
         case 'html' :
163 163
             $content_type = 'text/html';
164 164
             break;
@@ -183,11 +183,11 @@  discard block
 block discarded – undo
183 183
  * @param array        $attachments Any files to attach to the email.
184 184
  * @param string|array $cc An email or array of extra emails to send a copy of the email to.
185 185
  */
186
-function wpinv_mail_send( $to, $subject, $message, $deprecated, $attachments = array(), $cc = array() ) {
186
+function wpinv_mail_send($to, $subject, $message, $deprecated, $attachments = array(), $cc = array()) {
187 187
 
188 188
     $mailer  = new GetPaid_Notification_Email_Sender();
189
-    $message = wpinv_email_style_body( $message );
190
-    $to      = array_merge( wpinv_parse_list( $to ), wpinv_parse_list( $cc ) );
189
+    $message = wpinv_email_style_body($message);
190
+    $to      = array_merge(wpinv_parse_list($to), wpinv_parse_list($cc));
191 191
 
192 192
 	return $mailer->send(
193 193
         $to,
@@ -204,7 +204,7 @@  discard block
 block discarded – undo
204 204
  * @return array
205 205
  */
206 206
 function wpinv_get_emails() {
207
-    return apply_filters( 'wpinv_get_emails', wpinv_get_data( 'email-settings' ) );
207
+    return apply_filters('wpinv_get_emails', wpinv_get_data('email-settings'));
208 208
 }
209 209
 
210 210
 /**
@@ -213,172 +213,172 @@  discard block
 block discarded – undo
213 213
  * @param array $settings
214 214
  * @return array
215 215
  */
216
-function wpinv_settings_emails( $settings = array() ) {
217
-    $settings = array_merge( $settings, wpinv_get_emails() );
218
-    return apply_filters( 'wpinv_settings_get_emails', $settings );
216
+function wpinv_settings_emails($settings = array()) {
217
+    $settings = array_merge($settings, wpinv_get_emails());
218
+    return apply_filters('wpinv_settings_get_emails', $settings);
219 219
 }
220
-add_filter( 'wpinv_settings_emails', 'wpinv_settings_emails', 10, 1 );
220
+add_filter('wpinv_settings_emails', 'wpinv_settings_emails', 10, 1);
221 221
 
222 222
 /**
223 223
  * Filter email section names.
224 224
  * 
225 225
  */
226
-function wpinv_settings_sections_emails( $settings ) {
227
-    foreach  ( wpinv_get_emails() as $key => $email) {
228
-        $settings[$key] = ! empty( $email['email_' . $key . '_header']['name'] ) ? strip_tags( $email['email_' . $key . '_header']['name'] ) : strip_tags( $key );
226
+function wpinv_settings_sections_emails($settings) {
227
+    foreach (wpinv_get_emails() as $key => $email) {
228
+        $settings[$key] = !empty($email['email_' . $key . '_header']['name']) ? strip_tags($email['email_' . $key . '_header']['name']) : strip_tags($key);
229 229
     }
230 230
 
231 231
     return $settings;    
232 232
 }
233
-add_filter( 'wpinv_settings_sections_emails', 'wpinv_settings_sections_emails', 10, 1 );
233
+add_filter('wpinv_settings_sections_emails', 'wpinv_settings_sections_emails', 10, 1);
234 234
 
235
-function wpinv_email_is_enabled( $email_type ) {
235
+function wpinv_email_is_enabled($email_type) {
236 236
     $emails = wpinv_get_emails();
237
-    $enabled = isset( $emails[$email_type] ) && wpinv_get_option( 'email_'. $email_type . '_active', 0 ) ? true : false;
237
+    $enabled = isset($emails[$email_type]) && wpinv_get_option('email_' . $email_type . '_active', 0) ? true : false;
238 238
 
239
-    return apply_filters( 'wpinv_email_is_enabled', $enabled, $email_type );
239
+    return apply_filters('wpinv_email_is_enabled', $enabled, $email_type);
240 240
 }
241 241
 
242
-function wpinv_email_get_recipient( $email_type = '', $invoice_id = 0, $invoice = array() ) {
243
-    switch ( $email_type ) {
242
+function wpinv_email_get_recipient($email_type = '', $invoice_id = 0, $invoice = array()) {
243
+    switch ($email_type) {
244 244
         case 'new_invoice':
245 245
         case 'cancelled_invoice':
246 246
         case 'failed_invoice':
247 247
             $recipient  = wpinv_get_admin_email();
248 248
         break;
249 249
         default:
250
-            $invoice    = !empty( $invoice ) && is_object( $invoice ) ? $invoice : ( $invoice_id > 0 ? wpinv_get_invoice( $invoice_id ) : NULL );
251
-            $recipient  = !empty( $invoice ) ? $invoice->get_email() : '';
250
+            $invoice    = !empty($invoice) && is_object($invoice) ? $invoice : ($invoice_id > 0 ? wpinv_get_invoice($invoice_id) : NULL);
251
+            $recipient  = !empty($invoice) ? $invoice->get_email() : '';
252 252
         break;
253 253
     }
254 254
 
255
-    return apply_filters( 'wpinv_email_recipient', $recipient, $email_type, $invoice_id, $invoice );
255
+    return apply_filters('wpinv_email_recipient', $recipient, $email_type, $invoice_id, $invoice);
256 256
 }
257 257
 
258 258
 /**
259 259
  * Returns invoice CC recipients
260 260
  */
261
-function wpinv_email_get_cc_recipients( $email_type = '', $invoice_id = 0, $invoice = array() ) {
262
-    switch ( $email_type ) {
261
+function wpinv_email_get_cc_recipients($email_type = '', $invoice_id = 0, $invoice = array()) {
262
+    switch ($email_type) {
263 263
         case 'new_invoice':
264 264
         case 'cancelled_invoice':
265 265
         case 'failed_invoice':
266 266
             return array();
267 267
         break;
268 268
         default:
269
-            $invoice    = !empty( $invoice ) && is_object( $invoice ) ? $invoice : ( $invoice_id > 0 ? wpinv_get_invoice( $invoice_id ) : NULL );
270
-            $recipient  = empty( $invoice ) ? '' : get_post_meta( $invoice->ID, 'wpinv_email_cc', true );
271
-            if ( empty( $recipient ) ) {
269
+            $invoice    = !empty($invoice) && is_object($invoice) ? $invoice : ($invoice_id > 0 ? wpinv_get_invoice($invoice_id) : NULL);
270
+            $recipient  = empty($invoice) ? '' : get_post_meta($invoice->ID, 'wpinv_email_cc', true);
271
+            if (empty($recipient)) {
272 272
                 return array();
273 273
             }
274
-            return  array_filter( array_map( 'trim', explode( ',', $recipient ) ) );
274
+            return  array_filter(array_map('trim', explode(',', $recipient)));
275 275
         break;
276 276
     }
277 277
 
278 278
 }
279 279
 
280
-function wpinv_email_get_subject( $email_type = '', $invoice_id = 0, $invoice = array() ) {
281
-    $subject    = wpinv_get_option( 'email_' . $email_type . '_subject' );
282
-    $subject    = __( $subject, 'invoicing' );
280
+function wpinv_email_get_subject($email_type = '', $invoice_id = 0, $invoice = array()) {
281
+    $subject    = wpinv_get_option('email_' . $email_type . '_subject');
282
+    $subject    = __($subject, 'invoicing');
283 283
 
284
-    $subject    = wpinv_email_format_text( $subject, $invoice );
284
+    $subject    = wpinv_email_format_text($subject, $invoice);
285 285
 
286
-    return apply_filters( 'wpinv_email_subject', $subject, $email_type, $invoice_id, $invoice );
286
+    return apply_filters('wpinv_email_subject', $subject, $email_type, $invoice_id, $invoice);
287 287
 }
288 288
 
289
-function wpinv_email_get_heading( $email_type = '', $invoice_id = 0, $invoice = array() ) {
290
-    $email_heading = wpinv_get_option( 'email_' . $email_type . '_heading' );
291
-    $email_heading = __( $email_heading, 'invoicing' );
289
+function wpinv_email_get_heading($email_type = '', $invoice_id = 0, $invoice = array()) {
290
+    $email_heading = wpinv_get_option('email_' . $email_type . '_heading');
291
+    $email_heading = __($email_heading, 'invoicing');
292 292
 
293
-    $email_heading = wpinv_email_format_text( $email_heading, $invoice );
293
+    $email_heading = wpinv_email_format_text($email_heading, $invoice);
294 294
 
295
-    return apply_filters( 'wpinv_email_heading', $email_heading, $email_type, $invoice_id, $invoice );
295
+    return apply_filters('wpinv_email_heading', $email_heading, $email_type, $invoice_id, $invoice);
296 296
 }
297 297
 
298
-function wpinv_email_get_content( $email_type = '', $invoice_id = 0, $invoice = array() ) {
299
-    $content    = wpinv_get_option( 'email_' . $email_type . '_body' );
300
-    $content    = __( $content, 'invoicing' );
298
+function wpinv_email_get_content($email_type = '', $invoice_id = 0, $invoice = array()) {
299
+    $content    = wpinv_get_option('email_' . $email_type . '_body');
300
+    $content    = __($content, 'invoicing');
301 301
 
302
-    $content    = wpinv_email_format_text( $content, $invoice );
302
+    $content    = wpinv_email_format_text($content, $invoice);
303 303
 
304
-    return apply_filters( 'wpinv_email_content', $content, $email_type, $invoice_id, $invoice );
304
+    return apply_filters('wpinv_email_content', $content, $email_type, $invoice_id, $invoice);
305 305
 }
306 306
 
307
-function wpinv_email_get_headers( $email_type = '', $invoice_id = 0, $invoice = array() ) {
307
+function wpinv_email_get_headers($email_type = '', $invoice_id = 0, $invoice = array()) {
308 308
     $from_name = wpinv_mail_get_from_address();
309 309
     $from_email = wpinv_mail_get_from_address();
310 310
     
311
-    $invoice    = !empty( $invoice ) && is_object( $invoice ) ? $invoice : ( $invoice_id > 0 ? wpinv_get_invoice( $invoice_id ) : NULL );
311
+    $invoice    = !empty($invoice) && is_object($invoice) ? $invoice : ($invoice_id > 0 ? wpinv_get_invoice($invoice_id) : NULL);
312 312
     
313
-    $headers    = "From: " . stripslashes_deep( html_entity_decode( $from_name, ENT_COMPAT, 'UTF-8' ) ) . " <$from_email>\r\n";
314
-    $headers    .= "Reply-To: ". $from_email . "\r\n";
313
+    $headers    = "From: " . stripslashes_deep(html_entity_decode($from_name, ENT_COMPAT, 'UTF-8')) . " <$from_email>\r\n";
314
+    $headers    .= "Reply-To: " . $from_email . "\r\n";
315 315
     $headers    .= "Content-Type: " . wpinv_mail_get_content_type() . "\r\n";
316 316
     
317
-    return apply_filters( 'wpinv_email_headers', $headers, $email_type, $invoice_id, $invoice );
317
+    return apply_filters('wpinv_email_headers', $headers, $email_type, $invoice_id, $invoice);
318 318
 }
319 319
 
320
-function wpinv_email_get_attachments( $email_type = '', $invoice_id = 0, $invoice = array() ) {
320
+function wpinv_email_get_attachments($email_type = '', $invoice_id = 0, $invoice = array()) {
321 321
     $attachments = array();
322 322
     
323
-    return apply_filters( 'wpinv_email_attachments', $attachments, $email_type, $invoice_id, $invoice );
323
+    return apply_filters('wpinv_email_attachments', $attachments, $email_type, $invoice_id, $invoice);
324 324
 }
325 325
 
326 326
 /**
327 327
  * Searches for and replaces certain placeholders in an email.
328 328
  */
329
-function wpinv_email_format_text( $content, $invoice ) {
329
+function wpinv_email_format_text($content, $invoice) {
330 330
 
331 331
     $replace_array = array(
332 332
         '{site_title}'      => wpinv_get_blogname(),
333
-        '{date}'            => getpaid_format_date( current_time( 'mysql' ) ),
333
+        '{date}'            => getpaid_format_date(current_time('mysql')),
334 334
     );
335 335
 
336
-    $invoice = new WPInv_Invoice( $invoice );
336
+    $invoice = new WPInv_Invoice($invoice);
337 337
 
338
-    if ( $invoice->get_id() ) {
338
+    if ($invoice->get_id()) {
339 339
 
340 340
         $replace_array = array_merge(
341 341
             $replace_array, 
342 342
             array(
343
-                '{name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
344
-                '{full_name}'       => sanitize_text_field( $invoice->get_user_full_name() ),
345
-                '{first_name}'      => sanitize_text_field( $invoice->get_first_name() ),
346
-                '{last_name}'       => sanitize_text_field( $invoice->get_last_name() ),
347
-                '{email}'           => sanitize_email( $invoice->get_email() ),
348
-                '{invoice_number}'  => sanitize_text_field( $invoice->get_number() ),
349
-                '{invoice_total}'   => sanitize_text_field( wpinv_price( $invoice->get_total( true ), $invoice->get_currency() ) ),
350
-                '{invoice_link}'    => esc_url( $invoice->get_view_url() ),
351
-                '{invoice_pay_link}'=> esc_url( $invoice->get_checkout_payment_url() ),
352
-                '{invoice_date}'    => date( get_option( 'date_format' ), strtotime( $invoice->get_date_created(), current_time( 'timestamp' ) ) ),
353
-                '{invoice_due_date}'=> date( get_option( 'date_format' ), strtotime( $invoice->get_due_date(), current_time( 'timestamp' ) ) ),
354
-                '{invoice_quote}'   => sanitize_text_field( $invoice->get_invoice_quote_type() ),
355
-                '{invoice_label}'   => sanitize_text_field( ucfirst( $invoice->get_invoice_quote_type() ) ),
356
-                '{is_was}'          => strtotime( $invoice->get_due_date() ) < current_time( 'timestamp' ) ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
343
+                '{name}'            => sanitize_text_field($invoice->get_user_full_name()),
344
+                '{full_name}'       => sanitize_text_field($invoice->get_user_full_name()),
345
+                '{first_name}'      => sanitize_text_field($invoice->get_first_name()),
346
+                '{last_name}'       => sanitize_text_field($invoice->get_last_name()),
347
+                '{email}'           => sanitize_email($invoice->get_email()),
348
+                '{invoice_number}'  => sanitize_text_field($invoice->get_number()),
349
+                '{invoice_total}'   => sanitize_text_field(wpinv_price($invoice->get_total(true), $invoice->get_currency())),
350
+                '{invoice_link}'    => esc_url($invoice->get_view_url()),
351
+                '{invoice_pay_link}'=> esc_url($invoice->get_checkout_payment_url()),
352
+                '{invoice_date}'    => date(get_option('date_format'), strtotime($invoice->get_date_created(), current_time('timestamp'))),
353
+                '{invoice_due_date}'=> date(get_option('date_format'), strtotime($invoice->get_due_date(), current_time('timestamp'))),
354
+                '{invoice_quote}'   => sanitize_text_field($invoice->get_invoice_quote_type()),
355
+                '{invoice_label}'   => sanitize_text_field(ucfirst($invoice->get_invoice_quote_type())),
356
+                '{is_was}'          => strtotime($invoice->get_due_date()) < current_time('timestamp') ? __('was', 'invoicing') : __('is', 'invoicing'),
357 357
             )
358 358
         );
359 359
 
360 360
     }
361 361
 
362 362
     // Let third party plugins filter the arra.
363
-    $replace_array = apply_filters( 'wpinv_email_format_text', $replace_array, $content, $invoice );
363
+    $replace_array = apply_filters('wpinv_email_format_text', $replace_array, $content, $invoice);
364 364
 
365
-    foreach ( $replace_array as $key => $value ) {
366
-        $content = str_replace( $key, $value, $content );
365
+    foreach ($replace_array as $key => $value) {
366
+        $content = str_replace($key, $value, $content);
367 367
     }
368 368
 
369
-    return apply_filters( 'wpinv_email_content_replace', $content );
369
+    return apply_filters('wpinv_email_content_replace', $content);
370 370
 }
371 371
 
372 372
 
373
-function wpinv_email_wrap_message( $message ) {
373
+function wpinv_email_wrap_message($message) {
374 374
     // Buffer
375 375
     ob_start();
376 376
 
377
-    do_action( 'wpinv_email_header' );
377
+    do_action('wpinv_email_header');
378 378
 
379
-    echo wpautop( wptexturize( $message ) );
379
+    echo wpautop(wptexturize($message));
380 380
 
381
-    do_action( 'wpinv_email_footer' );
381
+    do_action('wpinv_email_footer');
382 382
 
383 383
     // Get contents
384 384
     $message = ob_get_clean();
@@ -386,21 +386,21 @@  discard block
 block discarded – undo
386 386
     return $message;
387 387
 }
388 388
 
389
-function wpinv_add_notes_to_invoice_email( $invoice, $email_type ) {
390
-    if ( !empty( $invoice ) && $email_type == 'user_invoice' && $invoice_notes = wpinv_get_invoice_notes( $invoice->get_id(), true ) ) {
391
-        $date_format = get_option( 'date_format' );
392
-        $time_format = get_option( 'time_format' );
389
+function wpinv_add_notes_to_invoice_email($invoice, $email_type) {
390
+    if (!empty($invoice) && $email_type == 'user_invoice' && $invoice_notes = wpinv_get_invoice_notes($invoice->get_id(), true)) {
391
+        $date_format = get_option('date_format');
392
+        $time_format = get_option('time_format');
393 393
         ?>
394 394
         <div id="wpinv-email-notes">
395
-            <h3 class="wpinv-notes-t"><?php echo apply_filters( 'wpinv_email_invoice_notes_title', __( 'Invoice Notes', 'invoicing' ) ); ?></h3>
395
+            <h3 class="wpinv-notes-t"><?php echo apply_filters('wpinv_email_invoice_notes_title', __('Invoice Notes', 'invoicing')); ?></h3>
396 396
             <ol class="wpinv-notes-lists">
397 397
         <?php
398
-        foreach ( $invoice_notes as $note ) {
399
-            $note_time = strtotime( $note->comment_date );
398
+        foreach ($invoice_notes as $note) {
399
+            $note_time = strtotime($note->comment_date);
400 400
             ?>
401 401
             <li class="comment wpinv-note">
402
-            <p class="wpinv-note-date meta"><?php printf( __( '%2$s at %3$s', 'invoicing' ), $note->comment_author, date_i18n( $date_format, $note_time ), date_i18n( $time_format, $note_time ), $note_time ); ?></p>
403
-            <div class="wpinv-note-desc description"><?php echo wpautop( wptexturize( $note->comment_content ) ); ?></div>
402
+            <p class="wpinv-note-date meta"><?php printf(__('%2$s at %3$s', 'invoicing'), $note->comment_author, date_i18n($date_format, $note_time), date_i18n($time_format, $note_time), $note_time); ?></p>
403
+            <div class="wpinv-note-desc description"><?php echo wpautop(wptexturize($note->comment_content)); ?></div>
404 404
             </li>
405 405
             <?php
406 406
         }
@@ -409,4 +409,4 @@  discard block
 block discarded – undo
409 409
         <?php
410 410
     }
411 411
 }
412
-add_action( 'wpinv_email_billing_details', 'wpinv_add_notes_to_invoice_email', 10, 3 );
412
+add_action('wpinv_email_billing_details', 'wpinv_add_notes_to_invoice_email', 10, 3);
Please login to merge, or discard this patch.