o %sQProcess :`ached: failed t@:`startupNotifica`:`sDied():`ork failure): %:`|QTimer:::`s cannot have n:`QTimer:::`id slot specifi :`6QSingleShotTim;o`:`php_dl:`php_print_info:` php_printf o0>o:`php_lint_script:` sapi_startup6:` sapi_shutdown :`php_body_writeP>op>o>o:`_emallocAA:`_efreex@x@:` _ereallocx@:`_estrdup@E :` _estrndupC>o`:`_zval_ptr_dtor>o>o:`zend_highlight:` zend_stripL?:`zend_llist_init :`?L?L?L?@:`EEL?CE`:`?FL?hG:`GFP5Q:`u@W@Wb:`s0sr0r:`jipih:`tVVV :`VpVpVY@:`mmkY`:``@_`^:`T0Wc0W:`dpppf:`]\F\@[:`Vv:` :`@:``:`ؙ:`X:`:`:`?o :`php_dlȜH@:`php_print_info`:` php_printf@@?o`?o?o?o?o :`php_lint_script@:` sapi_startupian`:` sapi_shutdownfo:`php_body_write ?o@o @o:`_Request $request Request object. * @return string */ private function get_request_payment_method_id( \WP_REST_Request $request ) { $payment_method = $this->get_request_payment_method( $request ); return is_null( $payment_method ) ? '' : $payment_method->id; } /** * Gets and formats payment request data. * * @param \WP_REST_Request $request Request object. * @return array */ private function get_request_payment_data( \WP_REST_Request $request ) { static $payment_data = []; if ( ! empty( $payment_data ) ) { return $payment_data; } if ( ! empty( $request['payment_data'] ) ) { foreach ( $request['payment_data'] as $data ) { $payment_data[ sanitize_key( $data['key'] ) ] = wc_clean( $data['value'] ); } } return $payment_data; } /** * Update the current order using the posted values from the request. * * @param \WP_REST_Request $request Full details about the request. */ private function update_order_from_request( \WP_REST_Request $request ) { $this->order->set_customer_note( wc_sanitize_textarea( $request['customer_note'] ) ?? '' ); $payment_method = $this->get_request_payment_method( $request ); if ( null !== $payment_method ) { WC()->session->set( 'chosen_payment_method', $payment_method->id ); $this->order->set_payment_method( $payment_method->id ); $this->order->set_payment_method_title( $payment_method->title ); } wc_log_order_step( '[Store API #5::update_order_from_request] Set customer note and payment method', array( 'order_id' => $this->order->get_id(), 'payment' => $this->order->get_payment_method_title(), ) ); $this->persist_additional_fields_for_order( $request ); wc_log_order_step( '[Store API #5::update_order_from_request] Persisted additional fields', array( 'order_id' => $this->order->get_id(), 'payment' => $this->order->get_payment_method_title(), ) ); wc_do_deprecated_action( '__experimental_woocommerce_blocks_checkout_update_order_from_request', array( $this->order, $request, ), '6.3.0', 'woocommerce_store_api_checkout_update_order_from_request', 'This action was deprecated in WooCommerce Blocks version 6.3.0. Please use woocommerce_store_api_checkout_update_order_from_request instead.' ); wc_do_deprecated_action( 'woocommerce_blocks_checkout_update_order_from_request', array( $this->order, $request, ), '7.2.0', 'woocommerce_store_api_checkout_update_order_from_request', 'This action was deprecated in WooCommerce Blocks version 7.2.0. Please use woocommerce_store_api_checkout_update_order_from_request instead.' ); /** * Fires when the Checkout Block/Store API updates an order's from the API request data. * * This hook gives extensions the chance to update orders based on the data in the request. This can be used in * conjunction with the ExtendSchema class to post custom data and then process it. * * @since 7.2.0 * * @param \WC_Order $order Order object. * @param \WP_REST_Request $request Full details about the request. */ do_action( 'woocommerce_store_api_checkout_update_order_from_request', $this->order, $request ); $this->order->save(); } /** * Gets the chosen payment method title from the request. * * @throws RouteException On error. * @param \WP_REST_Request $request Request object. * @return string */ private function get_request_payment_method_title( \WP_REST_Request $request ) { $payment_method = $this->get_request_payment_method( $request ); return is_null( $payment_method ) ? '' : $payment_method->get_title(); } /** * Persist additional fields for the order after validating them. * * @param \WP_REST_Request $request Full details about the request. */ private function persist_additional_fields_for_order( \WP_REST_Request $request ) { if ( Features::is_enabled( 'experimental-blocks' ) ) { $document_object = $this->get_document_object_from_rest_request( $request ); $document_object->set_context( 'order' ); $additional_fields_order = $this->additional_fields_controller->get_contextual_fields_for_location( 'order', $document_object ); $additional_fields_contact = $this->additional_fields_controller->get_contextual_fields_for_location( 'contact', $document_object ); $additional_fields = array_merge( $additional_fields_order, $additional_fields_contact ); } else { $additional_fields_order = $this->additional_fields_controller->get_fields_for_location( 'order' ); $additional_fields_contact = $this->additional_fields_controller->get_fields_for_location( 'contact' ); $additional_fields = array_merge( $additional_fields_order, $additional_fields_contact ); } $field_values = (array) $request['additional_fields'] ?? []; foreach ( $additional_fields as $key => $field ) { if ( isset( $field_values[ $key ] ) ) { $this->additional_fields_controller->persist_field_for_order( $key, $field_values[ $key ], $this->order, 'other', false ); } } // The above logic sets visible fields, but not hidden fields. Unset the hidden fields here. $other_posted_field_values = array_diff_key( $field_values, $additional_fields ); foreach ( $other_posted_field_values as $key => $value ) { if ( $this->additional_fields_controller->is_field( $key ) ) { $this->additional_fields_controller->persist_field_for_order( $key, '', $this->order, 'other', false ); } } // We need to sync the customer additional fields with the order otherwise they will be overwritten on next page load. if ( 0 !== $this->order->get_customer_id() && get_current_user_id() === $this->order->get_customer_id() ) { $this->additional_fields_controller->sync_customer_additional_fields_with_order( $this->order, wc()->customer ); } } /** * Returns a document object from a REST request. * * @param \WP_REST_Request $request The REST request. * @return DocumentObject The document object or null if experimental blocks are not enabled. */ public function get_document_object_from_rest_request( \WP_REST_Request $request ) { return new DocumentObject( [ 'customer' => [ 'billing_address' => $request['billing_address'], 'shipping_address' => $request['shipping_address'], 'additional_fields' => array_intersect_key( $request['additional_fields'] ?? [], array_flip( $this->additional_fields_controller->get_contact_fields_keys() ) ), ], 'checkout' => [ 'payment_method' => $request['payment_method'], 'create_account' => $request['create_account'], 'customer_note' => $request['customer_note'], 'additional_fields' => array_intersect_key( $request['additional_fields'] ?? [], array_flip( $this->additional_fields_controller->get_order_fields_keys() ) ), ], ] ); } }
Fatal error: Trait "Automattic\WooCommerce\StoreApi\Utilities\CheckoutTrait" not found in /datas/yulpa173463/sites/ccdm.fr/2023/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Checkout.php on line 15