namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Prepare objects query. * * @since 9.0.0 * @param WP_REST_Request $request Full details about the request. * @return array */ protected function prepare_objects_query( $request ) { $args = parent::prepare_objects_query( $request ); unset( $args['post_parent__in'] ); /** * Filter the query arguments for a request. * * Enables adding extra arguments or setting defaults for an order collection request. * * @param array $args Key value array of query var to query value. * @param WP_REST_Request $request The request used. * * @since 9.0.0. */ $args = apply_filters( 'woocommerce_rest_refunds_prepare_object_query', $args, $request ); return $args; } /** * Prepare a single order output for response. * * @since 9.0.0 * * @param WC_Order_Refund $refund Refund data. * @param WP_REST_Request $request Request object. * * @return WP_Error|WP_REST_Response */ public function prepare_object_for_response( $refund, $request ) { $this->request = $request; $this->request['dp'] = is_null( $this->request['dp'] ) ? wc_get_price_decimals() : absint( $this->request['dp'] ); $data = $this->get_formatted_item_data( $refund ); $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); $response->add_links( $this->prepare_links( $refund, $request ) ); // phpcs:disable WooCommerce.Commenting.CommentHooks.MissingSinceComment /** This filter is documented in includes/rest-api/Controllers/Version2/class-wc-rest-order-refunds-v2-controller.php */ return apply_filters( "woocommerce_rest_prepare_{$this->post_type}_object", $response, $refund, $request ); // phpcs:enable WooCommerce.Commenting.CommentHooks.MissingSinceComment } /** * Get formatted item data. * * @since 9.0.0 * @param WC_Order_Refund $refund The refund object. * @return array */ protected function get_formatted_item_data( $refund ) { $data = parent::get_formatted_item_data( $refund ); $data = array_merge( array_slice( $data, 0, 1, true ), array( 'parent_id' => $refund->get_parent_id(), ), array_slice( $data, 1, null, true ) ); return $data; } /** * Prepare links for the request. * * @param WC_Order_Refund $refund Refund data. * @param WP_REST_Request $request Request object. * @return array Links for the given post. */ protected function prepare_links( $refund, $request ) { $base = str_replace( '(?P[\d]+)', $refund->get_parent_id(), 'orders/(?P[\d]+)/refunds' ); $links = array( 'self' => array( 'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $base, $refund->get_id() ) ), ), 'collection' => array( 'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $base ) ), ), 'up' => array( 'href' => rest_url( sprintf( '/%s/orders/%d', $this->namespace, $refund->get_parent_id() ) ), ), ); return $links; } /** * Get the refund schema, conforming to JSON Schema. * * @since 9.0.0 * @return array */ public function get_item_schema() { $schema = parent::get_item_schema(); $schema['properties'] = array_merge( array_slice( $schema['properties'], 0, 1, true ), array( 'parent_id' => array( 'description' => __( 'Parent order ID.', 'woocommerce' ), 'type' => 'integer', 'context' => array( 'view', 'edit' ), ), ), array_slice( $schema['properties'], 1, null, true ) ); return $schema; } }