Browse Source

Better, strong, faster, ...sort-y-er? (issue #65)

pull/68/head
Dac Chartrand 8 years ago
parent
commit
4876b5da03
  1. 67
      inc/helpers/namespace.php
  2. 10
      partials/content-front-page.php

67
inc/helpers/namespace.php

@ -22,36 +22,63 @@ function get_catalog_data( $page = 1, $per_page = 10, $orderby = 'title', $licen
return [ 'pages' => 0, 'books' => [] ]; // Bail
}
$request = new \WP_REST_Request( 'GET', '/pressbooks/v2/books' );
$request->set_query_params(
[
'page' => $page,
'per_page' => $per_page,
]
/**
* Filter the WP_Site_Query args for the catalog display.
*
* @since 5.0.0
*/
$args = apply_filters(
'pb_aldine_catalog_query_args',
/** @deprecated */
apply_filters( 'pb_publisher_catalog_query_args', [ 'public' => '1' ] )
);
$response = rest_do_request( $request );
$pages = $response->headers['X-WP-TotalPages'];
$data = rest_get_server()->response_to_data( $response, true );
$books = [];
foreach ( $data as $key => $book ) {
if ( ! get_blog_option( $book['id'], \Aldine\Admin\BLOG_OPTION ) ) {
continue; // Skip
/** @var \WP_Site $site */
$sites = new \WP_Site_Query( $args );
$sites_in_catalog = [];
foreach ( $sites->sites as $site ) {
// TODO: Each call to get_blog_option() is a call to switch_to_blog(). Not good. Use [ https://core.trac.wordpress.org/ticket/37923 ] when available.
if ( get_blog_option( $site->blog_id, \Aldine\Admin\BLOG_OPTION ) ) {
$sites_in_catalog[] = $site;
}
$book['title'] = $book['metadata']['name'];
$book['date-published'] = $book['metadata']['datePublished'] ?? '';
$book['subject'] = $book['metadata']['about'][0]['identifier'] ?? '';
$books[] = $book;
}
if ( $orderby === 'latest' ) {
$books = wp_list_sort( $books, $orderby, 'desc' );
$sites_in_catalog = wp_list_sort( $sites_in_catalog, $orderby, 'desc' );
} else {
$books = wp_list_sort( $books, $orderby );
$sites_in_catalog = wp_list_sort( $sites_in_catalog, $orderby );
}
$total_pages = ceil( count( $sites_in_catalog ) / $per_page );
$offset = ( $page - 1 ) * $per_page;
$books = [];
foreach ( $sites_in_catalog as $i => $site ) {
if ( $i < $offset ) {
continue;
}
switch_to_blog( $site->blog_id );
$schema = \Pressbooks\Metadata\book_information_to_schema(
\Pressbooks\Book::getBookInformation()
);
$book['title'] = $schema['name'];
$book['date-published'] = $schema['datePublished'] ?? '';
$book['subject'] = $schema['about'][0]['identifier'] ?? '';
$book['link'] = get_blogaddress_by_id( $site->blog_id );
$book['metadata'] = $schema;
$books[] = $book;
restore_current_blog();
if ( count( $books ) >= $per_page ) {
break;
}
}
return [ 'pages' => $pages, 'books' => $books ];
return [ 'pages' => $total_pages, 'books' => $books ];
}
/**
* Get licenses for catalog display.
*

10
partials/content-front-page.php

@ -15,10 +15,12 @@ use function Aldine\Helpers\get_catalog_data;
$front_page_catalog = get_option( 'pb_front_page_catalog' );
$latest_books_title = get_option( 'pb_front_page_catalog_title', __( 'Our Latest Titles', 'pressbooks-aldine' ) );
$page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$catalog_data = get_catalog_data( $page, 3 );
$previous_page = ( $page > 1 ) ? $page - 1 : 0;
$next_page = $page + 1;
if ( get_option( 'pb_front_page_catalog' ) ) {
$page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
$catalog_data = get_catalog_data( $page, 3 );
$previous_page = ( $page > 1 ) ? $page - 1 : 0;
$next_page = $page + 1;
}
?>

Loading…
Cancel
Save