WooCommerce relies on the constant DB_NAME to display information about the database tables in the system status page. The problem is that this constant is not always defined (e.g., when the plugin HyperDB is used to replace the standard wpdb class). When that is the case, WooCommerce will incorrectly say that its core tables are missing and the following PHP warning will be generated:
```
Use of undefined constant DB_NAME - assumed 'DB_NAME' (this will throw an Error in a future version of PHP)
wp-content/plugins/woocommerce/includes/api/v2/class-wc-rest-system-status-v2-controller.php:708
```
To fix this, this commit checks to see if DB_NAME is defined before using it. When the constant is not set, WooCommerce will display the following message to the users instead of the list of supposedly missing tables:
```
Database information: Unable to retrieve database information. Usually, this is not a problem, and it only means that your install is using a class that replaces the WordPress database class (e.g., HyperDB) and WooCommerce is unable to get database information.
```
This commit introduces a banner that notifies and prompts users to upgrade their WordPress and/or PHP if they are outdated and not part of the minimum required versions going into WooCommerce 3.7.
* Add backward compatible function wp_check_php_version for sites running WP version smaller than 5.1
* Refactor some messaging, move widget to top of WC dashboard widgets, add buttons linking out to WP pages with instructions.
* Add missing variables for adding nag class
* Add styling to dashboard widget
* Rework css to use exclamation instead
* Clean up widget, make sure no widget is registered when dismissed. Add banner that links to widget and make it dismissable.
* Update constant to reflect minimum requirements.
* Don't show banner. Fix undefined variable.
* Remove dashboard widget
* Update banner link to docs site
* Add link to docs page where instructions live for updating
* Change button text
* Add UTM params to docs link
* Moved the msg logic from template to php file.
* Bail out early when PHP and WP versions are ok.
* Added missing translation functiog
* Extracted notice function from reset_admin_notices.
To follow suit with other similar functions in the file.
* Synchronize fetching of WP version.
* Removed unused functions.
* Corrected indent.
* Reduce number of variables and fixed coding standards
* Updated wording of the notice.
Display WooCommerce > Statis > Log timestamp, when using WC_Log_Handler_DB, with the Y-m-d H:i:s format instead of the WordPress global date and time format options, because we need more detail on the shown timestamps and that might not be compatible with what we want for our global options.
- replace "Print shipping labels at home" heading with
"Did you know you can print shipping labels at home?"
- Use new description for WooCommerce Services:
"'Use WooCommerce Shipping (powered by WooCommerce Services & Jetpack)
to save time at the post office by printing your shipping labels
at home."
- do not capitalize post office
In #23690 we implemented a few changes to the logic to decide which
payment gateways to display in the onboarding wizard. When working on
this code, we noticed that there was a bit of duplication in it that was
not necessary (see
https://github.com/woocommerce/woocommerce/pull/23690#discussion_r284004924).
We opted to remove this duplication in a different commit, since that PR
was included in a patch release.
This commits changes the query used to get the number of low stock
products in the WooCommerce Status widget in the admin dashboard. This
query should only count published products and ignore products with
other statuses to match the behavior used in the low stock report.
In the query to get the number of out of stock products for the admin
dashboard widget, it is not necessary to use `1=1` and also not
necessary to use `posts.post_type IN ( 'product', 'product_variation' )`
as only products are added to wp_wc_product_meta_lookup.
The dismiss button in the WC admin notices `legacy_shipping` and `no_shipping_methods` was not fully clickable due to a custom CSS applied to them. This custom CSS was used to add a background image to those notices. More specifically, the problem was caused by the use of `position: relative` applied to `<p>` elements. I couldn't find an easy way to fix this problem keeping the custom background image, so I opted to remove it to make the design of all notices identical (besides the background image, the custom CSS also added a few other differences to those to notices like the font size of the notice title).
wc_update_product_stock reads product from the db twice, so if it's out of sync, strange things are happening.
Also, changes dependant on stock status might get reverted if local copy of $product is not updated after wc_update_product_stock.