Файловый менеджер - Редактировать - /home/harasnat/www/labour/wp-content/plugins/woocommerce-payments/src/Internal/Service/OrderService.php
Назад
<?php /** * Class OrderService * * @package WooCommerce\Payments */ namespace WCPay\Internal\Service; use WC_Order; use WC_Payments_Features; use WC_Payments_Order_Service; use WCPay\Constants\Payment_Type; use WCPay\Exceptions\Order_Not_Found_Exception; use WCPay\Internal\Proxy\HooksProxy; use WCPay\Internal\Proxy\LegacyProxy; /** * Service for managing orders. * * This service's public methods should only require order IDs rather than objects, * avoiding direct access to the `$order` object witnin `src` (except for this class). */ class OrderService { /** * Legacy proxy. * * @var LegacyProxy */ private $legacy_proxy; /** * Hooks proxy. * * @var HooksProxy */ private $hooks_proxy; /** * Class constructor. * * @param LegacyProxy $legacy_proxy Proxy for accessing non-src functionality. * @param HooksProxy $hooks_proxy Proxy for triggering hooks. */ public function __construct( LegacyProxy $legacy_proxy, HooksProxy $hooks_proxy ) { $this->legacy_proxy = $legacy_proxy; $this->hooks_proxy = $hooks_proxy; } /** * Retrieves the order object. * * Please restrain from using this method! * It can only be used to (temporarily) provide the order object * to legacy (`includes`) services, which are not adapted to work * with order IDs yet. * * @see https://github.com/Automattic/woocommerce-payments/issues/7367 * @param int $order_id ID of the order. * @return WC_Order Order object. * @throws Order_Not_Found_Exception If the order could not be found. */ public function _deprecated_get_order( int $order_id ) { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore return $this->get_order( $order_id ); } /** * Generates payment metadata from order details. * * @param int $order_id ID of the order. * @param Payment_Type $payment_type Type of the payment (recurring or not). * @return array The metadat athat will be sent to the server. * @throws Order_Not_Found_Exception */ public function get_payment_metadata( int $order_id, ?Payment_Type $payment_type = null ) { $order = $this->get_order( $order_id ); $name = sanitize_text_field( $order->get_billing_first_name() ) . ' ' . sanitize_text_field( $order->get_billing_last_name() ); $email = sanitize_email( $order->get_billing_email() ); $metadata = [ 'customer_name' => $name, 'customer_email' => $email, 'site_url' => esc_url( get_site_url() ), 'order_id' => $order->get_id(), 'order_number' => $order->get_order_number(), 'order_key' => $order->get_order_key(), 'payment_type' => $payment_type, 'checkout_type' => $order->get_created_via(), 'client_version' => WCPAY_VERSION_NUMBER, 'subscription_payment' => 'no', ]; if ( 'recurring' === (string) $payment_type && $this->legacy_proxy->call_function( 'function_exists', 'wcs_order_contains_subscription' ) && $this->legacy_proxy->call_function( 'wcs_order_contains_subscription', $order, 'any' ) ) { $use_stripe_billing = $this->legacy_proxy->call_static( WC_Payments_Features::class, 'should_use_stripe_billing' ); $is_renewal = $this->legacy_proxy->call_function( 'wcs_order_contains_renewal', $order ); $metadata['subscription_payment'] = $is_renewal ? 'renewal' : 'initial'; $metadata['payment_context'] = $use_stripe_billing ? 'wcpay_subscription' : 'regular_subscription'; } return $this->hooks_proxy->apply_filters( 'wcpay_metadata_from_order', $metadata, $order, $payment_type ); } /** * Sets the '_wcpay_mode' meta data on an order. * * @param string $order_id The order id. * @param string $mode Mode from the context. * @throws Order_Not_Found_Exception */ public function set_mode( string $order_id, string $mode ): void { $order = $this->get_order( $order_id ); $order->update_meta_data( WC_Payments_Order_Service::WCPAY_MODE_META_KEY, $mode ); $order->save_meta_data(); } /** * Gets the '_wcpay_mode' meta data on an order. * * @param string $order_id The order id. * * @return string The mode. * @throws Order_Not_Found_Exception */ public function get_mode( string $order_id ): string { $order = $this->get_order( $order_id ); return $order->get_meta( WC_Payments_Order_Service::WCPAY_MODE_META_KEY, true ); } /** * Gets currently attached intent ID of the order. * * @param int $order_id Order ID. * * @return string|null Intent ID for the order. Null if no intent ID attached to order. * @throws Order_Not_Found_Exception */ public function get_intent_id( int $order_id ): ?string { $order = $this->get_order( $order_id ); $intent_id = (string) $order->get_meta( '_intent_id', true ); if ( empty( $intent_id ) ) { return null; } return $intent_id; } /** * Gets cart hash for the given order ID. * * @param int $order_id ID of the order. * * @return string Cart hash for the order. * @throws Order_Not_Found_Exception */ public function get_cart_hash( int $order_id ): string { $order = $this->get_order( $order_id ); return $order->get_cart_hash(); } /** * Gets customer ID for the given order ID. * * @param int $order_id ID of the order. * * @return int Customer ID for the order. * @throws Order_Not_Found_Exception */ public function get_customer_id( int $order_id ): int { return $this->get_order( $order_id )->get_customer_id(); } /** * Checks if the order has one of paid statuses. * * @param int $order_id ID of the order. * * @return bool True if the order has one of paid statuses, false otherwise. * @throws Order_Not_Found_Exception */ public function is_paid( int $order_id ): bool { return $this->get_order( $order_id ) ->has_status( $this->legacy_proxy->call_function( 'wc_get_is_paid_statuses' ) ); } /** * Checks if the order has one of pending statuses. * * @param int $order_id ID of the order. * * @return bool True if the order has one of pending statuses, false otherwise. * @throws Order_Not_Found_Exception */ public function is_pending( int $order_id ) { return $this->get_order( $order_id ) ->has_status( $this->legacy_proxy->call_function( 'wc_get_is_pending_statuses' ) ); } /** * Validate phone number provided in the order. * * @param int $order_id ID of the order. * * @return bool * @throws Order_Not_Found_Exception */ public function is_valid_phone_number( int $order_id ): bool { $order = $this->get_order( $order_id ); return strlen( $order->get_billing_phone() ) < 20; } /** * Adds note to order. * * @param int $order_id ID of the order. * @param string $note Note content. * * @return int Note ID. * @throws Order_Not_Found_Exception */ public function add_note( int $order_id, string $note ): int { return $this->get_order( $order_id )->add_order_note( $note ); } /** * Deletes order. * * @param int $order_id ID of the order. * @param bool $force_delete Should the order be deleted permanently. * * @return bool Result of the deletion. * @throws Order_Not_Found_Exception */ public function delete( int $order_id, bool $force_delete = false ): bool { return $this->get_order( $order_id )->delete( $force_delete ); } /** * Retrieves the order object. * * This method should be only used internally within this service. * Other `src` methods and services should not access and manipulate * order data directly, utilizing this service instead. * * Unlike the legacy service, this one only accepts integer IDs, * and returns only the `WC_Order` object, no refunds. * * @param int $order_id ID of the order. * @return WC_Order Order object. * @throws Order_Not_Found_Exception If the order could not be found. */ protected function get_order( int $order_id ): WC_Order { $order = $this->legacy_proxy->call_function( 'wc_get_order', $order_id ); if ( ! $order instanceof WC_Order ) { throw new Order_Not_Found_Exception( esc_html( sprintf( // Translators: %d is the ID of an order. __( 'The requested order (ID %d) was not found.', 'woocommerce-payments' ), $order_id ) ), 'order_not_found' ); } return $order; } }
| ver. 1.4 |
Github
|
.
| PHP 8.1.33 | Генерация страницы: 0.01 |
proxy
|
phpinfo
|
Настройка