autoship_update_scheduled_order_shipping_address_post_wrapper (function)
( src/scheduled-orders.php) Updates a Scheduled Order Shipping Address via POST to QPilot.
Function
/**
* Updates a Scheduled Order Shipping Address via POST
* @see autoship_update_scheduled_order_handler
*/
function autoship_update_scheduled_order_shipping_address_post_wrapper (){
// Verify action
if ( ! isset( $_REQUEST['autoship_update_order_shipping_address'] ) ) {
return;
}
wc_nocache_headers();
// Validate Nonce and get order id.
$nonce = $_REQUEST['autoship-update-scheduled-order-shipping-address-nonce'];
$autoship_order_id = autoship_update_scheduled_order_post_valid_nonce_id( $nonce, 'autoship-update-scheduled-order-shipping-address' );
if ( !$autoship_order_id )
return;
$original_autoship_order = autoship_pull_scheduled_order_session( $nonce, $autoship_order_id );
// Check for the country
$country = isset( $_POST['country'] ) ? sanitize_text_field( $_POST['country'] ) : NULL;
$base = !empty( $country ) ? array( 'country' => $country ) : array();
// If the current country isn't valid add an error and bail.
$validation = $success = true;
if ( ! array_key_exists( $country, WC()->countries->get_countries() ) ){
$validation = new WP_Error( 'invalid_shipping_address_values', __( "The selected Shipping Address country field is invalid.", "autoship" ) );
$messages = apply_filters( 'autoship_update_scheduled_order_shipping_address_invalid_country_notice', $validation->get_error_messages(), array( 'country' => $country ) );
// Add our general error notice
foreach ( $messages as $code => $message)
wc_add_notice( $message, 'error' );
// Allow others to add on additional invalid notices
do_action( 'autoship_update_scheduled_order_shipping_address_invalid_country_field', array( 'country' => $country ) );
$success = false;
}
if ( $success ){
// Retrieve the Form Fields to Check
// Country must be used from the submitted address
// Else Base Country will be used.
$fields = autoship_shipping_address_form_fields( $base );
$values = $valids = $invalids = array();
// Get posted values
foreach ( $fields as $key => $data ) {
if ( isset( $_POST[$key] ) )
$values[$key] = $_POST[$key];
}
// Allow posted values to be sanitized & formatted
$values = apply_filters( 'autoship_scheduled_order_sanitize_shipping_address_post_fields', $values, $fields );
// Validate posted field values
$valids = apply_filters( 'autoship_scheduled_order_validate_shipping_address_post_field', $values, $fields );
//Get Invalids
foreach ($values as $key => $value){
if ( !isset( $valids[$key] ) )
$invalids[$key] = $value;
}
// Check for Invalid
$validation = true;
if ( !empty( $invalids ) )
$validation = new WP_Error( 'invalid_shipping_address_values', __( "One or more of the entered Shipping Address fields are invalid.", "autoship" ) );
$validation = apply_filters( 'autoship_scheduled_order_validate_shipping_address_required_posted_fields', $validation, $valids, $fields );
if ( is_wp_error( $validation ) ){
$messages = apply_filters( 'autoship_update_scheduled_order_shipping_address_invalid_notices', $validation->get_error_messages(), $invalids, $fields );
// Add our general error notice
foreach ( $messages as $code => $message)
wc_add_notice( $message, 'error' );
// Allow others to add on additional invalid notices
do_action( 'autoship_update_scheduled_order_shipping_address_invalid_fields', $invalids, $fields );
$success = false;
} else {
$success = autoship_update_scheduled_order_handler(
$autoship_order_id,
'autoship_update_order_shipping_address',
array( 'shipping_address' => $valids,
'original_autoship_order' => $original_autoship_order )
);
}
}
// If update failed include url action so form can be displayed.
$url = is_wp_error( $success ) || !$success ?
add_query_arg( 'action', 'edit-shipping-address', autoship_get_scheduled_order_url( $autoship_order_id ) ) : autoship_get_scheduled_order_url( $autoship_order_id );
wp_redirect( $url );
exit();
}