* Use PHP 7.4 for WooCommerce Blocks' `wp-env` Config (#51075)
This resolves a PHP 7.4 compatibility problem as well as updates the `wp-env` config for the Blocks tests to use 7.4 rather than the latest.
* Prep for cherry pick 51075
---------
Co-authored-by: Christopher Allford <6451942+ObliviousHarmony@users.noreply.github.com>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
* Revert "Store API: Do not resume orders with `pending` status (#50531)" (#51067)
* Revert "Store API: Do not resume orders with `pending` status (#50531)"
This reverts commit 3170acd1b0.
* Add changefile(s) from automation for the following project(s): woocommerce
---------
Co-authored-by: github-actions <github-actions@github.com>
* Prep for cherry pick 51067
---------
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
* Update woocommerce shipping promo banner [wc-shipping-188] (#50970)
* Make sure the WC Shipping slug is used for installation
* Make sure the check to show banner metabox work for HPOS as well
* Make ShippingLabelBannerDisplayRules::order_has_shippable_products work with HPOS as well
* Remove Jetpack plugin specific checks in ShippingLabelBannerDisplayRules
* Use correct variable names for dotcom connection
* Fix comments
* Remove depenency on WCS&T for showing WC Shipping promo banner
* Remove WC Tax and WC Shipping from incompatible plugins
* Vary action button label if WCS&T is already installed
* Inject config and render label purchase app after activation
* Open the purchase modal after adding it to DOM
* Render Shipment tracking metabox
* Use a different headline when WCS&T is already installed
* Fix UX when a none-compatible WCS&T is already active
* Fix CSS linting issues
* Fix Jslint issues
* Improve around usage of localized variables
* Fix and update JS tests
* Address phpcs issues
* Delete metaboxes of compatible WCS&T
* Remove redundant variable assignment
* Remove css and js of WCS&T if a compatible version is installed
* Fix failing legacy PHPUnit tests
* Only open the new label purchase modal if WCS&T is not active
* Remove redundant code around TOS acceptance for showing the banner
* Remove redundant test for Jetpack version checking
* Make sure target passed to MutationObserver.observe is available
* Add changelog file
* Add openWcsModal to component's prototype
* Add more js unit tests
* Address PHP notice
* Remove redundant variable assignments
* Rename wcsPluginSlug to more clear wcShippingPluginSlug
* Add a link to plugins page if incompatible WCS&T is already installed
* Remove unused function parameters
* Fix API resource path
* Handle a case where none compatible version of WCShipping is installed
* Prep for cherry pick 50970
* Remove infant use statement
---------
Co-authored-by: Sam Najian <dev@najian.info>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
Co-authored-by: Sam Najian <sam.najian@automattic.com>
* Ensure stock change notifications only fire when necessary (#51001)
* Ensure stock change notifs only fire when necessary
In #49583 we changed when the actions that trigger stock change
notifications fire, to decouple them from order creation. However, it
turns out what during product creation, the stock quantity update
routines still run even when no stock is being set and even when the
"manage stock" setting is set to false. Rather than try to untangle the
web of why this happens (and potentially break other things in the
process), this simply adds a check for the "manage stock" setting prior
to firing the notif actions, and bail early if the product does not have
managed stock.
It also adds a unit test, which is really more of an integration test,
to ensure this behavior.
Fixes#50958
* Remove irrelevant doc block info
In #49583 we added a second parameter to the
`woocommerce_variation_set_stock` and `woocommerce_product_set_stock`
action hooks, but it was later removed. However, we didn't remove the
corresponding doc block info.
* Add changelog file
---------
Co-authored-by: Naman Malhotra <naman03malhotra@gmail.com>
* Prep for cherry pick 51001
---------
Co-authored-by: Corey McKrill <916023+coreymckrill@users.noreply.github.com>
Co-authored-by: Naman Malhotra <naman03malhotra@gmail.com>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
* CYS - Remove usage of `prepare_item_for_response` function in `Images` endpoint (#50923)
* Remove usage of `prepare_item_for_response` function
* Add changefile(s) from automation for the following project(s): woocommerce
---------
Co-authored-by: github-actions <github-actions@github.com>
* Prep for cherry pick 50923
---------
Co-authored-by: Alba Rincón <albarin@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
* Ensure translation is loaded for new shared file in Checkout Block (#50892)
* Ensure translation is loaded for new shared file
* add other files
* Add changefile(s) from automation for the following project(s): woocommerce
---------
Co-authored-by: github-actions <github-actions@github.com>
* Prep for cherry pick 50892
---------
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: WooCommerce Bot <no-reply@woocommerce.com>
* Revert "PluginUtil: Add method to get active valid plugins (#48709)"
This reverts commit 4d68cd486e.
* Reintroduce get_all_active_valid_plugins public function after revert (#50885)
Retroduce get_all_active_valid_plugins public function after revert
---------
Co-authored-by: Naman Malhotra <naman03malhotra@gmail.com>
* Use stricter text selector
Removes text ambiguity to avoid errors like "Strict mode violation resolved to 2 elements". For instance, it might search for "Settings", and there might be a menu "Foo Settings" which would resolve to 2 elements. This changes the behavior to match the exact test, instead of a substring.
* Update page-loads.spec.js
* Add changefile(s) from automation for the following project(s): woocommerce
---------
Co-authored-by: github-actions <github-actions@github.com>
This ensures the WC() session object is initialized before attempting to
get chosen shipping methods. If it's not initialized,
`wc_get_chosen_shipping_method_ids` will return an empty array.
Fixes#50283
- Add code docs to the Analytics classes and make get_order_statuses non-internal.
Document analytics classes and some methods. Add simple examples of how to use it. Give a brief "why?" and "when?" answers. Add links between related classes.
- Replace `Automattic\WooCommerce\Admin\API\Reports\*\Query` classes with a single `GenericQuery` class.
- Reduce the amount of duplicated code in Analytics `DataStore`s.
- Reduce duplicated code in Analytics controllers
- Add `FilteredGetDataTrait`, `OrderAwareControllerTrait`, and `StatsDataStoreTrait` for extension developers to reuse while creating custom Analytics
- Add a `GenericQuery` to reduce duplicated code in Query classes.
Also, to expose it to community extensions for reuse.
- Use `GenericQuery` instead of duplicated `Query` classes
- Move caching code to shared `DataStore::get_data`
- Move intervals specific `initialize_queries` to shared Trait
- Move intervals checking logic to shared `StatsDataStoreTrait`
- Reuse `GenericController::prepare_item_for_response` for `Reports\Controller` subclasses
- Reuse `GenericController::get_collection_params` for `Reports\Controller` subclasses.
- Move `get_items` code to shared `GenericStatsController`
- Move shared paginable controllers `get_items` code to the generic class
- Move fields param to `GenericStatsController`
- Separate `OrderAwareControllerTrait` from `ReportController`
to allow specific Analytics Controllers to extend the `Generic(Stats)Controller` directly, without extending the `ReportController`, which is used to list reports.
It's meant not to change any behavior. However, due to unification, it did tweak a few things mostly from the developer perspective:
- Previously, only some controllers threw an error from `get_items` when the data was missing; some did not. Now controllers the following Controllers changed behavior to also for such an error:
- Coupons
- Customers
- Downloads
- Orders
- Products
- Taxes
- the error has one error code from all controllers:`woocommerce_rest_reports_invalid_response` (previously there were report-specific)
- `woocommerce_rest_reports_categories_invalid_response` -> `woocommerce_rest_reports_invalid_response`
- In Orders Controller, the `$orders_data['order_number'], $orders_data['total_formatted']` are set in the `prepare_item_for_response` method, not in the `get_items`So `prepare_item_for_response` function is expected to be called with bare data from Query
- In Products Controller extended-info is now sanitized in the `prepare_item_for_response` method, not in the `get_items`
- ⚠️ (breaking) Previosly some Controlers' `prepare_item_for_response` function was getting and expecting first argument to be casted to `object`, while the rest of controllers used data as returned from the Store. This PR unifies this behavior for
- `Coupons\Stats\Controller`
- `Taxes\Controller`
- `Taxes\Stats\Controller`
So, if you extend those classes and override `prepare_item_for_response` in a way that expects `object`, you will get an error. (I have not found such cases in the `all-plugins` repo.)
All `woocommerce_rest_prepare_report_*` filters remain intact and inconsistent for backward compatibility.
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Mik <mikkamp@users.noreply.github.com>
* Fixed minor issues with recently added snippets docs
Fixed a few duplicate titles and encoding issues in the docs that were recently added via public resources.
* Create docs-check_payment_method_support
* update manifest
* fix linter errors
---------
Co-authored-by: Yaku <15178758+jacoswan@users.noreply.github.com>
* CYS - Move the ai/store-title endpoint to woocommerce admin api
* Add middleware and callback
* Add changefile(s) from automation for the following project(s): woocommerce
* Fix lint error
* CYS - Move the ai/business-description endpoint to woocommerce admin API
* CYS - Move the ai/store-info endpoint to woocommerce admin API
* Update endpoint
* CYS - Move the ai/images endpoint to woocommerce admin API
* CYS - Move the `ai/patterns` endpoint to woocommerce admin API
* CYS - Move the `ai/product` endpoint to woocommerce admin API
* Add changefile(s) from automation for the following project(s): woocommerce
* Remove import
* Add changefile(s) from automation for the following project(s): woocommerce-beta-tester, woocommerce
* Add changefile(s) from automation for the following project(s): woocommerce
* Add strict types
* Extract AI_CONTENT_GENERATED constant
* Move instance creating to where it's used
* Add try/catch and fix the on Patterns
* Use the base AIEndpoint class
* Fix endpoint
* Update comment return type
* Fix comments
---------
Co-authored-by: github-actions <github-actions@github.com>
* Add function to clear system status theme info cache to tool page
* Add clear cache tooltip to the template override section
* Add changefile(s) from automation for the following project(s): woocommerce
* Remove extra td
---------
Co-authored-by: github-actions <github-actions@github.com>
* Update makup of add to cart success message
* Update CSS to position the add to cart success message content
* Focus notice message after page loads
* Add changelog file
* Remove tabindex attribute from add-to-cart success message
* Update tests for the add-to-cart success message
* Remove white space on test
* Increase delay before focusing the error message
* Cobine delay with queue method
* Remove unnecessary woocommerce-notice-content class
* Swap view cart link order in notice
* Remove woocommerce-notice-content wrapper
* Refactor to vanilla JS code that focus on notice message
---------
Co-authored-by: Manish Menaria <the.manish.menaria@gmail.com>
* Match shop page when permalink structure is set to plain
* Revert uninteded change
* Match post types
* Check for param
* Add test for post_type check
* Fix tests
* Add changefile(s) from automation for the following project(s): woocommerce
* Use wp_parse_url
* Test returning false
* Lint fixes
---------
Co-authored-by: github-actions <github-actions@github.com>