Skip to content

Commit a773144

Browse files
committed
Replace dynamic props usage with Dynamic_Props class.
1 parent a99c805 commit a773144

8 files changed

+261
-169
lines changed

woocommerce/payment-gateway/Handlers/Abstract_Hosted_Payment_Handler.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
namespace SkyVerge\WooCommerce\PluginFramework\v5_15_12\Payment_Gateway\Handlers;
2626

2727
use SkyVerge\WooCommerce\PluginFramework\v5_15_12 as FrameworkBase;
28+
use SkyVerge\WooCommerce\PluginFramework\v5_15_12\Payment_Gateway\Dynamic_Props;
2829

2930
if ( ! class_exists( '\\SkyVerge\\WooCommerce\\PluginFramework\\v5_15_12\\Payment_Gateway\\Handlers\\Abstract_Hosted_Payment_Handler' ) ) :
3031

@@ -325,20 +326,25 @@ protected function get_order_from_response( FrameworkBase\SV_WC_Payment_Gateway_
325326

326327
$order = $this->get_gateway()->get_order( $order );
327328

328-
$order->payment->account_number = $response->get_account_number();
329+
$payment = Dynamic_Props::get( $order, 'payment', null, new \stdClass() );
330+
331+
$payment->account_number = $response->get_account_number();
329332

330333
if ( $response instanceof FrameworkBase\SV_WC_Payment_Gateway_API_Payment_Notification_Credit_Card_Response ) {
331334

332-
$order->payment->exp_month = $response->get_exp_month();
333-
$order->payment->exp_year = $response->get_exp_year();
334-
$order->payment->card_type = $response->get_card_type();
335+
$payment->exp_month = $response->get_exp_month();
336+
$payment->exp_year = $response->get_exp_year();
337+
$payment->card_type = $response->get_card_type();
335338

336339
} elseif ( $response instanceof FrameworkBase\SV_WC_Payment_Gateway_API_Payment_Notification_eCheck_Response ) {
337340

338-
$order->payment->account_type = $response->get_account_type();
339-
$order->payment->check_number = $response->get_check_number();
341+
$payment->account_type = $response->get_account_type();
342+
$payment->check_number = $response->get_check_number();
340343
}
341344

345+
// Set payment info on the order object.
346+
Dynamic_Props::set( $order, 'payment', $payment );
347+
342348
return $order;
343349
}
344350

woocommerce/payment-gateway/Handlers/Capture.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
namespace SkyVerge\WooCommerce\PluginFramework\v5_15_12\Payment_Gateway\Handlers;
2626

2727
use SkyVerge\WooCommerce\PluginFramework\v5_15_12 as Framework;
28+
use SkyVerge\WooCommerce\PluginFramework\v5_15_12\Payment_Gateway\Dynamic_Props;
2829

2930
defined( 'ABSPATH' ) or exit;
3031

