@@ -7,31 +7,31 @@ discard block |
||
7 | 7 | * @version 1.0.19 |
8 | 8 | */ |
9 | 9 | |
10 | -defined( 'ABSPATH' ) || exit; |
|
10 | +defined('ABSPATH') || exit; |
|
11 | 11 | |
12 | 12 | // Cart table columns. |
13 | 13 | $columns = array( |
14 | - 'name' => __( 'Item', 'invoicing' ), |
|
15 | - 'price' => __( 'Price', 'invoicing' ), |
|
16 | - 'quantity' => __( 'Quantity', 'invoicing' ), |
|
17 | - 'subtotal' => __( 'Subtotal', 'invoicing' ), |
|
14 | + 'name' => __('Item', 'invoicing'), |
|
15 | + 'price' => __('Price', 'invoicing'), |
|
16 | + 'quantity' => __('Quantity', 'invoicing'), |
|
17 | + 'subtotal' => __('Subtotal', 'invoicing'), |
|
18 | 18 | ); |
19 | 19 | |
20 | -if ( ! empty( $form->invoice ) ) { |
|
21 | - $columns = getpaid_invoice_item_columns( $form->invoice ); |
|
20 | +if (!empty($form->invoice)) { |
|
21 | + $columns = getpaid_invoice_item_columns($form->invoice); |
|
22 | 22 | } |
23 | 23 | |
24 | -$columns = apply_filters( 'getpaid_payment_form_cart_table_columns', $columns, $form ); |
|
24 | +$columns = apply_filters('getpaid_payment_form_cart_table_columns', $columns, $form); |
|
25 | 25 | |
26 | -do_action( 'getpaid_before_payment_form_cart', $form ); |
|
26 | +do_action('getpaid_before_payment_form_cart', $form); |
|
27 | 27 | |
28 | 28 | ?> |
29 | 29 | <div class="getpaid-payment-form-items-cart border form-group"> |
30 | 30 | <div class="getpaid-payment-form-items-cart-header border-bottom py-2 px-3 font-weight-bold bg-light"> |
31 | 31 | <div class="form-row"> |
32 | - <?php foreach ( $columns as $key => $label ) : ?> |
|
33 | - <div class="<?php echo 'name' == $key ? 'col-12 col-sm-5' : 'col-12 col-sm' ?> getpaid-form-cart-item-<?php echo esc_attr( $key ); ?>"> |
|
34 | - <?php echo sanitize_text_field( $label ); ?> |
|
32 | + <?php foreach ($columns as $key => $label) : ?> |
|
33 | + <div class="<?php echo 'name' == $key ? 'col-12 col-sm-5' : 'col-12 col-sm' ?> getpaid-form-cart-item-<?php echo esc_attr($key); ?>"> |
|
34 | + <?php echo sanitize_text_field($label); ?> |
|
35 | 35 | </div> |
36 | 36 | <?php endforeach; ?> |
37 | 37 | </div> |
@@ -39,16 +39,16 @@ discard block |
||
39 | 39 | <?php |
40 | 40 | |
41 | 41 | // Display the item totals. |
42 | - foreach ( $form->get_items() as $item ) { |
|
43 | - wpinv_get_template( 'payment-forms/cart-item.php', compact( 'form', 'item', 'columns' ) ); |
|
42 | + foreach ($form->get_items() as $item) { |
|
43 | + wpinv_get_template('payment-forms/cart-item.php', compact('form', 'item', 'columns')); |
|
44 | 44 | } |
45 | 45 | |
46 | 46 | // Display the cart totals. |
47 | - wpinv_get_template( 'payment-forms/cart-totals.php', compact( 'form' ) ); |
|
47 | + wpinv_get_template('payment-forms/cart-totals.php', compact('form')); |
|
48 | 48 | |
49 | 49 | ?> |
50 | 50 | </div> |
51 | 51 | |
52 | 52 | <?php |
53 | 53 | |
54 | -do_action( 'getpaid_after_payment_form_cart', $form ); |
|
54 | +do_action('getpaid_after_payment_form_cart', $form); |
@@ -13,30 +13,30 @@ discard block |
||
13 | 13 | class GetPaid_Bank_Transfer_Gateway extends GetPaid_Payment_Gateway { |
14 | 14 | |
15 | 15 | /** |
16 | - * Payment method id. |
|
17 | - * |
|
18 | - * @var string |
|
19 | - */ |
|
16 | + * Payment method id. |
|
17 | + * |
|
18 | + * @var string |
|
19 | + */ |
|
20 | 20 | public $id = 'bank_transfer'; |
21 | 21 | |
22 | - /** |
|
23 | - * An array of features that this gateway supports. |
|
24 | - * |
|
25 | - * @var array |
|
26 | - */ |
|
27 | - protected $supports = array( 'addons' ); |
|
22 | + /** |
|
23 | + * An array of features that this gateway supports. |
|
24 | + * |
|
25 | + * @var array |
|
26 | + */ |
|
27 | + protected $supports = array( 'addons' ); |
|
28 | 28 | |
29 | 29 | /** |
30 | - * Payment method order. |
|
31 | - * |
|
32 | - * @var int |
|
33 | - */ |
|
34 | - public $order = 8; |
|
30 | + * Payment method order. |
|
31 | + * |
|
32 | + * @var int |
|
33 | + */ |
|
34 | + public $order = 8; |
|
35 | 35 | |
36 | 36 | /** |
37 | - * Class constructor. |
|
38 | - */ |
|
39 | - public function __construct() { |
|
37 | + * Class constructor. |
|
38 | + */ |
|
39 | + public function __construct() { |
|
40 | 40 | parent::__construct(); |
41 | 41 | |
42 | 42 | $this->title = __( 'Direct bank transfer', 'invoicing' ); |
@@ -44,23 +44,23 @@ discard block |
||
44 | 44 | $this->checkout_button_text = __( 'Proceed', 'invoicing' ); |
45 | 45 | $this->instructions = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) ); |
46 | 46 | |
47 | - add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) ); |
|
48 | - add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 ); |
|
49 | - add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 ); |
|
50 | - add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 ); |
|
47 | + add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) ); |
|
48 | + add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 ); |
|
49 | + add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 ); |
|
50 | + add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 ); |
|
51 | 51 | |
52 | 52 | } |
53 | 53 | |
54 | 54 | /** |
55 | - * Process Payment. |
|
56 | - * |
|
57 | - * |
|
58 | - * @param WPInv_Invoice $invoice Invoice. |
|
59 | - * @param array $submission_data Posted checkout fields. |
|
60 | - * @param GetPaid_Payment_Form_Submission $submission Checkout submission. |
|
61 | - * @return array |
|
62 | - */ |
|
63 | - public function process_payment( $invoice, $submission_data, $submission ) { |
|
55 | + * Process Payment. |
|
56 | + * |
|
57 | + * |
|
58 | + * @param WPInv_Invoice $invoice Invoice. |
|
59 | + * @param array $submission_data Posted checkout fields. |
|
60 | + * @param GetPaid_Payment_Form_Submission $submission Checkout submission. |
|
61 | + * @return array |
|
62 | + */ |
|
63 | + public function process_payment( $invoice, $submission_data, $submission ) { |
|
64 | 64 | |
65 | 65 | // Add a transaction id. |
66 | 66 | $invoice->set_transaction_id( $invoice->generate_key('trans_') ); |
@@ -81,66 +81,66 @@ discard block |
||
81 | 81 | } |
82 | 82 | |
83 | 83 | /** |
84 | - * Output for the order received page. |
|
85 | - * |
|
86 | - * @param WPInv_Invoice $invoice Invoice. |
|
87 | - */ |
|
88 | - public function thankyou_page( $invoice ) { |
|
84 | + * Output for the order received page. |
|
85 | + * |
|
86 | + * @param WPInv_Invoice $invoice Invoice. |
|
87 | + */ |
|
88 | + public function thankyou_page( $invoice ) { |
|
89 | 89 | |
90 | 90 | if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
91 | 91 | |
92 | - echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL; |
|
92 | + echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL; |
|
93 | 93 | |
94 | 94 | if ( ! empty( $this->instructions ) ) { |
95 | 95 | echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) ); |
96 | - } |
|
96 | + } |
|
97 | 97 | |
98 | - $this->bank_details( $invoice ); |
|
98 | + $this->bank_details( $invoice ); |
|
99 | 99 | |
100 | - echo '</div>'; |
|
100 | + echo '</div>'; |
|
101 | 101 | |
102 | 102 | } |
103 | 103 | |
104 | - } |
|
104 | + } |
|
105 | 105 | |
106 | 106 | /** |
107 | - * Add content to the WPI emails. |
|
108 | - * |
|
109 | - * @param WPInv_Invoice $invoice Invoice. |
|
110 | - * @param string $email_type Email format: plain text or HTML. |
|
111 | - * @param bool $sent_to_admin Sent to admin. |
|
112 | - */ |
|
113 | - public function email_instructions( $invoice, $email_type, $sent_to_admin ) { |
|
107 | + * Add content to the WPI emails. |
|
108 | + * |
|
109 | + * @param WPInv_Invoice $invoice Invoice. |
|
110 | + * @param string $email_type Email format: plain text or HTML. |
|
111 | + * @param bool $sent_to_admin Sent to admin. |
|
112 | + */ |
|
113 | + public function email_instructions( $invoice, $email_type, $sent_to_admin ) { |
|
114 | 114 | |
115 | - if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
115 | + if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
116 | 116 | |
117 | - echo '<div class="wpi-email-row getpaid-bank-transfer-details">'; |
|
117 | + echo '<div class="wpi-email-row getpaid-bank-transfer-details">'; |
|
118 | 118 | |
119 | - if ( $this->instructions ) { |
|
120 | - echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); |
|
119 | + if ( $this->instructions ) { |
|
120 | + echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); |
|
121 | 121 | } |
122 | 122 | |
123 | - $this->bank_details( $invoice ); |
|
123 | + $this->bank_details( $invoice ); |
|
124 | 124 | |
125 | - echo '</div>'; |
|
125 | + echo '</div>'; |
|
126 | 126 | |
127 | - } |
|
127 | + } |
|
128 | 128 | |
129 | 129 | } |
130 | 130 | |
131 | 131 | /** |
132 | - * Get bank details and place into a list format. |
|
133 | - * |
|
134 | - * @param WPInv_Invoice $invoice Invoice. |
|
135 | - */ |
|
136 | - protected function bank_details( $invoice ) { |
|
132 | + * Get bank details and place into a list format. |
|
133 | + * |
|
134 | + * @param WPInv_Invoice $invoice Invoice. |
|
135 | + */ |
|
136 | + protected function bank_details( $invoice ) { |
|
137 | 137 | |
138 | - // Get the invoice country and country $locale. |
|
139 | - $country = $invoice->get_country(); |
|
140 | - $locale = $this->get_country_locale(); |
|
138 | + // Get the invoice country and country $locale. |
|
139 | + $country = $invoice->get_country(); |
|
140 | + $locale = $this->get_country_locale(); |
|
141 | 141 | |
142 | - // Get sortcode label in the $locale array and use appropriate one. |
|
143 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
142 | + // Get sortcode label in the $locale array and use appropriate one. |
|
143 | + $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
144 | 144 | |
145 | 145 | $bank_fields = array( |
146 | 146 | 'ac_name' => __( 'Account Name', 'invoicing' ), |
@@ -169,144 +169,144 @@ discard block |
||
169 | 169 | return; |
170 | 170 | } |
171 | 171 | |
172 | - echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
172 | + echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
173 | 173 | |
174 | - echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
174 | + echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
|
175 | 175 | |
176 | - foreach ( $bank_info as $key => $data ) { |
|
176 | + foreach ( $bank_info as $key => $data ) { |
|
177 | 177 | |
178 | - $key = sanitize_html_class( $key ); |
|
179 | - $label = wp_kses_post( $data['label'] ); |
|
180 | - $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
178 | + $key = sanitize_html_class( $key ); |
|
179 | + $label = wp_kses_post( $data['label'] ); |
|
180 | + $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
181 | 181 | |
182 | - echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL; |
|
183 | - } |
|
182 | + echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL; |
|
183 | + } |
|
184 | 184 | |
185 | - echo '</table>'; |
|
185 | + echo '</table>'; |
|
186 | 186 | |
187 | 187 | } |
188 | 188 | |
189 | 189 | /** |
190 | - * Get country locale if localized. |
|
191 | - * |
|
192 | - * @return array |
|
193 | - */ |
|
194 | - public function get_country_locale() { |
|
195 | - |
|
196 | - if ( empty( $this->locale ) ) { |
|
197 | - |
|
198 | - // Locale information to be used - only those that are not 'Sort Code'. |
|
199 | - $this->locale = apply_filters( |
|
200 | - 'getpaid_get_bank_transfer_locale', |
|
201 | - array( |
|
202 | - 'AU' => array( |
|
203 | - 'sortcode' => array( |
|
204 | - 'label' => __( 'BSB', 'invoicing' ), |
|
205 | - ), |
|
206 | - ), |
|
207 | - 'CA' => array( |
|
208 | - 'sortcode' => array( |
|
209 | - 'label' => __( 'Bank transit number', 'invoicing' ), |
|
210 | - ), |
|
211 | - ), |
|
212 | - 'IN' => array( |
|
213 | - 'sortcode' => array( |
|
214 | - 'label' => __( 'IFSC', 'invoicing' ), |
|
215 | - ), |
|
216 | - ), |
|
217 | - 'IT' => array( |
|
218 | - 'sortcode' => array( |
|
219 | - 'label' => __( 'Branch sort', 'invoicing' ), |
|
220 | - ), |
|
221 | - ), |
|
222 | - 'NZ' => array( |
|
223 | - 'sortcode' => array( |
|
224 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
225 | - ), |
|
226 | - ), |
|
227 | - 'SE' => array( |
|
228 | - 'sortcode' => array( |
|
229 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
230 | - ), |
|
231 | - ), |
|
232 | - 'US' => array( |
|
233 | - 'sortcode' => array( |
|
234 | - 'label' => __( 'Routing number', 'invoicing' ), |
|
235 | - ), |
|
236 | - ), |
|
237 | - 'ZA' => array( |
|
238 | - 'sortcode' => array( |
|
239 | - 'label' => __( 'Branch code', 'invoicing' ), |
|
240 | - ), |
|
241 | - ), |
|
242 | - ) |
|
243 | - ); |
|
244 | - |
|
245 | - } |
|
246 | - |
|
247 | - return $this->locale; |
|
248 | - |
|
249 | - } |
|
250 | - |
|
251 | - /** |
|
252 | - * Filters the gateway settings. |
|
253 | - * |
|
254 | - * @param array $admin_settings |
|
255 | - */ |
|
256 | - public function admin_settings( $admin_settings ) { |
|
190 | + * Get country locale if localized. |
|
191 | + * |
|
192 | + * @return array |
|
193 | + */ |
|
194 | + public function get_country_locale() { |
|
195 | + |
|
196 | + if ( empty( $this->locale ) ) { |
|
197 | + |
|
198 | + // Locale information to be used - only those that are not 'Sort Code'. |
|
199 | + $this->locale = apply_filters( |
|
200 | + 'getpaid_get_bank_transfer_locale', |
|
201 | + array( |
|
202 | + 'AU' => array( |
|
203 | + 'sortcode' => array( |
|
204 | + 'label' => __( 'BSB', 'invoicing' ), |
|
205 | + ), |
|
206 | + ), |
|
207 | + 'CA' => array( |
|
208 | + 'sortcode' => array( |
|
209 | + 'label' => __( 'Bank transit number', 'invoicing' ), |
|
210 | + ), |
|
211 | + ), |
|
212 | + 'IN' => array( |
|
213 | + 'sortcode' => array( |
|
214 | + 'label' => __( 'IFSC', 'invoicing' ), |
|
215 | + ), |
|
216 | + ), |
|
217 | + 'IT' => array( |
|
218 | + 'sortcode' => array( |
|
219 | + 'label' => __( 'Branch sort', 'invoicing' ), |
|
220 | + ), |
|
221 | + ), |
|
222 | + 'NZ' => array( |
|
223 | + 'sortcode' => array( |
|
224 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
225 | + ), |
|
226 | + ), |
|
227 | + 'SE' => array( |
|
228 | + 'sortcode' => array( |
|
229 | + 'label' => __( 'Bank code', 'invoicing' ), |
|
230 | + ), |
|
231 | + ), |
|
232 | + 'US' => array( |
|
233 | + 'sortcode' => array( |
|
234 | + 'label' => __( 'Routing number', 'invoicing' ), |
|
235 | + ), |
|
236 | + ), |
|
237 | + 'ZA' => array( |
|
238 | + 'sortcode' => array( |
|
239 | + 'label' => __( 'Branch code', 'invoicing' ), |
|
240 | + ), |
|
241 | + ), |
|
242 | + ) |
|
243 | + ); |
|
244 | + |
|
245 | + } |
|
246 | + |
|
247 | + return $this->locale; |
|
248 | + |
|
249 | + } |
|
250 | + |
|
251 | + /** |
|
252 | + * Filters the gateway settings. |
|
253 | + * |
|
254 | + * @param array $admin_settings |
|
255 | + */ |
|
256 | + public function admin_settings( $admin_settings ) { |
|
257 | 257 | |
258 | 258 | $admin_settings['bank_transfer_desc']['std'] = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ); |
259 | - $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
259 | + $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
260 | 260 | |
261 | - $locale = $this->get_country_locale(); |
|
261 | + $locale = $this->get_country_locale(); |
|
262 | 262 | |
263 | - // Get sortcode label in the $locale array and use appropriate one. |
|
264 | - $country = wpinv_default_billing_country(); |
|
265 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
263 | + // Get sortcode label in the $locale array and use appropriate one. |
|
264 | + $country = wpinv_default_billing_country(); |
|
265 | + $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
266 | 266 | |
267 | - $admin_settings['bank_transfer_ac_name'] = array( |
|
267 | + $admin_settings['bank_transfer_ac_name'] = array( |
|
268 | 268 | 'type' => 'text', |
269 | 269 | 'id' => 'bank_transfer_ac_name', |
270 | 270 | 'name' => __( 'Account Name', 'invoicing' ), |
271 | - ); |
|
271 | + ); |
|
272 | 272 | |
273 | - $admin_settings['bank_transfer_ac_no'] = array( |
|
273 | + $admin_settings['bank_transfer_ac_no'] = array( |
|
274 | 274 | 'type' => 'text', |
275 | 275 | 'id' => 'bank_transfer_ac_no', |
276 | 276 | 'name' => __( 'Account Number', 'invoicing' ), |
277 | - ); |
|
277 | + ); |
|
278 | 278 | |
279 | - $admin_settings['bank_transfer_bank_name'] = array( |
|
279 | + $admin_settings['bank_transfer_bank_name'] = array( |
|
280 | 280 | 'type' => 'text', |
281 | 281 | 'id' => 'bank_transfer_bank_name', |
282 | 282 | 'name' => __( 'Bank Name', 'invoicing' ), |
283 | - ); |
|
283 | + ); |
|
284 | 284 | |
285 | - $admin_settings['bank_transfer_ifsc'] = array( |
|
285 | + $admin_settings['bank_transfer_ifsc'] = array( |
|
286 | 286 | 'type' => 'text', |
287 | 287 | 'id' => 'bank_transfer_ifsc', |
288 | 288 | 'name' => __( 'IFSC Code', 'invoicing' ), |
289 | - ); |
|
289 | + ); |
|
290 | 290 | |
291 | - $admin_settings['bank_transfer_iban'] = array( |
|
291 | + $admin_settings['bank_transfer_iban'] = array( |
|
292 | 292 | 'type' => 'text', |
293 | 293 | 'id' => 'bank_transfer_iban', |
294 | 294 | 'name' => __( 'IBAN', 'invoicing' ), |
295 | - ); |
|
295 | + ); |
|
296 | 296 | |
297 | - $admin_settings['bank_transfer_bic'] = array( |
|
297 | + $admin_settings['bank_transfer_bic'] = array( |
|
298 | 298 | 'type' => 'text', |
299 | 299 | 'id' => 'bank_transfer_bic', |
300 | 300 | 'name' => __( 'BIC/Swift Code', 'invoicing' ), |
301 | - ); |
|
301 | + ); |
|
302 | 302 | |
303 | - $admin_settings['bank_transfer_sort_code'] = array( |
|
304 | - 'type' => 'text', |
|
305 | - 'id' => 'bank_transfer_sort_code', |
|
306 | - 'name' => $sortcode, |
|
307 | - ); |
|
303 | + $admin_settings['bank_transfer_sort_code'] = array( |
|
304 | + 'type' => 'text', |
|
305 | + 'id' => 'bank_transfer_sort_code', |
|
306 | + 'name' => $sortcode, |
|
307 | + ); |
|
308 | 308 | |
309 | - $admin_settings['bank_transfer_info'] = array( |
|
309 | + $admin_settings['bank_transfer_info'] = array( |
|
310 | 310 | 'id' => 'bank_transfer_info', |
311 | 311 | 'name' => __( 'Instructions', 'invoicing' ), |
312 | 312 | 'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ), |
@@ -316,17 +316,17 @@ discard block |
||
316 | 316 | 'rows' => 5 |
317 | 317 | ); |
318 | 318 | |
319 | - return $admin_settings; |
|
320 | - } |
|
319 | + return $admin_settings; |
|
320 | + } |
|
321 | 321 | |
322 | - /** |
|
323 | - * Processes invoice addons. |
|
324 | - * |
|
325 | - * @param WPInv_Invoice $invoice |
|
326 | - * @param GetPaid_Form_Item[] $items |
|
327 | - * @return WPInv_Invoice |
|
328 | - */ |
|
329 | - public function process_addons( $invoice, $items ) { |
|
322 | + /** |
|
323 | + * Processes invoice addons. |
|
324 | + * |
|
325 | + * @param WPInv_Invoice $invoice |
|
326 | + * @param GetPaid_Form_Item[] $items |
|
327 | + * @return WPInv_Invoice |
|
328 | + */ |
|
329 | + public function process_addons( $invoice, $items ) { |
|
330 | 330 | |
331 | 331 | foreach ( $items as $item ) { |
332 | 332 | $invoice->add_item( $item ); |
@@ -334,6 +334,6 @@ discard block |
||
334 | 334 | |
335 | 335 | $invoice->recalculate_total(); |
336 | 336 | $invoice->save(); |
337 | - } |
|
337 | + } |
|
338 | 338 | |
339 | 339 | } |
@@ -4,7 +4,7 @@ discard block |
||
4 | 4 | * |
5 | 5 | */ |
6 | 6 | |
7 | -defined( 'ABSPATH' ) || exit; |
|
7 | +defined('ABSPATH') || exit; |
|
8 | 8 | |
9 | 9 | /** |
10 | 10 | * Bank transfer Payment Gateway class. |
@@ -24,7 +24,7 @@ discard block |
||
24 | 24 | * |
25 | 25 | * @var array |
26 | 26 | */ |
27 | - protected $supports = array( 'addons' ); |
|
27 | + protected $supports = array('addons'); |
|
28 | 28 | |
29 | 29 | /** |
30 | 30 | * Payment method order. |
@@ -39,15 +39,15 @@ discard block |
||
39 | 39 | public function __construct() { |
40 | 40 | parent::__construct(); |
41 | 41 | |
42 | - $this->title = __( 'Direct bank transfer', 'invoicing' ); |
|
43 | - $this->method_title = __( 'Bank transfer', 'invoicing' ); |
|
44 | - $this->checkout_button_text = __( 'Proceed', 'invoicing' ); |
|
45 | - $this->instructions = apply_filters( 'wpinv_bank_instructions', $this->get_option( 'info' ) ); |
|
42 | + $this->title = __('Direct bank transfer', 'invoicing'); |
|
43 | + $this->method_title = __('Bank transfer', 'invoicing'); |
|
44 | + $this->checkout_button_text = __('Proceed', 'invoicing'); |
|
45 | + $this->instructions = apply_filters('wpinv_bank_instructions', $this->get_option('info')); |
|
46 | 46 | |
47 | - add_action( 'wpinv_receipt_end', array( $this, 'thankyou_page' ) ); |
|
48 | - add_action( 'getpaid_invoice_line_items', array( $this, 'thankyou_page' ), 40 ); |
|
49 | - add_action( 'wpinv_pdf_content_billing', array( $this, 'thankyou_page' ), 11 ); |
|
50 | - add_action( 'wpinv_email_invoice_details', array( $this, 'email_instructions' ), 10, 3 ); |
|
47 | + add_action('wpinv_receipt_end', array($this, 'thankyou_page')); |
|
48 | + add_action('getpaid_invoice_line_items', array($this, 'thankyou_page'), 40); |
|
49 | + add_action('wpinv_pdf_content_billing', array($this, 'thankyou_page'), 11); |
|
50 | + add_action('wpinv_email_invoice_details', array($this, 'email_instructions'), 10, 3); |
|
51 | 51 | |
52 | 52 | } |
53 | 53 | |
@@ -60,23 +60,23 @@ discard block |
||
60 | 60 | * @param GetPaid_Payment_Form_Submission $submission Checkout submission. |
61 | 61 | * @return array |
62 | 62 | */ |
63 | - public function process_payment( $invoice, $submission_data, $submission ) { |
|
63 | + public function process_payment($invoice, $submission_data, $submission) { |
|
64 | 64 | |
65 | 65 | // Add a transaction id. |
66 | - $invoice->set_transaction_id( $invoice->generate_key('trans_') ); |
|
66 | + $invoice->set_transaction_id($invoice->generate_key('trans_')); |
|
67 | 67 | |
68 | 68 | // Set it as pending payment. |
69 | - if ( ! $invoice->needs_payment() ) { |
|
69 | + if (!$invoice->needs_payment()) { |
|
70 | 70 | $invoice->mark_paid(); |
71 | - } else if ( ! $invoice->is_paid() ) { |
|
72 | - $invoice->set_status( 'wpi-onhold' ); |
|
71 | + } else if (!$invoice->is_paid()) { |
|
72 | + $invoice->set_status('wpi-onhold'); |
|
73 | 73 | } |
74 | 74 | |
75 | 75 | // Save it. |
76 | 76 | $invoice->save(); |
77 | 77 | |
78 | 78 | // Send to the success page. |
79 | - wpinv_send_to_success_page( array( 'invoice_key' => $invoice->get_key() ) ); |
|
79 | + wpinv_send_to_success_page(array('invoice_key' => $invoice->get_key())); |
|
80 | 80 | |
81 | 81 | } |
82 | 82 | |
@@ -85,17 +85,17 @@ discard block |
||
85 | 85 | * |
86 | 86 | * @param WPInv_Invoice $invoice Invoice. |
87 | 87 | */ |
88 | - public function thankyou_page( $invoice ) { |
|
88 | + public function thankyou_page($invoice) { |
|
89 | 89 | |
90 | - if ( 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
90 | + if ('bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment()) { |
|
91 | 91 | |
92 | 92 | echo '<div class="mt-4 mb-2 getpaid-bank-transfer-details">' . PHP_EOL; |
93 | 93 | |
94 | - if ( ! empty( $this->instructions ) ) { |
|
95 | - echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) ); |
|
94 | + if (!empty($this->instructions)) { |
|
95 | + echo wp_kses_post(wpautop(wptexturize($this->instructions))); |
|
96 | 96 | } |
97 | 97 | |
98 | - $this->bank_details( $invoice ); |
|
98 | + $this->bank_details($invoice); |
|
99 | 99 | |
100 | 100 | echo '</div>'; |
101 | 101 | |
@@ -110,17 +110,17 @@ discard block |
||
110 | 110 | * @param string $email_type Email format: plain text or HTML. |
111 | 111 | * @param bool $sent_to_admin Sent to admin. |
112 | 112 | */ |
113 | - public function email_instructions( $invoice, $email_type, $sent_to_admin ) { |
|
113 | + public function email_instructions($invoice, $email_type, $sent_to_admin) { |
|
114 | 114 | |
115 | - if ( ! $sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment() ) { |
|
115 | + if (!$sent_to_admin && 'bank_transfer' === $invoice->get_gateway() && $invoice->needs_payment()) { |
|
116 | 116 | |
117 | 117 | echo '<div class="wpi-email-row getpaid-bank-transfer-details">'; |
118 | 118 | |
119 | - if ( $this->instructions ) { |
|
120 | - echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); |
|
119 | + if ($this->instructions) { |
|
120 | + echo wp_kses_post(wpautop(wptexturize($this->instructions)) . PHP_EOL); |
|
121 | 121 | } |
122 | 122 | |
123 | - $this->bank_details( $invoice ); |
|
123 | + $this->bank_details($invoice); |
|
124 | 124 | |
125 | 125 | echo '</div>'; |
126 | 126 | |
@@ -133,51 +133,51 @@ discard block |
||
133 | 133 | * |
134 | 134 | * @param WPInv_Invoice $invoice Invoice. |
135 | 135 | */ |
136 | - protected function bank_details( $invoice ) { |
|
136 | + protected function bank_details($invoice) { |
|
137 | 137 | |
138 | 138 | // Get the invoice country and country $locale. |
139 | 139 | $country = $invoice->get_country(); |
140 | 140 | $locale = $this->get_country_locale(); |
141 | 141 | |
142 | 142 | // Get sortcode label in the $locale array and use appropriate one. |
143 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
143 | + $sortcode = isset($locale[$country]['sortcode']['label']) ? $locale[$country]['sortcode']['label'] : __('Sort code', 'invoicing'); |
|
144 | 144 | |
145 | 145 | $bank_fields = array( |
146 | - 'ac_name' => __( 'Account Name', 'invoicing' ), |
|
147 | - 'ac_no' => __( 'Account Number', 'invoicing' ), |
|
148 | - 'bank_name' => __( 'Bank Name', 'invoicing' ), |
|
149 | - 'ifsc' => __( 'IFSC code', 'invoicing' ), |
|
150 | - 'iban' => __( 'IBAN', 'invoicing' ), |
|
151 | - 'bic' => __( 'BIC/Swift code', 'invoicing' ), |
|
146 | + 'ac_name' => __('Account Name', 'invoicing'), |
|
147 | + 'ac_no' => __('Account Number', 'invoicing'), |
|
148 | + 'bank_name' => __('Bank Name', 'invoicing'), |
|
149 | + 'ifsc' => __('IFSC code', 'invoicing'), |
|
150 | + 'iban' => __('IBAN', 'invoicing'), |
|
151 | + 'bic' => __('BIC/Swift code', 'invoicing'), |
|
152 | 152 | 'sort_code' => $sortcode, |
153 | 153 | ); |
154 | 154 | |
155 | 155 | $bank_info = array(); |
156 | 156 | |
157 | - foreach ( $bank_fields as $field => $label ) { |
|
158 | - $value = $this->get_option( $field ); |
|
157 | + foreach ($bank_fields as $field => $label) { |
|
158 | + $value = $this->get_option($field); |
|
159 | 159 | |
160 | - if ( ! empty( $value ) ) { |
|
161 | - $bank_info[$field] = array( 'label' => $label, 'value' => $value ); |
|
160 | + if (!empty($value)) { |
|
161 | + $bank_info[$field] = array('label' => $label, 'value' => $value); |
|
162 | 162 | } |
163 | 163 | |
164 | 164 | } |
165 | 165 | |
166 | - $bank_info = apply_filters( 'wpinv_bank_info', $bank_info ); |
|
166 | + $bank_info = apply_filters('wpinv_bank_info', $bank_info); |
|
167 | 167 | |
168 | - if ( empty( $bank_info ) ) { |
|
168 | + if (empty($bank_info)) { |
|
169 | 169 | return; |
170 | 170 | } |
171 | 171 | |
172 | - echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters( 'wpinv_receipt_bank_details_title', __( 'Bank Details', 'invoicing' ) ) . '</h3>' . PHP_EOL; |
|
172 | + echo '<h3 class="getpaid-bank-transfer-title"> ' . apply_filters('wpinv_receipt_bank_details_title', __('Bank Details', 'invoicing')) . '</h3>' . PHP_EOL; |
|
173 | 173 | |
174 | 174 | echo '<table class="table table-bordered getpaid-bank-transfer-details">' . PHP_EOL; |
175 | 175 | |
176 | - foreach ( $bank_info as $key => $data ) { |
|
176 | + foreach ($bank_info as $key => $data) { |
|
177 | 177 | |
178 | - $key = sanitize_html_class( $key ); |
|
179 | - $label = wp_kses_post( $data['label'] ); |
|
180 | - $value = wp_kses_post( wptexturize( $data['value'] ) ); |
|
178 | + $key = sanitize_html_class($key); |
|
179 | + $label = wp_kses_post($data['label']); |
|
180 | + $value = wp_kses_post(wptexturize($data['value'])); |
|
181 | 181 | |
182 | 182 | echo "<tr class='getpaid-bank-transfer-$key'><th>$label</th><td>$value</td></tr>" . PHP_EOL; |
183 | 183 | } |
@@ -193,7 +193,7 @@ discard block |
||
193 | 193 | */ |
194 | 194 | public function get_country_locale() { |
195 | 195 | |
196 | - if ( empty( $this->locale ) ) { |
|
196 | + if (empty($this->locale)) { |
|
197 | 197 | |
198 | 198 | // Locale information to be used - only those that are not 'Sort Code'. |
199 | 199 | $this->locale = apply_filters( |
@@ -201,42 +201,42 @@ discard block |
||
201 | 201 | array( |
202 | 202 | 'AU' => array( |
203 | 203 | 'sortcode' => array( |
204 | - 'label' => __( 'BSB', 'invoicing' ), |
|
204 | + 'label' => __('BSB', 'invoicing'), |
|
205 | 205 | ), |
206 | 206 | ), |
207 | 207 | 'CA' => array( |
208 | 208 | 'sortcode' => array( |
209 | - 'label' => __( 'Bank transit number', 'invoicing' ), |
|
209 | + 'label' => __('Bank transit number', 'invoicing'), |
|
210 | 210 | ), |
211 | 211 | ), |
212 | 212 | 'IN' => array( |
213 | 213 | 'sortcode' => array( |
214 | - 'label' => __( 'IFSC', 'invoicing' ), |
|
214 | + 'label' => __('IFSC', 'invoicing'), |
|
215 | 215 | ), |
216 | 216 | ), |
217 | 217 | 'IT' => array( |
218 | 218 | 'sortcode' => array( |
219 | - 'label' => __( 'Branch sort', 'invoicing' ), |
|
219 | + 'label' => __('Branch sort', 'invoicing'), |
|
220 | 220 | ), |
221 | 221 | ), |
222 | 222 | 'NZ' => array( |
223 | 223 | 'sortcode' => array( |
224 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
224 | + 'label' => __('Bank code', 'invoicing'), |
|
225 | 225 | ), |
226 | 226 | ), |
227 | 227 | 'SE' => array( |
228 | 228 | 'sortcode' => array( |
229 | - 'label' => __( 'Bank code', 'invoicing' ), |
|
229 | + 'label' => __('Bank code', 'invoicing'), |
|
230 | 230 | ), |
231 | 231 | ), |
232 | 232 | 'US' => array( |
233 | 233 | 'sortcode' => array( |
234 | - 'label' => __( 'Routing number', 'invoicing' ), |
|
234 | + 'label' => __('Routing number', 'invoicing'), |
|
235 | 235 | ), |
236 | 236 | ), |
237 | 237 | 'ZA' => array( |
238 | 238 | 'sortcode' => array( |
239 | - 'label' => __( 'Branch code', 'invoicing' ), |
|
239 | + 'label' => __('Branch code', 'invoicing'), |
|
240 | 240 | ), |
241 | 241 | ), |
242 | 242 | ) |
@@ -253,51 +253,51 @@ discard block |
||
253 | 253 | * |
254 | 254 | * @param array $admin_settings |
255 | 255 | */ |
256 | - public function admin_settings( $admin_settings ) { |
|
256 | + public function admin_settings($admin_settings) { |
|
257 | 257 | |
258 | - $admin_settings['bank_transfer_desc']['std'] = __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ); |
|
259 | - $admin_settings['bank_transfer_active']['desc'] = __( 'Enable bank transfer', 'invoicing' ); |
|
258 | + $admin_settings['bank_transfer_desc']['std'] = __("Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing'); |
|
259 | + $admin_settings['bank_transfer_active']['desc'] = __('Enable bank transfer', 'invoicing'); |
|
260 | 260 | |
261 | - $locale = $this->get_country_locale(); |
|
261 | + $locale = $this->get_country_locale(); |
|
262 | 262 | |
263 | 263 | // Get sortcode label in the $locale array and use appropriate one. |
264 | 264 | $country = wpinv_default_billing_country(); |
265 | - $sortcode = isset( $locale[ $country ]['sortcode']['label'] ) ? $locale[ $country ]['sortcode']['label'] : __( 'Sort code', 'invoicing' ); |
|
265 | + $sortcode = isset($locale[$country]['sortcode']['label']) ? $locale[$country]['sortcode']['label'] : __('Sort code', 'invoicing'); |
|
266 | 266 | |
267 | 267 | $admin_settings['bank_transfer_ac_name'] = array( |
268 | 268 | 'type' => 'text', |
269 | 269 | 'id' => 'bank_transfer_ac_name', |
270 | - 'name' => __( 'Account Name', 'invoicing' ), |
|
270 | + 'name' => __('Account Name', 'invoicing'), |
|
271 | 271 | ); |
272 | 272 | |
273 | 273 | $admin_settings['bank_transfer_ac_no'] = array( |
274 | 274 | 'type' => 'text', |
275 | 275 | 'id' => 'bank_transfer_ac_no', |
276 | - 'name' => __( 'Account Number', 'invoicing' ), |
|
276 | + 'name' => __('Account Number', 'invoicing'), |
|
277 | 277 | ); |
278 | 278 | |
279 | 279 | $admin_settings['bank_transfer_bank_name'] = array( |
280 | 280 | 'type' => 'text', |
281 | 281 | 'id' => 'bank_transfer_bank_name', |
282 | - 'name' => __( 'Bank Name', 'invoicing' ), |
|
282 | + 'name' => __('Bank Name', 'invoicing'), |
|
283 | 283 | ); |
284 | 284 | |
285 | 285 | $admin_settings['bank_transfer_ifsc'] = array( |
286 | 286 | 'type' => 'text', |
287 | 287 | 'id' => 'bank_transfer_ifsc', |
288 | - 'name' => __( 'IFSC Code', 'invoicing' ), |
|
288 | + 'name' => __('IFSC Code', 'invoicing'), |
|
289 | 289 | ); |
290 | 290 | |
291 | 291 | $admin_settings['bank_transfer_iban'] = array( |
292 | 292 | 'type' => 'text', |
293 | 293 | 'id' => 'bank_transfer_iban', |
294 | - 'name' => __( 'IBAN', 'invoicing' ), |
|
294 | + 'name' => __('IBAN', 'invoicing'), |
|
295 | 295 | ); |
296 | 296 | |
297 | 297 | $admin_settings['bank_transfer_bic'] = array( |
298 | 298 | 'type' => 'text', |
299 | 299 | 'id' => 'bank_transfer_bic', |
300 | - 'name' => __( 'BIC/Swift Code', 'invoicing' ), |
|
300 | + 'name' => __('BIC/Swift Code', 'invoicing'), |
|
301 | 301 | ); |
302 | 302 | |
303 | 303 | $admin_settings['bank_transfer_sort_code'] = array( |
@@ -308,10 +308,10 @@ discard block |
||
308 | 308 | |
309 | 309 | $admin_settings['bank_transfer_info'] = array( |
310 | 310 | 'id' => 'bank_transfer_info', |
311 | - 'name' => __( 'Instructions', 'invoicing' ), |
|
312 | - 'desc' => __( 'Instructions that will be added to the thank you page and emails.', 'invoicing' ), |
|
311 | + 'name' => __('Instructions', 'invoicing'), |
|
312 | + 'desc' => __('Instructions that will be added to the thank you page and emails.', 'invoicing'), |
|
313 | 313 | 'type' => 'textarea', |
314 | - 'std' => __( "Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing' ), |
|
314 | + 'std' => __("Make your payment directly into our bank account. Please use your Invoice Number as the payment reference. Your invoice won't be processed until the funds have cleared in our account.", 'invoicing'), |
|
315 | 315 | 'cols' => 50, |
316 | 316 | 'rows' => 5 |
317 | 317 | ); |
@@ -326,10 +326,10 @@ discard block |
||
326 | 326 | * @param GetPaid_Form_Item[] $items |
327 | 327 | * @return WPInv_Invoice |
328 | 328 | */ |
329 | - public function process_addons( $invoice, $items ) { |
|
329 | + public function process_addons($invoice, $items) { |
|
330 | 330 | |
331 | - foreach ( $items as $item ) { |
|
332 | - $invoice->add_item( $item ); |
|
331 | + foreach ($items as $item) { |
|
332 | + $invoice->add_item($item); |
|
333 | 333 | } |
334 | 334 | |
335 | 335 | $invoice->recalculate_total(); |
@@ -18,758 +18,758 @@ |
||
18 | 18 | */ |
19 | 19 | class GetPaid_REST_Settings_Controller extends GetPaid_REST_Controller { |
20 | 20 | |
21 | - /** |
|
22 | - * An array of available settings. |
|
23 | - * |
|
24 | - * @var string |
|
25 | - */ |
|
26 | - protected $settings; |
|
27 | - |
|
28 | - /** |
|
29 | - * Route base. |
|
30 | - * |
|
31 | - * @var string |
|
32 | - */ |
|
33 | - protected $rest_base = 'settings'; |
|
34 | - |
|
35 | - /** |
|
36 | - * Registers the routes for the objects of the controller. |
|
37 | - * |
|
38 | - * @since 2.0.0 |
|
39 | - * |
|
40 | - * @see register_rest_route() |
|
41 | - */ |
|
42 | - public function register_namespace_routes( $namespace ) { |
|
43 | - |
|
44 | - // List all registered tabs. |
|
45 | - register_rest_route( |
|
46 | - $namespace, |
|
47 | - $this->rest_base, |
|
48 | - array( |
|
49 | - array( |
|
50 | - 'methods' => WP_REST_Server::READABLE, |
|
51 | - 'callback' => array( $this, 'get_tabs' ), |
|
52 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
53 | - ), |
|
54 | - 'schema' => '__return_empty_array', |
|
55 | - ) |
|
56 | - ); |
|
57 | - |
|
58 | - // View/Update a single setting. |
|
59 | - register_rest_route( |
|
60 | - $namespace, |
|
61 | - $this->rest_base . '/setting/(?P<id>[\w-]+)', |
|
62 | - array( |
|
63 | - 'args' => array( |
|
64 | - 'id' => array( |
|
65 | - 'description' => __( 'Unique identifier for the setting.', 'invoicing' ), |
|
66 | - 'type' => 'string', |
|
67 | - 'required' => true, |
|
68 | - ), |
|
69 | - ), |
|
70 | - array( |
|
71 | - 'methods' => WP_REST_Server::READABLE, |
|
72 | - 'callback' => array( $this, 'get_item' ), |
|
73 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
74 | - ), |
|
75 | - array( |
|
76 | - 'methods' => WP_REST_Server::EDITABLE, |
|
77 | - 'callback' => array( $this, 'update_item' ), |
|
78 | - 'permission_callback' => array( $this, 'update_items_permissions_check' ), |
|
79 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
80 | - ), |
|
81 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
82 | - ) |
|
83 | - ); |
|
84 | - |
|
85 | - // List registered sections for a given tab. |
|
86 | - register_rest_route( |
|
87 | - $namespace, |
|
88 | - $this->rest_base . '/(?P<tab>[\w-]+)', |
|
89 | - array( |
|
90 | - 'args' => array( |
|
91 | - 'tab' => array( |
|
92 | - 'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ), |
|
93 | - 'type' => 'string', |
|
94 | - 'required' => true, |
|
95 | - 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
96 | - ), |
|
97 | - ), |
|
98 | - array( |
|
99 | - 'methods' => WP_REST_Server::READABLE, |
|
100 | - 'callback' => array( $this, 'get_sections' ), |
|
101 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
102 | - ), |
|
103 | - 'schema' => '__return_empty_array', |
|
104 | - ) |
|
105 | - ); |
|
106 | - |
|
107 | - // List all registered settings for a given tab. |
|
108 | - register_rest_route( |
|
109 | - $namespace, |
|
110 | - $this->rest_base . '/(?P<tab>[\w-]+)/(?P<section>[\w-]+)', |
|
111 | - array( |
|
112 | - 'args' => array( |
|
113 | - 'tab' => array( |
|
114 | - 'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ), |
|
115 | - 'type' => 'string', |
|
116 | - 'required' => true, |
|
117 | - 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
118 | - ), |
|
119 | - 'section' => array( |
|
120 | - 'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ), |
|
121 | - 'type' => 'string', |
|
122 | - 'required' => true, |
|
123 | - ), |
|
124 | - ), |
|
125 | - array( |
|
126 | - 'methods' => WP_REST_Server::READABLE, |
|
127 | - 'callback' => array( $this, 'get_items' ), |
|
128 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
129 | - ), |
|
130 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
131 | - ) |
|
132 | - ); |
|
133 | - |
|
134 | - register_rest_route( |
|
135 | - $namespace, |
|
136 | - '/' . $this->rest_base . '/batch', |
|
137 | - array( |
|
138 | - 'args' => array( |
|
139 | - 'id' => array( |
|
140 | - 'description' => __( 'Setting ID.', 'invoicing' ), |
|
141 | - 'type' => 'string', |
|
142 | - ), |
|
143 | - ), |
|
144 | - array( |
|
145 | - 'methods' => WP_REST_Server::EDITABLE, |
|
146 | - 'callback' => array( $this, 'batch_items' ), |
|
147 | - 'permission_callback' => array( $this, 'batch_items_permissions_check' ), |
|
148 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
149 | - ), |
|
150 | - 'schema' => array( $this, 'get_public_batch_schema' ), |
|
151 | - ) |
|
152 | - ); |
|
153 | - |
|
154 | - } |
|
21 | + /** |
|
22 | + * An array of available settings. |
|
23 | + * |
|
24 | + * @var string |
|
25 | + */ |
|
26 | + protected $settings; |
|
27 | + |
|
28 | + /** |
|
29 | + * Route base. |
|
30 | + * |
|
31 | + * @var string |
|
32 | + */ |
|
33 | + protected $rest_base = 'settings'; |
|
34 | + |
|
35 | + /** |
|
36 | + * Registers the routes for the objects of the controller. |
|
37 | + * |
|
38 | + * @since 2.0.0 |
|
39 | + * |
|
40 | + * @see register_rest_route() |
|
41 | + */ |
|
42 | + public function register_namespace_routes( $namespace ) { |
|
43 | + |
|
44 | + // List all registered tabs. |
|
45 | + register_rest_route( |
|
46 | + $namespace, |
|
47 | + $this->rest_base, |
|
48 | + array( |
|
49 | + array( |
|
50 | + 'methods' => WP_REST_Server::READABLE, |
|
51 | + 'callback' => array( $this, 'get_tabs' ), |
|
52 | + 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
53 | + ), |
|
54 | + 'schema' => '__return_empty_array', |
|
55 | + ) |
|
56 | + ); |
|
57 | + |
|
58 | + // View/Update a single setting. |
|
59 | + register_rest_route( |
|
60 | + $namespace, |
|
61 | + $this->rest_base . '/setting/(?P<id>[\w-]+)', |
|
62 | + array( |
|
63 | + 'args' => array( |
|
64 | + 'id' => array( |
|
65 | + 'description' => __( 'Unique identifier for the setting.', 'invoicing' ), |
|
66 | + 'type' => 'string', |
|
67 | + 'required' => true, |
|
68 | + ), |
|
69 | + ), |
|
70 | + array( |
|
71 | + 'methods' => WP_REST_Server::READABLE, |
|
72 | + 'callback' => array( $this, 'get_item' ), |
|
73 | + 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
74 | + ), |
|
75 | + array( |
|
76 | + 'methods' => WP_REST_Server::EDITABLE, |
|
77 | + 'callback' => array( $this, 'update_item' ), |
|
78 | + 'permission_callback' => array( $this, 'update_items_permissions_check' ), |
|
79 | + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
80 | + ), |
|
81 | + 'schema' => array( $this, 'get_public_item_schema' ), |
|
82 | + ) |
|
83 | + ); |
|
84 | + |
|
85 | + // List registered sections for a given tab. |
|
86 | + register_rest_route( |
|
87 | + $namespace, |
|
88 | + $this->rest_base . '/(?P<tab>[\w-]+)', |
|
89 | + array( |
|
90 | + 'args' => array( |
|
91 | + 'tab' => array( |
|
92 | + 'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ), |
|
93 | + 'type' => 'string', |
|
94 | + 'required' => true, |
|
95 | + 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
96 | + ), |
|
97 | + ), |
|
98 | + array( |
|
99 | + 'methods' => WP_REST_Server::READABLE, |
|
100 | + 'callback' => array( $this, 'get_sections' ), |
|
101 | + 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
102 | + ), |
|
103 | + 'schema' => '__return_empty_array', |
|
104 | + ) |
|
105 | + ); |
|
106 | + |
|
107 | + // List all registered settings for a given tab. |
|
108 | + register_rest_route( |
|
109 | + $namespace, |
|
110 | + $this->rest_base . '/(?P<tab>[\w-]+)/(?P<section>[\w-]+)', |
|
111 | + array( |
|
112 | + 'args' => array( |
|
113 | + 'tab' => array( |
|
114 | + 'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ), |
|
115 | + 'type' => 'string', |
|
116 | + 'required' => true, |
|
117 | + 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
118 | + ), |
|
119 | + 'section' => array( |
|
120 | + 'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ), |
|
121 | + 'type' => 'string', |
|
122 | + 'required' => true, |
|
123 | + ), |
|
124 | + ), |
|
125 | + array( |
|
126 | + 'methods' => WP_REST_Server::READABLE, |
|
127 | + 'callback' => array( $this, 'get_items' ), |
|
128 | + 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
129 | + ), |
|
130 | + 'schema' => array( $this, 'get_public_item_schema' ), |
|
131 | + ) |
|
132 | + ); |
|
133 | + |
|
134 | + register_rest_route( |
|
135 | + $namespace, |
|
136 | + '/' . $this->rest_base . '/batch', |
|
137 | + array( |
|
138 | + 'args' => array( |
|
139 | + 'id' => array( |
|
140 | + 'description' => __( 'Setting ID.', 'invoicing' ), |
|
141 | + 'type' => 'string', |
|
142 | + ), |
|
143 | + ), |
|
144 | + array( |
|
145 | + 'methods' => WP_REST_Server::EDITABLE, |
|
146 | + 'callback' => array( $this, 'batch_items' ), |
|
147 | + 'permission_callback' => array( $this, 'batch_items_permissions_check' ), |
|
148 | + 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
149 | + ), |
|
150 | + 'schema' => array( $this, 'get_public_batch_schema' ), |
|
151 | + ) |
|
152 | + ); |
|
153 | + |
|
154 | + } |
|
155 | 155 | |
156 | - /** |
|
157 | - * Return all settings. |
|
158 | - * |
|
159 | - * @since 2.0.0 |
|
160 | - * @param WP_REST_Request $request Request data. |
|
161 | - * @return WP_Error|WP_REST_Response |
|
162 | - */ |
|
163 | - public function get_items( $request ) { |
|
164 | - |
|
165 | - $settings = $this->get_settings(); |
|
166 | - |
|
167 | - if ( ! isset( $settings[ $request['tab'] ] ) ) { |
|
168 | - return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) ); |
|
169 | - } |
|
170 | - |
|
171 | - if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) { |
|
172 | - return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) ); |
|
173 | - } |
|
174 | - |
|
175 | - $settings = $settings[ $request['tab'] ][ $request['section'] ]; |
|
176 | - $prepared = array(); |
|
177 | - |
|
178 | - foreach ( $settings as $setting ) { |
|
179 | - |
|
180 | - $setting = $this->sanitize_setting( $setting ); |
|
181 | - $setting_data = $this->prepare_item_for_response( $setting, $request ); |
|
182 | - $setting_data = $this->prepare_response_for_collection( $setting_data ); |
|
183 | - |
|
184 | - if ( $this->is_setting_type_valid( $setting['type'] ) ) { |
|
185 | - $prepared[] = $setting_data; |
|
186 | - } |
|
187 | - |
|
188 | - } |
|
189 | - |
|
190 | - return rest_ensure_response( $prepared ); |
|
191 | - } |
|
192 | - |
|
193 | - /** |
|
194 | - * Return a single setting. |
|
195 | - * |
|
196 | - * @since 2.0.0 |
|
197 | - * @param WP_REST_Request $request Request data. |
|
198 | - * @return WP_Error|WP_REST_Response |
|
199 | - */ |
|
200 | - public function get_item( $request ) { |
|
201 | - $setting = $this->get_setting( $request['id'] ); |
|
202 | - |
|
203 | - if ( is_wp_error( $setting ) ) { |
|
204 | - return $setting; |
|
205 | - } |
|
206 | - |
|
207 | - $setting = $this->sanitize_setting( $setting ); |
|
208 | - $response = $this->prepare_item_for_response( $setting, $request ); |
|
209 | - return rest_ensure_response( $response ); |
|
210 | - } |
|
211 | - |
|
212 | - /** |
|
213 | - * Update a single setting. |
|
214 | - * |
|
215 | - * @since 2.0.0 |
|
216 | - * @param WP_REST_Request $request Request data. |
|
217 | - * @return WP_Error|WP_REST_Response |
|
218 | - */ |
|
219 | - public function update_item( $request ) { |
|
220 | - $setting = $this->get_setting( $request['id'] ); |
|
221 | - |
|
222 | - if ( is_wp_error( $setting ) ) { |
|
223 | - return $setting; |
|
224 | - } |
|
225 | - |
|
226 | - if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) { |
|
227 | - $value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting ); |
|
228 | - } else { |
|
229 | - $value = $this->validate_setting_text_field( $request['value'], $setting ); |
|
230 | - } |
|
231 | - |
|
232 | - if ( is_wp_error( $value ) ) { |
|
233 | - return $value; |
|
234 | - } |
|
235 | - |
|
236 | - wpinv_update_option( $request['id'], $value ); |
|
237 | - $setting['value'] = $value; |
|
238 | - $setting = $this->sanitize_setting( $setting ); |
|
239 | - $response = $this->prepare_item_for_response( $setting, $request ); |
|
240 | - |
|
241 | - return rest_ensure_response( $response ); |
|
242 | - } |
|
243 | - |
|
244 | - /** |
|
245 | - * Makes sure the current user has access to READ the settings APIs. |
|
246 | - * |
|
247 | - * @since 2.0.0 |
|
248 | - * @param WP_REST_Request $request Full data about the request. |
|
249 | - * @return WP_Error|boolean |
|
250 | - */ |
|
251 | - public function get_items_permissions_check( $request ) { |
|
252 | - if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
253 | - return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
254 | - } |
|
255 | - |
|
256 | - return true; |
|
257 | - } |
|
258 | - |
|
259 | - /** |
|
260 | - * Makes sure the current user has access to WRITE the settings APIs. |
|
261 | - * |
|
262 | - * @since 2.0.0 |
|
263 | - * @param WP_REST_Request $request Full data about the request. |
|
264 | - * @return WP_Error|boolean |
|
265 | - */ |
|
266 | - public function update_items_permissions_check( $request ) { |
|
267 | - if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
268 | - return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
269 | - } |
|
270 | - |
|
271 | - return true; |
|
272 | - } |
|
273 | - |
|
274 | - /** |
|
275 | - * Check if a given request has access batch create, update and delete items. |
|
276 | - * |
|
277 | - * @param WP_REST_Request $request Full details about the request. |
|
278 | - * |
|
279 | - * @return boolean|WP_Error |
|
280 | - */ |
|
281 | - public function batch_items_permissions_check( $request ) { |
|
282 | - return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
283 | - } |
|
284 | - |
|
285 | - /** |
|
286 | - * Prepare links for the request. |
|
287 | - * |
|
288 | - * @param string $setting_id Setting ID. |
|
289 | - * @return array Links for the given setting. |
|
290 | - */ |
|
291 | - protected function prepare_links( $setting_id ) { |
|
292 | - |
|
293 | - $links = array( |
|
294 | - 'self' => array( |
|
295 | - 'href' => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ), |
|
296 | - ), |
|
297 | - 'collection' => array( |
|
298 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
299 | - ), |
|
300 | - ); |
|
301 | - |
|
302 | - return $links; |
|
303 | - } |
|
304 | - |
|
305 | - /** |
|
306 | - * Prepare a settings object for serialization. |
|
307 | - * |
|
308 | - * @since 2.0.0 |
|
309 | - * @param array $item Setting object. |
|
310 | - * @param WP_REST_Request $request Request object. |
|
311 | - * @return WP_REST_Response $response Response data. |
|
312 | - */ |
|
313 | - public function prepare_item_for_response( $item, $request ) { |
|
314 | - $context = empty( $request['context'] ) ? 'view' : $request['context']; |
|
315 | - $data = $this->add_additional_fields_to_object( $item, $request ); |
|
316 | - $data = $this->filter_response_by_context( $data, $context ); |
|
317 | - |
|
318 | - $response = rest_ensure_response( $data ); |
|
319 | - |
|
320 | - $response->add_links( $this->prepare_links( $item['id'] ) ); |
|
321 | - |
|
322 | - return $response; |
|
323 | - } |
|
324 | - |
|
325 | - /** |
|
326 | - * Filters out bad values from the settings array/filter so we |
|
327 | - * only return known values via the API. |
|
328 | - * |
|
329 | - * @since 2.0.0 |
|
330 | - * @param array $setting Setting. |
|
331 | - * @return array |
|
332 | - */ |
|
333 | - public function filter_setting( $setting ) { |
|
334 | - return array_intersect_key( |
|
335 | - $setting, |
|
336 | - array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) ) |
|
337 | - ); |
|
338 | - } |
|
339 | - |
|
340 | - /** |
|
341 | - * Callback for allowed keys for each setting response. |
|
342 | - * |
|
343 | - * @param string $key Key to check. |
|
344 | - * @return boolean |
|
345 | - */ |
|
346 | - public function allowed_setting_keys( $key ) { |
|
347 | - return in_array( $key, array_keys( $this->setting_defaults() ), true ); |
|
348 | - } |
|
349 | - |
|
350 | - /** |
|
351 | - * Returns default options for a setting. null means the field is required. |
|
352 | - * |
|
353 | - * @since 2.0.0 |
|
354 | - * @return array |
|
355 | - */ |
|
356 | - protected function setting_defaults() { |
|
357 | - return array( |
|
358 | - 'id' => null, |
|
359 | - 'name' => null, |
|
360 | - 'desc' => '', |
|
361 | - 'options' => array(), |
|
362 | - 'std' => false, |
|
363 | - 'value' => false, |
|
364 | - 'placeholder' => '', |
|
365 | - 'readonly' => false, |
|
366 | - 'faux' => false, |
|
367 | - 'section' => 'main', |
|
368 | - 'tab' => 'general', |
|
369 | - 'type' => 'text', |
|
370 | - ); |
|
371 | - } |
|
372 | - |
|
373 | - /** |
|
374 | - * Sanitizes a setting's field. |
|
375 | - * |
|
376 | - * @param array $setting The setting to sanitize. |
|
377 | - * @return array |
|
378 | - */ |
|
379 | - public function sanitize_setting( $setting ) { |
|
156 | + /** |
|
157 | + * Return all settings. |
|
158 | + * |
|
159 | + * @since 2.0.0 |
|
160 | + * @param WP_REST_Request $request Request data. |
|
161 | + * @return WP_Error|WP_REST_Response |
|
162 | + */ |
|
163 | + public function get_items( $request ) { |
|
164 | + |
|
165 | + $settings = $this->get_settings(); |
|
166 | + |
|
167 | + if ( ! isset( $settings[ $request['tab'] ] ) ) { |
|
168 | + return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) ); |
|
169 | + } |
|
170 | + |
|
171 | + if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) { |
|
172 | + return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) ); |
|
173 | + } |
|
174 | + |
|
175 | + $settings = $settings[ $request['tab'] ][ $request['section'] ]; |
|
176 | + $prepared = array(); |
|
177 | + |
|
178 | + foreach ( $settings as $setting ) { |
|
179 | + |
|
180 | + $setting = $this->sanitize_setting( $setting ); |
|
181 | + $setting_data = $this->prepare_item_for_response( $setting, $request ); |
|
182 | + $setting_data = $this->prepare_response_for_collection( $setting_data ); |
|
183 | + |
|
184 | + if ( $this->is_setting_type_valid( $setting['type'] ) ) { |
|
185 | + $prepared[] = $setting_data; |
|
186 | + } |
|
187 | + |
|
188 | + } |
|
189 | + |
|
190 | + return rest_ensure_response( $prepared ); |
|
191 | + } |
|
192 | + |
|
193 | + /** |
|
194 | + * Return a single setting. |
|
195 | + * |
|
196 | + * @since 2.0.0 |
|
197 | + * @param WP_REST_Request $request Request data. |
|
198 | + * @return WP_Error|WP_REST_Response |
|
199 | + */ |
|
200 | + public function get_item( $request ) { |
|
201 | + $setting = $this->get_setting( $request['id'] ); |
|
202 | + |
|
203 | + if ( is_wp_error( $setting ) ) { |
|
204 | + return $setting; |
|
205 | + } |
|
206 | + |
|
207 | + $setting = $this->sanitize_setting( $setting ); |
|
208 | + $response = $this->prepare_item_for_response( $setting, $request ); |
|
209 | + return rest_ensure_response( $response ); |
|
210 | + } |
|
211 | + |
|
212 | + /** |
|
213 | + * Update a single setting. |
|
214 | + * |
|
215 | + * @since 2.0.0 |
|
216 | + * @param WP_REST_Request $request Request data. |
|
217 | + * @return WP_Error|WP_REST_Response |
|
218 | + */ |
|
219 | + public function update_item( $request ) { |
|
220 | + $setting = $this->get_setting( $request['id'] ); |
|
221 | + |
|
222 | + if ( is_wp_error( $setting ) ) { |
|
223 | + return $setting; |
|
224 | + } |
|
225 | + |
|
226 | + if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) { |
|
227 | + $value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting ); |
|
228 | + } else { |
|
229 | + $value = $this->validate_setting_text_field( $request['value'], $setting ); |
|
230 | + } |
|
231 | + |
|
232 | + if ( is_wp_error( $value ) ) { |
|
233 | + return $value; |
|
234 | + } |
|
235 | + |
|
236 | + wpinv_update_option( $request['id'], $value ); |
|
237 | + $setting['value'] = $value; |
|
238 | + $setting = $this->sanitize_setting( $setting ); |
|
239 | + $response = $this->prepare_item_for_response( $setting, $request ); |
|
240 | + |
|
241 | + return rest_ensure_response( $response ); |
|
242 | + } |
|
243 | + |
|
244 | + /** |
|
245 | + * Makes sure the current user has access to READ the settings APIs. |
|
246 | + * |
|
247 | + * @since 2.0.0 |
|
248 | + * @param WP_REST_Request $request Full data about the request. |
|
249 | + * @return WP_Error|boolean |
|
250 | + */ |
|
251 | + public function get_items_permissions_check( $request ) { |
|
252 | + if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
253 | + return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
254 | + } |
|
255 | + |
|
256 | + return true; |
|
257 | + } |
|
258 | + |
|
259 | + /** |
|
260 | + * Makes sure the current user has access to WRITE the settings APIs. |
|
261 | + * |
|
262 | + * @since 2.0.0 |
|
263 | + * @param WP_REST_Request $request Full data about the request. |
|
264 | + * @return WP_Error|boolean |
|
265 | + */ |
|
266 | + public function update_items_permissions_check( $request ) { |
|
267 | + if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
268 | + return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
269 | + } |
|
270 | + |
|
271 | + return true; |
|
272 | + } |
|
273 | + |
|
274 | + /** |
|
275 | + * Check if a given request has access batch create, update and delete items. |
|
276 | + * |
|
277 | + * @param WP_REST_Request $request Full details about the request. |
|
278 | + * |
|
279 | + * @return boolean|WP_Error |
|
280 | + */ |
|
281 | + public function batch_items_permissions_check( $request ) { |
|
282 | + return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
283 | + } |
|
284 | + |
|
285 | + /** |
|
286 | + * Prepare links for the request. |
|
287 | + * |
|
288 | + * @param string $setting_id Setting ID. |
|
289 | + * @return array Links for the given setting. |
|
290 | + */ |
|
291 | + protected function prepare_links( $setting_id ) { |
|
292 | + |
|
293 | + $links = array( |
|
294 | + 'self' => array( |
|
295 | + 'href' => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ), |
|
296 | + ), |
|
297 | + 'collection' => array( |
|
298 | + 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
299 | + ), |
|
300 | + ); |
|
301 | + |
|
302 | + return $links; |
|
303 | + } |
|
304 | + |
|
305 | + /** |
|
306 | + * Prepare a settings object for serialization. |
|
307 | + * |
|
308 | + * @since 2.0.0 |
|
309 | + * @param array $item Setting object. |
|
310 | + * @param WP_REST_Request $request Request object. |
|
311 | + * @return WP_REST_Response $response Response data. |
|
312 | + */ |
|
313 | + public function prepare_item_for_response( $item, $request ) { |
|
314 | + $context = empty( $request['context'] ) ? 'view' : $request['context']; |
|
315 | + $data = $this->add_additional_fields_to_object( $item, $request ); |
|
316 | + $data = $this->filter_response_by_context( $data, $context ); |
|
317 | + |
|
318 | + $response = rest_ensure_response( $data ); |
|
319 | + |
|
320 | + $response->add_links( $this->prepare_links( $item['id'] ) ); |
|
321 | + |
|
322 | + return $response; |
|
323 | + } |
|
324 | + |
|
325 | + /** |
|
326 | + * Filters out bad values from the settings array/filter so we |
|
327 | + * only return known values via the API. |
|
328 | + * |
|
329 | + * @since 2.0.0 |
|
330 | + * @param array $setting Setting. |
|
331 | + * @return array |
|
332 | + */ |
|
333 | + public function filter_setting( $setting ) { |
|
334 | + return array_intersect_key( |
|
335 | + $setting, |
|
336 | + array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) ) |
|
337 | + ); |
|
338 | + } |
|
339 | + |
|
340 | + /** |
|
341 | + * Callback for allowed keys for each setting response. |
|
342 | + * |
|
343 | + * @param string $key Key to check. |
|
344 | + * @return boolean |
|
345 | + */ |
|
346 | + public function allowed_setting_keys( $key ) { |
|
347 | + return in_array( $key, array_keys( $this->setting_defaults() ), true ); |
|
348 | + } |
|
349 | + |
|
350 | + /** |
|
351 | + * Returns default options for a setting. null means the field is required. |
|
352 | + * |
|
353 | + * @since 2.0.0 |
|
354 | + * @return array |
|
355 | + */ |
|
356 | + protected function setting_defaults() { |
|
357 | + return array( |
|
358 | + 'id' => null, |
|
359 | + 'name' => null, |
|
360 | + 'desc' => '', |
|
361 | + 'options' => array(), |
|
362 | + 'std' => false, |
|
363 | + 'value' => false, |
|
364 | + 'placeholder' => '', |
|
365 | + 'readonly' => false, |
|
366 | + 'faux' => false, |
|
367 | + 'section' => 'main', |
|
368 | + 'tab' => 'general', |
|
369 | + 'type' => 'text', |
|
370 | + ); |
|
371 | + } |
|
372 | + |
|
373 | + /** |
|
374 | + * Sanitizes a setting's field. |
|
375 | + * |
|
376 | + * @param array $setting The setting to sanitize. |
|
377 | + * @return array |
|
378 | + */ |
|
379 | + public function sanitize_setting( $setting ) { |
|
380 | 380 | |
381 | - $setting = wp_parse_args( $setting, $this->setting_defaults() ); |
|
382 | - $setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] ); |
|
383 | - return $this->filter_setting( $setting ); |
|
384 | - |
|
385 | - } |
|
386 | - |
|
387 | - /** |
|
388 | - * Get setting data. |
|
389 | - * |
|
390 | - * @since 2.0.0 |
|
391 | - * @param string $setting_id Setting ID. |
|
392 | - * @return array|WP_Error |
|
393 | - */ |
|
394 | - public function get_setting( $setting_id ) { |
|
395 | - |
|
396 | - if ( empty( $setting_id ) ) { |
|
397 | - return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
398 | - } |
|
399 | - |
|
400 | - $settings = $this->get_settings(); |
|
401 | - |
|
402 | - foreach ( $settings as $tabs ) { |
|
403 | - |
|
404 | - foreach ( $tabs as $sections ) { |
|
405 | - |
|
406 | - if ( isset( $sections[ $setting_id ] ) ) { |
|
407 | - if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) { |
|
408 | - return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) ); |
|
409 | - } |
|
410 | - |
|
411 | - return $sections[ $setting_id ]; |
|
412 | - } |
|
413 | - |
|
414 | - } |
|
415 | - |
|
416 | - } |
|
417 | - |
|
418 | - return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
419 | - } |
|
420 | - |
|
421 | - /** |
|
422 | - * Get all tabs. |
|
423 | - * |
|
424 | - * @param WP_REST_Request $request Request data. |
|
425 | - * @return array |
|
426 | - */ |
|
427 | - public function get_tabs( $request ) { |
|
428 | - $tabs = wpinv_get_settings_tabs(); |
|
429 | - $prepared = array(); |
|
430 | - |
|
431 | - foreach ( $tabs as $id => $tab ) { |
|
432 | - |
|
433 | - $_request = $request; |
|
434 | - $_request['tab'] = sanitize_title( $id ); |
|
435 | - $data = array( |
|
436 | - 'id' => sanitize_title( $id ), |
|
437 | - 'label' => sanitize_text_field( $tab ), |
|
438 | - 'sections' => $this->get_sections( $_request ), |
|
439 | - ); |
|
440 | - |
|
441 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
442 | - $response = rest_ensure_response( $data ); |
|
443 | - |
|
444 | - if ( ! is_wp_error( $response ) ) { |
|
445 | - $links = array( |
|
446 | - 'sections' => array( |
|
447 | - 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ), |
|
448 | - ), |
|
449 | - 'collection' => array( |
|
450 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
451 | - ), |
|
452 | - ); |
|
453 | - $response->add_links( $links ); |
|
454 | - $response = $this->prepare_response_for_collection( $response ); |
|
455 | - } |
|
456 | - |
|
457 | - $prepared[] = $response; |
|
458 | - |
|
459 | - } |
|
460 | - |
|
461 | - return rest_ensure_response( $prepared ); |
|
462 | - } |
|
463 | - |
|
464 | - /** |
|
465 | - * Get all sections. |
|
466 | - * |
|
467 | - * @param WP_REST_Request $request Request data. |
|
468 | - * @return array |
|
469 | - */ |
|
470 | - public function get_sections( $request ) { |
|
471 | - |
|
472 | - $tab = sanitize_title( $request['tab'] ); |
|
473 | - $sections = wpinv_get_settings_tab_sections( $tab ); |
|
474 | - $prepared = array(); |
|
475 | - |
|
476 | - foreach ( $sections as $id => $section ) { |
|
477 | - |
|
478 | - $data = array( |
|
479 | - 'id' => sanitize_title( $id ), |
|
480 | - 'label' => sanitize_text_field( $section ), |
|
481 | - ); |
|
482 | - |
|
483 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
484 | - $response = rest_ensure_response( $data ); |
|
485 | - |
|
486 | - if ( ! is_wp_error( $response ) ) { |
|
487 | - $links = array( |
|
488 | - 'settings' => array( |
|
489 | - 'href' => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ), |
|
490 | - ), |
|
491 | - 'collection' => array( |
|
492 | - 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ), |
|
493 | - ), |
|
494 | - 'tabs' => array( |
|
495 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
496 | - ), |
|
497 | - ); |
|
498 | - $response->add_links( $links ); |
|
499 | - $response = $this->prepare_response_for_collection( $response ); |
|
500 | - } |
|
501 | - |
|
502 | - $prepared[] = $response; |
|
503 | - |
|
504 | - } |
|
505 | - |
|
506 | - return rest_ensure_response( $prepared ); |
|
507 | - } |
|
508 | - |
|
509 | - /** |
|
510 | - * Get all settings. |
|
511 | - * |
|
512 | - * @return array |
|
513 | - */ |
|
514 | - public function get_settings() { |
|
515 | - |
|
516 | - if ( empty( $this->settings ) ) { |
|
517 | - $this->settings = wpinv_get_registered_settings(); |
|
518 | - } |
|
519 | - |
|
520 | - return $this->settings; |
|
521 | - |
|
522 | - } |
|
523 | - |
|
524 | - /** |
|
525 | - * Boolean for if a setting type is a valid supported setting type. |
|
526 | - * |
|
527 | - * @since 2.0.0 |
|
528 | - * @param string $type Type. |
|
529 | - * @return bool |
|
530 | - */ |
|
531 | - public function is_setting_type_valid( $type ) { |
|
532 | - |
|
533 | - return in_array( |
|
534 | - $type, array( |
|
535 | - 'text', // Validates with validate_setting_text_field. |
|
536 | - 'email', // Validates with validate_setting_text_field. |
|
537 | - 'number', // Validates with validate_setting_text_field. |
|
538 | - 'color', // Validates with validate_setting_text_field. |
|
539 | - 'password', // Validates with validate_setting_text_field. |
|
540 | - 'textarea', // Validates with validate_setting_textarea_field. |
|
541 | - 'select', // Validates with validate_setting_select_field. |
|
542 | - 'multiselect', // Validates with validate_setting_multiselect_field. |
|
543 | - 'radio', // Validates with validate_setting_radio_field (-> validate_setting_select_field). |
|
544 | - 'checkbox', // Validates with validate_setting_checkbox_field. |
|
545 | - 'header', // Validates with validate_setting_text_field. |
|
546 | - ) |
|
547 | - ); |
|
548 | - |
|
549 | - } |
|
550 | - |
|
551 | - /** |
|
552 | - * Get the settings schema, conforming to JSON Schema. |
|
553 | - * |
|
554 | - * @return array |
|
555 | - */ |
|
556 | - public function get_item_schema() { |
|
557 | - |
|
558 | - // Maybe retrieve the schema from cache. |
|
559 | - if ( ! empty( $this->schema ) ) { |
|
560 | - return $this->add_additional_fields_schema( $this->schema ); |
|
561 | - } |
|
562 | - |
|
563 | - $schema = array( |
|
564 | - '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
565 | - 'title' => 'setting', |
|
566 | - 'type' => 'object', |
|
567 | - 'properties' => array( |
|
568 | - 'id' => array( |
|
569 | - 'description' => __( 'A unique identifier for the setting.', 'invoicing' ), |
|
570 | - 'type' => 'string', |
|
571 | - 'arg_options' => array( |
|
572 | - 'sanitize_callback' => 'sanitize_title', |
|
573 | - ), |
|
574 | - 'context' => array( 'view', 'edit' ), |
|
575 | - 'readonly' => true, |
|
576 | - ), |
|
577 | - 'tab' => array( |
|
578 | - 'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ), |
|
579 | - 'type' => 'string', |
|
580 | - 'arg_options' => array( |
|
581 | - 'sanitize_callback' => 'sanitize_title', |
|
582 | - ), |
|
583 | - 'context' => array( 'view', 'edit' ), |
|
584 | - 'readonly' => true, |
|
585 | - ), |
|
586 | - 'section' => array( |
|
587 | - 'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ), |
|
588 | - 'type' => 'string', |
|
589 | - 'arg_options' => array( |
|
590 | - 'sanitize_callback' => 'sanitize_title', |
|
591 | - ), |
|
592 | - 'context' => array( 'view', 'edit' ), |
|
593 | - 'readonly' => true, |
|
594 | - ), |
|
595 | - 'name' => array( |
|
596 | - 'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ), |
|
597 | - 'type' => 'string', |
|
598 | - 'arg_options' => array( |
|
599 | - 'sanitize_callback' => 'sanitize_text_field', |
|
600 | - ), |
|
601 | - 'context' => array( 'view', 'edit' ), |
|
602 | - 'readonly' => true, |
|
603 | - ), |
|
604 | - 'desc' => array( |
|
605 | - 'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ), |
|
606 | - 'type' => 'string', |
|
607 | - 'context' => array( 'view', 'edit' ), |
|
608 | - 'readonly' => true, |
|
609 | - ), |
|
610 | - 'value' => array( |
|
611 | - 'description' => __( 'The current value of this setting.', 'invoicing' ), |
|
612 | - 'type' => 'mixed', |
|
613 | - 'context' => array( 'view', 'edit' ), |
|
614 | - ), |
|
615 | - 'default' => array( |
|
616 | - 'description' => __( 'Default value for the setting.', 'invoicing' ), |
|
617 | - 'type' => 'mixed', |
|
618 | - 'context' => array( 'view', 'edit' ), |
|
619 | - 'readonly' => true, |
|
620 | - ), |
|
621 | - 'placeholder' => array( |
|
622 | - 'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ), |
|
623 | - 'type' => 'string', |
|
624 | - 'arg_options' => array( |
|
625 | - 'sanitize_callback' => 'sanitize_text_field', |
|
626 | - ), |
|
627 | - 'context' => array( 'view', 'edit' ), |
|
628 | - 'readonly' => true, |
|
629 | - ), |
|
630 | - 'type' => array( |
|
631 | - 'description' => __( 'Type of setting.', 'invoicing' ), |
|
632 | - 'type' => 'string', |
|
633 | - 'arg_options' => array( |
|
634 | - 'sanitize_callback' => 'sanitize_text_field', |
|
635 | - ), |
|
636 | - 'context' => array( 'view', 'edit' ), |
|
637 | - 'enum' => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ), |
|
638 | - 'readonly' => true, |
|
639 | - ), |
|
640 | - 'options' => array( |
|
641 | - 'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ), |
|
642 | - 'type' => 'object', |
|
643 | - 'context' => array( 'view', 'edit' ), |
|
644 | - 'readonly' => true, |
|
645 | - ), |
|
646 | - 'readonly' => array( |
|
647 | - 'description' => __( 'Whether or not this setting is readonly', 'invoicing' ), |
|
648 | - 'type' => 'string', |
|
649 | - 'context' => array( 'view' ), |
|
650 | - 'readonly' => true, |
|
651 | - ), |
|
652 | - 'faux' => array( |
|
653 | - 'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ), |
|
654 | - 'type' => 'string', |
|
655 | - 'context' => array( 'view' ), |
|
656 | - 'readonly' => true, |
|
657 | - ), |
|
658 | - ), |
|
659 | - ); |
|
660 | - |
|
661 | - // Filters the settings schema for the REST API. |
|
381 | + $setting = wp_parse_args( $setting, $this->setting_defaults() ); |
|
382 | + $setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] ); |
|
383 | + return $this->filter_setting( $setting ); |
|
384 | + |
|
385 | + } |
|
386 | + |
|
387 | + /** |
|
388 | + * Get setting data. |
|
389 | + * |
|
390 | + * @since 2.0.0 |
|
391 | + * @param string $setting_id Setting ID. |
|
392 | + * @return array|WP_Error |
|
393 | + */ |
|
394 | + public function get_setting( $setting_id ) { |
|
395 | + |
|
396 | + if ( empty( $setting_id ) ) { |
|
397 | + return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
398 | + } |
|
399 | + |
|
400 | + $settings = $this->get_settings(); |
|
401 | + |
|
402 | + foreach ( $settings as $tabs ) { |
|
403 | + |
|
404 | + foreach ( $tabs as $sections ) { |
|
405 | + |
|
406 | + if ( isset( $sections[ $setting_id ] ) ) { |
|
407 | + if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) { |
|
408 | + return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) ); |
|
409 | + } |
|
410 | + |
|
411 | + return $sections[ $setting_id ]; |
|
412 | + } |
|
413 | + |
|
414 | + } |
|
415 | + |
|
416 | + } |
|
417 | + |
|
418 | + return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
419 | + } |
|
420 | + |
|
421 | + /** |
|
422 | + * Get all tabs. |
|
423 | + * |
|
424 | + * @param WP_REST_Request $request Request data. |
|
425 | + * @return array |
|
426 | + */ |
|
427 | + public function get_tabs( $request ) { |
|
428 | + $tabs = wpinv_get_settings_tabs(); |
|
429 | + $prepared = array(); |
|
430 | + |
|
431 | + foreach ( $tabs as $id => $tab ) { |
|
432 | + |
|
433 | + $_request = $request; |
|
434 | + $_request['tab'] = sanitize_title( $id ); |
|
435 | + $data = array( |
|
436 | + 'id' => sanitize_title( $id ), |
|
437 | + 'label' => sanitize_text_field( $tab ), |
|
438 | + 'sections' => $this->get_sections( $_request ), |
|
439 | + ); |
|
440 | + |
|
441 | + $data = $this->add_additional_fields_to_object( $data, $request ); |
|
442 | + $response = rest_ensure_response( $data ); |
|
443 | + |
|
444 | + if ( ! is_wp_error( $response ) ) { |
|
445 | + $links = array( |
|
446 | + 'sections' => array( |
|
447 | + 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ), |
|
448 | + ), |
|
449 | + 'collection' => array( |
|
450 | + 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
451 | + ), |
|
452 | + ); |
|
453 | + $response->add_links( $links ); |
|
454 | + $response = $this->prepare_response_for_collection( $response ); |
|
455 | + } |
|
456 | + |
|
457 | + $prepared[] = $response; |
|
458 | + |
|
459 | + } |
|
460 | + |
|
461 | + return rest_ensure_response( $prepared ); |
|
462 | + } |
|
463 | + |
|
464 | + /** |
|
465 | + * Get all sections. |
|
466 | + * |
|
467 | + * @param WP_REST_Request $request Request data. |
|
468 | + * @return array |
|
469 | + */ |
|
470 | + public function get_sections( $request ) { |
|
471 | + |
|
472 | + $tab = sanitize_title( $request['tab'] ); |
|
473 | + $sections = wpinv_get_settings_tab_sections( $tab ); |
|
474 | + $prepared = array(); |
|
475 | + |
|
476 | + foreach ( $sections as $id => $section ) { |
|
477 | + |
|
478 | + $data = array( |
|
479 | + 'id' => sanitize_title( $id ), |
|
480 | + 'label' => sanitize_text_field( $section ), |
|
481 | + ); |
|
482 | + |
|
483 | + $data = $this->add_additional_fields_to_object( $data, $request ); |
|
484 | + $response = rest_ensure_response( $data ); |
|
485 | + |
|
486 | + if ( ! is_wp_error( $response ) ) { |
|
487 | + $links = array( |
|
488 | + 'settings' => array( |
|
489 | + 'href' => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ), |
|
490 | + ), |
|
491 | + 'collection' => array( |
|
492 | + 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ), |
|
493 | + ), |
|
494 | + 'tabs' => array( |
|
495 | + 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
496 | + ), |
|
497 | + ); |
|
498 | + $response->add_links( $links ); |
|
499 | + $response = $this->prepare_response_for_collection( $response ); |
|
500 | + } |
|
501 | + |
|
502 | + $prepared[] = $response; |
|
503 | + |
|
504 | + } |
|
505 | + |
|
506 | + return rest_ensure_response( $prepared ); |
|
507 | + } |
|
508 | + |
|
509 | + /** |
|
510 | + * Get all settings. |
|
511 | + * |
|
512 | + * @return array |
|
513 | + */ |
|
514 | + public function get_settings() { |
|
515 | + |
|
516 | + if ( empty( $this->settings ) ) { |
|
517 | + $this->settings = wpinv_get_registered_settings(); |
|
518 | + } |
|
519 | + |
|
520 | + return $this->settings; |
|
521 | + |
|
522 | + } |
|
523 | + |
|
524 | + /** |
|
525 | + * Boolean for if a setting type is a valid supported setting type. |
|
526 | + * |
|
527 | + * @since 2.0.0 |
|
528 | + * @param string $type Type. |
|
529 | + * @return bool |
|
530 | + */ |
|
531 | + public function is_setting_type_valid( $type ) { |
|
532 | + |
|
533 | + return in_array( |
|
534 | + $type, array( |
|
535 | + 'text', // Validates with validate_setting_text_field. |
|
536 | + 'email', // Validates with validate_setting_text_field. |
|
537 | + 'number', // Validates with validate_setting_text_field. |
|
538 | + 'color', // Validates with validate_setting_text_field. |
|
539 | + 'password', // Validates with validate_setting_text_field. |
|
540 | + 'textarea', // Validates with validate_setting_textarea_field. |
|
541 | + 'select', // Validates with validate_setting_select_field. |
|
542 | + 'multiselect', // Validates with validate_setting_multiselect_field. |
|
543 | + 'radio', // Validates with validate_setting_radio_field (-> validate_setting_select_field). |
|
544 | + 'checkbox', // Validates with validate_setting_checkbox_field. |
|
545 | + 'header', // Validates with validate_setting_text_field. |
|
546 | + ) |
|
547 | + ); |
|
548 | + |
|
549 | + } |
|
550 | + |
|
551 | + /** |
|
552 | + * Get the settings schema, conforming to JSON Schema. |
|
553 | + * |
|
554 | + * @return array |
|
555 | + */ |
|
556 | + public function get_item_schema() { |
|
557 | + |
|
558 | + // Maybe retrieve the schema from cache. |
|
559 | + if ( ! empty( $this->schema ) ) { |
|
560 | + return $this->add_additional_fields_schema( $this->schema ); |
|
561 | + } |
|
562 | + |
|
563 | + $schema = array( |
|
564 | + '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
565 | + 'title' => 'setting', |
|
566 | + 'type' => 'object', |
|
567 | + 'properties' => array( |
|
568 | + 'id' => array( |
|
569 | + 'description' => __( 'A unique identifier for the setting.', 'invoicing' ), |
|
570 | + 'type' => 'string', |
|
571 | + 'arg_options' => array( |
|
572 | + 'sanitize_callback' => 'sanitize_title', |
|
573 | + ), |
|
574 | + 'context' => array( 'view', 'edit' ), |
|
575 | + 'readonly' => true, |
|
576 | + ), |
|
577 | + 'tab' => array( |
|
578 | + 'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ), |
|
579 | + 'type' => 'string', |
|
580 | + 'arg_options' => array( |
|
581 | + 'sanitize_callback' => 'sanitize_title', |
|
582 | + ), |
|
583 | + 'context' => array( 'view', 'edit' ), |
|
584 | + 'readonly' => true, |
|
585 | + ), |
|
586 | + 'section' => array( |
|
587 | + 'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ), |
|
588 | + 'type' => 'string', |
|
589 | + 'arg_options' => array( |
|
590 | + 'sanitize_callback' => 'sanitize_title', |
|
591 | + ), |
|
592 | + 'context' => array( 'view', 'edit' ), |
|
593 | + 'readonly' => true, |
|
594 | + ), |
|
595 | + 'name' => array( |
|
596 | + 'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ), |
|
597 | + 'type' => 'string', |
|
598 | + 'arg_options' => array( |
|
599 | + 'sanitize_callback' => 'sanitize_text_field', |
|
600 | + ), |
|
601 | + 'context' => array( 'view', 'edit' ), |
|
602 | + 'readonly' => true, |
|
603 | + ), |
|
604 | + 'desc' => array( |
|
605 | + 'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ), |
|
606 | + 'type' => 'string', |
|
607 | + 'context' => array( 'view', 'edit' ), |
|
608 | + 'readonly' => true, |
|
609 | + ), |
|
610 | + 'value' => array( |
|
611 | + 'description' => __( 'The current value of this setting.', 'invoicing' ), |
|
612 | + 'type' => 'mixed', |
|
613 | + 'context' => array( 'view', 'edit' ), |
|
614 | + ), |
|
615 | + 'default' => array( |
|
616 | + 'description' => __( 'Default value for the setting.', 'invoicing' ), |
|
617 | + 'type' => 'mixed', |
|
618 | + 'context' => array( 'view', 'edit' ), |
|
619 | + 'readonly' => true, |
|
620 | + ), |
|
621 | + 'placeholder' => array( |
|
622 | + 'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ), |
|
623 | + 'type' => 'string', |
|
624 | + 'arg_options' => array( |
|
625 | + 'sanitize_callback' => 'sanitize_text_field', |
|
626 | + ), |
|
627 | + 'context' => array( 'view', 'edit' ), |
|
628 | + 'readonly' => true, |
|
629 | + ), |
|
630 | + 'type' => array( |
|
631 | + 'description' => __( 'Type of setting.', 'invoicing' ), |
|
632 | + 'type' => 'string', |
|
633 | + 'arg_options' => array( |
|
634 | + 'sanitize_callback' => 'sanitize_text_field', |
|
635 | + ), |
|
636 | + 'context' => array( 'view', 'edit' ), |
|
637 | + 'enum' => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ), |
|
638 | + 'readonly' => true, |
|
639 | + ), |
|
640 | + 'options' => array( |
|
641 | + 'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ), |
|
642 | + 'type' => 'object', |
|
643 | + 'context' => array( 'view', 'edit' ), |
|
644 | + 'readonly' => true, |
|
645 | + ), |
|
646 | + 'readonly' => array( |
|
647 | + 'description' => __( 'Whether or not this setting is readonly', 'invoicing' ), |
|
648 | + 'type' => 'string', |
|
649 | + 'context' => array( 'view' ), |
|
650 | + 'readonly' => true, |
|
651 | + ), |
|
652 | + 'faux' => array( |
|
653 | + 'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ), |
|
654 | + 'type' => 'string', |
|
655 | + 'context' => array( 'view' ), |
|
656 | + 'readonly' => true, |
|
657 | + ), |
|
658 | + ), |
|
659 | + ); |
|
660 | + |
|
661 | + // Filters the settings schema for the REST API. |
|
662 | 662 | $schema = apply_filters( 'getpaid_rest_settings_schema', $schema ); |
663 | 663 | |
664 | - // Cache the settings schema. |
|
665 | - $this->schema = $schema; |
|
666 | - |
|
667 | - return $this->add_additional_fields_schema( $this->schema ); |
|
668 | - |
|
669 | - } |
|
670 | - |
|
671 | - /** |
|
672 | - * Validate a text value for a text based setting. |
|
673 | - * |
|
674 | - * @since 2.0.0 |
|
675 | - * @param string $value Value. |
|
676 | - * @param array $setting Setting. |
|
677 | - * @return string |
|
678 | - */ |
|
679 | - public function validate_setting_text_field( $value ) { |
|
680 | - $value = is_null( $value ) ? '' : $value; |
|
681 | - return wp_kses_post( trim( stripslashes( $value ) ) ); |
|
682 | - } |
|
683 | - |
|
684 | - /** |
|
685 | - * Validate select based settings. |
|
686 | - * |
|
687 | - * @since 2.0.0 |
|
688 | - * @param string $value Value. |
|
689 | - * @param array $setting Setting. |
|
690 | - * @return string|WP_Error |
|
691 | - */ |
|
692 | - public function validate_setting_select_field( $value, $setting ) { |
|
693 | - if ( array_key_exists( $value, $setting['options'] ) ) { |
|
694 | - return $value; |
|
695 | - } else { |
|
696 | - return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
697 | - } |
|
698 | - } |
|
699 | - |
|
700 | - /** |
|
701 | - * Validate multiselect based settings. |
|
702 | - * |
|
703 | - * @since 2.0.0 |
|
704 | - * @param array $values Values. |
|
705 | - * @param array $setting Setting. |
|
706 | - * @return array|WP_Error |
|
707 | - */ |
|
708 | - public function validate_setting_multiselect_field( $values, $setting ) { |
|
709 | - if ( empty( $values ) ) { |
|
710 | - return array(); |
|
711 | - } |
|
712 | - |
|
713 | - if ( ! is_array( $values ) ) { |
|
714 | - return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
715 | - } |
|
716 | - |
|
717 | - $final_values = array(); |
|
718 | - foreach ( $values as $value ) { |
|
719 | - if ( array_key_exists( $value, $setting['options'] ) ) { |
|
720 | - $final_values[] = $value; |
|
721 | - } |
|
722 | - } |
|
723 | - |
|
724 | - return $final_values; |
|
725 | - } |
|
726 | - |
|
727 | - /** |
|
728 | - * Validate radio based settings. |
|
729 | - * |
|
730 | - * @since 2.0.0 |
|
731 | - * @param string $value Value. |
|
732 | - * @param array $setting Setting. |
|
733 | - * @return string|WP_Error |
|
734 | - */ |
|
735 | - public function validate_setting_radio_field( $value, $setting ) { |
|
736 | - return $this->validate_setting_select_field( $value, $setting ); |
|
737 | - } |
|
738 | - |
|
739 | - /** |
|
740 | - * Validate checkbox based settings. |
|
741 | - * |
|
742 | - * @since 2.0.0 |
|
743 | - * @param string $value Value. |
|
744 | - * @return int |
|
745 | - */ |
|
746 | - public function validate_setting_checkbox_field( $value ) { |
|
747 | - return (int) ! empty( $value ); |
|
748 | - } |
|
749 | - |
|
750 | - /** |
|
751 | - * Validate textarea based settings. |
|
752 | - * |
|
753 | - * @since 2.0.0 |
|
754 | - * @param string $value Value. |
|
755 | - * @return string |
|
756 | - */ |
|
757 | - public function validate_setting_textarea_field( $value ) { |
|
758 | - $value = is_null( $value ) ? '' : $value; |
|
759 | - return wp_kses( |
|
760 | - trim( stripslashes( $value ) ), |
|
761 | - array_merge( |
|
762 | - array( |
|
763 | - 'iframe' => array( |
|
764 | - 'src' => true, |
|
765 | - 'style' => true, |
|
766 | - 'id' => true, |
|
767 | - 'class' => true, |
|
768 | - ), |
|
769 | - ), |
|
770 | - wp_kses_allowed_html( 'post' ) |
|
771 | - ) |
|
772 | - ); |
|
773 | - } |
|
664 | + // Cache the settings schema. |
|
665 | + $this->schema = $schema; |
|
666 | + |
|
667 | + return $this->add_additional_fields_schema( $this->schema ); |
|
668 | + |
|
669 | + } |
|
670 | + |
|
671 | + /** |
|
672 | + * Validate a text value for a text based setting. |
|
673 | + * |
|
674 | + * @since 2.0.0 |
|
675 | + * @param string $value Value. |
|
676 | + * @param array $setting Setting. |
|
677 | + * @return string |
|
678 | + */ |
|
679 | + public function validate_setting_text_field( $value ) { |
|
680 | + $value = is_null( $value ) ? '' : $value; |
|
681 | + return wp_kses_post( trim( stripslashes( $value ) ) ); |
|
682 | + } |
|
683 | + |
|
684 | + /** |
|
685 | + * Validate select based settings. |
|
686 | + * |
|
687 | + * @since 2.0.0 |
|
688 | + * @param string $value Value. |
|
689 | + * @param array $setting Setting. |
|
690 | + * @return string|WP_Error |
|
691 | + */ |
|
692 | + public function validate_setting_select_field( $value, $setting ) { |
|
693 | + if ( array_key_exists( $value, $setting['options'] ) ) { |
|
694 | + return $value; |
|
695 | + } else { |
|
696 | + return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
697 | + } |
|
698 | + } |
|
699 | + |
|
700 | + /** |
|
701 | + * Validate multiselect based settings. |
|
702 | + * |
|
703 | + * @since 2.0.0 |
|
704 | + * @param array $values Values. |
|
705 | + * @param array $setting Setting. |
|
706 | + * @return array|WP_Error |
|
707 | + */ |
|
708 | + public function validate_setting_multiselect_field( $values, $setting ) { |
|
709 | + if ( empty( $values ) ) { |
|
710 | + return array(); |
|
711 | + } |
|
712 | + |
|
713 | + if ( ! is_array( $values ) ) { |
|
714 | + return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
715 | + } |
|
716 | + |
|
717 | + $final_values = array(); |
|
718 | + foreach ( $values as $value ) { |
|
719 | + if ( array_key_exists( $value, $setting['options'] ) ) { |
|
720 | + $final_values[] = $value; |
|
721 | + } |
|
722 | + } |
|
723 | + |
|
724 | + return $final_values; |
|
725 | + } |
|
726 | + |
|
727 | + /** |
|
728 | + * Validate radio based settings. |
|
729 | + * |
|
730 | + * @since 2.0.0 |
|
731 | + * @param string $value Value. |
|
732 | + * @param array $setting Setting. |
|
733 | + * @return string|WP_Error |
|
734 | + */ |
|
735 | + public function validate_setting_radio_field( $value, $setting ) { |
|
736 | + return $this->validate_setting_select_field( $value, $setting ); |
|
737 | + } |
|
738 | + |
|
739 | + /** |
|
740 | + * Validate checkbox based settings. |
|
741 | + * |
|
742 | + * @since 2.0.0 |
|
743 | + * @param string $value Value. |
|
744 | + * @return int |
|
745 | + */ |
|
746 | + public function validate_setting_checkbox_field( $value ) { |
|
747 | + return (int) ! empty( $value ); |
|
748 | + } |
|
749 | + |
|
750 | + /** |
|
751 | + * Validate textarea based settings. |
|
752 | + * |
|
753 | + * @since 2.0.0 |
|
754 | + * @param string $value Value. |
|
755 | + * @return string |
|
756 | + */ |
|
757 | + public function validate_setting_textarea_field( $value ) { |
|
758 | + $value = is_null( $value ) ? '' : $value; |
|
759 | + return wp_kses( |
|
760 | + trim( stripslashes( $value ) ), |
|
761 | + array_merge( |
|
762 | + array( |
|
763 | + 'iframe' => array( |
|
764 | + 'src' => true, |
|
765 | + 'style' => true, |
|
766 | + 'id' => true, |
|
767 | + 'class' => true, |
|
768 | + ), |
|
769 | + ), |
|
770 | + wp_kses_allowed_html( 'post' ) |
|
771 | + ) |
|
772 | + ); |
|
773 | + } |
|
774 | 774 | |
775 | 775 | } |
@@ -9,7 +9,7 @@ discard block |
||
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 Setting controller class. |
@@ -39,7 +39,7 @@ discard block |
||
39 | 39 | * |
40 | 40 | * @see register_rest_route() |
41 | 41 | */ |
42 | - public function register_namespace_routes( $namespace ) { |
|
42 | + public function register_namespace_routes($namespace) { |
|
43 | 43 | |
44 | 44 | // List all registered tabs. |
45 | 45 | register_rest_route( |
@@ -48,8 +48,8 @@ discard block |
||
48 | 48 | array( |
49 | 49 | array( |
50 | 50 | 'methods' => WP_REST_Server::READABLE, |
51 | - 'callback' => array( $this, 'get_tabs' ), |
|
52 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
51 | + 'callback' => array($this, 'get_tabs'), |
|
52 | + 'permission_callback' => array($this, 'get_items_permissions_check'), |
|
53 | 53 | ), |
54 | 54 | 'schema' => '__return_empty_array', |
55 | 55 | ) |
@@ -62,23 +62,23 @@ discard block |
||
62 | 62 | array( |
63 | 63 | 'args' => array( |
64 | 64 | 'id' => array( |
65 | - 'description' => __( 'Unique identifier for the setting.', 'invoicing' ), |
|
65 | + 'description' => __('Unique identifier for the setting.', 'invoicing'), |
|
66 | 66 | 'type' => 'string', |
67 | 67 | 'required' => true, |
68 | 68 | ), |
69 | 69 | ), |
70 | 70 | array( |
71 | 71 | 'methods' => WP_REST_Server::READABLE, |
72 | - 'callback' => array( $this, 'get_item' ), |
|
73 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
72 | + 'callback' => array($this, 'get_item'), |
|
73 | + 'permission_callback' => array($this, 'get_items_permissions_check'), |
|
74 | 74 | ), |
75 | 75 | array( |
76 | 76 | 'methods' => WP_REST_Server::EDITABLE, |
77 | - 'callback' => array( $this, 'update_item' ), |
|
78 | - 'permission_callback' => array( $this, 'update_items_permissions_check' ), |
|
79 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
77 | + 'callback' => array($this, 'update_item'), |
|
78 | + 'permission_callback' => array($this, 'update_items_permissions_check'), |
|
79 | + 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE), |
|
80 | 80 | ), |
81 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
81 | + 'schema' => array($this, 'get_public_item_schema'), |
|
82 | 82 | ) |
83 | 83 | ); |
84 | 84 | |
@@ -89,16 +89,16 @@ discard block |
||
89 | 89 | array( |
90 | 90 | 'args' => array( |
91 | 91 | 'tab' => array( |
92 | - 'description' => __( 'Unique identifier for the tab whose sections should be retrieved.', 'invoicing' ), |
|
92 | + 'description' => __('Unique identifier for the tab whose sections should be retrieved.', 'invoicing'), |
|
93 | 93 | 'type' => 'string', |
94 | 94 | 'required' => true, |
95 | - 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
95 | + 'enum' => array_keys(wpinv_get_settings_tabs()), |
|
96 | 96 | ), |
97 | 97 | ), |
98 | 98 | array( |
99 | 99 | 'methods' => WP_REST_Server::READABLE, |
100 | - 'callback' => array( $this, 'get_sections' ), |
|
101 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
100 | + 'callback' => array($this, 'get_sections'), |
|
101 | + 'permission_callback' => array($this, 'get_items_permissions_check'), |
|
102 | 102 | ), |
103 | 103 | 'schema' => '__return_empty_array', |
104 | 104 | ) |
@@ -111,23 +111,23 @@ discard block |
||
111 | 111 | array( |
112 | 112 | 'args' => array( |
113 | 113 | 'tab' => array( |
114 | - 'description' => __( 'Unique identifier for the tab whose settings should be retrieved.', 'invoicing' ), |
|
114 | + 'description' => __('Unique identifier for the tab whose settings should be retrieved.', 'invoicing'), |
|
115 | 115 | 'type' => 'string', |
116 | 116 | 'required' => true, |
117 | - 'enum' => array_keys( wpinv_get_settings_tabs() ), |
|
117 | + 'enum' => array_keys(wpinv_get_settings_tabs()), |
|
118 | 118 | ), |
119 | 119 | 'section' => array( |
120 | - 'description' => __( 'The section in the tab whose settings should be retrieved.', 'invoicing' ), |
|
120 | + 'description' => __('The section in the tab whose settings should be retrieved.', 'invoicing'), |
|
121 | 121 | 'type' => 'string', |
122 | 122 | 'required' => true, |
123 | 123 | ), |
124 | 124 | ), |
125 | 125 | array( |
126 | 126 | 'methods' => WP_REST_Server::READABLE, |
127 | - 'callback' => array( $this, 'get_items' ), |
|
128 | - 'permission_callback' => array( $this, 'get_items_permissions_check' ), |
|
127 | + 'callback' => array($this, 'get_items'), |
|
128 | + 'permission_callback' => array($this, 'get_items_permissions_check'), |
|
129 | 129 | ), |
130 | - 'schema' => array( $this, 'get_public_item_schema' ), |
|
130 | + 'schema' => array($this, 'get_public_item_schema'), |
|
131 | 131 | ) |
132 | 132 | ); |
133 | 133 | |
@@ -137,17 +137,17 @@ discard block |
||
137 | 137 | array( |
138 | 138 | 'args' => array( |
139 | 139 | 'id' => array( |
140 | - 'description' => __( 'Setting ID.', 'invoicing' ), |
|
140 | + 'description' => __('Setting ID.', 'invoicing'), |
|
141 | 141 | 'type' => 'string', |
142 | 142 | ), |
143 | 143 | ), |
144 | 144 | array( |
145 | 145 | 'methods' => WP_REST_Server::EDITABLE, |
146 | - 'callback' => array( $this, 'batch_items' ), |
|
147 | - 'permission_callback' => array( $this, 'batch_items_permissions_check' ), |
|
148 | - 'args' => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ), |
|
146 | + 'callback' => array($this, 'batch_items'), |
|
147 | + 'permission_callback' => array($this, 'batch_items_permissions_check'), |
|
148 | + 'args' => $this->get_endpoint_args_for_item_schema(WP_REST_Server::EDITABLE), |
|
149 | 149 | ), |
150 | - 'schema' => array( $this, 'get_public_batch_schema' ), |
|
150 | + 'schema' => array($this, 'get_public_batch_schema'), |
|
151 | 151 | ) |
152 | 152 | ); |
153 | 153 | |
@@ -160,34 +160,34 @@ discard block |
||
160 | 160 | * @param WP_REST_Request $request Request data. |
161 | 161 | * @return WP_Error|WP_REST_Response |
162 | 162 | */ |
163 | - public function get_items( $request ) { |
|
163 | + public function get_items($request) { |
|
164 | 164 | |
165 | 165 | $settings = $this->get_settings(); |
166 | 166 | |
167 | - if ( ! isset( $settings[ $request['tab'] ] ) ) { |
|
168 | - return new WP_Error( 'rest_invalid_tab', __( 'Invalid tab.', 'invoicing' ), array( 'status' => 400 ) ); |
|
167 | + if (!isset($settings[$request['tab']])) { |
|
168 | + return new WP_Error('rest_invalid_tab', __('Invalid tab.', 'invoicing'), array('status' => 400)); |
|
169 | 169 | } |
170 | 170 | |
171 | - if ( ! isset( $settings[ $request['tab'] ][ $request['section'] ] ) ) { |
|
172 | - return new WP_Error( 'rest_invalid_section', __( 'Invalid section.', 'invoicing' ), array( 'status' => 400 ) ); |
|
171 | + if (!isset($settings[$request['tab']][$request['section']])) { |
|
172 | + return new WP_Error('rest_invalid_section', __('Invalid section.', 'invoicing'), array('status' => 400)); |
|
173 | 173 | } |
174 | 174 | |
175 | - $settings = $settings[ $request['tab'] ][ $request['section'] ]; |
|
175 | + $settings = $settings[$request['tab']][$request['section']]; |
|
176 | 176 | $prepared = array(); |
177 | 177 | |
178 | - foreach ( $settings as $setting ) { |
|
178 | + foreach ($settings as $setting) { |
|
179 | 179 | |
180 | - $setting = $this->sanitize_setting( $setting ); |
|
181 | - $setting_data = $this->prepare_item_for_response( $setting, $request ); |
|
182 | - $setting_data = $this->prepare_response_for_collection( $setting_data ); |
|
180 | + $setting = $this->sanitize_setting($setting); |
|
181 | + $setting_data = $this->prepare_item_for_response($setting, $request); |
|
182 | + $setting_data = $this->prepare_response_for_collection($setting_data); |
|
183 | 183 | |
184 | - if ( $this->is_setting_type_valid( $setting['type'] ) ) { |
|
185 | - $prepared[] = $setting_data; |
|
184 | + if ($this->is_setting_type_valid($setting['type'])) { |
|
185 | + $prepared[] = $setting_data; |
|
186 | 186 | } |
187 | 187 | |
188 | 188 | } |
189 | 189 | |
190 | - return rest_ensure_response( $prepared ); |
|
190 | + return rest_ensure_response($prepared); |
|
191 | 191 | } |
192 | 192 | |
193 | 193 | /** |
@@ -197,16 +197,16 @@ discard block |
||
197 | 197 | * @param WP_REST_Request $request Request data. |
198 | 198 | * @return WP_Error|WP_REST_Response |
199 | 199 | */ |
200 | - public function get_item( $request ) { |
|
201 | - $setting = $this->get_setting( $request['id'] ); |
|
200 | + public function get_item($request) { |
|
201 | + $setting = $this->get_setting($request['id']); |
|
202 | 202 | |
203 | - if ( is_wp_error( $setting ) ) { |
|
203 | + if (is_wp_error($setting)) { |
|
204 | 204 | return $setting; |
205 | 205 | } |
206 | 206 | |
207 | - $setting = $this->sanitize_setting( $setting ); |
|
208 | - $response = $this->prepare_item_for_response( $setting, $request ); |
|
209 | - return rest_ensure_response( $response ); |
|
207 | + $setting = $this->sanitize_setting($setting); |
|
208 | + $response = $this->prepare_item_for_response($setting, $request); |
|
209 | + return rest_ensure_response($response); |
|
210 | 210 | } |
211 | 211 | |
212 | 212 | /** |
@@ -216,29 +216,29 @@ discard block |
||
216 | 216 | * @param WP_REST_Request $request Request data. |
217 | 217 | * @return WP_Error|WP_REST_Response |
218 | 218 | */ |
219 | - public function update_item( $request ) { |
|
220 | - $setting = $this->get_setting( $request['id'] ); |
|
219 | + public function update_item($request) { |
|
220 | + $setting = $this->get_setting($request['id']); |
|
221 | 221 | |
222 | - if ( is_wp_error( $setting ) ) { |
|
222 | + if (is_wp_error($setting)) { |
|
223 | 223 | return $setting; |
224 | 224 | } |
225 | 225 | |
226 | - if ( is_callable( array( $this, 'validate_setting_' . $setting['type'] . '_field' ) ) ) { |
|
227 | - $value = $this->{'validate_setting_' . $setting['type'] . '_field'}( $request['value'], $setting ); |
|
226 | + if (is_callable(array($this, 'validate_setting_' . $setting['type'] . '_field'))) { |
|
227 | + $value = $this->{'validate_setting_' . $setting['type'] . '_field'}($request['value'], $setting); |
|
228 | 228 | } else { |
229 | - $value = $this->validate_setting_text_field( $request['value'], $setting ); |
|
229 | + $value = $this->validate_setting_text_field($request['value'], $setting); |
|
230 | 230 | } |
231 | 231 | |
232 | - if ( is_wp_error( $value ) ) { |
|
232 | + if (is_wp_error($value)) { |
|
233 | 233 | return $value; |
234 | 234 | } |
235 | 235 | |
236 | - wpinv_update_option( $request['id'], $value ); |
|
236 | + wpinv_update_option($request['id'], $value); |
|
237 | 237 | $setting['value'] = $value; |
238 | - $setting = $this->sanitize_setting( $setting ); |
|
239 | - $response = $this->prepare_item_for_response( $setting, $request ); |
|
238 | + $setting = $this->sanitize_setting($setting); |
|
239 | + $response = $this->prepare_item_for_response($setting, $request); |
|
240 | 240 | |
241 | - return rest_ensure_response( $response ); |
|
241 | + return rest_ensure_response($response); |
|
242 | 242 | } |
243 | 243 | |
244 | 244 | /** |
@@ -248,9 +248,9 @@ discard block |
||
248 | 248 | * @param WP_REST_Request $request Full data about the request. |
249 | 249 | * @return WP_Error|boolean |
250 | 250 | */ |
251 | - public function get_items_permissions_check( $request ) { |
|
252 | - if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
253 | - return new WP_Error( 'rest_cannot_view', __( 'Sorry, you cannot list resources.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
251 | + public function get_items_permissions_check($request) { |
|
252 | + if (!wpinv_current_user_can_manage_invoicing()) { |
|
253 | + return new WP_Error('rest_cannot_view', __('Sorry, you cannot list resources.', 'invoicing'), array('status' => rest_authorization_required_code())); |
|
254 | 254 | } |
255 | 255 | |
256 | 256 | return true; |
@@ -263,9 +263,9 @@ discard block |
||
263 | 263 | * @param WP_REST_Request $request Full data about the request. |
264 | 264 | * @return WP_Error|boolean |
265 | 265 | */ |
266 | - public function update_items_permissions_check( $request ) { |
|
267 | - if ( ! wpinv_current_user_can_manage_invoicing() ) { |
|
268 | - return new WP_Error( 'rest_cannot_edit', __( 'Sorry, you cannot edit this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
266 | + public function update_items_permissions_check($request) { |
|
267 | + if (!wpinv_current_user_can_manage_invoicing()) { |
|
268 | + return new WP_Error('rest_cannot_edit', __('Sorry, you cannot edit this resource.', 'invoicing'), array('status' => rest_authorization_required_code())); |
|
269 | 269 | } |
270 | 270 | |
271 | 271 | return true; |
@@ -278,8 +278,8 @@ discard block |
||
278 | 278 | * |
279 | 279 | * @return boolean|WP_Error |
280 | 280 | */ |
281 | - public function batch_items_permissions_check( $request ) { |
|
282 | - return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error( 'rest_cannot_batch', __( 'Sorry, you are not allowed to batch manipulate this resource.', 'invoicing' ), array( 'status' => rest_authorization_required_code() ) ); |
|
281 | + public function batch_items_permissions_check($request) { |
|
282 | + return wpinv_current_user_can_manage_invoicing() ? true : new WP_Error('rest_cannot_batch', __('Sorry, you are not allowed to batch manipulate this resource.', 'invoicing'), array('status' => rest_authorization_required_code())); |
|
283 | 283 | } |
284 | 284 | |
285 | 285 | /** |
@@ -288,14 +288,14 @@ discard block |
||
288 | 288 | * @param string $setting_id Setting ID. |
289 | 289 | * @return array Links for the given setting. |
290 | 290 | */ |
291 | - protected function prepare_links( $setting_id ) { |
|
291 | + protected function prepare_links($setting_id) { |
|
292 | 292 | |
293 | 293 | $links = array( |
294 | 294 | 'self' => array( |
295 | - 'href' => rest_url( sprintf( '/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id ) ), |
|
295 | + 'href' => rest_url(sprintf('/%s/%s/setting/%s', $this->namespace, $this->rest_base, $setting_id)), |
|
296 | 296 | ), |
297 | 297 | 'collection' => array( |
298 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
298 | + 'href' => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)), |
|
299 | 299 | ), |
300 | 300 | ); |
301 | 301 | |
@@ -310,14 +310,14 @@ discard block |
||
310 | 310 | * @param WP_REST_Request $request Request object. |
311 | 311 | * @return WP_REST_Response $response Response data. |
312 | 312 | */ |
313 | - public function prepare_item_for_response( $item, $request ) { |
|
314 | - $context = empty( $request['context'] ) ? 'view' : $request['context']; |
|
315 | - $data = $this->add_additional_fields_to_object( $item, $request ); |
|
316 | - $data = $this->filter_response_by_context( $data, $context ); |
|
313 | + public function prepare_item_for_response($item, $request) { |
|
314 | + $context = empty($request['context']) ? 'view' : $request['context']; |
|
315 | + $data = $this->add_additional_fields_to_object($item, $request); |
|
316 | + $data = $this->filter_response_by_context($data, $context); |
|
317 | 317 | |
318 | - $response = rest_ensure_response( $data ); |
|
318 | + $response = rest_ensure_response($data); |
|
319 | 319 | |
320 | - $response->add_links( $this->prepare_links( $item['id'] ) ); |
|
320 | + $response->add_links($this->prepare_links($item['id'])); |
|
321 | 321 | |
322 | 322 | return $response; |
323 | 323 | } |
@@ -330,10 +330,10 @@ discard block |
||
330 | 330 | * @param array $setting Setting. |
331 | 331 | * @return array |
332 | 332 | */ |
333 | - public function filter_setting( $setting ) { |
|
333 | + public function filter_setting($setting) { |
|
334 | 334 | return array_intersect_key( |
335 | 335 | $setting, |
336 | - array_flip( array_filter( array_keys( $setting ), array( $this, 'allowed_setting_keys' ) ) ) |
|
336 | + array_flip(array_filter(array_keys($setting), array($this, 'allowed_setting_keys'))) |
|
337 | 337 | ); |
338 | 338 | } |
339 | 339 | |
@@ -343,8 +343,8 @@ discard block |
||
343 | 343 | * @param string $key Key to check. |
344 | 344 | * @return boolean |
345 | 345 | */ |
346 | - public function allowed_setting_keys( $key ) { |
|
347 | - return in_array( $key, array_keys( $this->setting_defaults() ), true ); |
|
346 | + public function allowed_setting_keys($key) { |
|
347 | + return in_array($key, array_keys($this->setting_defaults()), true); |
|
348 | 348 | } |
349 | 349 | |
350 | 350 | /** |
@@ -376,11 +376,11 @@ discard block |
||
376 | 376 | * @param array $setting The setting to sanitize. |
377 | 377 | * @return array |
378 | 378 | */ |
379 | - public function sanitize_setting( $setting ) { |
|
379 | + public function sanitize_setting($setting) { |
|
380 | 380 | |
381 | - $setting = wp_parse_args( $setting, $this->setting_defaults() ); |
|
382 | - $setting['value'] = wpinv_get_option( $setting['id'], $setting['std'] ); |
|
383 | - return $this->filter_setting( $setting ); |
|
381 | + $setting = wp_parse_args($setting, $this->setting_defaults()); |
|
382 | + $setting['value'] = wpinv_get_option($setting['id'], $setting['std']); |
|
383 | + return $this->filter_setting($setting); |
|
384 | 384 | |
385 | 385 | } |
386 | 386 | |
@@ -391,31 +391,31 @@ discard block |
||
391 | 391 | * @param string $setting_id Setting ID. |
392 | 392 | * @return array|WP_Error |
393 | 393 | */ |
394 | - public function get_setting( $setting_id ) { |
|
394 | + public function get_setting($setting_id) { |
|
395 | 395 | |
396 | - if ( empty( $setting_id ) ) { |
|
397 | - return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
396 | + if (empty($setting_id)) { |
|
397 | + return new WP_Error('rest_setting_setting_invalid', __('Invalid setting.', 'invoicing'), array('status' => 404)); |
|
398 | 398 | } |
399 | 399 | |
400 | - $settings = $this->get_settings(); |
|
400 | + $settings = $this->get_settings(); |
|
401 | 401 | |
402 | - foreach ( $settings as $tabs ) { |
|
402 | + foreach ($settings as $tabs) { |
|
403 | 403 | |
404 | - foreach ( $tabs as $sections ) { |
|
404 | + foreach ($tabs as $sections) { |
|
405 | 405 | |
406 | - if ( isset( $sections[ $setting_id ] ) ) { |
|
407 | - if ( ! $this->is_setting_type_valid( $sections[ $setting_id ]['type'] ) ) { |
|
408 | - return new WP_Error( 'rest_setting_setting_type_invalid', __( 'Invalid setting type.', 'invoicing' ), array( 'status' => 404 ) ); |
|
406 | + if (isset($sections[$setting_id])) { |
|
407 | + if (!$this->is_setting_type_valid($sections[$setting_id]['type'])) { |
|
408 | + return new WP_Error('rest_setting_setting_type_invalid', __('Invalid setting type.', 'invoicing'), array('status' => 404)); |
|
409 | 409 | } |
410 | 410 | |
411 | - return $sections[ $setting_id ]; |
|
411 | + return $sections[$setting_id]; |
|
412 | 412 | } |
413 | 413 | |
414 | 414 | } |
415 | 415 | |
416 | 416 | } |
417 | 417 | |
418 | - return new WP_Error( 'rest_setting_setting_invalid', __( 'Invalid setting.', 'invoicing' ), array( 'status' => 404 ) ); |
|
418 | + return new WP_Error('rest_setting_setting_invalid', __('Invalid setting.', 'invoicing'), array('status' => 404)); |
|
419 | 419 | } |
420 | 420 | |
421 | 421 | /** |
@@ -424,41 +424,41 @@ discard block |
||
424 | 424 | * @param WP_REST_Request $request Request data. |
425 | 425 | * @return array |
426 | 426 | */ |
427 | - public function get_tabs( $request ) { |
|
427 | + public function get_tabs($request) { |
|
428 | 428 | $tabs = wpinv_get_settings_tabs(); |
429 | 429 | $prepared = array(); |
430 | 430 | |
431 | - foreach ( $tabs as $id => $tab ) { |
|
431 | + foreach ($tabs as $id => $tab) { |
|
432 | 432 | |
433 | 433 | $_request = $request; |
434 | - $_request['tab'] = sanitize_title( $id ); |
|
434 | + $_request['tab'] = sanitize_title($id); |
|
435 | 435 | $data = array( |
436 | - 'id' => sanitize_title( $id ), |
|
437 | - 'label' => sanitize_text_field( $tab ), |
|
438 | - 'sections' => $this->get_sections( $_request ), |
|
436 | + 'id' => sanitize_title($id), |
|
437 | + 'label' => sanitize_text_field($tab), |
|
438 | + 'sections' => $this->get_sections($_request), |
|
439 | 439 | ); |
440 | 440 | |
441 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
442 | - $response = rest_ensure_response( $data ); |
|
441 | + $data = $this->add_additional_fields_to_object($data, $request); |
|
442 | + $response = rest_ensure_response($data); |
|
443 | 443 | |
444 | - if ( ! is_wp_error( $response ) ) { |
|
444 | + if (!is_wp_error($response)) { |
|
445 | 445 | $links = array( |
446 | 446 | 'sections' => array( |
447 | - 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ), |
|
447 | + 'href' => rest_url(sprintf('/%s/%s/%s', $this->namespace, $this->rest_base, $id)), |
|
448 | 448 | ), |
449 | 449 | 'collection' => array( |
450 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
450 | + 'href' => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)), |
|
451 | 451 | ), |
452 | 452 | ); |
453 | - $response->add_links( $links ); |
|
454 | - $response = $this->prepare_response_for_collection( $response ); |
|
453 | + $response->add_links($links); |
|
454 | + $response = $this->prepare_response_for_collection($response); |
|
455 | 455 | } |
456 | 456 | |
457 | 457 | $prepared[] = $response; |
458 | 458 | |
459 | 459 | } |
460 | 460 | |
461 | - return rest_ensure_response( $prepared ); |
|
461 | + return rest_ensure_response($prepared); |
|
462 | 462 | } |
463 | 463 | |
464 | 464 | /** |
@@ -467,43 +467,43 @@ discard block |
||
467 | 467 | * @param WP_REST_Request $request Request data. |
468 | 468 | * @return array |
469 | 469 | */ |
470 | - public function get_sections( $request ) { |
|
470 | + public function get_sections($request) { |
|
471 | 471 | |
472 | - $tab = sanitize_title( $request['tab'] ); |
|
473 | - $sections = wpinv_get_settings_tab_sections( $tab ); |
|
472 | + $tab = sanitize_title($request['tab']); |
|
473 | + $sections = wpinv_get_settings_tab_sections($tab); |
|
474 | 474 | $prepared = array(); |
475 | 475 | |
476 | - foreach ( $sections as $id => $section ) { |
|
476 | + foreach ($sections as $id => $section) { |
|
477 | 477 | |
478 | - $data = array( |
|
479 | - 'id' => sanitize_title( $id ), |
|
480 | - 'label' => sanitize_text_field( $section ), |
|
478 | + $data = array( |
|
479 | + 'id' => sanitize_title($id), |
|
480 | + 'label' => sanitize_text_field($section), |
|
481 | 481 | ); |
482 | 482 | |
483 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
484 | - $response = rest_ensure_response( $data ); |
|
483 | + $data = $this->add_additional_fields_to_object($data, $request); |
|
484 | + $response = rest_ensure_response($data); |
|
485 | 485 | |
486 | - if ( ! is_wp_error( $response ) ) { |
|
486 | + if (!is_wp_error($response)) { |
|
487 | 487 | $links = array( |
488 | 488 | 'settings' => array( |
489 | - 'href' => rest_url( sprintf( '/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id ) ), |
|
489 | + 'href' => rest_url(sprintf('/%s/%s/%s/%s', $this->namespace, $this->rest_base, $tab, $id)), |
|
490 | 490 | ), |
491 | 491 | 'collection' => array( |
492 | - 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $tab ) ), |
|
492 | + 'href' => rest_url(sprintf('/%s/%s/%s', $this->namespace, $this->rest_base, $tab)), |
|
493 | 493 | ), |
494 | 494 | 'tabs' => array( |
495 | - 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $this->rest_base ) ), |
|
495 | + 'href' => rest_url(sprintf('/%s/%s', $this->namespace, $this->rest_base)), |
|
496 | 496 | ), |
497 | 497 | ); |
498 | - $response->add_links( $links ); |
|
499 | - $response = $this->prepare_response_for_collection( $response ); |
|
498 | + $response->add_links($links); |
|
499 | + $response = $this->prepare_response_for_collection($response); |
|
500 | 500 | } |
501 | 501 | |
502 | 502 | $prepared[] = $response; |
503 | 503 | |
504 | 504 | } |
505 | 505 | |
506 | - return rest_ensure_response( $prepared ); |
|
506 | + return rest_ensure_response($prepared); |
|
507 | 507 | } |
508 | 508 | |
509 | 509 | /** |
@@ -513,7 +513,7 @@ discard block |
||
513 | 513 | */ |
514 | 514 | public function get_settings() { |
515 | 515 | |
516 | - if ( empty( $this->settings ) ) { |
|
516 | + if (empty($this->settings)) { |
|
517 | 517 | $this->settings = wpinv_get_registered_settings(); |
518 | 518 | } |
519 | 519 | |
@@ -528,21 +528,21 @@ discard block |
||
528 | 528 | * @param string $type Type. |
529 | 529 | * @return bool |
530 | 530 | */ |
531 | - public function is_setting_type_valid( $type ) { |
|
531 | + public function is_setting_type_valid($type) { |
|
532 | 532 | |
533 | 533 | return in_array( |
534 | 534 | $type, array( |
535 | - 'text', // Validates with validate_setting_text_field. |
|
536 | - 'email', // Validates with validate_setting_text_field. |
|
537 | - 'number', // Validates with validate_setting_text_field. |
|
538 | - 'color', // Validates with validate_setting_text_field. |
|
539 | - 'password', // Validates with validate_setting_text_field. |
|
540 | - 'textarea', // Validates with validate_setting_textarea_field. |
|
541 | - 'select', // Validates with validate_setting_select_field. |
|
542 | - 'multiselect', // Validates with validate_setting_multiselect_field. |
|
543 | - 'radio', // Validates with validate_setting_radio_field (-> validate_setting_select_field). |
|
544 | - 'checkbox', // Validates with validate_setting_checkbox_field. |
|
545 | - 'header', // Validates with validate_setting_text_field. |
|
535 | + 'text', // Validates with validate_setting_text_field. |
|
536 | + 'email', // Validates with validate_setting_text_field. |
|
537 | + 'number', // Validates with validate_setting_text_field. |
|
538 | + 'color', // Validates with validate_setting_text_field. |
|
539 | + 'password', // Validates with validate_setting_text_field. |
|
540 | + 'textarea', // Validates with validate_setting_textarea_field. |
|
541 | + 'select', // Validates with validate_setting_select_field. |
|
542 | + 'multiselect', // Validates with validate_setting_multiselect_field. |
|
543 | + 'radio', // Validates with validate_setting_radio_field (-> validate_setting_select_field). |
|
544 | + 'checkbox', // Validates with validate_setting_checkbox_field. |
|
545 | + 'header', // Validates with validate_setting_text_field. |
|
546 | 546 | ) |
547 | 547 | ); |
548 | 548 | |
@@ -556,8 +556,8 @@ discard block |
||
556 | 556 | public function get_item_schema() { |
557 | 557 | |
558 | 558 | // Maybe retrieve the schema from cache. |
559 | - if ( ! empty( $this->schema ) ) { |
|
560 | - return $this->add_additional_fields_schema( $this->schema ); |
|
559 | + if (!empty($this->schema)) { |
|
560 | + return $this->add_additional_fields_schema($this->schema); |
|
561 | 561 | } |
562 | 562 | |
563 | 563 | $schema = array( |
@@ -566,105 +566,105 @@ discard block |
||
566 | 566 | 'type' => 'object', |
567 | 567 | 'properties' => array( |
568 | 568 | 'id' => array( |
569 | - 'description' => __( 'A unique identifier for the setting.', 'invoicing' ), |
|
569 | + 'description' => __('A unique identifier for the setting.', 'invoicing'), |
|
570 | 570 | 'type' => 'string', |
571 | 571 | 'arg_options' => array( |
572 | 572 | 'sanitize_callback' => 'sanitize_title', |
573 | 573 | ), |
574 | - 'context' => array( 'view', 'edit' ), |
|
574 | + 'context' => array('view', 'edit'), |
|
575 | 575 | 'readonly' => true, |
576 | 576 | ), |
577 | 577 | 'tab' => array( |
578 | - 'description' => __( 'An identifier for the tab this setting belongs to.', 'invoicing' ), |
|
578 | + 'description' => __('An identifier for the tab this setting belongs to.', 'invoicing'), |
|
579 | 579 | 'type' => 'string', |
580 | 580 | 'arg_options' => array( |
581 | 581 | 'sanitize_callback' => 'sanitize_title', |
582 | 582 | ), |
583 | - 'context' => array( 'view', 'edit' ), |
|
583 | + 'context' => array('view', 'edit'), |
|
584 | 584 | 'readonly' => true, |
585 | 585 | ), |
586 | 586 | 'section' => array( |
587 | - 'description' => __( 'An identifier for the section this setting belongs to.', 'invoicing' ), |
|
587 | + 'description' => __('An identifier for the section this setting belongs to.', 'invoicing'), |
|
588 | 588 | 'type' => 'string', |
589 | 589 | 'arg_options' => array( |
590 | 590 | 'sanitize_callback' => 'sanitize_title', |
591 | 591 | ), |
592 | - 'context' => array( 'view', 'edit' ), |
|
592 | + 'context' => array('view', 'edit'), |
|
593 | 593 | 'readonly' => true, |
594 | 594 | ), |
595 | 595 | 'name' => array( |
596 | - 'description' => __( 'A human readable label for the setting used in interfaces.', 'invoicing' ), |
|
596 | + 'description' => __('A human readable label for the setting used in interfaces.', 'invoicing'), |
|
597 | 597 | 'type' => 'string', |
598 | 598 | 'arg_options' => array( |
599 | 599 | 'sanitize_callback' => 'sanitize_text_field', |
600 | 600 | ), |
601 | - 'context' => array( 'view', 'edit' ), |
|
601 | + 'context' => array('view', 'edit'), |
|
602 | 602 | 'readonly' => true, |
603 | 603 | ), |
604 | 604 | 'desc' => array( |
605 | - 'description' => __( 'A human readable description for the setting used in interfaces.', 'invoicing' ), |
|
605 | + 'description' => __('A human readable description for the setting used in interfaces.', 'invoicing'), |
|
606 | 606 | 'type' => 'string', |
607 | - 'context' => array( 'view', 'edit' ), |
|
607 | + 'context' => array('view', 'edit'), |
|
608 | 608 | 'readonly' => true, |
609 | 609 | ), |
610 | 610 | 'value' => array( |
611 | - 'description' => __( 'The current value of this setting.', 'invoicing' ), |
|
611 | + 'description' => __('The current value of this setting.', 'invoicing'), |
|
612 | 612 | 'type' => 'mixed', |
613 | - 'context' => array( 'view', 'edit' ), |
|
613 | + 'context' => array('view', 'edit'), |
|
614 | 614 | ), |
615 | 615 | 'default' => array( |
616 | - 'description' => __( 'Default value for the setting.', 'invoicing' ), |
|
616 | + 'description' => __('Default value for the setting.', 'invoicing'), |
|
617 | 617 | 'type' => 'mixed', |
618 | - 'context' => array( 'view', 'edit' ), |
|
618 | + 'context' => array('view', 'edit'), |
|
619 | 619 | 'readonly' => true, |
620 | 620 | ), |
621 | 621 | 'placeholder' => array( |
622 | - 'description' => __( 'Placeholder text to be displayed in text inputs.', 'invoicing' ), |
|
622 | + 'description' => __('Placeholder text to be displayed in text inputs.', 'invoicing'), |
|
623 | 623 | 'type' => 'string', |
624 | 624 | 'arg_options' => array( |
625 | 625 | 'sanitize_callback' => 'sanitize_text_field', |
626 | 626 | ), |
627 | - 'context' => array( 'view', 'edit' ), |
|
627 | + 'context' => array('view', 'edit'), |
|
628 | 628 | 'readonly' => true, |
629 | 629 | ), |
630 | 630 | 'type' => array( |
631 | - 'description' => __( 'Type of setting.', 'invoicing' ), |
|
631 | + 'description' => __('Type of setting.', 'invoicing'), |
|
632 | 632 | 'type' => 'string', |
633 | 633 | 'arg_options' => array( |
634 | 634 | 'sanitize_callback' => 'sanitize_text_field', |
635 | 635 | ), |
636 | - 'context' => array( 'view', 'edit' ), |
|
637 | - 'enum' => array( 'text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html' ), |
|
636 | + 'context' => array('view', 'edit'), |
|
637 | + 'enum' => array('text', 'email', 'number', 'color', 'password', 'textarea', 'select', 'multiselect', 'radio', 'image_width', 'checkbox', 'raw_html'), |
|
638 | 638 | 'readonly' => true, |
639 | 639 | ), |
640 | 640 | 'options' => array( |
641 | - 'description' => __( 'Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing' ), |
|
641 | + 'description' => __('Array of options (key value pairs) for inputs such as select, multiselect, and radio buttons.', 'invoicing'), |
|
642 | 642 | 'type' => 'object', |
643 | - 'context' => array( 'view', 'edit' ), |
|
643 | + 'context' => array('view', 'edit'), |
|
644 | 644 | 'readonly' => true, |
645 | 645 | ), |
646 | 646 | 'readonly' => array( |
647 | - 'description' => __( 'Whether or not this setting is readonly', 'invoicing' ), |
|
647 | + 'description' => __('Whether or not this setting is readonly', 'invoicing'), |
|
648 | 648 | 'type' => 'string', |
649 | - 'context' => array( 'view' ), |
|
649 | + 'context' => array('view'), |
|
650 | 650 | 'readonly' => true, |
651 | 651 | ), |
652 | 652 | 'faux' => array( |
653 | - 'description' => __( 'Whether or not this setting is readonly/faux', 'invoicing' ), |
|
653 | + 'description' => __('Whether or not this setting is readonly/faux', 'invoicing'), |
|
654 | 654 | 'type' => 'string', |
655 | - 'context' => array( 'view' ), |
|
655 | + 'context' => array('view'), |
|
656 | 656 | 'readonly' => true, |
657 | 657 | ), |
658 | 658 | ), |
659 | 659 | ); |
660 | 660 | |
661 | 661 | // Filters the settings schema for the REST API. |
662 | - $schema = apply_filters( 'getpaid_rest_settings_schema', $schema ); |
|
662 | + $schema = apply_filters('getpaid_rest_settings_schema', $schema); |
|
663 | 663 | |
664 | 664 | // Cache the settings schema. |
665 | 665 | $this->schema = $schema; |
666 | 666 | |
667 | - return $this->add_additional_fields_schema( $this->schema ); |
|
667 | + return $this->add_additional_fields_schema($this->schema); |
|
668 | 668 | |
669 | 669 | } |
670 | 670 | |
@@ -676,9 +676,9 @@ discard block |
||
676 | 676 | * @param array $setting Setting. |
677 | 677 | * @return string |
678 | 678 | */ |
679 | - public function validate_setting_text_field( $value ) { |
|
680 | - $value = is_null( $value ) ? '' : $value; |
|
681 | - return wp_kses_post( trim( stripslashes( $value ) ) ); |
|
679 | + public function validate_setting_text_field($value) { |
|
680 | + $value = is_null($value) ? '' : $value; |
|
681 | + return wp_kses_post(trim(stripslashes($value))); |
|
682 | 682 | } |
683 | 683 | |
684 | 684 | /** |
@@ -689,11 +689,11 @@ discard block |
||
689 | 689 | * @param array $setting Setting. |
690 | 690 | * @return string|WP_Error |
691 | 691 | */ |
692 | - public function validate_setting_select_field( $value, $setting ) { |
|
693 | - if ( array_key_exists( $value, $setting['options'] ) ) { |
|
692 | + public function validate_setting_select_field($value, $setting) { |
|
693 | + if (array_key_exists($value, $setting['options'])) { |
|
694 | 694 | return $value; |
695 | 695 | } else { |
696 | - return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
696 | + return new WP_Error('rest_setting_value_invalid', __('An invalid setting value was passed.', 'invoicing'), array('status' => 400)); |
|
697 | 697 | } |
698 | 698 | } |
699 | 699 | |
@@ -705,18 +705,18 @@ discard block |
||
705 | 705 | * @param array $setting Setting. |
706 | 706 | * @return array|WP_Error |
707 | 707 | */ |
708 | - public function validate_setting_multiselect_field( $values, $setting ) { |
|
709 | - if ( empty( $values ) ) { |
|
708 | + public function validate_setting_multiselect_field($values, $setting) { |
|
709 | + if (empty($values)) { |
|
710 | 710 | return array(); |
711 | 711 | } |
712 | 712 | |
713 | - if ( ! is_array( $values ) ) { |
|
714 | - return new WP_Error( 'rest_setting_value_invalid', __( 'An invalid setting value was passed.', 'invoicing' ), array( 'status' => 400 ) ); |
|
713 | + if (!is_array($values)) { |
|
714 | + return new WP_Error('rest_setting_value_invalid', __('An invalid setting value was passed.', 'invoicing'), array('status' => 400)); |
|
715 | 715 | } |
716 | 716 | |
717 | 717 | $final_values = array(); |
718 | - foreach ( $values as $value ) { |
|
719 | - if ( array_key_exists( $value, $setting['options'] ) ) { |
|
718 | + foreach ($values as $value) { |
|
719 | + if (array_key_exists($value, $setting['options'])) { |
|
720 | 720 | $final_values[] = $value; |
721 | 721 | } |
722 | 722 | } |
@@ -732,8 +732,8 @@ discard block |
||
732 | 732 | * @param array $setting Setting. |
733 | 733 | * @return string|WP_Error |
734 | 734 | */ |
735 | - public function validate_setting_radio_field( $value, $setting ) { |
|
736 | - return $this->validate_setting_select_field( $value, $setting ); |
|
735 | + public function validate_setting_radio_field($value, $setting) { |
|
736 | + return $this->validate_setting_select_field($value, $setting); |
|
737 | 737 | } |
738 | 738 | |
739 | 739 | /** |
@@ -743,8 +743,8 @@ discard block |
||
743 | 743 | * @param string $value Value. |
744 | 744 | * @return int |
745 | 745 | */ |
746 | - public function validate_setting_checkbox_field( $value ) { |
|
747 | - return (int) ! empty( $value ); |
|
746 | + public function validate_setting_checkbox_field($value) { |
|
747 | + return (int) !empty($value); |
|
748 | 748 | } |
749 | 749 | |
750 | 750 | /** |
@@ -754,10 +754,10 @@ discard block |
||
754 | 754 | * @param string $value Value. |
755 | 755 | * @return string |
756 | 756 | */ |
757 | - public function validate_setting_textarea_field( $value ) { |
|
758 | - $value = is_null( $value ) ? '' : $value; |
|
757 | + public function validate_setting_textarea_field($value) { |
|
758 | + $value = is_null($value) ? '' : $value; |
|
759 | 759 | return wp_kses( |
760 | - trim( stripslashes( $value ) ), |
|
760 | + trim(stripslashes($value)), |
|
761 | 761 | array_merge( |
762 | 762 | array( |
763 | 763 | 'iframe' => array( |
@@ -767,7 +767,7 @@ discard block |
||
767 | 767 | 'class' => true, |
768 | 768 | ), |
769 | 769 | ), |
770 | - wp_kses_allowed_html( 'post' ) |
|
770 | + wp_kses_allowed_html('post') |
|
771 | 771 | ) |
772 | 772 | ); |
773 | 773 | } |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | * |
6 | 6 | */ |
7 | 7 | |
8 | -defined( 'ABSPATH' ) || exit; |
|
8 | +defined('ABSPATH') || exit; |
|
9 | 9 | |
10 | 10 | /** |
11 | 11 | * GetPaid_Reports_Helper Class. |
@@ -26,7 +26,7 @@ discard block |
||
26 | 26 | * @param array $args |
27 | 27 | * @return mixed depending on query_type |
28 | 28 | */ |
29 | - public static function get_invoice_report_data( $args = array() ) { |
|
29 | + public static function get_invoice_report_data($args = array()) { |
|
30 | 30 | global $wpdb; |
31 | 31 | |
32 | 32 | $default_args = array( |
@@ -37,94 +37,94 @@ discard block |
||
37 | 37 | 'order_by' => '', // What to order by. |
38 | 38 | 'limit' => '', // Results limit. |
39 | 39 | 'filter_range' => array(), // An array of before and after dates to limit results by. |
40 | - 'invoice_types' => array( 'wpi_invoice' ), // An array of post types to retrieve. |
|
41 | - 'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold' ), |
|
40 | + 'invoice_types' => array('wpi_invoice'), // An array of post types to retrieve. |
|
41 | + 'invoice_status' => array('publish', 'wpi-processing', 'wpi-onhold'), |
|
42 | 42 | 'parent_invoice_status' => false, // Optionally filter by parent invoice status. |
43 | 43 | ); |
44 | 44 | |
45 | - $args = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args ); |
|
46 | - $args = wp_parse_args( $args, $default_args ); |
|
45 | + $args = apply_filters('getpaid_reports_get_invoice_report_data_args', $args); |
|
46 | + $args = wp_parse_args($args, $default_args); |
|
47 | 47 | |
48 | - extract( $args ); |
|
48 | + extract($args); |
|
49 | 49 | |
50 | - if ( empty( $data ) ) { |
|
50 | + if (empty($data)) { |
|
51 | 51 | return ''; |
52 | 52 | } |
53 | 53 | |
54 | 54 | $query = array(); |
55 | - $query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) ); |
|
55 | + $query['select'] = 'SELECT ' . implode(',', self::prepare_invoice_data($data)); |
|
56 | 56 | $query['from'] = "FROM {$wpdb->posts} AS posts"; |
57 | - $query['join'] = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) ); |
|
57 | + $query['join'] = implode(' ', self::prepare_invoice_joins($data + $where, !empty($parent_invoice_status))); |
|
58 | 58 | |
59 | 59 | $query['where'] = " |
60 | - WHERE posts.post_type IN ( '" . implode( "','", $invoice_types ) . "' ) |
|
60 | + WHERE posts.post_type IN ( '" . implode("','", $invoice_types) . "' ) |
|
61 | 61 | "; |
62 | 62 | |
63 | - if ( ! empty( $invoice_status ) ) { |
|
63 | + if (!empty($invoice_status)) { |
|
64 | 64 | $query['where'] .= " |
65 | - AND posts.post_status IN ( '" . implode( "','", $invoice_status ) . "' ) |
|
65 | + AND posts.post_status IN ( '" . implode("','", $invoice_status) . "' ) |
|
66 | 66 | "; |
67 | 67 | } |
68 | 68 | |
69 | - if ( ! empty( $parent_invoice_status ) ) { |
|
70 | - if ( ! empty( $invoice_status ) ) { |
|
71 | - $query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) "; |
|
69 | + if (!empty($parent_invoice_status)) { |
|
70 | + if (!empty($invoice_status)) { |
|
71 | + $query['where'] .= " AND ( parent.post_status IN ( '" . implode("','", $parent_invoice_status) . "' ) OR parent.ID IS NULL ) "; |
|
72 | 72 | } else { |
73 | - $query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) "; |
|
73 | + $query['where'] .= " AND parent.post_status IN ( '" . implode("','", $parent_invoice_status) . "' ) "; |
|
74 | 74 | } |
75 | 75 | } |
76 | 76 | |
77 | - if ( ! empty( $filter_range['before'] ) ) { |
|
77 | + if (!empty($filter_range['before'])) { |
|
78 | 78 | $query['where'] .= " |
79 | - AND posts.post_date < '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['before'] ) ) . "' |
|
79 | + AND posts.post_date < '" . date('Y-m-d H:i:s', strtotime($filter_range['before'])) . "' |
|
80 | 80 | "; |
81 | 81 | } |
82 | 82 | |
83 | - if ( ! empty( $filter_range['after'] ) ) { |
|
83 | + if (!empty($filter_range['after'])) { |
|
84 | 84 | $query['where'] .= " |
85 | - AND posts.post_date > '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['after'] ) ) . "' |
|
85 | + AND posts.post_date > '" . date('Y-m-d H:i:s', strtotime($filter_range['after'])) . "' |
|
86 | 86 | "; |
87 | 87 | } |
88 | 88 | |
89 | - if ( ! empty( $where ) ) { |
|
89 | + if (!empty($where)) { |
|
90 | 90 | |
91 | - foreach ( $where as $value ) { |
|
91 | + foreach ($where as $value) { |
|
92 | 92 | |
93 | - if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) { |
|
93 | + if (strtolower($value['operator']) == 'in' || strtolower($value['operator']) == 'not in') { |
|
94 | 94 | |
95 | - if ( is_array( $value['value'] ) ) { |
|
96 | - $value['value'] = implode( "','", $value['value'] ); |
|
95 | + if (is_array($value['value'])) { |
|
96 | + $value['value'] = implode("','", $value['value']); |
|
97 | 97 | } |
98 | 98 | |
99 | - if ( ! empty( $value['value'] ) ) { |
|
99 | + if (!empty($value['value'])) { |
|
100 | 100 | $where_value = "{$value['operator']} ('{$value['value']}')"; |
101 | 101 | } |
102 | 102 | } else { |
103 | 103 | $where_value = "{$value['operator']} '{$value['value']}'"; |
104 | 104 | } |
105 | 105 | |
106 | - if ( ! empty( $where_value ) ) { |
|
106 | + if (!empty($where_value)) { |
|
107 | 107 | $query['where'] .= " AND {$value['key']} {$where_value}"; |
108 | 108 | } |
109 | 109 | } |
110 | 110 | } |
111 | 111 | |
112 | - if ( $group_by ) { |
|
112 | + if ($group_by) { |
|
113 | 113 | $query['group_by'] = "GROUP BY {$group_by}"; |
114 | 114 | } |
115 | 115 | |
116 | - if ( $order_by ) { |
|
116 | + if ($order_by) { |
|
117 | 117 | $query['order_by'] = "ORDER BY {$order_by}"; |
118 | 118 | } |
119 | 119 | |
120 | - if ( $limit ) { |
|
120 | + if ($limit) { |
|
121 | 121 | $query['limit'] = "LIMIT {$limit}"; |
122 | 122 | } |
123 | 123 | |
124 | - $query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data ); |
|
125 | - $query = implode( ' ', $query ); |
|
124 | + $query = apply_filters('getpaid_reports_get_invoice_report_query', $query, $data); |
|
125 | + $query = implode(' ', $query); |
|
126 | 126 | |
127 | - return self::execute( $query_type, $query ); |
|
127 | + return self::execute($query_type, $query); |
|
128 | 128 | |
129 | 129 | } |
130 | 130 | |
@@ -135,26 +135,26 @@ discard block |
||
135 | 135 | * @param array $data |
136 | 136 | * @return array |
137 | 137 | */ |
138 | - public static function prepare_invoice_data( $data ) { |
|
138 | + public static function prepare_invoice_data($data) { |
|
139 | 139 | |
140 | 140 | $prepared = array(); |
141 | 141 | |
142 | - foreach ( $data as $raw_key => $value ) { |
|
143 | - $key = sanitize_key( $raw_key ); |
|
142 | + foreach ($data as $raw_key => $value) { |
|
143 | + $key = sanitize_key($raw_key); |
|
144 | 144 | $distinct = ''; |
145 | 145 | |
146 | - if ( isset( $value['distinct'] ) ) { |
|
146 | + if (isset($value['distinct'])) { |
|
147 | 147 | $distinct = 'DISTINCT'; |
148 | 148 | } |
149 | 149 | |
150 | - $get_key = self::get_invoice_table_key( $key, $value['type'] ); |
|
150 | + $get_key = self::get_invoice_table_key($key, $value['type']); |
|
151 | 151 | |
152 | - if ( false === $get_key ) { |
|
152 | + if (false === $get_key) { |
|
153 | 153 | // Skip to the next foreach iteration else the query will be invalid. |
154 | 154 | continue; |
155 | 155 | } |
156 | 156 | |
157 | - if ( ! empty( $value['function'] ) ) { |
|
157 | + if (!empty($value['function'])) { |
|
158 | 158 | $get = "{$value['function']}({$distinct} {$get_key})"; |
159 | 159 | } else { |
160 | 160 | $get = "{$distinct} {$get_key}"; |
@@ -175,22 +175,22 @@ discard block |
||
175 | 175 | * @param bool $with_parent |
176 | 176 | * @return array |
177 | 177 | */ |
178 | - public static function prepare_invoice_joins( $data, $with_parent ) { |
|
178 | + public static function prepare_invoice_joins($data, $with_parent) { |
|
179 | 179 | global $wpdb; |
180 | 180 | |
181 | 181 | $prepared = array(); |
182 | 182 | |
183 | - foreach ( $data as $raw_key => $value ) { |
|
184 | - $join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER'; |
|
185 | - $type = isset( $value['type'] ) ? $value['type'] : false; |
|
186 | - $key = sanitize_key( $raw_key ); |
|
183 | + foreach ($data as $raw_key => $value) { |
|
184 | + $join_type = isset($value['join_type']) ? $value['join_type'] : 'INNER'; |
|
185 | + $type = isset($value['type']) ? $value['type'] : false; |
|
186 | + $key = sanitize_key($raw_key); |
|
187 | 187 | |
188 | - switch ( $type ) { |
|
188 | + switch ($type) { |
|
189 | 189 | case 'meta': |
190 | - $prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )"; |
|
190 | + $prepared["meta_{$key}"] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )"; |
|
191 | 191 | break; |
192 | 192 | case 'parent_meta': |
193 | - $prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')"; |
|
193 | + $prepared["parent_meta_{$key}"] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')"; |
|
194 | 194 | break; |
195 | 195 | case 'invoice_data': |
196 | 196 | $prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id"; |
@@ -201,7 +201,7 @@ discard block |
||
201 | 201 | } |
202 | 202 | } |
203 | 203 | |
204 | - if ( $with_parent ) { |
|
204 | + if ($with_parent) { |
|
205 | 205 | $prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID"; |
206 | 206 | } |
207 | 207 | |
@@ -217,7 +217,7 @@ discard block |
||
217 | 217 | * @param string $table |
218 | 218 | * @return string|false |
219 | 219 | */ |
220 | - public static function get_invoice_table_key( $key, $table ) { |
|
220 | + public static function get_invoice_table_key($key, $table) { |
|
221 | 221 | |
222 | 222 | $keys = array( |
223 | 223 | 'meta' => "meta_{$key}.meta_value", |
@@ -227,7 +227,7 @@ discard block |
||
227 | 227 | 'invoice_item' => "invoice_items.{$key}", |
228 | 228 | ); |
229 | 229 | |
230 | - return isset( $keys[ $table ] ) ? $keys[ $table ] : false; |
|
230 | + return isset($keys[$table]) ? $keys[$table] : false; |
|
231 | 231 | |
232 | 232 | } |
233 | 233 | |
@@ -239,16 +239,16 @@ discard block |
||
239 | 239 | * @param string $query |
240 | 240 | * @return mixed depending on query_type |
241 | 241 | */ |
242 | - public static function execute( $query_type, $query ) { |
|
242 | + public static function execute($query_type, $query) { |
|
243 | 243 | global $wpdb; |
244 | 244 | |
245 | - $query_hash = md5( $query_type . $query ); |
|
246 | - $result = self::get_cached_query( $query_hash ); |
|
247 | - if ( $result === false ) { |
|
245 | + $query_hash = md5($query_type . $query); |
|
246 | + $result = self::get_cached_query($query_hash); |
|
247 | + if ($result === false) { |
|
248 | 248 | self::enable_big_selects(); |
249 | 249 | |
250 | - $result = $wpdb->$query_type( $query ); |
|
251 | - self::set_cached_query( $query_hash, $result ); |
|
250 | + $result = $wpdb->$query_type($query); |
|
251 | + self::set_cached_query($query_hash, $result); |
|
252 | 252 | } |
253 | 253 | |
254 | 254 | return $result; |
@@ -263,8 +263,8 @@ discard block |
||
263 | 263 | |
264 | 264 | global $wpdb; |
265 | 265 | |
266 | - if ( ! $big_selects ) { |
|
267 | - $wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' ); |
|
266 | + if (!$big_selects) { |
|
267 | + $wpdb->query('SET SESSION SQL_BIG_SELECTS=1'); |
|
268 | 268 | $big_selects = true; |
269 | 269 | } |
270 | 270 | } |
@@ -276,11 +276,11 @@ discard block |
||
276 | 276 | * |
277 | 277 | * @return mixed|false The cache contents on success, false on failure to retrieve contents. |
278 | 278 | */ |
279 | - protected static function get_cached_query( $query_hash ) { |
|
279 | + protected static function get_cached_query($query_hash) { |
|
280 | 280 | |
281 | 281 | return wp_cache_get( |
282 | 282 | $query_hash, |
283 | - strtolower( __CLASS__ ) |
|
283 | + strtolower(__CLASS__) |
|
284 | 284 | ); |
285 | 285 | |
286 | 286 | } |
@@ -291,12 +291,12 @@ discard block |
||
291 | 291 | * @param string $query_hash The query hash. |
292 | 292 | * @param mixed $data The data to cache. |
293 | 293 | */ |
294 | - protected static function set_cached_query( $query_hash, $data ) { |
|
294 | + protected static function set_cached_query($query_hash, $data) { |
|
295 | 295 | |
296 | 296 | wp_cache_set( |
297 | 297 | $query_hash, |
298 | 298 | $data, |
299 | - strtolower( __CLASS__ ), |
|
299 | + strtolower(__CLASS__), |
|
300 | 300 | 5 * MINUTE_IN_SECONDS |
301 | 301 | ); |
302 | 302 |
@@ -12,294 +12,294 @@ |
||
12 | 12 | */ |
13 | 13 | class GetPaid_Reports_Helper { |
14 | 14 | |
15 | - /** |
|
16 | - * Get report totals such as invoice totals and discount amounts. |
|
17 | - * |
|
18 | - * Data example: |
|
19 | - * |
|
20 | - * 'subtotal' => array( |
|
21 | - * 'type' => 'invoice_data', |
|
22 | - * 'function' => 'SUM', |
|
23 | - * 'name' => 'subtotal' |
|
24 | - * ) |
|
25 | - * |
|
26 | - * @param array $args |
|
27 | - * @return mixed depending on query_type |
|
28 | - */ |
|
29 | - public static function get_invoice_report_data( $args = array() ) { |
|
30 | - global $wpdb; |
|
31 | - |
|
32 | - $default_args = array( |
|
33 | - 'data' => array(), // The data to retrieve. |
|
34 | - 'where' => array(), // An array of where queries. |
|
35 | - 'query_type' => 'get_row', // wpdb query to run. |
|
36 | - 'group_by' => '', // What to group results by. |
|
37 | - 'order_by' => '', // What to order by. |
|
38 | - 'limit' => '', // Results limit. |
|
39 | - 'filter_range' => array(), // An array of before and after dates to limit results by. |
|
40 | - 'invoice_types' => array( 'wpi_invoice' ), // An array of post types to retrieve. |
|
41 | - 'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold' ), |
|
42 | - 'parent_invoice_status' => false, // Optionally filter by parent invoice status. |
|
43 | - ); |
|
44 | - |
|
45 | - $args = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args ); |
|
46 | - $args = wp_parse_args( $args, $default_args ); |
|
47 | - |
|
48 | - extract( $args ); |
|
49 | - |
|
50 | - if ( empty( $data ) ) { |
|
51 | - return ''; |
|
52 | - } |
|
53 | - |
|
54 | - $query = array(); |
|
55 | - $query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) ); |
|
56 | - $query['from'] = "FROM {$wpdb->posts} AS posts"; |
|
57 | - $query['join'] = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) ); |
|
58 | - |
|
59 | - $query['where'] = " |
|
15 | + /** |
|
16 | + * Get report totals such as invoice totals and discount amounts. |
|
17 | + * |
|
18 | + * Data example: |
|
19 | + * |
|
20 | + * 'subtotal' => array( |
|
21 | + * 'type' => 'invoice_data', |
|
22 | + * 'function' => 'SUM', |
|
23 | + * 'name' => 'subtotal' |
|
24 | + * ) |
|
25 | + * |
|
26 | + * @param array $args |
|
27 | + * @return mixed depending on query_type |
|
28 | + */ |
|
29 | + public static function get_invoice_report_data( $args = array() ) { |
|
30 | + global $wpdb; |
|
31 | + |
|
32 | + $default_args = array( |
|
33 | + 'data' => array(), // The data to retrieve. |
|
34 | + 'where' => array(), // An array of where queries. |
|
35 | + 'query_type' => 'get_row', // wpdb query to run. |
|
36 | + 'group_by' => '', // What to group results by. |
|
37 | + 'order_by' => '', // What to order by. |
|
38 | + 'limit' => '', // Results limit. |
|
39 | + 'filter_range' => array(), // An array of before and after dates to limit results by. |
|
40 | + 'invoice_types' => array( 'wpi_invoice' ), // An array of post types to retrieve. |
|
41 | + 'invoice_status' => array( 'publish', 'wpi-processing', 'wpi-onhold' ), |
|
42 | + 'parent_invoice_status' => false, // Optionally filter by parent invoice status. |
|
43 | + ); |
|
44 | + |
|
45 | + $args = apply_filters( 'getpaid_reports_get_invoice_report_data_args', $args ); |
|
46 | + $args = wp_parse_args( $args, $default_args ); |
|
47 | + |
|
48 | + extract( $args ); |
|
49 | + |
|
50 | + if ( empty( $data ) ) { |
|
51 | + return ''; |
|
52 | + } |
|
53 | + |
|
54 | + $query = array(); |
|
55 | + $query['select'] = 'SELECT ' . implode( ',', self::prepare_invoice_data( $data ) ); |
|
56 | + $query['from'] = "FROM {$wpdb->posts} AS posts"; |
|
57 | + $query['join'] = implode( ' ', self::prepare_invoice_joins( $data + $where, ! empty( $parent_invoice_status ) ) ); |
|
58 | + |
|
59 | + $query['where'] = " |
|
60 | 60 | WHERE posts.post_type IN ( '" . implode( "','", $invoice_types ) . "' ) |
61 | 61 | "; |
62 | 62 | |
63 | - if ( ! empty( $invoice_status ) ) { |
|
64 | - $query['where'] .= " |
|
63 | + if ( ! empty( $invoice_status ) ) { |
|
64 | + $query['where'] .= " |
|
65 | 65 | AND posts.post_status IN ( '" . implode( "','", $invoice_status ) . "' ) |
66 | 66 | "; |
67 | - } |
|
68 | - |
|
69 | - if ( ! empty( $parent_invoice_status ) ) { |
|
70 | - if ( ! empty( $invoice_status ) ) { |
|
71 | - $query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) "; |
|
72 | - } else { |
|
73 | - $query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) "; |
|
74 | - } |
|
75 | - } |
|
76 | - |
|
77 | - if ( ! empty( $filter_range['before'] ) ) { |
|
78 | - $query['where'] .= " |
|
67 | + } |
|
68 | + |
|
69 | + if ( ! empty( $parent_invoice_status ) ) { |
|
70 | + if ( ! empty( $invoice_status ) ) { |
|
71 | + $query['where'] .= " AND ( parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) OR parent.ID IS NULL ) "; |
|
72 | + } else { |
|
73 | + $query['where'] .= " AND parent.post_status IN ( '" . implode( "','", $parent_invoice_status ) . "' ) "; |
|
74 | + } |
|
75 | + } |
|
76 | + |
|
77 | + if ( ! empty( $filter_range['before'] ) ) { |
|
78 | + $query['where'] .= " |
|
79 | 79 | AND posts.post_date < '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['before'] ) ) . "' |
80 | 80 | "; |
81 | - } |
|
81 | + } |
|
82 | 82 | |
83 | - if ( ! empty( $filter_range['after'] ) ) { |
|
84 | - $query['where'] .= " |
|
83 | + if ( ! empty( $filter_range['after'] ) ) { |
|
84 | + $query['where'] .= " |
|
85 | 85 | AND posts.post_date > '" . date( 'Y-m-d H:i:s', strtotime( $filter_range['after'] ) ) . "' |
86 | 86 | "; |
87 | - } |
|
87 | + } |
|
88 | 88 | |
89 | - if ( ! empty( $where ) ) { |
|
89 | + if ( ! empty( $where ) ) { |
|
90 | 90 | |
91 | - foreach ( $where as $value ) { |
|
91 | + foreach ( $where as $value ) { |
|
92 | 92 | |
93 | - if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) { |
|
94 | - |
|
95 | - if ( is_array( $value['value'] ) ) { |
|
96 | - $value['value'] = implode( "','", $value['value'] ); |
|
97 | - } |
|
98 | - |
|
99 | - if ( ! empty( $value['value'] ) ) { |
|
100 | - $where_value = "{$value['operator']} ('{$value['value']}')"; |
|
101 | - } |
|
102 | - } else { |
|
103 | - $where_value = "{$value['operator']} '{$value['value']}'"; |
|
104 | - } |
|
105 | - |
|
106 | - if ( ! empty( $where_value ) ) { |
|
107 | - $query['where'] .= " AND {$value['key']} {$where_value}"; |
|
108 | - } |
|
109 | - } |
|
110 | - } |
|
111 | - |
|
112 | - if ( $group_by ) { |
|
113 | - $query['group_by'] = "GROUP BY {$group_by}"; |
|
114 | - } |
|
115 | - |
|
116 | - if ( $order_by ) { |
|
117 | - $query['order_by'] = "ORDER BY {$order_by}"; |
|
118 | - } |
|
119 | - |
|
120 | - if ( $limit ) { |
|
121 | - $query['limit'] = "LIMIT {$limit}"; |
|
122 | - } |
|
123 | - |
|
124 | - $query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data ); |
|
125 | - $query = implode( ' ', $query ); |
|
126 | - |
|
127 | - return self::execute( $query_type, $query ); |
|
128 | - |
|
129 | - } |
|
130 | - |
|
131 | - /** |
|
132 | - * Prepares the data to select. |
|
133 | - * |
|
134 | - * |
|
135 | - * @param array $data |
|
136 | - * @return array |
|
137 | - */ |
|
138 | - public static function prepare_invoice_data( $data ) { |
|
139 | - |
|
140 | - $prepared = array(); |
|
141 | - |
|
142 | - foreach ( $data as $raw_key => $value ) { |
|
143 | - $key = sanitize_key( $raw_key ); |
|
144 | - $distinct = ''; |
|
145 | - |
|
146 | - if ( isset( $value['distinct'] ) ) { |
|
147 | - $distinct = 'DISTINCT'; |
|
148 | - } |
|
149 | - |
|
150 | - $get_key = self::get_invoice_table_key( $key, $value['type'] ); |
|
151 | - |
|
152 | - if ( false === $get_key ) { |
|
153 | - // Skip to the next foreach iteration else the query will be invalid. |
|
154 | - continue; |
|
155 | - } |
|
156 | - |
|
157 | - if ( ! empty( $value['function'] ) ) { |
|
158 | - $get = "{$value['function']}({$distinct} {$get_key})"; |
|
159 | - } else { |
|
160 | - $get = "{$distinct} {$get_key}"; |
|
161 | - } |
|
162 | - |
|
163 | - $prepared[] = "{$get} as {$value['name']}"; |
|
164 | - } |
|
165 | - |
|
166 | - return $prepared; |
|
167 | - |
|
168 | - } |
|
169 | - |
|
170 | - /** |
|
171 | - * Prepares the joins to use. |
|
172 | - * |
|
173 | - * |
|
174 | - * @param array $data |
|
175 | - * @param bool $with_parent |
|
176 | - * @return array |
|
177 | - */ |
|
178 | - public static function prepare_invoice_joins( $data, $with_parent ) { |
|
179 | - global $wpdb; |
|
180 | - |
|
181 | - $prepared = array(); |
|
182 | - |
|
183 | - foreach ( $data as $raw_key => $value ) { |
|
184 | - $join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER'; |
|
185 | - $type = isset( $value['type'] ) ? $value['type'] : false; |
|
186 | - $key = sanitize_key( $raw_key ); |
|
187 | - |
|
188 | - switch ( $type ) { |
|
189 | - case 'meta': |
|
190 | - $prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )"; |
|
191 | - break; |
|
192 | - case 'parent_meta': |
|
193 | - $prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')"; |
|
194 | - break; |
|
195 | - case 'invoice_data': |
|
196 | - $prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id"; |
|
197 | - break; |
|
198 | - case 'invoice_item': |
|
199 | - $prepared['invoice_items'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoice_items AS invoice_items ON posts.ID = invoice_items.post_id"; |
|
200 | - break; |
|
201 | - } |
|
202 | - } |
|
203 | - |
|
204 | - if ( $with_parent ) { |
|
205 | - $prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID"; |
|
206 | - } |
|
207 | - |
|
208 | - return $prepared; |
|
209 | - |
|
210 | - } |
|
211 | - |
|
212 | - /** |
|
213 | - * Retrieves the appropriate table key to use. |
|
214 | - * |
|
215 | - * |
|
216 | - * @param string $key |
|
217 | - * @param string $table |
|
218 | - * @return string|false |
|
219 | - */ |
|
220 | - public static function get_invoice_table_key( $key, $table ) { |
|
221 | - |
|
222 | - $keys = array( |
|
223 | - 'meta' => "meta_{$key}.meta_value", |
|
224 | - 'parent_meta' => "parent_meta_{$key}.meta_value", |
|
225 | - 'post_data' => "posts.{$key}", |
|
226 | - 'invoice_data' => "invoices.{$key}", |
|
227 | - 'invoice_item' => "invoice_items.{$key}", |
|
228 | - ); |
|
229 | - |
|
230 | - return isset( $keys[ $table ] ) ? $keys[ $table ] : false; |
|
231 | - |
|
232 | - } |
|
233 | - |
|
234 | - /** |
|
235 | - * Executes a query and caches the result for a minute. |
|
236 | - * |
|
237 | - * |
|
238 | - * @param string $query_type |
|
239 | - * @param string $query |
|
240 | - * @return mixed depending on query_type |
|
241 | - */ |
|
242 | - public static function execute( $query_type, $query ) { |
|
243 | - global $wpdb; |
|
244 | - |
|
245 | - $query_hash = md5( $query_type . $query ); |
|
246 | - $result = self::get_cached_query( $query_hash ); |
|
247 | - if ( $result === false ) { |
|
248 | - self::enable_big_selects(); |
|
249 | - |
|
250 | - $result = $wpdb->$query_type( $query ); |
|
251 | - self::set_cached_query( $query_hash, $result ); |
|
252 | - } |
|
253 | - |
|
254 | - return $result; |
|
255 | - |
|
256 | - } |
|
257 | - |
|
258 | - /** |
|
259 | - * Enables big mysql selects for reports, just once for this session. |
|
260 | - */ |
|
261 | - protected static function enable_big_selects() { |
|
262 | - static $big_selects = false; |
|
263 | - |
|
264 | - global $wpdb; |
|
265 | - |
|
266 | - if ( ! $big_selects ) { |
|
267 | - $wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' ); |
|
268 | - $big_selects = true; |
|
269 | - } |
|
270 | - } |
|
271 | - |
|
272 | - /** |
|
273 | - * Get the cached query result or null if it's not in the cache. |
|
274 | - * |
|
275 | - * @param string $query_hash The query hash. |
|
276 | - * |
|
277 | - * @return mixed|false The cache contents on success, false on failure to retrieve contents. |
|
278 | - */ |
|
279 | - protected static function get_cached_query( $query_hash ) { |
|
280 | - |
|
281 | - return wp_cache_get( |
|
282 | - $query_hash, |
|
283 | - strtolower( __CLASS__ ) |
|
284 | - ); |
|
285 | - |
|
286 | - } |
|
287 | - |
|
288 | - /** |
|
289 | - * Set the cached query result. |
|
290 | - * |
|
291 | - * @param string $query_hash The query hash. |
|
292 | - * @param mixed $data The data to cache. |
|
293 | - */ |
|
294 | - protected static function set_cached_query( $query_hash, $data ) { |
|
295 | - |
|
296 | - wp_cache_set( |
|
297 | - $query_hash, |
|
298 | - $data, |
|
299 | - strtolower( __CLASS__ ), |
|
300 | - 5 * MINUTE_IN_SECONDS |
|
301 | - ); |
|
302 | - |
|
303 | - } |
|
93 | + if ( strtolower( $value['operator'] ) == 'in' || strtolower( $value['operator'] ) == 'not in' ) { |
|
94 | + |
|
95 | + if ( is_array( $value['value'] ) ) { |
|
96 | + $value['value'] = implode( "','", $value['value'] ); |
|
97 | + } |
|
98 | + |
|
99 | + if ( ! empty( $value['value'] ) ) { |
|
100 | + $where_value = "{$value['operator']} ('{$value['value']}')"; |
|
101 | + } |
|
102 | + } else { |
|
103 | + $where_value = "{$value['operator']} '{$value['value']}'"; |
|
104 | + } |
|
105 | + |
|
106 | + if ( ! empty( $where_value ) ) { |
|
107 | + $query['where'] .= " AND {$value['key']} {$where_value}"; |
|
108 | + } |
|
109 | + } |
|
110 | + } |
|
111 | + |
|
112 | + if ( $group_by ) { |
|
113 | + $query['group_by'] = "GROUP BY {$group_by}"; |
|
114 | + } |
|
115 | + |
|
116 | + if ( $order_by ) { |
|
117 | + $query['order_by'] = "ORDER BY {$order_by}"; |
|
118 | + } |
|
119 | + |
|
120 | + if ( $limit ) { |
|
121 | + $query['limit'] = "LIMIT {$limit}"; |
|
122 | + } |
|
123 | + |
|
124 | + $query = apply_filters( 'getpaid_reports_get_invoice_report_query', $query, $data ); |
|
125 | + $query = implode( ' ', $query ); |
|
126 | + |
|
127 | + return self::execute( $query_type, $query ); |
|
128 | + |
|
129 | + } |
|
130 | + |
|
131 | + /** |
|
132 | + * Prepares the data to select. |
|
133 | + * |
|
134 | + * |
|
135 | + * @param array $data |
|
136 | + * @return array |
|
137 | + */ |
|
138 | + public static function prepare_invoice_data( $data ) { |
|
139 | + |
|
140 | + $prepared = array(); |
|
141 | + |
|
142 | + foreach ( $data as $raw_key => $value ) { |
|
143 | + $key = sanitize_key( $raw_key ); |
|
144 | + $distinct = ''; |
|
145 | + |
|
146 | + if ( isset( $value['distinct'] ) ) { |
|
147 | + $distinct = 'DISTINCT'; |
|
148 | + } |
|
149 | + |
|
150 | + $get_key = self::get_invoice_table_key( $key, $value['type'] ); |
|
151 | + |
|
152 | + if ( false === $get_key ) { |
|
153 | + // Skip to the next foreach iteration else the query will be invalid. |
|
154 | + continue; |
|
155 | + } |
|
156 | + |
|
157 | + if ( ! empty( $value['function'] ) ) { |
|
158 | + $get = "{$value['function']}({$distinct} {$get_key})"; |
|
159 | + } else { |
|
160 | + $get = "{$distinct} {$get_key}"; |
|
161 | + } |
|
162 | + |
|
163 | + $prepared[] = "{$get} as {$value['name']}"; |
|
164 | + } |
|
165 | + |
|
166 | + return $prepared; |
|
167 | + |
|
168 | + } |
|
169 | + |
|
170 | + /** |
|
171 | + * Prepares the joins to use. |
|
172 | + * |
|
173 | + * |
|
174 | + * @param array $data |
|
175 | + * @param bool $with_parent |
|
176 | + * @return array |
|
177 | + */ |
|
178 | + public static function prepare_invoice_joins( $data, $with_parent ) { |
|
179 | + global $wpdb; |
|
180 | + |
|
181 | + $prepared = array(); |
|
182 | + |
|
183 | + foreach ( $data as $raw_key => $value ) { |
|
184 | + $join_type = isset( $value['join_type'] ) ? $value['join_type'] : 'INNER'; |
|
185 | + $type = isset( $value['type'] ) ? $value['type'] : false; |
|
186 | + $key = sanitize_key( $raw_key ); |
|
187 | + |
|
188 | + switch ( $type ) { |
|
189 | + case 'meta': |
|
190 | + $prepared[ "meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS meta_{$key} ON ( posts.ID = meta_{$key}.post_id AND meta_{$key}.meta_key = '{$raw_key}' )"; |
|
191 | + break; |
|
192 | + case 'parent_meta': |
|
193 | + $prepared[ "parent_meta_{$key}" ] = "{$join_type} JOIN {$wpdb->postmeta} AS parent_meta_{$key} ON (posts.post_parent = parent_meta_{$key}.post_id) AND (parent_meta_{$key}.meta_key = '{$raw_key}')"; |
|
194 | + break; |
|
195 | + case 'invoice_data': |
|
196 | + $prepared['invoices'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoices AS invoices ON posts.ID = invoices.post_id"; |
|
197 | + break; |
|
198 | + case 'invoice_item': |
|
199 | + $prepared['invoice_items'] = "{$join_type} JOIN {$wpdb->prefix}getpaid_invoice_items AS invoice_items ON posts.ID = invoice_items.post_id"; |
|
200 | + break; |
|
201 | + } |
|
202 | + } |
|
203 | + |
|
204 | + if ( $with_parent ) { |
|
205 | + $prepared['parent'] = "LEFT JOIN {$wpdb->posts} AS parent ON posts.post_parent = parent.ID"; |
|
206 | + } |
|
207 | + |
|
208 | + return $prepared; |
|
209 | + |
|
210 | + } |
|
211 | + |
|
212 | + /** |
|
213 | + * Retrieves the appropriate table key to use. |
|
214 | + * |
|
215 | + * |
|
216 | + * @param string $key |
|
217 | + * @param string $table |
|
218 | + * @return string|false |
|
219 | + */ |
|
220 | + public static function get_invoice_table_key( $key, $table ) { |
|
221 | + |
|
222 | + $keys = array( |
|
223 | + 'meta' => "meta_{$key}.meta_value", |
|
224 | + 'parent_meta' => "parent_meta_{$key}.meta_value", |
|
225 | + 'post_data' => "posts.{$key}", |
|
226 | + 'invoice_data' => "invoices.{$key}", |
|
227 | + 'invoice_item' => "invoice_items.{$key}", |
|
228 | + ); |
|
229 | + |
|
230 | + return isset( $keys[ $table ] ) ? $keys[ $table ] : false; |
|
231 | + |
|
232 | + } |
|
233 | + |
|
234 | + /** |
|
235 | + * Executes a query and caches the result for a minute. |
|
236 | + * |
|
237 | + * |
|
238 | + * @param string $query_type |
|
239 | + * @param string $query |
|
240 | + * @return mixed depending on query_type |
|
241 | + */ |
|
242 | + public static function execute( $query_type, $query ) { |
|
243 | + global $wpdb; |
|
244 | + |
|
245 | + $query_hash = md5( $query_type . $query ); |
|
246 | + $result = self::get_cached_query( $query_hash ); |
|
247 | + if ( $result === false ) { |
|
248 | + self::enable_big_selects(); |
|
249 | + |
|
250 | + $result = $wpdb->$query_type( $query ); |
|
251 | + self::set_cached_query( $query_hash, $result ); |
|
252 | + } |
|
253 | + |
|
254 | + return $result; |
|
255 | + |
|
256 | + } |
|
257 | + |
|
258 | + /** |
|
259 | + * Enables big mysql selects for reports, just once for this session. |
|
260 | + */ |
|
261 | + protected static function enable_big_selects() { |
|
262 | + static $big_selects = false; |
|
263 | + |
|
264 | + global $wpdb; |
|
265 | + |
|
266 | + if ( ! $big_selects ) { |
|
267 | + $wpdb->query( 'SET SESSION SQL_BIG_SELECTS=1' ); |
|
268 | + $big_selects = true; |
|
269 | + } |
|
270 | + } |
|
271 | + |
|
272 | + /** |
|
273 | + * Get the cached query result or null if it's not in the cache. |
|
274 | + * |
|
275 | + * @param string $query_hash The query hash. |
|
276 | + * |
|
277 | + * @return mixed|false The cache contents on success, false on failure to retrieve contents. |
|
278 | + */ |
|
279 | + protected static function get_cached_query( $query_hash ) { |
|
280 | + |
|
281 | + return wp_cache_get( |
|
282 | + $query_hash, |
|
283 | + strtolower( __CLASS__ ) |
|
284 | + ); |
|
285 | + |
|
286 | + } |
|
287 | + |
|
288 | + /** |
|
289 | + * Set the cached query result. |
|
290 | + * |
|
291 | + * @param string $query_hash The query hash. |
|
292 | + * @param mixed $data The data to cache. |
|
293 | + */ |
|
294 | + protected static function set_cached_query( $query_hash, $data ) { |
|
295 | + |
|
296 | + wp_cache_set( |
|
297 | + $query_hash, |
|
298 | + $data, |
|
299 | + strtolower( __CLASS__ ), |
|
300 | + 5 * MINUTE_IN_SECONDS |
|
301 | + ); |
|
302 | + |
|
303 | + } |
|
304 | 304 | |
305 | 305 | } |
@@ -18,50 +18,50 @@ |
||
18 | 18 | */ |
19 | 19 | class GetPaid_REST_Report_Top_Earners_Controller extends GetPaid_REST_Report_Top_Sellers_Controller { |
20 | 20 | |
21 | - /** |
|
22 | - * Route base. |
|
23 | - * |
|
24 | - * @var string |
|
25 | - */ |
|
26 | - protected $rest_base = 'reports/top_earners'; |
|
21 | + /** |
|
22 | + * Route base. |
|
23 | + * |
|
24 | + * @var string |
|
25 | + */ |
|
26 | + protected $rest_base = 'reports/top_earners'; |
|
27 | 27 | |
28 | - /** |
|
29 | - * Get all data needed for this report and store in the class. |
|
30 | - */ |
|
31 | - protected function query_report_data() { |
|
28 | + /** |
|
29 | + * Get all data needed for this report and store in the class. |
|
30 | + */ |
|
31 | + protected function query_report_data() { |
|
32 | 32 | |
33 | - $this->report_data = GetPaid_Reports_Helper::get_invoice_report_data( |
|
34 | - array( |
|
35 | - 'data' => array( |
|
36 | - 'quantity' => array( |
|
37 | - 'type' => 'invoice_item', |
|
38 | - 'function' => 'SUM', |
|
39 | - 'name' => 'invoice_item_qty', |
|
40 | - ), |
|
41 | - 'item_id' => array( |
|
42 | - 'type' => 'invoice_item', |
|
43 | - 'function' => '', |
|
44 | - 'name' => 'invoice_item_id', |
|
45 | - ), |
|
46 | - 'item_name' => array( |
|
47 | - 'type' => 'invoice_item', |
|
48 | - 'function' => '', |
|
49 | - 'name' => 'invoice_item_name', |
|
50 | - ), |
|
51 | - 'price' => array( |
|
52 | - 'type' => 'invoice_item', |
|
53 | - 'function' => 'SUM', |
|
54 | - 'name' => 'invoice_item_price', |
|
55 | - ), |
|
56 | - ), |
|
57 | - 'group_by' => 'invoice_item_id', |
|
58 | - 'order_by' => 'invoice_item_price DESC', |
|
59 | - 'query_type' => 'get_results', |
|
60 | - 'limit' => 10, |
|
61 | - 'filter_range' => $this->report_range, |
|
62 | - ) |
|
63 | - ); |
|
33 | + $this->report_data = GetPaid_Reports_Helper::get_invoice_report_data( |
|
34 | + array( |
|
35 | + 'data' => array( |
|
36 | + 'quantity' => array( |
|
37 | + 'type' => 'invoice_item', |
|
38 | + 'function' => 'SUM', |
|
39 | + 'name' => 'invoice_item_qty', |
|
40 | + ), |
|
41 | + 'item_id' => array( |
|
42 | + 'type' => 'invoice_item', |
|
43 | + 'function' => '', |
|
44 | + 'name' => 'invoice_item_id', |
|
45 | + ), |
|
46 | + 'item_name' => array( |
|
47 | + 'type' => 'invoice_item', |
|
48 | + 'function' => '', |
|
49 | + 'name' => 'invoice_item_name', |
|
50 | + ), |
|
51 | + 'price' => array( |
|
52 | + 'type' => 'invoice_item', |
|
53 | + 'function' => 'SUM', |
|
54 | + 'name' => 'invoice_item_price', |
|
55 | + ), |
|
56 | + ), |
|
57 | + 'group_by' => 'invoice_item_id', |
|
58 | + 'order_by' => 'invoice_item_price DESC', |
|
59 | + 'query_type' => 'get_results', |
|
60 | + 'limit' => 10, |
|
61 | + 'filter_range' => $this->report_range, |
|
62 | + ) |
|
63 | + ); |
|
64 | 64 | |
65 | - } |
|
65 | + } |
|
66 | 66 | |
67 | 67 | } |
@@ -9,7 +9,7 @@ |
||
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 earners controller class. |
@@ -18,179 +18,179 @@ |
||
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 = absint( $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' => 'integer', |
|
176 | - 'context' => array( 'view' ), |
|
177 | - 'readonly' => true, |
|
178 | - ), |
|
179 | - 'earnings' => array( |
|
180 | - 'description' => __( 'Total earnings for the item.', 'invoicing' ), |
|
181 | - 'type' => 'double', |
|
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 = absint( $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' => 'integer', |
|
176 | + 'context' => array( 'view' ), |
|
177 | + 'readonly' => true, |
|
178 | + ), |
|
179 | + 'earnings' => array( |
|
180 | + 'description' => __( 'Total earnings for the item.', 'invoicing' ), |
|
181 | + 'type' => 'double', |
|
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 | } |
@@ -9,7 +9,7 @@ discard block |
||
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 |
||
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 = absint( $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 = absint($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 |
||
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 |
||
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' => 'integer', |
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' => 'double', |
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 | } |
@@ -6,7 +6,7 @@ discard block |
||
6 | 6 | * @since 1.0.19 |
7 | 7 | */ |
8 | 8 | |
9 | -defined( 'ABSPATH' ) || exit; |
|
9 | +defined('ABSPATH') || exit; |
|
10 | 10 | |
11 | 11 | /** |
12 | 12 | * The main API class |
@@ -96,7 +96,7 @@ discard block |
||
96 | 96 | $this->invoice_counts = new GetPaid_REST_Report_Invoice_Counts_Controller(); |
97 | 97 | |
98 | 98 | // Fires after loading the rest api. |
99 | - do_action( 'getpaid_rest_api_loaded', $this ); |
|
99 | + do_action('getpaid_rest_api_loaded', $this); |
|
100 | 100 | } |
101 | 101 | |
102 | 102 | } |
@@ -18,102 +18,102 @@ |
||
18 | 18 | */ |
19 | 19 | class GetPaid_REST_Report_Invoice_Counts_Controller extends GetPaid_REST_Reports_Controller { |
20 | 20 | |
21 | - /** |
|
22 | - * Route base. |
|
23 | - * |
|
24 | - * @var string |
|
25 | - */ |
|
26 | - protected $rest_base = 'reports/invoices/counts'; |
|
27 | - |
|
28 | - /** |
|
29 | - * Prepare a report object for serialization. |
|
30 | - * |
|
31 | - * @param stdClass $report Report data. |
|
32 | - * @param WP_REST_Request $request Request object. |
|
33 | - * @return WP_REST_Response $response Response data. |
|
34 | - */ |
|
35 | - public function prepare_item_for_response( $report, $request ) { |
|
36 | - |
|
37 | - $data = (array) $report; |
|
38 | - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
39 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
40 | - $data = $this->filter_response_by_context( $data, $context ); |
|
41 | - |
|
42 | - // Wrap the data in a response object. |
|
43 | - $response = rest_ensure_response( $data ); |
|
44 | - |
|
45 | - $response->add_links( |
|
46 | - array( |
|
47 | - 'about' => array( |
|
48 | - 'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ), |
|
49 | - ), |
|
50 | - ) |
|
51 | - ); |
|
52 | - |
|
53 | - return apply_filters( 'getpaid_rest_prepare_report_invoices_count', $response, $report, $request ); |
|
54 | - } |
|
55 | - |
|
56 | - /** |
|
57 | - * Get reports list. |
|
58 | - * |
|
59 | - * @since 2.0.0 |
|
60 | - * @return array |
|
61 | - */ |
|
62 | - protected function get_reports() { |
|
63 | - |
|
64 | - $counts = wp_count_posts( 'wpi_invoice' ); |
|
65 | - $data = array(); |
|
66 | - |
|
67 | - foreach ( wpinv_get_invoice_statuses() as $slug => $name ) { |
|
68 | - |
|
69 | - if ( ! isset( $counts->$slug ) ) { |
|
70 | - continue; |
|
71 | - } |
|
72 | - |
|
73 | - $data[] = array( |
|
74 | - 'slug' => $slug, |
|
75 | - 'name' => $name, |
|
76 | - 'count' => (int) $counts->$slug, |
|
77 | - ); |
|
78 | - |
|
79 | - } |
|
80 | - |
|
81 | - return $data; |
|
82 | - |
|
83 | - } |
|
84 | - |
|
85 | - /** |
|
86 | - * Get the Report's schema, conforming to JSON Schema. |
|
87 | - * |
|
88 | - * @return array |
|
89 | - */ |
|
90 | - public function get_item_schema() { |
|
91 | - $schema = array( |
|
92 | - '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
93 | - 'title' => 'report_invoice_counts', |
|
94 | - 'type' => 'object', |
|
95 | - 'properties' => array( |
|
96 | - 'slug' => array( |
|
97 | - 'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ), |
|
98 | - 'type' => 'string', |
|
99 | - 'context' => array( 'view' ), |
|
100 | - 'readonly' => true, |
|
101 | - ), |
|
102 | - 'name' => array( |
|
103 | - 'description' => __( 'Invoice status name.', 'invoicing' ), |
|
104 | - 'type' => 'string', |
|
105 | - 'context' => array( 'view' ), |
|
106 | - 'readonly' => true, |
|
107 | - ), |
|
108 | - 'count' => array( |
|
109 | - 'description' => __( 'Number of invoices.', 'invoicing' ), |
|
110 | - 'type' => 'string', |
|
111 | - 'context' => array( 'view' ), |
|
112 | - 'readonly' => true, |
|
113 | - ), |
|
114 | - ), |
|
115 | - ); |
|
116 | - |
|
117 | - return $this->add_additional_fields_schema( $schema ); |
|
118 | - } |
|
21 | + /** |
|
22 | + * Route base. |
|
23 | + * |
|
24 | + * @var string |
|
25 | + */ |
|
26 | + protected $rest_base = 'reports/invoices/counts'; |
|
27 | + |
|
28 | + /** |
|
29 | + * Prepare a report object for serialization. |
|
30 | + * |
|
31 | + * @param stdClass $report Report data. |
|
32 | + * @param WP_REST_Request $request Request object. |
|
33 | + * @return WP_REST_Response $response Response data. |
|
34 | + */ |
|
35 | + public function prepare_item_for_response( $report, $request ) { |
|
36 | + |
|
37 | + $data = (array) $report; |
|
38 | + $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
39 | + $data = $this->add_additional_fields_to_object( $data, $request ); |
|
40 | + $data = $this->filter_response_by_context( $data, $context ); |
|
41 | + |
|
42 | + // Wrap the data in a response object. |
|
43 | + $response = rest_ensure_response( $data ); |
|
44 | + |
|
45 | + $response->add_links( |
|
46 | + array( |
|
47 | + 'about' => array( |
|
48 | + 'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ), |
|
49 | + ), |
|
50 | + ) |
|
51 | + ); |
|
52 | + |
|
53 | + return apply_filters( 'getpaid_rest_prepare_report_invoices_count', $response, $report, $request ); |
|
54 | + } |
|
55 | + |
|
56 | + /** |
|
57 | + * Get reports list. |
|
58 | + * |
|
59 | + * @since 2.0.0 |
|
60 | + * @return array |
|
61 | + */ |
|
62 | + protected function get_reports() { |
|
63 | + |
|
64 | + $counts = wp_count_posts( 'wpi_invoice' ); |
|
65 | + $data = array(); |
|
66 | + |
|
67 | + foreach ( wpinv_get_invoice_statuses() as $slug => $name ) { |
|
68 | + |
|
69 | + if ( ! isset( $counts->$slug ) ) { |
|
70 | + continue; |
|
71 | + } |
|
72 | + |
|
73 | + $data[] = array( |
|
74 | + 'slug' => $slug, |
|
75 | + 'name' => $name, |
|
76 | + 'count' => (int) $counts->$slug, |
|
77 | + ); |
|
78 | + |
|
79 | + } |
|
80 | + |
|
81 | + return $data; |
|
82 | + |
|
83 | + } |
|
84 | + |
|
85 | + /** |
|
86 | + * Get the Report's schema, conforming to JSON Schema. |
|
87 | + * |
|
88 | + * @return array |
|
89 | + */ |
|
90 | + public function get_item_schema() { |
|
91 | + $schema = array( |
|
92 | + '$schema' => 'http://json-schema.org/draft-04/schema#', |
|
93 | + 'title' => 'report_invoice_counts', |
|
94 | + 'type' => 'object', |
|
95 | + 'properties' => array( |
|
96 | + 'slug' => array( |
|
97 | + 'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ), |
|
98 | + 'type' => 'string', |
|
99 | + 'context' => array( 'view' ), |
|
100 | + 'readonly' => true, |
|
101 | + ), |
|
102 | + 'name' => array( |
|
103 | + 'description' => __( 'Invoice status name.', 'invoicing' ), |
|
104 | + 'type' => 'string', |
|
105 | + 'context' => array( 'view' ), |
|
106 | + 'readonly' => true, |
|
107 | + ), |
|
108 | + 'count' => array( |
|
109 | + 'description' => __( 'Number of invoices.', 'invoicing' ), |
|
110 | + 'type' => 'string', |
|
111 | + 'context' => array( 'view' ), |
|
112 | + 'readonly' => true, |
|
113 | + ), |
|
114 | + ), |
|
115 | + ); |
|
116 | + |
|
117 | + return $this->add_additional_fields_schema( $schema ); |
|
118 | + } |
|
119 | 119 | } |
@@ -9,7 +9,7 @@ discard block |
||
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 invoice counts controller class. |
@@ -32,25 +32,25 @@ discard block |
||
32 | 32 | * @param WP_REST_Request $request Request object. |
33 | 33 | * @return WP_REST_Response $response Response data. |
34 | 34 | */ |
35 | - public function prepare_item_for_response( $report, $request ) { |
|
35 | + public function prepare_item_for_response($report, $request) { |
|
36 | 36 | |
37 | 37 | $data = (array) $report; |
38 | - $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; |
|
39 | - $data = $this->add_additional_fields_to_object( $data, $request ); |
|
40 | - $data = $this->filter_response_by_context( $data, $context ); |
|
38 | + $context = !empty($request['context']) ? $request['context'] : 'view'; |
|
39 | + $data = $this->add_additional_fields_to_object($data, $request); |
|
40 | + $data = $this->filter_response_by_context($data, $context); |
|
41 | 41 | |
42 | 42 | // Wrap the data in a response object. |
43 | - $response = rest_ensure_response( $data ); |
|
43 | + $response = rest_ensure_response($data); |
|
44 | 44 | |
45 | 45 | $response->add_links( |
46 | 46 | array( |
47 | 47 | 'about' => array( |
48 | - 'href' => rest_url( sprintf( '%s/reports', $this->namespace ) ), |
|
48 | + 'href' => rest_url(sprintf('%s/reports', $this->namespace)), |
|
49 | 49 | ), |
50 | 50 | ) |
51 | 51 | ); |
52 | 52 | |
53 | - return apply_filters( 'getpaid_rest_prepare_report_invoices_count', $response, $report, $request ); |
|
53 | + return apply_filters('getpaid_rest_prepare_report_invoices_count', $response, $report, $request); |
|
54 | 54 | } |
55 | 55 | |
56 | 56 | /** |
@@ -61,12 +61,12 @@ discard block |
||
61 | 61 | */ |
62 | 62 | protected function get_reports() { |
63 | 63 | |
64 | - $counts = wp_count_posts( 'wpi_invoice' ); |
|
64 | + $counts = wp_count_posts('wpi_invoice'); |
|
65 | 65 | $data = array(); |
66 | 66 | |
67 | - foreach ( wpinv_get_invoice_statuses() as $slug => $name ) { |
|
67 | + foreach (wpinv_get_invoice_statuses() as $slug => $name) { |
|
68 | 68 | |
69 | - if ( ! isset( $counts->$slug ) ) { |
|
69 | + if (!isset($counts->$slug)) { |
|
70 | 70 | continue; |
71 | 71 | } |
72 | 72 | |
@@ -94,26 +94,26 @@ discard block |
||
94 | 94 | 'type' => 'object', |
95 | 95 | 'properties' => array( |
96 | 96 | 'slug' => array( |
97 | - 'description' => __( 'An alphanumeric identifier for the resource.', 'invoicing' ), |
|
97 | + 'description' => __('An alphanumeric identifier for the resource.', 'invoicing'), |
|
98 | 98 | 'type' => 'string', |
99 | - 'context' => array( 'view' ), |
|
99 | + 'context' => array('view'), |
|
100 | 100 | 'readonly' => true, |
101 | 101 | ), |
102 | 102 | 'name' => array( |
103 | - 'description' => __( 'Invoice status name.', 'invoicing' ), |
|
103 | + 'description' => __('Invoice status name.', 'invoicing'), |
|
104 | 104 | 'type' => 'string', |
105 | - 'context' => array( 'view' ), |
|
105 | + 'context' => array('view'), |
|
106 | 106 | 'readonly' => true, |
107 | 107 | ), |
108 | 108 | 'count' => array( |
109 | - 'description' => __( 'Number of invoices.', 'invoicing' ), |
|
109 | + 'description' => __('Number of invoices.', 'invoicing'), |
|
110 | 110 | 'type' => 'string', |
111 | - 'context' => array( 'view' ), |
|
111 | + 'context' => array('view'), |
|
112 | 112 | 'readonly' => true, |
113 | 113 | ), |
114 | 114 | ), |
115 | 115 | ); |
116 | 116 | |
117 | - return $this->add_additional_fields_schema( $schema ); |
|
117 | + return $this->add_additional_fields_schema($schema); |
|
118 | 118 | } |
119 | 119 | } |
@@ -7,40 +7,40 @@ |
||
7 | 7 | * Bail if we are not in WP. |
8 | 8 | */ |
9 | 9 | if ( ! defined( 'ABSPATH' ) ) { |
10 | - exit; |
|
10 | + exit; |
|
11 | 11 | } |
12 | 12 | |
13 | 13 | /** |
14 | 14 | * Set the version only if its the current newest while loading. |
15 | 15 | */ |
16 | 16 | add_action('after_setup_theme', function () { |
17 | - global $ayecode_ui_version,$ayecode_ui_file_key; |
|
18 | - $this_version = "0.1.38"; |
|
19 | - if(version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | - $ayecode_ui_version = $this_version ; |
|
21 | - $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
22 | - } |
|
17 | + global $ayecode_ui_version,$ayecode_ui_file_key; |
|
18 | + $this_version = "0.1.38"; |
|
19 | + if(version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | + $ayecode_ui_version = $this_version ; |
|
21 | + $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
22 | + } |
|
23 | 23 | },0); |
24 | 24 | |
25 | 25 | /** |
26 | 26 | * Load this version of WP Bootstrap Settings only if the file hash is the current one. |
27 | 27 | */ |
28 | 28 | add_action('after_setup_theme', function () { |
29 | - global $ayecode_ui_file_key; |
|
30 | - if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | - include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | - include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
33 | - } |
|
29 | + global $ayecode_ui_file_key; |
|
30 | + if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | + include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | + include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
33 | + } |
|
34 | 34 | },1); |
35 | 35 | |
36 | 36 | /** |
37 | 37 | * Add the function that calls the class. |
38 | 38 | */ |
39 | 39 | if(!function_exists('aui')){ |
40 | - function aui(){ |
|
41 | - if(!class_exists("AUI",false)){ |
|
42 | - return false; |
|
43 | - } |
|
44 | - return AUI::instance(); |
|
45 | - } |
|
40 | + function aui(){ |
|
41 | + if(!class_exists("AUI",false)){ |
|
42 | + return false; |
|
43 | + } |
|
44 | + return AUI::instance(); |
|
45 | + } |
|
46 | 46 | } |
47 | 47 | \ No newline at end of file |
@@ -6,39 +6,39 @@ |
||
6 | 6 | /** |
7 | 7 | * Bail if we are not in WP. |
8 | 8 | */ |
9 | -if ( ! defined( 'ABSPATH' ) ) { |
|
9 | +if (!defined('ABSPATH')) { |
|
10 | 10 | exit; |
11 | 11 | } |
12 | 12 | |
13 | 13 | /** |
14 | 14 | * Set the version only if its the current newest while loading. |
15 | 15 | */ |
16 | -add_action('after_setup_theme', function () { |
|
17 | - global $ayecode_ui_version,$ayecode_ui_file_key; |
|
16 | +add_action('after_setup_theme', function() { |
|
17 | + global $ayecode_ui_version, $ayecode_ui_file_key; |
|
18 | 18 | $this_version = "0.1.38"; |
19 | - if(version_compare($this_version , $ayecode_ui_version, '>')){ |
|
20 | - $ayecode_ui_version = $this_version ; |
|
21 | - $ayecode_ui_file_key = wp_hash( __FILE__ ); |
|
19 | + if (version_compare($this_version, $ayecode_ui_version, '>')) { |
|
20 | + $ayecode_ui_version = $this_version; |
|
21 | + $ayecode_ui_file_key = wp_hash(__FILE__); |
|
22 | 22 | } |
23 | 23 | },0); |
24 | 24 | |
25 | 25 | /** |
26 | 26 | * Load this version of WP Bootstrap Settings only if the file hash is the current one. |
27 | 27 | */ |
28 | -add_action('after_setup_theme', function () { |
|
28 | +add_action('after_setup_theme', function() { |
|
29 | 29 | global $ayecode_ui_file_key; |
30 | - if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){ |
|
31 | - include_once( dirname( __FILE__ ) . '/includes/class-aui.php' ); |
|
32 | - include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' ); |
|
30 | + if ($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash(__FILE__)) { |
|
31 | + include_once(dirname(__FILE__) . '/includes/class-aui.php'); |
|
32 | + include_once(dirname(__FILE__) . '/includes/ayecode-ui-settings.php'); |
|
33 | 33 | } |
34 | 34 | },1); |
35 | 35 | |
36 | 36 | /** |
37 | 37 | * Add the function that calls the class. |
38 | 38 | */ |
39 | -if(!function_exists('aui')){ |
|
40 | - function aui(){ |
|
41 | - if(!class_exists("AUI",false)){ |
|
39 | +if (!function_exists('aui')) { |
|
40 | + function aui() { |
|
41 | + if (!class_exists("AUI", false)) { |
|
42 | 42 | return false; |
43 | 43 | } |
44 | 44 | return AUI::instance(); |