Passed
Push — master ( 7a26f0...499ba9 )
by Brian
05:15
created
includes/api/class-getpaid-rest-report-top-sellers-controller.php 2 patches
Indentation   +175 added lines, -175 removed lines patch added patch discarded remove patch
@@ -18,179 +18,179 @@
 block discarded – undo
18 18
  */
19 19
 class GetPaid_REST_Report_Top_Sellers_Controller extends GetPaid_REST_Report_Sales_Controller {
20 20
 
21
-	/**
22
-	 * Route base.
23
-	 *
24
-	 * @var string
25
-	 */
26
-	protected $rest_base = 'reports/top_sellers';
27
-
28
-	/**
29
-	 * Get top sellers report.
30
-	 *
31
-	 * @param WP_REST_Request $request
32
-	 * @return array|WP_Error
33
-	 */
34
-	public function get_items( $request ) {
35
-
36
-		// Prepare items.
37
-		$this->report_range = $this->get_date_range( $request );
38
-		$report_data        = $this->get_report_data();
39
-
40
-		$top_sellers = array();
41
-
42
-		foreach ( $report_data as $item ) {
43
-
44
-			$item_obj  = new WPInv_Item( $item );
45
-			$item_name = $item->invoice_item_name;
46
-			$item_qty  = floatval( $item->invoice_item_qty );
47
-			$item_id   = absint( $item->invoice_item_id );
48
-			$price     = sanitize_text_field( wpinv_price( $item->invoice_item_price ) );
49
-
50
-			$item_obj  = new WPInv_Item( $item_id );
51
-
52
-			if ( $item_obj->exists() ) {
53
-				$item_name = $item_obj->get_name();
54
-			} else {
55
-				$item_id   = 0;
56
-			}
57
-
58
-			$top_sellers[] = array(
59
-				'name'               => sanitize_text_field( $item_name ),
60
-				'item_id'            => $item_id,
61
-				'quantity'           => $item_qty,
62
-				'earnings'           => wpinv_round_amount( $item->invoice_item_price ),
63
-				'earnings_formatted' => sanitize_text_field( wpinv_price( $price ) ),
64
-			);
65
-
66
-		}
67
-
68
-		$data = array();
69
-		foreach ( $top_sellers as $top_seller ) {
70
-			$item   = $this->prepare_item_for_response( (object) $top_seller, $request );
71
-			$data[] = $this->prepare_response_for_collection( $item );
72
-		}
73
-
74
-		return rest_ensure_response( $data );
75
-
76
-	}
77
-
78
-	/**
79
-	 * Prepare a report sales object for serialization.
80
-	 *
81
-	 * @param stdClass $top_seller
82
-	 * @param WP_REST_Request $request Request object.
83
-	 * @return WP_REST_Response $response Response data.
84
-	 */
85
-	public function prepare_item_for_response( $top_seller, $request ) {
86
-		$data    = (array) $top_seller;
87
-
88
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
89
-		$data    = $this->add_additional_fields_to_object( $data, $request );
90
-		$data    = $this->filter_response_by_context( $data, $context );
91
-
92
-		// Wrap the data in a response object.
93
-		$response = rest_ensure_response( $data );
94
-		$links = array(
95
-			'about' => array(
96
-				'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
97
-			),
98
-		);
99
-
100
-		if ( ! empty( $top_seller->item_id ) ) {
101
-			$links['item']   = array(
102
-				'href'       => rest_url( sprintf( '/%s/items/%s', $this->namespace, $top_seller->item_id ) ),
103
-				'embeddable' => true,
104
-			);
105
-		}
106
-
107
-		$response->add_links( $links );
108
-		return apply_filters( 'getpaid_rest_prepare_report_' . $this->rest_base, $response, $top_seller, $request );
109
-	}
110
-
111
-	/**
112
-	 * Get all data needed for this report and store in the class.
113
-	 */
114
-	protected function query_report_data() {
115
-
116
-		$this->report_data = GetPaid_Reports_Helper::get_invoice_report_data(
117
-			array(
118
-				'data'         => array(
119
-					'quantity'  => array(
120
-						'type'     => 'invoice_item',
121
-						'function' => 'SUM',
122
-						'name'     => 'invoice_item_qty',
123
-					),
124
-					'item_id'   => array(
125
-						'type'     => 'invoice_item',
126
-						'function' => '',
127
-						'name'     => 'invoice_item_id',
128
-					),
129
-					'item_name' => array(
130
-						'type'     => 'invoice_item',
131
-						'function' => '',
132
-						'name'     => 'invoice_item_name',
133
-					),
134
-					'price'     => array(
135
-						'type'     => 'invoice_item',
136
-						'function' => 'SUM',
137
-						'name'     => 'invoice_item_price',
138
-					),
139
-				),
140
-				'group_by'     => 'invoice_item_id',
141
-				'order_by'     => 'invoice_item_qty DESC',
142
-				'query_type'   => 'get_results',
143
-				'limit'        => 10,
144
-				'filter_range' => $this->report_range,
145
-			)
146
-		);
147
-
148
-	}
149
-
150
-	/**
151
-	 * Get the Report's schema, conforming to JSON Schema.
152
-	 *
153
-	 * @return array
154
-	 */
155
-	public function get_item_schema() {
156
-		$schema = array(
157
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
158
-			'title'      => $this->rest_base,
159
-			'type'       => 'object',
160
-			'properties' => array(
161
-				'name'                => array(
162
-					'description' => __( 'Item name.', 'invoicing' ),
163
-					'type'        => 'string',
164
-					'context'     => array( 'view' ),
165
-					'readonly'    => true,
166
-				),
167
-				'item_id'             => array(
168
-					'description' => __( 'Item ID.', 'invoicing' ),
169
-					'type'        => 'integer',
170
-					'context'     => array( 'view' ),
171
-					'readonly'    => true,
172
-				),
173
-				'quantity'            => array(
174
-					'description' => __( 'Total number of purchases.', 'invoicing' ),
175
-					'type'        => 'number',
176
-					'context'     => array( 'view' ),
177
-					'readonly'    => true,
178
-				),
179
-				'earnings'            => array(
180
-					'description' => __( 'Total earnings for the item.', 'invoicing' ),
181
-					'type'        => 'number',
182
-					'context'     => array( 'view' ),
183
-					'readonly'    => true,
184
-				),
185
-				'earnings_formatted"' => array(
186
-					'description' => __( 'Total earnings (formatted) for the item.', 'invoicing' ),
187
-					'type'        => 'string',
188
-					'context'     => array( 'view' ),
189
-					'readonly'    => true,
190
-				),
191
-			),
192
-		);
193
-
194
-		return $this->add_additional_fields_schema( $schema );
195
-	}
21
+    /**
22
+     * Route base.
23
+     *
24
+     * @var string
25
+     */
26
+    protected $rest_base = 'reports/top_sellers';
27
+
28
+    /**
29
+     * Get top sellers report.
30
+     *
31
+     * @param WP_REST_Request $request
32
+     * @return array|WP_Error
33
+     */
34
+    public function get_items( $request ) {
35
+
36
+        // Prepare items.
37
+        $this->report_range = $this->get_date_range( $request );
38
+        $report_data        = $this->get_report_data();
39
+
40
+        $top_sellers = array();
41
+
42
+        foreach ( $report_data as $item ) {
43
+
44
+            $item_obj  = new WPInv_Item( $item );
45
+            $item_name = $item->invoice_item_name;
46
+            $item_qty  = floatval( $item->invoice_item_qty );
47
+            $item_id   = absint( $item->invoice_item_id );
48
+            $price     = sanitize_text_field( wpinv_price( $item->invoice_item_price ) );
49
+
50
+            $item_obj  = new WPInv_Item( $item_id );
51
+
52
+            if ( $item_obj->exists() ) {
53
+                $item_name = $item_obj->get_name();
54
+            } else {
55
+                $item_id   = 0;
56
+            }
57
+
58
+            $top_sellers[] = array(
59
+                'name'               => sanitize_text_field( $item_name ),
60
+                'item_id'            => $item_id,
61
+                'quantity'           => $item_qty,
62
+                'earnings'           => wpinv_round_amount( $item->invoice_item_price ),
63
+                'earnings_formatted' => sanitize_text_field( wpinv_price( $price ) ),
64
+            );
65
+
66
+        }
67
+
68
+        $data = array();
69
+        foreach ( $top_sellers as $top_seller ) {
70
+            $item   = $this->prepare_item_for_response( (object) $top_seller, $request );
71
+            $data[] = $this->prepare_response_for_collection( $item );
72
+        }
73
+
74
+        return rest_ensure_response( $data );
75
+
76
+    }
77
+
78
+    /**
79
+     * Prepare a report sales object for serialization.
80
+     *
81
+     * @param stdClass $top_seller
82
+     * @param WP_REST_Request $request Request object.
83
+     * @return WP_REST_Response $response Response data.
84
+     */
85
+    public function prepare_item_for_response( $top_seller, $request ) {
86
+        $data    = (array) $top_seller;
87
+
88
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
89
+        $data    = $this->add_additional_fields_to_object( $data, $request );
90
+        $data    = $this->filter_response_by_context( $data, $context );
91
+
92
+        // Wrap the data in a response object.
93
+        $response = rest_ensure_response( $data );
94
+        $links = array(
95
+            'about' => array(
96
+                'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
97
+            ),
98
+        );
99
+
100
+        if ( ! empty( $top_seller->item_id ) ) {
101
+            $links['item']   = array(
102
+                'href'       => rest_url( sprintf( '/%s/items/%s', $this->namespace, $top_seller->item_id ) ),
103
+                'embeddable' => true,
104
+            );
105
+        }
106
+
107
+        $response->add_links( $links );
108
+        return apply_filters( 'getpaid_rest_prepare_report_' . $this->rest_base, $response, $top_seller, $request );
109
+    }
110
+
111
+    /**
112
+     * Get all data needed for this report and store in the class.
113
+     */
114
+    protected function query_report_data() {
115
+
116
+        $this->report_data = GetPaid_Reports_Helper::get_invoice_report_data(
117
+            array(
118
+                'data'         => array(
119
+                    'quantity'  => array(
120
+                        'type'     => 'invoice_item',
121
+                        'function' => 'SUM',
122
+                        'name'     => 'invoice_item_qty',
123
+                    ),
124
+                    'item_id'   => array(
125
+                        'type'     => 'invoice_item',
126
+                        'function' => '',
127
+                        'name'     => 'invoice_item_id',
128
+                    ),
129
+                    'item_name' => array(
130
+                        'type'     => 'invoice_item',
131
+                        'function' => '',
132
+                        'name'     => 'invoice_item_name',
133
+                    ),
134
+                    'price'     => array(
135
+                        'type'     => 'invoice_item',
136
+                        'function' => 'SUM',
137
+                        'name'     => 'invoice_item_price',
138
+                    ),
139
+                ),
140
+                'group_by'     => 'invoice_item_id',
141
+                'order_by'     => 'invoice_item_qty DESC',
142
+                'query_type'   => 'get_results',
143
+                'limit'        => 10,
144
+                'filter_range' => $this->report_range,
145
+            )
146
+        );
147
+
148
+    }
149
+
150
+    /**
151
+     * Get the Report's schema, conforming to JSON Schema.
152
+     *
153
+     * @return array
154
+     */
155
+    public function get_item_schema() {
156
+        $schema = array(
157
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
158
+            'title'      => $this->rest_base,
159
+            'type'       => 'object',
160
+            'properties' => array(
161
+                'name'                => array(
162
+                    'description' => __( 'Item name.', 'invoicing' ),
163
+                    'type'        => 'string',
164
+                    'context'     => array( 'view' ),
165
+                    'readonly'    => true,
166
+                ),
167
+                'item_id'             => array(
168
+                    'description' => __( 'Item ID.', 'invoicing' ),
169
+                    'type'        => 'integer',
170
+                    'context'     => array( 'view' ),
171
+                    'readonly'    => true,
172
+                ),
173
+                'quantity'            => array(
174
+                    'description' => __( 'Total number of purchases.', 'invoicing' ),
175
+                    'type'        => 'number',
176
+                    'context'     => array( 'view' ),
177
+                    'readonly'    => true,
178
+                ),
179
+                'earnings'            => array(
180
+                    'description' => __( 'Total earnings for the item.', 'invoicing' ),
181
+                    'type'        => 'number',
182
+                    'context'     => array( 'view' ),
183
+                    'readonly'    => true,
184
+                ),
185
+                'earnings_formatted"' => array(
186
+                    'description' => __( 'Total earnings (formatted) for the item.', 'invoicing' ),
187
+                    'type'        => 'string',
188
+                    'context'     => array( 'view' ),
189
+                    'readonly'    => true,
190
+                ),
191
+            ),
192
+        );
193
+
194
+        return $this->add_additional_fields_schema( $schema );
195
+    }
196 196
 }
Please login to merge, or discard this patch.
Spacing   +39 added lines, -39 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  * @since   2.0.0
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 /**
15 15
  * GetPaid REST top sellers controller class.
@@ -31,47 +31,47 @@  discard block
 block discarded – undo
31 31
 	 * @param WP_REST_Request $request
32 32
 	 * @return array|WP_Error
33 33
 	 */
34
-	public function get_items( $request ) {
34
+	public function get_items($request) {
35 35
 
36 36
 		// Prepare items.
37
-		$this->report_range = $this->get_date_range( $request );
37
+		$this->report_range = $this->get_date_range($request);
38 38
 		$report_data        = $this->get_report_data();
39 39
 
40 40
 		$top_sellers = array();
41 41
 
42
-		foreach ( $report_data as $item ) {
42
+		foreach ($report_data as $item) {
43 43
 
44
-			$item_obj  = new WPInv_Item( $item );
44
+			$item_obj  = new WPInv_Item($item);
45 45
 			$item_name = $item->invoice_item_name;
46
-			$item_qty  = floatval( $item->invoice_item_qty );
47
-			$item_id   = absint( $item->invoice_item_id );
48
-			$price     = sanitize_text_field( wpinv_price( $item->invoice_item_price ) );
46
+			$item_qty  = floatval($item->invoice_item_qty);
47
+			$item_id   = absint($item->invoice_item_id);
48
+			$price     = sanitize_text_field(wpinv_price($item->invoice_item_price));
49 49
 
50
-			$item_obj  = new WPInv_Item( $item_id );
50
+			$item_obj  = new WPInv_Item($item_id);
51 51
 
52
-			if ( $item_obj->exists() ) {
52
+			if ($item_obj->exists()) {
53 53
 				$item_name = $item_obj->get_name();
54 54
 			} else {
55 55
 				$item_id   = 0;
56 56
 			}
57 57
 
58 58
 			$top_sellers[] = array(
59
-				'name'               => sanitize_text_field( $item_name ),
59
+				'name'               => sanitize_text_field($item_name),
60 60
 				'item_id'            => $item_id,
61 61
 				'quantity'           => $item_qty,
62
-				'earnings'           => wpinv_round_amount( $item->invoice_item_price ),
63
-				'earnings_formatted' => sanitize_text_field( wpinv_price( $price ) ),
62
+				'earnings'           => wpinv_round_amount($item->invoice_item_price),
63
+				'earnings_formatted' => sanitize_text_field(wpinv_price($price)),
64 64
 			);
65 65
 
66 66
 		}
67 67
 
68 68
 		$data = array();
69
-		foreach ( $top_sellers as $top_seller ) {
70
-			$item   = $this->prepare_item_for_response( (object) $top_seller, $request );
71
-			$data[] = $this->prepare_response_for_collection( $item );
69
+		foreach ($top_sellers as $top_seller) {
70
+			$item   = $this->prepare_item_for_response((object) $top_seller, $request);
71
+			$data[] = $this->prepare_response_for_collection($item);
72 72
 		}
73 73
 
74
-		return rest_ensure_response( $data );
74
+		return rest_ensure_response($data);
75 75
 
76 76
 	}
77 77
 
@@ -82,30 +82,30 @@  discard block
 block discarded – undo
82 82
 	 * @param WP_REST_Request $request Request object.
83 83
 	 * @return WP_REST_Response $response Response data.
84 84
 	 */
85
-	public function prepare_item_for_response( $top_seller, $request ) {
85
+	public function prepare_item_for_response($top_seller, $request) {
86 86
 		$data    = (array) $top_seller;
87 87
 
88
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
89
-		$data    = $this->add_additional_fields_to_object( $data, $request );
90
-		$data    = $this->filter_response_by_context( $data, $context );
88
+		$context = !empty($request['context']) ? $request['context'] : 'view';
89
+		$data    = $this->add_additional_fields_to_object($data, $request);
90
+		$data    = $this->filter_response_by_context($data, $context);
91 91
 
92 92
 		// Wrap the data in a response object.
93
-		$response = rest_ensure_response( $data );
93
+		$response = rest_ensure_response($data);
94 94
 		$links = array(
95 95
 			'about' => array(
96
-				'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
96
+				'href' => rest_url(sprintf('%s/reports', $this->namespace)),
97 97
 			),
98 98
 		);
99 99
 
100
-		if ( ! empty( $top_seller->item_id ) ) {
101
-			$links['item']   = array(
102
-				'href'       => rest_url( sprintf( '/%s/items/%s', $this->namespace, $top_seller->item_id ) ),
100
+		if (!empty($top_seller->item_id)) {
101
+			$links['item'] = array(
102
+				'href'       => rest_url(sprintf('/%s/items/%s', $this->namespace, $top_seller->item_id)),
103 103
 				'embeddable' => true,
104 104
 			);
105 105
 		}
106 106
 
107
-		$response->add_links( $links );
108
-		return apply_filters( 'getpaid_rest_prepare_report_' . $this->rest_base, $response, $top_seller, $request );
107
+		$response->add_links($links);
108
+		return apply_filters('getpaid_rest_prepare_report_' . $this->rest_base, $response, $top_seller, $request);
109 109
 	}
110 110
 
111 111
 	/**
@@ -159,38 +159,38 @@  discard block
 block discarded – undo
159 159
 			'type'       => 'object',
160 160
 			'properties' => array(
161 161
 				'name'                => array(
162
-					'description' => __( 'Item name.', 'invoicing' ),
162
+					'description' => __('Item name.', 'invoicing'),
163 163
 					'type'        => 'string',
164
-					'context'     => array( 'view' ),
164
+					'context'     => array('view'),
165 165
 					'readonly'    => true,
166 166
 				),
167 167
 				'item_id'             => array(
168
-					'description' => __( 'Item ID.', 'invoicing' ),
168
+					'description' => __('Item ID.', 'invoicing'),
169 169
 					'type'        => 'integer',
170
-					'context'     => array( 'view' ),
170
+					'context'     => array('view'),
171 171
 					'readonly'    => true,
172 172
 				),
173 173
 				'quantity'            => array(
174
-					'description' => __( 'Total number of purchases.', 'invoicing' ),
174
+					'description' => __('Total number of purchases.', 'invoicing'),
175 175
 					'type'        => 'number',
176
-					'context'     => array( 'view' ),
176
+					'context'     => array('view'),
177 177
 					'readonly'    => true,
178 178
 				),
179 179
 				'earnings'            => array(
180
-					'description' => __( 'Total earnings for the item.', 'invoicing' ),
180
+					'description' => __('Total earnings for the item.', 'invoicing'),
181 181
 					'type'        => 'number',
182
-					'context'     => array( 'view' ),
182
+					'context'     => array('view'),
183 183
 					'readonly'    => true,
184 184
 				),
185 185
 				'earnings_formatted"' => array(
186
-					'description' => __( 'Total earnings (formatted) for the item.', 'invoicing' ),
186
+					'description' => __('Total earnings (formatted) for the item.', 'invoicing'),
187 187
 					'type'        => 'string',
188
-					'context'     => array( 'view' ),
188
+					'context'     => array('view'),
189 189
 					'readonly'    => true,
190 190
 				),
191 191
 			),
192 192
 		);
193 193
 
194
-		return $this->add_additional_fields_schema( $schema );
194
+		return $this->add_additional_fields_schema($schema);
195 195
 	}
196 196
 }
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-items-controller.php 2 patches
Indentation   +156 added lines, -156 removed lines patch added patch discarded remove patch
@@ -15,168 +15,168 @@
 block discarded – undo
15 15
 class WPInv_REST_Items_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_item';
23
-
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'items';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Item';
37
-
38
-	/**
39
-	 * Registers the routes for the objects of the controller.
40
-	 *
41
-	 * @since 1.0.19
42
-	 *
43
-	 * @see register_rest_route()
44
-	 */
45
-	public function register_namespace_routes( $namespace ) {
46
-
47
-		parent::register_namespace_routes( $namespace );
48
-
49
-		register_rest_route(
50
-			$this->namespace,
51
-			'/' . $this->rest_base . '/item-types',
52
-			array(
53
-				array(
54
-					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_item_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
-				),
58
-			)
59
-		);
60
-
61
-	}
62
-
63
-	/**
64
-	 * Handles rest requests for item types.
65
-	 *
66
-	 * @since 1.0.13
67
-	 *
68
-	 *
69
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
-	 */
71
-	public function get_item_types() {
72
-		return rest_ensure_response( wpinv_get_item_types() );
73
-	}
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_item';
74 23
 
75 24
     /**
76
-	 * Retrieves the query params for the items collection.
77
-	 *
78
-	 * @since 1.0.13
79
-	 *
80
-	 * @return array Collection parameters.
81
-	 */
82
-	public function get_collection_params() {
83
-
84
-		$params = array_merge(
85
-			parent::get_collection_params(),
86
-        	array(
87
-
88
-				// Item types
89
-				'type' => array(
90
-					'description'       => __( 'Type of items to fetch.', 'invoicing' ),
91
-					'type'              => array( 'array', 'string' ),
92
-					'default'           => 'any',
93
-					'validate_callback' => 'rest_validate_request_arg',
94
-					'sanitize_callback' => 'wpinv_parse_list',
95
-					'items'             => array(
96
-						'enum' => array_merge( array( 'any' ), wpinv_item_types() ),
97
-						'type' => 'string',
98
-					),
99
-				),
100
-
101
-			)
102
-		);
103
-
104
-		// Filter collection parameters for the items controller.
105
-		return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
106
-
107
-	}
108
-
109
-	/**
110
-	 * Determine the allowed query_vars for a get_items() response and
111
-	 * prepare for WP_Query.
112
-	 *
113
-	 * @param array           $prepared_args Prepared arguments.
114
-	 * @param WP_REST_Request $request Request object.
115
-	 * @return array          $query_args
116
-	 */
117
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
118
-
119
-		$query_args = parent::prepare_items_query( $prepared_args );
120
-
121
-		// Retrieve items by type.
122
-		if ( ! in_array( 'any', $request['type'] ) ) {
123
-
124
-			if ( empty( $query_args['meta_query'] ) ) {
125
-				$query_args['meta_query'] = array();
126
-			}
127
-
128
-			$query_args['meta_query'][] = array(
129
-				'key'     => '_wpinv_type',
130
-				'value'   => implode( ',', $request['type'] ),
131
-				'compare' => 'IN',
132
-			);
133
-
134
-		}
135
-
136
-		return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
137
-
138
-	}
139
-
140
-	/**
141
-	 * Retrieves a valid list of post statuses.
142
-	 *
143
-	 * @since 1.0.15
144
-	 *
145
-	 * @return array A list of registered item statuses.
146
-	 */
147
-	public function get_post_statuses() {
148
-		return array( 'draft', 'pending', 'publish' );
149
-	}
150
-
151
-	/**
152
-	 * Checks if a key should be included in a response.
153
-	 *
154
-	 * @since  1.0.19
155
-	 * @param  WPInv_Item   $item  Item object.
156
-	 * @param  string       $field_key The key to check for.
157
-	 * @return bool
158
-	 */
159
-	public function object_supports_field( $item, $field_key ) {
160
-
161
-		if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
162
-			return false;
163
-		}
164
-
165
-		foreach ( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
166
-
167
-			if ( $key == $field_key && ! $item->is_recurring() ) {
168
-				return false;
169
-			}
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'items';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Item';
37
+
38
+    /**
39
+     * Registers the routes for the objects of the controller.
40
+     *
41
+     * @since 1.0.19
42
+     *
43
+     * @see register_rest_route()
44
+     */
45
+    public function register_namespace_routes( $namespace ) {
46
+
47
+        parent::register_namespace_routes( $namespace );
48
+
49
+        register_rest_route(
50
+            $this->namespace,
51
+            '/' . $this->rest_base . '/item-types',
52
+            array(
53
+                array(
54
+                    'methods'             => WP_REST_Server::READABLE,
55
+                    'callback'            => array( $this, 'get_item_types' ),
56
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
+                ),
58
+            )
59
+        );
60
+
61
+    }
62
+
63
+    /**
64
+     * Handles rest requests for item types.
65
+     *
66
+     * @since 1.0.13
67
+     *
68
+     *
69
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
+     */
71
+    public function get_item_types() {
72
+        return rest_ensure_response( wpinv_get_item_types() );
73
+    }
74
+
75
+    /**
76
+     * Retrieves the query params for the items collection.
77
+     *
78
+     * @since 1.0.13
79
+     *
80
+     * @return array Collection parameters.
81
+     */
82
+    public function get_collection_params() {
83
+
84
+        $params = array_merge(
85
+            parent::get_collection_params(),
86
+            array(
87
+
88
+                // Item types
89
+                'type' => array(
90
+                    'description'       => __( 'Type of items to fetch.', 'invoicing' ),
91
+                    'type'              => array( 'array', 'string' ),
92
+                    'default'           => 'any',
93
+                    'validate_callback' => 'rest_validate_request_arg',
94
+                    'sanitize_callback' => 'wpinv_parse_list',
95
+                    'items'             => array(
96
+                        'enum' => array_merge( array( 'any' ), wpinv_item_types() ),
97
+                        'type' => 'string',
98
+                    ),
99
+                ),
100
+
101
+            )
102
+        );
103
+
104
+        // Filter collection parameters for the items controller.
105
+        return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
106
+
107
+    }
108
+
109
+    /**
110
+     * Determine the allowed query_vars for a get_items() response and
111
+     * prepare for WP_Query.
112
+     *
113
+     * @param array           $prepared_args Prepared arguments.
114
+     * @param WP_REST_Request $request Request object.
115
+     * @return array          $query_args
116
+     */
117
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
118
+
119
+        $query_args = parent::prepare_items_query( $prepared_args );
120
+
121
+        // Retrieve items by type.
122
+        if ( ! in_array( 'any', $request['type'] ) ) {
123
+
124
+            if ( empty( $query_args['meta_query'] ) ) {
125
+                $query_args['meta_query'] = array();
126
+            }
127
+
128
+            $query_args['meta_query'][] = array(
129
+                'key'     => '_wpinv_type',
130
+                'value'   => implode( ',', $request['type'] ),
131
+                'compare' => 'IN',
132
+            );
133
+
134
+        }
135
+
136
+        return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
137
+
138
+    }
139
+
140
+    /**
141
+     * Retrieves a valid list of post statuses.
142
+     *
143
+     * @since 1.0.15
144
+     *
145
+     * @return array A list of registered item statuses.
146
+     */
147
+    public function get_post_statuses() {
148
+        return array( 'draft', 'pending', 'publish' );
149
+    }
150
+
151
+    /**
152
+     * Checks if a key should be included in a response.
153
+     *
154
+     * @since  1.0.19
155
+     * @param  WPInv_Item   $item  Item object.
156
+     * @param  string       $field_key The key to check for.
157
+     * @return bool
158
+     */
159
+    public function object_supports_field( $item, $field_key ) {
160
+
161
+        if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
162
+            return false;
163
+        }
164
+
165
+        foreach ( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
166
+
167
+            if ( $key == $field_key && ! $item->is_recurring() ) {
168
+                return false;
169
+            }
170 170
 }
171 171
 
172
-		foreach ( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
172
+        foreach ( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
173 173
 
174
-			if ( $key == $field_key && ! $item->has_free_trial() ) {
175
-				return false;
176
-			}
174
+            if ( $key == $field_key && ! $item->has_free_trial() ) {
175
+                return false;
176
+            }
177 177
 }
178 178
 
179
-		return parent::object_supports_field( $item, $field_key );
180
-	}
179
+        return parent::object_supports_field( $item, $field_key );
180
+    }
181 181
 
182 182
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API items controller class.
@@ -42,9 +42,9 @@  discard block
 block discarded – undo
42 42
 	 *
43 43
 	 * @see register_rest_route()
44 44
 	 */
45
-	public function register_namespace_routes( $namespace ) {
45
+	public function register_namespace_routes($namespace) {
46 46
 
47
-		parent::register_namespace_routes( $namespace );
47
+		parent::register_namespace_routes($namespace);
48 48
 
49 49
 		register_rest_route(
50 50
 			$this->namespace,
@@ -52,8 +52,8 @@  discard block
 block discarded – undo
52 52
 			array(
53 53
 				array(
54 54
 					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_item_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
55
+					'callback'            => array($this, 'get_item_types'),
56
+					'permission_callback' => array($this, 'get_items_permissions_check'),
57 57
 				),
58 58
 			)
59 59
 		);
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70 70
 	 */
71 71
 	public function get_item_types() {
72
-		return rest_ensure_response( wpinv_get_item_types() );
72
+		return rest_ensure_response(wpinv_get_item_types());
73 73
 	}
74 74
 
75 75
     /**
@@ -87,13 +87,13 @@  discard block
 block discarded – undo
87 87
 
88 88
 				// Item types
89 89
 				'type' => array(
90
-					'description'       => __( 'Type of items to fetch.', 'invoicing' ),
91
-					'type'              => array( 'array', 'string' ),
90
+					'description'       => __('Type of items to fetch.', 'invoicing'),
91
+					'type'              => array('array', 'string'),
92 92
 					'default'           => 'any',
93 93
 					'validate_callback' => 'rest_validate_request_arg',
94 94
 					'sanitize_callback' => 'wpinv_parse_list',
95 95
 					'items'             => array(
96
-						'enum' => array_merge( array( 'any' ), wpinv_item_types() ),
96
+						'enum' => array_merge(array('any'), wpinv_item_types()),
97 97
 						'type' => 'string',
98 98
 					),
99 99
 				),
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 		);
103 103
 
104 104
 		// Filter collection parameters for the items controller.
105
-		return apply_filters( 'getpaid_rest_items_collection_params', $params, $this );
105
+		return apply_filters('getpaid_rest_items_collection_params', $params, $this);
106 106
 
107 107
 	}
108 108
 
@@ -114,26 +114,26 @@  discard block
 block discarded – undo
114 114
 	 * @param WP_REST_Request $request Request object.
115 115
 	 * @return array          $query_args
116 116
 	 */
117
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
117
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
118 118
 
119
-		$query_args = parent::prepare_items_query( $prepared_args );
119
+		$query_args = parent::prepare_items_query($prepared_args);
120 120
 
121 121
 		// Retrieve items by type.
122
-		if ( ! in_array( 'any', $request['type'] ) ) {
122
+		if (!in_array('any', $request['type'])) {
123 123
 
124
-			if ( empty( $query_args['meta_query'] ) ) {
124
+			if (empty($query_args['meta_query'])) {
125 125
 				$query_args['meta_query'] = array();
126 126
 			}
127 127
 
128 128
 			$query_args['meta_query'][] = array(
129 129
 				'key'     => '_wpinv_type',
130
-				'value'   => implode( ',', $request['type'] ),
130
+				'value'   => implode(',', $request['type']),
131 131
 				'compare' => 'IN',
132 132
 			);
133 133
 
134 134
 		}
135 135
 
136
-		return apply_filters( 'getpaid_rest_items_prepare_items_query', $query_args, $request, $this );
136
+		return apply_filters('getpaid_rest_items_prepare_items_query', $query_args, $request, $this);
137 137
 
138 138
 	}
139 139
 
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
 	 * @return array A list of registered item statuses.
146 146
 	 */
147 147
 	public function get_post_statuses() {
148
-		return array( 'draft', 'pending', 'publish' );
148
+		return array('draft', 'pending', 'publish');
149 149
 	}
150 150
 
151 151
 	/**
@@ -156,27 +156,27 @@  discard block
 block discarded – undo
156 156
 	 * @param  string       $field_key The key to check for.
157 157
 	 * @return bool
158 158
 	 */
159
-	public function object_supports_field( $item, $field_key ) {
159
+	public function object_supports_field($item, $field_key) {
160 160
 
161
-		if ( 'minimum_price' == $field_key && ! $item->user_can_set_their_price() ) {
161
+		if ('minimum_price' == $field_key && !$item->user_can_set_their_price()) {
162 162
 			return false;
163 163
 		}
164 164
 
165
-		foreach ( wpinv_parse_list( 'initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date' ) as $key ) {
165
+		foreach (wpinv_parse_list('initial_price the_initial_price recurring_price the_recurring_price recurring_period recurring_interval recurring_limit is_free_trial trial_period trial_interval first_renewal_date') as $key) {
166 166
 
167
-			if ( $key == $field_key && ! $item->is_recurring() ) {
167
+			if ($key == $field_key && !$item->is_recurring()) {
168 168
 				return false;
169 169
 			}
170 170
 }
171 171
 
172
-		foreach ( wpinv_parse_list( 'trial_period trial_interval' ) as $key ) {
172
+		foreach (wpinv_parse_list('trial_period trial_interval') as $key) {
173 173
 
174
-			if ( $key == $field_key && ! $item->has_free_trial() ) {
174
+			if ($key == $field_key && !$item->has_free_trial()) {
175 175
 				return false;
176 176
 			}
177 177
 }
178 178
 
179
-		return parent::object_supports_field( $item, $field_key );
179
+		return parent::object_supports_field($item, $field_key);
180 180
 	}
181 181
 
182 182
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-report-sales-controller.php 2 patches
Indentation   +660 added lines, -660 removed lines patch added patch discarded remove patch
@@ -18,688 +18,688 @@
 block discarded – undo
18 18
  */
19 19
 class GetPaid_REST_Report_Sales_Controller extends GetPaid_REST_Date_Based_Controller {
20 20
 
21
-	/**
22
-	 * Route base.
23
-	 *
24
-	 * @var string
25
-	 */
26
-	protected $rest_base = 'reports/sales';
27
-
28
-	/**
29
-	 * The report data.
30
-	 *
31
-	 * @var stdClass
32
-	 */
33
-	public $report_data;
34
-
35
-	/**
36
-	 * The report range.
37
-	 *
38
-	 * @var array
39
-	 */
40
-	public $report_range;
41
-
42
-	/**
43
-	 * Registers the routes for the objects of the controller.
44
-	 *
45
-	 * @since 2.0.0
46
-	 *
47
-	 * @see register_rest_route()
48
-	 */
49
-	public function register_namespace_routes( $namespace ) {
50
-
51
-		// Get sales report.
52
-		register_rest_route(
53
-			$namespace,
54
-			$this->rest_base,
55
-			array(
56
-				array(
57
-					'methods'             => WP_REST_Server::READABLE,
58
-					'callback'            => array( $this, 'get_items' ),
59
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
60
-					'args'                => $this->get_collection_params(),
61
-				),
62
-				'schema' => array( $this, 'get_public_item_schema' ),
63
-			)
64
-		);
65
-
66
-	}
67
-
68
-	/**
69
-	 * Makes sure the current user has access to READ the report APIs.
70
-	 *
71
-	 * @since  2.0.0
72
-	 * @param WP_REST_Request $request Full data about the request.
73
-	 * @return WP_Error|boolean
74
-	 */
75
-	public function get_items_permissions_check( $request ) {
76
-
77
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
78
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
79
-		}
80
-
81
-		return true;
82
-	}
83
-
84
-	/**
85
-	 * Get sales reports.
86
-	 *
87
-	 * @param WP_REST_Request $request
88
-	 * @return array|WP_Error
89
-	 */
90
-	public function get_items( $request ) {
91
-		$data   = array();
92
-		$item   = $this->prepare_item_for_response( null, $request );
93
-		$data[] = $this->prepare_response_for_collection( $item );
94
-
95
-		return rest_ensure_response( $data );
96
-	}
97
-
98
-	/**
99
-	 * Prepare a report sales object for serialization.
100
-	 *
101
-	 * @param null $_
102
-	 * @param WP_REST_Request $request Request object.
103
-	 * @return WP_REST_Response $response Response data.
104
-	 */
105
-	public function prepare_item_for_response( $_, $request ) {
106
-
107
-		// Set report range.
108
-		$this->report_range = $this->get_date_range( $request );
109
-
110
-		$report_data     = $this->get_report_data();
111
-		$period_totals   = array();
112
-
113
-		// Setup period totals by ensuring each period in the interval has data.
114
-		$start_date      = strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS;
115
-
116
-		if ( 'month' === $this->groupby ) {
117
-			$start_date      = strtotime( date( 'Y-m-01', $start_date ) );
118
-		}
119
-
120
-		for ( $i = 0; $i < $this->interval; $i++ ) {
121
-
122
-			switch ( $this->groupby ) {
123
-				case 'day':
124
-					$time = date( 'Y-m-d', strtotime( "+{$i} DAY", $start_date ) );
125
-					break;
126
-				default:
127
-					$time = date( 'Y-m', strtotime( "+{$i} MONTH", $start_date ) );
128
-					break;
129
-			}
130
-
131
-			// Set the defaults for each period.
132
-			$period_totals[ $time ] = array(
133
-				'invoices'          => 0,
134
-				'items'             => 0,
135
-				'refunded_items'    => 0,
136
-				'refunded_tax'      => wpinv_round_amount( 0.00 ),
137
-				'subtotal'          => wpinv_round_amount( 0.00 ),
138
-				'refunded_subtotal' => wpinv_round_amount( 0.00 ),
139
-				'refunded_fees'     => wpinv_round_amount( 0.00 ),
140
-				'discount'          => wpinv_round_amount( 0.00 ),
141
-			);
142
-
143
-			foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
144
-				if ( ! isset( $period_totals[ $time ][ $key ] ) ) {
145
-					$period_totals[ $time ][ $key ] = wpinv_round_amount( 0.00 );
146
-				}
147
-			}
21
+    /**
22
+     * Route base.
23
+     *
24
+     * @var string
25
+     */
26
+    protected $rest_base = 'reports/sales';
27
+
28
+    /**
29
+     * The report data.
30
+     *
31
+     * @var stdClass
32
+     */
33
+    public $report_data;
34
+
35
+    /**
36
+     * The report range.
37
+     *
38
+     * @var array
39
+     */
40
+    public $report_range;
41
+
42
+    /**
43
+     * Registers the routes for the objects of the controller.
44
+     *
45
+     * @since 2.0.0
46
+     *
47
+     * @see register_rest_route()
48
+     */
49
+    public function register_namespace_routes( $namespace ) {
50
+
51
+        // Get sales report.
52
+        register_rest_route(
53
+            $namespace,
54
+            $this->rest_base,
55
+            array(
56
+                array(
57
+                    'methods'             => WP_REST_Server::READABLE,
58
+                    'callback'            => array( $this, 'get_items' ),
59
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
60
+                    'args'                => $this->get_collection_params(),
61
+                ),
62
+                'schema' => array( $this, 'get_public_item_schema' ),
63
+            )
64
+        );
65
+
66
+    }
67
+
68
+    /**
69
+     * Makes sure the current user has access to READ the report APIs.
70
+     *
71
+     * @since  2.0.0
72
+     * @param WP_REST_Request $request Full data about the request.
73
+     * @return WP_Error|boolean
74
+     */
75
+    public function get_items_permissions_check( $request ) {
76
+
77
+        if ( ! wpinv_current_user_can_manage_invoicing() ) {
78
+            return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
79
+        }
80
+
81
+        return true;
82
+    }
83
+
84
+    /**
85
+     * Get sales reports.
86
+     *
87
+     * @param WP_REST_Request $request
88
+     * @return array|WP_Error
89
+     */
90
+    public function get_items( $request ) {
91
+        $data   = array();
92
+        $item   = $this->prepare_item_for_response( null, $request );
93
+        $data[] = $this->prepare_response_for_collection( $item );
94
+
95
+        return rest_ensure_response( $data );
96
+    }
97
+
98
+    /**
99
+     * Prepare a report sales object for serialization.
100
+     *
101
+     * @param null $_
102
+     * @param WP_REST_Request $request Request object.
103
+     * @return WP_REST_Response $response Response data.
104
+     */
105
+    public function prepare_item_for_response( $_, $request ) {
106
+
107
+        // Set report range.
108
+        $this->report_range = $this->get_date_range( $request );
109
+
110
+        $report_data     = $this->get_report_data();
111
+        $period_totals   = array();
112
+
113
+        // Setup period totals by ensuring each period in the interval has data.
114
+        $start_date      = strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS;
115
+
116
+        if ( 'month' === $this->groupby ) {
117
+            $start_date      = strtotime( date( 'Y-m-01', $start_date ) );
118
+        }
119
+
120
+        for ( $i = 0; $i < $this->interval; $i++ ) {
121
+
122
+            switch ( $this->groupby ) {
123
+                case 'day':
124
+                    $time = date( 'Y-m-d', strtotime( "+{$i} DAY", $start_date ) );
125
+                    break;
126
+                default:
127
+                    $time = date( 'Y-m', strtotime( "+{$i} MONTH", $start_date ) );
128
+                    break;
129
+            }
130
+
131
+            // Set the defaults for each period.
132
+            $period_totals[ $time ] = array(
133
+                'invoices'          => 0,
134
+                'items'             => 0,
135
+                'refunded_items'    => 0,
136
+                'refunded_tax'      => wpinv_round_amount( 0.00 ),
137
+                'subtotal'          => wpinv_round_amount( 0.00 ),
138
+                'refunded_subtotal' => wpinv_round_amount( 0.00 ),
139
+                'refunded_fees'     => wpinv_round_amount( 0.00 ),
140
+                'discount'          => wpinv_round_amount( 0.00 ),
141
+            );
142
+
143
+            foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
144
+                if ( ! isset( $period_totals[ $time ][ $key ] ) ) {
145
+                    $period_totals[ $time ][ $key ] = wpinv_round_amount( 0.00 );
146
+                }
147
+            }
148 148
 }
149 149
 
150
-		// add total sales, total invoice count, total tax for each period
151
-		$date_format = ( 'day' === $this->groupby ) ? 'Y-m-d' : 'Y-m';
152
-		foreach ( $report_data->invoices as $invoice ) {
153
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
150
+        // add total sales, total invoice count, total tax for each period
151
+        $date_format = ( 'day' === $this->groupby ) ? 'Y-m-d' : 'Y-m';
152
+        foreach ( $report_data->invoices as $invoice ) {
153
+            $time = date( $date_format, strtotime( $invoice->post_date ) );
154 154
 
155
-			if ( ! isset( $period_totals[ $time ] ) ) {
156
-				continue;
157
-			}
155
+            if ( ! isset( $period_totals[ $time ] ) ) {
156
+                continue;
157
+            }
158 158
 
159
-			$period_totals[ $time ]['sales']    = wpinv_round_amount( $invoice->total_sales );
160
-			$period_totals[ $time ]['tax']      = wpinv_round_amount( $invoice->total_tax );
161
-			$period_totals[ $time ]['subtotal'] = wpinv_round_amount( $invoice->subtotal );
162
-			$period_totals[ $time ]['fees']     = wpinv_round_amount( $invoice->total_fees );
159
+            $period_totals[ $time ]['sales']    = wpinv_round_amount( $invoice->total_sales );
160
+            $period_totals[ $time ]['tax']      = wpinv_round_amount( $invoice->total_tax );
161
+            $period_totals[ $time ]['subtotal'] = wpinv_round_amount( $invoice->subtotal );
162
+            $period_totals[ $time ]['fees']     = wpinv_round_amount( $invoice->total_fees );
163 163
 
164
-		}
164
+        }
165 165
 
166
-		foreach ( $report_data->refunds as $invoice ) {
167
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
166
+        foreach ( $report_data->refunds as $invoice ) {
167
+            $time = date( $date_format, strtotime( $invoice->post_date ) );
168 168
 
169
-			if ( ! isset( $period_totals[ $time ] ) ) {
170
-				continue;
171
-			}
169
+            if ( ! isset( $period_totals[ $time ] ) ) {
170
+                continue;
171
+            }
172 172
 
173
-			$period_totals[ $time ]['refunds']           = wpinv_round_amount( $invoice->total_sales );
174
-			$period_totals[ $time ]['refunded_tax']      = wpinv_round_amount( $invoice->total_tax );
175
-			$period_totals[ $time ]['refunded_subtotal'] = wpinv_round_amount( $invoice->subtotal );
176
-			$period_totals[ $time ]['refunded_fees']     = wpinv_round_amount( $invoice->total_fees );
173
+            $period_totals[ $time ]['refunds']           = wpinv_round_amount( $invoice->total_sales );
174
+            $period_totals[ $time ]['refunded_tax']      = wpinv_round_amount( $invoice->total_tax );
175
+            $period_totals[ $time ]['refunded_subtotal'] = wpinv_round_amount( $invoice->subtotal );
176
+            $period_totals[ $time ]['refunded_fees']     = wpinv_round_amount( $invoice->total_fees );
177 177
 
178
-		}
178
+        }
179 179
 
180
-		foreach ( $report_data->invoice_counts as $invoice ) {
181
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
180
+        foreach ( $report_data->invoice_counts as $invoice ) {
181
+            $time = date( $date_format, strtotime( $invoice->post_date ) );
182 182
 
183
-			if ( isset( $period_totals[ $time ] ) ) {
184
-				$period_totals[ $time ]['invoices']   = (int) $invoice->count;
185
-			}
183
+            if ( isset( $period_totals[ $time ] ) ) {
184
+                $period_totals[ $time ]['invoices']   = (int) $invoice->count;
185
+            }
186 186
 }
187 187
 
188
-		// Add total invoice items for each period.
189
-		foreach ( $report_data->invoice_items as $invoice_item ) {
190
-			$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $invoice_item->post_date ) ) : date( 'Y-m', strtotime( $invoice_item->post_date ) );
188
+        // Add total invoice items for each period.
189
+        foreach ( $report_data->invoice_items as $invoice_item ) {
190
+            $time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $invoice_item->post_date ) ) : date( 'Y-m', strtotime( $invoice_item->post_date ) );
191 191
 
192
-			if ( isset( $period_totals[ $time ] ) ) {
193
-				$period_totals[ $time ]['items'] = (int) $invoice_item->invoice_item_count;
194
-			}
192
+            if ( isset( $period_totals[ $time ] ) ) {
193
+                $period_totals[ $time ]['items'] = (int) $invoice_item->invoice_item_count;
194
+            }
195 195
 }
196 196
 
197
-		// Add total discount for each period.
198
-		foreach ( $report_data->coupons as $discount ) {
199
-			$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $discount->post_date ) ) : date( 'Y-m', strtotime( $discount->post_date ) );
197
+        // Add total discount for each period.
198
+        foreach ( $report_data->coupons as $discount ) {
199
+            $time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $discount->post_date ) ) : date( 'Y-m', strtotime( $discount->post_date ) );
200 200
 
201
-			if ( isset( $period_totals[ $time ] ) ) {
202
-				$period_totals[ $time ]['discount'] = wpinv_round_amount( $discount->discount_amount );
203
-			}
201
+            if ( isset( $period_totals[ $time ] ) ) {
202
+                $period_totals[ $time ]['discount'] = wpinv_round_amount( $discount->discount_amount );
203
+            }
204 204
 }
205 205
 
206
-		// Extra fields.
207
-		foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
208
-
209
-			// Abort unprepared.
210
-			if ( ! isset( $report_data->$key ) ) {
211
-				continue;
212
-			}
213
-
214
-			// Abort defaults.
215
-			if ( in_array( $key, array( 'sales', 'refunds', 'tax', 'fees', 'discount', 'invoices', 'items' ) ) ) {
216
-				continue;
217
-			}
218
-
219
-			// Set values.
220
-			foreach ( $report_data->$key as $item ) {
221
-				$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $item->date ) ) : date( 'Y-m', strtotime( $item->date ) );
222
-
223
-				if ( isset( $period_totals[ $time ] ) ) {
224
-					$period_totals[ $time ][ $key ] = wpinv_round_amount( $item->val );
225
-				}
226
-			}
227
-
228
-			unset( $report_data->$key );
229
-		}
230
-
231
-		$report_data->totals            = $period_totals;
232
-		$report_data->grouped_by        = $this->groupby;
233
-		$report_data->interval          = max( $this->interval, 1 );
234
-		$report_data->currency          = wpinv_get_currency();
235
-		$report_data->currency_symbol   = wpinv_currency_symbol();
236
-		$report_data->currency_position = wpinv_currency_position();
237
-		$report_data->decimal_places    = wpinv_decimals();
238
-		$report_data->thousands_sep     = wpinv_thousands_separator();
239
-		$report_data->decimals_sep      = wpinv_decimal_separator();
240
-		$report_data->start_date        = date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS );
241
-		$report_data->end_date          = date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS );
242
-		$report_data->start_date_locale = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS ) );
243
-		$report_data->end_date_locale   = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS ) );
244
-		$report_data->decimals_sep      = wpinv_decimal_separator();
245
-
246
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
247
-		$data    = $report_data;
248
-		unset( $data->invoice_counts, $data->invoices, $data->coupons, $data->refunds, $data->invoice_items );
249
-		$data    = $this->add_additional_fields_to_object( (array) $data, $request );
250
-		$data    = $this->filter_response_by_context( $data, $context );
251
-
252
-		// Wrap the data in a response object.
253
-		$response = rest_ensure_response( $data );
254
-		$response->add_links(
206
+        // Extra fields.
207
+        foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
208
+
209
+            // Abort unprepared.
210
+            if ( ! isset( $report_data->$key ) ) {
211
+                continue;
212
+            }
213
+
214
+            // Abort defaults.
215
+            if ( in_array( $key, array( 'sales', 'refunds', 'tax', 'fees', 'discount', 'invoices', 'items' ) ) ) {
216
+                continue;
217
+            }
218
+
219
+            // Set values.
220
+            foreach ( $report_data->$key as $item ) {
221
+                $time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $item->date ) ) : date( 'Y-m', strtotime( $item->date ) );
222
+
223
+                if ( isset( $period_totals[ $time ] ) ) {
224
+                    $period_totals[ $time ][ $key ] = wpinv_round_amount( $item->val );
225
+                }
226
+            }
227
+
228
+            unset( $report_data->$key );
229
+        }
230
+
231
+        $report_data->totals            = $period_totals;
232
+        $report_data->grouped_by        = $this->groupby;
233
+        $report_data->interval          = max( $this->interval, 1 );
234
+        $report_data->currency          = wpinv_get_currency();
235
+        $report_data->currency_symbol   = wpinv_currency_symbol();
236
+        $report_data->currency_position = wpinv_currency_position();
237
+        $report_data->decimal_places    = wpinv_decimals();
238
+        $report_data->thousands_sep     = wpinv_thousands_separator();
239
+        $report_data->decimals_sep      = wpinv_decimal_separator();
240
+        $report_data->start_date        = date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS );
241
+        $report_data->end_date          = date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS );
242
+        $report_data->start_date_locale = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS ) );
243
+        $report_data->end_date_locale   = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS ) );
244
+        $report_data->decimals_sep      = wpinv_decimal_separator();
245
+
246
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
247
+        $data    = $report_data;
248
+        unset( $data->invoice_counts, $data->invoices, $data->coupons, $data->refunds, $data->invoice_items );
249
+        $data    = $this->add_additional_fields_to_object( (array) $data, $request );
250
+        $data    = $this->filter_response_by_context( $data, $context );
251
+
252
+        // Wrap the data in a response object.
253
+        $response = rest_ensure_response( $data );
254
+        $response->add_links(
255
+            array(
256
+                'about' => array(
257
+                    'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
258
+                ),
259
+            )
260
+        );
261
+
262
+        return apply_filters( 'getpaid_rest_prepare_report_sales', $response, $report_data, $request );
263
+    }
264
+
265
+    /**
266
+     * Get report data.
267
+     *
268
+     * @return stdClass
269
+     */
270
+    public function get_report_data() {
271
+        if ( empty( $this->report_data ) ) {
272
+            $this->query_report_data();
273
+        }
274
+        return $this->report_data;
275
+    }
276
+
277
+    /**
278
+     * Get all data needed for this report and store in the class.
279
+     */
280
+    protected function query_report_data() {
281
+
282
+        // Prepare reports.
283
+        $this->report_data = (object) array(
284
+            'invoice_counts' => $this->query_invoice_counts(), //count, post_date
285
+            'coupons'        => $this->query_coupon_counts(), // discount_amount, post_date
286
+            'invoice_items'  => $this->query_item_counts(), // invoice_item_count, post_date
287
+            'refunded_items' => $this->count_refunded_items(), // invoice_item_count, post_date
288
+            'invoices'       => $this->query_invoice_totals(), // total_sales, total_tax, total_discount, total_fees, subtotal, post_date
289
+            'refunds'        => $this->query_refunded_totals(), // total_sales, total_tax, total_discount, total_fees, subtotal, post_date
290
+            'previous_range' => $this->previous_range,
291
+        );
292
+
293
+        // Calculated totals.
294
+        $this->report_data->total_tax          = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_tax' ) ) );
295
+        $this->report_data->total_sales        = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_sales' ) ) );
296
+        $this->report_data->total_discount     = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_discount' ) ) );
297
+        $this->report_data->total_fees         = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_fees' ) ) );
298
+        $this->report_data->subtotal           = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'subtotal' ) ) );
299
+        $this->report_data->net_sales          = wpinv_round_amount( $this->report_data->total_sales - max( 0, $this->report_data->total_tax ) );
300
+        $this->report_data->total_refunded_tax = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_tax' ) ) );
301
+        $this->report_data->total_refunds      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_sales' ) ) );
302
+        $this->report_data->refunded_discount  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_discount' ) ) );
303
+        $this->report_data->refunded_fees      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_fees' ) ) );
304
+        $this->report_data->refunded_subtotal  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'subtotal' ) ) );
305
+        $this->report_data->net_refunds        = wpinv_round_amount( $this->report_data->total_refunds + max( 0, $this->report_data->total_refunded_tax ) );
306
+
307
+        // Calculate average based on net.
308
+        $this->report_data->average_sales       = wpinv_round_amount( $this->report_data->net_sales / max( $this->interval, 1 ), 2 );
309
+        $this->report_data->average_total_sales = wpinv_round_amount( $this->report_data->total_sales / max( $this->interval, 1 ), 2 );
310
+
311
+        // Total invoices in this period, even if refunded.
312
+        $this->report_data->total_invoices = absint( array_sum( wp_list_pluck( $this->report_data->invoice_counts, 'count' ) ) );
313
+
314
+        // Items invoiced in this period, even if refunded.
315
+        $this->report_data->total_items = absint( array_sum( wp_list_pluck( $this->report_data->invoice_items, 'invoice_item_count' ) ) );
316
+
317
+        // 3rd party filtering of report data
318
+        $this->report_data = apply_filters( 'getpaid_rest_api_filter_report_data', $this->report_data, $this );
319
+    }
320
+
321
+    /**
322
+     * Prepares invoice counts.
323
+     *
324
+     * @return array.
325
+     */
326
+    protected function query_invoice_counts() {
327
+
328
+        return (array) GetPaid_Reports_Helper::get_invoice_report_data(
329
+            array(
330
+                'data'           => array(
331
+                    'ID'        => array(
332
+                        'type'     => 'post_data',
333
+                        'function' => 'COUNT',
334
+                        'name'     => 'count',
335
+                        'distinct' => true,
336
+                    ),
337
+                    'post_date' => array(
338
+                        'type'     => 'post_data',
339
+                        'function' => '',
340
+                        'name'     => 'post_date',
341
+                    ),
342
+                ),
343
+                'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
344
+                'order_by'       => 'post_date ASC',
345
+                'query_type'     => 'get_results',
346
+                'filter_range'   => $this->report_range,
347
+                'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
348
+            )
349
+        );
350
+
351
+    }
352
+
353
+    /**
354
+     * Prepares coupon counts.
355
+     *
356
+     * @return array.
357
+     */
358
+    protected function query_coupon_counts() {
359
+
360
+        return (array) GetPaid_Reports_Helper::get_invoice_report_data(
361
+            array(
362
+                'data'           => array(
363
+                    'discount'  => array(
364
+                        'type'     => 'invoice_data',
365
+                        'function' => 'SUM',
366
+                        'name'     => 'discount_amount',
367
+                    ),
368
+                    'post_date' => array(
369
+                        'type'     => 'post_data',
370
+                        'function' => '',
371
+                        'name'     => 'post_date',
372
+                    ),
373
+                ),
374
+                'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
375
+                'order_by'       => 'post_date ASC',
376
+                'query_type'     => 'get_results',
377
+                'filter_range'   => $this->report_range,
378
+                'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
379
+            )
380
+        );
381
+
382
+    }
383
+
384
+    /**
385
+     * Prepares item counts.
386
+     *
387
+     * @return array.
388
+     */
389
+    protected function query_item_counts() {
390
+
391
+        return (array) GetPaid_Reports_Helper::get_invoice_report_data(
255 392
             array(
256
-				'about' => array(
257
-					'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
258
-				),
393
+                'data'           => array(
394
+                    'quantity'  => array(
395
+                        'type'     => 'invoice_item',
396
+                        'function' => 'SUM',
397
+                        'name'     => 'invoice_item_count',
398
+                    ),
399
+                    'post_date' => array(
400
+                        'type'     => 'post_data',
401
+                        'function' => '',
402
+                        'name'     => 'post_date',
403
+                    ),
404
+                ),
405
+                'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
406
+                'order_by'       => 'post_date ASC',
407
+                'query_type'     => 'get_results',
408
+                'filter_range'   => $this->report_range,
409
+                'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
259 410
             )
260 411
         );
261 412
 
262
-		return apply_filters( 'getpaid_rest_prepare_report_sales', $response, $report_data, $request );
263
-	}
264
-
265
-	/**
266
-	 * Get report data.
267
-	 *
268
-	 * @return stdClass
269
-	 */
270
-	public function get_report_data() {
271
-		if ( empty( $this->report_data ) ) {
272
-			$this->query_report_data();
273
-		}
274
-		return $this->report_data;
275
-	}
276
-
277
-	/**
278
-	 * Get all data needed for this report and store in the class.
279
-	 */
280
-	protected function query_report_data() {
281
-
282
-		// Prepare reports.
283
-		$this->report_data = (object) array(
284
-			'invoice_counts' => $this->query_invoice_counts(), //count, post_date
285
-			'coupons'        => $this->query_coupon_counts(), // discount_amount, post_date
286
-			'invoice_items'  => $this->query_item_counts(), // invoice_item_count, post_date
287
-			'refunded_items' => $this->count_refunded_items(), // invoice_item_count, post_date
288
-			'invoices'       => $this->query_invoice_totals(), // total_sales, total_tax, total_discount, total_fees, subtotal, post_date
289
-			'refunds'        => $this->query_refunded_totals(), // total_sales, total_tax, total_discount, total_fees, subtotal, post_date
290
-			'previous_range' => $this->previous_range,
291
-		);
292
-
293
-		// Calculated totals.
294
-		$this->report_data->total_tax          = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_tax' ) ) );
295
-		$this->report_data->total_sales        = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_sales' ) ) );
296
-		$this->report_data->total_discount     = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_discount' ) ) );
297
-		$this->report_data->total_fees         = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_fees' ) ) );
298
-		$this->report_data->subtotal           = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'subtotal' ) ) );
299
-		$this->report_data->net_sales          = wpinv_round_amount( $this->report_data->total_sales - max( 0, $this->report_data->total_tax ) );
300
-		$this->report_data->total_refunded_tax = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_tax' ) ) );
301
-		$this->report_data->total_refunds      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_sales' ) ) );
302
-		$this->report_data->refunded_discount  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_discount' ) ) );
303
-		$this->report_data->refunded_fees      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_fees' ) ) );
304
-		$this->report_data->refunded_subtotal  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'subtotal' ) ) );
305
-		$this->report_data->net_refunds        = wpinv_round_amount( $this->report_data->total_refunds + max( 0, $this->report_data->total_refunded_tax ) );
306
-
307
-		// Calculate average based on net.
308
-		$this->report_data->average_sales       = wpinv_round_amount( $this->report_data->net_sales / max( $this->interval, 1 ), 2 );
309
-		$this->report_data->average_total_sales = wpinv_round_amount( $this->report_data->total_sales / max( $this->interval, 1 ), 2 );
310
-
311
-		// Total invoices in this period, even if refunded.
312
-		$this->report_data->total_invoices = absint( array_sum( wp_list_pluck( $this->report_data->invoice_counts, 'count' ) ) );
313
-
314
-		// Items invoiced in this period, even if refunded.
315
-		$this->report_data->total_items = absint( array_sum( wp_list_pluck( $this->report_data->invoice_items, 'invoice_item_count' ) ) );
316
-
317
-		// 3rd party filtering of report data
318
-		$this->report_data = apply_filters( 'getpaid_rest_api_filter_report_data', $this->report_data, $this );
319
-	}
320
-
321
-	/**
322
-	 * Prepares invoice counts.
323
-	 *
324
-	 * @return array.
325
-	 */
326
-	protected function query_invoice_counts() {
327
-
328
-		return (array) GetPaid_Reports_Helper::get_invoice_report_data(
329
-			array(
330
-				'data'           => array(
331
-					'ID'        => array(
332
-						'type'     => 'post_data',
333
-						'function' => 'COUNT',
334
-						'name'     => 'count',
335
-						'distinct' => true,
336
-					),
337
-					'post_date' => array(
338
-						'type'     => 'post_data',
339
-						'function' => '',
340
-						'name'     => 'post_date',
341
-					),
342
-				),
343
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
344
-				'order_by'       => 'post_date ASC',
345
-				'query_type'     => 'get_results',
346
-				'filter_range'   => $this->report_range,
347
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
348
-			)
349
-		);
350
-
351
-	}
352
-
353
-	/**
354
-	 * Prepares coupon counts.
355
-	 *
356
-	 * @return array.
357
-	 */
358
-	protected function query_coupon_counts() {
359
-
360
-		return (array) GetPaid_Reports_Helper::get_invoice_report_data(
361
-			array(
362
-				'data'           => array(
363
-					'discount'  => array(
364
-						'type'     => 'invoice_data',
365
-						'function' => 'SUM',
366
-						'name'     => 'discount_amount',
367
-					),
368
-					'post_date' => array(
369
-						'type'     => 'post_data',
370
-						'function' => '',
371
-						'name'     => 'post_date',
372
-					),
373
-				),
374
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
375
-				'order_by'       => 'post_date ASC',
376
-				'query_type'     => 'get_results',
377
-				'filter_range'   => $this->report_range,
378
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
379
-			)
380
-		);
381
-
382
-	}
383
-
384
-	/**
385
-	 * Prepares item counts.
386
-	 *
387
-	 * @return array.
388
-	 */
389
-	protected function query_item_counts() {
390
-
391
-		return (array) GetPaid_Reports_Helper::get_invoice_report_data(
392
-			array(
393
-				'data'           => array(
394
-					'quantity'  => array(
395
-						'type'     => 'invoice_item',
396
-						'function' => 'SUM',
397
-						'name'     => 'invoice_item_count',
398
-					),
399
-					'post_date' => array(
400
-						'type'     => 'post_data',
401
-						'function' => '',
402
-						'name'     => 'post_date',
403
-					),
404
-				),
405
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
406
-				'order_by'       => 'post_date ASC',
407
-				'query_type'     => 'get_results',
408
-				'filter_range'   => $this->report_range,
409
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
410
-			)
411
-		);
412
-
413
-	}
414
-
415
-	/**
416
-	 * Prepares refunded item counts.
417
-	 *
418
-	 * @return array.
419
-	 */
420
-	protected function count_refunded_items() {
421
-
422
-		return (int) GetPaid_Reports_Helper::get_invoice_report_data(
423
-			array(
424
-				'data'           => array(
425
-					'quantity' => array(
426
-						'type'     => 'invoice_item',
427
-						'function' => 'SUM',
428
-						'name'     => 'invoice_item_count',
429
-					),
430
-				),
431
-				'query_type'     => 'get_var',
432
-				'filter_range'   => $this->report_range,
433
-				'invoice_status' => array( 'wpi-refunded' ),
434
-			)
435
-		);
436
-
437
-	}
438
-
439
-	/**
440
-	 * Prepares daily invoice totals.
441
-	 *
442
-	 * @return array.
443
-	 */
444
-	protected function query_invoice_totals() {
445
-
446
-		return (array) GetPaid_Reports_Helper::get_invoice_report_data(
447
-			array(
448
-				'data'           => array(
449
-					'total'      => array(
450
-						'type'     => 'invoice_data',
451
-						'function' => 'SUM',
452
-						'name'     => 'total_sales',
453
-					),
454
-					'tax'        => array(
455
-						'type'     => 'invoice_data',
456
-						'function' => 'SUM',
457
-						'name'     => 'total_tax',
458
-					),
459
-					'discount'   => array(
460
-						'type'     => 'invoice_data',
461
-						'function' => 'SUM',
462
-						'name'     => 'total_discount',
463
-					),
464
-					'fees_total' => array(
465
-						'type'     => 'invoice_data',
466
-						'function' => 'SUM',
467
-						'name'     => 'total_fees',
468
-					),
469
-					'subtotal'   => array(
470
-						'type'     => 'invoice_data',
471
-						'function' => 'SUM',
472
-						'name'     => 'subtotal',
473
-					),
474
-					'post_date'  => array(
475
-						'type'     => 'post_data',
476
-						'function' => '',
477
-						'name'     => 'post_date',
478
-					),
479
-				),
480
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
481
-				'order_by'       => 'post_date ASC',
482
-				'query_type'     => 'get_results',
483
-				'filter_range'   => $this->report_range,
484
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-renewal' ),
485
-			)
486
-		);
487
-
488
-	}
489
-
490
-	/**
491
-	 * Prepares daily invoice totals.
492
-	 *
493
-	 * @return array.
494
-	 */
495
-	protected function query_refunded_totals() {
496
-
497
-		return (array) GetPaid_Reports_Helper::get_invoice_report_data(
498
-			array(
499
-				'data'           => array(
500
-					'total'      => array(
501
-						'type'     => 'invoice_data',
502
-						'function' => 'SUM',
503
-						'name'     => 'total_sales',
504
-					),
505
-					'tax'        => array(
506
-						'type'     => 'invoice_data',
507
-						'function' => 'SUM',
508
-						'name'     => 'total_tax',
509
-					),
510
-					'discount'   => array(
511
-						'type'     => 'invoice_data',
512
-						'function' => 'SUM',
513
-						'name'     => 'total_discount',
514
-					),
515
-					'fees_total' => array(
516
-						'type'     => 'invoice_data',
517
-						'function' => 'SUM',
518
-						'name'     => 'total_fees',
519
-					),
520
-					'subtotal'   => array(
521
-						'type'     => 'invoice_data',
522
-						'function' => 'SUM',
523
-						'name'     => 'subtotal',
524
-					),
525
-					'post_date'  => array(
526
-						'type'     => 'post_data',
527
-						'function' => '',
528
-						'name'     => 'post_date',
529
-					),
530
-				),
531
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
532
-				'order_by'       => 'post_date ASC',
533
-				'query_type'     => 'get_results',
534
-				'filter_range'   => $this->report_range,
535
-				'invoice_status' => array( 'wpi-refunded' ),
536
-			)
537
-		);
538
-
539
-	}
540
-
541
-	/**
542
-	 * Get the Report's schema, conforming to JSON Schema.
543
-	 *
544
-	 * @return array
545
-	 */
546
-	public function get_item_schema() {
547
-
548
-		$schema = array(
549
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
550
-			'title'      => 'sales_report',
551
-			'type'       => 'object',
552
-			'properties' => array(
553
-				'total_sales'         => array(
554
-					'description' => __( 'Gross sales in the period.', 'invoicing' ),
555
-					'type'        => 'string',
556
-					'context'     => array( 'view' ),
557
-					'readonly'    => true,
558
-				),
559
-				'net_sales'           => array(
560
-					'description' => __( 'Net sales in the period.', 'invoicing' ),
561
-					'type'        => 'string',
562
-					'context'     => array( 'view' ),
563
-					'readonly'    => true,
564
-				),
565
-				'average_sales'       => array(
566
-					'description' => __( 'Average net daily sales.', 'invoicing' ),
567
-					'type'        => 'string',
568
-					'context'     => array( 'view' ),
569
-					'readonly'    => true,
570
-				),
571
-				'average_total_sales' => array(
572
-					'description' => __( 'Average gross daily sales.', 'invoicing' ),
573
-					'type'        => 'string',
574
-					'context'     => array( 'view' ),
575
-					'readonly'    => true,
576
-				),
577
-				'total_invoices'      => array(
578
-					'description' => __( 'Number of paid invoices.', 'invoicing' ),
579
-					'type'        => 'integer',
580
-					'context'     => array( 'view' ),
581
-					'readonly'    => true,
582
-				),
583
-				'total_items'         => array(
584
-					'description' => __( 'Number of items purchased.', 'invoicing' ),
585
-					'type'        => 'integer',
586
-					'context'     => array( 'view' ),
587
-					'readonly'    => true,
588
-				),
589
-				'refunded_items'      => array(
590
-					'description' => __( 'Number of items refunded.', 'invoicing' ),
591
-					'type'        => 'integer',
592
-					'context'     => array( 'view' ),
593
-					'readonly'    => true,
594
-				),
595
-				'total_tax'           => array(
596
-					'description' => __( 'Total charged for taxes.', 'invoicing' ),
597
-					'type'        => 'string',
598
-					'context'     => array( 'view' ),
599
-					'readonly'    => true,
600
-				),
601
-				'total_refunded_tax'  => array(
602
-					'description' => __( 'Total refunded for taxes.', 'invoicing' ),
603
-					'type'        => 'string',
604
-					'context'     => array( 'view' ),
605
-					'readonly'    => true,
606
-				),
607
-				'total_fees'          => array(
608
-					'description' => __( 'Total fees charged.', 'invoicing' ),
609
-					'type'        => 'string',
610
-					'context'     => array( 'view' ),
611
-					'readonly'    => true,
612
-				),
613
-				'total_refunds'       => array(
614
-					'description' => __( 'Total of refunded invoices.', 'invoicing' ),
615
-					'type'        => 'integer',
616
-					'context'     => array( 'view' ),
617
-					'readonly'    => true,
618
-				),
619
-				'net_refunds'         => array(
620
-					'description' => __( 'Net of refunded invoices.', 'invoicing' ),
621
-					'type'        => 'integer',
622
-					'context'     => array( 'view' ),
623
-					'readonly'    => true,
624
-				),
625
-				'total_discount'      => array(
626
-					'description' => __( 'Total of discounts used.', 'invoicing' ),
627
-					'type'        => 'integer',
628
-					'context'     => array( 'view' ),
629
-					'readonly'    => true,
630
-				),
631
-				'totals'              => array(
632
-					'description' => __( 'Totals.', 'invoicing' ),
633
-					'type'        => 'array',
634
-					'items'       => array(
635
-						'type' => 'array',
636
-					),
637
-					'context'     => array( 'view' ),
638
-					'readonly'    => true,
639
-				),
640
-				'interval'            => array(
641
-					'description' => __( 'Number of months/days in the report period.', 'invoicing' ),
642
-					'type'        => 'integer',
643
-					'context'     => array( 'view' ),
644
-					'readonly'    => true,
645
-				),
646
-				'previous_range'      => array(
647
-					'description' => __( 'The previous report period.', 'invoicing' ),
648
-					'type'        => 'array',
649
-					'items'       => array(
650
-						'type' => 'string',
651
-					),
652
-					'context'     => array( 'view' ),
653
-					'readonly'    => true,
654
-				),
655
-				'grouped_by'          => array(
656
-					'description' => __( 'The period used to group the totals.', 'invoicing' ),
657
-					'type'        => 'string',
658
-					'context'     => array( 'view' ),
659
-					'enum'        => array( 'day', 'month' ),
660
-					'readonly'    => true,
661
-				),
662
-				'currency'            => array(
663
-					'description' => __( 'The default store currency.', 'invoicing' ),
664
-					'type'        => 'string',
665
-					'context'     => array( 'view' ),
666
-					'readonly'    => true,
667
-				),
668
-				'currency_symbol'     => array(
669
-					'description' => __( 'The default store currency symbol.', 'invoicing' ),
670
-					'type'        => 'string',
671
-					'context'     => array( 'view' ),
672
-					'readonly'    => true,
673
-				),
674
-				'currency_position'   => array(
675
-					'description' => __( 'The default store currency position.', 'invoicing' ),
676
-					'type'        => 'string',
677
-					'context'     => array( 'view' ),
678
-					'readonly'    => true,
679
-				),
680
-				'decimal_places'      => array(
681
-					'description' => __( 'The default store decimal places.', 'invoicing' ),
682
-					'type'        => 'string',
683
-					'context'     => array( 'view' ),
684
-					'readonly'    => true,
685
-				),
686
-				'thousands_sep'       => array(
687
-					'description' => __( 'The default store thousands separator.', 'invoicing' ),
688
-					'type'        => 'string',
689
-					'context'     => array( 'view' ),
690
-					'readonly'    => true,
691
-				),
692
-				'decimals_sep'        => array(
693
-					'description' => __( 'The default store decimals separator.', 'invoicing' ),
694
-					'type'        => 'string',
695
-					'context'     => array( 'view' ),
696
-					'readonly'    => true,
697
-				),
698
-			),
699
-		);
700
-
701
-		return $this->add_additional_fields_schema( $schema );
702
-
703
-	}
413
+    }
414
+
415
+    /**
416
+     * Prepares refunded item counts.
417
+     *
418
+     * @return array.
419
+     */
420
+    protected function count_refunded_items() {
421
+
422
+        return (int) GetPaid_Reports_Helper::get_invoice_report_data(
423
+            array(
424
+                'data'           => array(
425
+                    'quantity' => array(
426
+                        'type'     => 'invoice_item',
427
+                        'function' => 'SUM',
428
+                        'name'     => 'invoice_item_count',
429
+                    ),
430
+                ),
431
+                'query_type'     => 'get_var',
432
+                'filter_range'   => $this->report_range,
433
+                'invoice_status' => array( 'wpi-refunded' ),
434
+            )
435
+        );
436
+
437
+    }
438
+
439
+    /**
440
+     * Prepares daily invoice totals.
441
+     *
442
+     * @return array.
443
+     */
444
+    protected function query_invoice_totals() {
445
+
446
+        return (array) GetPaid_Reports_Helper::get_invoice_report_data(
447
+            array(
448
+                'data'           => array(
449
+                    'total'      => array(
450
+                        'type'     => 'invoice_data',
451
+                        'function' => 'SUM',
452
+                        'name'     => 'total_sales',
453
+                    ),
454
+                    'tax'        => array(
455
+                        'type'     => 'invoice_data',
456
+                        'function' => 'SUM',
457
+                        'name'     => 'total_tax',
458
+                    ),
459
+                    'discount'   => array(
460
+                        'type'     => 'invoice_data',
461
+                        'function' => 'SUM',
462
+                        'name'     => 'total_discount',
463
+                    ),
464
+                    'fees_total' => array(
465
+                        'type'     => 'invoice_data',
466
+                        'function' => 'SUM',
467
+                        'name'     => 'total_fees',
468
+                    ),
469
+                    'subtotal'   => array(
470
+                        'type'     => 'invoice_data',
471
+                        'function' => 'SUM',
472
+                        'name'     => 'subtotal',
473
+                    ),
474
+                    'post_date'  => array(
475
+                        'type'     => 'post_data',
476
+                        'function' => '',
477
+                        'name'     => 'post_date',
478
+                    ),
479
+                ),
480
+                'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
481
+                'order_by'       => 'post_date ASC',
482
+                'query_type'     => 'get_results',
483
+                'filter_range'   => $this->report_range,
484
+                'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-renewal' ),
485
+            )
486
+        );
487
+
488
+    }
489
+
490
+    /**
491
+     * Prepares daily invoice totals.
492
+     *
493
+     * @return array.
494
+     */
495
+    protected function query_refunded_totals() {
496
+
497
+        return (array) GetPaid_Reports_Helper::get_invoice_report_data(
498
+            array(
499
+                'data'           => array(
500
+                    'total'      => array(
501
+                        'type'     => 'invoice_data',
502
+                        'function' => 'SUM',
503
+                        'name'     => 'total_sales',
504
+                    ),
505
+                    'tax'        => array(
506
+                        'type'     => 'invoice_data',
507
+                        'function' => 'SUM',
508
+                        'name'     => 'total_tax',
509
+                    ),
510
+                    'discount'   => array(
511
+                        'type'     => 'invoice_data',
512
+                        'function' => 'SUM',
513
+                        'name'     => 'total_discount',
514
+                    ),
515
+                    'fees_total' => array(
516
+                        'type'     => 'invoice_data',
517
+                        'function' => 'SUM',
518
+                        'name'     => 'total_fees',
519
+                    ),
520
+                    'subtotal'   => array(
521
+                        'type'     => 'invoice_data',
522
+                        'function' => 'SUM',
523
+                        'name'     => 'subtotal',
524
+                    ),
525
+                    'post_date'  => array(
526
+                        'type'     => 'post_data',
527
+                        'function' => '',
528
+                        'name'     => 'post_date',
529
+                    ),
530
+                ),
531
+                'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
532
+                'order_by'       => 'post_date ASC',
533
+                'query_type'     => 'get_results',
534
+                'filter_range'   => $this->report_range,
535
+                'invoice_status' => array( 'wpi-refunded' ),
536
+            )
537
+        );
538
+
539
+    }
540
+
541
+    /**
542
+     * Get the Report's schema, conforming to JSON Schema.
543
+     *
544
+     * @return array
545
+     */
546
+    public function get_item_schema() {
547
+
548
+        $schema = array(
549
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
550
+            'title'      => 'sales_report',
551
+            'type'       => 'object',
552
+            'properties' => array(
553
+                'total_sales'         => array(
554
+                    'description' => __( 'Gross sales in the period.', 'invoicing' ),
555
+                    'type'        => 'string',
556
+                    'context'     => array( 'view' ),
557
+                    'readonly'    => true,
558
+                ),
559
+                'net_sales'           => array(
560
+                    'description' => __( 'Net sales in the period.', 'invoicing' ),
561
+                    'type'        => 'string',
562
+                    'context'     => array( 'view' ),
563
+                    'readonly'    => true,
564
+                ),
565
+                'average_sales'       => array(
566
+                    'description' => __( 'Average net daily sales.', 'invoicing' ),
567
+                    'type'        => 'string',
568
+                    'context'     => array( 'view' ),
569
+                    'readonly'    => true,
570
+                ),
571
+                'average_total_sales' => array(
572
+                    'description' => __( 'Average gross daily sales.', 'invoicing' ),
573
+                    'type'        => 'string',
574
+                    'context'     => array( 'view' ),
575
+                    'readonly'    => true,
576
+                ),
577
+                'total_invoices'      => array(
578
+                    'description' => __( 'Number of paid invoices.', 'invoicing' ),
579
+                    'type'        => 'integer',
580
+                    'context'     => array( 'view' ),
581
+                    'readonly'    => true,
582
+                ),
583
+                'total_items'         => array(
584
+                    'description' => __( 'Number of items purchased.', 'invoicing' ),
585
+                    'type'        => 'integer',
586
+                    'context'     => array( 'view' ),
587
+                    'readonly'    => true,
588
+                ),
589
+                'refunded_items'      => array(
590
+                    'description' => __( 'Number of items refunded.', 'invoicing' ),
591
+                    'type'        => 'integer',
592
+                    'context'     => array( 'view' ),
593
+                    'readonly'    => true,
594
+                ),
595
+                'total_tax'           => array(
596
+                    'description' => __( 'Total charged for taxes.', 'invoicing' ),
597
+                    'type'        => 'string',
598
+                    'context'     => array( 'view' ),
599
+                    'readonly'    => true,
600
+                ),
601
+                'total_refunded_tax'  => array(
602
+                    'description' => __( 'Total refunded for taxes.', 'invoicing' ),
603
+                    'type'        => 'string',
604
+                    'context'     => array( 'view' ),
605
+                    'readonly'    => true,
606
+                ),
607
+                'total_fees'          => array(
608
+                    'description' => __( 'Total fees charged.', 'invoicing' ),
609
+                    'type'        => 'string',
610
+                    'context'     => array( 'view' ),
611
+                    'readonly'    => true,
612
+                ),
613
+                'total_refunds'       => array(
614
+                    'description' => __( 'Total of refunded invoices.', 'invoicing' ),
615
+                    'type'        => 'integer',
616
+                    'context'     => array( 'view' ),
617
+                    'readonly'    => true,
618
+                ),
619
+                'net_refunds'         => array(
620
+                    'description' => __( 'Net of refunded invoices.', 'invoicing' ),
621
+                    'type'        => 'integer',
622
+                    'context'     => array( 'view' ),
623
+                    'readonly'    => true,
624
+                ),
625
+                'total_discount'      => array(
626
+                    'description' => __( 'Total of discounts used.', 'invoicing' ),
627
+                    'type'        => 'integer',
628
+                    'context'     => array( 'view' ),
629
+                    'readonly'    => true,
630
+                ),
631
+                'totals'              => array(
632
+                    'description' => __( 'Totals.', 'invoicing' ),
633
+                    'type'        => 'array',
634
+                    'items'       => array(
635
+                        'type' => 'array',
636
+                    ),
637
+                    'context'     => array( 'view' ),
638
+                    'readonly'    => true,
639
+                ),
640
+                'interval'            => array(
641
+                    'description' => __( 'Number of months/days in the report period.', 'invoicing' ),
642
+                    'type'        => 'integer',
643
+                    'context'     => array( 'view' ),
644
+                    'readonly'    => true,
645
+                ),
646
+                'previous_range'      => array(
647
+                    'description' => __( 'The previous report period.', 'invoicing' ),
648
+                    'type'        => 'array',
649
+                    'items'       => array(
650
+                        'type' => 'string',
651
+                    ),
652
+                    'context'     => array( 'view' ),
653
+                    'readonly'    => true,
654
+                ),
655
+                'grouped_by'          => array(
656
+                    'description' => __( 'The period used to group the totals.', 'invoicing' ),
657
+                    'type'        => 'string',
658
+                    'context'     => array( 'view' ),
659
+                    'enum'        => array( 'day', 'month' ),
660
+                    'readonly'    => true,
661
+                ),
662
+                'currency'            => array(
663
+                    'description' => __( 'The default store currency.', 'invoicing' ),
664
+                    'type'        => 'string',
665
+                    'context'     => array( 'view' ),
666
+                    'readonly'    => true,
667
+                ),
668
+                'currency_symbol'     => array(
669
+                    'description' => __( 'The default store currency symbol.', 'invoicing' ),
670
+                    'type'        => 'string',
671
+                    'context'     => array( 'view' ),
672
+                    'readonly'    => true,
673
+                ),
674
+                'currency_position'   => array(
675
+                    'description' => __( 'The default store currency position.', 'invoicing' ),
676
+                    'type'        => 'string',
677
+                    'context'     => array( 'view' ),
678
+                    'readonly'    => true,
679
+                ),
680
+                'decimal_places'      => array(
681
+                    'description' => __( 'The default store decimal places.', 'invoicing' ),
682
+                    'type'        => 'string',
683
+                    'context'     => array( 'view' ),
684
+                    'readonly'    => true,
685
+                ),
686
+                'thousands_sep'       => array(
687
+                    'description' => __( 'The default store thousands separator.', 'invoicing' ),
688
+                    'type'        => 'string',
689
+                    'context'     => array( 'view' ),
690
+                    'readonly'    => true,
691
+                ),
692
+                'decimals_sep'        => array(
693
+                    'description' => __( 'The default store decimals separator.', 'invoicing' ),
694
+                    'type'        => 'string',
695
+                    'context'     => array( 'view' ),
696
+                    'readonly'    => true,
697
+                ),
698
+            ),
699
+        );
700
+
701
+        return $this->add_additional_fields_schema( $schema );
702
+
703
+    }
704 704
 
705 705
 }
Please login to merge, or discard this patch.
Spacing   +154 added lines, -154 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  * @since   2.0.0
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 /**
15 15
  * GetPaid REST reports controller class.
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
 	 *
47 47
 	 * @see register_rest_route()
48 48
 	 */
49
-	public function register_namespace_routes( $namespace ) {
49
+	public function register_namespace_routes($namespace) {
50 50
 
51 51
 		// Get sales report.
52 52
 		register_rest_route(
@@ -55,11 +55,11 @@  discard block
 block discarded – undo
55 55
 			array(
56 56
 				array(
57 57
 					'methods'             => WP_REST_Server::READABLE,
58
-					'callback'            => array( $this, 'get_items' ),
59
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
58
+					'callback'            => array($this, 'get_items'),
59
+					'permission_callback' => array($this, 'get_items_permissions_check'),
60 60
 					'args'                => $this->get_collection_params(),
61 61
 				),
62
-				'schema' => array( $this, 'get_public_item_schema' ),
62
+				'schema' => array($this, 'get_public_item_schema'),
63 63
 			)
64 64
 		);
65 65
 
@@ -72,10 +72,10 @@  discard block
 block discarded – undo
72 72
 	 * @param WP_REST_Request $request Full data about the request.
73 73
 	 * @return WP_Error|boolean
74 74
 	 */
75
-	public function get_items_permissions_check( $request ) {
75
+	public function get_items_permissions_check($request) {
76 76
 
77
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
78
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
77
+		if (!wpinv_current_user_can_manage_invoicing()) {
78
+			return new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
79 79
 		}
80 80
 
81 81
 		return true;
@@ -87,12 +87,12 @@  discard block
 block discarded – undo
87 87
 	 * @param WP_REST_Request $request
88 88
 	 * @return array|WP_Error
89 89
 	 */
90
-	public function get_items( $request ) {
90
+	public function get_items($request) {
91 91
 		$data   = array();
92
-		$item   = $this->prepare_item_for_response( null, $request );
93
-		$data[] = $this->prepare_response_for_collection( $item );
92
+		$item   = $this->prepare_item_for_response(null, $request);
93
+		$data[] = $this->prepare_response_for_collection($item);
94 94
 
95
-		return rest_ensure_response( $data );
95
+		return rest_ensure_response($data);
96 96
 	}
97 97
 
98 98
 	/**
@@ -102,164 +102,164 @@  discard block
 block discarded – undo
102 102
 	 * @param WP_REST_Request $request Request object.
103 103
 	 * @return WP_REST_Response $response Response data.
104 104
 	 */
105
-	public function prepare_item_for_response( $_, $request ) {
105
+	public function prepare_item_for_response($_, $request) {
106 106
 
107 107
 		// Set report range.
108
-		$this->report_range = $this->get_date_range( $request );
108
+		$this->report_range = $this->get_date_range($request);
109 109
 
110 110
 		$report_data     = $this->get_report_data();
111 111
 		$period_totals   = array();
112 112
 
113 113
 		// Setup period totals by ensuring each period in the interval has data.
114
-		$start_date      = strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS;
114
+		$start_date      = strtotime($this->report_range['after']) + DAY_IN_SECONDS;
115 115
 
116
-		if ( 'month' === $this->groupby ) {
117
-			$start_date      = strtotime( date( 'Y-m-01', $start_date ) );
116
+		if ('month' === $this->groupby) {
117
+			$start_date = strtotime(date('Y-m-01', $start_date));
118 118
 		}
119 119
 
120
-		for ( $i = 0; $i < $this->interval; $i++ ) {
120
+		for ($i = 0; $i < $this->interval; $i++) {
121 121
 
122
-			switch ( $this->groupby ) {
122
+			switch ($this->groupby) {
123 123
 				case 'day':
124
-					$time = date( 'Y-m-d', strtotime( "+{$i} DAY", $start_date ) );
124
+					$time = date('Y-m-d', strtotime("+{$i} DAY", $start_date));
125 125
 					break;
126 126
 				default:
127
-					$time = date( 'Y-m', strtotime( "+{$i} MONTH", $start_date ) );
127
+					$time = date('Y-m', strtotime("+{$i} MONTH", $start_date));
128 128
 					break;
129 129
 			}
130 130
 
131 131
 			// Set the defaults for each period.
132
-			$period_totals[ $time ] = array(
132
+			$period_totals[$time] = array(
133 133
 				'invoices'          => 0,
134 134
 				'items'             => 0,
135 135
 				'refunded_items'    => 0,
136
-				'refunded_tax'      => wpinv_round_amount( 0.00 ),
137
-				'subtotal'          => wpinv_round_amount( 0.00 ),
138
-				'refunded_subtotal' => wpinv_round_amount( 0.00 ),
139
-				'refunded_fees'     => wpinv_round_amount( 0.00 ),
140
-				'discount'          => wpinv_round_amount( 0.00 ),
136
+				'refunded_tax'      => wpinv_round_amount(0.00),
137
+				'subtotal'          => wpinv_round_amount(0.00),
138
+				'refunded_subtotal' => wpinv_round_amount(0.00),
139
+				'refunded_fees'     => wpinv_round_amount(0.00),
140
+				'discount'          => wpinv_round_amount(0.00),
141 141
 			);
142 142
 
143
-			foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
144
-				if ( ! isset( $period_totals[ $time ][ $key ] ) ) {
145
-					$period_totals[ $time ][ $key ] = wpinv_round_amount( 0.00 );
143
+			foreach (array_keys(wpinv_get_report_graphs()) as $key) {
144
+				if (!isset($period_totals[$time][$key])) {
145
+					$period_totals[$time][$key] = wpinv_round_amount(0.00);
146 146
 				}
147 147
 			}
148 148
 }
149 149
 
150 150
 		// add total sales, total invoice count, total tax for each period
151
-		$date_format = ( 'day' === $this->groupby ) ? 'Y-m-d' : 'Y-m';
152
-		foreach ( $report_data->invoices as $invoice ) {
153
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
151
+		$date_format = ('day' === $this->groupby) ? 'Y-m-d' : 'Y-m';
152
+		foreach ($report_data->invoices as $invoice) {
153
+			$time = date($date_format, strtotime($invoice->post_date));
154 154
 
155
-			if ( ! isset( $period_totals[ $time ] ) ) {
155
+			if (!isset($period_totals[$time])) {
156 156
 				continue;
157 157
 			}
158 158
 
159
-			$period_totals[ $time ]['sales']    = wpinv_round_amount( $invoice->total_sales );
160
-			$period_totals[ $time ]['tax']      = wpinv_round_amount( $invoice->total_tax );
161
-			$period_totals[ $time ]['subtotal'] = wpinv_round_amount( $invoice->subtotal );
162
-			$period_totals[ $time ]['fees']     = wpinv_round_amount( $invoice->total_fees );
159
+			$period_totals[$time]['sales']    = wpinv_round_amount($invoice->total_sales);
160
+			$period_totals[$time]['tax']      = wpinv_round_amount($invoice->total_tax);
161
+			$period_totals[$time]['subtotal'] = wpinv_round_amount($invoice->subtotal);
162
+			$period_totals[$time]['fees']     = wpinv_round_amount($invoice->total_fees);
163 163
 
164 164
 		}
165 165
 
166
-		foreach ( $report_data->refunds as $invoice ) {
167
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
166
+		foreach ($report_data->refunds as $invoice) {
167
+			$time = date($date_format, strtotime($invoice->post_date));
168 168
 
169
-			if ( ! isset( $period_totals[ $time ] ) ) {
169
+			if (!isset($period_totals[$time])) {
170 170
 				continue;
171 171
 			}
172 172
 
173
-			$period_totals[ $time ]['refunds']           = wpinv_round_amount( $invoice->total_sales );
174
-			$period_totals[ $time ]['refunded_tax']      = wpinv_round_amount( $invoice->total_tax );
175
-			$period_totals[ $time ]['refunded_subtotal'] = wpinv_round_amount( $invoice->subtotal );
176
-			$period_totals[ $time ]['refunded_fees']     = wpinv_round_amount( $invoice->total_fees );
173
+			$period_totals[$time]['refunds']           = wpinv_round_amount($invoice->total_sales);
174
+			$period_totals[$time]['refunded_tax']      = wpinv_round_amount($invoice->total_tax);
175
+			$period_totals[$time]['refunded_subtotal'] = wpinv_round_amount($invoice->subtotal);
176
+			$period_totals[$time]['refunded_fees']     = wpinv_round_amount($invoice->total_fees);
177 177
 
178 178
 		}
179 179
 
180
-		foreach ( $report_data->invoice_counts as $invoice ) {
181
-			$time = date( $date_format, strtotime( $invoice->post_date ) );
180
+		foreach ($report_data->invoice_counts as $invoice) {
181
+			$time = date($date_format, strtotime($invoice->post_date));
182 182
 
183
-			if ( isset( $period_totals[ $time ] ) ) {
184
-				$period_totals[ $time ]['invoices']   = (int) $invoice->count;
183
+			if (isset($period_totals[$time])) {
184
+				$period_totals[$time]['invoices'] = (int) $invoice->count;
185 185
 			}
186 186
 }
187 187
 
188 188
 		// Add total invoice items for each period.
189
-		foreach ( $report_data->invoice_items as $invoice_item ) {
190
-			$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $invoice_item->post_date ) ) : date( 'Y-m', strtotime( $invoice_item->post_date ) );
189
+		foreach ($report_data->invoice_items as $invoice_item) {
190
+			$time = ('day' === $this->groupby) ? date('Y-m-d', strtotime($invoice_item->post_date)) : date('Y-m', strtotime($invoice_item->post_date));
191 191
 
192
-			if ( isset( $period_totals[ $time ] ) ) {
193
-				$period_totals[ $time ]['items'] = (int) $invoice_item->invoice_item_count;
192
+			if (isset($period_totals[$time])) {
193
+				$period_totals[$time]['items'] = (int) $invoice_item->invoice_item_count;
194 194
 			}
195 195
 }
196 196
 
197 197
 		// Add total discount for each period.
198
-		foreach ( $report_data->coupons as $discount ) {
199
-			$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $discount->post_date ) ) : date( 'Y-m', strtotime( $discount->post_date ) );
198
+		foreach ($report_data->coupons as $discount) {
199
+			$time = ('day' === $this->groupby) ? date('Y-m-d', strtotime($discount->post_date)) : date('Y-m', strtotime($discount->post_date));
200 200
 
201
-			if ( isset( $period_totals[ $time ] ) ) {
202
-				$period_totals[ $time ]['discount'] = wpinv_round_amount( $discount->discount_amount );
201
+			if (isset($period_totals[$time])) {
202
+				$period_totals[$time]['discount'] = wpinv_round_amount($discount->discount_amount);
203 203
 			}
204 204
 }
205 205
 
206 206
 		// Extra fields.
207
-		foreach ( array_keys( wpinv_get_report_graphs() ) as $key ) {
207
+		foreach (array_keys(wpinv_get_report_graphs()) as $key) {
208 208
 
209 209
 			// Abort unprepared.
210
-			if ( ! isset( $report_data->$key ) ) {
210
+			if (!isset($report_data->$key)) {
211 211
 				continue;
212 212
 			}
213 213
 
214 214
 			// Abort defaults.
215
-			if ( in_array( $key, array( 'sales', 'refunds', 'tax', 'fees', 'discount', 'invoices', 'items' ) ) ) {
215
+			if (in_array($key, array('sales', 'refunds', 'tax', 'fees', 'discount', 'invoices', 'items'))) {
216 216
 				continue;
217 217
 			}
218 218
 
219 219
 			// Set values.
220
-			foreach ( $report_data->$key as $item ) {
221
-				$time = ( 'day' === $this->groupby ) ? date( 'Y-m-d', strtotime( $item->date ) ) : date( 'Y-m', strtotime( $item->date ) );
220
+			foreach ($report_data->$key as $item) {
221
+				$time = ('day' === $this->groupby) ? date('Y-m-d', strtotime($item->date)) : date('Y-m', strtotime($item->date));
222 222
 
223
-				if ( isset( $period_totals[ $time ] ) ) {
224
-					$period_totals[ $time ][ $key ] = wpinv_round_amount( $item->val );
223
+				if (isset($period_totals[$time])) {
224
+					$period_totals[$time][$key] = wpinv_round_amount($item->val);
225 225
 				}
226 226
 			}
227 227
 
228
-			unset( $report_data->$key );
228
+			unset($report_data->$key);
229 229
 		}
230 230
 
231 231
 		$report_data->totals            = $period_totals;
232 232
 		$report_data->grouped_by        = $this->groupby;
233
-		$report_data->interval          = max( $this->interval, 1 );
233
+		$report_data->interval          = max($this->interval, 1);
234 234
 		$report_data->currency          = wpinv_get_currency();
235 235
 		$report_data->currency_symbol   = wpinv_currency_symbol();
236 236
 		$report_data->currency_position = wpinv_currency_position();
237 237
 		$report_data->decimal_places    = wpinv_decimals();
238 238
 		$report_data->thousands_sep     = wpinv_thousands_separator();
239 239
 		$report_data->decimals_sep      = wpinv_decimal_separator();
240
-		$report_data->start_date        = date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS );
241
-		$report_data->end_date          = date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS );
242
-		$report_data->start_date_locale = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['after'] ) + DAY_IN_SECONDS ) );
243
-		$report_data->end_date_locale   = getpaid_format_date( date( 'Y-m-d', strtotime( $this->report_range['before'] ) - DAY_IN_SECONDS ) );
240
+		$report_data->start_date        = date('Y-m-d', strtotime($this->report_range['after']) + DAY_IN_SECONDS);
241
+		$report_data->end_date          = date('Y-m-d', strtotime($this->report_range['before']) - DAY_IN_SECONDS);
242
+		$report_data->start_date_locale = getpaid_format_date(date('Y-m-d', strtotime($this->report_range['after']) + DAY_IN_SECONDS));
243
+		$report_data->end_date_locale   = getpaid_format_date(date('Y-m-d', strtotime($this->report_range['before']) - DAY_IN_SECONDS));
244 244
 		$report_data->decimals_sep      = wpinv_decimal_separator();
245 245
 
246
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
246
+		$context = !empty($request['context']) ? $request['context'] : 'view';
247 247
 		$data    = $report_data;
248
-		unset( $data->invoice_counts, $data->invoices, $data->coupons, $data->refunds, $data->invoice_items );
249
-		$data    = $this->add_additional_fields_to_object( (array) $data, $request );
250
-		$data    = $this->filter_response_by_context( $data, $context );
248
+		unset($data->invoice_counts, $data->invoices, $data->coupons, $data->refunds, $data->invoice_items);
249
+		$data    = $this->add_additional_fields_to_object((array) $data, $request);
250
+		$data    = $this->filter_response_by_context($data, $context);
251 251
 
252 252
 		// Wrap the data in a response object.
253
-		$response = rest_ensure_response( $data );
253
+		$response = rest_ensure_response($data);
254 254
 		$response->add_links(
255 255
             array(
256 256
 				'about' => array(
257
-					'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ),
257
+					'href' => rest_url(sprintf('%s/reports', $this->namespace)),
258 258
 				),
259 259
             )
260 260
         );
261 261
 
262
-		return apply_filters( 'getpaid_rest_prepare_report_sales', $response, $report_data, $request );
262
+		return apply_filters('getpaid_rest_prepare_report_sales', $response, $report_data, $request);
263 263
 	}
264 264
 
265 265
 	/**
@@ -268,7 +268,7 @@  discard block
 block discarded – undo
268 268
 	 * @return stdClass
269 269
 	 */
270 270
 	public function get_report_data() {
271
-		if ( empty( $this->report_data ) ) {
271
+		if (empty($this->report_data)) {
272 272
 			$this->query_report_data();
273 273
 		}
274 274
 		return $this->report_data;
@@ -291,31 +291,31 @@  discard block
 block discarded – undo
291 291
 		);
292 292
 
293 293
 		// Calculated totals.
294
-		$this->report_data->total_tax          = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_tax' ) ) );
295
-		$this->report_data->total_sales        = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_sales' ) ) );
296
-		$this->report_data->total_discount     = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_discount' ) ) );
297
-		$this->report_data->total_fees         = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'total_fees' ) ) );
298
-		$this->report_data->subtotal           = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->invoices, 'subtotal' ) ) );
299
-		$this->report_data->net_sales          = wpinv_round_amount( $this->report_data->total_sales - max( 0, $this->report_data->total_tax ) );
300
-		$this->report_data->total_refunded_tax = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_tax' ) ) );
301
-		$this->report_data->total_refunds      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_sales' ) ) );
302
-		$this->report_data->refunded_discount  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_discount' ) ) );
303
-		$this->report_data->refunded_fees      = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'total_fees' ) ) );
304
-		$this->report_data->refunded_subtotal  = wpinv_round_amount( array_sum( wp_list_pluck( $this->report_data->refunds, 'subtotal' ) ) );
305
-		$this->report_data->net_refunds        = wpinv_round_amount( $this->report_data->total_refunds + max( 0, $this->report_data->total_refunded_tax ) );
294
+		$this->report_data->total_tax          = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->invoices, 'total_tax')));
295
+		$this->report_data->total_sales        = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->invoices, 'total_sales')));
296
+		$this->report_data->total_discount     = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->invoices, 'total_discount')));
297
+		$this->report_data->total_fees         = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->invoices, 'total_fees')));
298
+		$this->report_data->subtotal           = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->invoices, 'subtotal')));
299
+		$this->report_data->net_sales          = wpinv_round_amount($this->report_data->total_sales - max(0, $this->report_data->total_tax));
300
+		$this->report_data->total_refunded_tax = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->refunds, 'total_tax')));
301
+		$this->report_data->total_refunds      = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->refunds, 'total_sales')));
302
+		$this->report_data->refunded_discount  = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->refunds, 'total_discount')));
303
+		$this->report_data->refunded_fees      = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->refunds, 'total_fees')));
304
+		$this->report_data->refunded_subtotal  = wpinv_round_amount(array_sum(wp_list_pluck($this->report_data->refunds, 'subtotal')));
305
+		$this->report_data->net_refunds        = wpinv_round_amount($this->report_data->total_refunds + max(0, $this->report_data->total_refunded_tax));
306 306
 
307 307
 		// Calculate average based on net.
308
-		$this->report_data->average_sales       = wpinv_round_amount( $this->report_data->net_sales / max( $this->interval, 1 ), 2 );
309
-		$this->report_data->average_total_sales = wpinv_round_amount( $this->report_data->total_sales / max( $this->interval, 1 ), 2 );
308
+		$this->report_data->average_sales       = wpinv_round_amount($this->report_data->net_sales / max($this->interval, 1), 2);
309
+		$this->report_data->average_total_sales = wpinv_round_amount($this->report_data->total_sales / max($this->interval, 1), 2);
310 310
 
311 311
 		// Total invoices in this period, even if refunded.
312
-		$this->report_data->total_invoices = absint( array_sum( wp_list_pluck( $this->report_data->invoice_counts, 'count' ) ) );
312
+		$this->report_data->total_invoices = absint(array_sum(wp_list_pluck($this->report_data->invoice_counts, 'count')));
313 313
 
314 314
 		// Items invoiced in this period, even if refunded.
315
-		$this->report_data->total_items = absint( array_sum( wp_list_pluck( $this->report_data->invoice_items, 'invoice_item_count' ) ) );
315
+		$this->report_data->total_items = absint(array_sum(wp_list_pluck($this->report_data->invoice_items, 'invoice_item_count')));
316 316
 
317 317
 		// 3rd party filtering of report data
318
-		$this->report_data = apply_filters( 'getpaid_rest_api_filter_report_data', $this->report_data, $this );
318
+		$this->report_data = apply_filters('getpaid_rest_api_filter_report_data', $this->report_data, $this);
319 319
 	}
320 320
 
321 321
 	/**
@@ -340,11 +340,11 @@  discard block
 block discarded – undo
340 340
 						'name'     => 'post_date',
341 341
 					),
342 342
 				),
343
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
343
+				'group_by'       => $this->get_group_by_sql('posts.post_date'),
344 344
 				'order_by'       => 'post_date ASC',
345 345
 				'query_type'     => 'get_results',
346 346
 				'filter_range'   => $this->report_range,
347
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
347
+				'invoice_status' => array('publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal'),
348 348
 			)
349 349
 		);
350 350
 
@@ -371,11 +371,11 @@  discard block
 block discarded – undo
371 371
 						'name'     => 'post_date',
372 372
 					),
373 373
 				),
374
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
374
+				'group_by'       => $this->get_group_by_sql('posts.post_date'),
375 375
 				'order_by'       => 'post_date ASC',
376 376
 				'query_type'     => 'get_results',
377 377
 				'filter_range'   => $this->report_range,
378
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
378
+				'invoice_status' => array('publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal'),
379 379
 			)
380 380
 		);
381 381
 
@@ -402,11 +402,11 @@  discard block
 block discarded – undo
402 402
 						'name'     => 'post_date',
403 403
 					),
404 404
 				),
405
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
405
+				'group_by'       => $this->get_group_by_sql('posts.post_date'),
406 406
 				'order_by'       => 'post_date ASC',
407 407
 				'query_type'     => 'get_results',
408 408
 				'filter_range'   => $this->report_range,
409
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal' ),
409
+				'invoice_status' => array('publish', 'wpi-processing', 'wpi-onhold', 'wpi-refunded', 'wpi-renewal'),
410 410
 			)
411 411
 		);
412 412
 
@@ -430,7 +430,7 @@  discard block
 block discarded – undo
430 430
 				),
431 431
 				'query_type'     => 'get_var',
432 432
 				'filter_range'   => $this->report_range,
433
-				'invoice_status' => array( 'wpi-refunded' ),
433
+				'invoice_status' => array('wpi-refunded'),
434 434
 			)
435 435
 		);
436 436
 
@@ -477,11 +477,11 @@  discard block
 block discarded – undo
477 477
 						'name'     => 'post_date',
478 478
 					),
479 479
 				),
480
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
480
+				'group_by'       => $this->get_group_by_sql('posts.post_date'),
481 481
 				'order_by'       => 'post_date ASC',
482 482
 				'query_type'     => 'get_results',
483 483
 				'filter_range'   => $this->report_range,
484
-				'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold', 'wpi-renewal' ),
484
+				'invoice_status' => array('publish', 'wpi-processing', 'wpi-onhold', 'wpi-renewal'),
485 485
 			)
486 486
 		);
487 487
 
@@ -528,11 +528,11 @@  discard block
 block discarded – undo
528 528
 						'name'     => 'post_date',
529 529
 					),
530 530
 				),
531
-				'group_by'       => $this->get_group_by_sql( 'posts.post_date' ),
531
+				'group_by'       => $this->get_group_by_sql('posts.post_date'),
532 532
 				'order_by'       => 'post_date ASC',
533 533
 				'query_type'     => 'get_results',
534 534
 				'filter_range'   => $this->report_range,
535
-				'invoice_status' => array( 'wpi-refunded' ),
535
+				'invoice_status' => array('wpi-refunded'),
536 536
 			)
537 537
 		);
538 538
 
@@ -551,154 +551,154 @@  discard block
 block discarded – undo
551 551
 			'type'       => 'object',
552 552
 			'properties' => array(
553 553
 				'total_sales'         => array(
554
-					'description' => __( 'Gross sales in the period.', 'invoicing' ),
554
+					'description' => __('Gross sales in the period.', 'invoicing'),
555 555
 					'type'        => 'string',
556
-					'context'     => array( 'view' ),
556
+					'context'     => array('view'),
557 557
 					'readonly'    => true,
558 558
 				),
559 559
 				'net_sales'           => array(
560
-					'description' => __( 'Net sales in the period.', 'invoicing' ),
560
+					'description' => __('Net sales in the period.', 'invoicing'),
561 561
 					'type'        => 'string',
562
-					'context'     => array( 'view' ),
562
+					'context'     => array('view'),
563 563
 					'readonly'    => true,
564 564
 				),
565 565
 				'average_sales'       => array(
566
-					'description' => __( 'Average net daily sales.', 'invoicing' ),
566
+					'description' => __('Average net daily sales.', 'invoicing'),
567 567
 					'type'        => 'string',
568
-					'context'     => array( 'view' ),
568
+					'context'     => array('view'),
569 569
 					'readonly'    => true,
570 570
 				),
571 571
 				'average_total_sales' => array(
572
-					'description' => __( 'Average gross daily sales.', 'invoicing' ),
572
+					'description' => __('Average gross daily sales.', 'invoicing'),
573 573
 					'type'        => 'string',
574
-					'context'     => array( 'view' ),
574
+					'context'     => array('view'),
575 575
 					'readonly'    => true,
576 576
 				),
577 577
 				'total_invoices'      => array(
578
-					'description' => __( 'Number of paid invoices.', 'invoicing' ),
578
+					'description' => __('Number of paid invoices.', 'invoicing'),
579 579
 					'type'        => 'integer',
580
-					'context'     => array( 'view' ),
580
+					'context'     => array('view'),
581 581
 					'readonly'    => true,
582 582
 				),
583 583
 				'total_items'         => array(
584
-					'description' => __( 'Number of items purchased.', 'invoicing' ),
584
+					'description' => __('Number of items purchased.', 'invoicing'),
585 585
 					'type'        => 'integer',
586
-					'context'     => array( 'view' ),
586
+					'context'     => array('view'),
587 587
 					'readonly'    => true,
588 588
 				),
589 589
 				'refunded_items'      => array(
590
-					'description' => __( 'Number of items refunded.', 'invoicing' ),
590
+					'description' => __('Number of items refunded.', 'invoicing'),
591 591
 					'type'        => 'integer',
592
-					'context'     => array( 'view' ),
592
+					'context'     => array('view'),
593 593
 					'readonly'    => true,
594 594
 				),
595 595
 				'total_tax'           => array(
596
-					'description' => __( 'Total charged for taxes.', 'invoicing' ),
596
+					'description' => __('Total charged for taxes.', 'invoicing'),
597 597
 					'type'        => 'string',
598
-					'context'     => array( 'view' ),
598
+					'context'     => array('view'),
599 599
 					'readonly'    => true,
600 600
 				),
601 601
 				'total_refunded_tax'  => array(
602
-					'description' => __( 'Total refunded for taxes.', 'invoicing' ),
602
+					'description' => __('Total refunded for taxes.', 'invoicing'),
603 603
 					'type'        => 'string',
604
-					'context'     => array( 'view' ),
604
+					'context'     => array('view'),
605 605
 					'readonly'    => true,
606 606
 				),
607 607
 				'total_fees'          => array(
608
-					'description' => __( 'Total fees charged.', 'invoicing' ),
608
+					'description' => __('Total fees charged.', 'invoicing'),
609 609
 					'type'        => 'string',
610
-					'context'     => array( 'view' ),
610
+					'context'     => array('view'),
611 611
 					'readonly'    => true,
612 612
 				),
613 613
 				'total_refunds'       => array(
614
-					'description' => __( 'Total of refunded invoices.', 'invoicing' ),
614
+					'description' => __('Total of refunded invoices.', 'invoicing'),
615 615
 					'type'        => 'integer',
616
-					'context'     => array( 'view' ),
616
+					'context'     => array('view'),
617 617
 					'readonly'    => true,
618 618
 				),
619 619
 				'net_refunds'         => array(
620
-					'description' => __( 'Net of refunded invoices.', 'invoicing' ),
620
+					'description' => __('Net of refunded invoices.', 'invoicing'),
621 621
 					'type'        => 'integer',
622
-					'context'     => array( 'view' ),
622
+					'context'     => array('view'),
623 623
 					'readonly'    => true,
624 624
 				),
625 625
 				'total_discount'      => array(
626
-					'description' => __( 'Total of discounts used.', 'invoicing' ),
626
+					'description' => __('Total of discounts used.', 'invoicing'),
627 627
 					'type'        => 'integer',
628
-					'context'     => array( 'view' ),
628
+					'context'     => array('view'),
629 629
 					'readonly'    => true,
630 630
 				),
631 631
 				'totals'              => array(
632
-					'description' => __( 'Totals.', 'invoicing' ),
632
+					'description' => __('Totals.', 'invoicing'),
633 633
 					'type'        => 'array',
634 634
 					'items'       => array(
635 635
 						'type' => 'array',
636 636
 					),
637
-					'context'     => array( 'view' ),
637
+					'context'     => array('view'),
638 638
 					'readonly'    => true,
639 639
 				),
640 640
 				'interval'            => array(
641
-					'description' => __( 'Number of months/days in the report period.', 'invoicing' ),
641
+					'description' => __('Number of months/days in the report period.', 'invoicing'),
642 642
 					'type'        => 'integer',
643
-					'context'     => array( 'view' ),
643
+					'context'     => array('view'),
644 644
 					'readonly'    => true,
645 645
 				),
646 646
 				'previous_range'      => array(
647
-					'description' => __( 'The previous report period.', 'invoicing' ),
647
+					'description' => __('The previous report period.', 'invoicing'),
648 648
 					'type'        => 'array',
649 649
 					'items'       => array(
650 650
 						'type' => 'string',
651 651
 					),
652
-					'context'     => array( 'view' ),
652
+					'context'     => array('view'),
653 653
 					'readonly'    => true,
654 654
 				),
655 655
 				'grouped_by'          => array(
656
-					'description' => __( 'The period used to group the totals.', 'invoicing' ),
656
+					'description' => __('The period used to group the totals.', 'invoicing'),
657 657
 					'type'        => 'string',
658
-					'context'     => array( 'view' ),
659
-					'enum'        => array( 'day', 'month' ),
658
+					'context'     => array('view'),
659
+					'enum'        => array('day', 'month'),
660 660
 					'readonly'    => true,
661 661
 				),
662 662
 				'currency'            => array(
663
-					'description' => __( 'The default store currency.', 'invoicing' ),
663
+					'description' => __('The default store currency.', 'invoicing'),
664 664
 					'type'        => 'string',
665
-					'context'     => array( 'view' ),
665
+					'context'     => array('view'),
666 666
 					'readonly'    => true,
667 667
 				),
668 668
 				'currency_symbol'     => array(
669
-					'description' => __( 'The default store currency symbol.', 'invoicing' ),
669
+					'description' => __('The default store currency symbol.', 'invoicing'),
670 670
 					'type'        => 'string',
671
-					'context'     => array( 'view' ),
671
+					'context'     => array('view'),
672 672
 					'readonly'    => true,
673 673
 				),
674 674
 				'currency_position'   => array(
675
-					'description' => __( 'The default store currency position.', 'invoicing' ),
675
+					'description' => __('The default store currency position.', 'invoicing'),
676 676
 					'type'        => 'string',
677
-					'context'     => array( 'view' ),
677
+					'context'     => array('view'),
678 678
 					'readonly'    => true,
679 679
 				),
680 680
 				'decimal_places'      => array(
681
-					'description' => __( 'The default store decimal places.', 'invoicing' ),
681
+					'description' => __('The default store decimal places.', 'invoicing'),
682 682
 					'type'        => 'string',
683
-					'context'     => array( 'view' ),
683
+					'context'     => array('view'),
684 684
 					'readonly'    => true,
685 685
 				),
686 686
 				'thousands_sep'       => array(
687
-					'description' => __( 'The default store thousands separator.', 'invoicing' ),
687
+					'description' => __('The default store thousands separator.', 'invoicing'),
688 688
 					'type'        => 'string',
689
-					'context'     => array( 'view' ),
689
+					'context'     => array('view'),
690 690
 					'readonly'    => true,
691 691
 				),
692 692
 				'decimals_sep'        => array(
693
-					'description' => __( 'The default store decimals separator.', 'invoicing' ),
693
+					'description' => __('The default store decimals separator.', 'invoicing'),
694 694
 					'type'        => 'string',
695
-					'context'     => array( 'view' ),
695
+					'context'     => array('view'),
696 696
 					'readonly'    => true,
697 697
 				),
698 698
 			),
699 699
 		);
700 700
 
701
-		return $this->add_additional_fields_schema( $schema );
701
+		return $this->add_additional_fields_schema($schema);
702 702
 
703 703
 	}
704 704
 
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-discounts-controller.php 2 patches
Indentation   +129 added lines, -129 removed lines patch added patch discarded remove patch
@@ -15,136 +15,136 @@
 block discarded – undo
15 15
 class WPInv_REST_Discounts_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_discount';
23
-
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'discounts';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Discount';
37
-
38
-	/**
39
-	 * Registers the routes for the objects of the controller.
40
-	 *
41
-	 * @since 1.0.19
42
-	 *
43
-	 * @see register_rest_route()
44
-	 */
45
-	public function register_namespace_routes( $namespace ) {
46
-
47
-		parent::register_namespace_routes( $namespace );
48
-
49
-		register_rest_route(
50
-			$this->namespace,
51
-			'/' . $this->rest_base . '/discount-types',
52
-			array(
53
-				array(
54
-					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_discount_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
-				),
58
-			)
59
-		);
60
-
61
-	}
62
-
63
-	/**
64
-	 * Handles rest requests for discount types.
65
-	 *
66
-	 * @since 1.0.13
67
-	 *
68
-	 *
69
-	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
-	 */
71
-	public function get_discount_types() {
72
-		return rest_ensure_response( wpinv_get_discount_types() );
73
-	}
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_discount';
74 23
 
75 24
     /**
76
-	 * Retrieves the query params for the discount collection.
77
-	 *
78
-	 * @since 1.0.13
79
-	 *
80
-	 * @return array Collection parameters.
81
-	 */
82
-	public function get_collection_params() {
83
-
84
-		$params = array_merge(
85
-			parent::get_collection_params(),
86
-        	array(
87
-
88
-				// Discount types
89
-				'type' => array(
90
-					'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
91
-					'type'              => array( 'array', 'string' ),
92
-					'default'           => 'any',
93
-					'validate_callback' => 'rest_validate_request_arg',
94
-					'sanitize_callback' => 'wpinv_parse_list',
95
-					'items'             => array(
96
-						'enum' => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
97
-						'type' => 'string',
98
-					),
99
-				),
100
-
101
-			)
102
-		);
103
-
104
-		// Filter collection parameters for the discounts controller.
105
-		return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
106
-	}
107
-
108
-	/**
109
-	 * Determine the allowed query_vars for a get_items() response and
110
-	 * prepare for WP_Query.
111
-	 *
112
-	 * @param array           $prepared_args Prepared arguments.
113
-	 * @param WP_REST_Request $request Request object.
114
-	 * @return array          $query_args
115
-	 */
116
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
117
-
118
-		$query_args = parent::prepare_items_query( $prepared_args );
119
-
120
-		// Retrieve items by type.
121
-		if ( ! in_array( 'any', $request['type'] ) ) {
122
-
123
-			if ( empty( $query_args['meta_query'] ) ) {
124
-				$query_args['meta_query'] = array();
125
-			}
126
-
127
-			$query_args['meta_query'][] = array(
128
-				'key'     => '_wpi_discount_type',
129
-				'value'   => implode( ',', $request['type'] ),
130
-				'compare' => 'IN',
131
-			);
132
-
133
-		}
134
-
135
-		return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
136
-
137
-	}
138
-
139
-	/**
140
-	 * Retrieves a valid list of post statuses.
141
-	 *
142
-	 * @since 1.0.15
143
-	 *
144
-	 * @return array A list of registered item statuses.
145
-	 */
146
-	public function get_post_statuses() {
147
-		return array( 'publish', 'pending', 'draft', 'expired' );
148
-	}
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'discounts';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Discount';
37
+
38
+    /**
39
+     * Registers the routes for the objects of the controller.
40
+     *
41
+     * @since 1.0.19
42
+     *
43
+     * @see register_rest_route()
44
+     */
45
+    public function register_namespace_routes( $namespace ) {
46
+
47
+        parent::register_namespace_routes( $namespace );
48
+
49
+        register_rest_route(
50
+            $this->namespace,
51
+            '/' . $this->rest_base . '/discount-types',
52
+            array(
53
+                array(
54
+                    'methods'             => WP_REST_Server::READABLE,
55
+                    'callback'            => array( $this, 'get_discount_types' ),
56
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
57
+                ),
58
+            )
59
+        );
60
+
61
+    }
62
+
63
+    /**
64
+     * Handles rest requests for discount types.
65
+     *
66
+     * @since 1.0.13
67
+     *
68
+     *
69
+     * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70
+     */
71
+    public function get_discount_types() {
72
+        return rest_ensure_response( wpinv_get_discount_types() );
73
+    }
74
+
75
+    /**
76
+     * Retrieves the query params for the discount collection.
77
+     *
78
+     * @since 1.0.13
79
+     *
80
+     * @return array Collection parameters.
81
+     */
82
+    public function get_collection_params() {
83
+
84
+        $params = array_merge(
85
+            parent::get_collection_params(),
86
+            array(
87
+
88
+                // Discount types
89
+                'type' => array(
90
+                    'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
91
+                    'type'              => array( 'array', 'string' ),
92
+                    'default'           => 'any',
93
+                    'validate_callback' => 'rest_validate_request_arg',
94
+                    'sanitize_callback' => 'wpinv_parse_list',
95
+                    'items'             => array(
96
+                        'enum' => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
97
+                        'type' => 'string',
98
+                    ),
99
+                ),
100
+
101
+            )
102
+        );
103
+
104
+        // Filter collection parameters for the discounts controller.
105
+        return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
106
+    }
107
+
108
+    /**
109
+     * Determine the allowed query_vars for a get_items() response and
110
+     * prepare for WP_Query.
111
+     *
112
+     * @param array           $prepared_args Prepared arguments.
113
+     * @param WP_REST_Request $request Request object.
114
+     * @return array          $query_args
115
+     */
116
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
117
+
118
+        $query_args = parent::prepare_items_query( $prepared_args );
119
+
120
+        // Retrieve items by type.
121
+        if ( ! in_array( 'any', $request['type'] ) ) {
122
+
123
+            if ( empty( $query_args['meta_query'] ) ) {
124
+                $query_args['meta_query'] = array();
125
+            }
126
+
127
+            $query_args['meta_query'][] = array(
128
+                'key'     => '_wpi_discount_type',
129
+                'value'   => implode( ',', $request['type'] ),
130
+                'compare' => 'IN',
131
+            );
132
+
133
+        }
134
+
135
+        return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
136
+
137
+    }
138
+
139
+    /**
140
+     * Retrieves a valid list of post statuses.
141
+     *
142
+     * @since 1.0.15
143
+     *
144
+     * @return array A list of registered item statuses.
145
+     */
146
+    public function get_post_statuses() {
147
+        return array( 'publish', 'pending', 'draft', 'expired' );
148
+    }
149 149
 
150 150
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API discounts controller class.
@@ -42,9 +42,9 @@  discard block
 block discarded – undo
42 42
 	 *
43 43
 	 * @see register_rest_route()
44 44
 	 */
45
-	public function register_namespace_routes( $namespace ) {
45
+	public function register_namespace_routes($namespace) {
46 46
 
47
-		parent::register_namespace_routes( $namespace );
47
+		parent::register_namespace_routes($namespace);
48 48
 
49 49
 		register_rest_route(
50 50
 			$this->namespace,
@@ -52,8 +52,8 @@  discard block
 block discarded – undo
52 52
 			array(
53 53
 				array(
54 54
 					'methods'             => WP_REST_Server::READABLE,
55
-					'callback'            => array( $this, 'get_discount_types' ),
56
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
55
+					'callback'            => array($this, 'get_discount_types'),
56
+					'permission_callback' => array($this, 'get_items_permissions_check'),
57 57
 				),
58 58
 			)
59 59
 		);
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
70 70
 	 */
71 71
 	public function get_discount_types() {
72
-		return rest_ensure_response( wpinv_get_discount_types() );
72
+		return rest_ensure_response(wpinv_get_discount_types());
73 73
 	}
74 74
 
75 75
     /**
@@ -87,13 +87,13 @@  discard block
 block discarded – undo
87 87
 
88 88
 				// Discount types
89 89
 				'type' => array(
90
-					'description'       => __( 'Type of discounts to fetch.', 'invoicing' ),
91
-					'type'              => array( 'array', 'string' ),
90
+					'description'       => __('Type of discounts to fetch.', 'invoicing'),
91
+					'type'              => array('array', 'string'),
92 92
 					'default'           => 'any',
93 93
 					'validate_callback' => 'rest_validate_request_arg',
94 94
 					'sanitize_callback' => 'wpinv_parse_list',
95 95
 					'items'             => array(
96
-						'enum' => array_merge( array( 'any' ), array_keys( wpinv_get_discount_types() ) ),
96
+						'enum' => array_merge(array('any'), array_keys(wpinv_get_discount_types())),
97 97
 						'type' => 'string',
98 98
 					),
99 99
 				),
@@ -102,7 +102,7 @@  discard block
 block discarded – undo
102 102
 		);
103 103
 
104 104
 		// Filter collection parameters for the discounts controller.
105
-		return apply_filters( 'getpaid_rest_discounts_collection_params', $params, $this );
105
+		return apply_filters('getpaid_rest_discounts_collection_params', $params, $this);
106 106
 	}
107 107
 
108 108
 	/**
@@ -113,26 +113,26 @@  discard block
 block discarded – undo
113 113
 	 * @param WP_REST_Request $request Request object.
114 114
 	 * @return array          $query_args
115 115
 	 */
116
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
116
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
117 117
 
118
-		$query_args = parent::prepare_items_query( $prepared_args );
118
+		$query_args = parent::prepare_items_query($prepared_args);
119 119
 
120 120
 		// Retrieve items by type.
121
-		if ( ! in_array( 'any', $request['type'] ) ) {
121
+		if (!in_array('any', $request['type'])) {
122 122
 
123
-			if ( empty( $query_args['meta_query'] ) ) {
123
+			if (empty($query_args['meta_query'])) {
124 124
 				$query_args['meta_query'] = array();
125 125
 			}
126 126
 
127 127
 			$query_args['meta_query'][] = array(
128 128
 				'key'     => '_wpi_discount_type',
129
-				'value'   => implode( ',', $request['type'] ),
129
+				'value'   => implode(',', $request['type']),
130 130
 				'compare' => 'IN',
131 131
 			);
132 132
 
133 133
 		}
134 134
 
135
-		return apply_filters( 'getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this );
135
+		return apply_filters('getpaid_rest_discounts_prepare_items_query', $query_args, $request, $this);
136 136
 
137 137
 	}
138 138
 
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
 	 * @return array A list of registered item statuses.
145 145
 	 */
146 146
 	public function get_post_statuses() {
147
-		return array( 'publish', 'pending', 'draft', 'expired' );
147
+		return array('publish', 'pending', 'draft', 'expired');
148 148
 	}
149 149
 
150 150
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-crud-controller.php 2 patches
Indentation   +465 added lines, -465 removed lines patch added patch discarded remove patch
@@ -17,474 +17,474 @@
 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
-			}
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 337
 }
338 338
 
339
-		// Filters an object before it is inserted via the REST API..
340
-		return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
341
-	}
342
-
343
-	/**
344
-	 * Retrieves data from a GetPaid class.
345
-	 *
346
-	 * @since  1.0.19
347
-	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
348
-	 * @return array
349
-	 */
350
-	protected function prepare_object_meta_data( $meta_data ) {
351
-		$meta = array();
352
-
353
-		foreach ( $meta_data as $object ) {
354
-			$meta[] = $object->get_data();
355
-		}
356
-
357
-		return $meta;
358
-	}
359
-
360
-	/**
361
-	 * Retrieves invoice items.
362
-	 *
363
-	 * @since  1.0.19
364
-	 * @param  WPInv_Invoice $invoice  Invoice items.
365
-	 * @param array            $fields Fields to include.
366
-	 * @return array
367
-	 */
368
-	protected function prepare_invoice_items( $invoice ) {
369
-		$items = array();
370
-
371
-		foreach ( $invoice->get_items() as $item ) {
372
-
373
-			$item_data = $item->prepare_data_for_saving();
374
-
375
-			if ( 'amount' == $invoice->get_template() ) {
376
-				$item_data['quantity'] = 1;
377
-			}
378
-
379
-			$items[] = $item_data;
380
-		}
381
-
382
-		return $items;
383
-	}
384
-
385
-	/**
386
-	 * Retrieves data from a GetPaid class.
387
-	 *
388
-	 * @since  1.0.19
389
-	 * @param  GetPaid_Data    $object  Data object.
390
-	 * @param array            $fields Fields to include.
391
-	 * @param string           $context either view or edit.
392
-	 * @return array
393
-	 */
394
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
395
-
396
-		$data = array();
397
-
398
-		// Handle all writable props.
399
-		foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
400
-
401
-			// Abort if it is not included.
402
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
403
-				continue;
404
-			}
405
-
406
-			// Or this current object does not support the field.
407
-			if ( ! $this->object_supports_field( $object, $key ) ) {
408
-				continue;
409
-			}
410
-
411
-			// Handle meta data.
412
-			if ( $key == 'meta_data' ) {
413
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
414
-				continue;
415
-			}
416
-
417
-			// Handle items.
418
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) {
419
-				$data['items'] = $this->prepare_invoice_items( $object );
420
-				continue;
421
-			}
422
-
423
-			// Booleans.
424
-			if ( is_callable( array( $object, $key ) ) ) {
425
-				$data[ $key ] = $object->$key( $context );
426
-				continue;
427
-			}
428
-
429
-			// Get object value.
430
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
431
-				$value = $object->{"get_{$key}"}( $context );
432
-
433
-				// If the value is an instance of GetPaid_Data...
434
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
435
-					$value = $value->get_data( $context );
436
-				}
437
-
438
-				// For objects, retrieves it's properties.
439
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value;
440
-				continue;
441
-			}
339
+        // Filters an object before it is inserted via the REST API..
340
+        return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
341
+    }
342
+
343
+    /**
344
+     * Retrieves data from a GetPaid class.
345
+     *
346
+     * @since  1.0.19
347
+     * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
348
+     * @return array
349
+     */
350
+    protected function prepare_object_meta_data( $meta_data ) {
351
+        $meta = array();
352
+
353
+        foreach ( $meta_data as $object ) {
354
+            $meta[] = $object->get_data();
355
+        }
356
+
357
+        return $meta;
358
+    }
359
+
360
+    /**
361
+     * Retrieves invoice items.
362
+     *
363
+     * @since  1.0.19
364
+     * @param  WPInv_Invoice $invoice  Invoice items.
365
+     * @param array            $fields Fields to include.
366
+     * @return array
367
+     */
368
+    protected function prepare_invoice_items( $invoice ) {
369
+        $items = array();
370
+
371
+        foreach ( $invoice->get_items() as $item ) {
372
+
373
+            $item_data = $item->prepare_data_for_saving();
374
+
375
+            if ( 'amount' == $invoice->get_template() ) {
376
+                $item_data['quantity'] = 1;
377
+            }
378
+
379
+            $items[] = $item_data;
380
+        }
381
+
382
+        return $items;
383
+    }
384
+
385
+    /**
386
+     * Retrieves data from a GetPaid class.
387
+     *
388
+     * @since  1.0.19
389
+     * @param  GetPaid_Data    $object  Data object.
390
+     * @param array            $fields Fields to include.
391
+     * @param string           $context either view or edit.
392
+     * @return array
393
+     */
394
+    protected function prepare_object_data( $object, $fields, $context = 'view' ) {
395
+
396
+        $data = array();
397
+
398
+        // Handle all writable props.
399
+        foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
400
+
401
+            // Abort if it is not included.
402
+            if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
403
+                continue;
404
+            }
405
+
406
+            // Or this current object does not support the field.
407
+            if ( ! $this->object_supports_field( $object, $key ) ) {
408
+                continue;
409
+            }
410
+
411
+            // Handle meta data.
412
+            if ( $key == 'meta_data' ) {
413
+                $data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
414
+                continue;
415
+            }
416
+
417
+            // Handle items.
418
+            if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) {
419
+                $data['items'] = $this->prepare_invoice_items( $object );
420
+                continue;
421
+            }
422
+
423
+            // Booleans.
424
+            if ( is_callable( array( $object, $key ) ) ) {
425
+                $data[ $key ] = $object->$key( $context );
426
+                continue;
427
+            }
428
+
429
+            // Get object value.
430
+            if ( is_callable( array( $object, "get_{$key}" ) ) ) {
431
+                $value = $object->{"get_{$key}"}( $context );
432
+
433
+                // If the value is an instance of GetPaid_Data...
434
+                if ( is_a( $value, 'GetPaid_Data' ) ) {
435
+                    $value = $value->get_data( $context );
436
+                }
437
+
438
+                // For objects, retrieves it's properties.
439
+                $data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value;
440
+                continue;
441
+            }
442 442
 }
443 443
 
444
-		return $data;
445
-	}
446
-
447
-	/**
448
-	 * Checks if a key should be included in a response.
449
-	 *
450
-	 * @since  1.0.19
451
-	 * @param  GetPaid_Data $object  Data object.
452
-	 * @param  string       $field_key The key to check for.
453
-	 * @return bool
454
-	 */
455
-	public function object_supports_field( $object, $field_key ) {
456
-		return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
457
-	}
458
-
459
-	/**
460
-	 * Prepare a single object output for response.
461
-	 *
462
-	 * @since  1.0.19
463
-	 * @param  GetPaid_Data    $object  Data object.
464
-	 * @param  WP_REST_Request $request Request object.
465
-	 * @return WP_REST_Response
466
-	 */
467
-	public function prepare_item_for_response( $object, $request ) {
468
-		remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
469
-
470
-		$this->data_object = $object;
471
-
472
-		// Fetch the fields to include in this response.
473
-		$fields = $this->get_fields_for_response( $request );
474
-
475
-		// Prepare object data.
476
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
477
-		$data    = $this->prepare_object_data( $object, $fields, $context );
478
-		$data    = $this->add_additional_fields_to_object( $data, $request );
479
-		$data    = $this->limit_object_to_requested_fields( $data, $fields );
480
-		$data    = $this->filter_response_by_context( $data, $context );
481
-
482
-		// Prepare the response.
483
-		$response = rest_ensure_response( $data );
484
-		$response->add_links( $this->prepare_links( $object, $request ) );
485
-
486
-		// Filter item response.
487
-		return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
488
-	}
444
+        return $data;
445
+    }
446
+
447
+    /**
448
+     * Checks if a key should be included in a response.
449
+     *
450
+     * @since  1.0.19
451
+     * @param  GetPaid_Data $object  Data object.
452
+     * @param  string       $field_key The key to check for.
453
+     * @return bool
454
+     */
455
+    public function object_supports_field( $object, $field_key ) {
456
+        return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
457
+    }
458
+
459
+    /**
460
+     * Prepare a single object output for response.
461
+     *
462
+     * @since  1.0.19
463
+     * @param  GetPaid_Data    $object  Data object.
464
+     * @param  WP_REST_Request $request Request object.
465
+     * @return WP_REST_Response
466
+     */
467
+    public function prepare_item_for_response( $object, $request ) {
468
+        remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
469
+
470
+        $this->data_object = $object;
471
+
472
+        // Fetch the fields to include in this response.
473
+        $fields = $this->get_fields_for_response( $request );
474
+
475
+        // Prepare object data.
476
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
477
+        $data    = $this->prepare_object_data( $object, $fields, $context );
478
+        $data    = $this->add_additional_fields_to_object( $data, $request );
479
+        $data    = $this->limit_object_to_requested_fields( $data, $fields );
480
+        $data    = $this->filter_response_by_context( $data, $context );
481
+
482
+        // Prepare the response.
483
+        $response = rest_ensure_response( $data );
484
+        $response->add_links( $this->prepare_links( $object, $request ) );
485
+
486
+        // Filter item response.
487
+        return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
488
+    }
489 489
 
490 490
 }
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
 				}
@@ -337,7 +337,7 @@  discard block
 block discarded – undo
337 337
 }
338 338
 
339 339
 		// Filters an object before it is inserted via the REST API..
340
-		return apply_filters( "getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request );
340
+		return apply_filters("getpaid_rest_pre_insert_{$this->rest_base}_object", $object, $request);
341 341
 	}
342 342
 
343 343
 	/**
@@ -347,10 +347,10 @@  discard block
 block discarded – undo
347 347
 	 * @param  GetPaid_Meta_Data[]    $meta_data  meta data objects.
348 348
 	 * @return array
349 349
 	 */
350
-	protected function prepare_object_meta_data( $meta_data ) {
350
+	protected function prepare_object_meta_data($meta_data) {
351 351
 		$meta = array();
352 352
 
353
-		foreach ( $meta_data as $object ) {
353
+		foreach ($meta_data as $object) {
354 354
 			$meta[] = $object->get_data();
355 355
 		}
356 356
 
@@ -365,14 +365,14 @@  discard block
 block discarded – undo
365 365
 	 * @param array            $fields Fields to include.
366 366
 	 * @return array
367 367
 	 */
368
-	protected function prepare_invoice_items( $invoice ) {
368
+	protected function prepare_invoice_items($invoice) {
369 369
 		$items = array();
370 370
 
371
-		foreach ( $invoice->get_items() as $item ) {
371
+		foreach ($invoice->get_items() as $item) {
372 372
 
373 373
 			$item_data = $item->prepare_data_for_saving();
374 374
 
375
-			if ( 'amount' == $invoice->get_template() ) {
375
+			if ('amount' == $invoice->get_template()) {
376 376
 				$item_data['quantity'] = 1;
377 377
 			}
378 378
 
@@ -391,52 +391,52 @@  discard block
 block discarded – undo
391 391
 	 * @param string           $context either view or edit.
392 392
 	 * @return array
393 393
 	 */
394
-	protected function prepare_object_data( $object, $fields, $context = 'view' ) {
394
+	protected function prepare_object_data($object, $fields, $context = 'view') {
395 395
 
396 396
 		$data = array();
397 397
 
398 398
 		// Handle all writable props.
399
-		foreach ( array_keys( $this->get_schema_properties() ) as $key ) {
399
+		foreach (array_keys($this->get_schema_properties()) as $key) {
400 400
 
401 401
 			// Abort if it is not included.
402
-			if ( ! empty( $fields ) && ! $this->is_field_included( $key, $fields ) ) {
402
+			if (!empty($fields) && !$this->is_field_included($key, $fields)) {
403 403
 				continue;
404 404
 			}
405 405
 
406 406
 			// Or this current object does not support the field.
407
-			if ( ! $this->object_supports_field( $object, $key ) ) {
407
+			if (!$this->object_supports_field($object, $key)) {
408 408
 				continue;
409 409
 			}
410 410
 
411 411
 			// Handle meta data.
412
-			if ( $key == 'meta_data' ) {
413
-				$data['meta_data'] = $this->prepare_object_meta_data( $object->get_meta_data() );
412
+			if ($key == 'meta_data') {
413
+				$data['meta_data'] = $this->prepare_object_meta_data($object->get_meta_data());
414 414
 				continue;
415 415
 			}
416 416
 
417 417
 			// Handle items.
418
-			if ( $key == 'items' && is_a( $object, 'WPInv_Invoice' ) ) {
419
-				$data['items'] = $this->prepare_invoice_items( $object );
418
+			if ($key == 'items' && is_a($object, 'WPInv_Invoice')) {
419
+				$data['items'] = $this->prepare_invoice_items($object);
420 420
 				continue;
421 421
 			}
422 422
 
423 423
 			// Booleans.
424
-			if ( is_callable( array( $object, $key ) ) ) {
425
-				$data[ $key ] = $object->$key( $context );
424
+			if (is_callable(array($object, $key))) {
425
+				$data[$key] = $object->$key($context);
426 426
 				continue;
427 427
 			}
428 428
 
429 429
 			// Get object value.
430
-			if ( is_callable( array( $object, "get_{$key}" ) ) ) {
431
-				$value = $object->{"get_{$key}"}( $context );
430
+			if (is_callable(array($object, "get_{$key}"))) {
431
+				$value = $object->{"get_{$key}"}($context);
432 432
 
433 433
 				// If the value is an instance of GetPaid_Data...
434
-				if ( is_a( $value, 'GetPaid_Data' ) ) {
435
-					$value = $value->get_data( $context );
434
+				if (is_a($value, 'GetPaid_Data')) {
435
+					$value = $value->get_data($context);
436 436
 				}
437 437
 
438 438
 				// For objects, retrieves it's properties.
439
-				$data[ $key ] = is_object( $value ) ? get_object_vars( $value ) : $value;
439
+				$data[$key] = is_object($value) ? get_object_vars($value) : $value;
440 440
 				continue;
441 441
 			}
442 442
 }
@@ -452,8 +452,8 @@  discard block
 block discarded – undo
452 452
 	 * @param  string       $field_key The key to check for.
453 453
 	 * @return bool
454 454
 	 */
455
-	public function object_supports_field( $object, $field_key ) {
456
-		return apply_filters( 'getpaid_rest_object_supports_key', true, $object, $field_key );
455
+	public function object_supports_field($object, $field_key) {
456
+		return apply_filters('getpaid_rest_object_supports_key', true, $object, $field_key);
457 457
 	}
458 458
 
459 459
 	/**
@@ -464,27 +464,27 @@  discard block
 block discarded – undo
464 464
 	 * @param  WP_REST_Request $request Request object.
465 465
 	 * @return WP_REST_Response
466 466
 	 */
467
-	public function prepare_item_for_response( $object, $request ) {
468
-		remove_filter( 'rest_post_dispatch', 'rest_filter_response_fields', 10 );
467
+	public function prepare_item_for_response($object, $request) {
468
+		remove_filter('rest_post_dispatch', 'rest_filter_response_fields', 10);
469 469
 
470 470
 		$this->data_object = $object;
471 471
 
472 472
 		// Fetch the fields to include in this response.
473
-		$fields = $this->get_fields_for_response( $request );
473
+		$fields = $this->get_fields_for_response($request);
474 474
 
475 475
 		// Prepare object data.
476
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
477
-		$data    = $this->prepare_object_data( $object, $fields, $context );
478
-		$data    = $this->add_additional_fields_to_object( $data, $request );
479
-		$data    = $this->limit_object_to_requested_fields( $data, $fields );
480
-		$data    = $this->filter_response_by_context( $data, $context );
476
+		$context = !empty($request['context']) ? $request['context'] : 'view';
477
+		$data    = $this->prepare_object_data($object, $fields, $context);
478
+		$data    = $this->add_additional_fields_to_object($data, $request);
479
+		$data    = $this->limit_object_to_requested_fields($data, $fields);
480
+		$data    = $this->filter_response_by_context($data, $context);
481 481
 
482 482
 		// Prepare the response.
483
-		$response = rest_ensure_response( $data );
484
-		$response->add_links( $this->prepare_links( $object, $request ) );
483
+		$response = rest_ensure_response($data);
484
+		$response->add_links($this->prepare_links($object, $request));
485 485
 
486 486
 		// Filter item response.
487
-		return apply_filters( "getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request );
487
+		return apply_filters("getpaid_rest_prepare_{$this->rest_base}_object", $response, $object, $request);
488 488
 	}
489 489
 
490 490
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-date-based-controller.php 2 patches
Indentation   +573 added lines, -573 removed lines patch added patch discarded remove patch
@@ -16,577 +16,577 @@
 block discarded – undo
16 16
  */
17 17
 class GetPaid_REST_Date_Based_Controller extends GetPaid_REST_Controller {
18 18
 
19
-	/**
20
-	 * Group response items by day or month.
21
-	 *
22
-	 * @var string
23
-	 */
24
-	public $groupby = 'day';
25
-
26
-	/**
27
-	 * Returns an array with arguments to request the previous report.
28
-	 *
29
-	 * @var array
30
-	 */
31
-	public $previous_range = array();
32
-
33
-	/**
34
-	 * The period interval.
35
-	 *
36
-	 * @var int
37
-	 */
38
-	public $interval;
39
-
40
-	/**
41
-	 * Retrieves the before and after dates.
42
-	 *
43
-	 * @param WP_REST_Request $request Request object.
44
-	 * @return array The appropriate date range.
45
-	 */
46
-	public function get_date_range( $request ) {
47
-
48
-		// If not supported, assume all time.
49
-		if ( ! in_array( $request['period'], array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year' ) ) ) {
50
-			$request['period'] = '7_days';
51
-		}
52
-
53
-		$date_range = call_user_func( array( $this, 'get_' . $request['period'] . '_date_range' ), $request );
54
-		$this->prepare_interval( $date_range );
55
-
56
-		return $date_range;
57
-
58
-	}
59
-
60
-	/**
61
-	 * Groups by month or days.
62
-	 *
63
-	 * @param array $range Date range.
64
-	 * @return array The appropriate date range.
65
-	 */
66
-	public function prepare_interval( $range ) {
67
-
68
-		$before = strtotime( $range['before'] ) - DAY_IN_SECONDS;
69
-		$after  = strtotime( $range['after'] ) + DAY_IN_SECONDS;
70
-		if ( 'day' === $this->groupby ) {
71
-			$difference     = max( DAY_IN_SECONDS, ( DAY_IN_SECONDS + $before - $after ) ); // Prevent division by 0;
72
-			$this->interval = absint( ceil( max( 1, $difference / DAY_IN_SECONDS ) ) );
73
-			return;
74
-		}
75
-
76
-		$this->interval = 0;
77
-		$min_date       = strtotime( date( 'Y-m-01', $after ) );
78
-
79
-		while ( $min_date <= $before ) {
80
-			$this->interval ++;
81
-			$min_date = strtotime( '+1 MONTH', $min_date );
82
-		}
83
-
84
-		$this->interval = max( 1, $this->interval );
85
-
86
-	}
87
-
88
-	/**
89
-	 * Retrieves a custom date range.
90
-	 *
91
-	 * @param WP_REST_Request $request Request object.
92
-	 * @return array The appropriate date range.
93
-	 */
94
-	public function get_custom_date_range( $request ) {
95
-
96
-		$after  = max( strtotime( '-20 years' ), strtotime( sanitize_text_field( $request['after'] ) ) );
97
-		$before = strtotime( '+1 day', current_time( 'timestamp' ) );
98
-
99
-		if ( ! empty( $request['before'] ) ) {
100
-			$before  = min( $before, strtotime( sanitize_text_field( $request['before'] ) ) );
101
-		}
102
-
103
-		// 3 months max for day view
104
-		if ( floor( ( $before - $after ) / MONTH_IN_SECONDS ) > 3 ) {
105
-			$this->groupby = 'month';
106
-		}
107
-
108
-		// Set the previous date range.
109
-		$difference           = $before - $after;
110
-		$this->previous_range = array(
111
-			'period' => 'custom',
112
-			'before' => date( 'Y-m-d', $before - $difference ),
113
-			'after'  => date( 'Y-m-d', $after - $difference ),
114
-		);
115
-
116
-		// Generate the report.
117
-		return array(
118
-			'before' => date( 'Y-m-d', $before ),
119
-			'after'  => date( 'Y-m-d', $after ),
120
-		);
121
-
122
-	}
123
-
124
-	/**
125
-	 * Retrieves todays date range.
126
-	 *
127
-	 * @return array The appropriate date range.
128
-	 */
129
-	public function get_today_date_range() {
130
-
131
-		// Set the previous date range.
132
-		$this->previous_range = array(
133
-			'period' => 'yesterday',
134
-		);
135
-
136
-		// Generate the report.
137
-		return array(
138
-			'before' => date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ),
139
-			'after'  => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
140
-		);
141
-
142
-	}
143
-
144
-	/**
145
-	 * Retrieves yesterdays date range.
146
-	 *
147
-	 * @return array The appropriate date range.
148
-	 */
149
-	public function get_yesterday_date_range() {
150
-
151
-		// Set the previous date range.
152
-		$this->previous_range = array(
153
-			'period' => 'custom',
154
-			'before' => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
155
-			'after'  => date( 'Y-m-d', strtotime( '-3 days', current_time( 'timestamp' ) ) ),
156
-		);
157
-
158
-		// Generate the report.
159
-		return array(
160
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
161
-			'after'  => date( 'Y-m-d', strtotime( '-2 days', current_time( 'timestamp' ) ) ),
162
-		);
163
-
164
-	}
165
-
166
-	/**
167
-	 * Retrieves this week's date range.
168
-	 *
169
-	 * @return array The appropriate date range.
170
-	 */
171
-	public function get_week_date_range() {
172
-
173
-		// Set the previous date range.
174
-		$this->previous_range = array(
175
-			'period' => 'last_week',
176
-		);
177
-
178
-		// Generate the report.
179
-		return array(
180
-			'before' => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) + 8 * DAY_IN_SECONDS ),
181
-			'after'  => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) ),
182
-		);
183
-
184
-	}
185
-
186
-	/**
187
-	 * Retrieves last week's date range.
188
-	 *
189
-	 * @return array The appropriate date range.
190
-	 */
191
-	public function get_last_week_date_range() {
192
-
193
-		// Set the previous date range.
194
-		$this->previous_range = array(
195
-			'period' => 'custom',
196
-			'before' => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) ),
197
-			'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - 8 * DAY_IN_SECONDS ),
198
-		);
199
-
200
-		// Generate the report.
201
-		return array(
202
-			'before' => date( 'Y-m-d', strtotime( 'monday this week', current_time( 'timestamp' ) ) ),
203
-			'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - DAY_IN_SECONDS ),
204
-		);
205
-
206
-	}
207
-
208
-	/**
209
-	 * Retrieves last 7 days date range.
210
-	 *
211
-	 * @return array The appropriate date range.
212
-	 */
213
-	public function get_7_days_date_range() {
214
-
215
-		// Set the previous date range.
216
-		$this->previous_range = array(
217
-			'period' => 'custom',
218
-			'before' => date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) ),
219
-			'after'  => date( 'Y-m-d', strtotime( '-15 days', current_time( 'timestamp' ) ) ),
220
-		);
221
-
222
-		// Generate the report.
223
-		return array(
224
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
225
-			'after'  => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
226
-		);
227
-
228
-	}
229
-
230
-	/**
231
-	 * Retrieves last 30 days date range.
232
-	 *
233
-	 * @return array The appropriate date range.
234
-	 */
235
-	public function get_30_days_date_range() {
236
-
237
-		// Set the previous date range.
238
-		$this->previous_range = array(
239
-			'period' => 'custom',
240
-			'before' => date( 'Y-m-d', strtotime( '-30 days', current_time( 'timestamp' ) ) ),
241
-			'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
242
-		);
243
-
244
-		// Generate the report.
245
-		return array(
246
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
247
-			'after'  => date( 'Y-m-d', strtotime( '-31 days', current_time( 'timestamp' ) ) ),
248
-		);
249
-
250
-	}
251
-
252
-	/**
253
-	 * Retrieves last 90 days date range.
254
-	 *
255
-	 * @return array The appropriate date range.
256
-	 */
257
-	public function get_90_days_date_range() {
258
-
259
-		$this->groupby = 'month';
260
-
261
-		// Set the previous date range.
262
-		$this->previous_range = array(
263
-			'period' => 'custom',
264
-			'before' => date( 'Y-m-d', strtotime( '-90 days', current_time( 'timestamp' ) ) ),
265
-			'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
266
-		);
267
-
268
-		// Generate the report.
269
-		return array(
270
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
271
-			'after'  => date( 'Y-m-d', strtotime( '-91 days', current_time( 'timestamp' ) ) ),
272
-		);
273
-
274
-	}
275
-
276
-	/**
277
-	 * Retrieves last 180 days date range.
278
-	 *
279
-	 * @return array The appropriate date range.
280
-	 */
281
-	public function get_180_days_date_range() {
282
-
283
-		$this->groupby = 'month';
284
-
285
-		// Set the previous date range.
286
-		$this->previous_range = array(
287
-			'period' => 'custom',
288
-			'before' => date( 'Y-m-d', strtotime( '-180 days', current_time( 'timestamp' ) ) ),
289
-			'after'  => date( 'Y-m-d', strtotime( '-361 days', current_time( 'timestamp' ) ) ),
290
-		);
291
-
292
-		// Generate the report.
293
-		return array(
294
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
295
-			'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
296
-		);
297
-
298
-	}
299
-
300
-	/**
301
-	 * Retrieves last 60 days date range.
302
-	 *
303
-	 * @return array The appropriate date range.
304
-	 */
305
-	public function get_60_days_date_range() {
306
-
307
-		// Set the previous date range.
308
-		$this->previous_range = array(
309
-			'period' => 'custom',
310
-			'before' => date( 'Y-m-d', strtotime( '-60 days', current_time( 'timestamp' ) ) ),
311
-			'after'  => date( 'Y-m-d', strtotime( '-121 days', current_time( 'timestamp' ) ) ),
312
-		);
313
-
314
-		// Generate the report.
315
-		return array(
316
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
317
-			'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
318
-		);
319
-
320
-	}
321
-
322
-	/**
323
-	 * Retrieves this month date range.
324
-	 *
325
-	 * @return array The appropriate date range.
326
-	 */
327
-	public function get_month_date_range() {
328
-
329
-		// Set the previous date range.
330
-		$this->previous_range = array(
331
-			'period' => 'last_month',
332
-		);
333
-
334
-		// Generate the report.
335
-		return array(
336
-			'before' => date( 'Y-m-01', strtotime( 'next month', current_time( 'timestamp' ) ) ),
337
-			'after'  => date( 'Y-m-t', strtotime( 'last month', current_time( 'timestamp' ) ) ),
338
-		);
339
-
340
-	}
341
-
342
-	/**
343
-	 * Retrieves last month's date range.
344
-	 *
345
-	 * @return array The appropriate date range.
346
-	 */
347
-	public function get_last_month_date_range() {
348
-
349
-		// Set the previous date range.
350
-		$this->previous_range = array(
351
-			'period' => 'custom',
352
-			'before' => date( 'Y-m-1', strtotime( 'last month', current_time( 'timestamp' ) ) ),
353
-			'after'  => date( 'Y-m-t', strtotime( '-3 months', current_time( 'timestamp' ) ) ),
354
-		);
355
-
356
-		// Generate the report.
357
-		return array(
358
-			'before' => date( 'Y-m-1', current_time( 'timestamp' ) ),
359
-			'after'  => date( 'Y-m-t', strtotime( '-2 months', current_time( 'timestamp' ) ) ),
360
-		);
361
-
362
-	}
363
-
364
-	/**
365
-	 * Retrieves this quarter date range.
366
-	 *
367
-	 * @return array The available quarters.
368
-	 */
369
-	public function get_quarters() {
370
-
371
-		$last_year = (int) date( 'Y' ) - 1;
372
-		$next_year = (int) date( 'Y' ) + 1;
373
-		$year      = (int) date( 'Y' );
374
-		return array(
375
-
376
-			array(
377
-				'after'  => "$last_year-06-30",
378
-				'before' => "$last_year-10-01",
379
-			),
380
-
381
-			array(
382
-				'before' => "$year-01-01",
383
-				'after'  => "$last_year-09-30",
384
-			),
385
-
386
-			array(
387
-				'before' => "$year-04-01",
388
-				'after'  => "$last_year-12-31",
389
-			),
390
-
391
-			array(
392
-				'before' => "$year-07-01",
393
-				'after'  => "$year-03-31",
394
-			),
395
-
396
-			array(
397
-				'after'  => "$year-06-30",
398
-				'before' => "$year-10-01",
399
-			),
400
-
401
-			array(
402
-				'before' => "$next_year-01-01",
403
-				'after'  => "$year-09-30",
404
-			),
405
-
406
-		);
407
-
408
-	}
409
-
410
-	/**
411
-	 * Retrieves the current quater.
412
-	 *
413
-	 * @return int The current quarter.
414
-	 */
415
-	public function get_quarter() {
416
-
417
-		$month    = (int) date( 'n', current_time( 'timestamp' ) );
418
-		$quarters = array( 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 );
419
-		return $quarters[ $month - 1 ];
420
-
421
-	}
422
-
423
-	/**
424
-	 * Retrieves this quarter date range.
425
-	 *
426
-	 * @return array The appropriate date range.
427
-	 */
428
-	public function get_quarter_date_range() {
429
-
430
-		// Set the previous date range.
431
-		$this->previous_range = array(
432
-			'period' => 'last_quarter',
433
-		);
434
-
435
-		// Generate the report.
436
-		$quarters = $this->get_quarters();
437
-		return $quarters[ $this->get_quarter() + 1 ];
438
-
439
-	}
440
-
441
-	/**
442
-	 * Retrieves last quarter's date range.
443
-	 *
444
-	 * @return array The appropriate date range.
445
-	 */
446
-	public function get_last_quarter_date_range() {
447
-
448
-		$quarters = $this->get_quarters();
449
-		$quarter  = $this->get_quarter();
450
-
451
-		// Set the previous date range.
452
-		$this->previous_range = array_merge(
453
-			$quarters[ $quarter - 1 ],
454
-			array( 'period' => 'custom' )
455
-		);
456
-
457
-		// Generate the report.
458
-		return $quarters[ $quarter ];
459
-
460
-	}
461
-
462
-	/**
463
-	 * Retrieves this year date range.
464
-	 *
465
-	 * @return array The appropriate date range.
466
-	 */
467
-	public function get_year_date_range() {
468
-
469
-		$this->groupby = 'month';
470
-
471
-		// Set the previous date range.
472
-		$this->previous_range = array(
473
-			'period' => 'last_year',
474
-		);
475
-
476
-		// Generate the report.
477
-		return array(
478
-			'before' => date( 'Y-m-d', strtotime( 'next year January 1st', current_time( 'timestamp' ) ) ),
479
-			'after'  => date( 'Y-m-d', strtotime( 'last year December 31st', current_time( 'timestamp' ) ) ),
480
-		);
481
-
482
-	}
483
-
484
-	/**
485
-	 * Retrieves last year date range.
486
-	 *
487
-	 * @return array The appropriate date range.
488
-	 */
489
-	public function get_last_year_date_range() {
490
-
491
-		$this->groupby = 'month';
492
-
493
-		// Set the previous date range.
494
-		$year          = (int) date( 'Y' ) - 3;
495
-		$this->previous_range = array(
496
-			'period' => 'custom',
497
-			'before' => date( 'Y-m-d', strtotime( 'first day of january last year', current_time( 'timestamp' ) ) ),
498
-			'after'  => "$year-12-31",
499
-		);
500
-
501
-		// Generate the report.
502
-		$year          = (int) date( 'Y' ) - 2;
503
-		return array(
504
-			'after'  => "$year-12-31",
505
-			'before' => date( 'Y-m-d', strtotime( 'first day of january this year', current_time( 'timestamp' ) ) ),
506
-		);
507
-
508
-	}
509
-
510
-	/**
511
-	 * Prepare a the request date for SQL usage.
512
-	 *
513
-	 * @param WP_REST_Request $request Request object.
514
-	 * @param string $date_field The date field.
515
-	 * @return string The appropriate SQL.
516
-	 */
517
-	public function get_date_range_sql( $request, $date_field ) {
518
-		global $wpdb;
519
-
520
-		$sql = '1=1';
521
-		$range = $this->get_date_range( $request );
522
-
523
-		if ( ! empty( $range['after'] ) ) {
524
-			$sql .= ' AND ' . $wpdb->prepare(
525
-				"$date_field > %s",
526
-				$range['after']
527
-			);
528
-		}
529
-
530
-		if ( ! empty( $range['before'] ) ) {
531
-			$sql .= ' AND ' . $wpdb->prepare(
532
-				"$date_field < %s",
533
-				$range['before']
534
-			);
535
-		}
536
-
537
-		return $sql;
538
-
539
-	}
540
-
541
-	/**
542
-	 * Prepares a group by query.
543
-	 *
544
-	 * @param string $date_field The date field.
545
-	 * @return string The appropriate SQL.
546
-	 */
547
-	public function get_group_by_sql( $date_field ) {
548
-
549
-		if ( 'day' === $this->groupby ) {
550
-			return "YEAR($date_field), MONTH($date_field), DAY($date_field)";
551
-		}
552
-
553
-		return "YEAR($date_field), MONTH($date_field)";
554
-	}
555
-
556
-	/**
557
-	 * Get the query params for collections.
558
-	 *
559
-	 * @return array
560
-	 */
561
-	public function get_collection_params() {
562
-		return array(
563
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
564
-			'period'  => array(
565
-				'description'       => __( 'Limit to results of a specific period.', 'invoicing' ),
566
-				'type'              => 'string',
567
-				'enum'              => array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year', 'quarter', 'last_quarter' ),
568
-				'validate_callback' => 'rest_validate_request_arg',
569
-				'sanitize_callback' => 'sanitize_text_field',
570
-				'default'           => '7_days',
571
-			),
572
-			'after'   => array(
573
-				/* translators: %s: date format */
574
-				'description'       => sprintf( __( 'Limit to results after a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
575
-				'type'              => 'string',
576
-				'format'            => 'date',
577
-				'validate_callback' => 'rest_validate_request_arg',
578
-				'sanitize_callback' => 'sanitize_text_field',
579
-				'default'           => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
580
-			),
581
-			'before'  => array(
582
-				/* translators: %s: date format */
583
-				'description'       => sprintf( __( 'Limit to results before a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
584
-				'type'              => 'string',
585
-				'format'            => 'date',
586
-				'validate_callback' => 'rest_validate_request_arg',
587
-				'sanitize_callback' => 'sanitize_text_field',
588
-				'default'           => date( 'Y-m-d', current_time( 'timestamp' ) ),
589
-			),
590
-		);
591
-	}
19
+    /**
20
+     * Group response items by day or month.
21
+     *
22
+     * @var string
23
+     */
24
+    public $groupby = 'day';
25
+
26
+    /**
27
+     * Returns an array with arguments to request the previous report.
28
+     *
29
+     * @var array
30
+     */
31
+    public $previous_range = array();
32
+
33
+    /**
34
+     * The period interval.
35
+     *
36
+     * @var int
37
+     */
38
+    public $interval;
39
+
40
+    /**
41
+     * Retrieves the before and after dates.
42
+     *
43
+     * @param WP_REST_Request $request Request object.
44
+     * @return array The appropriate date range.
45
+     */
46
+    public function get_date_range( $request ) {
47
+
48
+        // If not supported, assume all time.
49
+        if ( ! in_array( $request['period'], array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year' ) ) ) {
50
+            $request['period'] = '7_days';
51
+        }
52
+
53
+        $date_range = call_user_func( array( $this, 'get_' . $request['period'] . '_date_range' ), $request );
54
+        $this->prepare_interval( $date_range );
55
+
56
+        return $date_range;
57
+
58
+    }
59
+
60
+    /**
61
+     * Groups by month or days.
62
+     *
63
+     * @param array $range Date range.
64
+     * @return array The appropriate date range.
65
+     */
66
+    public function prepare_interval( $range ) {
67
+
68
+        $before = strtotime( $range['before'] ) - DAY_IN_SECONDS;
69
+        $after  = strtotime( $range['after'] ) + DAY_IN_SECONDS;
70
+        if ( 'day' === $this->groupby ) {
71
+            $difference     = max( DAY_IN_SECONDS, ( DAY_IN_SECONDS + $before - $after ) ); // Prevent division by 0;
72
+            $this->interval = absint( ceil( max( 1, $difference / DAY_IN_SECONDS ) ) );
73
+            return;
74
+        }
75
+
76
+        $this->interval = 0;
77
+        $min_date       = strtotime( date( 'Y-m-01', $after ) );
78
+
79
+        while ( $min_date <= $before ) {
80
+            $this->interval ++;
81
+            $min_date = strtotime( '+1 MONTH', $min_date );
82
+        }
83
+
84
+        $this->interval = max( 1, $this->interval );
85
+
86
+    }
87
+
88
+    /**
89
+     * Retrieves a custom date range.
90
+     *
91
+     * @param WP_REST_Request $request Request object.
92
+     * @return array The appropriate date range.
93
+     */
94
+    public function get_custom_date_range( $request ) {
95
+
96
+        $after  = max( strtotime( '-20 years' ), strtotime( sanitize_text_field( $request['after'] ) ) );
97
+        $before = strtotime( '+1 day', current_time( 'timestamp' ) );
98
+
99
+        if ( ! empty( $request['before'] ) ) {
100
+            $before  = min( $before, strtotime( sanitize_text_field( $request['before'] ) ) );
101
+        }
102
+
103
+        // 3 months max for day view
104
+        if ( floor( ( $before - $after ) / MONTH_IN_SECONDS ) > 3 ) {
105
+            $this->groupby = 'month';
106
+        }
107
+
108
+        // Set the previous date range.
109
+        $difference           = $before - $after;
110
+        $this->previous_range = array(
111
+            'period' => 'custom',
112
+            'before' => date( 'Y-m-d', $before - $difference ),
113
+            'after'  => date( 'Y-m-d', $after - $difference ),
114
+        );
115
+
116
+        // Generate the report.
117
+        return array(
118
+            'before' => date( 'Y-m-d', $before ),
119
+            'after'  => date( 'Y-m-d', $after ),
120
+        );
121
+
122
+    }
123
+
124
+    /**
125
+     * Retrieves todays date range.
126
+     *
127
+     * @return array The appropriate date range.
128
+     */
129
+    public function get_today_date_range() {
130
+
131
+        // Set the previous date range.
132
+        $this->previous_range = array(
133
+            'period' => 'yesterday',
134
+        );
135
+
136
+        // Generate the report.
137
+        return array(
138
+            'before' => date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ),
139
+            'after'  => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
140
+        );
141
+
142
+    }
143
+
144
+    /**
145
+     * Retrieves yesterdays date range.
146
+     *
147
+     * @return array The appropriate date range.
148
+     */
149
+    public function get_yesterday_date_range() {
150
+
151
+        // Set the previous date range.
152
+        $this->previous_range = array(
153
+            'period' => 'custom',
154
+            'before' => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
155
+            'after'  => date( 'Y-m-d', strtotime( '-3 days', current_time( 'timestamp' ) ) ),
156
+        );
157
+
158
+        // Generate the report.
159
+        return array(
160
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
161
+            'after'  => date( 'Y-m-d', strtotime( '-2 days', current_time( 'timestamp' ) ) ),
162
+        );
163
+
164
+    }
165
+
166
+    /**
167
+     * Retrieves this week's date range.
168
+     *
169
+     * @return array The appropriate date range.
170
+     */
171
+    public function get_week_date_range() {
172
+
173
+        // Set the previous date range.
174
+        $this->previous_range = array(
175
+            'period' => 'last_week',
176
+        );
177
+
178
+        // Generate the report.
179
+        return array(
180
+            'before' => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) + 8 * DAY_IN_SECONDS ),
181
+            'after'  => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) ),
182
+        );
183
+
184
+    }
185
+
186
+    /**
187
+     * Retrieves last week's date range.
188
+     *
189
+     * @return array The appropriate date range.
190
+     */
191
+    public function get_last_week_date_range() {
192
+
193
+        // Set the previous date range.
194
+        $this->previous_range = array(
195
+            'period' => 'custom',
196
+            'before' => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) ),
197
+            'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - 8 * DAY_IN_SECONDS ),
198
+        );
199
+
200
+        // Generate the report.
201
+        return array(
202
+            'before' => date( 'Y-m-d', strtotime( 'monday this week', current_time( 'timestamp' ) ) ),
203
+            'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - DAY_IN_SECONDS ),
204
+        );
205
+
206
+    }
207
+
208
+    /**
209
+     * Retrieves last 7 days date range.
210
+     *
211
+     * @return array The appropriate date range.
212
+     */
213
+    public function get_7_days_date_range() {
214
+
215
+        // Set the previous date range.
216
+        $this->previous_range = array(
217
+            'period' => 'custom',
218
+            'before' => date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) ),
219
+            'after'  => date( 'Y-m-d', strtotime( '-15 days', current_time( 'timestamp' ) ) ),
220
+        );
221
+
222
+        // Generate the report.
223
+        return array(
224
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
225
+            'after'  => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
226
+        );
227
+
228
+    }
229
+
230
+    /**
231
+     * Retrieves last 30 days date range.
232
+     *
233
+     * @return array The appropriate date range.
234
+     */
235
+    public function get_30_days_date_range() {
236
+
237
+        // Set the previous date range.
238
+        $this->previous_range = array(
239
+            'period' => 'custom',
240
+            'before' => date( 'Y-m-d', strtotime( '-30 days', current_time( 'timestamp' ) ) ),
241
+            'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
242
+        );
243
+
244
+        // Generate the report.
245
+        return array(
246
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
247
+            'after'  => date( 'Y-m-d', strtotime( '-31 days', current_time( 'timestamp' ) ) ),
248
+        );
249
+
250
+    }
251
+
252
+    /**
253
+     * Retrieves last 90 days date range.
254
+     *
255
+     * @return array The appropriate date range.
256
+     */
257
+    public function get_90_days_date_range() {
258
+
259
+        $this->groupby = 'month';
260
+
261
+        // Set the previous date range.
262
+        $this->previous_range = array(
263
+            'period' => 'custom',
264
+            'before' => date( 'Y-m-d', strtotime( '-90 days', current_time( 'timestamp' ) ) ),
265
+            'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
266
+        );
267
+
268
+        // Generate the report.
269
+        return array(
270
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
271
+            'after'  => date( 'Y-m-d', strtotime( '-91 days', current_time( 'timestamp' ) ) ),
272
+        );
273
+
274
+    }
275
+
276
+    /**
277
+     * Retrieves last 180 days date range.
278
+     *
279
+     * @return array The appropriate date range.
280
+     */
281
+    public function get_180_days_date_range() {
282
+
283
+        $this->groupby = 'month';
284
+
285
+        // Set the previous date range.
286
+        $this->previous_range = array(
287
+            'period' => 'custom',
288
+            'before' => date( 'Y-m-d', strtotime( '-180 days', current_time( 'timestamp' ) ) ),
289
+            'after'  => date( 'Y-m-d', strtotime( '-361 days', current_time( 'timestamp' ) ) ),
290
+        );
291
+
292
+        // Generate the report.
293
+        return array(
294
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
295
+            'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
296
+        );
297
+
298
+    }
299
+
300
+    /**
301
+     * Retrieves last 60 days date range.
302
+     *
303
+     * @return array The appropriate date range.
304
+     */
305
+    public function get_60_days_date_range() {
306
+
307
+        // Set the previous date range.
308
+        $this->previous_range = array(
309
+            'period' => 'custom',
310
+            'before' => date( 'Y-m-d', strtotime( '-60 days', current_time( 'timestamp' ) ) ),
311
+            'after'  => date( 'Y-m-d', strtotime( '-121 days', current_time( 'timestamp' ) ) ),
312
+        );
313
+
314
+        // Generate the report.
315
+        return array(
316
+            'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
317
+            'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
318
+        );
319
+
320
+    }
321
+
322
+    /**
323
+     * Retrieves this month date range.
324
+     *
325
+     * @return array The appropriate date range.
326
+     */
327
+    public function get_month_date_range() {
328
+
329
+        // Set the previous date range.
330
+        $this->previous_range = array(
331
+            'period' => 'last_month',
332
+        );
333
+
334
+        // Generate the report.
335
+        return array(
336
+            'before' => date( 'Y-m-01', strtotime( 'next month', current_time( 'timestamp' ) ) ),
337
+            'after'  => date( 'Y-m-t', strtotime( 'last month', current_time( 'timestamp' ) ) ),
338
+        );
339
+
340
+    }
341
+
342
+    /**
343
+     * Retrieves last month's date range.
344
+     *
345
+     * @return array The appropriate date range.
346
+     */
347
+    public function get_last_month_date_range() {
348
+
349
+        // Set the previous date range.
350
+        $this->previous_range = array(
351
+            'period' => 'custom',
352
+            'before' => date( 'Y-m-1', strtotime( 'last month', current_time( 'timestamp' ) ) ),
353
+            'after'  => date( 'Y-m-t', strtotime( '-3 months', current_time( 'timestamp' ) ) ),
354
+        );
355
+
356
+        // Generate the report.
357
+        return array(
358
+            'before' => date( 'Y-m-1', current_time( 'timestamp' ) ),
359
+            'after'  => date( 'Y-m-t', strtotime( '-2 months', current_time( 'timestamp' ) ) ),
360
+        );
361
+
362
+    }
363
+
364
+    /**
365
+     * Retrieves this quarter date range.
366
+     *
367
+     * @return array The available quarters.
368
+     */
369
+    public function get_quarters() {
370
+
371
+        $last_year = (int) date( 'Y' ) - 1;
372
+        $next_year = (int) date( 'Y' ) + 1;
373
+        $year      = (int) date( 'Y' );
374
+        return array(
375
+
376
+            array(
377
+                'after'  => "$last_year-06-30",
378
+                'before' => "$last_year-10-01",
379
+            ),
380
+
381
+            array(
382
+                'before' => "$year-01-01",
383
+                'after'  => "$last_year-09-30",
384
+            ),
385
+
386
+            array(
387
+                'before' => "$year-04-01",
388
+                'after'  => "$last_year-12-31",
389
+            ),
390
+
391
+            array(
392
+                'before' => "$year-07-01",
393
+                'after'  => "$year-03-31",
394
+            ),
395
+
396
+            array(
397
+                'after'  => "$year-06-30",
398
+                'before' => "$year-10-01",
399
+            ),
400
+
401
+            array(
402
+                'before' => "$next_year-01-01",
403
+                'after'  => "$year-09-30",
404
+            ),
405
+
406
+        );
407
+
408
+    }
409
+
410
+    /**
411
+     * Retrieves the current quater.
412
+     *
413
+     * @return int The current quarter.
414
+     */
415
+    public function get_quarter() {
416
+
417
+        $month    = (int) date( 'n', current_time( 'timestamp' ) );
418
+        $quarters = array( 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 );
419
+        return $quarters[ $month - 1 ];
420
+
421
+    }
422
+
423
+    /**
424
+     * Retrieves this quarter date range.
425
+     *
426
+     * @return array The appropriate date range.
427
+     */
428
+    public function get_quarter_date_range() {
429
+
430
+        // Set the previous date range.
431
+        $this->previous_range = array(
432
+            'period' => 'last_quarter',
433
+        );
434
+
435
+        // Generate the report.
436
+        $quarters = $this->get_quarters();
437
+        return $quarters[ $this->get_quarter() + 1 ];
438
+
439
+    }
440
+
441
+    /**
442
+     * Retrieves last quarter's date range.
443
+     *
444
+     * @return array The appropriate date range.
445
+     */
446
+    public function get_last_quarter_date_range() {
447
+
448
+        $quarters = $this->get_quarters();
449
+        $quarter  = $this->get_quarter();
450
+
451
+        // Set the previous date range.
452
+        $this->previous_range = array_merge(
453
+            $quarters[ $quarter - 1 ],
454
+            array( 'period' => 'custom' )
455
+        );
456
+
457
+        // Generate the report.
458
+        return $quarters[ $quarter ];
459
+
460
+    }
461
+
462
+    /**
463
+     * Retrieves this year date range.
464
+     *
465
+     * @return array The appropriate date range.
466
+     */
467
+    public function get_year_date_range() {
468
+
469
+        $this->groupby = 'month';
470
+
471
+        // Set the previous date range.
472
+        $this->previous_range = array(
473
+            'period' => 'last_year',
474
+        );
475
+
476
+        // Generate the report.
477
+        return array(
478
+            'before' => date( 'Y-m-d', strtotime( 'next year January 1st', current_time( 'timestamp' ) ) ),
479
+            'after'  => date( 'Y-m-d', strtotime( 'last year December 31st', current_time( 'timestamp' ) ) ),
480
+        );
481
+
482
+    }
483
+
484
+    /**
485
+     * Retrieves last year date range.
486
+     *
487
+     * @return array The appropriate date range.
488
+     */
489
+    public function get_last_year_date_range() {
490
+
491
+        $this->groupby = 'month';
492
+
493
+        // Set the previous date range.
494
+        $year          = (int) date( 'Y' ) - 3;
495
+        $this->previous_range = array(
496
+            'period' => 'custom',
497
+            'before' => date( 'Y-m-d', strtotime( 'first day of january last year', current_time( 'timestamp' ) ) ),
498
+            'after'  => "$year-12-31",
499
+        );
500
+
501
+        // Generate the report.
502
+        $year          = (int) date( 'Y' ) - 2;
503
+        return array(
504
+            'after'  => "$year-12-31",
505
+            'before' => date( 'Y-m-d', strtotime( 'first day of january this year', current_time( 'timestamp' ) ) ),
506
+        );
507
+
508
+    }
509
+
510
+    /**
511
+     * Prepare a the request date for SQL usage.
512
+     *
513
+     * @param WP_REST_Request $request Request object.
514
+     * @param string $date_field The date field.
515
+     * @return string The appropriate SQL.
516
+     */
517
+    public function get_date_range_sql( $request, $date_field ) {
518
+        global $wpdb;
519
+
520
+        $sql = '1=1';
521
+        $range = $this->get_date_range( $request );
522
+
523
+        if ( ! empty( $range['after'] ) ) {
524
+            $sql .= ' AND ' . $wpdb->prepare(
525
+                "$date_field > %s",
526
+                $range['after']
527
+            );
528
+        }
529
+
530
+        if ( ! empty( $range['before'] ) ) {
531
+            $sql .= ' AND ' . $wpdb->prepare(
532
+                "$date_field < %s",
533
+                $range['before']
534
+            );
535
+        }
536
+
537
+        return $sql;
538
+
539
+    }
540
+
541
+    /**
542
+     * Prepares a group by query.
543
+     *
544
+     * @param string $date_field The date field.
545
+     * @return string The appropriate SQL.
546
+     */
547
+    public function get_group_by_sql( $date_field ) {
548
+
549
+        if ( 'day' === $this->groupby ) {
550
+            return "YEAR($date_field), MONTH($date_field), DAY($date_field)";
551
+        }
552
+
553
+        return "YEAR($date_field), MONTH($date_field)";
554
+    }
555
+
556
+    /**
557
+     * Get the query params for collections.
558
+     *
559
+     * @return array
560
+     */
561
+    public function get_collection_params() {
562
+        return array(
563
+            'context' => $this->get_context_param( array( 'default' => 'view' ) ),
564
+            'period'  => array(
565
+                'description'       => __( 'Limit to results of a specific period.', 'invoicing' ),
566
+                'type'              => 'string',
567
+                'enum'              => array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year', 'quarter', 'last_quarter' ),
568
+                'validate_callback' => 'rest_validate_request_arg',
569
+                'sanitize_callback' => 'sanitize_text_field',
570
+                'default'           => '7_days',
571
+            ),
572
+            'after'   => array(
573
+                /* translators: %s: date format */
574
+                'description'       => sprintf( __( 'Limit to results after a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
575
+                'type'              => 'string',
576
+                'format'            => 'date',
577
+                'validate_callback' => 'rest_validate_request_arg',
578
+                'sanitize_callback' => 'sanitize_text_field',
579
+                'default'           => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
580
+            ),
581
+            'before'  => array(
582
+                /* translators: %s: date format */
583
+                'description'       => sprintf( __( 'Limit to results before a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
584
+                'type'              => 'string',
585
+                'format'            => 'date',
586
+                'validate_callback' => 'rest_validate_request_arg',
587
+                'sanitize_callback' => 'sanitize_text_field',
588
+                'default'           => date( 'Y-m-d', current_time( 'timestamp' ) ),
589
+            ),
590
+        );
591
+    }
592 592
 }
Please login to merge, or discard this patch.
Spacing   +93 added lines, -93 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  * @since   2.0.0
8 8
  */
9 9
 
10
-defined( 'ABSPATH' ) || exit;
10
+defined('ABSPATH') || exit;
11 11
 
12 12
 /**
13 13
  * GetPaid REST date based controller class.
@@ -43,15 +43,15 @@  discard block
 block discarded – undo
43 43
 	 * @param WP_REST_Request $request Request object.
44 44
 	 * @return array The appropriate date range.
45 45
 	 */
46
-	public function get_date_range( $request ) {
46
+	public function get_date_range($request) {
47 47
 
48 48
 		// If not supported, assume all time.
49
-		if ( ! in_array( $request['period'], array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year' ) ) ) {
49
+		if (!in_array($request['period'], array('custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year'))) {
50 50
 			$request['period'] = '7_days';
51 51
 		}
52 52
 
53
-		$date_range = call_user_func( array( $this, 'get_' . $request['period'] . '_date_range' ), $request );
54
-		$this->prepare_interval( $date_range );
53
+		$date_range = call_user_func(array($this, 'get_' . $request['period'] . '_date_range'), $request);
54
+		$this->prepare_interval($date_range);
55 55
 
56 56
 		return $date_range;
57 57
 
@@ -63,25 +63,25 @@  discard block
 block discarded – undo
63 63
 	 * @param array $range Date range.
64 64
 	 * @return array The appropriate date range.
65 65
 	 */
66
-	public function prepare_interval( $range ) {
66
+	public function prepare_interval($range) {
67 67
 
68
-		$before = strtotime( $range['before'] ) - DAY_IN_SECONDS;
69
-		$after  = strtotime( $range['after'] ) + DAY_IN_SECONDS;
70
-		if ( 'day' === $this->groupby ) {
71
-			$difference     = max( DAY_IN_SECONDS, ( DAY_IN_SECONDS + $before - $after ) ); // Prevent division by 0;
72
-			$this->interval = absint( ceil( max( 1, $difference / DAY_IN_SECONDS ) ) );
68
+		$before = strtotime($range['before']) - DAY_IN_SECONDS;
69
+		$after  = strtotime($range['after']) + DAY_IN_SECONDS;
70
+		if ('day' === $this->groupby) {
71
+			$difference     = max(DAY_IN_SECONDS, (DAY_IN_SECONDS + $before - $after)); // Prevent division by 0;
72
+			$this->interval = absint(ceil(max(1, $difference / DAY_IN_SECONDS)));
73 73
 			return;
74 74
 		}
75 75
 
76 76
 		$this->interval = 0;
77
-		$min_date       = strtotime( date( 'Y-m-01', $after ) );
77
+		$min_date       = strtotime(date('Y-m-01', $after));
78 78
 
79
-		while ( $min_date <= $before ) {
80
-			$this->interval ++;
81
-			$min_date = strtotime( '+1 MONTH', $min_date );
79
+		while ($min_date <= $before) {
80
+			$this->interval++;
81
+			$min_date = strtotime('+1 MONTH', $min_date);
82 82
 		}
83 83
 
84
-		$this->interval = max( 1, $this->interval );
84
+		$this->interval = max(1, $this->interval);
85 85
 
86 86
 	}
87 87
 
@@ -91,17 +91,17 @@  discard block
 block discarded – undo
91 91
 	 * @param WP_REST_Request $request Request object.
92 92
 	 * @return array The appropriate date range.
93 93
 	 */
94
-	public function get_custom_date_range( $request ) {
94
+	public function get_custom_date_range($request) {
95 95
 
96
-		$after  = max( strtotime( '-20 years' ), strtotime( sanitize_text_field( $request['after'] ) ) );
97
-		$before = strtotime( '+1 day', current_time( 'timestamp' ) );
96
+		$after  = max(strtotime('-20 years'), strtotime(sanitize_text_field($request['after'])));
97
+		$before = strtotime('+1 day', current_time('timestamp'));
98 98
 
99
-		if ( ! empty( $request['before'] ) ) {
100
-			$before  = min( $before, strtotime( sanitize_text_field( $request['before'] ) ) );
99
+		if (!empty($request['before'])) {
100
+			$before = min($before, strtotime(sanitize_text_field($request['before'])));
101 101
 		}
102 102
 
103 103
 		// 3 months max for day view
104
-		if ( floor( ( $before - $after ) / MONTH_IN_SECONDS ) > 3 ) {
104
+		if (floor(($before - $after) / MONTH_IN_SECONDS) > 3) {
105 105
 			$this->groupby = 'month';
106 106
 		}
107 107
 
@@ -109,14 +109,14 @@  discard block
 block discarded – undo
109 109
 		$difference           = $before - $after;
110 110
 		$this->previous_range = array(
111 111
 			'period' => 'custom',
112
-			'before' => date( 'Y-m-d', $before - $difference ),
113
-			'after'  => date( 'Y-m-d', $after - $difference ),
112
+			'before' => date('Y-m-d', $before - $difference),
113
+			'after'  => date('Y-m-d', $after - $difference),
114 114
 		);
115 115
 
116 116
 		// Generate the report.
117 117
 		return array(
118
-			'before' => date( 'Y-m-d', $before ),
119
-			'after'  => date( 'Y-m-d', $after ),
118
+			'before' => date('Y-m-d', $before),
119
+			'after'  => date('Y-m-d', $after),
120 120
 		);
121 121
 
122 122
 	}
@@ -135,8 +135,8 @@  discard block
 block discarded – undo
135 135
 
136 136
 		// Generate the report.
137 137
 		return array(
138
-			'before' => date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) ),
139
-			'after'  => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
138
+			'before' => date('Y-m-d', strtotime('+1 day', current_time('timestamp'))),
139
+			'after'  => date('Y-m-d', strtotime('-1 day', current_time('timestamp'))),
140 140
 		);
141 141
 
142 142
 	}
@@ -151,14 +151,14 @@  discard block
 block discarded – undo
151 151
 		// Set the previous date range.
152 152
 		$this->previous_range = array(
153 153
 			'period' => 'custom',
154
-			'before' => date( 'Y-m-d', strtotime( '-1 day', current_time( 'timestamp' ) ) ),
155
-			'after'  => date( 'Y-m-d', strtotime( '-3 days', current_time( 'timestamp' ) ) ),
154
+			'before' => date('Y-m-d', strtotime('-1 day', current_time('timestamp'))),
155
+			'after'  => date('Y-m-d', strtotime('-3 days', current_time('timestamp'))),
156 156
 		);
157 157
 
158 158
 		// Generate the report.
159 159
 		return array(
160
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
161
-			'after'  => date( 'Y-m-d', strtotime( '-2 days', current_time( 'timestamp' ) ) ),
160
+			'before' => date('Y-m-d', current_time('timestamp')),
161
+			'after'  => date('Y-m-d', strtotime('-2 days', current_time('timestamp'))),
162 162
 		);
163 163
 
164 164
 	}
@@ -177,8 +177,8 @@  discard block
 block discarded – undo
177 177
 
178 178
 		// Generate the report.
179 179
 		return array(
180
-			'before' => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) + 8 * DAY_IN_SECONDS ),
181
-			'after'  => date( 'Y-m-d', strtotime( 'sunday last week', current_time( 'timestamp' ) ) ),
180
+			'before' => date('Y-m-d', strtotime('sunday last week', current_time('timestamp')) + 8 * DAY_IN_SECONDS),
181
+			'after'  => date('Y-m-d', strtotime('sunday last week', current_time('timestamp'))),
182 182
 		);
183 183
 
184 184
 	}
@@ -193,14 +193,14 @@  discard block
 block discarded – undo
193 193
 		// Set the previous date range.
194 194
 		$this->previous_range = array(
195 195
 			'period' => 'custom',
196
-			'before' => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) ),
197
-			'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - 8 * DAY_IN_SECONDS ),
196
+			'before' => date('Y-m-d', strtotime('monday last week', current_time('timestamp'))),
197
+			'after'  => date('Y-m-d', strtotime('monday last week', current_time('timestamp')) - 8 * DAY_IN_SECONDS),
198 198
 		);
199 199
 
200 200
 		// Generate the report.
201 201
 		return array(
202
-			'before' => date( 'Y-m-d', strtotime( 'monday this week', current_time( 'timestamp' ) ) ),
203
-			'after'  => date( 'Y-m-d', strtotime( 'monday last week', current_time( 'timestamp' ) ) - DAY_IN_SECONDS ),
202
+			'before' => date('Y-m-d', strtotime('monday this week', current_time('timestamp'))),
203
+			'after'  => date('Y-m-d', strtotime('monday last week', current_time('timestamp')) - DAY_IN_SECONDS),
204 204
 		);
205 205
 
206 206
 	}
@@ -215,14 +215,14 @@  discard block
 block discarded – undo
215 215
 		// Set the previous date range.
216 216
 		$this->previous_range = array(
217 217
 			'period' => 'custom',
218
-			'before' => date( 'Y-m-d', strtotime( '-7 days', current_time( 'timestamp' ) ) ),
219
-			'after'  => date( 'Y-m-d', strtotime( '-15 days', current_time( 'timestamp' ) ) ),
218
+			'before' => date('Y-m-d', strtotime('-7 days', current_time('timestamp'))),
219
+			'after'  => date('Y-m-d', strtotime('-15 days', current_time('timestamp'))),
220 220
 		);
221 221
 
222 222
 		// Generate the report.
223 223
 		return array(
224
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
225
-			'after'  => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
224
+			'before' => date('Y-m-d', current_time('timestamp')),
225
+			'after'  => date('Y-m-d', strtotime('-8 days', current_time('timestamp'))),
226 226
 		);
227 227
 
228 228
 	}
@@ -237,14 +237,14 @@  discard block
 block discarded – undo
237 237
 		// Set the previous date range.
238 238
 		$this->previous_range = array(
239 239
 			'period' => 'custom',
240
-			'before' => date( 'Y-m-d', strtotime( '-30 days', current_time( 'timestamp' ) ) ),
241
-			'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
240
+			'before' => date('Y-m-d', strtotime('-30 days', current_time('timestamp'))),
241
+			'after'  => date('Y-m-d', strtotime('-61 days', current_time('timestamp'))),
242 242
 		);
243 243
 
244 244
 		// Generate the report.
245 245
 		return array(
246
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
247
-			'after'  => date( 'Y-m-d', strtotime( '-31 days', current_time( 'timestamp' ) ) ),
246
+			'before' => date('Y-m-d', current_time('timestamp')),
247
+			'after'  => date('Y-m-d', strtotime('-31 days', current_time('timestamp'))),
248 248
 		);
249 249
 
250 250
 	}
@@ -261,14 +261,14 @@  discard block
 block discarded – undo
261 261
 		// Set the previous date range.
262 262
 		$this->previous_range = array(
263 263
 			'period' => 'custom',
264
-			'before' => date( 'Y-m-d', strtotime( '-90 days', current_time( 'timestamp' ) ) ),
265
-			'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
264
+			'before' => date('Y-m-d', strtotime('-90 days', current_time('timestamp'))),
265
+			'after'  => date('Y-m-d', strtotime('-181 days', current_time('timestamp'))),
266 266
 		);
267 267
 
268 268
 		// Generate the report.
269 269
 		return array(
270
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
271
-			'after'  => date( 'Y-m-d', strtotime( '-91 days', current_time( 'timestamp' ) ) ),
270
+			'before' => date('Y-m-d', current_time('timestamp')),
271
+			'after'  => date('Y-m-d', strtotime('-91 days', current_time('timestamp'))),
272 272
 		);
273 273
 
274 274
 	}
@@ -285,14 +285,14 @@  discard block
 block discarded – undo
285 285
 		// Set the previous date range.
286 286
 		$this->previous_range = array(
287 287
 			'period' => 'custom',
288
-			'before' => date( 'Y-m-d', strtotime( '-180 days', current_time( 'timestamp' ) ) ),
289
-			'after'  => date( 'Y-m-d', strtotime( '-361 days', current_time( 'timestamp' ) ) ),
288
+			'before' => date('Y-m-d', strtotime('-180 days', current_time('timestamp'))),
289
+			'after'  => date('Y-m-d', strtotime('-361 days', current_time('timestamp'))),
290 290
 		);
291 291
 
292 292
 		// Generate the report.
293 293
 		return array(
294
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
295
-			'after'  => date( 'Y-m-d', strtotime( '-181 days', current_time( 'timestamp' ) ) ),
294
+			'before' => date('Y-m-d', current_time('timestamp')),
295
+			'after'  => date('Y-m-d', strtotime('-181 days', current_time('timestamp'))),
296 296
 		);
297 297
 
298 298
 	}
@@ -307,14 +307,14 @@  discard block
 block discarded – undo
307 307
 		// Set the previous date range.
308 308
 		$this->previous_range = array(
309 309
 			'period' => 'custom',
310
-			'before' => date( 'Y-m-d', strtotime( '-60 days', current_time( 'timestamp' ) ) ),
311
-			'after'  => date( 'Y-m-d', strtotime( '-121 days', current_time( 'timestamp' ) ) ),
310
+			'before' => date('Y-m-d', strtotime('-60 days', current_time('timestamp'))),
311
+			'after'  => date('Y-m-d', strtotime('-121 days', current_time('timestamp'))),
312 312
 		);
313 313
 
314 314
 		// Generate the report.
315 315
 		return array(
316
-			'before' => date( 'Y-m-d', current_time( 'timestamp' ) ),
317
-			'after'  => date( 'Y-m-d', strtotime( '-61 days', current_time( 'timestamp' ) ) ),
316
+			'before' => date('Y-m-d', current_time('timestamp')),
317
+			'after'  => date('Y-m-d', strtotime('-61 days', current_time('timestamp'))),
318 318
 		);
319 319
 
320 320
 	}
@@ -333,8 +333,8 @@  discard block
 block discarded – undo
333 333
 
334 334
 		// Generate the report.
335 335
 		return array(
336
-			'before' => date( 'Y-m-01', strtotime( 'next month', current_time( 'timestamp' ) ) ),
337
-			'after'  => date( 'Y-m-t', strtotime( 'last month', current_time( 'timestamp' ) ) ),
336
+			'before' => date('Y-m-01', strtotime('next month', current_time('timestamp'))),
337
+			'after'  => date('Y-m-t', strtotime('last month', current_time('timestamp'))),
338 338
 		);
339 339
 
340 340
 	}
@@ -349,14 +349,14 @@  discard block
 block discarded – undo
349 349
 		// Set the previous date range.
350 350
 		$this->previous_range = array(
351 351
 			'period' => 'custom',
352
-			'before' => date( 'Y-m-1', strtotime( 'last month', current_time( 'timestamp' ) ) ),
353
-			'after'  => date( 'Y-m-t', strtotime( '-3 months', current_time( 'timestamp' ) ) ),
352
+			'before' => date('Y-m-1', strtotime('last month', current_time('timestamp'))),
353
+			'after'  => date('Y-m-t', strtotime('-3 months', current_time('timestamp'))),
354 354
 		);
355 355
 
356 356
 		// Generate the report.
357 357
 		return array(
358
-			'before' => date( 'Y-m-1', current_time( 'timestamp' ) ),
359
-			'after'  => date( 'Y-m-t', strtotime( '-2 months', current_time( 'timestamp' ) ) ),
358
+			'before' => date('Y-m-1', current_time('timestamp')),
359
+			'after'  => date('Y-m-t', strtotime('-2 months', current_time('timestamp'))),
360 360
 		);
361 361
 
362 362
 	}
@@ -368,9 +368,9 @@  discard block
 block discarded – undo
368 368
 	 */
369 369
 	public function get_quarters() {
370 370
 
371
-		$last_year = (int) date( 'Y' ) - 1;
372
-		$next_year = (int) date( 'Y' ) + 1;
373
-		$year      = (int) date( 'Y' );
371
+		$last_year = (int) date('Y') - 1;
372
+		$next_year = (int) date('Y') + 1;
373
+		$year      = (int) date('Y');
374 374
 		return array(
375 375
 
376 376
 			array(
@@ -414,9 +414,9 @@  discard block
 block discarded – undo
414 414
 	 */
415 415
 	public function get_quarter() {
416 416
 
417
-		$month    = (int) date( 'n', current_time( 'timestamp' ) );
418
-		$quarters = array( 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4 );
419
-		return $quarters[ $month - 1 ];
417
+		$month    = (int) date('n', current_time('timestamp'));
418
+		$quarters = array(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4);
419
+		return $quarters[$month - 1];
420 420
 
421 421
 	}
422 422
 
@@ -434,7 +434,7 @@  discard block
 block discarded – undo
434 434
 
435 435
 		// Generate the report.
436 436
 		$quarters = $this->get_quarters();
437
-		return $quarters[ $this->get_quarter() + 1 ];
437
+		return $quarters[$this->get_quarter() + 1];
438 438
 
439 439
 	}
440 440
 
@@ -450,12 +450,12 @@  discard block
 block discarded – undo
450 450
 
451 451
 		// Set the previous date range.
452 452
 		$this->previous_range = array_merge(
453
-			$quarters[ $quarter - 1 ],
454
-			array( 'period' => 'custom' )
453
+			$quarters[$quarter - 1],
454
+			array('period' => 'custom')
455 455
 		);
456 456
 
457 457
 		// Generate the report.
458
-		return $quarters[ $quarter ];
458
+		return $quarters[$quarter];
459 459
 
460 460
 	}
461 461
 
@@ -475,8 +475,8 @@  discard block
 block discarded – undo
475 475
 
476 476
 		// Generate the report.
477 477
 		return array(
478
-			'before' => date( 'Y-m-d', strtotime( 'next year January 1st', current_time( 'timestamp' ) ) ),
479
-			'after'  => date( 'Y-m-d', strtotime( 'last year December 31st', current_time( 'timestamp' ) ) ),
478
+			'before' => date('Y-m-d', strtotime('next year January 1st', current_time('timestamp'))),
479
+			'after'  => date('Y-m-d', strtotime('last year December 31st', current_time('timestamp'))),
480 480
 		);
481 481
 
482 482
 	}
@@ -491,18 +491,18 @@  discard block
 block discarded – undo
491 491
 		$this->groupby = 'month';
492 492
 
493 493
 		// Set the previous date range.
494
-		$year          = (int) date( 'Y' ) - 3;
494
+		$year          = (int) date('Y') - 3;
495 495
 		$this->previous_range = array(
496 496
 			'period' => 'custom',
497
-			'before' => date( 'Y-m-d', strtotime( 'first day of january last year', current_time( 'timestamp' ) ) ),
497
+			'before' => date('Y-m-d', strtotime('first day of january last year', current_time('timestamp'))),
498 498
 			'after'  => "$year-12-31",
499 499
 		);
500 500
 
501 501
 		// Generate the report.
502
-		$year          = (int) date( 'Y' ) - 2;
502
+		$year = (int) date('Y') - 2;
503 503
 		return array(
504 504
 			'after'  => "$year-12-31",
505
-			'before' => date( 'Y-m-d', strtotime( 'first day of january this year', current_time( 'timestamp' ) ) ),
505
+			'before' => date('Y-m-d', strtotime('first day of january this year', current_time('timestamp'))),
506 506
 		);
507 507
 
508 508
 	}
@@ -514,20 +514,20 @@  discard block
 block discarded – undo
514 514
 	 * @param string $date_field The date field.
515 515
 	 * @return string The appropriate SQL.
516 516
 	 */
517
-	public function get_date_range_sql( $request, $date_field ) {
517
+	public function get_date_range_sql($request, $date_field) {
518 518
 		global $wpdb;
519 519
 
520 520
 		$sql = '1=1';
521
-		$range = $this->get_date_range( $request );
521
+		$range = $this->get_date_range($request);
522 522
 
523
-		if ( ! empty( $range['after'] ) ) {
523
+		if (!empty($range['after'])) {
524 524
 			$sql .= ' AND ' . $wpdb->prepare(
525 525
 				"$date_field > %s",
526 526
 				$range['after']
527 527
 			);
528 528
 		}
529 529
 
530
-		if ( ! empty( $range['before'] ) ) {
530
+		if (!empty($range['before'])) {
531 531
 			$sql .= ' AND ' . $wpdb->prepare(
532 532
 				"$date_field < %s",
533 533
 				$range['before']
@@ -544,9 +544,9 @@  discard block
 block discarded – undo
544 544
 	 * @param string $date_field The date field.
545 545
 	 * @return string The appropriate SQL.
546 546
 	 */
547
-	public function get_group_by_sql( $date_field ) {
547
+	public function get_group_by_sql($date_field) {
548 548
 
549
-		if ( 'day' === $this->groupby ) {
549
+		if ('day' === $this->groupby) {
550 550
 			return "YEAR($date_field), MONTH($date_field), DAY($date_field)";
551 551
 		}
552 552
 
@@ -560,32 +560,32 @@  discard block
 block discarded – undo
560 560
 	 */
561 561
 	public function get_collection_params() {
562 562
 		return array(
563
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
563
+			'context' => $this->get_context_param(array('default' => 'view')),
564 564
 			'period'  => array(
565
-				'description'       => __( 'Limit to results of a specific period.', 'invoicing' ),
565
+				'description'       => __('Limit to results of a specific period.', 'invoicing'),
566 566
 				'type'              => 'string',
567
-				'enum'              => array( 'custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year', 'quarter', 'last_quarter' ),
567
+				'enum'              => array('custom', 'today', 'yesterday', 'week', 'last_week', '7_days', '30_days', '60_days', '90_days', '180_days', 'month', 'last_month', 'quarter', 'last_quarter', 'year', 'last_year', 'quarter', 'last_quarter'),
568 568
 				'validate_callback' => 'rest_validate_request_arg',
569 569
 				'sanitize_callback' => 'sanitize_text_field',
570 570
 				'default'           => '7_days',
571 571
 			),
572 572
 			'after'   => array(
573 573
 				/* translators: %s: date format */
574
-				'description'       => sprintf( __( 'Limit to results after a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
574
+				'description'       => sprintf(__('Limit to results after a specific date, the date needs to be in the %s format.', 'invoicing'), 'YYYY-MM-DD'),
575 575
 				'type'              => 'string',
576 576
 				'format'            => 'date',
577 577
 				'validate_callback' => 'rest_validate_request_arg',
578 578
 				'sanitize_callback' => 'sanitize_text_field',
579
-				'default'           => date( 'Y-m-d', strtotime( '-8 days', current_time( 'timestamp' ) ) ),
579
+				'default'           => date('Y-m-d', strtotime('-8 days', current_time('timestamp'))),
580 580
 			),
581 581
 			'before'  => array(
582 582
 				/* translators: %s: date format */
583
-				'description'       => sprintf( __( 'Limit to results before a specific date, the date needs to be in the %s format.', 'invoicing' ), 'YYYY-MM-DD' ),
583
+				'description'       => sprintf(__('Limit to results before a specific date, the date needs to be in the %s format.', 'invoicing'), 'YYYY-MM-DD'),
584 584
 				'type'              => 'string',
585 585
 				'format'            => 'date',
586 586
 				'validate_callback' => 'rest_validate_request_arg',
587 587
 				'sanitize_callback' => 'sanitize_text_field',
588
-				'default'           => date( 'Y-m-d', current_time( 'timestamp' ) ),
588
+				'default'           => date('Y-m-d', current_time('timestamp')),
589 589
 			),
590 590
 		);
591 591
 	}
Please login to merge, or discard this patch.
includes/api/class-wpinv-rest-invoice-controller.php 2 patches
Indentation   +125 added lines, -125 removed lines patch added patch discarded remove patch
@@ -15,132 +15,132 @@
 block discarded – undo
15 15
 class WPInv_REST_Invoice_Controller extends GetPaid_REST_Posts_Controller {
16 16
 
17 17
     /**
18
-	 * Post type.
19
-	 *
20
-	 * @var string
21
-	 */
22
-	protected $post_type = 'wpi_invoice';
23
-
24
-	/**
25
-	 * The base of this controller's route.
26
-	 *
27
-	 * @since 1.0.13
28
-	 * @var string
29
-	 */
30
-	protected $rest_base = 'invoices';
31
-
32
-	/** Contains this controller's class name.
33
-	 *
34
-	 * @var string
35
-	 */
36
-	public $crud_class = 'WPInv_Invoice';
18
+     * Post type.
19
+     *
20
+     * @var string
21
+     */
22
+    protected $post_type = 'wpi_invoice';
37 23
 
38 24
     /**
39
-	 * Retrieves the query params for the invoices collection.
40
-	 *
41
-	 * @since 1.0.13
42
-	 *
43
-	 * @return array Collection parameters.
44
-	 */
45
-	public function get_collection_params() {
46
-
47
-		$params = array_merge(
48
-			parent::get_collection_params(),
49
-			array(
50
-
51
-				'customers'         => array(
52
-					'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
53
-					'type'              => 'array',
54
-					'items'             => array(
55
-						'type' => 'integer',
56
-					),
57
-					'default'           => array(),
58
-					'sanitize_callback' => 'wp_parse_id_list',
59
-				),
60
-
61
-				'exclude_customers' => array(
62
-					'description'       => __( 'Exclude invoices to specific users.', 'invoicing' ),
63
-					'type'              => 'array',
64
-					'items'             => array(
65
-						'type' => 'integer',
66
-					),
67
-					'default'           => array(),
68
-					'sanitize_callback' => 'wp_parse_id_list',
69
-				),
70
-
71
-				'parent'            => array(
72
-					'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
73
-					'type'              => 'array',
74
-					'items'             => array(
75
-						'type' => 'integer',
76
-					),
77
-					'sanitize_callback' => 'wp_parse_id_list',
78
-					'default'           => array(),
79
-				),
80
-
81
-				'parent_exclude'    => array(
82
-					'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
83
-					'type'              => 'array',
84
-					'items'             => array(
85
-						'type' => 'integer',
86
-					),
87
-					'sanitize_callback' => 'wp_parse_id_list',
88
-					'default'           => array(),
89
-				),
90
-
91
-			)
92
-		);
93
-
94
-		// Filter collection parameters for the invoices controller.
95
-		return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
96
-	}
97
-
98
-	/**
99
-	 * Determine the allowed query_vars for a get_items() response and
100
-	 * prepare for WP_Query.
101
-	 *
102
-	 * @param array           $prepared_args Prepared arguments.
103
-	 * @param WP_REST_Request $request Request object.
104
-	 * @return array          $query_args
105
-	 */
106
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
107
-
108
-		$query_args = parent::prepare_items_query( $prepared_args );
109
-
110
-		// Retrieve invoices for specific customers.
111
-		if ( ! empty( $request['customers'] ) ) {
112
-			$query_args['author__in'] = $request['customers'];
113
-		}
114
-
115
-		// Skip invoices for specific customers.
116
-		if ( ! empty( $request['exclude_customers'] ) ) {
117
-			$query_args['author__not_in'] = $request['exclude_customers'];
118
-		}
119
-
120
-		return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
121
-
122
-	}
123
-
124
-	/**
125
-	 * Retrieves a valid list of post statuses.
126
-	 *
127
-	 * @since 1.0.15
128
-	 *
129
-	 * @return array A list of registered item statuses.
130
-	 */
131
-	public function get_post_statuses() {
132
-		return array_keys( wpinv_get_invoice_statuses( true, false, $this->post_type ) );
133
-	}
134
-
135
-	/**
136
-	 * Saves a single invoice.
137
-	 *
138
-	 * @param WPInv_Invoice $invoice Invoice to save.
139
-	 * @return WP_Error|WPInv_Invoice
140
-	 */
141
-	protected function save_object( $invoice ) {
142
-		$invoice->recalculate_total();
143
-		return parent::save_object( $invoice );
144
-	}
25
+     * The base of this controller's route.
26
+     *
27
+     * @since 1.0.13
28
+     * @var string
29
+     */
30
+    protected $rest_base = 'invoices';
31
+
32
+    /** Contains this controller's class name.
33
+     *
34
+     * @var string
35
+     */
36
+    public $crud_class = 'WPInv_Invoice';
37
+
38
+    /**
39
+     * Retrieves the query params for the invoices collection.
40
+     *
41
+     * @since 1.0.13
42
+     *
43
+     * @return array Collection parameters.
44
+     */
45
+    public function get_collection_params() {
46
+
47
+        $params = array_merge(
48
+            parent::get_collection_params(),
49
+            array(
50
+
51
+                'customers'         => array(
52
+                    'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
53
+                    'type'              => 'array',
54
+                    'items'             => array(
55
+                        'type' => 'integer',
56
+                    ),
57
+                    'default'           => array(),
58
+                    'sanitize_callback' => 'wp_parse_id_list',
59
+                ),
60
+
61
+                'exclude_customers' => array(
62
+                    'description'       => __( 'Exclude invoices to specific users.', 'invoicing' ),
63
+                    'type'              => 'array',
64
+                    'items'             => array(
65
+                        'type' => 'integer',
66
+                    ),
67
+                    'default'           => array(),
68
+                    'sanitize_callback' => 'wp_parse_id_list',
69
+                ),
70
+
71
+                'parent'            => array(
72
+                    'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
73
+                    'type'              => 'array',
74
+                    'items'             => array(
75
+                        'type' => 'integer',
76
+                    ),
77
+                    'sanitize_callback' => 'wp_parse_id_list',
78
+                    'default'           => array(),
79
+                ),
80
+
81
+                'parent_exclude'    => array(
82
+                    'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
83
+                    'type'              => 'array',
84
+                    'items'             => array(
85
+                        'type' => 'integer',
86
+                    ),
87
+                    'sanitize_callback' => 'wp_parse_id_list',
88
+                    'default'           => array(),
89
+                ),
90
+
91
+            )
92
+        );
93
+
94
+        // Filter collection parameters for the invoices controller.
95
+        return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
96
+    }
97
+
98
+    /**
99
+     * Determine the allowed query_vars for a get_items() response and
100
+     * prepare for WP_Query.
101
+     *
102
+     * @param array           $prepared_args Prepared arguments.
103
+     * @param WP_REST_Request $request Request object.
104
+     * @return array          $query_args
105
+     */
106
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
107
+
108
+        $query_args = parent::prepare_items_query( $prepared_args );
109
+
110
+        // Retrieve invoices for specific customers.
111
+        if ( ! empty( $request['customers'] ) ) {
112
+            $query_args['author__in'] = $request['customers'];
113
+        }
114
+
115
+        // Skip invoices for specific customers.
116
+        if ( ! empty( $request['exclude_customers'] ) ) {
117
+            $query_args['author__not_in'] = $request['exclude_customers'];
118
+        }
119
+
120
+        return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
121
+
122
+    }
123
+
124
+    /**
125
+     * Retrieves a valid list of post statuses.
126
+     *
127
+     * @since 1.0.15
128
+     *
129
+     * @return array A list of registered item statuses.
130
+     */
131
+    public function get_post_statuses() {
132
+        return array_keys( wpinv_get_invoice_statuses( true, false, $this->post_type ) );
133
+    }
134
+
135
+    /**
136
+     * Saves a single invoice.
137
+     *
138
+     * @param WPInv_Invoice $invoice Invoice to save.
139
+     * @return WP_Error|WPInv_Invoice
140
+     */
141
+    protected function save_object( $invoice ) {
142
+        $invoice->recalculate_total();
143
+        return parent::save_object( $invoice );
144
+    }
145 145
 
146 146
 }
Please login to merge, or discard this patch.
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -5,7 +5,7 @@  discard block
 block discarded – undo
5 5
  * @version 1.0.19
6 6
  */
7 7
 
8
-defined( 'ABSPATH' ) || exit;
8
+defined('ABSPATH') || exit;
9 9
 
10 10
 /**
11 11
  * REST API invoices controller class.
@@ -49,7 +49,7 @@  discard block
 block discarded – undo
49 49
 			array(
50 50
 
51 51
 				'customers'         => array(
52
-					'description'       => __( 'Limit result set to invoices for specific user ids.', 'invoicing' ),
52
+					'description'       => __('Limit result set to invoices for specific user ids.', 'invoicing'),
53 53
 					'type'              => 'array',
54 54
 					'items'             => array(
55 55
 						'type' => 'integer',
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
 				),
60 60
 
61 61
 				'exclude_customers' => array(
62
-					'description'       => __( 'Exclude invoices to specific users.', 'invoicing' ),
62
+					'description'       => __('Exclude invoices to specific users.', 'invoicing'),
63 63
 					'type'              => 'array',
64 64
 					'items'             => array(
65 65
 						'type' => 'integer',
@@ -69,7 +69,7 @@  discard block
 block discarded – undo
69 69
 				),
70 70
 
71 71
 				'parent'            => array(
72
-					'description'       => __( 'Limit result set to those of particular parent IDs.', 'invoicing' ),
72
+					'description'       => __('Limit result set to those of particular parent IDs.', 'invoicing'),
73 73
 					'type'              => 'array',
74 74
 					'items'             => array(
75 75
 						'type' => 'integer',
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 				),
80 80
 
81 81
 				'parent_exclude'    => array(
82
-					'description'       => __( 'Limit result set to all items except those of a particular parent ID.', 'invoicing' ),
82
+					'description'       => __('Limit result set to all items except those of a particular parent ID.', 'invoicing'),
83 83
 					'type'              => 'array',
84 84
 					'items'             => array(
85 85
 						'type' => 'integer',
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
 		);
93 93
 
94 94
 		// Filter collection parameters for the invoices controller.
95
-		return apply_filters( 'getpaid_rest_invoices_collection_params', $params, $this );
95
+		return apply_filters('getpaid_rest_invoices_collection_params', $params, $this);
96 96
 	}
97 97
 
98 98
 	/**
@@ -103,21 +103,21 @@  discard block
 block discarded – undo
103 103
 	 * @param WP_REST_Request $request Request object.
104 104
 	 * @return array          $query_args
105 105
 	 */
106
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
106
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
107 107
 
108
-		$query_args = parent::prepare_items_query( $prepared_args );
108
+		$query_args = parent::prepare_items_query($prepared_args);
109 109
 
110 110
 		// Retrieve invoices for specific customers.
111
-		if ( ! empty( $request['customers'] ) ) {
111
+		if (!empty($request['customers'])) {
112 112
 			$query_args['author__in'] = $request['customers'];
113 113
 		}
114 114
 
115 115
 		// Skip invoices for specific customers.
116
-		if ( ! empty( $request['exclude_customers'] ) ) {
116
+		if (!empty($request['exclude_customers'])) {
117 117
 			$query_args['author__not_in'] = $request['exclude_customers'];
118 118
 		}
119 119
 
120
-		return apply_filters( 'getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this );
120
+		return apply_filters('getpaid_rest_invoices_prepare_items_query', $query_args, $request, $this);
121 121
 
122 122
 	}
123 123
 
@@ -129,7 +129,7 @@  discard block
 block discarded – undo
129 129
 	 * @return array A list of registered item statuses.
130 130
 	 */
131 131
 	public function get_post_statuses() {
132
-		return array_keys( wpinv_get_invoice_statuses( true, false, $this->post_type ) );
132
+		return array_keys(wpinv_get_invoice_statuses(true, false, $this->post_type));
133 133
 	}
134 134
 
135 135
 	/**
@@ -138,9 +138,9 @@  discard block
 block discarded – undo
138 138
 	 * @param WPInv_Invoice $invoice Invoice to save.
139 139
 	 * @return WP_Error|WPInv_Invoice
140 140
 	 */
141
-	protected function save_object( $invoice ) {
141
+	protected function save_object($invoice) {
142 142
 		$invoice->recalculate_total();
143
-		return parent::save_object( $invoice );
143
+		return parent::save_object($invoice);
144 144
 	}
145 145
 
146 146
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-reports-controller.php 2 patches
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -18,178 +18,178 @@
 block discarded – undo
18 18
  */
19 19
 class GetPaid_REST_Reports_Controller extends GetPaid_REST_Controller {
20 20
 
21
-	/**
22
-	 * Route base.
23
-	 *
24
-	 * @var string
25
-	 */
26
-	protected $rest_base = 'reports';
27
-
28
-	/**
29
-	 * Registers the routes for the objects of the controller.
30
-	 *
31
-	 * @since 2.0.0
32
-	 *
33
-	 * @see register_rest_route()
34
-	 */
35
-	public function register_namespace_routes( $namespace ) {
36
-
37
-		// List all available reports.
38
-		register_rest_route(
39
-			$namespace,
40
-			$this->rest_base,
41
-			array(
42
-				array(
43
-					'methods'             => WP_REST_Server::READABLE,
44
-					'callback'            => array( $this, 'get_items' ),
45
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
46
-					'args'                => $this->get_collection_params(),
47
-				),
48
-				'schema' => array( $this, 'get_public_item_schema' ),
49
-			)
50
-		);
51
-
52
-	}
53
-
54
-	/**
55
-	 * Makes sure the current user has access to READ the report APIs.
56
-	 *
57
-	 * @since  2.0.0
58
-	 * @param WP_REST_Request $request Full data about the request.
59
-	 * @return WP_Error|boolean
60
-	 */
61
-	public function get_items_permissions_check( $request ) {
62
-
63
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
64
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
65
-		}
66
-
67
-		return true;
68
-	}
69
-
70
-	/**
71
-	 * Get reports list.
72
-	 *
73
-	 * @since 2.0.0
74
-	 * @return array
75
-	 */
76
-	protected function get_reports() {
77
-
78
-		$reports = array(
79
-			array(
80
-				'slug'        => 'sales',
81
-				'description' => __( 'List of sales reports.', 'invoicing' ),
82
-			),
83
-			array(
84
-				'slug'        => 'top_sellers',
85
-				'description' => __( 'List of top selling items.', 'invoicing' ),
86
-			),
87
-			array(
88
-				'slug'        => 'top_earners',
89
-				'description' => __( 'List of top earning items.', 'invoicing' ),
90
-			),
91
-			array(
92
-				'slug'        => 'invoices/counts',
93
-				'description' => __( 'Invoice counts.', 'invoicing' ),
94
-			),
95
-		);
96
-
97
-		return apply_filters( 'getpaid_available_api_reports', $reports );
98
-
99
-	}
100
-
101
-	/**
102
-	 * Get all reports.
103
-	 *
104
-	 * @since 2.0.0
105
-	 * @param WP_REST_Request $request
106
-	 * @return array|WP_Error
107
-	 */
108
-	public function get_items( $request ) {
109
-		$data    = array();
110
-		$reports = $this->get_reports();
111
-
112
-		foreach ( $reports as $report ) {
113
-			$item   = $this->prepare_item_for_response( (object) $report, $request );
114
-			$data[] = $this->prepare_response_for_collection( $item );
115
-		}
116
-
117
-		return rest_ensure_response( $data );
118
-	}
119
-
120
-	/**
121
-	 * Prepare a report object for serialization.
122
-	 *
123
-	 * @since 2.0.0
124
-	 * @param stdClass $report Report data.
125
-	 * @param WP_REST_Request $request Request object.
126
-	 * @return WP_REST_Response $response Response data.
127
-	 */
128
-	public function prepare_item_for_response( $report, $request ) {
129
-		$data = array(
130
-			'slug'        => $report->slug,
131
-			'description' => $report->description,
132
-		);
133
-
134
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
135
-		$data = $this->add_additional_fields_to_object( $data, $request );
136
-		$data = $this->filter_response_by_context( $data, $context );
137
-
138
-		// Wrap the data in a response object.
139
-		$response = rest_ensure_response( $data );
140
-		$response->add_links(
21
+    /**
22
+     * Route base.
23
+     *
24
+     * @var string
25
+     */
26
+    protected $rest_base = 'reports';
27
+
28
+    /**
29
+     * Registers the routes for the objects of the controller.
30
+     *
31
+     * @since 2.0.0
32
+     *
33
+     * @see register_rest_route()
34
+     */
35
+    public function register_namespace_routes( $namespace ) {
36
+
37
+        // List all available reports.
38
+        register_rest_route(
39
+            $namespace,
40
+            $this->rest_base,
141 41
             array(
142
-				'self'       => array(
143
-					'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $report->slug ) ),
144
-				),
145
-				'collection' => array(
146
-					'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
147
-				),
42
+                array(
43
+                    'methods'             => WP_REST_Server::READABLE,
44
+                    'callback'            => array( $this, 'get_items' ),
45
+                    'permission_callback' => array( $this, 'get_items_permissions_check' ),
46
+                    'args'                => $this->get_collection_params(),
47
+                ),
48
+                'schema' => array( $this, 'get_public_item_schema' ),
148 49
             )
149 50
         );
150 51
 
151
-		return apply_filters( 'getpaid_rest_prepare_report', $response, $report, $request );
152
-	}
153
-
154
-	/**
155
-	 * Get the Report's schema, conforming to JSON Schema.
156
-	 *
157
-	 * @since 2.0.0
158
-	 * @return array
159
-	 */
160
-	public function get_item_schema() {
161
-		$schema = array(
162
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
163
-			'title'      => 'report',
164
-			'type'       => 'object',
165
-			'properties' => array(
166
-				'slug'        => array(
167
-					'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ),
168
-					'type'        => 'string',
169
-					'context'     => array( 'view' ),
170
-					'readonly'    => true,
171
-				),
172
-				'description' => array(
173
-					'description' => __( 'A human-readable description of the resource.', 'invoicing' ),
174
-					'type'        => 'string',
175
-					'context'     => array( 'view' ),
176
-					'readonly'    => true,
177
-				),
178
-			),
179
-		);
180
-
181
-		return $this->add_additional_fields_schema( $schema );
182
-	}
183
-
184
-	/**
185
-	 * Get the query params for collections.
186
-	 *
187
-	 * @since 2.0.0
188
-	 * @return array
189
-	 */
190
-	public function get_collection_params() {
191
-		return array(
192
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
193
-		);
194
-	}
52
+    }
53
+
54
+    /**
55
+     * Makes sure the current user has access to READ the report APIs.
56
+     *
57
+     * @since  2.0.0
58
+     * @param WP_REST_Request $request Full data about the request.
59
+     * @return WP_Error|boolean
60
+     */
61
+    public function get_items_permissions_check( $request ) {
62
+
63
+        if ( ! wpinv_current_user_can_manage_invoicing() ) {
64
+            return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
65
+        }
66
+
67
+        return true;
68
+    }
69
+
70
+    /**
71
+     * Get reports list.
72
+     *
73
+     * @since 2.0.0
74
+     * @return array
75
+     */
76
+    protected function get_reports() {
77
+
78
+        $reports = array(
79
+            array(
80
+                'slug'        => 'sales',
81
+                'description' => __( 'List of sales reports.', 'invoicing' ),
82
+            ),
83
+            array(
84
+                'slug'        => 'top_sellers',
85
+                'description' => __( 'List of top selling items.', 'invoicing' ),
86
+            ),
87
+            array(
88
+                'slug'        => 'top_earners',
89
+                'description' => __( 'List of top earning items.', 'invoicing' ),
90
+            ),
91
+            array(
92
+                'slug'        => 'invoices/counts',
93
+                'description' => __( 'Invoice counts.', 'invoicing' ),
94
+            ),
95
+        );
96
+
97
+        return apply_filters( 'getpaid_available_api_reports', $reports );
98
+
99
+    }
100
+
101
+    /**
102
+     * Get all reports.
103
+     *
104
+     * @since 2.0.0
105
+     * @param WP_REST_Request $request
106
+     * @return array|WP_Error
107
+     */
108
+    public function get_items( $request ) {
109
+        $data    = array();
110
+        $reports = $this->get_reports();
111
+
112
+        foreach ( $reports as $report ) {
113
+            $item   = $this->prepare_item_for_response( (object) $report, $request );
114
+            $data[] = $this->prepare_response_for_collection( $item );
115
+        }
116
+
117
+        return rest_ensure_response( $data );
118
+    }
119
+
120
+    /**
121
+     * Prepare a report object for serialization.
122
+     *
123
+     * @since 2.0.0
124
+     * @param stdClass $report Report data.
125
+     * @param WP_REST_Request $request Request object.
126
+     * @return WP_REST_Response $response Response data.
127
+     */
128
+    public function prepare_item_for_response( $report, $request ) {
129
+        $data = array(
130
+            'slug'        => $report->slug,
131
+            'description' => $report->description,
132
+        );
133
+
134
+        $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
135
+        $data = $this->add_additional_fields_to_object( $data, $request );
136
+        $data = $this->filter_response_by_context( $data, $context );
137
+
138
+        // Wrap the data in a response object.
139
+        $response = rest_ensure_response( $data );
140
+        $response->add_links(
141
+            array(
142
+                'self'       => array(
143
+                    'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $report->slug ) ),
144
+                ),
145
+                'collection' => array(
146
+                    'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
147
+                ),
148
+            )
149
+        );
150
+
151
+        return apply_filters( 'getpaid_rest_prepare_report', $response, $report, $request );
152
+    }
153
+
154
+    /**
155
+     * Get the Report's schema, conforming to JSON Schema.
156
+     *
157
+     * @since 2.0.0
158
+     * @return array
159
+     */
160
+    public function get_item_schema() {
161
+        $schema = array(
162
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
163
+            'title'      => 'report',
164
+            'type'       => 'object',
165
+            'properties' => array(
166
+                'slug'        => array(
167
+                    'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ),
168
+                    'type'        => 'string',
169
+                    'context'     => array( 'view' ),
170
+                    'readonly'    => true,
171
+                ),
172
+                'description' => array(
173
+                    'description' => __( 'A human-readable description of the resource.', 'invoicing' ),
174
+                    'type'        => 'string',
175
+                    'context'     => array( 'view' ),
176
+                    'readonly'    => true,
177
+                ),
178
+            ),
179
+        );
180
+
181
+        return $this->add_additional_fields_schema( $schema );
182
+    }
183
+
184
+    /**
185
+     * Get the query params for collections.
186
+     *
187
+     * @since 2.0.0
188
+     * @return array
189
+     */
190
+    public function get_collection_params() {
191
+        return array(
192
+            'context' => $this->get_context_param( array( 'default' => 'view' ) ),
193
+        );
194
+    }
195 195
 }
Please login to merge, or discard this patch.
Spacing   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -9,7 +9,7 @@  discard block
 block discarded – undo
9 9
  * @since   2.0.0
10 10
  */
11 11
 
12
-defined( 'ABSPATH' ) || exit;
12
+defined('ABSPATH') || exit;
13 13
 
14 14
 /**
15 15
  * GetPaid REST reports controller class.
@@ -32,7 +32,7 @@  discard block
 block discarded – undo
32 32
 	 *
33 33
 	 * @see register_rest_route()
34 34
 	 */
35
-	public function register_namespace_routes( $namespace ) {
35
+	public function register_namespace_routes($namespace) {
36 36
 
37 37
 		// List all available reports.
38 38
 		register_rest_route(
@@ -41,11 +41,11 @@  discard block
 block discarded – undo
41 41
 			array(
42 42
 				array(
43 43
 					'methods'             => WP_REST_Server::READABLE,
44
-					'callback'            => array( $this, 'get_items' ),
45
-					'permission_callback' => array( $this, 'get_items_permissions_check' ),
44
+					'callback'            => array($this, 'get_items'),
45
+					'permission_callback' => array($this, 'get_items_permissions_check'),
46 46
 					'args'                => $this->get_collection_params(),
47 47
 				),
48
-				'schema' => array( $this, 'get_public_item_schema' ),
48
+				'schema' => array($this, 'get_public_item_schema'),
49 49
 			)
50 50
 		);
51 51
 
@@ -58,10 +58,10 @@  discard block
 block discarded – undo
58 58
 	 * @param WP_REST_Request $request Full data about the request.
59 59
 	 * @return WP_Error|boolean
60 60
 	 */
61
-	public function get_items_permissions_check( $request ) {
61
+	public function get_items_permissions_check($request) {
62 62
 
63
-		if ( ! wpinv_current_user_can_manage_invoicing() ) {
64
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
63
+		if (!wpinv_current_user_can_manage_invoicing()) {
64
+			return new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
65 65
 		}
66 66
 
67 67
 		return true;
@@ -78,23 +78,23 @@  discard block
 block discarded – undo
78 78
 		$reports = array(
79 79
 			array(
80 80
 				'slug'        => 'sales',
81
-				'description' => __( 'List of sales reports.', 'invoicing' ),
81
+				'description' => __('List of sales reports.', 'invoicing'),
82 82
 			),
83 83
 			array(
84 84
 				'slug'        => 'top_sellers',
85
-				'description' => __( 'List of top selling items.', 'invoicing' ),
85
+				'description' => __('List of top selling items.', 'invoicing'),
86 86
 			),
87 87
 			array(
88 88
 				'slug'        => 'top_earners',
89
-				'description' => __( 'List of top earning items.', 'invoicing' ),
89
+				'description' => __('List of top earning items.', 'invoicing'),
90 90
 			),
91 91
 			array(
92 92
 				'slug'        => 'invoices/counts',
93
-				'description' => __( 'Invoice counts.', 'invoicing' ),
93
+				'description' => __('Invoice counts.', 'invoicing'),
94 94
 			),
95 95
 		);
96 96
 
97
-		return apply_filters( 'getpaid_available_api_reports', $reports );
97
+		return apply_filters('getpaid_available_api_reports', $reports);
98 98
 
99 99
 	}
100 100
 
@@ -105,16 +105,16 @@  discard block
 block discarded – undo
105 105
 	 * @param WP_REST_Request $request
106 106
 	 * @return array|WP_Error
107 107
 	 */
108
-	public function get_items( $request ) {
108
+	public function get_items($request) {
109 109
 		$data    = array();
110 110
 		$reports = $this->get_reports();
111 111
 
112
-		foreach ( $reports as $report ) {
113
-			$item   = $this->prepare_item_for_response( (object) $report, $request );
114
-			$data[] = $this->prepare_response_for_collection( $item );
112
+		foreach ($reports as $report) {
113
+			$item   = $this->prepare_item_for_response((object) $report, $request);
114
+			$data[] = $this->prepare_response_for_collection($item);
115 115
 		}
116 116
 
117
-		return rest_ensure_response( $data );
117
+		return rest_ensure_response($data);
118 118
 	}
119 119
 
120 120
 	/**
@@ -125,30 +125,30 @@  discard block
 block discarded – undo
125 125
 	 * @param WP_REST_Request $request Request object.
126 126
 	 * @return WP_REST_Response $response Response data.
127 127
 	 */
128
-	public function prepare_item_for_response( $report, $request ) {
128
+	public function prepare_item_for_response($report, $request) {
129 129
 		$data = array(
130 130
 			'slug'        => $report->slug,
131 131
 			'description' => $report->description,
132 132
 		);
133 133
 
134
-		$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
135
-		$data = $this->add_additional_fields_to_object( $data, $request );
136
-		$data = $this->filter_response_by_context( $data, $context );
134
+		$context = !empty($request['context']) ? $request['context'] : 'view';
135
+		$data = $this->add_additional_fields_to_object($data, $request);
136
+		$data = $this->filter_response_by_context($data, $context);
137 137
 
138 138
 		// Wrap the data in a response object.
139
-		$response = rest_ensure_response( $data );
139
+		$response = rest_ensure_response($data);
140 140
 		$response->add_links(
141 141
             array(
142 142
 				'self'       => array(
143
-					'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $report->slug ) ),
143
+					'href' => rest_url(sprintf('/%s/%s/%s', $this->namespace, $this->rest_base, $report->slug)),
144 144
 				),
145 145
 				'collection' => array(
146
-					'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ),
146
+					'href' => rest_url(sprintf('%s/%s', $this->namespace, $this->rest_base)),
147 147
 				),
148 148
             )
149 149
         );
150 150
 
151
-		return apply_filters( 'getpaid_rest_prepare_report', $response, $report, $request );
151
+		return apply_filters('getpaid_rest_prepare_report', $response, $report, $request);
152 152
 	}
153 153
 
154 154
 	/**
@@ -164,21 +164,21 @@  discard block
 block discarded – undo
164 164
 			'type'       => 'object',
165 165
 			'properties' => array(
166 166
 				'slug'        => array(
167
-					'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ),
167
+					'description' => __('An alphanumeric identifier for the resource.', 'invoicing'),
168 168
 					'type'        => 'string',
169
-					'context'     => array( 'view' ),
169
+					'context'     => array('view'),
170 170
 					'readonly'    => true,
171 171
 				),
172 172
 				'description' => array(
173
-					'description' => __( 'A human-readable description of the resource.', 'invoicing' ),
173
+					'description' => __('A human-readable description of the resource.', 'invoicing'),
174 174
 					'type'        => 'string',
175
-					'context'     => array( 'view' ),
175
+					'context'     => array('view'),
176 176
 					'readonly'    => true,
177 177
 				),
178 178
 			),
179 179
 		);
180 180
 
181
-		return $this->add_additional_fields_schema( $schema );
181
+		return $this->add_additional_fields_schema($schema);
182 182
 	}
183 183
 
184 184
 	/**
@@ -189,7 +189,7 @@  discard block
 block discarded – undo
189 189
 	 */
190 190
 	public function get_collection_params() {
191 191
 		return array(
192
-			'context' => $this->get_context_param( array( 'default' => 'view' ) ),
192
+			'context' => $this->get_context_param(array('default' => 'view')),
193 193
 		);
194 194
 	}
195 195
 }
Please login to merge, or discard this patch.
includes/api/class-getpaid-rest-posts-controller.php 2 patches
Indentation   +617 added lines, -617 removed lines patch added patch discarded remove patch
@@ -18,626 +18,626 @@
 block discarded – undo
18 18
 class GetPaid_REST_Posts_Controller extends GetPaid_REST_CRUD_Controller {
19 19
 
20 20
     /**
21
-	 * Post type.
22
-	 *
23
-	 * @var string
24
-	 */
25
-	protected $post_type;
26
-
27
-	/**
28
-	 * Controls visibility on frontend.
29
-	 *
30
-	 * @var string
31
-	 */
32
-	public $public = false;
33
-
34
-	/**
35
-	 * 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
-		parent::register_namespace_routes( $namespace );
44
-
45
-		register_rest_route(
46
-			$namespace,
47
-			'/' . $this->rest_base . '/batch',
48
-			array(
49
-				array(
50
-					'methods'             => WP_REST_Server::EDITABLE,
51
-					'callback'            => array( $this, 'batch_items' ),
52
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
53
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
54
-				),
55
-				'schema' => array( $this, 'get_public_batch_schema' ),
56
-			)
57
-		);
58
-
59
-	}
60
-
61
-	/**
62
-	 * Check permissions of items on REST API.
63
-	 *
64
-	 * @since 1.0.19
65
-	 * @param string $context   Request context.
66
-	 * @param int    $object_id Post ID.
67
-	 * @return bool
68
-	 */
69
-	public function check_post_permissions( $context = 'read', $object_id = 0 ) {
70
-
71
-		$contexts = array(
72
-			'read'   => 'read_private_posts',
73
-			'create' => 'publish_posts',
74
-			'edit'   => 'edit_post',
75
-			'delete' => 'delete_post',
76
-			'batch'  => 'edit_others_posts',
77
-		);
78
-
79
-		$cap              = $contexts[ $context ];
80
-		$post_type_object = get_post_type_object( $this->post_type );
81
-		$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
82
-
83
-		return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
84
-	}
85
-
86
-	/**
87
-	 * Check if a given request has access to read items.
88
-	 *
89
-	 * @param  WP_REST_Request $request Full details about the request.
90
-	 * @return WP_Error|boolean
91
-	 */
92
-	public function get_items_permissions_check( $request ) {
93
-		return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
94
-	}
95
-
96
-	/**
97
-	 * Check if a given request has access to create an item.
98
-	 *
99
-	 * @param  WP_REST_Request $request Full details about the request.
100
-	 * @return WP_Error|boolean
101
-	 */
102
-	public function create_item_permissions_check( $request ) {
103
-		return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
104
-	}
105
-
106
-	/**
107
-	 * Check if a given request has access to read an item.
108
-	 *
109
-	 * @param  WP_REST_Request $request Full details about the request.
110
-	 * @return WP_Error|boolean
111
-	 */
112
-	public function get_item_permissions_check( $request ) {
113
-		$post = get_post( (int) $request['id'] );
114
-
115
-		if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
116
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
117
-		}
118
-
119
-		return true;
120
-	}
121
-
122
-	/**
123
-	 * Check if a given request has access to update an item.
124
-	 *
125
-	 * @param  WP_REST_Request $request Full details about the request.
126
-	 * @return WP_Error|boolean
127
-	 */
128
-	public function update_item_permissions_check( $request ) {
129
-		$post = get_post( (int) $request['id'] );
130
-
131
-		if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
132
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
133
-		}
134
-
135
-		return true;
136
-	}
137
-
138
-	/**
139
-	 * Check if a given request has access to delete an item.
140
-	 *
141
-	 * @param  WP_REST_Request $request Full details about the request.
142
-	 * @return bool|WP_Error
143
-	 */
144
-	public function delete_item_permissions_check( $request ) {
145
-		$post = get_post( (int) $request['id'] );
146
-
147
-		if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
148
-			return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
149
-		}
150
-
151
-		return true;
152
-	}
153
-
154
-	/**
155
-	 * Check if a given request has access batch create, update and delete items.
156
-	 *
157
-	 * @param  WP_REST_Request $request Full details about the request.
158
-	 *
159
-	 * @return boolean|WP_Error
160
-	 */
161
-	public function batch_items_permissions_check( $request ) {
162
-		return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
163
-	}
164
-
165
-	/**
166
-	 * @deprecated
167
-	 */
168
-	public function get_post( $object_id ) {
169
-		return $this->get_object( $object_id );
21
+     * Post type.
22
+     *
23
+     * @var string
24
+     */
25
+    protected $post_type;
26
+
27
+    /**
28
+     * Controls visibility on frontend.
29
+     *
30
+     * @var string
31
+     */
32
+    public $public = false;
33
+
34
+    /**
35
+     * 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
+        parent::register_namespace_routes( $namespace );
44
+
45
+        register_rest_route(
46
+            $namespace,
47
+            '/' . $this->rest_base . '/batch',
48
+            array(
49
+                array(
50
+                    'methods'             => WP_REST_Server::EDITABLE,
51
+                    'callback'            => array( $this, 'batch_items' ),
52
+                    'permission_callback' => array( $this, 'batch_items_permissions_check' ),
53
+                    'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
54
+                ),
55
+                'schema' => array( $this, 'get_public_batch_schema' ),
56
+            )
57
+        );
58
+
59
+    }
60
+
61
+    /**
62
+     * Check permissions of items on REST API.
63
+     *
64
+     * @since 1.0.19
65
+     * @param string $context   Request context.
66
+     * @param int    $object_id Post ID.
67
+     * @return bool
68
+     */
69
+    public function check_post_permissions( $context = 'read', $object_id = 0 ) {
70
+
71
+        $contexts = array(
72
+            'read'   => 'read_private_posts',
73
+            'create' => 'publish_posts',
74
+            'edit'   => 'edit_post',
75
+            'delete' => 'delete_post',
76
+            'batch'  => 'edit_others_posts',
77
+        );
78
+
79
+        $cap              = $contexts[ $context ];
80
+        $post_type_object = get_post_type_object( $this->post_type );
81
+        $permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
82
+
83
+        return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
84
+    }
85
+
86
+    /**
87
+     * Check if a given request has access to read items.
88
+     *
89
+     * @param  WP_REST_Request $request Full details about the request.
90
+     * @return WP_Error|boolean
91
+     */
92
+    public function get_items_permissions_check( $request ) {
93
+        return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
94
+    }
95
+
96
+    /**
97
+     * Check if a given request has access to create an item.
98
+     *
99
+     * @param  WP_REST_Request $request Full details about the request.
100
+     * @return WP_Error|boolean
101
+     */
102
+    public function create_item_permissions_check( $request ) {
103
+        return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
104
+    }
105
+
106
+    /**
107
+     * Check if a given request has access to read an item.
108
+     *
109
+     * @param  WP_REST_Request $request Full details about the request.
110
+     * @return WP_Error|boolean
111
+     */
112
+    public function get_item_permissions_check( $request ) {
113
+        $post = get_post( (int) $request['id'] );
114
+
115
+        if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
116
+            return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
117
+        }
118
+
119
+        return true;
120
+    }
121
+
122
+    /**
123
+     * Check if a given request has access to update an item.
124
+     *
125
+     * @param  WP_REST_Request $request Full details about the request.
126
+     * @return WP_Error|boolean
127
+     */
128
+    public function update_item_permissions_check( $request ) {
129
+        $post = get_post( (int) $request['id'] );
130
+
131
+        if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
132
+            return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
133
+        }
134
+
135
+        return true;
136
+    }
137
+
138
+    /**
139
+     * Check if a given request has access to delete an item.
140
+     *
141
+     * @param  WP_REST_Request $request Full details about the request.
142
+     * @return bool|WP_Error
143
+     */
144
+    public function delete_item_permissions_check( $request ) {
145
+        $post = get_post( (int) $request['id'] );
146
+
147
+        if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
148
+            return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
149
+        }
150
+
151
+        return true;
152
+    }
153
+
154
+    /**
155
+     * Check if a given request has access batch create, update and delete items.
156
+     *
157
+     * @param  WP_REST_Request $request Full details about the request.
158
+     *
159
+     * @return boolean|WP_Error
160
+     */
161
+    public function batch_items_permissions_check( $request ) {
162
+        return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
163
+    }
164
+
165
+    /**
166
+     * @deprecated
167
+     */
168
+    public function get_post( $object_id ) {
169
+        return $this->get_object( $object_id );
170
+    }
171
+
172
+    /**
173
+     * Get a single object.
174
+     *
175
+     * @param WP_REST_Request $request Full details about the request.
176
+     * @return WP_Error|WP_REST_Response
177
+     */
178
+    public function get_item( $request ) {
179
+
180
+        // Fetch item.
181
+        $response = parent::get_item( $request );
182
+
183
+        // (Maybe) add a link to the html pagee.
184
+        if ( $this->public && ! is_wp_error( $response ) ) {
185
+            $response->link_header( 'alternate', get_permalink( $this->data_object->get_id() ), array( 'type' => 'text/html' ) );
186
+        }
187
+
188
+        return $response;
189
+    }
190
+
191
+    /**
192
+     * Create a single object.
193
+     *
194
+     * @param WP_REST_Request $request Full details about the request.
195
+     * @return WP_Error|WP_REST_Response
196
+     */
197
+    public function create_item( $request ) {
198
+
199
+        // Create item.
200
+        $response = parent::create_item( $request );
201
+
202
+        // Fire a hook after an item is created.
203
+        if ( ! is_wp_error( $response ) ) {
204
+
205
+            /**
206
+             * Fires after a single item is created or updated via the REST API.
207
+             *
208
+             * @param WP_Post         $post      Post object.
209
+             * @param WP_REST_Request $request   Request object.
210
+             * @param boolean         $creating  True when creating item, false when updating.
211
+             */
212
+            do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, true );
213
+
214
+        }
215
+
216
+        return $response;
217
+
170 218
     }
171 219
 
172
-	/**
173
-	 * Get a single object.
174
-	 *
175
-	 * @param WP_REST_Request $request Full details about the request.
176
-	 * @return WP_Error|WP_REST_Response
177
-	 */
178
-	public function get_item( $request ) {
179
-
180
-		// Fetch item.
181
-		$response = parent::get_item( $request );
182
-
183
-		// (Maybe) add a link to the html pagee.
184
-		if ( $this->public && ! is_wp_error( $response ) ) {
185
-			$response->link_header( 'alternate', get_permalink( $this->data_object->get_id() ), array( 'type' => 'text/html' ) );
186
-		}
187
-
188
-		return $response;
189
-	}
190
-
191
-	/**
192
-	 * Create a single object.
193
-	 *
194
-	 * @param WP_REST_Request $request Full details about the request.
195
-	 * @return WP_Error|WP_REST_Response
196
-	 */
197
-	public function create_item( $request ) {
198
-
199
-		// Create item.
200
-		$response = parent::create_item( $request );
201
-
202
-		// Fire a hook after an item is created.
203
-		if ( ! is_wp_error( $response ) ) {
204
-
205
-			/**
206
-			 * Fires after a single item is created or updated via the REST API.
207
-			 *
208
-			 * @param WP_Post         $post      Post object.
209
-			 * @param WP_REST_Request $request   Request object.
210
-			 * @param boolean         $creating  True when creating item, false when updating.
211
-			 */
212
-			do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, true );
213
-
214
-		}
215
-
216
-		return $response;
217
-
218
-	}
219
-
220
-	/**
221
-	 * Update a single object.
222
-	 *
223
-	 * @param WP_REST_Request $request Full details about the request.
224
-	 * @return WP_Error|WP_REST_Response
225
-	 */
226
-	public function update_item( $request ) {
227
-
228
-		// Create item.
229
-		$response = parent::update_item( $request );
230
-
231
-		// Fire a hook after an item is created.
232
-		if ( ! is_wp_error( $response ) ) {
233
-
234
-			/**
235
-			 * Fires after a single item is created or updated via the REST API.
236
-			 *
237
-			 * @param WP_Post         $post      Post object.
238
-			 * @param WP_REST_Request $request   Request object.
239
-			 * @param boolean         $creating  True when creating item, false when updating.
240
-			 */
241
-			do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, false );
242
-
243
-		}
244
-
245
-		return $response;
246
-
247
-	}
248
-
249
-	/**
250
-	 * Get a collection of objects.
251
-	 *
252
-	 * @param WP_REST_Request $request Full details about the request.
253
-	 * @return WP_Error|WP_REST_Response
254
-	 */
255
-	public function get_items( $request ) {
256
-
257
-		$args                         = array();
258
-		$args['offset']               = $request['offset'];
259
-		$args['order']                = $request['order'];
260
-		$args['orderby']              = $request['orderby'];
261
-		$args['paged']                = $request['page'];
262
-		$args['post__in']             = $request['include'];
263
-		$args['post__not_in']         = $request['exclude'];
264
-		$args['posts_per_page']       = $request['per_page'];
265
-		$args['name']                 = $request['slug'];
266
-		$args['post_parent__in']      = $request['parent'];
267
-		$args['post_parent__not_in']  = $request['parent_exclude'];
268
-		$args['s']                    = $request['search'];
269
-		$args['post_status']          = wpinv_parse_list( $request['status'] );
270
-
271
-		$args['date_query'] = array();
272
-
273
-		// Set before into date query. Date query must be specified as an array of an array.
274
-		if ( isset( $request['before'] ) ) {
275
-			$args['date_query'][0]['before'] = $request['before'];
276
-		}
277
-
278
-		// Set after into date query. Date query must be specified as an array of an array.
279
-		if ( isset( $request['after'] ) ) {
280
-			$args['date_query'][0]['after'] = $request['after'];
281
-		}
282
-
283
-		// Force the post_type & fields arguments, since they're not a user input variable.
284
-		$args['post_type'] = $this->post_type;
285
-		$args['fields']    = 'ids';
286
-
287
-		// Filter the query arguments for a request.
288
-		$args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
289
-		$query_args = $this->prepare_items_query( $args, $request );
290
-
291
-		$posts_query = new WP_Query();
292
-		$query_result = $posts_query->query( $query_args );
293
-
294
-		$posts = array();
295
-		foreach ( $query_result as $post_id ) {
296
-			if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
297
-				continue;
298
-			}
299
-
300
-			$data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
301
-			$posts[] = $this->prepare_response_for_collection( $data );
302
-		}
303
-
304
-		$page        = (int) $query_args['paged'];
305
-		$total_posts = $posts_query->found_posts;
306
-
307
-		if ( $total_posts < 1 ) {
308
-			// Out-of-bounds, run the query again without LIMIT for total count.
309
-			unset( $query_args['paged'] );
310
-			$count_query = new WP_Query();
311
-			$count_query->query( $query_args );
312
-			$total_posts = $count_query->found_posts;
313
-		}
314
-
315
-		$max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
316
-
317
-		$response = rest_ensure_response( $posts );
318
-		$response->header( 'X-WP-Total', (int) $total_posts );
319
-		$response->header( 'X-WP-TotalPages', (int) $max_pages );
320
-
321
-		$request_params = $request->get_query_params();
322
-		$base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
323
-
324
-		if ( $page > 1 ) {
325
-			$prev_page = $page - 1;
326
-			if ( $prev_page > $max_pages ) {
327
-				$prev_page = $max_pages;
328
-			}
329
-			$prev_link = add_query_arg( 'page', $prev_page, $base );
330
-			$response->link_header( 'prev', $prev_link );
331
-		}
332
-		if ( $max_pages > $page ) {
333
-			$next_page = $page + 1;
334
-			$next_link = add_query_arg( 'page', $next_page, $base );
335
-			$response->link_header( 'next', $next_link );
336
-		}
337
-
338
-		return $response;
339
-	}
340
-
341
-	/**
342
-	 * Delete a single item.
343
-	 *
344
-	 * @param WP_REST_Request $request Full details about the request.
345
-	 * @return WP_REST_Response|WP_Error
346
-	 */
347
-	public function delete_item( $request ) {
348
-
349
-		// Fetch the item.
350
-		$item = $this->get_object( $request['id'] );
351
-		if ( is_wp_error( $item ) ) {
352
-			return $item;
353
-		}
354
-
355
-		$supports_trash = EMPTY_TRASH_DAYS > 0;
356
-		$force          = $supports_trash && (bool) $request['force'];
357
-
358
-		if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
359
-			return new WP_Error( 'cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
360
-		}
361
-
362
-		$request->set_param( 'context', 'edit' );
363
-		$response = $this->prepare_item_for_response( $item, $request );
364
-
365
-		if ( ! wp_delete_post( $item->ID, $force ) ) {
366
-			return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
367
-		}
368
-
369
-		return $response;
370
-	}
371
-
372
-	/**
373
-	 * Prepare links for the request.
374
-	 *
375
-	 * @param GetPaid_Data    $object GetPaid_Data object.
376
-	 * @return array Links for the given object.
377
-	 */
378
-	protected function prepare_links( $object ) {
379
-
380
-		$links = parent::prepare_links( $object );
381
-
382
-		if ( is_callable( array( $object, 'get_user_id' ) ) ) {
383
-			$links['user'] = array(
384
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_user_id' ) ) ),
385
-				'embeddable' => true,
386
-			);
387
-		}
388
-
389
-		if ( is_callable( array( $object, 'get_owner' ) ) ) {
390
-			$links['owner']  = array(
391
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_owner' ) ) ),
392
-				'embeddable' => true,
393
-			);
394
-		}
395
-
396
-		if ( is_callable( array( $object, 'get_parent_id' ) ) && call_user_func( array( $object, 'get_parent_id' ) ) ) {
397
-			$links['parent']  = array(
398
-				'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func( array( $object, 'get_parent_id' ) ) ),
399
-				'embeddable' => true,
400
-			);
401
-		}
402
-
403
-		return $links;
404
-	}
405
-
406
-	/**
407
-	 * Determine the allowed query_vars for a get_items() response and
408
-	 * prepare for WP_Query.
409
-	 *
410
-	 * @param array           $prepared_args Prepared arguments.
411
-	 * @param WP_REST_Request $request Request object.
412
-	 * @return array          $query_args
413
-	 */
414
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
415
-
416
-		$valid_vars = array_flip( $this->get_allowed_query_vars() );
417
-		$query_args = array();
418
-		foreach ( $valid_vars as $var => $index ) {
419
-			if ( isset( $prepared_args[ $var ] ) ) {
420
-				$query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ], $index );
421
-			}
422
-		}
423
-
424
-		$query_args['ignore_sticky_posts'] = true;
425
-
426
-		if ( 'include' === $query_args['orderby'] ) {
427
-			$query_args['orderby'] = 'post__in';
428
-		} elseif ( 'id' === $query_args['orderby'] ) {
429
-			$query_args['orderby'] = 'ID'; // ID must be capitalized.
430
-		} elseif ( 'slug' === $query_args['orderby'] ) {
431
-			$query_args['orderby'] = 'name';
432
-		}
433
-
434
-		return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
435
-
436
-	}
437
-
438
-	/**
439
-	 * Get all the WP Query vars that are allowed for the API request.
440
-	 *
441
-	 * @return array
442
-	 */
443
-	protected function get_allowed_query_vars() {
444
-		global $wp;
445
-
446
-		/**
447
-		 * Filter the publicly allowed query vars.
448
-		 *
449
-		 * Allows adjusting of the default query vars that are made public.
450
-		 *
451
-		 * @param array  Array of allowed WP_Query query vars.
452
-		 */
453
-		$valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
454
-
455
-		$post_type_obj = get_post_type_object( $this->post_type );
456
-		if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
457
-			$private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
458
-			$valid_vars = array_merge( $valid_vars, $private );
459
-		}
460
-
461
-		// Define our own in addition to WP's normal vars.
462
-		$rest_valid = array(
463
-			'post_status',
464
-			'date_query',
465
-			'ignore_sticky_posts',
466
-			'offset',
467
-			'post__in',
468
-			'post__not_in',
469
-			'post_parent',
470
-			'post_parent__in',
471
-			'post_parent__not_in',
472
-			'posts_per_page',
473
-			'meta_query',
474
-			'tax_query',
475
-			'meta_key',
476
-			'meta_value',
477
-			'meta_compare',
478
-			'meta_value_num',
479
-		);
480
-		$valid_vars = array_merge( $valid_vars, $rest_valid );
481
-
482
-		// Filter allowed query vars for the REST API.
483
-		$valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
484
-
485
-		return $valid_vars;
486
-	}
487
-
488
-	/**
489
-	 * Get the query params for collections of attachments.
490
-	 *
491
-	 * @return array
492
-	 */
493
-	public function get_collection_params() {
494
-
495
-		return array_merge(
496
-			parent::get_collection_params(),
497
-			array(
498
-				'status'  => array(
499
-					'default'           => $this->get_post_statuses(),
500
-					'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
501
-					'type'              => array( 'array', 'string' ),
502
-					'items'             => array(
503
-						'enum' => $this->get_post_statuses(),
504
-						'type' => 'string',
505
-					),
506
-					'validate_callback' => 'rest_validate_request_arg',
507
-					'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
508
-				),
509
-				'after'   => array(
510
-					'description'       => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
511
-					'type'              => 'string',
512
-					'format'            => 'string',
513
-					'validate_callback' => 'rest_validate_request_arg',
514
-					'sanitize_callback' => 'sanitize_text_field',
515
-				),
516
-				'before'  => array(
517
-					'description'       => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
518
-					'type'              => 'string',
519
-					'format'            => 'string',
520
-					'validate_callback' => 'rest_validate_request_arg',
521
-					'sanitize_callback' => 'sanitize_text_field',
522
-				),
523
-				'exclude' => array(
524
-					'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
525
-					'type'              => 'array',
526
-					'items'             => array(
527
-						'type' => 'integer',
528
-					),
529
-					'default'           => array(),
530
-					'sanitize_callback' => 'wp_parse_id_list',
531
-					'validate_callback' => 'rest_validate_request_arg',
532
-				),
533
-				'include' => array(
534
-					'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
535
-					'type'              => 'array',
536
-					'items'             => array(
537
-						'type' => 'integer',
538
-					),
539
-					'default'           => array(),
540
-					'sanitize_callback' => 'wp_parse_id_list',
541
-					'validate_callback' => 'rest_validate_request_arg',
542
-				),
543
-				'offset'  => array(
544
-					'description'       => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
545
-					'type'              => 'integer',
546
-					'sanitize_callback' => 'absint',
547
-					'validate_callback' => 'rest_validate_request_arg',
548
-				),
549
-				'order'   => array(
550
-					'description'       => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
551
-					'type'              => 'string',
552
-					'default'           => 'desc',
553
-					'enum'              => array( 'asc', 'desc' ),
554
-					'validate_callback' => 'rest_validate_request_arg',
555
-				),
556
-				'orderby' => array(
557
-					'description'       => __( 'Sort collection by object attribute.', 'invoicing' ),
558
-					'type'              => 'string',
559
-					'default'           => 'date',
560
-					'enum'              => array(
561
-						'date',
562
-						'id',
563
-						'include',
564
-						'title',
565
-						'slug',
566
-						'modified',
567
-					),
568
-					'validate_callback' => 'rest_validate_request_arg',
569
-				),
570
-			)
571
-		);
572
-	}
573
-
574
-	/**
575
-	 * Retrieves the items's schema, conforming to JSON Schema.
576
-	 *
577
-	 * @since 1.0.19
578
-	 *
579
-	 * @return array Item schema data.
580
-	 */
581
-	public function get_item_schema() {
582
-
583
-		// Maybe retrieve the schema from cache.
584
-		if ( ! empty( $this->schema ) ) {
585
-			return $this->add_additional_fields_schema( $this->schema );
586
-		}
587
-
588
-		$type   = str_replace( 'wpi_', '', $this->post_type );
589
-		$schema = array(
590
-			'$schema'    => 'http://json-schema.org/draft-04/schema#',
591
-			'title'      => $this->post_type,
592
-			'type'       => 'object',
593
-			'properties' => wpinv_get_data( "$type-schema" ),
594
-		);
595
-
596
-		// Filters the invoice schema for the REST API.
220
+    /**
221
+     * Update a single object.
222
+     *
223
+     * @param WP_REST_Request $request Full details about the request.
224
+     * @return WP_Error|WP_REST_Response
225
+     */
226
+    public function update_item( $request ) {
227
+
228
+        // Create item.
229
+        $response = parent::update_item( $request );
230
+
231
+        // Fire a hook after an item is created.
232
+        if ( ! is_wp_error( $response ) ) {
233
+
234
+            /**
235
+             * Fires after a single item is created or updated via the REST API.
236
+             *
237
+             * @param WP_Post         $post      Post object.
238
+             * @param WP_REST_Request $request   Request object.
239
+             * @param boolean         $creating  True when creating item, false when updating.
240
+             */
241
+            do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, false );
242
+
243
+        }
244
+
245
+        return $response;
246
+
247
+    }
248
+
249
+    /**
250
+     * Get a collection of objects.
251
+     *
252
+     * @param WP_REST_Request $request Full details about the request.
253
+     * @return WP_Error|WP_REST_Response
254
+     */
255
+    public function get_items( $request ) {
256
+
257
+        $args                         = array();
258
+        $args['offset']               = $request['offset'];
259
+        $args['order']                = $request['order'];
260
+        $args['orderby']              = $request['orderby'];
261
+        $args['paged']                = $request['page'];
262
+        $args['post__in']             = $request['include'];
263
+        $args['post__not_in']         = $request['exclude'];
264
+        $args['posts_per_page']       = $request['per_page'];
265
+        $args['name']                 = $request['slug'];
266
+        $args['post_parent__in']      = $request['parent'];
267
+        $args['post_parent__not_in']  = $request['parent_exclude'];
268
+        $args['s']                    = $request['search'];
269
+        $args['post_status']          = wpinv_parse_list( $request['status'] );
270
+
271
+        $args['date_query'] = array();
272
+
273
+        // Set before into date query. Date query must be specified as an array of an array.
274
+        if ( isset( $request['before'] ) ) {
275
+            $args['date_query'][0]['before'] = $request['before'];
276
+        }
277
+
278
+        // Set after into date query. Date query must be specified as an array of an array.
279
+        if ( isset( $request['after'] ) ) {
280
+            $args['date_query'][0]['after'] = $request['after'];
281
+        }
282
+
283
+        // Force the post_type & fields arguments, since they're not a user input variable.
284
+        $args['post_type'] = $this->post_type;
285
+        $args['fields']    = 'ids';
286
+
287
+        // Filter the query arguments for a request.
288
+        $args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
289
+        $query_args = $this->prepare_items_query( $args, $request );
290
+
291
+        $posts_query = new WP_Query();
292
+        $query_result = $posts_query->query( $query_args );
293
+
294
+        $posts = array();
295
+        foreach ( $query_result as $post_id ) {
296
+            if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
297
+                continue;
298
+            }
299
+
300
+            $data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
301
+            $posts[] = $this->prepare_response_for_collection( $data );
302
+        }
303
+
304
+        $page        = (int) $query_args['paged'];
305
+        $total_posts = $posts_query->found_posts;
306
+
307
+        if ( $total_posts < 1 ) {
308
+            // Out-of-bounds, run the query again without LIMIT for total count.
309
+            unset( $query_args['paged'] );
310
+            $count_query = new WP_Query();
311
+            $count_query->query( $query_args );
312
+            $total_posts = $count_query->found_posts;
313
+        }
314
+
315
+        $max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
316
+
317
+        $response = rest_ensure_response( $posts );
318
+        $response->header( 'X-WP-Total', (int) $total_posts );
319
+        $response->header( 'X-WP-TotalPages', (int) $max_pages );
320
+
321
+        $request_params = $request->get_query_params();
322
+        $base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
323
+
324
+        if ( $page > 1 ) {
325
+            $prev_page = $page - 1;
326
+            if ( $prev_page > $max_pages ) {
327
+                $prev_page = $max_pages;
328
+            }
329
+            $prev_link = add_query_arg( 'page', $prev_page, $base );
330
+            $response->link_header( 'prev', $prev_link );
331
+        }
332
+        if ( $max_pages > $page ) {
333
+            $next_page = $page + 1;
334
+            $next_link = add_query_arg( 'page', $next_page, $base );
335
+            $response->link_header( 'next', $next_link );
336
+        }
337
+
338
+        return $response;
339
+    }
340
+
341
+    /**
342
+     * Delete a single item.
343
+     *
344
+     * @param WP_REST_Request $request Full details about the request.
345
+     * @return WP_REST_Response|WP_Error
346
+     */
347
+    public function delete_item( $request ) {
348
+
349
+        // Fetch the item.
350
+        $item = $this->get_object( $request['id'] );
351
+        if ( is_wp_error( $item ) ) {
352
+            return $item;
353
+        }
354
+
355
+        $supports_trash = EMPTY_TRASH_DAYS > 0;
356
+        $force          = $supports_trash && (bool) $request['force'];
357
+
358
+        if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
359
+            return new WP_Error( 'cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
360
+        }
361
+
362
+        $request->set_param( 'context', 'edit' );
363
+        $response = $this->prepare_item_for_response( $item, $request );
364
+
365
+        if ( ! wp_delete_post( $item->ID, $force ) ) {
366
+            return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
367
+        }
368
+
369
+        return $response;
370
+    }
371
+
372
+    /**
373
+     * Prepare links for the request.
374
+     *
375
+     * @param GetPaid_Data    $object GetPaid_Data object.
376
+     * @return array Links for the given object.
377
+     */
378
+    protected function prepare_links( $object ) {
379
+
380
+        $links = parent::prepare_links( $object );
381
+
382
+        if ( is_callable( array( $object, 'get_user_id' ) ) ) {
383
+            $links['user'] = array(
384
+                'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_user_id' ) ) ),
385
+                'embeddable' => true,
386
+            );
387
+        }
388
+
389
+        if ( is_callable( array( $object, 'get_owner' ) ) ) {
390
+            $links['owner']  = array(
391
+                'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_owner' ) ) ),
392
+                'embeddable' => true,
393
+            );
394
+        }
395
+
396
+        if ( is_callable( array( $object, 'get_parent_id' ) ) && call_user_func( array( $object, 'get_parent_id' ) ) ) {
397
+            $links['parent']  = array(
398
+                'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func( array( $object, 'get_parent_id' ) ) ),
399
+                'embeddable' => true,
400
+            );
401
+        }
402
+
403
+        return $links;
404
+    }
405
+
406
+    /**
407
+     * Determine the allowed query_vars for a get_items() response and
408
+     * prepare for WP_Query.
409
+     *
410
+     * @param array           $prepared_args Prepared arguments.
411
+     * @param WP_REST_Request $request Request object.
412
+     * @return array          $query_args
413
+     */
414
+    protected function prepare_items_query( $prepared_args = array(), $request = null ) {
415
+
416
+        $valid_vars = array_flip( $this->get_allowed_query_vars() );
417
+        $query_args = array();
418
+        foreach ( $valid_vars as $var => $index ) {
419
+            if ( isset( $prepared_args[ $var ] ) ) {
420
+                $query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ], $index );
421
+            }
422
+        }
423
+
424
+        $query_args['ignore_sticky_posts'] = true;
425
+
426
+        if ( 'include' === $query_args['orderby'] ) {
427
+            $query_args['orderby'] = 'post__in';
428
+        } elseif ( 'id' === $query_args['orderby'] ) {
429
+            $query_args['orderby'] = 'ID'; // ID must be capitalized.
430
+        } elseif ( 'slug' === $query_args['orderby'] ) {
431
+            $query_args['orderby'] = 'name';
432
+        }
433
+
434
+        return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
435
+
436
+    }
437
+
438
+    /**
439
+     * Get all the WP Query vars that are allowed for the API request.
440
+     *
441
+     * @return array
442
+     */
443
+    protected function get_allowed_query_vars() {
444
+        global $wp;
445
+
446
+        /**
447
+         * Filter the publicly allowed query vars.
448
+         *
449
+         * Allows adjusting of the default query vars that are made public.
450
+         *
451
+         * @param array  Array of allowed WP_Query query vars.
452
+         */
453
+        $valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
454
+
455
+        $post_type_obj = get_post_type_object( $this->post_type );
456
+        if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
457
+            $private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
458
+            $valid_vars = array_merge( $valid_vars, $private );
459
+        }
460
+
461
+        // Define our own in addition to WP's normal vars.
462
+        $rest_valid = array(
463
+            'post_status',
464
+            'date_query',
465
+            'ignore_sticky_posts',
466
+            'offset',
467
+            'post__in',
468
+            'post__not_in',
469
+            'post_parent',
470
+            'post_parent__in',
471
+            'post_parent__not_in',
472
+            'posts_per_page',
473
+            'meta_query',
474
+            'tax_query',
475
+            'meta_key',
476
+            'meta_value',
477
+            'meta_compare',
478
+            'meta_value_num',
479
+        );
480
+        $valid_vars = array_merge( $valid_vars, $rest_valid );
481
+
482
+        // Filter allowed query vars for the REST API.
483
+        $valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
484
+
485
+        return $valid_vars;
486
+    }
487
+
488
+    /**
489
+     * Get the query params for collections of attachments.
490
+     *
491
+     * @return array
492
+     */
493
+    public function get_collection_params() {
494
+
495
+        return array_merge(
496
+            parent::get_collection_params(),
497
+            array(
498
+                'status'  => array(
499
+                    'default'           => $this->get_post_statuses(),
500
+                    'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
501
+                    'type'              => array( 'array', 'string' ),
502
+                    'items'             => array(
503
+                        'enum' => $this->get_post_statuses(),
504
+                        'type' => 'string',
505
+                    ),
506
+                    'validate_callback' => 'rest_validate_request_arg',
507
+                    'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
508
+                ),
509
+                'after'   => array(
510
+                    'description'       => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
511
+                    'type'              => 'string',
512
+                    'format'            => 'string',
513
+                    'validate_callback' => 'rest_validate_request_arg',
514
+                    'sanitize_callback' => 'sanitize_text_field',
515
+                ),
516
+                'before'  => array(
517
+                    'description'       => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
518
+                    'type'              => 'string',
519
+                    'format'            => 'string',
520
+                    'validate_callback' => 'rest_validate_request_arg',
521
+                    'sanitize_callback' => 'sanitize_text_field',
522
+                ),
523
+                'exclude' => array(
524
+                    'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
525
+                    'type'              => 'array',
526
+                    'items'             => array(
527
+                        'type' => 'integer',
528
+                    ),
529
+                    'default'           => array(),
530
+                    'sanitize_callback' => 'wp_parse_id_list',
531
+                    'validate_callback' => 'rest_validate_request_arg',
532
+                ),
533
+                'include' => array(
534
+                    'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
535
+                    'type'              => 'array',
536
+                    'items'             => array(
537
+                        'type' => 'integer',
538
+                    ),
539
+                    'default'           => array(),
540
+                    'sanitize_callback' => 'wp_parse_id_list',
541
+                    'validate_callback' => 'rest_validate_request_arg',
542
+                ),
543
+                'offset'  => array(
544
+                    'description'       => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
545
+                    'type'              => 'integer',
546
+                    'sanitize_callback' => 'absint',
547
+                    'validate_callback' => 'rest_validate_request_arg',
548
+                ),
549
+                'order'   => array(
550
+                    'description'       => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
551
+                    'type'              => 'string',
552
+                    'default'           => 'desc',
553
+                    'enum'              => array( 'asc', 'desc' ),
554
+                    'validate_callback' => 'rest_validate_request_arg',
555
+                ),
556
+                'orderby' => array(
557
+                    'description'       => __( 'Sort collection by object attribute.', 'invoicing' ),
558
+                    'type'              => 'string',
559
+                    'default'           => 'date',
560
+                    'enum'              => array(
561
+                        'date',
562
+                        'id',
563
+                        'include',
564
+                        'title',
565
+                        'slug',
566
+                        'modified',
567
+                    ),
568
+                    'validate_callback' => 'rest_validate_request_arg',
569
+                ),
570
+            )
571
+        );
572
+    }
573
+
574
+    /**
575
+     * Retrieves the items's schema, conforming to JSON Schema.
576
+     *
577
+     * @since 1.0.19
578
+     *
579
+     * @return array Item schema data.
580
+     */
581
+    public function get_item_schema() {
582
+
583
+        // Maybe retrieve the schema from cache.
584
+        if ( ! empty( $this->schema ) ) {
585
+            return $this->add_additional_fields_schema( $this->schema );
586
+        }
587
+
588
+        $type   = str_replace( 'wpi_', '', $this->post_type );
589
+        $schema = array(
590
+            '$schema'    => 'http://json-schema.org/draft-04/schema#',
591
+            'title'      => $this->post_type,
592
+            'type'       => 'object',
593
+            'properties' => wpinv_get_data( "$type-schema" ),
594
+        );
595
+
596
+        // Filters the invoice schema for the REST API.
597 597
         $schema = apply_filters( "wpinv_rest_{$type}_schema", $schema );
598 598
 
599
-		// Cache the invoice schema.
600
-		$this->schema = $schema;
601
-
602
-		return $this->add_additional_fields_schema( $this->schema );
603
-	}
604
-
605
-	/**
606
-	 * Sanitizes and validates the list of post statuses.
607
-	 *
608
-	 * @since 1.0.13
609
-	 *
610
-	 * @param string|array    $statuses  One or more post statuses.
611
-	 * @param WP_REST_Request $request   Full details about the request.
612
-	 * @param string          $parameter Additional parameter to pass to validation.
613
-	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
614
-	 */
615
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
616
-		return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
617
-	}
618
-
619
-	/**
620
-	 * Retrieves a valid list of post statuses.
621
-	 *
622
-	 * @since 1.0.19
623
-	 *
624
-	 * @return array A list of registered item statuses.
625
-	 */
626
-	public function get_post_statuses() {
627
-		return get_post_stati();
628
-	}
629
-
630
-	/**
631
-	 * Checks if a key should be included in a response.
632
-	 *
633
-	 * @since  1.0.19
634
-	 * @param  GetPaid_Data $object  Data object.
635
-	 * @param  string       $field_key The key to check for.
636
-	 * @return bool
637
-	 */
638
-	public function object_supports_field( $object, $field_key ) {
639
-		$supports = parent::object_supports_field( $object, $field_key );
640
-		return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", $supports, $object, $field_key );
641
-	}
599
+        // Cache the invoice schema.
600
+        $this->schema = $schema;
601
+
602
+        return $this->add_additional_fields_schema( $this->schema );
603
+    }
604
+
605
+    /**
606
+     * Sanitizes and validates the list of post statuses.
607
+     *
608
+     * @since 1.0.13
609
+     *
610
+     * @param string|array    $statuses  One or more post statuses.
611
+     * @param WP_REST_Request $request   Full details about the request.
612
+     * @param string          $parameter Additional parameter to pass to validation.
613
+     * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
614
+     */
615
+    public function sanitize_post_statuses( $statuses, $request, $parameter ) {
616
+        return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
617
+    }
618
+
619
+    /**
620
+     * Retrieves a valid list of post statuses.
621
+     *
622
+     * @since 1.0.19
623
+     *
624
+     * @return array A list of registered item statuses.
625
+     */
626
+    public function get_post_statuses() {
627
+        return get_post_stati();
628
+    }
629
+
630
+    /**
631
+     * Checks if a key should be included in a response.
632
+     *
633
+     * @since  1.0.19
634
+     * @param  GetPaid_Data $object  Data object.
635
+     * @param  string       $field_key The key to check for.
636
+     * @return bool
637
+     */
638
+    public function object_supports_field( $object, $field_key ) {
639
+        $supports = parent::object_supports_field( $object, $field_key );
640
+        return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", $supports, $object, $field_key );
641
+    }
642 642
 
643 643
 }
Please login to merge, or discard this patch.
Spacing   +127 added lines, -127 removed lines patch added patch discarded remove patch
@@ -8,7 +8,7 @@  discard block
 block discarded – undo
8 8
  * @version 1.0.19
9 9
  */
10 10
 
11
-defined( 'ABSPATH' ) || exit;
11
+defined('ABSPATH') || exit;
12 12
 
13 13
 /**
14 14
  * GetPaid REST Posts controller class.
@@ -38,9 +38,9 @@  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
-		parent::register_namespace_routes( $namespace );
43
+		parent::register_namespace_routes($namespace);
44 44
 
45 45
 		register_rest_route(
46 46
 			$namespace,
@@ -48,11 +48,11 @@  discard block
 block discarded – undo
48 48
 			array(
49 49
 				array(
50 50
 					'methods'             => WP_REST_Server::EDITABLE,
51
-					'callback'            => array( $this, 'batch_items' ),
52
-					'permission_callback' => array( $this, 'batch_items_permissions_check' ),
53
-					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
51
+					'callback'            => array($this, 'batch_items'),
52
+					'permission_callback' => array($this, 'batch_items_permissions_check'),
53
+					'args'                => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE),
54 54
 				),
55
-				'schema' => array( $this, 'get_public_batch_schema' ),
55
+				'schema' => array($this, 'get_public_batch_schema'),
56 56
 			)
57 57
 		);
58 58
 
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 	 * @param int    $object_id Post ID.
67 67
 	 * @return bool
68 68
 	 */
69
-	public function check_post_permissions( $context = 'read', $object_id = 0 ) {
69
+	public function check_post_permissions($context = 'read', $object_id = 0) {
70 70
 
71 71
 		$contexts = array(
72 72
 			'read'   => 'read_private_posts',
@@ -76,11 +76,11 @@  discard block
 block discarded – undo
76 76
 			'batch'  => 'edit_others_posts',
77 77
 		);
78 78
 
79
-		$cap              = $contexts[ $context ];
80
-		$post_type_object = get_post_type_object( $this->post_type );
81
-		$permission       = current_user_can( $post_type_object->cap->$cap, $object_id );
79
+		$cap              = $contexts[$context];
80
+		$post_type_object = get_post_type_object($this->post_type);
81
+		$permission       = current_user_can($post_type_object->cap->$cap, $object_id);
82 82
 
83
-		return apply_filters( 'getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type );
83
+		return apply_filters('getpaid_rest_check_permissions', $permission, $context, $object_id, $this->post_type);
84 84
 	}
85 85
 
86 86
 	/**
@@ -89,8 +89,8 @@  discard block
 block discarded – undo
89 89
 	 * @param  WP_REST_Request $request Full details about the request.
90 90
 	 * @return WP_Error|boolean
91 91
 	 */
92
-	public function get_items_permissions_check( $request ) {
93
-		return $this->check_post_permissions() ? true : new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
92
+	public function get_items_permissions_check($request) {
93
+		return $this->check_post_permissions() ? true : new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
94 94
 	}
95 95
 
96 96
 	/**
@@ -99,8 +99,8 @@  discard block
 block discarded – undo
99 99
 	 * @param  WP_REST_Request $request Full details about the request.
100 100
 	 * @return WP_Error|boolean
101 101
 	 */
102
-	public function create_item_permissions_check( $request ) {
103
-		return $this->check_post_permissions( 'create' ) ? true : new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
102
+	public function create_item_permissions_check($request) {
103
+		return $this->check_post_permissions('create') ? true : new WP_Error('rest_cannot_create', __('Sorry, you are not allowed to create resources.', 'invoicing'), array('status' => rest_authorization_required_code()));
104 104
 	}
105 105
 
106 106
 	/**
@@ -109,11 +109,11 @@  discard block
 block discarded – undo
109 109
 	 * @param  WP_REST_Request $request Full details about the request.
110 110
 	 * @return WP_Error|boolean
111 111
 	 */
112
-	public function get_item_permissions_check( $request ) {
113
-		$post = get_post( (int) $request['id'] );
112
+	public function get_item_permissions_check($request) {
113
+		$post = get_post((int) $request['id']);
114 114
 
115
-		if ( $post && ! $this->check_post_permissions( 'read', $post->ID ) ) {
116
-			return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot view this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
115
+		if ($post && !$this->check_post_permissions('read', $post->ID)) {
116
+			return new WP_Error('rest_cannot_view', __('Sorry, you cannot view this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
117 117
 		}
118 118
 
119 119
 		return true;
@@ -125,11 +125,11 @@  discard block
 block discarded – undo
125 125
 	 * @param  WP_REST_Request $request Full details about the request.
126 126
 	 * @return WP_Error|boolean
127 127
 	 */
128
-	public function update_item_permissions_check( $request ) {
129
-		$post = get_post( (int) $request['id'] );
128
+	public function update_item_permissions_check($request) {
129
+		$post = get_post((int) $request['id']);
130 130
 
131
-		if ( $post && ! $this->check_post_permissions( 'edit', $post->ID ) ) {
132
-			return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you are not allowed to edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
131
+		if ($post && !$this->check_post_permissions('edit', $post->ID)) {
132
+			return new WP_Error('rest_cannot_edit', __('Sorry, you are not allowed to edit this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
133 133
 		}
134 134
 
135 135
 		return true;
@@ -141,11 +141,11 @@  discard block
 block discarded – undo
141 141
 	 * @param  WP_REST_Request $request Full details about the request.
142 142
 	 * @return bool|WP_Error
143 143
 	 */
144
-	public function delete_item_permissions_check( $request ) {
145
-		$post = get_post( (int) $request['id'] );
144
+	public function delete_item_permissions_check($request) {
145
+		$post = get_post((int) $request['id']);
146 146
 
147
-		if ( $post && ! $this->check_post_permissions( 'delete', $post->ID ) ) {
148
-			return new WP_Error( 'rest_cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
147
+		if ($post && !$this->check_post_permissions('delete', $post->ID)) {
148
+			return new WP_Error('rest_cannot_delete', __('Sorry, you are not allowed to delete this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
149 149
 		}
150 150
 
151 151
 		return true;
@@ -158,15 +158,15 @@  discard block
 block discarded – undo
158 158
 	 *
159 159
 	 * @return boolean|WP_Error
160 160
 	 */
161
-	public function batch_items_permissions_check( $request ) {
162
-		return $this->check_post_permissions( 'batch' ) ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
161
+	public function batch_items_permissions_check($request) {
162
+		return $this->check_post_permissions('batch') ? true : new WP_Error('rest_cannot_batch', __('Sorry, you are not allowed to batch manipulate this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
163 163
 	}
164 164
 
165 165
 	/**
166 166
 	 * @deprecated
167 167
 	 */
168
-	public function get_post( $object_id ) {
169
-		return $this->get_object( $object_id );
168
+	public function get_post($object_id) {
169
+		return $this->get_object($object_id);
170 170
     }
171 171
 
172 172
 	/**
@@ -175,14 +175,14 @@  discard block
 block discarded – undo
175 175
 	 * @param WP_REST_Request $request Full details about the request.
176 176
 	 * @return WP_Error|WP_REST_Response
177 177
 	 */
178
-	public function get_item( $request ) {
178
+	public function get_item($request) {
179 179
 
180 180
 		// Fetch item.
181
-		$response = parent::get_item( $request );
181
+		$response = parent::get_item($request);
182 182
 
183 183
 		// (Maybe) add a link to the html pagee.
184
-		if ( $this->public && ! is_wp_error( $response ) ) {
185
-			$response->link_header( 'alternate', get_permalink( $this->data_object->get_id() ), array( 'type' => 'text/html' ) );
184
+		if ($this->public && !is_wp_error($response)) {
185
+			$response->link_header('alternate', get_permalink($this->data_object->get_id()), array('type' => 'text/html'));
186 186
 		}
187 187
 
188 188
 		return $response;
@@ -194,13 +194,13 @@  discard block
 block discarded – undo
194 194
 	 * @param WP_REST_Request $request Full details about the request.
195 195
 	 * @return WP_Error|WP_REST_Response
196 196
 	 */
197
-	public function create_item( $request ) {
197
+	public function create_item($request) {
198 198
 
199 199
 		// Create item.
200
-		$response = parent::create_item( $request );
200
+		$response = parent::create_item($request);
201 201
 
202 202
 		// Fire a hook after an item is created.
203
-		if ( ! is_wp_error( $response ) ) {
203
+		if (!is_wp_error($response)) {
204 204
 
205 205
 			/**
206 206
 			 * Fires after a single item is created or updated via the REST API.
@@ -209,7 +209,7 @@  discard block
 block discarded – undo
209 209
 			 * @param WP_REST_Request $request   Request object.
210 210
 			 * @param boolean         $creating  True when creating item, false when updating.
211 211
 			 */
212
-			do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, true );
212
+			do_action("getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, true);
213 213
 
214 214
 		}
215 215
 
@@ -223,13 +223,13 @@  discard block
 block discarded – undo
223 223
 	 * @param WP_REST_Request $request Full details about the request.
224 224
 	 * @return WP_Error|WP_REST_Response
225 225
 	 */
226
-	public function update_item( $request ) {
226
+	public function update_item($request) {
227 227
 
228 228
 		// Create item.
229
-		$response = parent::update_item( $request );
229
+		$response = parent::update_item($request);
230 230
 
231 231
 		// Fire a hook after an item is created.
232
-		if ( ! is_wp_error( $response ) ) {
232
+		if (!is_wp_error($response)) {
233 233
 
234 234
 			/**
235 235
 			 * Fires after a single item is created or updated via the REST API.
@@ -238,7 +238,7 @@  discard block
 block discarded – undo
238 238
 			 * @param WP_REST_Request $request   Request object.
239 239
 			 * @param boolean         $creating  True when creating item, false when updating.
240 240
 			 */
241
-			do_action( "getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, false );
241
+			do_action("getpaid_rest_insert_{$this->post_type}", $this->data_object, $request, false);
242 242
 
243 243
 		}
244 244
 
@@ -252,7 +252,7 @@  discard block
 block discarded – undo
252 252
 	 * @param WP_REST_Request $request Full details about the request.
253 253
 	 * @return WP_Error|WP_REST_Response
254 254
 	 */
255
-	public function get_items( $request ) {
255
+	public function get_items($request) {
256 256
 
257 257
 		$args                         = array();
258 258
 		$args['offset']               = $request['offset'];
@@ -266,17 +266,17 @@  discard block
 block discarded – undo
266 266
 		$args['post_parent__in']      = $request['parent'];
267 267
 		$args['post_parent__not_in']  = $request['parent_exclude'];
268 268
 		$args['s']                    = $request['search'];
269
-		$args['post_status']          = wpinv_parse_list( $request['status'] );
269
+		$args['post_status']          = wpinv_parse_list($request['status']);
270 270
 
271 271
 		$args['date_query'] = array();
272 272
 
273 273
 		// Set before into date query. Date query must be specified as an array of an array.
274
-		if ( isset( $request['before'] ) ) {
274
+		if (isset($request['before'])) {
275 275
 			$args['date_query'][0]['before'] = $request['before'];
276 276
 		}
277 277
 
278 278
 		// Set after into date query. Date query must be specified as an array of an array.
279
-		if ( isset( $request['after'] ) ) {
279
+		if (isset($request['after'])) {
280 280
 			$args['date_query'][0]['after'] = $request['after'];
281 281
 		}
282 282
 
@@ -285,54 +285,54 @@  discard block
 block discarded – undo
285 285
 		$args['fields']    = 'ids';
286 286
 
287 287
 		// Filter the query arguments for a request.
288
-		$args       = apply_filters( "getpaid_rest_{$this->post_type}_query", $args, $request );
289
-		$query_args = $this->prepare_items_query( $args, $request );
288
+		$args       = apply_filters("getpaid_rest_{$this->post_type}_query", $args, $request);
289
+		$query_args = $this->prepare_items_query($args, $request);
290 290
 
291 291
 		$posts_query = new WP_Query();
292
-		$query_result = $posts_query->query( $query_args );
292
+		$query_result = $posts_query->query($query_args);
293 293
 
294 294
 		$posts = array();
295
-		foreach ( $query_result as $post_id ) {
296
-			if ( ! $this->check_post_permissions( 'read', $post_id ) ) {
295
+		foreach ($query_result as $post_id) {
296
+			if (!$this->check_post_permissions('read', $post_id)) {
297 297
 				continue;
298 298
 			}
299 299
 
300
-			$data    = $this->prepare_item_for_response( $this->get_object( $post_id ), $request );
301
-			$posts[] = $this->prepare_response_for_collection( $data );
300
+			$data    = $this->prepare_item_for_response($this->get_object($post_id), $request);
301
+			$posts[] = $this->prepare_response_for_collection($data);
302 302
 		}
303 303
 
304 304
 		$page        = (int) $query_args['paged'];
305 305
 		$total_posts = $posts_query->found_posts;
306 306
 
307
-		if ( $total_posts < 1 ) {
307
+		if ($total_posts < 1) {
308 308
 			// Out-of-bounds, run the query again without LIMIT for total count.
309
-			unset( $query_args['paged'] );
309
+			unset($query_args['paged']);
310 310
 			$count_query = new WP_Query();
311
-			$count_query->query( $query_args );
311
+			$count_query->query($query_args);
312 312
 			$total_posts = $count_query->found_posts;
313 313
 		}
314 314
 
315
-		$max_pages = ceil( $total_posts / (int) $query_args['posts_per_page'] );
315
+		$max_pages = ceil($total_posts / (int) $query_args['posts_per_page']);
316 316
 
317
-		$response = rest_ensure_response( $posts );
318
-		$response->header( 'X-WP-Total', (int) $total_posts );
319
-		$response->header( 'X-WP-TotalPages', (int) $max_pages );
317
+		$response = rest_ensure_response($posts);
318
+		$response->header('X-WP-Total', (int) $total_posts);
319
+		$response->header('X-WP-TotalPages', (int) $max_pages);
320 320
 
321 321
 		$request_params = $request->get_query_params();
322
-		$base = add_query_arg( $request_params, rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ) );
322
+		$base = add_query_arg($request_params, rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)));
323 323
 
324
-		if ( $page > 1 ) {
324
+		if ($page > 1) {
325 325
 			$prev_page = $page - 1;
326
-			if ( $prev_page > $max_pages ) {
326
+			if ($prev_page > $max_pages) {
327 327
 				$prev_page = $max_pages;
328 328
 			}
329
-			$prev_link = add_query_arg( 'page', $prev_page, $base );
330
-			$response->link_header( 'prev', $prev_link );
329
+			$prev_link = add_query_arg('page', $prev_page, $base);
330
+			$response->link_header('prev', $prev_link);
331 331
 		}
332
-		if ( $max_pages > $page ) {
332
+		if ($max_pages > $page) {
333 333
 			$next_page = $page + 1;
334
-			$next_link = add_query_arg( 'page', $next_page, $base );
335
-			$response->link_header( 'next', $next_link );
334
+			$next_link = add_query_arg('page', $next_page, $base);
335
+			$response->link_header('next', $next_link);
336 336
 		}
337 337
 
338 338
 		return $response;
@@ -344,26 +344,26 @@  discard block
 block discarded – undo
344 344
 	 * @param WP_REST_Request $request Full details about the request.
345 345
 	 * @return WP_REST_Response|WP_Error
346 346
 	 */
347
-	public function delete_item( $request ) {
347
+	public function delete_item($request) {
348 348
 
349 349
 		// Fetch the item.
350
-		$item = $this->get_object( $request['id'] );
351
-		if ( is_wp_error( $item ) ) {
350
+		$item = $this->get_object($request['id']);
351
+		if (is_wp_error($item)) {
352 352
 			return $item;
353 353
 		}
354 354
 
355 355
 		$supports_trash = EMPTY_TRASH_DAYS > 0;
356 356
 		$force          = $supports_trash && (bool) $request['force'];
357 357
 
358
-		if ( ! $this->check_post_permissions( 'delete', $item->ID ) ) {
359
-			return new WP_Error( 'cannot_delete', __( 'Sorry, you are not allowed to delete this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) );
358
+		if (!$this->check_post_permissions('delete', $item->ID)) {
359
+			return new WP_Error('cannot_delete', __('Sorry, you are not allowed to delete this resource.', 'invoicing'), array('status' => rest_authorization_required_code()));
360 360
 		}
361 361
 
362
-		$request->set_param( 'context', 'edit' );
363
-		$response = $this->prepare_item_for_response( $item, $request );
362
+		$request->set_param('context', 'edit');
363
+		$response = $this->prepare_item_for_response($item, $request);
364 364
 
365
-		if ( ! wp_delete_post( $item->ID, $force ) ) {
366
-			return new WP_Error( 'rest_cannot_delete', sprintf( __( 'The resource cannot be deleted.', 'invoicing' ), $this->post_type ), array( 'status' => 500 ) );
365
+		if (!wp_delete_post($item->ID, $force)) {
366
+			return new WP_Error('rest_cannot_delete', sprintf(__('The resource cannot be deleted.', 'invoicing'), $this->post_type), array('status' => 500));
367 367
 		}
368 368
 
369 369
 		return $response;
@@ -375,27 +375,27 @@  discard block
 block discarded – undo
375 375
 	 * @param GetPaid_Data    $object GetPaid_Data object.
376 376
 	 * @return array Links for the given object.
377 377
 	 */
378
-	protected function prepare_links( $object ) {
378
+	protected function prepare_links($object) {
379 379
 
380
-		$links = parent::prepare_links( $object );
380
+		$links = parent::prepare_links($object);
381 381
 
382
-		if ( is_callable( array( $object, 'get_user_id' ) ) ) {
382
+		if (is_callable(array($object, 'get_user_id'))) {
383 383
 			$links['user'] = array(
384
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_user_id' ) ) ),
384
+				'href'       => rest_url('wp/v2/users/' . call_user_func(array($object, 'get_user_id'))),
385 385
 				'embeddable' => true,
386 386
 			);
387 387
 		}
388 388
 
389
-		if ( is_callable( array( $object, 'get_owner' ) ) ) {
390
-			$links['owner']  = array(
391
-				'href'       => rest_url( 'wp/v2/users/' . call_user_func( array( $object, 'get_owner' ) ) ),
389
+		if (is_callable(array($object, 'get_owner'))) {
390
+			$links['owner'] = array(
391
+				'href'       => rest_url('wp/v2/users/' . call_user_func(array($object, 'get_owner'))),
392 392
 				'embeddable' => true,
393 393
 			);
394 394
 		}
395 395
 
396
-		if ( is_callable( array( $object, 'get_parent_id' ) ) && call_user_func( array( $object, 'get_parent_id' ) ) ) {
397
-			$links['parent']  = array(
398
-				'href'       => rest_url( "$this->namespace/$this->rest_base/" . call_user_func( array( $object, 'get_parent_id' ) ) ),
396
+		if (is_callable(array($object, 'get_parent_id')) && call_user_func(array($object, 'get_parent_id'))) {
397
+			$links['parent'] = array(
398
+				'href'       => rest_url("$this->namespace/$this->rest_base/" . call_user_func(array($object, 'get_parent_id'))),
399 399
 				'embeddable' => true,
400 400
 			);
401 401
 		}
@@ -411,27 +411,27 @@  discard block
 block discarded – undo
411 411
 	 * @param WP_REST_Request $request Request object.
412 412
 	 * @return array          $query_args
413 413
 	 */
414
-	protected function prepare_items_query( $prepared_args = array(), $request = null ) {
414
+	protected function prepare_items_query($prepared_args = array(), $request = null) {
415 415
 
416
-		$valid_vars = array_flip( $this->get_allowed_query_vars() );
416
+		$valid_vars = array_flip($this->get_allowed_query_vars());
417 417
 		$query_args = array();
418
-		foreach ( $valid_vars as $var => $index ) {
419
-			if ( isset( $prepared_args[ $var ] ) ) {
420
-				$query_args[ $var ] = apply_filters( "getpaid_rest_query_var-{$var}", $prepared_args[ $var ], $index );
418
+		foreach ($valid_vars as $var => $index) {
419
+			if (isset($prepared_args[$var])) {
420
+				$query_args[$var] = apply_filters("getpaid_rest_query_var-{$var}", $prepared_args[$var], $index);
421 421
 			}
422 422
 		}
423 423
 
424 424
 		$query_args['ignore_sticky_posts'] = true;
425 425
 
426
-		if ( 'include' === $query_args['orderby'] ) {
426
+		if ('include' === $query_args['orderby']) {
427 427
 			$query_args['orderby'] = 'post__in';
428
-		} elseif ( 'id' === $query_args['orderby'] ) {
428
+		} elseif ('id' === $query_args['orderby']) {
429 429
 			$query_args['orderby'] = 'ID'; // ID must be capitalized.
430
-		} elseif ( 'slug' === $query_args['orderby'] ) {
430
+		} elseif ('slug' === $query_args['orderby']) {
431 431
 			$query_args['orderby'] = 'name';
432 432
 		}
433 433
 
434
-		return apply_filters( 'getpaid_rest_prepare_items_query', $query_args, $request, $this );
434
+		return apply_filters('getpaid_rest_prepare_items_query', $query_args, $request, $this);
435 435
 
436 436
 	}
437 437
 
@@ -450,12 +450,12 @@  discard block
 block discarded – undo
450 450
 		 *
451 451
 		 * @param array  Array of allowed WP_Query query vars.
452 452
 		 */
453
-		$valid_vars = apply_filters( 'query_vars', $wp->public_query_vars );
453
+		$valid_vars = apply_filters('query_vars', $wp->public_query_vars);
454 454
 
455
-		$post_type_obj = get_post_type_object( $this->post_type );
456
-		if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
457
-			$private = apply_filters( 'getpaid_rest_private_query_vars', $wp->private_query_vars );
458
-			$valid_vars = array_merge( $valid_vars, $private );
455
+		$post_type_obj = get_post_type_object($this->post_type);
456
+		if (current_user_can($post_type_obj->cap->edit_posts)) {
457
+			$private = apply_filters('getpaid_rest_private_query_vars', $wp->private_query_vars);
458
+			$valid_vars = array_merge($valid_vars, $private);
459 459
 		}
460 460
 
461 461
 		// Define our own in addition to WP's normal vars.
@@ -477,10 +477,10 @@  discard block
 block discarded – undo
477 477
 			'meta_compare',
478 478
 			'meta_value_num',
479 479
 		);
480
-		$valid_vars = array_merge( $valid_vars, $rest_valid );
480
+		$valid_vars = array_merge($valid_vars, $rest_valid);
481 481
 
482 482
 		// Filter allowed query vars for the REST API.
483
-		$valid_vars = apply_filters( 'getpaid_rest_query_vars', $valid_vars, $this );
483
+		$valid_vars = apply_filters('getpaid_rest_query_vars', $valid_vars, $this);
484 484
 
485 485
 		return $valid_vars;
486 486
 	}
@@ -497,31 +497,31 @@  discard block
 block discarded – undo
497 497
 			array(
498 498
 				'status'  => array(
499 499
 					'default'           => $this->get_post_statuses(),
500
-					'description'       => __( 'Limit result set to resources assigned one or more statuses.', 'invoicing' ),
501
-					'type'              => array( 'array', 'string' ),
500
+					'description'       => __('Limit result set to resources assigned one or more statuses.', 'invoicing'),
501
+					'type'              => array('array', 'string'),
502 502
 					'items'             => array(
503 503
 						'enum' => $this->get_post_statuses(),
504 504
 						'type' => 'string',
505 505
 					),
506 506
 					'validate_callback' => 'rest_validate_request_arg',
507
-					'sanitize_callback' => array( $this, 'sanitize_post_statuses' ),
507
+					'sanitize_callback' => array($this, 'sanitize_post_statuses'),
508 508
 				),
509 509
 				'after'   => array(
510
-					'description'       => __( 'Limit response to resources created after a given ISO8601 compliant date.', 'invoicing' ),
510
+					'description'       => __('Limit response to resources created after a given ISO8601 compliant date.', 'invoicing'),
511 511
 					'type'              => 'string',
512 512
 					'format'            => 'string',
513 513
 					'validate_callback' => 'rest_validate_request_arg',
514 514
 					'sanitize_callback' => 'sanitize_text_field',
515 515
 				),
516 516
 				'before'  => array(
517
-					'description'       => __( 'Limit response to resources created before a given ISO8601 compliant date.', 'invoicing' ),
517
+					'description'       => __('Limit response to resources created before a given ISO8601 compliant date.', 'invoicing'),
518 518
 					'type'              => 'string',
519 519
 					'format'            => 'string',
520 520
 					'validate_callback' => 'rest_validate_request_arg',
521 521
 					'sanitize_callback' => 'sanitize_text_field',
522 522
 				),
523 523
 				'exclude' => array(
524
-					'description'       => __( 'Ensure result set excludes specific IDs.', 'invoicing' ),
524
+					'description'       => __('Ensure result set excludes specific IDs.', 'invoicing'),
525 525
 					'type'              => 'array',
526 526
 					'items'             => array(
527 527
 						'type' => 'integer',
@@ -531,7 +531,7 @@  discard block
 block discarded – undo
531 531
 					'validate_callback' => 'rest_validate_request_arg',
532 532
 				),
533 533
 				'include' => array(
534
-					'description'       => __( 'Limit result set to specific ids.', 'invoicing' ),
534
+					'description'       => __('Limit result set to specific ids.', 'invoicing'),
535 535
 					'type'              => 'array',
536 536
 					'items'             => array(
537 537
 						'type' => 'integer',
@@ -541,20 +541,20 @@  discard block
 block discarded – undo
541 541
 					'validate_callback' => 'rest_validate_request_arg',
542 542
 				),
543 543
 				'offset'  => array(
544
-					'description'       => __( 'Offset the result set by a specific number of items.', 'invoicing' ),
544
+					'description'       => __('Offset the result set by a specific number of items.', 'invoicing'),
545 545
 					'type'              => 'integer',
546 546
 					'sanitize_callback' => 'absint',
547 547
 					'validate_callback' => 'rest_validate_request_arg',
548 548
 				),
549 549
 				'order'   => array(
550
-					'description'       => __( 'Order sort attribute ascending or descending.', 'invoicing' ),
550
+					'description'       => __('Order sort attribute ascending or descending.', 'invoicing'),
551 551
 					'type'              => 'string',
552 552
 					'default'           => 'desc',
553
-					'enum'              => array( 'asc', 'desc' ),
553
+					'enum'              => array('asc', 'desc'),
554 554
 					'validate_callback' => 'rest_validate_request_arg',
555 555
 				),
556 556
 				'orderby' => array(
557
-					'description'       => __( 'Sort collection by object attribute.', 'invoicing' ),
557
+					'description'       => __('Sort collection by object attribute.', 'invoicing'),
558 558
 					'type'              => 'string',
559 559
 					'default'           => 'date',
560 560
 					'enum'              => array(
@@ -581,25 +581,25 @@  discard block
 block discarded – undo
581 581
 	public function get_item_schema() {
582 582
 
583 583
 		// Maybe retrieve the schema from cache.
584
-		if ( ! empty( $this->schema ) ) {
585
-			return $this->add_additional_fields_schema( $this->schema );
584
+		if (!empty($this->schema)) {
585
+			return $this->add_additional_fields_schema($this->schema);
586 586
 		}
587 587
 
588
-		$type   = str_replace( 'wpi_', '', $this->post_type );
588
+		$type   = str_replace('wpi_', '', $this->post_type);
589 589
 		$schema = array(
590 590
 			'$schema'    => 'http://json-schema.org/draft-04/schema#',
591 591
 			'title'      => $this->post_type,
592 592
 			'type'       => 'object',
593
-			'properties' => wpinv_get_data( "$type-schema" ),
593
+			'properties' => wpinv_get_data("$type-schema"),
594 594
 		);
595 595
 
596 596
 		// Filters the invoice schema for the REST API.
597
-        $schema = apply_filters( "wpinv_rest_{$type}_schema", $schema );
597
+        $schema = apply_filters("wpinv_rest_{$type}_schema", $schema);
598 598
 
599 599
 		// Cache the invoice schema.
600 600
 		$this->schema = $schema;
601 601
 
602
-		return $this->add_additional_fields_schema( $this->schema );
602
+		return $this->add_additional_fields_schema($this->schema);
603 603
 	}
604 604
 
605 605
 	/**
@@ -612,8 +612,8 @@  discard block
 block discarded – undo
612 612
 	 * @param string          $parameter Additional parameter to pass to validation.
613 613
 	 * @return array|WP_Error A list of valid statuses, otherwise WP_Error object.
614 614
 	 */
615
-	public function sanitize_post_statuses( $statuses, $request, $parameter ) {
616
-		return array_intersect( wp_parse_slug_list( $statuses ), $this->get_post_statuses() );
615
+	public function sanitize_post_statuses($statuses, $request, $parameter) {
616
+		return array_intersect(wp_parse_slug_list($statuses), $this->get_post_statuses());
617 617
 	}
618 618
 
619 619
 	/**
@@ -635,9 +635,9 @@  discard block
 block discarded – undo
635 635
 	 * @param  string       $field_key The key to check for.
636 636
 	 * @return bool
637 637
 	 */
638
-	public function object_supports_field( $object, $field_key ) {
639
-		$supports = parent::object_supports_field( $object, $field_key );
640
-		return apply_filters( "getpaid_rest_{$this->post_type}_object_supports_key", $supports, $object, $field_key );
638
+	public function object_supports_field($object, $field_key) {
639
+		$supports = parent::object_supports_field($object, $field_key);
640
+		return apply_filters("getpaid_rest_{$this->post_type}_object_supports_key", $supports, $object, $field_key);
641 641
 	}
642 642
 
643 643
 }
Please login to merge, or discard this patch.