Replace the usage of `// @codingStandardsIgnoreStart` and `// @codingStandardsIgnoreEnd` with `// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores` on WC_Gateway_Paypal_IPN_Handler::check_response(). Ignoring a single PHPCS rule is better than ignoring everything to protect the line against potential violations of the other rules.
Commit c7a3fd2 changed the logic to check if the refund is a full refund to use the strict equal operator (`===`) in the following line:
25be9fc13c/includes/gateways/paypal/includes/class-wc-gateway-paypal-ipn-handler.php (L295)
This change broke the comparison as `$order->get_total()` will return the value respecting the number of decimals after the decimal point set in the option `woocommerce_price_num_decimals` and `wc_format_decimal()`, when called without a second parameter, will not format the received value to use the same number of decimals set in `woocommerce_price_num_decimals`. To fix this issue, this commit passes `wc_get_price_decimals()` as the second parameter to `wc_format_decimal()`. This way both values will always have the same number of decimals and the comparison should work when handling a full refund.
Fixes#20551
This PR introduces a check on the permission_id FK to ensure that it is not added multiple times on upgrades. It also names the key specifically to ensure future changes to the key can be targeted properly and removes old keys that were added since 3.4.0.
* Add FK check before adding the FK. Also give the FK a name to avoid auto generated names and duplicate keys.
* Remove additional OR
* Remove additional OR
* Final FK check query
* Add foreign key cleanup routine to 3.4.3 db version
* Only check on named foreign key now that we have a cleanup routine in place, use specific phpcignore
* Rework formatting of SQL query
* Change way to fetch and add FK, can't use procedural SQL, needs to be done via statements.
* Add table name to lookup
* Only clean up FK on the wc_download_log table
* Remove erenouse bracket
This commits improves the performance of the method WC_Query::get_layered_nav_chosen_attributes() when a site has a significant number of product attributes. Instead of looping over all existent product attributes to find which have been passed in the request, the new code loops over all the request parameters and checks which are valid product attributes.
On a test site with 2000 product attributes, the old version of WC_Query::get_layered_nav_chosen_attributes() was responsible for 25% of the shop page generation time. With the new version, the amount that this method contributes to the page generation time is negligible.
Related #20262