troller->get_cart_instance();
$customer = wc()->customer;
// Get data from request object and merge with customer object, then sanitize.
$billing = $this->schema->billing_address_schema->sanitize_callback(
wp_parse_args(
$request['billing_address'] ?? [],
$this->get_customer_billing_address( $customer )
),
$request,
'billing_address'
);
$shipping = $this->schema->billing_address_schema->sanitize_callback(
wp_parse_args(
$request['shipping_address'] ?? [],
$this->get_customer_shipping_address( $customer )
),
$request,
'shipping_address'
);
// If the cart does not need shipping, shipping address is forced to match billing address unless defined.
if ( ! $cart->needs_shipping() && ! isset( $request['shipping_address'] ) ) {
$shipping = $billing;
}
// Run validation and sanitization now that the cart and customer data is loaded.
$billing = $this->schema->billing_address_schema->sanitize_callback( $billing, $request, 'billing_address' );
$shipping = $this->schema->shipping_address_schema->sanitize_callback( $shipping, $request, 'shipping_address' );
// Validate data now everything is clean..
$validation_check = $this->validate_address_params( $request, $billing, $shipping );
if ( is_wp_error( $validation_check ) ) {
return rest_ensure_response( $validation_check );
}
$customer->set_props(
array(
'billing_first_name' => $billing['first_name'] ?? null,
'billing_last_name' => $billing['last_name'] ?? null,
'billing_company' => $billing['company'] ?? null,
'billing_address_1' => $billing['address_1'] ?? null,
'billing_address_2' => $billing['address_2'] ?? null,
'billing_city' => $billing['city'] ?? null,
'billing_state' => $billing['state'] ?? null,
'billing_postcode' => $billing['postcode'] ?? null,
'billing_country' => $billing['country'] ?? null,
'billing_phone' => $billing['phone'] ?? null,
'billing_email' => $billing['email'] ?? null,
'shipping_first_name' => $shipping['first_name'] ?? null,
'shipping_last_name' => $shipping['last_name'] ?? null,
'shipping_company' => $shipping['company'] ?? null,
'shipping_address_1' => $shipping['address_1'] ?? null,
'shipping_address_2' => $shipping['address_2'] ?? null,
'shipping_city' => $shipping['city'] ?? null,
'shipping_state' => $shipping['state'] ?? null,
'shipping_postcode' => $shipping['postcode'] ?? null,
'shipping_country' => $shipping['country'] ?? null,
'shipping_phone' => $shipping['phone'] ?? null,
)
);
// We want to only get additional fields passed, since core ones are already saved.
$core_fields = array_keys( $this->additional_fields_controller->get_core_fields() );
$additional_shipping_values = array_diff_key( $shipping, array_flip( $core_fields ) );
$additional_billing_values = array_diff_key( $billing, array_flip( $core_fields ) );
// We save them one by one, and we add the group prefix.
foreach ( $additional_shipping_values as $key => $value ) {
$this->additional_fields_controller->persist_field_for_customer( "/shipping/{$key}", $value, $customer );
}
foreach ( $additional_billing_values as $key => $value ) {
$this->additional_fields_controller->persist_field_for_customer( "/billing/{$key}", $value, $customer );
}
wc_do_deprecated_action(
'woocommerce_blocks_cart_update_customer_from_request',
array(
$customer,
$request,
),
'7.2.0',
'woocommerce_store_api_cart_update_customer_from_request',
'This action was deprecated in WooCommerce Blocks version 7.2.0. Please use woocommerce_store_api_cart_update_customer_from_request instead.'
);
/**
* Fires when the Checkout Block/Store API updates a customer from the API request data.
*
* @since 7.2.0
*
* @param \WC_Customer $customer Customer object.
* @param \WP_REST_Request $request Full details about the request.
*/
do_action( 'woocommerce_store_api_cart_update_customer_from_request', $customer, $request );
$customer->save();
$this->cart_controller->calculate_totals();
return rest_ensure_response( $this->schema->get_item_response( $cart ) );
}
/**
* Get full customer billing address.
*
* @param \WC_Customer $customer Customer object.
* @return array
*/
protected function get_customer_billing_address( \WC_Customer $customer ) {
$validation_util = new ValidationUtils();
$billing_country = $customer->get_billing_country();
$billing_state = $customer->get_billing_state();
$additional_fields = $this->additional_fields_controller->get_all_fields_from_customer( $customer );
$additional_fields = array_reduce(
array_keys( $additional_fields ),
function( $carry, $key ) use ( $additional_fields ) {
if ( 0 === strpos( $key, '/billing/' ) ) {
$value = $additional_fields[ $key ];
$key = str_replace( '/billing/', '', $key );
$carry[ $key ] = $value;
}
return $carry;
},
array()
);
/**
* There's a bug in WooCommerce core in which not having a state ("") would result in us validating against the store's state.
* This resets the state to an empty string if it doesn't match the country.
*
* @todo Removing this handling once we fix the issue with the state value always being the store one.
*/
if ( ! $validation_util->validate_state( $billing_state, $billing_country ) ) {
$billing_state = '';
}
return array_merge(
[
'first_name' => $customer->get_billing_first_name(),
'last_name' => $customer->get_billing_last_name(),
'company' => $customer->get_billing_company(),
'address_1' => $customer->get_billing_address_1(),
'address_2' => $customer->get_billing_address_2(),
'city' => $customer->get_billing_city(),
'state' => $billing_state,
'postcode' => $customer->get_billing_postcode(),
'country' => $billing_country,
'phone' => $customer->get_billing_phone(),
'email' => $customer->get_billing_email(),
],
$additional_fields
);
}
/**
* Get full customer shipping address.
*
* @param \WC_Customer $customer Customer object.
* @return array
*/
protected function get_customer_shipping_address( \WC_Customer $customer ) {
$additional_fields = $this->additional_fields_controller->get_all_fields_from_customer( $customer );
$additional_fields = array_reduce(
array_keys( $additional_fields ),
function( $carry, $key ) use ( $additional_fields ) {
if ( 0 === strpos( $key, '/shipping/' ) ) {
$value = $additional_fields[ $key ];
$key = str_replace( '/shipping/', '', $key );
$carry[ $key ] = $value;
}
return $carry;
},
array()
);
return array_merge(
[
'first_name' => $customer->get_shipping_first_name(),
'last_name' => $customer->get_shipping_last_name(),
'company' => $customer->get_shipping_company(),
'address_1' => $customer->get_shipping_address_1(),
'address_2' => $customer->get_shipping_address_2(),
'city' => $customer->get_shipping_city(),
'state' => $customer->get_shipping_state(),
'postcode' => $customer->get_shipping_postcode(),
'country' => $customer->get_shipping_country(),
'phone' => $customer->get_shipping_phone(),
],
$additional_fields
);
}
}
Huawei P 8 lite book case – alibabatelecom
View cart “Iphone 13 Mini book case” has been added to your cart.
Huawei P 8 lite book case 299.00 kr
AMA book case is the high-quality faux premuim case with built-in stand function and inside pockets for cards and documents.
inside of the case is silicone and it is not going broke when you lose your phone
It combines elegant colours and is equipped with a hard shell to ensure the stability and protection of your Smartphone.
Color
Red
huawei-p-series
Huawei p8 lite
30 in stock
Description
AMA book case is the high-quality faux premuim case with built-in stand function and inside pockets for cards and documents.
inside of the case is silicone and it is not going broke when you lose your phone
It combines elegant colours and is equipped with a hard shell to ensure the stability and protection of your Smartphone.