Merge pull request woocommerce/woocommerce-admin#1907 from woocommerce/fix/1615-order-number-filter

Support Sequential Order Numbers in Downloads Report order number filter
This commit is contained in:
Jeff Stieler 2019-04-30 10:10:39 -06:00 committed by GitHub
commit a3fdd72ba5
3 changed files with 15 additions and 16 deletions

View File

@ -30,10 +30,10 @@ class WC_Admin_REST_Orders_Controller extends WC_REST_Orders_Controller {
*/
public function get_collection_params() {
$params = parent::get_collection_params();
// This needs to remain a string to support extensions that filter Order Number.
$params['number'] = array(
'description' => __( 'Limit result set to orders matching part of an order number.', 'woocommerce-admin' ),
'type' => 'integer',
'sanitize_callback' => 'absint',
'type' => 'string',
'validate_callback' => 'rest_validate_request_arg',
);
return $params;
@ -51,15 +51,22 @@ class WC_Admin_REST_Orders_Controller extends WC_REST_Orders_Controller {
// Search by partial order number.
if ( ! empty( $request['number'] ) ) {
$partial_number = trim( $request['number'] );
$limit = intval( $args['posts_per_page'] );
$order_ids = $wpdb->get_col(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->prefix}posts WHERE post_type = 'shop_order' AND ID LIKE %s",
intval( $request['number'] ) . '%'
"SELECT ID
FROM {$wpdb->prefix}posts
WHERE post_type = 'shop_order'
AND ID LIKE %s
LIMIT %d",
$wpdb->esc_like( absint( $partial_number ) ) . '%',
$limit
)
);
// Force WP_Query return empty if don't found any order.
$order_ids = ! empty( $order_ids ) ? $order_ids : array( 0 );
$order_ids = empty( $order_ids ) ? array( 0 ) : $order_ids;
$args['post__in'] = $order_ids;
}

View File

@ -3,7 +3,6 @@
* External dependencies
*/
import apiFetch from '@wordpress/api-fetch';
import { isNaN } from 'lodash';
/**
* WooCommerce dependencies
@ -24,18 +23,11 @@ import { computeSuggestionMatch } from './utils';
export default {
name: 'orders',
className: 'woocommerce-search__order-result',
inputType: 'number',
options( search ) {
let payload = '';
if ( search ) {
const number = parseInt( search );
if ( isNaN( number ) ) {
return;
}
const query = {
number,
number: search,
per_page: 10,
};
payload = stringifyQuery( query );

View File

@ -46,7 +46,7 @@ class WC_Tests_API_Orders extends WC_REST_Unit_Test_Case {
$request = new WP_REST_Request( 'GET', $this->endpoint );
$request->set_query_params(
array(
'number' => $order->get_id(),
'number' => (string) $order->get_id(),
)
);