@@ -189,7 +190,7 @@ public function perform_capture( \WC_Order $order, $amount = null ) {
189190
/* translators: Placeholders: %1$s - payment gateway title (such as Authorize.net, Braintree, etc), %2$s - transaction amount. Definitions: Capture, as in capture funds from a credit card. */
190191
__( '%1$s Capture of %2$s Approved', 'woocommerce-plugin-framework' ),
191192
$this->get_gateway()->get_method_title(),
192-
wc_price( $order->capture->amount, [
193+
wc_price( Dynamic_Props::get( $order, 'capture', 'amount' ), [
193194
'currency' => $order->get_currency()
194195
] )
195196
);
@@ -255,7 +256,7 @@ public function perform_capture( \WC_Order $order, $amount = null ) {
255256
*/
256257
public function do_capture_success( \WC_Order $order, Framework\SV_WC_Payment_Gateway_API_Response $response ) {
257258

258-
$total_captured = (float) $this->get_gateway()->get_order_meta( $order, 'capture_total' ) + (float) $order->capture->amount;
259+
$total_captured = (float) $this->get_gateway()->get_order_meta( $order, 'capture_total' ) + (float) Dynamic_Props::get( $order, 'capture', 'amount' );
259260

260261
$this->get_gateway()->update_order_meta( $order, 'capture_total', Framework\SV_WC_Helper::number_format( $total_captured ) );
261262
$this->get_gateway()->update_order_meta( $order, 'charge_captured', $this->get_gateway()->supports_credit_card_partial_capture() && $this->get_gateway()->is_partial_capture_enabled() && $total_captured < (float) $this->get_order_capture_maximum( $order ) ? 'partial' : 'yes' );

woocommerce/payment-gateway/class-sv-wc-payment-gateway-direct.php

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
namespace SkyVerge\WooCommerce\PluginFramework\v5_15_12;
2626

2727
use SkyVerge\WooCommerce\PluginFramework\v5_15_12\Blocks\Blocks_Handler;
28+
use SkyVerge\WooCommerce\PluginFramework\v5_15_12\Payment_Gateway\Dynamic_Props;
2829

2930
defined( 'ABSPATH' ) or exit;
3031

@@ -372,7 +373,7 @@ public function process_payment( $order_id ) {
372373
if ( $this->supports_tokenization() && 0 !== (int) $order->get_user_id() ) {
373374

374375
// if already paying with an existing method, try and updated it locally and remotely
375-
if ( ! empty( $order->payment->token ) ) {
376+
if ( ! empty( Dynamic_Props::get( $order, 'payment', 'token' ) ) ) {
376377

377378
$this->update_transaction_payment_method( $order );
378379

@@ -388,7 +389,7 @@ public function process_payment( $order_id ) {
388389
if ( $this->should_skip_transaction( $order ) || $this->do_transaction( $order ) ) {
389390

390391
// add transaction data for zero-dollar "orders"
391-
if ( '0.00' === $order->payment_total ) {
392+
if ( '0.00' === Dynamic_Props::get( $order, 'payment_total' ) ) {
392393
$this->add_transaction_data( $order );
393394
}
394395

@@ -502,7 +503,7 @@ protected function get_notices_as_user_messages( ?string $type = null ) : array
502503
*/
503504
protected function update_transaction_payment_method( \WC_Order $order ) {
504505

505-
$token = $this->get_payment_tokens_handler()->get_token( $order->get_user_id(), $order->payment->token );
506+
$token = $this->get_payment_tokens_handler()->get_token( $order->get_user_id(), Dynamic_Props::get( $order, 'payment', 'token' ) );
506507
$address = new Addresses\Customer_Address();
507508
$address->set_from_order( $order );
508509

@@ -599,43 +600,46 @@ public function get_order( $order_id ) {
599600

600601
$order = parent::get_order( $order_id );
601602

603+
// Get payment info from the order object.
604+
$payment = Dynamic_Props::get( $order, 'payment', null, new \stdClass() );
605+
602606
// payment info
603607
if ( SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-account-number' ) && ! SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-payment-token' ) ) {
604608

605609
// common attributes
606-
$order->payment->account_number = str_replace( array( ' ', '-' ), '', SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-account-number' ) );
607-
$order->payment->last_four = substr( $order->payment->account_number, -4 );
610+
$payment->account_number = str_replace( array( ' ', '-' ), '', SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-account-number' ) );
611+
$payment->last_four = substr( $payment->account_number, -4 );
608612

609613
if ( $this->is_credit_card_gateway() ) {
610614

611615
// credit card specific attributes
612-
$order->payment->card_type = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-card-type' );
613-
$order->payment->exp_month = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-exp-month' );
614-
$order->payment->exp_year = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-exp-year' );
616+
$payment->card_type = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-card-type' );
617+
$payment->exp_month = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-exp-month' );
618+
$payment->exp_year = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-exp-year' );
615619

616620
// add card type for gateways that don't require it displayed at checkout
617-
if ( empty( $order->payment->card_type ) ) {
618-
$order->payment->card_type = SV_WC_Payment_Gateway_Helper::card_type_from_account_number( $order->payment->account_number );
621+
if ( empty( $payment->card_type ) ) {
622+
$payment->card_type = SV_WC_Payment_Gateway_Helper::card_type_from_account_number( $payment->account_number );
619623
}
620624

621625
// handle single expiry field formatted like "MM / YY" or "MM / YYYY"
622626
if ( SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-expiry' ) ) {
623-
[ $order->payment->exp_month, $order->payment->exp_year ] = array_map( 'trim', explode( '/', SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-expiry' ) ) );
627+
[ $payment->exp_month, $payment->exp_year ] = array_map( 'trim', explode( '/', SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-expiry' ) ) );
624628
}
625629

626630
// add CSC if enabled
627631
if ( $this->csc_enabled() ) {
628-
$order->payment->csc = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-csc' );
632+
$payment->csc = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-csc' );
629633
}
630634

631635
} elseif ( $this->is_echeck_gateway() ) {
632636

633637
// echeck specific attributes
634-
$order->payment->routing_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-routing-number' );
635-
$order->payment->account_type = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-account-type' );
636-
$order->payment->check_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-check-number' );
637-
$order->payment->drivers_license_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-drivers-license-number' );
638-
$order->payment->drivers_license_state = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-drivers-license-state' );
638+
$payment->routing_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-routing-number' );
639+
$payment->account_type = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-account-type' );
640+
$payment->check_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-check-number' );
641+
$payment->drivers_license_number = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-drivers-license-number' );
642+
$payment->drivers_license_state = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-drivers-license-state' );
639643

640644
}
641645

@@ -644,36 +648,39 @@ public function get_order( $order_id ) {
644648
// paying with tokenized payment method (we've already verified that this token exists in the validate_fields method)
645649
$token = $this->get_payment_tokens_handler()->get_token( $order->get_user_id(), $token_value );
646650

647-
$order->payment->token = $token->get_id();
648-
$order->payment->account_number = $token->get_last_four();
649-
$order->payment->last_four = $token->get_last_four();
651+
$payment->token = $token->get_id();
652+
$payment->account_number = $token->get_last_four();
653+
$payment->last_four = $token->get_last_four();
650654

651655
if ( $this->is_credit_card_gateway() ) {
652656

653657
// credit card specific attributes
654-
$order->payment->card_type = $token->get_card_type();
655-
$order->payment->exp_month = $token->get_exp_month();
656-
$order->payment->exp_year = $token->get_exp_year();
658+
$payment->card_type = $token->get_card_type();
659+
$payment->exp_month = $token->get_exp_month();
660+
$payment->exp_year = $token->get_exp_year();
657661

658662
if ( $this->csc_enabled_for_tokens() ) {
659-
$order->payment->csc = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-csc' );
663+
$payment->csc = SV_WC_Helper::get_posted_value( 'wc-' . $this->get_id_dasherized() . '-csc' );
660664
}
661665

662666
} elseif ( $this->is_echeck_gateway() ) {
663667

664668
// echeck specific attributes
665-
$order->payment->account_type = $token->get_account_type();
669+
$payment->account_type = $token->get_account_type();
666670
}
667671

668672
// make this the new default payment token
669673
$this->get_payment_tokens_handler()->set_default_token( $order->get_user_id(), $token );
670674
}
671675

672676
// standardize expiration date year to 2 digits
673-
if ( ! empty( $order->payment->exp_year ) && 4 === strlen( $order->payment->exp_year ) ) {
674-
$order->payment->exp_year = substr( $order->payment->exp_year, 2 );
677+
if ( ! empty( $payment->exp_year ) && 4 === strlen( $payment->exp_year ) ) {
678+
$payment->exp_year = substr( $payment->exp_year, 2 );
675679
}
676680

681+
// Set payment info on the order object.
682+
Dynamic_Props::set( $order, 'payment', $payment );
683+
677684
/**
678685
* Direct Gateway Get Order Filter.
679686
*
@@ -706,16 +713,16 @@ protected function do_check_transaction( $order, $response = null ) {
706713
// success! update order record
707714
if ( $response->transaction_approved() ) {
708715

709-
$last_four = substr( $order->payment->account_number, -4 );
716+
$last_four = substr( Dynamic_Props::get( $order, 'payment', 'account_number', '' ), -4 );
710717

711718
// check order note. there may not be an account_type available, but that's fine
712719
/* translators: Placeholders: %1$s - Payment method title, %2$s - Payment account type (savings/checking) (may or may not be available), %3$s - Last four digits of the account */
713-
$message = sprintf( esc_html__( '%1$s Check Transaction Approved: %2$s account ending in %3$s', 'woocommerce-plugin-framework' ), $this->get_method_title(), $order->payment->account_type, $last_four );
720+
$message = sprintf( esc_html__( '%1$s Check Transaction Approved: %2$s account ending in %3$s', 'woocommerce-plugin-framework' ), $this->get_method_title(), Dynamic_Props::get( $order, 'payment', 'account_type' ), $last_four );
714721

715722
// optional check number
716-
if ( ! empty( $order->payment->check_number ) ) {
723+
if ( ! empty( Dynamic_Props::get( $order, 'payment', 'check_number' ) ) ) {
717724
/* translators: Placeholder: %s - Bank check number */
718-
$message .= '. ' . sprintf( esc_html__( 'Check number %s', 'woocommerce-plugin-framework' ), $order->payment->check_number );
725+
$message .= '. ' . sprintf( esc_html__( 'Check number %s', 'woocommerce-plugin-framework' ), Dynamic_Props::get( $order, 'payment', 'check_number' ) );
719726
}
720727

721728
// adds the transaction id (if any) to the order note
@@ -771,12 +778,12 @@ protected function do_credit_card_transaction( $order, $response = null ) {
771778
// success! update order record
772779
if ( $response->transaction_approved() ) {
773780

774-
$account_number = ! empty( $order->payment->account_number ) ? $order->payment->account_number : null;
781+
$account_number = ! empty( Dynamic_Props::get( $order, 'payment', 'account_number' ) ) ? Dynamic_Props::get( $order, 'payment', 'account_number' ) : null;
775782
$last_four = $account_number ? substr( $account_number, -4 ) : '';
776783

777784
// use direct card type if set, or try to guess it from card number
778-
if ( ! empty( $order->payment->card_type ) ) {
779-
$card_type = $order->payment->card_type;
785+
if ( ! empty( Dynamic_Props::get( $order, 'payment', 'card_type' ) ) ) {
786+
$card_type = Dynamic_Props::get( $order, 'payment', 'card_type' );
780787
} elseif ( $first_four = $account_number ? substr( $account_number, 0, 4 ) : '' ) {
781788
$card_type = SV_WC_Payment_Gateway_Helper::card_type_from_account_number( $first_four );
782789
} else {
@@ -806,12 +813,12 @@ protected function do_credit_card_transaction( $order, $response = null ) {
806813
}
807814

808815
// add the expiry date if it is available
809-
if ( ! empty( $order->payment->exp_month ) && ! empty( $order->payment->exp_year ) ) {
816+
if ( ! empty( Dynamic_Props::get( $order, 'payment', 'exp_month' ) ) && ! empty( Dynamic_Props::get( $order, 'payment', 'exp_year' ) ) ) {
810817

811818
$message .= ' ' . sprintf(
812819
/* translators: Placeholder: %s - Credit card expiry date */
813820
__( '(expires %s)', 'woocommerce-plugin-framework' ),
814-
$order->payment->exp_month . '/' . substr( $order->payment->exp_year, -2 )
821+
Dynamic_Props::get( $order, 'payment', 'exp_month', '' ) . '/' . substr( Dynamic_Props::get( $order, 'payment', 'exp_year', '' ), -2 )
815822
);
816823
}
817824

@@ -1131,13 +1138,14 @@ protected function get_order_for_add_payment_method() {
11311138
$order->set_props( $properties );
11321139

11331140
// other default info
1134-
$order->customer_id = $this->get_customer_id( $order->get_user_id() );
1141+
Dynamic_Props::set( $order, 'customer_id', $this->get_customer_id( $order->get_user_id() ) );
11351142

11361143
/* translators: Placeholders: %1$s - site title, %2$s - customer email. Payment method as in a specific credit card, e-check or bank account */
1137-
$order->description = sprintf( esc_html__( '%1$s - Add Payment Method for %2$s', 'woocommerce-plugin-framework' ), sanitize_text_field( SV_WC_Helper::get_site_name() ), $properties['billing_email'] );
1144+
$description = sprintf( esc_html__( '%1$s - Add Payment Method for %2$s', 'woocommerce-plugin-framework' ), sanitize_text_field( SV_WC_Helper::get_site_name() ), $properties['billing_email'] );
1145+
Dynamic_Props::set( $order, 'description', $description );
11381146

11391147
// force zero amount
1140-
$order->payment_total = '0.00';
1148+
Dynamic_Props::set( $order, 'payment_total', '0.00' );
11411149

11421150
/**
11431151
* Direct Gateway Get Order for Add Payment Method Filter.
@@ -1168,12 +1176,12 @@ protected function add_add_payment_method_customer_data( $order, $response ) {
11681176
// set customer ID from response if available
11691177
if ( $this->supports_customer_id() && method_exists( $response, 'get_customer_id' ) && $response->get_customer_id() ) {
11701178

1171-
$order->customer_id = $customer_id = $response->get_customer_id();
1179+
Dynamic_Props::set( $order, 'customer_id', $customer_id = $response->get_customer_id() );
11721180

11731181
} else {
11741182

11751183
// default to the customer ID on "order"
1176-
$customer_id = $order->customer_id;
1184+
$customer_id = Dynamic_Props::get( $order, 'customer_id' );
11771185
}
11781186

11791187
// update the user
@@ -1283,7 +1291,7 @@ public function transaction_forced() {
12831291
*/
12841292
protected function should_tokenize_before_sale( \WC_Order $order ): bool {
12851293

1286-
$result = $this->get_payment_tokens_handler()->should_tokenize() && ( '0.00' === $order->payment_total || $this->tokenize_before_sale() );
1294+
$result = $this->get_payment_tokens_handler()->should_tokenize() && ( '0.00' === Dynamic_Props::get( $order, 'payment_total' ) || $this->tokenize_before_sale() );
12871295

12881296
/**
12891297
* Filters whether tokenization should be performed before the sale, for a given order.
@@ -1374,7 +1382,7 @@ protected function can_tokenize_with_or_after_sale( \WC_Order $order ): bool {
13741382
*/
13751383
return apply_filters(
13761384
"wc_payment_gateway_{$this->get_id()}_can_tokenize_with_or_after_sale",
1377-
$order->payment_total > 0,
1385+
Dynamic_Props::get( $order, 'payment_total' ) > 0,
13781386
$order,
13791387
$this
13801388
);
@@ -1411,7 +1419,7 @@ protected function should_skip_transaction( \WC_Order $order ): bool {
14111419
return apply_filters(
14121420
"wc_payment_gateway_{$this->get_id()}_should_skip_transaction",
14131421
// the order amount will be $0 if a WooCommerce Subscriptions free trial product is being processed
1414-
( '0.00' === $order->payment_total && ! $this->transaction_forced() ),
1422+
( '0.00' === Dynamic_Props::get( $order, 'payment_total' ) && ! $this->transaction_forced() ),
14151423
$order,
14161424
$this
14171425
);

0 commit comments

Comments
 (0)