; $cookie_name = $this->get_payment_cookie_name(); $is_cookie_set = setcookie( $cookie_name, $payment_id ?? '', $cookie_options ); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.cookies_setcookie if ( $is_cookie_set ) { // Overwrite local variable, so we can use it right away. $_COOKIE[ $cookie_name ] = $payment_id; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE } if ( ! $payment_id ) { unset( $_COOKIE[ $cookie_name ] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE } return $is_cookie_set; } /** * Updates an existing payment with order data. * * @since 5.24.0 * * @param array $data The frontend data. * @param WP_Post $order The order post object. * * @return array|null The payment data or error. */ public function update_payment( array $data, WP_Post $order ): ?array { if ( empty( $data['payment_source_id'] ) ) { return null; } $payment_id = $data['payment_source_id']; $payment = Payment::get( $payment_id ); if ( is_wp_error( $payment ) ) { return $payment; } if ( ! $payment ) { return null; } // Update the payment with order metadata. $metadata = $this->get_updated_metadata( $order, $payment ); // If no changes needed, just return the current payment. if ( empty( $metadata ) ) { return $payment; } $update_data = [ 'metadata' => $metadata, ]; return []; // TODO: Implement update_payment() method. } /** * Get updated metadata for a payment. * * @since 5.24.0 * * @param WP_Post $order The order post object. * @param array $payment The payment data. * * @return array */ protected function get_updated_metadata( WP_Post $order, array $payment ): array { $metadata = $payment['metadata'] ?? []; $order_data = [ 'order_id' => $order->ID, 'site_url' => home_url(), 'site_name' => get_bloginfo( 'name' ), 'customer_email' => get_post_meta( $order->ID, Order::$purchaser_email_meta_key, true ), 'customer_name' => get_post_meta( $order->ID, Order::$purchaser_full_name_meta_key, true ), ]; // Don't add duplicate data. foreach ( $order_data as $key => $value ) { if ( isset( $metadata[ $key ] ) && $metadata[ $key ] === $value ) { unset( $order_data[ $key ] ); } } // If no changes, return empty array. if ( empty( $order_data ) ) { return []; } return array_merge( $metadata, $order_data ); } } ; $cookie_name = $this->get_payment_cookie_name(); $is_cookie_set = setcookie( $cookie_name, $payment_id ?? '', $cookie_options ); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.cookies_setcookie if ( $is_cookie_set ) { // Overwrite local variable, so we can use it right away. $_COOKIE[ $cookie_name ] = $payment_id; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE } if ( ! $payment_id ) { unset( $_COOKIE[ $cookie_name ] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE } return $is_cookie_set; } /** * Updates an existing payment with order data. * * @since 5.24.0 * * @param array $data The frontend data. * @param WP_Post $order The order post object. * * @return array|null The payment data or error. */ public function update_payment( array $data, WP_Post $order ): ?array { if ( empty( $data['payment_source_id'] ) ) { return null; } $payment_id = $data['payment_source_id']; $payment = Payment::get( $payment_id ); if ( is_wp_error( $payment ) ) { return $payment; } if ( ! $payment ) { return null; } // Update the payment with order metadata. $metadata = $this->get_updated_metadata( $order, $payment ); // If no changes needed, just return the current payment. if ( empty( $metadata ) ) { return $payment; } $update_data = [ 'metadata' => $metadata, ]; return []; // TODO: Implement update_payment() method. } /** * Get updated metadata for a payment. * * @since 5.24.0 * * @param WP_Post $order The order post object. * @param array $payment The payment data. * * @return array */ protected function get_updated_metadata( WP_Post $order, array $payment ): array { $metadata = $payment['metadata'] ?? []; $order_data = [ 'order_id' => $order->ID, 'site_url' => home_url(), 'site_name' => get_bloginfo( 'name' ), 'customer_email' => get_post_meta( $order->ID, Order::$purchaser_email_meta_key, true ), 'customer_name' => get_post_meta( $order->ID, Order::$purchaser_full_name_meta_key, true ), ]; // Don't add duplicate data. foreach ( $order_data as $key => $value ) { if ( isset( $metadata[ $key ] ) && $metadata[ $key ] === $value ) { unset( $order_data[ $key ] ); } } // If no changes, return empty array. if ( empty( $order_data ) ) { return []; } return array_merge( $metadata, $order_data ); } }