allow pagination in facets endpoint (ref. #94)
This commit is contained in:
parent
323da5f0e4
commit
5cec9ccd94
|
@ -13,6 +13,8 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->rest_base = 'facets';
|
$this->rest_base = 'facets';
|
||||||
|
$this->total_pages = 0;
|
||||||
|
$this->total_items = 0;
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
add_action('init', array(&$this, 'init_objects'), 11);
|
add_action('init', array(&$this, 'init_objects'), 11);
|
||||||
}
|
}
|
||||||
|
@ -57,14 +59,15 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
*/
|
*/
|
||||||
public function get_item( $request ) {
|
public function get_item( $request ) {
|
||||||
|
|
||||||
$metadatum_id = $request['metadatum_id'];
|
$metadatum_id = $request['metadatum_id'];
|
||||||
$metadatum = $this->metadatum_repository->fetch($metadatum_id);
|
$metadatum = $this->metadatum_repository->fetch($metadatum_id);
|
||||||
|
|
||||||
$response = $this->prepare_item_for_response($metadatum, $request );
|
$response = $this->prepare_item_for_response($metadatum, $request );
|
||||||
|
|
||||||
$rest_response = new \WP_REST_Response($response, 200);
|
$rest_response = new \WP_REST_Response($response, 200);
|
||||||
|
|
||||||
$rest_response->header('X-WP-Total', (int) count($response));
|
$rest_response->header('X-WP-Total', $this->total_items);
|
||||||
|
$rest_response->header('X-WP-TotalPages', $this->total_pages);
|
||||||
|
|
||||||
return $rest_response;
|
return $rest_response;
|
||||||
}
|
}
|
||||||
|
@ -95,6 +98,10 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
|
|
||||||
$restItemsClass = new REST_Items_Controller();
|
$restItemsClass = new REST_Items_Controller();
|
||||||
|
|
||||||
|
if(isset($request['number'])){
|
||||||
|
$args['posts_per_page'] = $request['number'];
|
||||||
|
}
|
||||||
|
|
||||||
$items = $this->items_repository->fetch($args, $options['collection_id'], 'WP_Query');
|
$items = $this->items_repository->fetch($args, $options['collection_id'], 'WP_Query');
|
||||||
if ($items->have_posts()) {
|
if ($items->have_posts()) {
|
||||||
while ( $items->have_posts() ) {
|
while ( $items->have_posts() ) {
|
||||||
|
@ -109,6 +116,9 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
wp_reset_postdata();
|
wp_reset_postdata();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->total_items = $items->found_posts;
|
||||||
|
$this->total_pages = ceil($this->total_items / (int) $items->query_vars['posts_per_page']);
|
||||||
|
|
||||||
} else if ( $metadatum_type === 'Tainacan\Metadata_Types\Taxonomy' ){
|
} else if ( $metadatum_type === 'Tainacan\Metadata_Types\Taxonomy' ){
|
||||||
|
|
||||||
if( isset($request['term_id']) ){
|
if( isset($request['term_id']) ){
|
||||||
|
@ -127,6 +137,8 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
array_push($response, $restTermClass->prepare_item_for_response( $term, $request ));
|
array_push($response, $restTermClass->prepare_item_for_response( $term, $request ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->set_pagination_properties_term_type( $args, $response );
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$metadatum_id = $metadatum->get_id();
|
$metadatum_id = $metadatum->get_id();
|
||||||
$offset = '';
|
$offset = '';
|
||||||
|
@ -153,6 +165,7 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->set_pagination_properties_text_type( $collection_id, $metadatum_id, ($request['search']) ? $request['search'] : '' , $offset, $number );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,6 +236,63 @@ class REST_Facets_Controller extends REST_Controller {
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set attributes for text metadata
|
||||||
|
*/
|
||||||
|
private function set_pagination_properties_text_type( $collection_id, $metadatum_id, $search , $offset, $number ){
|
||||||
|
$response = $this->metadatum_repository->fetch_all_metadatum_values( $collection_id, $metadatum_id, $search);
|
||||||
|
|
||||||
|
if( $response && is_array( $response ) ){
|
||||||
|
|
||||||
|
if ( $offset !== '' && $number) {
|
||||||
|
$per_page = (int) $number;
|
||||||
|
$page = ceil( ( ( (int) $offset ) / $per_page ) + 1 );
|
||||||
|
|
||||||
|
$this->total_items = count( $response );
|
||||||
|
|
||||||
|
$max_pages = ceil( $this->total_items / $per_page );
|
||||||
|
|
||||||
|
$this->total_pages = (int) $max_pages ;
|
||||||
|
} else {
|
||||||
|
$this->total_items = count( $response );
|
||||||
|
$this->total_pages = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->total_items = 0;
|
||||||
|
$this->total_pages = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set attributes for term metadata
|
||||||
|
*/
|
||||||
|
private function set_pagination_properties_term_type( $args, $response ){
|
||||||
|
|
||||||
|
if(isset($args['number'], $args['offset'])){
|
||||||
|
$number = $args['number'];
|
||||||
|
$offset = $args['offset'];
|
||||||
|
|
||||||
|
unset( $args['number'], $args['offset'] );
|
||||||
|
$total_terms = wp_count_terms( $this->taxonomy->get_db_identifier(), $args );
|
||||||
|
|
||||||
|
if ( ! $total_terms ) {
|
||||||
|
$total_terms = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$per_page = (int) $number;
|
||||||
|
$page = ceil( ( ( (int) $offset ) / $per_page ) + 1 );
|
||||||
|
|
||||||
|
$this->total_items = (int) $total_terms ;
|
||||||
|
|
||||||
|
$max_pages = ceil( $total_terms / $per_page );
|
||||||
|
|
||||||
|
$this->total_pages = (int) $max_pages ;
|
||||||
|
} else{
|
||||||
|
$this->total_items = count($response) ;
|
||||||
|
$this->total_pages = 1 ;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -24,7 +24,7 @@ export const filter_type_mixin = {
|
||||||
let url = `/collection/${this.collection}/facets/${metadatumId}?`;
|
let url = `/collection/${this.collection}/facets/${metadatumId}?`;
|
||||||
|
|
||||||
if(offset != undefined && number != undefined){
|
if(offset != undefined && number != undefined){
|
||||||
url += `offset=${offset}&number=${number}`;
|
url += `offset=${offset}&number=${number}&`;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isRepositoryLevel){
|
if(isRepositoryLevel){
|
||||||
|
@ -32,7 +32,7 @@ export const filter_type_mixin = {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(search && offset != undefined && number != undefined){
|
if(search && offset != undefined && number != undefined){
|
||||||
url += `&search=${search}&` + qs.stringify(query_items);
|
url += `search=${search}&` + qs.stringify(query_items);
|
||||||
} else if(search){
|
} else if(search){
|
||||||
url += `search=${search}&` + qs.stringify(query_items);
|
url += `search=${search}&` + qs.stringify(query_items);
|
||||||
} else {
|
} else {
|
||||||
|
@ -107,7 +107,7 @@ export const filter_type_mixin = {
|
||||||
let url = '/collection/' + this.filter.collection_id + '/facets/' + this.filter.metadatum.metadatum_id + '?';
|
let url = '/collection/' + this.filter.collection_id + '/facets/' + this.filter.metadatum.metadatum_id + '?';
|
||||||
|
|
||||||
if(offset != undefined && number != undefined){
|
if(offset != undefined && number != undefined){
|
||||||
url += `offset=${offset}&perpage=${number}`;
|
url += `offset=${offset}&number=${number}`;
|
||||||
} else {
|
} else {
|
||||||
url += `nopaging=1`
|
url += `nopaging=1`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue