set_query_params([ 'page' => $page, 'per_page' => $per_page, ]); $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 ) { $book['title'] = $book['metadata']['name']; $book['date-published'] = ( isset( $book['metadata']['datePublished'] ) ) ? $book['metadata']['datePublished'] : ''; $book['subject'] = ( isset( $book['metadata']['about'][0] ) ) ? $book['metadata']['about'][0]['identifier'] : ''; $books[] = $book; } if ( $orderby === 'latest' ) { $books = wp_list_sort( $books, $orderby, 'desc' ); } else { $books = wp_list_sort( $books, $orderby ); } return [ 'pages' => $pages, 'books' => $books ]; } else { return [ 'pages' => 0, 'books' => [] ]; } } /** * Get licenses for catalog display. * * @return array */ function get_catalog_licenses() { if ( defined( 'PB_PLUGIN_VERSION' ) ) { $licenses = ( new \Pressbooks\Licensing() )->getSupportedTypes(); foreach ( $licenses as $key => $value ) { $licenses[ $key ] = preg_replace( '/\([^)]+\)/', '', $value['desc'] ); } return $licenses; } return []; } /** * Get licenses currently in use. * * @param array $catalog_data * @return array */ function get_available_licenses( $catalog_data ) { $licenses = []; $licensing = new \Pressbooks\Licensing(); foreach ( $catalog_data['books'] as $book ) { $license = $licensing->getLicenseFromUrl( $book['metadata']['license']['url'] ); if ( ! in_array( $license, $licenses, true ) ) { $licenses[] = $license; } } return $licenses; } /** * Get subjects currently in use. * * @param array $catalog_data * @return array */ function get_available_subjects( $catalog_data ) { $subjects = []; foreach ( $catalog_data['books'] as $book ) { if ( ! empty( $book['subject'] ) ) { $subjects[ substr( $book['subject'], 0, 1 ) ][] = substr( $book['subject'], 0, 2 ); } } return $subjects; } /** * Return the default (non-page) menu items. * * @param string $items * @return string $items */ function get_default_menu( $items = '' ) { $link = ( is_front_page() ) ? network_home_url( '#main' ) : network_home_url( '/' ); $items = sprintf( '
  • %2$s
  • ', $link, __( 'Home', 'pressbooks-aldine' ) ) . $items; if ( get_option( 'pb_network_contact_form' ) ) { $items .= sprintf( '
  • %2$s
  • ', '#contact', __( 'Contact', 'pressbooks-aldine' ) ); } if ( ! is_user_logged_in() ) { $items .= sprintf( '
  • %2$s
  • ', wp_login_url( get_permalink() ), __( 'Sign In', 'pressbooks-aldine' ) ); if ( in_array( get_site_option( 'registration' ), [ 'user', 'all' ], true ) ) { $items .= sprintf( '
  • %2$s
  • ', network_home_url( '/wp-signup.php' ), __( 'Sign Up', 'pressbooks-aldine' ) ); } } else { if ( is_super_admin() || is_user_member_of_blog() ) { $items .= sprintf( '
  • %2$s
  • ', admin_url(), __( 'Admin', 'pressbooks-aldine' ) ); } $items .= sprintf( '
  • %2$s
  • ', wp_logout_url( get_permalink() ), __( 'Sign Out', 'pressbooks-aldine' ) ); } /* @codingStandardsIgnoreStart $items .= sprintf( '', get_search_form( false ) ); @codingStandardsIgnoreEnd */ return $items; } /** * Echo the default menu. * * @param string $items * @return null */ function default_menu( $args = [], $items = '' ) { printf( "<{$args['container']} id='{$args['container_id']}' class='{$args['container_class']}'>", get_default_menu( $items ) ); } /** * * Handler for contact form submissions. * * @return false | array */ function handle_contact_form_submission() { if ( ! isset( $_POST['pb_root_contact_form_nonce'] ) || ! wp_verify_nonce( $_POST['pb_root_contact_form_nonce'], 'pb_root_contact_form' ) ) { return; // Security check failed. } if ( isset( $_POST['submitted'] ) ) { $output = []; $name = ( isset( $_POST['visitor_name'] ) ) ? $_POST['visitor_name'] : ''; $email = ( isset( $_POST['visitor_email'] ) ) ? $_POST['visitor_email'] : ''; $institution = ( isset( $_POST['visitor_institution'] ) ) ? $_POST['visitor_institution'] : ''; $message = ( isset( $_POST['message'] ) ) ? $_POST['message'] : ''; $output['values'] = [ 'visitor_name' => esc_attr( $name ), 'visitor_email' => sanitize_email( $email ), 'visitor_institution' => esc_attr( $institution ), 'message' => esc_textarea( $message ), ]; if ( empty( $name ) ) { $output['message'] = __( 'Name is required.', 'pressbooks-aldine' ); $output['status'] = 'error'; $output['field'] = 'visitor_name'; } elseif ( empty( $email ) ) { $output['message'] = __( 'Email is required.', 'pressbooks-aldine' ); $output['status'] = 'error'; $output['field'] = 'visitor_email'; } elseif ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) { $output['message'] = __( 'Email is invalid.', 'pressbooks-aldine' ); $output['status'] = 'error'; $output['field'] = 'visitor_email'; } elseif ( empty( $institution ) ) { $output['message'] = __( 'Institution is required.', 'pressbooks-aldine' ); $output['status'] = 'error'; $output['field'] = 'visitor_institution'; } elseif ( empty( $message ) ) { $output['message'] = __( 'Message is required.', 'pressbooks-aldine' ); $output['status'] = 'error'; $output['field'] = 'message'; } else { $sent = wp_mail( get_option( 'admin_email' ), sprintf( __( 'Contact Form Submission from %s', 'pressbooks-aldine' ), $name ), sprintf( "From: %1\$s <%2\$s>\nInstitution: %3\$s\n\n%4\$s", stripslashes( $name ), $email, stripslashes( $institution ), strip_tags( $message ) ), "From: ${email}\r\nReply-To: ${email}\r\n" ); if ( $sent ) { $output['message'] = __( 'Your message was sent!', 'pressbooks-aldine' ); $output['status'] = 'success'; } else { $output['message'] = __( 'Your message could not be sent.', 'pressbooks-aldine' ); $output['status'] = 'error'; } } return $output; } return; } /** * Does a page have page sections? * * @param int $post_id The page. * @return bool */ function has_sections( $post_id ) { $post_content = get_post_field( 'post_content', $post_id ); if ( ! empty( $post_content ) ) { if ( strpos( $post_content, 'page-section' ) ) { return true; } else { return false; } } return false; } /** * Maybe truncate a string to a sensible length. * * @param string $string The string. * @param int $length Max length in characters. * * @return string */ function maybe_truncate_string( $string, $length = 40 ) { if ( strlen( $string ) > $length ) { return substr( $string, 0, strpos( wordwrap( $string, $length ), "\n" ) ) . '…'; } return $string; }