autoship_qpilot_orders_update (function)
(src/api.php) Creates a WooCommerce Order (when a QPilot Scheduled Order processes) if one does not exist. Takes the $request as a parameter and returns the $response (or error).
Function
/**
* Creates an WC Order if it doesn't already exist,
*
* @param WP_REST_Request $request Request data.
* @return WP_Error|WP_REST_Response
*/
function autoship_qpilot_orders_update( $request ) {
// Confirm WC Rest is available
if ( class_exists( 'WC_REST_Orders_Controller' ) ){
$json = $request->get_json_params();
$metas = isset( $json['meta_data'] ) && !empty( $json['meta_data'] ) ? $json['meta_data'] : array();
$scheduled_order_processing_id = '';
foreach ($metas as $meta ) {
if ( '_qpilot_scheduled_order_processing_id' == $meta['key'] ){
$scheduled_order_processing_id = $meta['value'];
break;
}
}
// If there is a Processing ID Check for Existing Orders
if ( !empty( $scheduled_order_processing_id ) ) {
// Get the orders from WC_orders.
$orders = wc_get_orders( array( '_qpilot_scheduled_order_processing_id' => $scheduled_order_processing_id ) );
//the order exists, it's a duplicate
if ( !empty( $orders ) ){
// Get and Update the QPilot Site Meta
$sitemeta = $orders[0]->get_meta( '_qpilot_site_meta' );
// Update the Site Meta
$sitemeta = autoship_qpilot_get_sitemeta( $sitemeta );
// Add QPilot Autoship Version to Order Meta as well as any additional tracking.
$orders[0]->add_meta_data( '_qpilot_site_meta', $sitemeta , true );
return new WP_Error( 'duplicate_order', __( 'Order has already been created from scheduled order processing.', 'autoship' ),
array( 'status' => 400,
'order' => json_encode( array_values( $orders )[0]->get_data() ) )
);
}
}
// Allow others to hook in and modify QPilot data for new orders being created via the rest api.
$request = apply_filters('autoship_qpilot_orders_via_rest', $request, $request );
// Since this order doesn't exist create it using the WC Rest Controller.
$controller = new WC_REST_Orders_Controller;
$response = $controller -> create_item( $request );
return $response;
} else {
return new WP_Error( 'woocommerce_rest_unavailable', __( 'The WooCommerce REST API is either unavailable or not found.', 'autoship' ),
array( 'status' => 500 )
);
}
}