Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix deprecated strtolower on order received page #8387

Merged

Conversation

reykjalin
Copy link
Contributor

@reykjalin reykjalin commented Mar 15, 2024

Fixes #8232

Changes proposed in this Pull Request

  • Make sure order currency is initialized in the FrontendCurrencies class by the time the decimal point formatting function is called.

Testing instructions

  1. Make sure your store is running on PHP 8.1 or newer.
  2. Place an order.
  3. Open the Order Received page.
  4. Make sure there are no deprecation warnings.
  5. Go to My Account → Orders and view one of the orders.
  6. Make sure there are no deprecation warnings.

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@botwoo
Copy link
Collaborator

botwoo commented Mar 15, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 8387 or branch name fix/8232-deprecated-strtolower-on-order-received-page in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: 0819154
  • Build time: 2024-03-18 19:06:29 UTC

Note: the build is updated when a new commit is pushed to this PR.

@reykjalin
Copy link
Contributor Author

@jessepearson I'm unhappy with the implementation here (querying the DB directly, getting the ID from the URL is hacky, checking which page we're on via backtrace seems hacky, and there's only one place where we try to re-initialize the order currency) but wanted to get your 👀 on this to see what you think of the overall approach?

It fixes the issue on both the order received page as well as viewing the order details under the My Account → Orders page.

But it all just feels a bit hacky. Not really sure what else to do though. We basically need the order currency during the wc_get_price_decimal_separator hook, and we haven't called any function to set up the order currency by that point. And AFAICT there's no way to get the order currency except via direct query to the DB.

There's some more context in my comments on the issue #8232 but this is the gist of it.

Would love to pick your brain on this a bit.

Copy link
Contributor

github-actions bot commented Mar 15, 2024

Size Change: 0 B

Total Size: 1.19 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.06 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.06 kB
release/woocommerce-payments/assets/css/success.css 158 B
release/woocommerce-payments/assets/css/success.rtl.css 158 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 1.92 kB
release/woocommerce-payments/dist/blocks-checkout.css 1.91 kB
release/woocommerce-payments/dist/blocks-checkout.js 54 kB
release/woocommerce-payments/dist/cart.js 4.2 kB
release/woocommerce-payments/dist/checkout-rtl.css 405 B
release/woocommerce-payments/dist/checkout.css 406 B
release/woocommerce-payments/dist/checkout.js 36.9 kB
release/woocommerce-payments/dist/index-rtl.css 40 kB
release/woocommerce-payments/dist/index.css 40 kB
release/woocommerce-payments/dist/index.js 291 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.05 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.28 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 59.4 kB
release/woocommerce-payments/dist/multi-currency.css 3.29 kB
release/woocommerce-payments/dist/multi-currency.js 54.4 kB
release/woocommerce-payments/dist/order-rtl.css 719 B
release/woocommerce-payments/dist/order.css 721 B
release/woocommerce-payments/dist/order.js 41.7 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.css 1.21 kB
release/woocommerce-payments/dist/payment-gateways.js 38.4 kB
release/woocommerce-payments/dist/payment-request-rtl.css 155 B
release/woocommerce-payments/dist/payment-request.css 155 B
release/woocommerce-payments/dist/payment-request.js 12.4 kB
release/woocommerce-payments/dist/product-details-rtl.css 155 B
release/woocommerce-payments/dist/product-details.css 155 B
release/woocommerce-payments/dist/product-details.js 9.09 kB
release/woocommerce-payments/dist/settings-rtl.css 11 kB
release/woocommerce-payments/dist/settings.css 10.8 kB
release/woocommerce-payments/dist/settings.js 199 kB
release/woocommerce-payments/dist/subscription-edit-page.js 669 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 527 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 19.4 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 710 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 18.5 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 236 B
release/woocommerce-payments/dist/tos.js 21 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 4.32 kB
release/woocommerce-payments/dist/woopay-express-button-rtl.css 155 B
release/woocommerce-payments/dist/woopay-express-button.css 155 B
release/woocommerce-payments/dist/woopay-express-button.js 21.1 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.44 kB
release/woocommerce-payments/dist/woopay.css 4.41 kB
release/woocommerce-payments/dist/woopay.js 71 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 622 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 812 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.43 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.01 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 522 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 581 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 160 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.37 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.5 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.37 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.03 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 291 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 403 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 299 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 742 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 572 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 411 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.8 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.83 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 544 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.6 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 502 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 355 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 429 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 781 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.1 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.27 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 392 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.05 kB

compressed-size-action

@reykjalin reykjalin changed the title Fix/8232 deprecated strtolower on order received page Fix deprecated strtolower on order received page Mar 15, 2024
@jessepearson
Copy link
Contributor

I feel like what you're doing is similar to what init_order_currency_from_query_vars is doing, I am just not sure if that approach can be used here. Maybe if $arg is null when init_order_currency is called you can see if $wp->query_vars has the order number to reduce the amount of code.

I do agree that it seems hacky to get the order number from the URL, but we have to do that when it's not available, unfortunately.

You mentioned that the wc_get_order call within init_order_currency is creating a cyclic call. Is it possible to remove actions/filters within init_order_currency before the call to wc_get_order and then add them back right after? There are instances within the WooCommerceSubscriptions compatibility class where we had to set a property in the class to make sure redundancies didn't happen, as well.

Dealing with these issues isn't easy because you can spend a couple days trying to solve the issue with different approaches and end up with like 4 lines of code to show for it.

@reykjalin
Copy link
Contributor Author

You mentioned that the wc_get_order call within init_order_currency is creating a cyclic call. Is it possible to remove actions/filters within init_order_currency before the call to wc_get_order and then add them back right after?

That was something I hadn't considered! I looked into this some more and you can take a look at the current approach. I think it's much better than the previous fix. Thanks for pointing me to this, I think that really helped improve the fix!

@reykjalin reykjalin requested review from a team and cesarcosta99 and removed request for a team March 16, 2024 00:25
@reykjalin reykjalin marked this pull request as ready for review March 16, 2024 00:26
Copy link
Contributor

@cesarcosta99 cesarcosta99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes look good and test well! No deprecated warning was noted on PHP 8.1 :shipit:

includes/multi-currency/FrontendCurrencies.php Outdated Show resolved Hide resolved
includes/multi-currency/FrontendCurrencies.php Outdated Show resolved Hide resolved
Copy link
Contributor

@cesarcosta99 cesarcosta99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 💯

@reykjalin reykjalin added this pull request to the merge queue Mar 18, 2024
Merged via the queue into develop with commit 86af532 Mar 18, 2024
25 of 26 checks passed
@reykjalin reykjalin deleted the fix/8232-deprecated-strtolower-on-order-received-page branch March 18, 2024 19:36
Jinksi added a commit that referenced this pull request Mar 28, 2024
Co-authored-by: Eric Jinks <3147296+Jinksi@users.noreply.github.com>
Co-authored-by: Miguel Gasca <miguel.gasca@automattic.com>
Co-authored-by: deepakpathania <68396823+deepakpathania@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants