| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- /**
- * REST API Network Orders controller
- *
- * Handles requests to the /orders/network endpoint
- *
- * @package WooCommerce/API
- * @since 3.4.0
- */
- defined( 'ABSPATH' ) || exit;
- /**
- * REST API Network Orders controller class.
- *
- * @package WooCommerce/API
- * @extends WC_REST_Orders_Controller
- */
- class WC_REST_Network_Orders_Controller extends WC_REST_Orders_Controller {
- /**
- * Register the routes for network orders.
- */
- public function register_routes() {
- if ( is_multisite() ) {
- register_rest_route(
- $this->namespace, '/' . $this->rest_base . '/network', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'network_orders' ),
- 'permission_callback' => array( $this, 'network_orders_permissions_check' ),
- 'args' => $this->get_collection_params(),
- ),
- 'schema' => array( $this, 'get_public_item_schema' ),
- )
- );
- }
- }
- /**
- * Retrieves the item's schema for display / public consumption purposes.
- *
- * @access public
- *
- * @return array Public item schema data.
- */
- public function get_public_item_schema() {
- $schema = parent::get_public_item_schema();
- $schema['properties']['blog'] = array(
- 'description' => __( 'Blog id of the record on the multisite.', 'woocommerce' ),
- 'type' => 'integer',
- 'context' => array( 'view' ),
- 'readonly' => true,
- );
- $schema['properties']['edit_url'] = array(
- 'description' => __( 'URL to edit the order', 'woocommerce' ),
- 'type' => 'string',
- 'context' => array( 'view' ),
- 'readonly' => true,
- );
- $schema['properties']['customer'][] = array(
- 'description' => __( 'Name of the customer for the order', 'woocommerce' ),
- 'type' => 'string',
- 'context' => array( 'view' ),
- 'readonly' => true,
- );
- $schema['properties']['status_name'][] = array(
- 'description' => __( 'Order Status', 'woocommerce' ),
- 'type' => 'string',
- 'context' => array( 'view' ),
- 'readonly' => true,
- );
- $schema['properties']['formatted_total'][] = array(
- 'description' => __( 'Order total formatted for locale', 'woocommerce' ),
- 'type' => 'string',
- 'context' => array( 'view' ),
- 'readonly' => true,
- );
- return $schema;
- }
- /**
- * Does a permissions check for the proper requested blog
- *
- * @param WP_REST_Request $request Full details about the request.
- *
- * @return bool $permission
- */
- public function network_orders_permissions_check( $request ) {
- $blog_id = $request->get_param( 'blog_id' );
- $blog_id = ! empty( $blog_id ) ? $blog_id : get_current_blog_id();
- switch_to_blog( $blog_id );
- $permission = $this->get_items_permissions_check( $request );
- restore_current_blog();
- return $permission;
- }
- /**
- * Get a collection of orders from the requested blog id
- *
- * @param WP_REST_Request $request Full details about the request.
- *
- * @return WP_REST_Response
- */
- public function network_orders( $request ) {
- $blog_id = $request->get_param( 'blog_id' );
- $blog_id = ! empty( $blog_id ) ? $blog_id : get_current_blog_id();
- switch_to_blog( $blog_id );
- add_filter( 'woocommerce_rest_orders_prepare_object_query', array( $this, 'network_orders_filter_args' ) );
- $items = $this->get_items( $request );
- remove_filter( 'woocommerce_rest_orders_prepare_object_query', array( $this, 'network_orders_filter_args' ) );
- foreach ( $items->data as &$current_order ) {
- $order = wc_get_order( $current_order['id'] );
- $current_order['blog'] = get_blog_details( get_current_blog_id() );
- $current_order['edit_url'] = get_admin_url( $blog_id, 'post.php?post=' . absint( $order->get_id() ) . '&action=edit' );
- /* translators: 1: first name 2: last name */
- $current_order['customer'] = trim( sprintf( _x( '%1$s %2$s', 'full name', 'woocommerce' ), $order->get_billing_first_name(), $order->get_billing_last_name() ) );
- $current_order['status_name'] = wc_get_order_status_name( $order->get_status() );
- $current_order['formatted_total'] = $order->get_formatted_order_total();
- }
- restore_current_blog();
- return $items;
- }
- /**
- * Filters the post statuses to on hold and processing for the network order query.
- *
- * @param array $args Query args.
- *
- * @return array
- */
- public function network_orders_filter_args( $args ) {
- $args['post_status'] = array(
- 'wc-on-hold',
- 'wc-processing',
- );
- return $args;
- }
- }
|