-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
class-wp-rest-dummy-search-handler.php
90 lines (68 loc) · 2.45 KB
/
class-wp-rest-dummy-search-handler.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
/**
* REST API: WP_REST_Dummy_Search_Handler class
*
* @package gutenberg
*/
/**
* Test class extending WP_REST_Search_Handler
*/
class WP_REST_Dummy_Search_Handler extends WP_REST_Search_Handler {
protected $items = array();
public function __construct( $amount = 10 ) {
$this->type = 'dummy';
$this->subtypes = array( 'dummy_first_type', 'dummy_second_type' );
$this->items = array();
for ( $i = 1; $i <= $amount; $i++ ) {
$subtype = $i > $amount / 2 ? 'dummy_second_type' : 'dummy_first_type';
$this->items[ $i ] = (object) array(
'dummy_id' => $i,
'dummy_title' => sprintf( 'Title %d', $i ),
'dummy_url' => sprintf( home_url( '/dummies/%d' ), $i ),
'dummy_type' => $subtype,
);
}
}
public function search_items( WP_REST_Request $request ) {
$subtypes = $request[ WP_REST_Search_Controller::PROP_SUBTYPE ];
if ( in_array( WP_REST_Search_Controller::TYPE_ANY, $subtypes, true ) ) {
$subtypes = $this->subtypes;
}
$results = array();
foreach ( $subtypes as $subtype ) {
$results = array_merge( $results, wp_list_filter( array_values( $this->items ), array( 'dummy_type' => $subtype ) ) );
}
$results = wp_list_sort( $results, 'dummy_id', 'DESC' );
$number = (int) $request['per_page'];
$offset = (int) $request['per_page'] * ( (int) $request['page'] - 1 );
$total = count( $results );
$results = array_slice( $results, $offset, $number );
return array(
self::RESULT_IDS => wp_list_pluck( $results, 'dummy_id' ),
self::RESULT_TOTAL => $total,
);
}
public function prepare_item( $id, array $fields ) {
$dummy = $this->items[ $id ];
$data = array();
if ( in_array( WP_REST_Search_Controller::PROP_ID, $fields, true ) ) {
$data[ WP_REST_Search_Controller::PROP_ID ] = (int) $dummy->dummy_id;
}
if ( in_array( WP_REST_Search_Controller::PROP_TITLE, $fields, true ) ) {
$data[ WP_REST_Search_Controller::PROP_TITLE ] = $dummy->dummy_title;
}
if ( in_array( WP_REST_Search_Controller::PROP_URL, $fields, true ) ) {
$data[ WP_REST_Search_Controller::PROP_URL ] = $dummy->dummy_url;
}
if ( in_array( WP_REST_Search_Controller::PROP_TYPE, $fields, true ) ) {
$data[ WP_REST_Search_Controller::PROP_TYPE ] = $this->type;
}
if ( in_array( WP_REST_Search_Controller::PROP_SUBTYPE, $fields, true ) ) {
$data[ WP_REST_Search_Controller::PROP_SUBTYPE ] = $dummy->dummy_type;
}
return $data;
}
public function prepare_item_links( $id ) {
return array();
}
}