2019-02-08 19:27:39 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Installation related functions and actions.
|
|
|
|
*/
|
|
|
|
|
2019-08-12 17:54:04 +00:00
|
|
|
namespace Automattic\WooCommerce\Admin;
|
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
|
2019-11-28 20:55:23 +00:00
|
|
|
use Automattic\WooCommerce\Admin\API\Reports\Cache;
|
2020-09-28 04:35:10 +00:00
|
|
|
use \Automattic\WooCommerce\Admin\Notes\Notes;
|
2019-08-02 18:05:38 +00:00
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
/**
|
2019-08-12 21:52:09 +00:00
|
|
|
* Install Class.
|
2019-02-08 19:27:39 +00:00
|
|
|
*/
|
2019-08-12 21:52:09 +00:00
|
|
|
class Install {
|
2019-02-08 19:27:39 +00:00
|
|
|
/**
|
|
|
|
* Plugin version option name.
|
|
|
|
*/
|
2020-01-17 00:08:29 +00:00
|
|
|
const VERSION_OPTION = 'woocommerce_admin_version';
|
2019-02-08 19:27:39 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* DB updates and callbacks that need to be run per version.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
2019-10-10 20:54:44 +00:00
|
|
|
protected static $db_updates = array(
|
|
|
|
'0.20.1' => array(
|
|
|
|
'wc_admin_update_0201_order_status_index',
|
|
|
|
'wc_admin_update_0201_db_version',
|
|
|
|
),
|
2019-11-22 15:06:14 +00:00
|
|
|
'0.23.0' => array(
|
|
|
|
'wc_admin_update_0230_rename_gross_total',
|
|
|
|
'wc_admin_update_0230_db_version',
|
|
|
|
),
|
2020-02-20 11:59:02 +00:00
|
|
|
'0.25.1' => array(
|
|
|
|
'wc_admin_update_0251_remove_unsnooze_action',
|
|
|
|
'wc_admin_update_0251_db_version',
|
|
|
|
),
|
2020-06-10 13:33:30 +00:00
|
|
|
'1.1.0' => array(
|
2020-04-08 20:25:59 +00:00
|
|
|
'wc_admin_update_110_remove_facebook_note',
|
2020-05-08 19:35:06 +00:00
|
|
|
'wc_admin_update_110_db_version',
|
2020-04-08 20:25:59 +00:00
|
|
|
),
|
2020-06-10 14:16:56 +00:00
|
|
|
'1.3.0' => array(
|
|
|
|
'wc_admin_update_130_remove_dismiss_action_from_tracking_opt_in_note',
|
2020-06-24 12:23:35 +00:00
|
|
|
'wc_admin_update_130_db_version',
|
2020-06-10 14:16:56 +00:00
|
|
|
),
|
2020-07-08 00:15:00 +00:00
|
|
|
'1.4.0' => array(
|
|
|
|
'wc_admin_update_140_change_deactivate_plugin_note_type',
|
2020-07-16 16:08:40 +00:00
|
|
|
'wc_admin_update_140_db_version',
|
2020-07-08 00:15:00 +00:00
|
|
|
),
|
2020-09-17 17:50:49 +00:00
|
|
|
'1.6.0' => array(
|
|
|
|
'wc_admin_update_160_remove_facebook_note',
|
|
|
|
'wc_admin_update_160_db_version',
|
|
|
|
),
|
2020-11-06 17:53:03 +00:00
|
|
|
'1.7.0' => array(
|
|
|
|
'wc_admin_update_170_homescreen_layout',
|
|
|
|
'wc_admin_update_170_db_version',
|
|
|
|
),
|
2021-09-02 21:40:02 +00:00
|
|
|
'2.7.0' => array(
|
2021-09-21 19:06:49 +00:00
|
|
|
'wc_admin_update_270_delete_report_downloads',
|
2021-09-02 21:40:02 +00:00
|
|
|
'wc_admin_update_270_db_version',
|
|
|
|
),
|
2021-09-24 17:04:43 +00:00
|
|
|
'2.7.1' => array(
|
|
|
|
'wc_admin_update_271_update_task_list_options',
|
|
|
|
'wc_admin_update_271_db_version',
|
|
|
|
),
|
2021-09-23 07:45:54 +00:00
|
|
|
'2.8.0' => array(
|
|
|
|
'wc_admin_update_280_order_status',
|
|
|
|
'wc_admin_update_280_db_version',
|
|
|
|
),
|
2021-10-08 21:01:12 +00:00
|
|
|
'2.9.0' => array(
|
|
|
|
'wc_admin_update_290_update_apperance_task_option',
|
2021-11-29 21:04:34 +00:00
|
|
|
'wc_admin_update_290_delete_default_homepage_layout_option',
|
2021-10-08 21:01:12 +00:00
|
|
|
'wc_admin_update_290_db_version',
|
|
|
|
),
|
2021-11-25 01:44:30 +00:00
|
|
|
'3.0.0' => array(
|
|
|
|
'wc_admin_update_300_update_is_read_from_last_read',
|
|
|
|
'wc_admin_update_300_db_version',
|
|
|
|
),
|
2019-10-10 20:54:44 +00:00
|
|
|
);
|
2019-02-08 19:27:39 +00:00
|
|
|
|
2020-01-17 00:08:29 +00:00
|
|
|
/**
|
|
|
|
* Migrated option names mapping. New => old.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected static $migrated_options = array(
|
|
|
|
'woocommerce_onboarding_profile' => 'wc_onboarding_profile',
|
|
|
|
'woocommerce_admin_install_timestamp' => 'wc_admin_install_timestamp',
|
|
|
|
'woocommerce_onboarding_opt_in' => 'wc_onboarding_opt_in',
|
|
|
|
'woocommerce_admin_import_stats' => 'wc_admin_import_stats',
|
|
|
|
'woocommerce_admin_version' => 'wc_admin_version',
|
|
|
|
'woocommerce_admin_last_orders_milestone' => 'wc_admin_last_orders_milestone',
|
|
|
|
'woocommerce_admin-wc-helper-last-refresh' => 'wc-admin-wc-helper-last-refresh',
|
|
|
|
'woocommerce_admin_report_export_status' => 'wc_admin_report_export_status',
|
2020-06-10 13:33:30 +00:00
|
|
|
'woocommerce_task_list_complete' => 'woocommerce_task_list_complete',
|
|
|
|
'woocommerce_task_list_hidden' => 'woocommerce_task_list_hidden',
|
2020-12-03 21:16:04 +00:00
|
|
|
'woocommerce_extended_task_list_complete' => 'woocommerce_extended_task_list_complete',
|
|
|
|
'woocommerce_extended_task_list_hidden' => 'woocommerce_extended_task_list_hidden',
|
2020-01-17 00:08:29 +00:00
|
|
|
);
|
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
/**
|
|
|
|
* Hook in tabs.
|
|
|
|
*/
|
|
|
|
public static function init() {
|
2020-03-13 18:42:01 +00:00
|
|
|
add_action( 'init', array( __CLASS__, 'check_version' ), 5 );
|
2019-02-08 19:27:39 +00:00
|
|
|
add_filter( 'wpmu_drop_tables', array( __CLASS__, 'wpmu_drop_tables' ) );
|
|
|
|
|
|
|
|
// Add wc-admin report tables to list of WooCommerce tables.
|
|
|
|
add_filter( 'woocommerce_install_get_tables', array( __CLASS__, 'add_tables' ) );
|
2020-01-17 00:08:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Migrate option values to their new keys/names.
|
|
|
|
*/
|
2020-05-08 22:26:46 +00:00
|
|
|
public static function migrate_options() {
|
|
|
|
wc_maybe_define_constant( 'WC_ADMIN_MIGRATING_OPTIONS', true );
|
Merge final `version/1.0` branch with `master` (https://github.com/woocommerce/woocommerce-admin/pull/3848)
* Try: Moving Customers to main Woo Menu (https://github.com/woocommerce/woocommerce-admin/pull/3632)
* Only add onboarding settings on wc-admin pages when task list should be shown. (https://github.com/woocommerce/woocommerce-admin/pull/3722)
* Use cron for unsnoozing admin notes (https://github.com/woocommerce/woocommerce-admin/pull/3662)
* Use wp-cron for admin note snoozing.
* Remove "unsnooze" scheduled action.
* Use correct version.
* Avoid using deprecated method for unscheduling actions.
* Onboarding: Fix toggle tracking events (https://github.com/woocommerce/woocommerce-admin/pull/3645)
* Fix errant wcadmin prefix on event name
* Track the onboarding toggle on the option in case enable_onboarding isn't used
* Move toggle actions to separate function
* Move onboarding actions
* Move onboarding filters
* Move help tab updates to add_toggle_actions
* Only run onboarding actions when enabled
* Onboarding: Add tracks events when profiler steps are completed (https://github.com/woocommerce/woocommerce-admin/pull/3726)
* Add tracks for store profiler step completion
* Record event when profiler is completed
* Ensure continue setup loads the onboarding profiler (https://github.com/woocommerce/woocommerce-admin/pull/3646)
* 'All that include' option removed when input field is empty (https://github.com/woocommerce/woocommerce-admin/pull/3700)
* 'All that include' option removed when input field is empty
Added a control to check that when the input field 'Search by customer name' is empty, the 'All that include' option is not appearing.
* Const name improved
The constant name hasValues was changed to optionsHaveValues (more descriptive)
* Fix select text alignment (https://github.com/woocommerce/woocommerce-admin/pull/3723)
* Stock panel indicator - cache and use lookup tables. (https://github.com/woocommerce/woocommerce-admin/pull/3729)
* Stock panel indicator - cache and use lookup tables.
* Revise query, clear transient on product update.
* Fix error, ht Josh.
* Checklist: Remove sideloaded images to reduce build size, take 2 (https://github.com/woocommerce/woocommerce-admin/pull/3731)
* Remove homepage template images.
* Use other-small on all industries, adjust text color.
* Remove background dim and opacity set to 0
* Fix/3631 (https://github.com/woocommerce/woocommerce-admin/pull/3730)
* Added CBD as an industry type
CBD was added as an industry type in API
* Industries options modified
Modified the industries options. Now we are able to choose if we will use an input or not in the option.
* API control changed for industries.
API control changed for industries. Now it accepts the data type we need.
* Added input in Industries list for the option "Other"
Added an input for the option "Other" in the industries list
* Added suggested changes in review comments.
* Added data preparation for recordEvent
* Changed variable to snake_case
The variable "industriesWithDetail" was changed to "industries_with_detail" (snake_case)
* Onboarding: Create homepage without redirect (https://github.com/woocommerce/woocommerce-admin/pull/3727)
* Add link to edit homepage instead of redirect
* Add busy state to homepage creation button
* Publish homepage on create via API
* Update homepage notice to show on first post update
* Update homepage creation notice per design
* Record event on customize homepage
* Set homepage to frontpage on creation
* Add deactivation note for feature plugin (https://github.com/woocommerce/woocommerce-admin/pull/3687)
* Add version deactivation note
* Add the note to deactivate if the version is older than the current WC version
* Deactivate wc admin feature plugin on action click
* Add notes version hooks
* change the Package class namespace to exclude from standalone autoloader
* add use statement for FeaturePlugin
* add note explaining namespace
* use wc-admin-deactivate-plugin note name
* Rename file and class to WC_Admin_Notes_Deactivate_Plugin
Co-authored-by: Ron Rennick <ron@ronandandrea.com>
Co-authored-by: Paul Sealock <psealock@gmail.com>
* Add Travis tests on GH for release branch (https://github.com/woocommerce/woocommerce-admin/pull/3751)
* Add Travis tests on GH for release branch
* fix linter errors
* ActivityPanels.php -> use public static functions
* Remove free text Search option when no query exists (https://github.com/woocommerce/woocommerce-admin/pull/3755)
* Revert changes in woocommerce/woocommerce-admin#3700
* Don't add free text search if no query exists
* Add tests for Search without query
* Add test for showing free text search option
* Fix image sideloading for store industries. (https://github.com/woocommerce/woocommerce-admin/pull/3743)
* Fix image sideloading for store industries.
Data format changed in https://github.com/woocommerce/woocommerce-admin/pull/3730
* Fix industry image sideload in cases where the count is less than requested.
* Be backwards compatible with the old industry data format.
* Added event props to identify stores with WCS and Jetpack installed (https://github.com/woocommerce/woocommerce-admin/pull/3750)
* Added event props to identify stores with WCS and Jetpack installed
Also, added Jeckpack connected status
* Improved variable name
* Simplified method
Simplified method. "intersection" check was removed
* Tests errors repeared
The method "clear_low_out_of_stock_count_transient" now is static.
* OBW: fix sideloading image test error (https://github.com/woocommerce/woocommerce-admin/pull/3762)
* Release 0.26.0 changes (https://github.com/woocommerce/woocommerce-admin/pull/3753)
* add deactivation hook to Package.php (https://github.com/woocommerce/woocommerce-admin/pull/3770)
* Add active version functions (https://github.com/woocommerce/woocommerce-admin/pull/3772)
* add active version functions to Package.php
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* 0.26.1 changes (https://github.com/woocommerce/woocommerce-admin/pull/3773)
* Customers Report: fix missing report param in search (https://github.com/woocommerce/woocommerce-admin/pull/3778)
* Product titles include encoded entities (https://github.com/woocommerce/woocommerce-admin/pull/3765)
* Stripped HTML from product titles and decoded before displaying them
Stripped html from product titles and entities are decoded before displaying them
* Stripped HTML from product titles and decoded in Stock report
Stripped html from product titles and entities are decoded before displaying them. Now in Stock report
* Added support for HTML tags and encoded entities on product titles
Added support for HTML tags and encoded entities on filtered product list, dropdown menus and tag names.
Also, strip_tags() function was replaced with wp_strip_all_tags() instead.
* strip_tags() function was replaced with wp_strip_all_tags() instead.
* Added control for a variable
Added control for "item->data" before applying wp_strip_all_tags method.
* pre-commit changes
* Test text corrected
* Enable taxes on automatic tax setup (https://github.com/woocommerce/woocommerce-admin/pull/3795)
* Update Country Labeling to Match Core (https://github.com/woocommerce/woocommerce-admin/pull/3790)
* Updated country labeling
Country labeling on Customer Report was updated
* Updated country labeling in other files
* remove .jitm-card notice padding (https://github.com/woocommerce/woocommerce-admin/pull/3814)
* OBW Connect: Fix requesting state (https://github.com/woocommerce/woocommerce-admin/pull/3786)
* OBW Connect: Fix requesting state
* pass down setIsPending
* setIspending propType
* defaultProps
* test
* Revert "test"
This reverts commit e921092b19401931cc1aec8ee84fa53c53b67f36.
* better comparison for redirect
* Fixes Taxes Report search bug and adds initial documentation. (https://github.com/woocommerce/woocommerce-admin/pull/3816)
* Initial Taxes Report documentation.
* Fix taxes endpoint search parameter.
* OBW: Fix retry plugin install button disappearing (https://github.com/woocommerce/woocommerce-admin/pull/3787)
* OBW: Fix retry plugin install btn disappearing
* try suggestion
* Revert "try suggestion"
This reverts commit 5b9386957a501ac3e729e5f16b0ee71c9d792859.
* Fix special character escaping in search. (https://github.com/woocommerce/woocommerce-admin/pull/3826)
* Properly prepare/escape special characters in Product search.
* Properly prepare/escape special characters in Coupon search.
* Properly prepare/escape special characters in Tax code search.
* Fix tracking on migrated options (https://github.com/woocommerce/woocommerce-admin/pull/3828)
* Don't track onboarding toggle if migrating options
* Prevent WC_Tracks from recording event post types not yet registered
* Activity Panels: Remove W Panel (https://github.com/woocommerce/woocommerce-admin/pull/3827)
* Remove W Notif Panel.
* Add back in trapping logic, and hide on non-embed pages.
* add npm run test:zip command (https://github.com/woocommerce/woocommerce-admin/pull/3823)
* add npm run test:zip command
* 1.0.0 release changes🎉 (https://github.com/woocommerce/woocommerce-admin/pull/3831)
* 1.0.0 release changes🎉
* changelog
* 0.26.1 changelog
* Add Report Extension Example: Add default props to ReportFilters (https://github.com/woocommerce/woocommerce-admin/pull/3830)
* ReportFilters component: Add sane defaults
* styles
* add required column
* add left join to sku ordering (https://github.com/woocommerce/woocommerce-admin/pull/3845)
* Deal with lint errors, and improperly merged files
* regenerate package-lock.json
* attempting to resolve package lock conflict.
Co-authored-by: Jeff Stieler <jeff.m.stieler@gmail.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Ron Rennick <ron@ronandandrea.com>
Co-authored-by: Fernando <ultimoround@gmail.com>
Co-authored-by: edmundcwm <edmundcwm@gmail.com>
Co-authored-by: Paul Sealock <psealock@gmail.com>
2020-03-10 02:47:39 +00:00
|
|
|
|
2020-05-08 22:26:46 +00:00
|
|
|
foreach ( self::$migrated_options as $new_option => $old_option ) {
|
|
|
|
$old_option_value = get_option( $old_option, false );
|
2020-01-17 00:08:29 +00:00
|
|
|
|
2020-05-08 22:26:46 +00:00
|
|
|
// Continue if no option value was previously set.
|
|
|
|
if ( false === $old_option_value ) {
|
|
|
|
continue;
|
|
|
|
}
|
2020-01-17 00:08:29 +00:00
|
|
|
|
2020-06-10 13:33:30 +00:00
|
|
|
if ( '1' === $old_option_value ) {
|
|
|
|
$old_option_value = 'yes';
|
|
|
|
} elseif ( '0' === $old_option_value ) {
|
|
|
|
$old_option_value = 'no';
|
|
|
|
}
|
|
|
|
|
2020-01-17 00:08:29 +00:00
|
|
|
update_option( $new_option, $old_option_value );
|
2020-06-10 13:33:30 +00:00
|
|
|
if ( $new_option !== $old_option ) {
|
|
|
|
delete_option( $old_option );
|
|
|
|
}
|
2020-01-17 00:08:29 +00:00
|
|
|
}
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check WC Admin version and run the updater is required.
|
|
|
|
*
|
|
|
|
* This check is done on all requests and runs if the versions do not match.
|
|
|
|
*/
|
|
|
|
public static function check_version() {
|
2019-11-19 23:23:27 +00:00
|
|
|
if ( defined( 'IFRAME_REQUEST' ) ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$version_option = get_option( self::VERSION_OPTION );
|
|
|
|
$requires_update = version_compare( get_option( self::VERSION_OPTION ), WC_ADMIN_VERSION_NUMBER, '<' );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* When included as part of Core, no `on_activation` hook as been called
|
|
|
|
* so there is no version in options. Make sure install gets called in this
|
|
|
|
* case as well as a regular version update
|
|
|
|
*/
|
|
|
|
if ( ! $version_option || $requires_update ) {
|
2019-02-08 19:27:39 +00:00
|
|
|
self::install();
|
2021-01-15 01:34:00 +00:00
|
|
|
/**
|
|
|
|
* WooCommerce Admin has been installed or updated.
|
|
|
|
*/
|
2019-12-05 23:06:11 +00:00
|
|
|
do_action( 'woocommerce_admin_updated' );
|
2021-01-15 01:34:00 +00:00
|
|
|
|
|
|
|
if ( ! $version_option ) {
|
|
|
|
/**
|
|
|
|
* WooCommerce Admin has been installed.
|
|
|
|
*/
|
|
|
|
do_action( 'woocommerce_admin_newly_installed' );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( $requires_update ) {
|
|
|
|
/**
|
|
|
|
* An existing installation of WooCommerce Admin has been
|
|
|
|
* updated.
|
|
|
|
*/
|
|
|
|
do_action( 'woocommerce_admin_updated_existing' );
|
|
|
|
}
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|
2019-11-19 23:23:27 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Add the version option if none is found, as would be the case when
|
|
|
|
* initialized via Core for the first time.
|
|
|
|
*/
|
|
|
|
if ( ! $version_option ) {
|
|
|
|
add_option( self::VERSION_OPTION, WC_ADMIN_VERSION_NUMBER );
|
|
|
|
}
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Install WC Admin.
|
|
|
|
*/
|
|
|
|
public static function install() {
|
|
|
|
if ( ! is_blog_installed() ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if we are not already running this routine.
|
2021-10-19 12:15:45 +00:00
|
|
|
if ( self::is_installing() ) {
|
2019-02-08 19:27:39 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// If we made it till here nothing is running yet, lets set the transient now.
|
|
|
|
set_transient( 'wc_admin_installing', 'yes', MINUTE_IN_SECONDS * 10 );
|
|
|
|
|
2020-05-08 22:26:46 +00:00
|
|
|
self::migrate_options();
|
2019-02-08 19:27:39 +00:00
|
|
|
self::create_tables();
|
2019-05-14 14:33:22 +00:00
|
|
|
self::create_events();
|
2020-05-05 19:38:16 +00:00
|
|
|
self::delete_obsolete_notes();
|
2019-10-29 16:12:10 +00:00
|
|
|
self::maybe_update_db_version();
|
2019-03-12 13:13:20 +00:00
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
delete_transient( 'wc_admin_installing' );
|
|
|
|
|
2019-11-07 16:29:36 +00:00
|
|
|
// Use add_option() here to avoid overwriting this value with each
|
|
|
|
// plugin version update. We base plugin age off of this value.
|
2020-01-17 00:08:29 +00:00
|
|
|
add_option( 'woocommerce_admin_install_timestamp', time() );
|
2019-12-05 23:06:11 +00:00
|
|
|
do_action( 'woocommerce_admin_installed' );
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|
|
|
|
|
2021-10-19 12:15:45 +00:00
|
|
|
/**
|
|
|
|
* Check if the installer is installing.
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public static function is_installing() {
|
|
|
|
return 'yes' === get_transient( 'wc_admin_installing' );
|
|
|
|
}
|
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
/**
|
|
|
|
* Get database schema.
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
2019-05-14 14:33:22 +00:00
|
|
|
protected static function get_schema() {
|
2019-02-08 19:27:39 +00:00
|
|
|
global $wpdb;
|
|
|
|
|
2021-01-11 00:05:09 +00:00
|
|
|
$collate = $wpdb->has_cap( 'collation' ) ? $wpdb->get_charset_collate() : '';
|
2019-02-08 19:27:39 +00:00
|
|
|
|
2019-10-10 20:54:44 +00:00
|
|
|
// Max DB index length. See wp_get_db_schema().
|
|
|
|
$max_index_length = 191;
|
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
$tables = "
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_order_stats (
|
|
|
|
order_id bigint(20) unsigned NOT NULL,
|
2019-05-10 06:39:25 +00:00
|
|
|
parent_id bigint(20) unsigned DEFAULT 0 NOT NULL,
|
2019-02-15 16:13:12 +00:00
|
|
|
date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
2019-06-12 09:21:56 +00:00
|
|
|
date_created_gmt datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
2019-05-16 05:04:37 +00:00
|
|
|
num_items_sold int(11) DEFAULT 0 NOT NULL,
|
2019-11-22 15:06:14 +00:00
|
|
|
total_sales double DEFAULT 0 NOT NULL,
|
2019-02-08 19:27:39 +00:00
|
|
|
tax_total double DEFAULT 0 NOT NULL,
|
|
|
|
shipping_total double DEFAULT 0 NOT NULL,
|
|
|
|
net_total double DEFAULT 0 NOT NULL,
|
2019-05-10 06:39:25 +00:00
|
|
|
returning_customer boolean DEFAULT NULL,
|
2019-02-08 19:27:39 +00:00
|
|
|
status varchar(200) NOT NULL,
|
|
|
|
customer_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
PRIMARY KEY (order_id),
|
|
|
|
KEY date_created (date_created),
|
|
|
|
KEY customer_id (customer_id),
|
2019-10-10 20:54:44 +00:00
|
|
|
KEY status (status({$max_index_length}))
|
2019-02-20 02:30:00 +00:00
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_order_product_lookup (
|
2019-02-08 19:27:39 +00:00
|
|
|
order_item_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
product_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
variation_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
customer_id BIGINT UNSIGNED NULL,
|
2019-02-15 16:13:12 +00:00
|
|
|
date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
2019-05-10 06:39:25 +00:00
|
|
|
product_qty INT NOT NULL,
|
2019-02-08 19:27:39 +00:00
|
|
|
product_net_revenue double DEFAULT 0 NOT NULL,
|
|
|
|
product_gross_revenue double DEFAULT 0 NOT NULL,
|
|
|
|
coupon_amount double DEFAULT 0 NOT NULL,
|
|
|
|
tax_amount double DEFAULT 0 NOT NULL,
|
|
|
|
shipping_amount double DEFAULT 0 NOT NULL,
|
|
|
|
shipping_tax_amount double DEFAULT 0 NOT NULL,
|
|
|
|
PRIMARY KEY (order_item_id),
|
|
|
|
KEY order_id (order_id),
|
|
|
|
KEY product_id (product_id),
|
|
|
|
KEY customer_id (customer_id),
|
|
|
|
KEY date_created (date_created)
|
2019-02-20 02:30:00 +00:00
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_order_tax_lookup (
|
|
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
tax_rate_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
|
|
|
shipping_tax double DEFAULT 0 NOT NULL,
|
|
|
|
order_tax double DEFAULT 0 NOT NULL,
|
|
|
|
total_tax double DEFAULT 0 NOT NULL,
|
|
|
|
PRIMARY KEY (order_id, tax_rate_id),
|
|
|
|
KEY tax_rate_id (tax_rate_id),
|
|
|
|
KEY date_created (date_created)
|
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_order_coupon_lookup (
|
2019-02-08 19:27:39 +00:00
|
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
2020-06-25 12:51:17 +00:00
|
|
|
coupon_id BIGINT NOT NULL,
|
2019-02-15 16:13:12 +00:00
|
|
|
date_created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
|
2019-02-08 19:27:39 +00:00
|
|
|
discount_amount double DEFAULT 0 NOT NULL,
|
|
|
|
PRIMARY KEY (order_id, coupon_id),
|
|
|
|
KEY coupon_id (coupon_id),
|
|
|
|
KEY date_created (date_created)
|
2019-02-20 02:30:00 +00:00
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_admin_notes (
|
|
|
|
note_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
name varchar(255) NOT NULL,
|
|
|
|
type varchar(20) NOT NULL,
|
|
|
|
locale varchar(20) NOT NULL,
|
|
|
|
title longtext NOT NULL,
|
|
|
|
content longtext NOT NULL,
|
|
|
|
content_data longtext NULL default null,
|
|
|
|
status varchar(200) NOT NULL,
|
|
|
|
source varchar(200) NOT NULL,
|
|
|
|
date_created datetime NOT NULL default '0000-00-00 00:00:00',
|
|
|
|
date_reminder datetime NULL default null,
|
2019-03-16 00:43:06 +00:00
|
|
|
is_snoozable boolean DEFAULT 0 NOT NULL,
|
Inbox notification: layout changes (https://github.com/woocommerce/woocommerce-admin/pull/4218)
* Inbox notification: Added layout changes (https://github.com/woocommerce/woocommerce-admin/pull/4256)
* Added notes layout and image to the API
Added note layout and note image to the API and the DB
* Unit test modified
Unit test where modified to adapt them to the new elements
* Changed the frontend following the new designs.
The fronted was changed to follow the new inbox messages design.
* Changed default layout type in DB
* Added all the requested visual element
Changed the cards' js, css and actions to achieve the visual requirements
* Added "layout" and "image" to inboxQuery
* Modal confirmation buttons repaired
* Added "layout" and "image" to docs examples.
* Removed "updateNote" from action.js
Removed "updateNote" from action.js, I left it by mistake.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* noteName removed and icon added to make code reviewing easier
This commit removes the "noteName" from card.js and adds the icon to make code reviewing easier
* Dismiss action button refactor
Refactor of the dismiss action button in the InboxNoteCard class
* Removed unnecessary control
* Destructured all the note properties
* Colors replaced by existing variable
* Removed setting of layout and image in the creation of the notes
* Removed blank lines added by mistake
* Close dismiss dropdown when clicking away from the popover.
* Prevented the closing of the inbox panel with an action in the modal
* Added small design changes
* Removed unused "Gridicon" import
* Prevent showing the image tag when the layout is blank
* The method name getDismissButton was changed to getDismissConfirmationButton
* Removed unnecessary vendor-prefixed properties
* Improved note filtering in unreadNotes method
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Inbox notification: Remove icons (https://github.com/woocommerce/woocommerce-admin/pull/4258)
* Info icon removed from inbox notifications
The info icon was removed from inbox notifications
# Conflicts:
# src/Notes/DataStore.php
* Removed "icon" from inboxQuery
* Tests repeared
Some problems with the unit tests were repaired in this commit
# Conflicts:
# docs/examples/activity-panel-inbox.md
# Conflicts:
# tests/api/admin-notes.php
* Removed icon from card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Inbox notification: Add dismiss functionality (https://github.com/woocommerce/woocommerce-admin/pull/4262)
* Added is_deleted param to soft delete
# Conflicts:
# src/API/Notes.php
# src/Install.php
# src/Notes/DataStore.php
# src/Notes/WC_Admin_Note.php
# src/Notes/WC_Admin_Notes.php
# tests/api/admin-notes.php
* Added the Dismiss functionality
# Conflicts:
# client/header/activity-panel/panels/inbox/action.js
* Where clause repeared
* Added Snackbar after action.
* API modified to dismiss notes
* Small refactor in "get_item" method
This commit adds a small refactor in "get_item" method to use "prepare_note_data_for_response"
* Added missing logic to Dismiss note
This commit adds missing client logic to Dismiss note.
# Conflicts:
# client/header/activity-panel/panels/inbox/action.js
# client/header/activity-panel/panels/inbox/card.js
* Moved the delete action to WC_Admin_Notes.php
The delete action was moved to WC_Admin_Notes.php to follow the pattern.
* Added changes to dismiss messages
This commit addeds changes to the messages soft delete.
* DataStore.php repaired
This commits adds some code that was deleted by mistake and the param "is_deleted" has been escaped.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* Repaired "get_notes_where_clauses" method
A problem with the deleted notes was repaired
* Added a comment to DataStore.php
* Stopped sending the "dismissType" to action.js
The "dismissType" is not sent to action.js anymore.
* Bugfix: now the method get_notes_with_name also returns deleted notes
* Bugfix: repaired empty notification list
This commit repairs a bug that happens when there isn't anything in the inbox notification list
* Small refactor to not use "some" Lodash method anymore
* Small refactor in rednderNotes method
* Added check to set_layout
* Added small refactor to delete_all_notes method
* Fixed code comment error
* Bugfix: repaired the "delete_note" call
* Inbox notification: Added layout changes (https://github.com/woocommerce/woocommerce-admin/pull/4256)
* Added notes layout and image to the API
Added note layout and note image to the API and the DB
* Unit test modified
Unit test where modified to adapt them to the new elements
* Changed the frontend following the new designs.
The fronted was changed to follow the new inbox messages design.
* Changed default layout type in DB
* Added all the requested visual element
Changed the cards' js, css and actions to achieve the visual requirements
* Added "layout" and "image" to inboxQuery
* Modal confirmation buttons repaired
* Added "layout" and "image" to docs examples.
* Removed "updateNote" from action.js
Removed "updateNote" from action.js, I left it by mistake.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* noteName removed and icon added to make code reviewing easier
This commit removes the "noteName" from card.js and adds the icon to make code reviewing easier
* Dismiss action button refactor
Refactor of the dismiss action button in the InboxNoteCard class
* Removed unnecessary control
* Destructured all the note properties
* Colors replaced by existing variable
* Removed setting of layout and image in the creation of the notes
* Removed blank lines added by mistake
* Close dismiss dropdown when clicking away from the popover.
* Prevented the closing of the inbox panel with an action in the modal
* Added small design changes
* Removed unused "Gridicon" import
* Prevent showing the image tag when the layout is blank
* The method name getDismissButton was changed to getDismissConfirmationButton
* Removed unnecessary vendor-prefixed properties
* Improved note filtering in unreadNotes method
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Inbox notification: Remove icons (https://github.com/woocommerce/woocommerce-admin/pull/4258)
* Info icon removed from inbox notifications
The info icon was removed from inbox notifications
# Conflicts:
# src/Notes/DataStore.php
* Removed "icon" from inboxQuery
* Tests repeared
Some problems with the unit tests were repaired in this commit
# Conflicts:
# docs/examples/activity-panel-inbox.md
# Conflicts:
# tests/api/admin-notes.php
* Removed icon from card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Improved error handling for the set_layout method
* Bugfix: fixed error handling clicks inside dropdowns
* Bugfix: repaired dropdown onBlur handler
This commit repairs a weird behavior that the dropdown onBlur handler method had sometimes.
* Text error changed
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Inbox notification: Add undo snackbar button after deletion (https://github.com/woocommerce/woocommerce-admin/pull/4281)
* Added undo snakbar button for a single note
# Conflicts:
# client/wc-api/notes/mutations.js
# src/Notes/DataStore.php
# src/Notes/WC_Admin_Notes.php
* Added a button to undo the deletion of all notes
# Conflicts:
# client/wc-api/notes/operations.js
# src/API/Notes.php
* Code adapted to make code reviewing easier
There was some code that also was present in another PR, that code was removed to make code reviewing easier.
* UnitTest added
This commit adds some unit tests
* Added verification for API response
* Added casting to $note_id
* Inbox notification: Added layout changes (https://github.com/woocommerce/woocommerce-admin/pull/4256)
* Added notes layout and image to the API
Added note layout and note image to the API and the DB
* Unit test modified
Unit test where modified to adapt them to the new elements
* Changed the frontend following the new designs.
The fronted was changed to follow the new inbox messages design.
* Changed default layout type in DB
* Added all the requested visual element
Changed the cards' js, css and actions to achieve the visual requirements
* Added "layout" and "image" to inboxQuery
* Modal confirmation buttons repaired
* Added "layout" and "image" to docs examples.
* Removed "updateNote" from action.js
Removed "updateNote" from action.js, I left it by mistake.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* noteName removed and icon added to make code reviewing easier
This commit removes the "noteName" from card.js and adds the icon to make code reviewing easier
* Dismiss action button refactor
Refactor of the dismiss action button in the InboxNoteCard class
* Removed unnecessary control
* Destructured all the note properties
* Colors replaced by existing variable
* Removed setting of layout and image in the creation of the notes
* Removed blank lines added by mistake
* Close dismiss dropdown when clicking away from the popover.
* Prevented the closing of the inbox panel with an action in the modal
* Added small design changes
* Removed unused "Gridicon" import
* Prevent showing the image tag when the layout is blank
* The method name getDismissButton was changed to getDismissConfirmationButton
* Removed unnecessary vendor-prefixed properties
* Improved note filtering in unreadNotes method
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Inbox notification: Remove icons (https://github.com/woocommerce/woocommerce-admin/pull/4258)
* Info icon removed from inbox notifications
The info icon was removed from inbox notifications
# Conflicts:
# src/Notes/DataStore.php
* Removed "icon" from inboxQuery
* Tests repeared
Some problems with the unit tests were repaired in this commit
# Conflicts:
# docs/examples/activity-panel-inbox.md
# Conflicts:
# tests/api/admin-notes.php
* Removed icon from card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Inbox notification: Add dismiss functionality (https://github.com/woocommerce/woocommerce-admin/pull/4262)
* Added is_deleted param to soft delete
# Conflicts:
# src/API/Notes.php
# src/Install.php
# src/Notes/DataStore.php
# src/Notes/WC_Admin_Note.php
# src/Notes/WC_Admin_Notes.php
# tests/api/admin-notes.php
* Added the Dismiss functionality
# Conflicts:
# client/header/activity-panel/panels/inbox/action.js
* Where clause repeared
* Added Snackbar after action.
* API modified to dismiss notes
* Small refactor in "get_item" method
This commit adds a small refactor in "get_item" method to use "prepare_note_data_for_response"
* Added missing logic to Dismiss note
This commit adds missing client logic to Dismiss note.
# Conflicts:
# client/header/activity-panel/panels/inbox/action.js
# client/header/activity-panel/panels/inbox/card.js
* Moved the delete action to WC_Admin_Notes.php
The delete action was moved to WC_Admin_Notes.php to follow the pattern.
* Added changes to dismiss messages
This commit addeds changes to the messages soft delete.
* DataStore.php repaired
This commits adds some code that was deleted by mistake and the param "is_deleted" has been escaped.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* Repaired "get_notes_where_clauses" method
A problem with the deleted notes was repaired
* Added a comment to DataStore.php
* Stopped sending the "dismissType" to action.js
The "dismissType" is not sent to action.js anymore.
* Bugfix: now the method get_notes_with_name also returns deleted notes
* Bugfix: repaired empty notification list
This commit repairs a bug that happens when there isn't anything in the inbox notification list
* Small refactor to not use "some" Lodash method anymore
* Small refactor in rednderNotes method
* Added check to set_layout
* Added small refactor to delete_all_notes method
* Fixed code comment error
* Bugfix: repaired the "delete_note" call
* Inbox notification: Added layout changes (https://github.com/woocommerce/woocommerce-admin/pull/4256)
* Added notes layout and image to the API
Added note layout and note image to the API and the DB
* Unit test modified
Unit test where modified to adapt them to the new elements
* Changed the frontend following the new designs.
The fronted was changed to follow the new inbox messages design.
* Changed default layout type in DB
* Added all the requested visual element
Changed the cards' js, css and actions to achieve the visual requirements
* Added "layout" and "image" to inboxQuery
* Modal confirmation buttons repaired
* Added "layout" and "image" to docs examples.
* Removed "updateNote" from action.js
Removed "updateNote" from action.js, I left it by mistake.
* Spelling error corrected
The button text "Dismiss all message" was corrected
* noteName removed and icon added to make code reviewing easier
This commit removes the "noteName" from card.js and adds the icon to make code reviewing easier
* Dismiss action button refactor
Refactor of the dismiss action button in the InboxNoteCard class
* Removed unnecessary control
* Destructured all the note properties
* Colors replaced by existing variable
* Removed setting of layout and image in the creation of the notes
* Removed blank lines added by mistake
* Close dismiss dropdown when clicking away from the popover.
* Prevented the closing of the inbox panel with an action in the modal
* Added small design changes
* Removed unused "Gridicon" import
* Prevent showing the image tag when the layout is blank
* The method name getDismissButton was changed to getDismissConfirmationButton
* Removed unnecessary vendor-prefixed properties
* Improved note filtering in unreadNotes method
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Update client/header/activity-panel/panels/inbox/style.scss
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Inbox notification: Remove icons (https://github.com/woocommerce/woocommerce-admin/pull/4258)
* Info icon removed from inbox notifications
The info icon was removed from inbox notifications
# Conflicts:
# src/Notes/DataStore.php
* Removed "icon" from inboxQuery
* Tests repeared
Some problems with the unit tests were repaired in this commit
# Conflicts:
# docs/examples/activity-panel-inbox.md
# Conflicts:
# tests/api/admin-notes.php
* Removed icon from card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Improved error handling for the set_layout method
* Bugfix: fixed error handling clicks inside dropdowns
* Bugfix: repaired dropdown onBlur handler
This commit repairs a weird behavior that the dropdown onBlur handler method had sometimes.
* Text error changed
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Stopped sending the "dismissType" to action.js
The "dismissType" is not sent to action.js anymore.
# Conflicts:
# client/header/activity-panel/panels/inbox/card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
* Bugfix: solved problem when a note was undismissed
There was a problem with the undismiss functionality. When a note was undismissed, it always was recovered with "plain" layout. This commit solves this problem.
* Inbox notification: add event recording (https://github.com/woocommerce/woocommerce-admin/pull/4320)
* Added events recording
This commit adds events recording to the inbox notifications
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
* Added 'home_screen' verification
Changed recorded name, now when the client is in the WooCommerce 'home' page we record 'home_screen' instead of 'wc-admin'.
* Added a naming fix and a new prop to the recordEvent
* bugfix: added control before interaction with bodyNotificationRef
* Added more unit tests for new endpoints
This commit adds tests for deleting a single note and for deleting all the notes, both without permission.
* Modified variable name
* Refactor: prop rename and small logic change
* Screen name getter moved into the InboxNoteCard
This commit moves the screen name getter inside the InboxNoteCard.
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
* Removed "screen" from state
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Refactor in admin-notes unit tests
Some unnecessary controls were removed from the admin-notes unit tests
* Indentation fixed in Install.php. Replaced spaces with tabs.
* Inbox notification: added new placeholder and empty card (https://github.com/woocommerce/woocommerce-admin/pull/4379)
* Added a new placeholder and an empty card
This commit adds a new placeholder and a new empty card to the inbox panel
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
# client/header/activity-panel/panels/inbox/style.scss
* Added border to read notes
* Improved note filtering in unreadNotes method and validNotes
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
* Actions render refactored
The actions render was refactored in InboxNoteCard component
* Refactor of InboxPanel component
The methods getUnreadNotesCount and hasValidNotes were separated from the InboxPanel component
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
* Refactor inbox panel subtitle classes
* Added changes for when a note is undismissed
This commit adds the requested changes in behavior and design for when a note is dismissed.
# Conflicts:
# client/header/activity-panel/panels/inbox/index.js
* Bugfix: Added key to itemlist
The InboxNotePlaceholder is shown as an itemlist but it didn't have a key. This commit adds it.
* Removed unnecessary validation
* Refactored actionList map
This commit adds a refactor to the actionList map
* Changes to the getUndoDismissRequesting functionality
This commit adds a few changes to the getUndoDismissRequesting functionality
* Changed className prop
* Changed other className prop
* Modified InboxPanel rendering
* Removed unnecessary method in placeholder.js
* Simplified the card.js renderActions method
* Change renderActions return in card.js
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Inbox notification: add client unit tests (https://github.com/woocommerce/woocommerce-admin/pull/4386)
* Added client unit tests
* Added test cases for getUnreadNotesCount and hasValidNotes
* Corrected typo error
* Removed Enzyme and added React Testing Library
* Removed unnecessary param
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
* Resolved some conflicts with master
* Marketing note test repaired
This commit repairs the marketing note test
* Added note type 'marketing' to delete all functionality
* Removed set_icon method from some notes and docs
* Added set_icon method as deprecated to prevent errors.
Co-authored-by: Fernando Marichal <contacto@fernandomarichal.com>
Co-authored-by: Joshua T Flowers <joshuatf@gmail.com>
2020-06-03 11:43:35 +00:00
|
|
|
layout varchar(20) DEFAULT '' NOT NULL,
|
|
|
|
image varchar(200) NULL DEFAULT NULL,
|
|
|
|
is_deleted boolean DEFAULT 0 NOT NULL,
|
2021-11-17 20:15:48 +00:00
|
|
|
is_read boolean DEFAULT 0 NOT NULL,
|
2020-07-02 20:21:10 +00:00
|
|
|
icon varchar(200) NOT NULL default 'info',
|
2019-02-20 02:30:00 +00:00
|
|
|
PRIMARY KEY (note_id)
|
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_admin_note_actions (
|
|
|
|
action_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
note_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
name varchar(255) NOT NULL,
|
|
|
|
label varchar(255) NOT NULL,
|
|
|
|
query longtext NOT NULL,
|
2019-03-12 13:13:20 +00:00
|
|
|
status varchar(255) NOT NULL,
|
2019-05-21 19:01:55 +00:00
|
|
|
is_primary boolean DEFAULT 0 NOT NULL,
|
2020-06-18 01:28:27 +00:00
|
|
|
actioned_text varchar(255) NOT NULL,
|
2021-04-16 05:56:39 +00:00
|
|
|
nonce_action varchar(255) NULL DEFAULT NULL,
|
|
|
|
nonce_name varchar(255) NULL DEFAULT NULL,
|
2019-02-20 02:30:00 +00:00
|
|
|
PRIMARY KEY (action_id),
|
|
|
|
KEY note_id (note_id)
|
|
|
|
) $collate;
|
|
|
|
CREATE TABLE {$wpdb->prefix}wc_customer_lookup (
|
|
|
|
customer_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
|
user_id BIGINT UNSIGNED DEFAULT NULL,
|
|
|
|
username varchar(60) DEFAULT '' NOT NULL,
|
|
|
|
first_name varchar(255) NOT NULL,
|
|
|
|
last_name varchar(255) NOT NULL,
|
|
|
|
email varchar(100) NULL default NULL,
|
|
|
|
date_last_active timestamp NULL default null,
|
|
|
|
date_registered timestamp NULL default null,
|
|
|
|
country char(2) DEFAULT '' NOT NULL,
|
|
|
|
postcode varchar(20) DEFAULT '' NOT NULL,
|
|
|
|
city varchar(100) DEFAULT '' NOT NULL,
|
2019-06-19 22:12:17 +00:00
|
|
|
state varchar(100) DEFAULT '' NOT NULL,
|
2019-02-20 02:30:00 +00:00
|
|
|
PRIMARY KEY (customer_id),
|
|
|
|
UNIQUE KEY user_id (user_id),
|
|
|
|
KEY email (email)
|
|
|
|
) $collate;
|
2019-10-01 23:35:37 +00:00
|
|
|
CREATE TABLE {$wpdb->prefix}wc_category_lookup (
|
|
|
|
category_tree_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
category_id BIGINT UNSIGNED NOT NULL,
|
|
|
|
PRIMARY KEY (category_tree_id,category_id)
|
|
|
|
) $collate;
|
2019-02-20 02:30:00 +00:00
|
|
|
";
|
2019-02-08 19:27:39 +00:00
|
|
|
|
|
|
|
return $tables;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create database tables.
|
|
|
|
*/
|
|
|
|
public static function create_tables() {
|
|
|
|
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
|
|
|
|
|
|
|
|
dbDelta( self::get_schema() );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return a list of tables. Used to make sure all WC Admin tables are dropped
|
|
|
|
* when uninstalling the plugin in a single site or multi site environment.
|
|
|
|
*
|
|
|
|
* @return array WC tables.
|
|
|
|
*/
|
|
|
|
public static function get_tables() {
|
|
|
|
global $wpdb;
|
|
|
|
|
|
|
|
return array(
|
|
|
|
"{$wpdb->prefix}wc_order_stats",
|
|
|
|
"{$wpdb->prefix}wc_order_product_lookup",
|
|
|
|
"{$wpdb->prefix}wc_order_tax_lookup",
|
|
|
|
"{$wpdb->prefix}wc_order_coupon_lookup",
|
|
|
|
"{$wpdb->prefix}wc_admin_notes",
|
|
|
|
"{$wpdb->prefix}wc_admin_note_actions",
|
|
|
|
"{$wpdb->prefix}wc_customer_lookup",
|
2019-10-01 23:35:37 +00:00
|
|
|
"{$wpdb->prefix}wc_category_lookup",
|
2019-02-08 19:27:39 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds new tables.
|
|
|
|
*
|
|
|
|
* @param array $wc_tables List of WooCommerce tables.
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public static function add_tables( $wc_tables ) {
|
|
|
|
return array_merge(
|
|
|
|
$wc_tables,
|
|
|
|
self::get_tables()
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Uninstall tables when MU blog is deleted.
|
|
|
|
*
|
|
|
|
* @param array $tables List of tables that will be deleted by WP.
|
|
|
|
*
|
|
|
|
* @return string[]
|
|
|
|
*/
|
|
|
|
public static function wpmu_drop_tables( $tables ) {
|
|
|
|
return array_merge( $tables, self::get_tables() );
|
|
|
|
}
|
|
|
|
|
2019-10-10 20:54:44 +00:00
|
|
|
/**
|
|
|
|
* Get list of DB update callbacks.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public static function get_db_update_callbacks() {
|
|
|
|
return self::$db_updates;
|
|
|
|
}
|
|
|
|
|
2019-10-29 16:12:10 +00:00
|
|
|
/**
|
|
|
|
* Is a DB update needed?
|
|
|
|
*
|
|
|
|
* @return boolean
|
|
|
|
*/
|
|
|
|
public static function needs_db_update() {
|
2019-12-24 18:19:08 +00:00
|
|
|
$current_db_version = get_option( self::VERSION_OPTION, null );
|
2019-10-29 16:12:10 +00:00
|
|
|
$updates = self::get_db_update_callbacks();
|
|
|
|
$update_versions = array_keys( $updates );
|
|
|
|
usort( $update_versions, 'version_compare' );
|
|
|
|
|
|
|
|
return ! is_null( $current_db_version ) && version_compare( $current_db_version, end( $update_versions ), '<' );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* See if we need to show or run database updates during install.
|
|
|
|
*/
|
|
|
|
private static function maybe_update_db_version() {
|
|
|
|
if ( self::needs_db_update() ) {
|
|
|
|
self::update();
|
|
|
|
} else {
|
|
|
|
self::update_db_version();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-10-10 20:54:44 +00:00
|
|
|
/**
|
|
|
|
* Push all needed DB updates to the queue for processing.
|
|
|
|
*/
|
2019-10-29 16:12:10 +00:00
|
|
|
private static function update() {
|
2019-10-10 20:54:44 +00:00
|
|
|
$current_db_version = get_option( self::VERSION_OPTION );
|
|
|
|
$loop = 0;
|
|
|
|
|
|
|
|
foreach ( self::get_db_update_callbacks() as $version => $update_callbacks ) {
|
|
|
|
if ( version_compare( $current_db_version, $version, '<' ) ) {
|
2021-04-16 19:01:04 +00:00
|
|
|
$completed_version_updates = 0;
|
|
|
|
|
2019-10-10 20:54:44 +00:00
|
|
|
foreach ( $update_callbacks as $update_callback ) {
|
|
|
|
$pending_jobs = WC()->queue()->search(
|
|
|
|
array(
|
|
|
|
'per_page' => 1,
|
|
|
|
'hook' => 'woocommerce_run_update_callback',
|
2020-04-08 18:38:15 +00:00
|
|
|
'search' => wp_json_encode( array( $update_callback ) ),
|
2019-10-10 20:54:44 +00:00
|
|
|
'group' => 'woocommerce-db-updates',
|
2020-04-08 18:38:15 +00:00
|
|
|
'status' => 'pending',
|
2019-10-10 20:54:44 +00:00
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2020-04-08 18:38:15 +00:00
|
|
|
$complete_jobs = WC()->queue()->search(
|
|
|
|
array(
|
|
|
|
'per_page' => 1,
|
|
|
|
'hook' => 'woocommerce_run_update_callback',
|
|
|
|
'search' => wp_json_encode( array( $update_callback ) ),
|
|
|
|
'group' => 'woocommerce-db-updates',
|
|
|
|
'status' => 'complete',
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
2021-04-16 19:01:04 +00:00
|
|
|
$completed_version_updates += count( $complete_jobs );
|
|
|
|
|
2020-04-08 18:38:15 +00:00
|
|
|
if ( empty( $pending_jobs ) && empty( $complete_jobs ) ) {
|
2019-10-10 20:54:44 +00:00
|
|
|
WC()->queue()->schedule_single(
|
|
|
|
time() + $loop,
|
|
|
|
'woocommerce_run_update_callback',
|
|
|
|
array( $update_callback ),
|
|
|
|
'woocommerce-db-updates'
|
|
|
|
);
|
2019-11-28 20:55:23 +00:00
|
|
|
Cache::invalidate();
|
2019-10-10 20:54:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
$loop++;
|
2021-04-16 19:01:04 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// Users have experienced concurrency issues where all update callbacks
|
|
|
|
// have run but the version option hasn't been updated. If all the updates
|
|
|
|
// for a version are complete, update the version option to reflect that.
|
|
|
|
// See: https:// github.com/woocommerce/woocommerce-admin/issues/5058.
|
|
|
|
if ( count( $update_callbacks ) === $completed_version_updates ) {
|
|
|
|
self::update_db_version( $version );
|
2019-10-10 20:54:44 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-08 19:27:39 +00:00
|
|
|
/**
|
|
|
|
* Update WC Admin version to current.
|
2019-10-10 20:54:44 +00:00
|
|
|
*
|
|
|
|
* @param string|null $version New WooCommerce Admin DB version or null.
|
2019-02-08 19:27:39 +00:00
|
|
|
*/
|
2019-10-10 20:54:44 +00:00
|
|
|
public static function update_db_version( $version = null ) {
|
2019-02-08 19:27:39 +00:00
|
|
|
delete_option( self::VERSION_OPTION );
|
2019-10-10 20:54:44 +00:00
|
|
|
add_option( self::VERSION_OPTION, is_null( $version ) ? WC_ADMIN_VERSION_NUMBER : $version );
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|
2019-05-14 14:33:22 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Schedule cron events.
|
|
|
|
*/
|
|
|
|
public static function create_events() {
|
|
|
|
if ( ! wp_next_scheduled( 'wc_admin_daily' ) ) {
|
|
|
|
wp_schedule_event( time(), 'daily', 'wc_admin_daily' );
|
|
|
|
}
|
2020-05-05 19:38:16 +00:00
|
|
|
// Note: this is potentially redundant when the core package exists.
|
2019-10-01 23:35:37 +00:00
|
|
|
wp_schedule_single_event( time() + 10, 'generate_category_lookup_table' );
|
2019-05-14 14:33:22 +00:00
|
|
|
}
|
|
|
|
|
2020-05-05 19:38:16 +00:00
|
|
|
/**
|
|
|
|
* Delete obsolete notes.
|
|
|
|
*/
|
|
|
|
protected static function delete_obsolete_notes() {
|
|
|
|
$obsolete_notes_names = array(
|
|
|
|
'wc-admin-welcome-note',
|
|
|
|
'wc-admin-store-notice-setting-moved',
|
|
|
|
'wc-admin-store-notice-giving-feedback',
|
2020-09-29 20:16:59 +00:00
|
|
|
'wc-admin-learn-more-about-product-settings',
|
2020-11-03 19:45:35 +00:00
|
|
|
'wc-admin-onboarding-profiler-reminder',
|
2020-12-14 10:02:40 +00:00
|
|
|
'wc-admin-historical-data',
|
2021-01-01 07:30:28 +00:00
|
|
|
'wc-admin-review-shipping-settings',
|
2021-01-07 06:39:22 +00:00
|
|
|
'wc-admin-home-screen-feedback',
|
2021-03-05 00:16:17 +00:00
|
|
|
'wc-admin-effortless-payments-by-mollie',
|
2021-05-10 09:56:47 +00:00
|
|
|
'wc-admin-google-ads-and-marketing',
|
2020-05-05 19:38:16 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
$additional_obsolete_notes_names = apply_filters(
|
|
|
|
'woocommerce_admin_obsolete_notes_names',
|
|
|
|
array()
|
|
|
|
);
|
|
|
|
|
|
|
|
if ( is_array( $additional_obsolete_notes_names ) ) {
|
|
|
|
$obsolete_notes_names = array_merge(
|
|
|
|
$obsolete_notes_names,
|
|
|
|
$additional_obsolete_notes_names
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2020-09-28 04:35:10 +00:00
|
|
|
Notes::delete_notes_with_name( $obsolete_notes_names );
|
2020-05-05 19:38:16 +00:00
|
|
|
}
|
|
|
|
|
2019-06-12 16:16:08 +00:00
|
|
|
/**
|
2020-01-17 00:08:29 +00:00
|
|
|
* Drop WooCommerce Admin tables.
|
|
|
|
*
|
|
|
|
* @return void
|
2019-06-12 16:16:08 +00:00
|
|
|
*/
|
2020-01-17 00:08:29 +00:00
|
|
|
public static function drop_tables() {
|
2019-06-12 16:16:08 +00:00
|
|
|
global $wpdb;
|
|
|
|
|
|
|
|
$tables = self::get_tables();
|
|
|
|
|
|
|
|
foreach ( $tables as $table ) {
|
2020-05-05 19:38:16 +00:00
|
|
|
/* phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared */
|
|
|
|
$wpdb->query( "DROP TABLE IF EXISTS {$table}" );
|
|
|
|
/* phpcs:enable */
|
2019-06-12 16:16:08 +00:00
|
|
|
}
|
|
|
|
}
|
2019-02-08 19:27:39 +00:00
|
|
|
}
|