Version Description
Download this release
Release Info
Developer | ryanhungate |
Plugin | MailChimp for WooCommerce |
Version | 2.4.1 |
Comparing to | |
See all releases |
Code changes from version 2.4.0 to 2.4.1
- CHANGELOG.txt +15 -1
- README.md +5 -0
- README.txt +23 -7
- admin/class-mailchimp-woocommerce-admin.php +83 -31
- admin/css/mailchimp-woocommerce-admin-settings-5.2.css +2 -2
- admin/css/mailchimp-woocommerce-admin-settings.css +31 -4
- admin/js/mailchimp-woocommerce-admin.js +1 -1
- admin/partials/mailchimp-woocommerce-admin-tabs.php +8 -2
- admin/partials/tabs/api_key_create_account.php +4 -4
- admin/partials/tabs/logs.php +10 -11
- admin/partials/tabs/newsletter_settings.php +8 -11
- admin/partials/tabs/store_info.php +1 -1
- admin/partials/tabs/store_sync.php +3 -3
- bootstrap.php +60 -38
- includes/api/assets/class-mailchimp-cart.php +13 -2
- includes/api/assets/class-mailchimp-customer.php +3 -0
- includes/api/class-mailchimp-api.php +17 -3
- includes/api/class-mailchimp-woocommerce-create-list-submission.php +11 -0
- includes/api/class-mailchimp-woocommerce-transform-orders-wc3.php +6 -1
- includes/api/class-mailchimp-woocommerce-transform-products.php +8 -1
- includes/class-mailchimp-woocommerce-queue.php +226 -0
- includes/class-mailchimp-woocommerce-service.php +16 -0
- includes/class-mailchimp-woocommerce.php +15 -11
- includes/processes/class-mailchimp-woocommerce-cart-update.php +19 -6
- includes/processes/class-mailchimp-woocommerce-single-order.php +18 -2
- includes/processes/class-mailchimp-woocommerce-user-submit.php +21 -2
- includes/vendor/action-scheduler/.editorconfig +24 -0
- includes/vendor/action-scheduler/.gitattributes +14 -0
- includes/vendor/action-scheduler/.gitignore +4 -0
- includes/vendor/action-scheduler/.travis.yml +45 -0
- includes/vendor/action-scheduler/Gruntfile.js +57 -0
- includes/vendor/action-scheduler/classes/ActionScheduler_ActionFactory.php +6 -6
- includes/vendor/action-scheduler/classes/ActionScheduler_DataController.php +2 -2
- includes/vendor/action-scheduler/classes/ActionScheduler_ListTable.php +2 -1
- includes/vendor/action-scheduler/classes/ActionScheduler_QueueRunner.php +6 -7
- includes/vendor/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php +2 -2
- includes/vendor/action-scheduler/classes/abstracts/ActionScheduler.php +18 -0
- includes/vendor/action-scheduler/classes/abstracts/ActionScheduler_Store.php +1 -1
- includes/vendor/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php +84 -38
- includes/vendor/action-scheduler/classes/migration/Controller.php +1 -1
- includes/vendor/action-scheduler/classes/migration/Scheduler.php +1 -1
- includes/vendor/action-scheduler/codecov.yml +13 -0
- includes/vendor/action-scheduler/composer.json +36 -0
- includes/vendor/action-scheduler/composer.lock +4878 -0
- includes/vendor/action-scheduler/docs/_layouts/default.html +2 -5
- includes/vendor/action-scheduler/docs/android-chrome-192x192.png +0 -0
- includes/vendor/action-scheduler/docs/android-chrome-256x256.png +0 -0
- includes/vendor/action-scheduler/docs/api.md +82 -37
- includes/vendor/action-scheduler/docs/apple-touch-icon.png +0 -0
- includes/vendor/action-scheduler/docs/assets/css/style.scss +2 -2
- includes/vendor/action-scheduler/docs/faq.md +22 -16
- includes/vendor/action-scheduler/docs/favicon-16x16.png +0 -0
- includes/vendor/action-scheduler/docs/favicon-32x32.png +0 -0
- includes/vendor/action-scheduler/docs/favicon.ico +0 -0
- includes/vendor/action-scheduler/docs/index.md +14 -16
- includes/vendor/action-scheduler/docs/perf.md +21 -16
- includes/vendor/action-scheduler/docs/usage.md +39 -36
- includes/vendor/action-scheduler/docs/version3-0.md +68 -0
- includes/vendor/action-scheduler/docs/wp-cli.md +5 -1
- includes/vendor/action-scheduler/functions.php +35 -27
- includes/vendor/action-scheduler/package-lock.json +2138 -0
- includes/vendor/action-scheduler/package.json +39 -0
- includes/vendor/action-scheduler/phpcs.xml +39 -0
- includes/vendor/action-scheduler/tests/bootstrap.php +3 -0
- includes/vendor/action-scheduler/tests/phpunit.xml.dist +17 -1
- includes/vendor/action-scheduler/tests/phpunit/ActionScheduler_Mock_Async_Request_QueueRunner.php +19 -0
- includes/vendor/action-scheduler/tests/phpunit/ActionScheduler_Mocker.php +35 -0
- includes/vendor/action-scheduler/tests/phpunit/jobs/ActionScheduler_NullAction_Test.php +1 -1
- includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStoreMigrator_Test.php +26 -0
- includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStore_Test.php +396 -0
- includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_HybridStore_Test.php +273 -0
- includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_wpPostStore_Test.php +43 -4
- includes/vendor/action-scheduler/tests/phpunit/lock/ActionScheduler_OptionLock_Test.php +45 -0
- includes/vendor/action-scheduler/tests/phpunit/logging/ActionScheduler_DBLogger_Test.php +132 -0
- includes/vendor/action-scheduler/tests/phpunit/logging/ActionScheduler_wpCommentLogger_Test.php +43 -17
- includes/vendor/action-scheduler/tests/phpunit/migration/ActionMigrator_Test.php +145 -0
- includes/vendor/action-scheduler/tests/phpunit/migration/BatchFetcher_Test.php +76 -0
- includes/vendor/action-scheduler/tests/phpunit/migration/Config_Test.php +33 -0
- includes/vendor/action-scheduler/tests/phpunit/migration/LogMigrator_Test.php +44 -0
- includes/vendor/action-scheduler/tests/phpunit/migration/Runner_Test.php +92 -0
- includes/vendor/action-scheduler/tests/phpunit/migration/Scheduler_Test.php +118 -0
- includes/vendor/action-scheduler/tests/phpunit/procedural_api/procedural_api_Test.php +46 -9
- includes/vendor/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueCleaner_Test.php +2 -2
- includes/vendor/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueRunner_Test.php +102 -34
- includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_CronSchedule_Test.php +40 -9
- includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_IntervalSchedule_Test.php +13 -4
- includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_NullSchedule_Test.php +1 -1
- includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_SimpleSchedule_Test.php +4 -4
- languages/mc-woocommerce-pt_BR.mo +0 -0
- languages/mc-woocommerce-pt_BR.po +0 -933
- languages/mc-woocommerce.pot +317 -295
- mailchimp-woocommerce.php +2 -2
- public/class-mailchimp-woocommerce-public.php +9 -3
CHANGELOG.txt
CHANGED
@@ -1,4 +1,18 @@
|
|
1 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
= 2.4.0 =
|
3 |
* update for latest Action Scheduler v3.1.4
|
4 |
* adds customer language on Cart and Order sync
|
@@ -242,4 +256,4 @@
|
|
242 |
= 0.1.7 =
|
243 |
* fixing various bugs with the sync and product issues.
|
244 |
= 0.1.2 =
|
245 |
-
* fixed admin order update hook.
|
1 |
== Changelog ==
|
2 |
+
= 2.4.1 =
|
3 |
+
* adds scrolling frame for logs
|
4 |
+
* fix for Coupon Deletion via WooCommerce API
|
5 |
+
* removes all non-Mailchimp notices
|
6 |
+
* update for latest version of Action Scheduler v3.1.4
|
7 |
+
* documentation updates
|
8 |
+
* fix for errors on activation following deactivation
|
9 |
+
* fix for PHP notice on Woocommerce Import Tax rate page
|
10 |
+
* adds error handling on store add/update
|
11 |
+
* use denormalized order items values in initial sync
|
12 |
+
* adds function allowing tags for specific users
|
13 |
+
* adds include/exclude Mailchimp script
|
14 |
+
* fix for double opt-in issues on saved settings
|
15 |
+
* fixes transactionals on guest checkout
|
16 |
= 2.4.0 =
|
17 |
* update for latest Action Scheduler v3.1.4
|
18 |
* adds customer language on Cart and Order sync
|
256 |
= 0.1.7 =
|
257 |
* fixing various bugs with the sync and product issues.
|
258 |
= 0.1.2 =
|
259 |
+
* fixed admin order update hook.
|
README.md
CHANGED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Mailchimp for WooCommerce Wordpress Plugin
|
2 |
+
|
3 |
+
Have a question or need help? Submit an [issue](https://github.com/mailchimp/mc-woocommerce/issues/new?assignees=&labels=investigating&template=bug_report.md&title=%5BBUG%5D+Description+of+Issue).
|
4 |
+
|
5 |
+
Also check out our [Wiki](https://github.com/mailchimp/mc-woocommerce/wiki) for documentation on common troubleshooting and features available to developers.
|
README.txt
CHANGED
@@ -4,10 +4,10 @@ Tags: ecommerce,email,workflows,mailchimp
|
|
4 |
Donate link: https://mailchimp.com
|
5 |
Requires at least: 4.9
|
6 |
Tested up to: 5.4
|
7 |
-
Stable tag: 2.4.
|
8 |
Requires PHP: 7.0
|
9 |
WC requires at least: 3.5
|
10 |
-
WC tested up to: 4.
|
11 |
License: GPLv2 or later
|
12 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
13 |
Connect your store to your Mailchimp audience to track sales, create targeted emails, send abandoned cart emails, and more.
|
@@ -16,6 +16,7 @@ Connect your store to your Mailchimp audience to track sales, create targeted em
|
|
16 |
Join the 17 million customers who use Mailchimp, the world's largest marketing automation platform, to develop their e-commerce marketing strategy. With the official Mailchimp for WooCommerce integration, your customers and their purchase data are automatically synced with your Mailchimp account, making it easy to send targeted campaigns, automatically follow up with customers post-purchase, recommend products, recover abandoned carts, and measure the ROI of your marketing efforts. And it's completely free.
|
17 |
###What you can do with this plugin
|
18 |
- Sync to your Audience in Mailchimp with purchase data.
|
|
|
19 |
- Set up marketing automations to remind customers about items they left in their cart or viewed on your site, win back lapsed customers, and follow up post-purchase. (Now available for free accounts!)
|
20 |
- Showcase product recommendations.
|
21 |
- Track and segment customers based on purchase history and purchase frequency.
|
@@ -49,6 +50,12 @@ You’ll need to do a few things to connect your WooCommerce store to Mailchimp.
|
|
49 |
|
50 |
== Frequently Asked Questions ==
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
= What is the recommended way to sync larger stores? =
|
53 |
|
54 |
To optimize the performance of your Mailchimp integration we recommend running the queue in CLI mode. Please refer to [this guide](https://github.com/mailchimp/mc-woocommerce/wiki/Advanced-Queue-Setup-In-CLI-mode) in our Wiki.
|
@@ -70,8 +77,17 @@ At this time, the synchronization of product categories from WooCommerce to Mail
|
|
70 |
If you are unable to sync or connect with Mailchimp, you can open a ticket on our [Github plugin page](https://github.com/mailchimp/mc-woocommerce/issues). Please provide the version of the plugin and PHP you're using, any fatal errors in the WooCommerce logs (WooCommerce -> Status -> Logs) you're seeing, along with relevant information to the problem you're experiencing.
|
71 |
|
72 |
== Changelog ==
|
73 |
-
= 2.4.
|
74 |
-
*
|
75 |
-
*
|
76 |
-
*
|
77 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
Donate link: https://mailchimp.com
|
5 |
Requires at least: 4.9
|
6 |
Tested up to: 5.4
|
7 |
+
Stable tag: 2.4.1
|
8 |
Requires PHP: 7.0
|
9 |
WC requires at least: 3.5
|
10 |
+
WC tested up to: 4.2
|
11 |
License: GPLv2 or later
|
12 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
13 |
Connect your store to your Mailchimp audience to track sales, create targeted emails, send abandoned cart emails, and more.
|
16 |
Join the 17 million customers who use Mailchimp, the world's largest marketing automation platform, to develop their e-commerce marketing strategy. With the official Mailchimp for WooCommerce integration, your customers and their purchase data are automatically synced with your Mailchimp account, making it easy to send targeted campaigns, automatically follow up with customers post-purchase, recommend products, recover abandoned carts, and measure the ROI of your marketing efforts. And it's completely free.
|
17 |
###What you can do with this plugin
|
18 |
- Sync to your Audience in Mailchimp with purchase data.
|
19 |
+
- Sync new subscribers to your Audience when they create an account and opt-in.
|
20 |
- Set up marketing automations to remind customers about items they left in their cart or viewed on your site, win back lapsed customers, and follow up post-purchase. (Now available for free accounts!)
|
21 |
- Showcase product recommendations.
|
22 |
- Track and segment customers based on purchase history and purchase frequency.
|
50 |
|
51 |
== Frequently Asked Questions ==
|
52 |
|
53 |
+
= Who is subscribed to my Audience with this plugin? =
|
54 |
+
|
55 |
+
- Customers are subscribed to your Audience when they opt-in at checkout or when an account is created. If an account is created through the standard WooCommerce `My Account` page, they must opt-in to be added.
|
56 |
+
- Customers are sent to your Audience as `Transactional` if they do not opt-in. This is done so you can send [abandoned carts](https://mailchimp.com/help/create-an-abandoned-cart-email/) or [order notifications](https://mailchimp.com/help/create-order-notifications/).
|
57 |
+
- If double opt-in is enabled, customers will only be subscribed to your Audience if they approve the subscription from the confirmation email that is sent.
|
58 |
+
|
59 |
= What is the recommended way to sync larger stores? =
|
60 |
|
61 |
To optimize the performance of your Mailchimp integration we recommend running the queue in CLI mode. Please refer to [this guide](https://github.com/mailchimp/mc-woocommerce/wiki/Advanced-Queue-Setup-In-CLI-mode) in our Wiki.
|
77 |
If you are unable to sync or connect with Mailchimp, you can open a ticket on our [Github plugin page](https://github.com/mailchimp/mc-woocommerce/issues). Please provide the version of the plugin and PHP you're using, any fatal errors in the WooCommerce logs (WooCommerce -> Status -> Logs) you're seeing, along with relevant information to the problem you're experiencing.
|
78 |
|
79 |
== Changelog ==
|
80 |
+
= 2.4.1 =
|
81 |
+
* adds scrolling frame for logs
|
82 |
+
* fix for Coupon Deletion via WooCommerce API
|
83 |
+
* removes all non-Mailchimp notices
|
84 |
+
* update for latest version of Action Scheduler v3.1.4
|
85 |
+
* documentation updates
|
86 |
+
* fix for errors on activation following deactivation
|
87 |
+
* fix for PHP notice on Woocommerce Import Tax rate page
|
88 |
+
* adds error handling on store add/update
|
89 |
+
* use denormalized order items values in initial sync
|
90 |
+
* adds function allowing tags for specific users
|
91 |
+
* adds include/exclude Mailchimp script
|
92 |
+
* fix for double opt-in issues on saved settings
|
93 |
+
* fixes transactionals on guest checkout
|
admin/class-mailchimp-woocommerce-admin.php
CHANGED
@@ -280,17 +280,16 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
280 |
public function options_update() {
|
281 |
global $pagenow;
|
282 |
|
283 |
-
$this->handle_abandoned_cart_table();
|
284 |
-
|
285 |
-
$this->update_db_check();
|
286 |
-
|
287 |
register_setting($this->plugin_name, $this->plugin_name, array($this, 'validate'));
|
288 |
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
|
|
|
|
|
|
294 |
}
|
295 |
|
296 |
/**
|
@@ -311,12 +310,25 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
311 |
// resave the site option so this only fires once.
|
312 |
update_site_option('mailchimp_woocommerce_version', $version);
|
313 |
|
|
|
314 |
$options = $this->getOptions();
|
315 |
|
|
|
316 |
if (!isset($options['mailchimp_permission_cap']) || empty($options['mailchimp_permission_cap']) ) {
|
317 |
$options['mailchimp_permission_cap'] = 'manage_options';
|
318 |
update_option($this->plugin_name, $options);
|
319 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
}
|
321 |
|
322 |
if (!get_option( $this->plugin_name.'_cart_table_add_index_update')) {
|
@@ -419,7 +431,17 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
419 |
}
|
420 |
|
421 |
$data = $this->mailchimp_set_store_currency_code($new_currency_code);
|
422 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
423 |
}
|
424 |
|
425 |
/**
|
@@ -506,7 +528,7 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
506 |
|
507 |
$active_tab = isset($input['mailchimp_active_tab']) ? $input['mailchimp_active_tab'] : null;
|
508 |
|
509 |
-
if (empty($active_tab) && $input['woocommerce_settings_save_general']) {
|
510 |
unset($input['woocommerce_settings_save_general']);
|
511 |
$data['store_currency_code'] = (string) $input['store_currency_code'];
|
512 |
}
|
@@ -546,7 +568,7 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
546 |
// remove all the pointers to be sure
|
547 |
$service = new MailChimp_Service();
|
548 |
$service->removePointers(true, true);
|
549 |
-
|
550 |
$this->showSyncStartedMessage();
|
551 |
$this->setData('sync.config.resync', true);
|
552 |
}
|
@@ -788,13 +810,22 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
788 |
|
789 |
$this->setData('validation.store_info', true);
|
790 |
|
791 |
-
$data['active_tab'] = 'campaign_defaults';
|
792 |
-
$data['store_currency_code'] = get_woocommerce_currency();
|
793 |
-
|
794 |
if ($this->hasValidMailChimpList()) {
|
795 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
}
|
797 |
-
|
|
|
|
|
|
|
798 |
return $data;
|
799 |
}
|
800 |
|
@@ -986,7 +1017,16 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
986 |
$this->setData('validation.newsletter_settings', true);
|
987 |
|
988 |
// sync the store with MC
|
989 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
990 |
|
991 |
// if there was already a store in Mailchimp, use the list ID from Mailchimp
|
992 |
if ($this->swapped_list_id) {
|
@@ -994,20 +1034,13 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
994 |
}
|
995 |
|
996 |
// start the sync automatically if the sync is false
|
997 |
-
if ((bool) $this->getData('sync.started_at', false) === false) {
|
998 |
-
|
999 |
-
set_site_transient('mailchimp_woocommerce_start_sync', microtime(),
|
1000 |
-
|
1001 |
-
$this->setData('sync.config.resync', false);
|
1002 |
-
$this->setData('sync.orders.current_page', 1);
|
1003 |
-
$this->setData('sync.products.current_page', 1);
|
1004 |
-
$this->setData('sync.coupons.current_page', 1);
|
1005 |
-
$this->setData('sync.syncing', true);
|
1006 |
-
$this->setData('sync.started_at', time());
|
1007 |
|
1008 |
$this->showSyncStartedMessage();
|
1009 |
}
|
1010 |
-
|
1011 |
$data['active_tab'] = 'sync';
|
1012 |
|
1013 |
return $data;
|
@@ -1345,6 +1378,15 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
1345 |
|
1346 |
$submission->setContact($this->address($data));
|
1347 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1348 |
// let's turn this on for debugging purposes.
|
1349 |
mailchimp_debug('admin', 'list info submission', array('submission' => print_r($submission->getSubmission(), true)));
|
1350 |
|
@@ -1457,6 +1499,7 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
1457 |
}
|
1458 |
}
|
1459 |
$this->setData('errors.store_info', $e->getMessage());
|
|
|
1460 |
}
|
1461 |
|
1462 |
return false;
|
@@ -1525,19 +1568,28 @@ class MailChimp_WooCommerce_Admin extends MailChimp_WooCommerce_Options {
|
|
1525 |
/**
|
1526 |
* Start the sync
|
1527 |
*/
|
1528 |
-
public
|
1529 |
{
|
1530 |
// delete the transient so this only happens one time.
|
1531 |
delete_site_transient('mailchimp_woocommerce_start_sync');
|
1532 |
|
1533 |
$full_sync = new MailChimp_WooCommerce_Process_Full_Sync_Manager();
|
1534 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1535 |
// tell Mailchimp that we're syncing
|
1536 |
$full_sync->start_sync();
|
1537 |
|
1538 |
// enqueue sync manager
|
1539 |
as_enqueue_async_action( 'MailChimp_WooCommerce_Process_Full_Sync_Manager', array(), 'mc-woocommerce' );
|
1540 |
-
|
1541 |
}
|
1542 |
|
1543 |
/**
|
280 |
public function options_update() {
|
281 |
global $pagenow;
|
282 |
|
|
|
|
|
|
|
|
|
283 |
register_setting($this->plugin_name, $this->plugin_name, array($this, 'validate'));
|
284 |
|
285 |
+
// tammullen found this.
|
286 |
+
if ($pagenow == 'admin.php' && isset($_GET) && isset($_GET['page']) && 'mailchimp-woocommerce' === $_GET['page']) {
|
287 |
+
$this->handle_abandoned_cart_table();
|
288 |
+
$this->update_db_check();
|
289 |
+
if (get_option('mailchimp-woocommerce-sync.initial_sync') == 1 && get_option('mailchimp-woocommerce-sync.completed_at') > 0 ) {
|
290 |
+
$this->mailchimp_show_initial_sync_message();
|
291 |
+
}
|
292 |
+
}
|
293 |
}
|
294 |
|
295 |
/**
|
310 |
// resave the site option so this only fires once.
|
311 |
update_site_option('mailchimp_woocommerce_version', $version);
|
312 |
|
313 |
+
// get plugin options
|
314 |
$options = $this->getOptions();
|
315 |
|
316 |
+
// set permission_cap in case there's none set.
|
317 |
if (!isset($options['mailchimp_permission_cap']) || empty($options['mailchimp_permission_cap']) ) {
|
318 |
$options['mailchimp_permission_cap'] = 'manage_options';
|
319 |
update_option($this->plugin_name, $options);
|
320 |
}
|
321 |
+
|
322 |
+
// resend marketing status to update latest changes
|
323 |
+
if (!empty($options['admin_email'])) {
|
324 |
+
try {
|
325 |
+
// send the post to the mailchimp server
|
326 |
+
$comm_opt = get_option('mailchimp-woocommerce-comm.opt', 0);
|
327 |
+
$this->mailchimp_set_communications_status_on_server($comm_opt, $options['admin_email']);
|
328 |
+
} catch (\Exception $e) {
|
329 |
+
mailchimp_error("marketing_status_update", $e->getMessage());
|
330 |
+
}
|
331 |
+
}
|
332 |
}
|
333 |
|
334 |
if (!get_option( $this->plugin_name.'_cart_table_add_index_update')) {
|
431 |
}
|
432 |
|
433 |
$data = $this->mailchimp_set_store_currency_code($new_currency_code);
|
434 |
+
|
435 |
+
// sync the store with MC
|
436 |
+
try {
|
437 |
+
$store_created = $this->syncStore($data);
|
438 |
+
}
|
439 |
+
catch (Exception $e){
|
440 |
+
mailchimp_log('store.sync@woo.update', 'Store cannot be synced', $e->getMessage());
|
441 |
+
return false;
|
442 |
+
}
|
443 |
+
|
444 |
+
return $store_created;
|
445 |
}
|
446 |
|
447 |
/**
|
528 |
|
529 |
$active_tab = isset($input['mailchimp_active_tab']) ? $input['mailchimp_active_tab'] : null;
|
530 |
|
531 |
+
if (empty($active_tab) && isset($input['woocommerce_settings_save_general']) && $input['woocommerce_settings_save_general']) {
|
532 |
unset($input['woocommerce_settings_save_general']);
|
533 |
$data['store_currency_code'] = (string) $input['store_currency_code'];
|
534 |
}
|
568 |
// remove all the pointers to be sure
|
569 |
$service = new MailChimp_Service();
|
570 |
$service->removePointers(true, true);
|
571 |
+
$this->startSync();
|
572 |
$this->showSyncStartedMessage();
|
573 |
$this->setData('sync.config.resync', true);
|
574 |
}
|
810 |
|
811 |
$this->setData('validation.store_info', true);
|
812 |
|
|
|
|
|
|
|
813 |
if ($this->hasValidMailChimpList()) {
|
814 |
+
// sync the store with MC
|
815 |
+
try {
|
816 |
+
$this->syncStore(array_merge($this->getOptions(), $data));
|
817 |
+
}
|
818 |
+
catch (Exception $e){
|
819 |
+
$this->setData('validation.store_info', false);
|
820 |
+
mailchimp_log('errors.store_info', 'Store cannot be synced :: ' . $e->getMessage());
|
821 |
+
add_settings_error('mailchimp_store_info', '', __('Cannot create or update Store at Mailchimp.', 'mailchimp-for-woocommerce') . ' Mailchimp says: ' . $e->getMessage());
|
822 |
+
return $data;
|
823 |
+
}
|
824 |
}
|
825 |
+
|
826 |
+
$data['active_tab'] = 'campaign_defaults';
|
827 |
+
$data['store_currency_code'] = get_woocommerce_currency();
|
828 |
+
|
829 |
return $data;
|
830 |
}
|
831 |
|
1017 |
$this->setData('validation.newsletter_settings', true);
|
1018 |
|
1019 |
// sync the store with MC
|
1020 |
+
try {
|
1021 |
+
$store_created = $this->syncStore(array_merge($this->getOptions(), $data));
|
1022 |
+
}
|
1023 |
+
catch (Exception $e){
|
1024 |
+
$this->setData('validation.newsletter_settings', false);
|
1025 |
+
mailchimp_log('errors.newsletter_settings', 'Store cannot be synced :: ' . $e->getMessage());
|
1026 |
+
add_settings_error('mailchimp_newsletter_settings', '', __('Cannot create or update Store at Mailchimp.', 'mailchimp-for-woocommerce') . ' Mailchimp says: ' . $e->getMessage());
|
1027 |
+
$data['active_tab'] = 'newsletter_settings';
|
1028 |
+
return $data;
|
1029 |
+
}
|
1030 |
|
1031 |
// if there was already a store in Mailchimp, use the list ID from Mailchimp
|
1032 |
if ($this->swapped_list_id) {
|
1034 |
}
|
1035 |
|
1036 |
// start the sync automatically if the sync is false
|
1037 |
+
if ($store_created && ((bool) $this->getData('sync.started_at', false) === false)) {
|
1038 |
+
// tell the next page view to start the sync with a transient since the data isn't available yet
|
1039 |
+
set_site_transient('mailchimp_woocommerce_start_sync', microtime(), 300);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1040 |
|
1041 |
$this->showSyncStartedMessage();
|
1042 |
}
|
1043 |
+
|
1044 |
$data['active_tab'] = 'sync';
|
1045 |
|
1046 |
return $data;
|
1378 |
|
1379 |
$submission->setContact($this->address($data));
|
1380 |
|
1381 |
+
try {
|
1382 |
+
$submission->setDoi(mailchimp_list_has_double_optin(true));
|
1383 |
+
}
|
1384 |
+
catch (\Exception $e) {
|
1385 |
+
add_settings_error('list_sync_error', '', __('Cannot create or update List at Mailchimp.', 'mailchimp-for-woocommerce') . ' ' . $e->getMessage() . ' ' . __('Please retry.', 'mailchimp-for-woocommerce'));
|
1386 |
+
$this->setData('errors.mailchimp_list', $e->getMessage());
|
1387 |
+
return false;
|
1388 |
+
}
|
1389 |
+
|
1390 |
// let's turn this on for debugging purposes.
|
1391 |
mailchimp_debug('admin', 'list info submission', array('submission' => print_r($submission->getSubmission(), true)));
|
1392 |
|
1499 |
}
|
1500 |
}
|
1501 |
$this->setData('errors.store_info', $e->getMessage());
|
1502 |
+
throw($e);
|
1503 |
}
|
1504 |
|
1505 |
return false;
|
1568 |
/**
|
1569 |
* Start the sync
|
1570 |
*/
|
1571 |
+
public function startSync()
|
1572 |
{
|
1573 |
// delete the transient so this only happens one time.
|
1574 |
delete_site_transient('mailchimp_woocommerce_start_sync');
|
1575 |
|
1576 |
$full_sync = new MailChimp_WooCommerce_Process_Full_Sync_Manager();
|
1577 |
|
1578 |
+
// make sure the storeeId saved on DB is the same on Mailchimp
|
1579 |
+
try {
|
1580 |
+
$this->syncStore();
|
1581 |
+
}
|
1582 |
+
catch (\Exception $e) {
|
1583 |
+
mailchimp_log('error.sync', 'Store cannot be synced :: ' . $e->getMessage());
|
1584 |
+
add_settings_error('mailchimp_sync_error', '', __('Cannot create or update Store at Mailchimp.', 'mailchimp-for-woocommerce') . ' Mailchimp says: ' . $e->getMessage());
|
1585 |
+
return false;
|
1586 |
+
}
|
1587 |
+
|
1588 |
// tell Mailchimp that we're syncing
|
1589 |
$full_sync->start_sync();
|
1590 |
|
1591 |
// enqueue sync manager
|
1592 |
as_enqueue_async_action( 'MailChimp_WooCommerce_Process_Full_Sync_Manager', array(), 'mc-woocommerce' );
|
|
|
1593 |
}
|
1594 |
|
1595 |
/**
|
admin/css/mailchimp-woocommerce-admin-settings-5.2.css
CHANGED
@@ -759,7 +759,7 @@
|
|
759 |
color: #7FAD45 !important;
|
760 |
}
|
761 |
|
762 |
-
#mc-woocommerce-create-account
|
763 |
padding-bottom: 20px;
|
764 |
}
|
765 |
|
@@ -800,7 +800,7 @@
|
|
800 |
padding-top: 30px;
|
801 |
}
|
802 |
|
803 |
-
.mc-woocommerce-create-account-modal-header
|
804 |
text-align: center;
|
805 |
padding-top: 30px;
|
806 |
font-size: 2em;
|
759 |
color: #7FAD45 !important;
|
760 |
}
|
761 |
|
762 |
+
#mc-woocommerce-create-account h3 {
|
763 |
padding-bottom: 20px;
|
764 |
}
|
765 |
|
800 |
padding-top: 30px;
|
801 |
}
|
802 |
|
803 |
+
.mc-woocommerce-create-account-modal-header h3{
|
804 |
text-align: center;
|
805 |
padding-top: 30px;
|
806 |
font-size: 2em;
|
admin/css/mailchimp-woocommerce-admin-settings.css
CHANGED
@@ -331,6 +331,7 @@
|
|
331 |
transition: background-color 0.3s ease-out,
|
332 |
text-shadow 0.3s ease-out,
|
333 |
box-shadow 0.3s ease-out;
|
|
|
334 |
}
|
335 |
|
336 |
.tab-content-submit:focus,.tab-content-submit:hover{
|
@@ -531,6 +532,7 @@
|
|
531 |
-moz-transition: background-color 0.3s ease-out;
|
532 |
-o-transition: background-color 0.3s ease-out;
|
533 |
transition: background-color 0.3s ease-out;
|
|
|
534 |
}
|
535 |
|
536 |
.sync-content-wrapper .mc-woocommerce-disconnect-button svg,
|
@@ -725,7 +727,6 @@
|
|
725 |
background: #fff;
|
726 |
border: 1px solid #e5e5e5;
|
727 |
box-shadow: 0 1px 1px rgba(0,0,0,.04);
|
728 |
-
padding: 15px 20px;
|
729 |
}
|
730 |
|
731 |
#log-viewer pre {
|
@@ -733,6 +734,28 @@
|
|
733 |
white-space: pre-wrap;
|
734 |
}
|
735 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
736 |
|
737 |
/* account create modal */
|
738 |
#mc-woocommerce-create-account-link {
|
@@ -745,7 +768,7 @@
|
|
745 |
align-items: center;
|
746 |
justify-content: center;
|
747 |
position: absolute;
|
748 |
-
top:
|
749 |
left: 0;
|
750 |
visibility: hidden;
|
751 |
display: none;
|
@@ -763,7 +786,7 @@
|
|
763 |
color: #7FAD45 !important;
|
764 |
}
|
765 |
|
766 |
-
#mc-woocommerce-create-account
|
767 |
padding-bottom: 20px;
|
768 |
}
|
769 |
|
@@ -804,7 +827,7 @@
|
|
804 |
padding-top: 30px;
|
805 |
}
|
806 |
|
807 |
-
.mc-woocommerce-create-account-modal-header
|
808 |
text-align: center;
|
809 |
padding-top: 30px;
|
810 |
font-size: 2em;
|
@@ -903,6 +926,10 @@
|
|
903 |
text-align: center;
|
904 |
}
|
905 |
|
|
|
|
|
|
|
|
|
906 |
.tab-content-wrapper form{
|
907 |
padding: 1em;
|
908 |
}
|
331 |
transition: background-color 0.3s ease-out,
|
332 |
text-shadow 0.3s ease-out,
|
333 |
box-shadow 0.3s ease-out;
|
334 |
+
text-decoration: none !important;
|
335 |
}
|
336 |
|
337 |
.tab-content-submit:focus,.tab-content-submit:hover{
|
532 |
-moz-transition: background-color 0.3s ease-out;
|
533 |
-o-transition: background-color 0.3s ease-out;
|
534 |
transition: background-color 0.3s ease-out;
|
535 |
+
text-decoration: none !important;
|
536 |
}
|
537 |
|
538 |
.sync-content-wrapper .mc-woocommerce-disconnect-button svg,
|
727 |
background: #fff;
|
728 |
border: 1px solid #e5e5e5;
|
729 |
box-shadow: 0 1px 1px rgba(0,0,0,.04);
|
|
|
730 |
}
|
731 |
|
732 |
#log-viewer pre {
|
734 |
white-space: pre-wrap;
|
735 |
}
|
736 |
|
737 |
+
#log-viewer #log-header {
|
738 |
+
border-bottom: 1px solid #e5e5e5;
|
739 |
+
padding: 15px 20px;
|
740 |
+
}
|
741 |
+
|
742 |
+
#log-viewer #log-content {
|
743 |
+
height: 500px;
|
744 |
+
padding: 15px 20px;
|
745 |
+
width: 100%;
|
746 |
+
background-color: white;
|
747 |
+
color: #444;
|
748 |
+
font-family: monospace;
|
749 |
+
white-space: pre-wrap;
|
750 |
+
font-size: 1em;
|
751 |
+
|
752 |
+
}
|
753 |
+
|
754 |
+
#log-viewer #log-content:focus {
|
755 |
+
outline: none;
|
756 |
+
box-shadow: none !important;
|
757 |
+
}
|
758 |
+
|
759 |
|
760 |
/* account create modal */
|
761 |
#mc-woocommerce-create-account-link {
|
768 |
align-items: center;
|
769 |
justify-content: center;
|
770 |
position: absolute;
|
771 |
+
top: 50px;
|
772 |
left: 0;
|
773 |
visibility: hidden;
|
774 |
display: none;
|
786 |
color: #7FAD45 !important;
|
787 |
}
|
788 |
|
789 |
+
#mc-woocommerce-create-account h3 {
|
790 |
padding-bottom: 20px;
|
791 |
}
|
792 |
|
827 |
padding-top: 30px;
|
828 |
}
|
829 |
|
830 |
+
.mc-woocommerce-create-account-modal-header h3{
|
831 |
text-align: center;
|
832 |
padding-top: 30px;
|
833 |
font-size: 2em;
|
926 |
text-align: center;
|
927 |
}
|
928 |
|
929 |
+
.mc-woocommerce-delete-log-button {
|
930 |
+
display: none;
|
931 |
+
}
|
932 |
+
|
933 |
.tab-content-wrapper form{
|
934 |
padding: 1em;
|
935 |
}
|
admin/js/mailchimp-woocommerce-admin.js
CHANGED
@@ -35,7 +35,7 @@
|
|
35 |
// copy log button
|
36 |
$('.mc-woocommerce-copy-log-button').click(function (e) {
|
37 |
e.preventDefault();
|
38 |
-
var copyText = $('#log-
|
39 |
var $temp = $("<textarea>");
|
40 |
$("body").append($temp);
|
41 |
$temp.val($(copyText).text()).select();
|
35 |
// copy log button
|
36 |
$('.mc-woocommerce-copy-log-button').click(function (e) {
|
37 |
e.preventDefault();
|
38 |
+
var copyText = $('#log-content');
|
39 |
var $temp = $("<textarea>");
|
40 |
$("body").append($temp);
|
41 |
$temp.val($(copyText).text()).select();
|
admin/partials/mailchimp-woocommerce-admin-tabs.php
CHANGED
@@ -108,7 +108,12 @@ else {
|
|
108 |
wp_kses(_e('Please apply your audience settings. If you don’t<br/>have an audience, you can choose to create one', 'mailchimp-for-woocommerce'), $allowed_html);
|
109 |
}
|
110 |
if ($active_tab == 'sync' && $show_sync_tab) {
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
112 |
}
|
113 |
|
114 |
if ($active_tab == 'logs' && $show_sync_tab) {
|
@@ -182,13 +187,14 @@ else {
|
|
182 |
<?php endif; ?>
|
183 |
</div>
|
184 |
<?php endif; ?>
|
185 |
-
|
186 |
<?php
|
187 |
$settings_errors = get_settings_errors();
|
188 |
if (!$show_wizard || ($show_wizard && isset($settings_errors[0]) && $settings_errors[0]['type'] != 'updated' )) {
|
189 |
echo mailchimp_settings_errors();
|
190 |
}
|
191 |
?>
|
|
|
192 |
<?php if ($active_tab != 'sync'): ?>
|
193 |
<div class="tab-content-wrapper">
|
194 |
<?php endif; ?>
|
108 |
wp_kses(_e('Please apply your audience settings. If you don’t<br/>have an audience, you can choose to create one', 'mailchimp-for-woocommerce'), $allowed_html);
|
109 |
}
|
110 |
if ($active_tab == 'sync' && $show_sync_tab) {
|
111 |
+
if (mailchimp_is_done_syncing()) {
|
112 |
+
wp_kses(_e('Sweet! You\'re connected with<br/>Mailchimp and syncing data', 'mailchimp-for-woocommerce'), $allowed_html);
|
113 |
+
}
|
114 |
+
else {
|
115 |
+
wp_kses(_e('Connect your WooCommerce store to a<br/>Mailchimp audience in less than 60 seconds', 'mailchimp-for-woocommerce'), $allowed_html);
|
116 |
+
}
|
117 |
}
|
118 |
|
119 |
if ($active_tab == 'logs' && $show_sync_tab) {
|
187 |
<?php endif; ?>
|
188 |
</div>
|
189 |
<?php endif; ?>
|
190 |
+
|
191 |
<?php
|
192 |
$settings_errors = get_settings_errors();
|
193 |
if (!$show_wizard || ($show_wizard && isset($settings_errors[0]) && $settings_errors[0]['type'] != 'updated' )) {
|
194 |
echo mailchimp_settings_errors();
|
195 |
}
|
196 |
?>
|
197 |
+
|
198 |
<?php if ($active_tab != 'sync'): ?>
|
199 |
<div class="tab-content-wrapper">
|
200 |
<?php endif; ?>
|
admin/partials/tabs/api_key_create_account.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<p id="mc-woocommerce-create-account-link" class="create-account-link alignright">Don’t have a Mailchimp account yet? <a style="font-
|
2 |
<div id="mc-woocommerce-create-account">
|
3 |
<div id="exampleModal" class="reveal-modal">
|
4 |
<a href="#" class="close-modal"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
@@ -15,7 +15,7 @@
|
|
15 |
<path d="M12.1324 33.1577C12.0456 33.0492 11.9056 33.0827 11.7695 33.1143C11.6749 33.136 11.5664 33.1616 11.448 33.1596C11.1936 33.1557 10.9786 33.0452 10.8583 32.8598C10.7006 32.6192 10.7104 32.2583 10.884 31.8461C10.9076 31.7909 10.9353 31.7297 10.9648 31.6607C11.241 31.0394 11.7064 30 11.1857 29.008C10.7932 28.2625 10.1542 27.797 9.38702 27.7004C8.64939 27.6077 7.89006 27.8798 7.40685 28.4143C6.64358 29.2565 6.52328 30.4044 6.6712 30.8087C6.72445 30.9566 6.80925 30.998 6.87237 31.0059C7.00254 31.0237 7.19385 30.929 7.31416 30.6055C7.32205 30.5819 7.33388 30.5464 7.34769 30.501C7.40094 30.3294 7.50152 30.0099 7.66522 29.7555C7.86245 29.4478 8.17012 29.2348 8.53105 29.1579C8.89789 29.079 9.2746 29.15 9.58819 29.3551C10.1227 29.7062 10.3298 30.361 10.101 30.9862C9.98264 31.3096 9.79133 31.9289 9.83275 32.4378C9.91756 33.4673 10.5507 33.8795 11.1206 33.9249C11.6729 33.9466 12.0594 33.6349 12.1581 33.4081C12.2133 33.274 12.164 33.1932 12.1324 33.1577Z" fill="black"/>
|
16 |
<path d="M44.044 31.2761C44.0223 31.2012 43.8862 30.7002 43.6969 30.0967C43.5075 29.4932 43.3142 29.0672 43.3142 29.0672C44.0696 27.9351 44.0834 26.9233 43.9828 26.3514C43.8763 25.6414 43.5805 25.0359 42.9829 24.4107C42.3873 23.7854 41.1684 23.1445 39.4545 22.6632C39.2593 22.608 38.6123 22.4305 38.5551 22.4127C38.5512 22.3753 38.5078 20.2945 38.4684 19.3991C38.4408 18.7522 38.3836 17.7444 38.0719 16.7504C37.6992 15.4053 37.0483 14.2298 36.2377 13.4764C38.4763 11.157 39.8726 8.60091 39.8707 6.40774C39.8647 2.19102 34.6855 0.914962 28.3033 3.55781C28.2974 3.55978 26.9602 4.1278 26.9503 4.13174C26.9444 4.12582 24.5066 1.73346 24.4692 1.7019C17.1954 -4.64488 -5.55475 20.6436 1.71899 26.7853L3.30864 28.1323C2.89644 29.2013 2.73471 30.4241 2.86685 31.7396C3.03647 33.4299 3.90822 35.0511 5.32234 36.3015C6.66348 37.4908 8.42669 38.2422 10.1386 38.2402C12.9688 44.7626 19.4359 48.7643 27.0193 48.9891C35.153 49.2317 41.981 45.4134 44.8428 38.5578C45.0301 38.0765 45.825 35.909 45.825 33.9939C45.825 32.0729 44.7382 31.2761 44.044 31.2761ZM10.7638 36.41C10.5173 36.4514 10.2649 36.4691 10.0104 36.4632C7.55298 36.3981 4.90027 34.1852 4.63598 31.5621C4.34409 28.6629 5.82527 26.4322 8.44839 25.9017C8.76198 25.8386 9.14066 25.8011 9.54892 25.8228C11.0183 25.9037 13.1838 27.0318 13.6789 30.2328C14.1187 33.0689 13.4225 35.9564 10.7638 36.41ZM8.02041 24.1681C6.38736 24.4856 4.9476 25.4106 4.06797 26.6886C3.54137 26.2508 2.56115 25.4007 2.38956 25.0694C0.985306 22.4009 3.92202 17.2138 5.97516 14.285C11.0478 7.04676 18.9922 1.56581 22.6705 2.55984C23.2681 2.72945 25.2482 5.02518 25.2482 5.02518C25.2482 5.02518 21.5719 7.06451 18.1618 9.90853C13.5704 13.4468 10.0992 18.5885 8.02041 24.1681ZM33.8079 35.3252C33.8611 35.3035 33.8986 35.2424 33.8927 35.1812C33.8848 35.1063 33.8177 35.0531 33.7448 35.0609C33.7448 35.0609 29.8969 35.6309 26.26 34.2996C26.6564 33.0117 27.7096 33.4772 29.3012 33.6054C32.1709 33.777 34.7408 33.3569 36.642 32.8125C38.2889 32.3392 40.4505 31.4083 42.1309 30.0829C42.6969 31.3274 42.8981 32.6962 42.8981 32.6962C42.8981 32.6962 43.3359 32.6173 43.7028 32.8441C44.0499 33.0571 44.3024 33.5009 44.1288 34.6448C43.7758 36.7847 42.8665 38.5223 41.338 40.1198C40.4071 41.1217 39.277 41.9935 37.9852 42.6266C37.2988 42.9875 36.5671 43.2991 35.7959 43.5516C30.033 45.4331 24.1339 43.3642 22.2326 38.9207C22.0807 38.5874 21.9525 38.2363 21.852 37.8714C21.0414 34.9426 21.7297 31.43 23.8795 29.2171C23.8795 29.2171 23.8795 29.2171 23.8795 29.2151C24.0116 29.0751 24.1477 28.9094 24.1477 28.7004C24.1477 28.5248 24.0372 28.3414 23.9406 28.2112C23.1892 27.1206 20.5818 25.2607 21.1045 21.6613C21.4792 19.0757 23.7414 17.2553 25.8498 17.3637C26.0273 17.3736 26.2067 17.3834 26.3842 17.3953C27.2974 17.4485 28.0942 17.5669 28.8476 17.5984C30.1059 17.6537 31.238 17.4702 32.5792 16.3519C33.0308 15.9752 33.3937 15.6478 34.0071 15.5453C34.0722 15.5335 34.2319 15.4763 34.5534 15.492C34.8808 15.5098 35.1924 15.5985 35.4725 15.7859C36.5474 16.5018 36.6992 18.2335 36.7545 19.4997C36.786 20.2235 36.8728 21.9729 36.9044 22.4759C36.9734 23.6237 37.2751 23.7874 37.8846 23.9886C38.2278 24.101 38.5473 24.1858 39.0167 24.318C40.4387 24.7183 41.2828 25.1227 41.8153 25.6433C42.1329 25.9688 42.2808 26.3139 42.3261 26.6433C42.4938 27.8661 41.3755 29.3788 38.4171 30.7515C35.1826 32.2524 31.2577 32.6331 28.5459 32.3313C28.3388 32.3076 27.5992 32.2248 27.5952 32.2248C25.4257 31.9329 24.1891 34.7355 25.4908 36.6565C26.329 37.8951 28.6149 38.6998 30.9008 38.6998C36.1431 38.6998 40.1724 36.4613 41.6713 34.5284C41.7167 34.4712 41.7206 34.4633 41.7916 34.3568C41.8646 34.2464 41.8055 34.1852 41.7128 34.2464C40.488 35.0846 35.0484 38.4099 29.2322 37.4099C29.2322 37.4099 28.5261 37.2936 27.8792 37.0431C27.3664 36.8439 26.2935 36.3508 26.1634 35.2483C30.8514 36.6979 33.8079 35.3252 33.8079 35.3252ZM26.3704 34.4476C26.3704 34.4476 26.3724 34.4476 26.3704 34.4476C26.3724 34.4495 26.3724 34.4495 26.3724 34.4515C26.3724 34.4495 26.3724 34.4476 26.3704 34.4476ZM17.3887 14.2554C19.1914 12.1707 21.4121 10.3602 23.4002 9.34249C23.4692 9.30699 23.5422 9.38193 23.5047 9.44899C23.3469 9.73497 23.0432 10.3464 22.9466 10.8118C22.9308 10.8848 23.0097 10.9381 23.0708 10.8966C24.3074 10.0525 26.4612 9.14921 28.3486 9.03284C28.4295 9.02693 28.4689 9.13146 28.4039 9.18076C28.1159 9.40166 27.8023 9.70539 27.5735 10.0131C27.5341 10.0663 27.5716 10.1413 27.6366 10.1413C28.962 10.1511 30.8317 10.6146 32.0486 11.297C32.1315 11.3424 32.0723 11.5021 31.9796 11.4824C30.1375 11.0603 27.1199 10.7389 23.986 11.5041C21.1893 12.1865 19.0533 13.2397 17.4952 14.3738C17.4203 14.4329 17.3256 14.3304 17.3887 14.2554Z" fill="black"/>
|
17 |
</svg>
|
18 |
-
<
|
19 |
|
20 |
</div>
|
21 |
|
@@ -158,7 +158,7 @@
|
|
158 |
'br' => array()
|
159 |
);
|
160 |
?>
|
161 |
-
<?= sprintf(/* translators: %s - Mailchimp legal pages */wp_kses( __( 'By clicking the "Get Started!" button, you are creating a Mailchimp account, and you agree to Mailchimp\'s <a href=%s target=_blank>Terms of Use</a> and <a href=%s target=_blank>Privacy Policy</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://mailchimp.com/legal/terms
|
162 |
|
163 |
</p>
|
164 |
</div>
|
@@ -188,7 +188,7 @@
|
|
188 |
|
189 |
|
190 |
<div class="mc-woocommerce-create-account-modal-footer">
|
191 |
-
©2001
|
192 |
</div>
|
193 |
|
194 |
</div>
|
1 |
+
<p id="mc-woocommerce-create-account-link" class="create-account-link alignright">Don’t have a Mailchimp account yet? <a style="font-weight:bold !important;" href='#mc-woocommerce-create-account'>Create one here</a></p>
|
2 |
<div id="mc-woocommerce-create-account">
|
3 |
<div id="exampleModal" class="reveal-modal">
|
4 |
<a href="#" class="close-modal"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
15 |
<path d="M12.1324 33.1577C12.0456 33.0492 11.9056 33.0827 11.7695 33.1143C11.6749 33.136 11.5664 33.1616 11.448 33.1596C11.1936 33.1557 10.9786 33.0452 10.8583 32.8598C10.7006 32.6192 10.7104 32.2583 10.884 31.8461C10.9076 31.7909 10.9353 31.7297 10.9648 31.6607C11.241 31.0394 11.7064 30 11.1857 29.008C10.7932 28.2625 10.1542 27.797 9.38702 27.7004C8.64939 27.6077 7.89006 27.8798 7.40685 28.4143C6.64358 29.2565 6.52328 30.4044 6.6712 30.8087C6.72445 30.9566 6.80925 30.998 6.87237 31.0059C7.00254 31.0237 7.19385 30.929 7.31416 30.6055C7.32205 30.5819 7.33388 30.5464 7.34769 30.501C7.40094 30.3294 7.50152 30.0099 7.66522 29.7555C7.86245 29.4478 8.17012 29.2348 8.53105 29.1579C8.89789 29.079 9.2746 29.15 9.58819 29.3551C10.1227 29.7062 10.3298 30.361 10.101 30.9862C9.98264 31.3096 9.79133 31.9289 9.83275 32.4378C9.91756 33.4673 10.5507 33.8795 11.1206 33.9249C11.6729 33.9466 12.0594 33.6349 12.1581 33.4081C12.2133 33.274 12.164 33.1932 12.1324 33.1577Z" fill="black"/>
|
16 |
<path d="M44.044 31.2761C44.0223 31.2012 43.8862 30.7002 43.6969 30.0967C43.5075 29.4932 43.3142 29.0672 43.3142 29.0672C44.0696 27.9351 44.0834 26.9233 43.9828 26.3514C43.8763 25.6414 43.5805 25.0359 42.9829 24.4107C42.3873 23.7854 41.1684 23.1445 39.4545 22.6632C39.2593 22.608 38.6123 22.4305 38.5551 22.4127C38.5512 22.3753 38.5078 20.2945 38.4684 19.3991C38.4408 18.7522 38.3836 17.7444 38.0719 16.7504C37.6992 15.4053 37.0483 14.2298 36.2377 13.4764C38.4763 11.157 39.8726 8.60091 39.8707 6.40774C39.8647 2.19102 34.6855 0.914962 28.3033 3.55781C28.2974 3.55978 26.9602 4.1278 26.9503 4.13174C26.9444 4.12582 24.5066 1.73346 24.4692 1.7019C17.1954 -4.64488 -5.55475 20.6436 1.71899 26.7853L3.30864 28.1323C2.89644 29.2013 2.73471 30.4241 2.86685 31.7396C3.03647 33.4299 3.90822 35.0511 5.32234 36.3015C6.66348 37.4908 8.42669 38.2422 10.1386 38.2402C12.9688 44.7626 19.4359 48.7643 27.0193 48.9891C35.153 49.2317 41.981 45.4134 44.8428 38.5578C45.0301 38.0765 45.825 35.909 45.825 33.9939C45.825 32.0729 44.7382 31.2761 44.044 31.2761ZM10.7638 36.41C10.5173 36.4514 10.2649 36.4691 10.0104 36.4632C7.55298 36.3981 4.90027 34.1852 4.63598 31.5621C4.34409 28.6629 5.82527 26.4322 8.44839 25.9017C8.76198 25.8386 9.14066 25.8011 9.54892 25.8228C11.0183 25.9037 13.1838 27.0318 13.6789 30.2328C14.1187 33.0689 13.4225 35.9564 10.7638 36.41ZM8.02041 24.1681C6.38736 24.4856 4.9476 25.4106 4.06797 26.6886C3.54137 26.2508 2.56115 25.4007 2.38956 25.0694C0.985306 22.4009 3.92202 17.2138 5.97516 14.285C11.0478 7.04676 18.9922 1.56581 22.6705 2.55984C23.2681 2.72945 25.2482 5.02518 25.2482 5.02518C25.2482 5.02518 21.5719 7.06451 18.1618 9.90853C13.5704 13.4468 10.0992 18.5885 8.02041 24.1681ZM33.8079 35.3252C33.8611 35.3035 33.8986 35.2424 33.8927 35.1812C33.8848 35.1063 33.8177 35.0531 33.7448 35.0609C33.7448 35.0609 29.8969 35.6309 26.26 34.2996C26.6564 33.0117 27.7096 33.4772 29.3012 33.6054C32.1709 33.777 34.7408 33.3569 36.642 32.8125C38.2889 32.3392 40.4505 31.4083 42.1309 30.0829C42.6969 31.3274 42.8981 32.6962 42.8981 32.6962C42.8981 32.6962 43.3359 32.6173 43.7028 32.8441C44.0499 33.0571 44.3024 33.5009 44.1288 34.6448C43.7758 36.7847 42.8665 38.5223 41.338 40.1198C40.4071 41.1217 39.277 41.9935 37.9852 42.6266C37.2988 42.9875 36.5671 43.2991 35.7959 43.5516C30.033 45.4331 24.1339 43.3642 22.2326 38.9207C22.0807 38.5874 21.9525 38.2363 21.852 37.8714C21.0414 34.9426 21.7297 31.43 23.8795 29.2171C23.8795 29.2171 23.8795 29.2171 23.8795 29.2151C24.0116 29.0751 24.1477 28.9094 24.1477 28.7004C24.1477 28.5248 24.0372 28.3414 23.9406 28.2112C23.1892 27.1206 20.5818 25.2607 21.1045 21.6613C21.4792 19.0757 23.7414 17.2553 25.8498 17.3637C26.0273 17.3736 26.2067 17.3834 26.3842 17.3953C27.2974 17.4485 28.0942 17.5669 28.8476 17.5984C30.1059 17.6537 31.238 17.4702 32.5792 16.3519C33.0308 15.9752 33.3937 15.6478 34.0071 15.5453C34.0722 15.5335 34.2319 15.4763 34.5534 15.492C34.8808 15.5098 35.1924 15.5985 35.4725 15.7859C36.5474 16.5018 36.6992 18.2335 36.7545 19.4997C36.786 20.2235 36.8728 21.9729 36.9044 22.4759C36.9734 23.6237 37.2751 23.7874 37.8846 23.9886C38.2278 24.101 38.5473 24.1858 39.0167 24.318C40.4387 24.7183 41.2828 25.1227 41.8153 25.6433C42.1329 25.9688 42.2808 26.3139 42.3261 26.6433C42.4938 27.8661 41.3755 29.3788 38.4171 30.7515C35.1826 32.2524 31.2577 32.6331 28.5459 32.3313C28.3388 32.3076 27.5992 32.2248 27.5952 32.2248C25.4257 31.9329 24.1891 34.7355 25.4908 36.6565C26.329 37.8951 28.6149 38.6998 30.9008 38.6998C36.1431 38.6998 40.1724 36.4613 41.6713 34.5284C41.7167 34.4712 41.7206 34.4633 41.7916 34.3568C41.8646 34.2464 41.8055 34.1852 41.7128 34.2464C40.488 35.0846 35.0484 38.4099 29.2322 37.4099C29.2322 37.4099 28.5261 37.2936 27.8792 37.0431C27.3664 36.8439 26.2935 36.3508 26.1634 35.2483C30.8514 36.6979 33.8079 35.3252 33.8079 35.3252ZM26.3704 34.4476C26.3704 34.4476 26.3724 34.4476 26.3704 34.4476C26.3724 34.4495 26.3724 34.4495 26.3724 34.4515C26.3724 34.4495 26.3724 34.4476 26.3704 34.4476ZM17.3887 14.2554C19.1914 12.1707 21.4121 10.3602 23.4002 9.34249C23.4692 9.30699 23.5422 9.38193 23.5047 9.44899C23.3469 9.73497 23.0432 10.3464 22.9466 10.8118C22.9308 10.8848 23.0097 10.9381 23.0708 10.8966C24.3074 10.0525 26.4612 9.14921 28.3486 9.03284C28.4295 9.02693 28.4689 9.13146 28.4039 9.18076C28.1159 9.40166 27.8023 9.70539 27.5735 10.0131C27.5341 10.0663 27.5716 10.1413 27.6366 10.1413C28.962 10.1511 30.8317 10.6146 32.0486 11.297C32.1315 11.3424 32.0723 11.5021 31.9796 11.4824C30.1375 11.0603 27.1199 10.7389 23.986 11.5041C21.1893 12.1865 19.0533 13.2397 17.4952 14.3738C17.4203 14.4329 17.3256 14.3304 17.3887 14.2554Z" fill="black"/>
|
17 |
</svg>
|
18 |
+
<h3>Create your mailchimp account (<span id="step_count">1</span> of 2)</h3>
|
19 |
|
20 |
</div>
|
21 |
|
158 |
'br' => array()
|
159 |
);
|
160 |
?>
|
161 |
+
<?= sprintf(/* translators: %s - Mailchimp legal pages */wp_kses( __( 'By clicking the "Get Started!" button, you are creating a Mailchimp account, and you agree to Mailchimp\'s <a href=%1$s target=_blank>Terms of Use</a> and <a href=%2$s target=_blank>Privacy Policy</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://mailchimp.com/legal/terms' ), esc_url( 'https://mailchimp.com/legal/privacy' ) );?>
|
162 |
|
163 |
</p>
|
164 |
</div>
|
188 |
|
189 |
|
190 |
<div class="mc-woocommerce-create-account-modal-footer">
|
191 |
+
©2001–<?= date('Y') ?> All Rights Reserved. Mailchimp® is a registered trademark of The Rocket Science Group. Cookie Preferences, Privacy, and Terms.
|
192 |
</div>
|
193 |
|
194 |
</div>
|
admin/partials/tabs/logs.php
CHANGED
@@ -39,7 +39,7 @@ $handle = !empty($viewed_log) ? substr($viewed_log, 0, strlen($viewed_log) > 37
|
|
39 |
</legend>
|
40 |
|
41 |
<div class="box fieldset-header" >
|
42 |
-
<label for="<?php echo $this->plugin_name; ?>-logging"><
|
43 |
</div>
|
44 |
|
45 |
<div class="box box-half">
|
@@ -67,9 +67,9 @@ $handle = !empty($viewed_log) ? substr($viewed_log, 0, strlen($viewed_log) > 37
|
|
67 |
|
68 |
<fieldset>
|
69 |
<div class="box fieldset-header" >
|
70 |
-
<
|
71 |
<?php esc_html_e('Recent Logs', 'mailchimp-for-woocommerce'); ?>
|
72 |
-
</
|
73 |
</div>
|
74 |
|
75 |
<div class="box">
|
@@ -88,23 +88,22 @@ $handle = !empty($viewed_log) ? substr($viewed_log, 0, strlen($viewed_log) > 37
|
|
88 |
<div class="box">
|
89 |
<?php if (isset($logs) && isset($viewed_log)) : ?>
|
90 |
<div id="log-viewer">
|
91 |
-
<div
|
92 |
<?php if ( ! empty( $handle ) ) : ?>
|
93 |
-
<a style="display:inline-block" class="mc-woocommerce-
|
|
|
|
|
|
|
94 |
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
95 |
<path d="M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z" fill="#3C3C3C"/>
|
96 |
</svg>
|
97 |
<?php esc_html_e('Delete log', 'mailchimp-for-woocommerce'); ?>
|
98 |
|
99 |
</a>
|
100 |
-
<a style="display:inline-block" class="mc-woocommerce-copy-log-button" href="#">
|
101 |
-
<?php esc_html_e('Copy log', 'mailchimp-for-woocommerce'); ?>
|
102 |
-
</a>
|
103 |
<?php endif; ?>
|
104 |
</div>
|
105 |
-
<
|
106 |
-
|
107 |
-
</div>
|
108 |
</div>
|
109 |
<?php else : ?>
|
110 |
<div class="updated woocommerce-message inline"><p><?php _e( 'There are currently no logs to view.', 'woocommerce' ); ?></p></div>
|
39 |
</legend>
|
40 |
|
41 |
<div class="box fieldset-header" >
|
42 |
+
<label for="<?php echo $this->plugin_name; ?>-logging"><h3 style="padding-top: 1em;"><?php esc_html_e('Logging Preferences', 'mailchimp-for-woocommerce');?></h3></label>
|
43 |
</div>
|
44 |
|
45 |
<div class="box box-half">
|
67 |
|
68 |
<fieldset>
|
69 |
<div class="box fieldset-header" >
|
70 |
+
<h3>
|
71 |
<?php esc_html_e('Recent Logs', 'mailchimp-for-woocommerce'); ?>
|
72 |
+
</h3>
|
73 |
</div>
|
74 |
|
75 |
<div class="box">
|
88 |
<div class="box">
|
89 |
<?php if (isset($logs) && isset($viewed_log)) : ?>
|
90 |
<div id="log-viewer">
|
91 |
+
<div id="log-header">
|
92 |
<?php if ( ! empty( $handle ) ) : ?>
|
93 |
+
<a style="display:inline-block" class="mc-woocommerce-copy-log-button" href="#">
|
94 |
+
<?php esc_html_e('Copy log', 'mailchimp-for-woocommerce'); ?>
|
95 |
+
</a>
|
96 |
+
<a class="mc-woocommerce-delete-log-button" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'handle' => sanitize_title($viewed_log) ), admin_url( 'admin.php?page=mailchimp-woocommerce&tab=logs&mc_action=remove_log' ) ), 'remove_log' ) ); ?>">
|
97 |
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
98 |
<path d="M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z" fill="#3C3C3C"/>
|
99 |
</svg>
|
100 |
<?php esc_html_e('Delete log', 'mailchimp-for-woocommerce'); ?>
|
101 |
|
102 |
</a>
|
|
|
|
|
|
|
103 |
<?php endif; ?>
|
104 |
</div>
|
105 |
+
<textarea id="log-content" readonly><?php echo esc_html( file_get_contents( WC_LOG_DIR . $viewed_log ) ); ?></textarea>
|
106 |
+
|
|
|
107 |
</div>
|
108 |
<?php else : ?>
|
109 |
<div class="updated woocommerce-message inline"><p><?php _e( 'There are currently no logs to view.', 'woocommerce' ); ?></p></div>
|
admin/partials/tabs/newsletter_settings.php
CHANGED
@@ -83,13 +83,13 @@ $list_is_configured = isset($options['mailchimp_list']) && (!empty($options['mai
|
|
83 |
|
84 |
<div class="optional-settings-content">
|
85 |
<div class="box fieldset-header" >
|
86 |
-
<
|
87 |
</div>
|
88 |
|
89 |
<div class="box box-half">
|
90 |
<label for="<?php echo $this->plugin_name; ?>-newsletter-checkbox-label">
|
91 |
<h4><?php esc_html_e('Message for the opt-in checkbox', 'mailchimp-for-woocommerce'); ?></h4>
|
92 |
-
<p><?php _e('
|
93 |
</label>
|
94 |
</div>
|
95 |
|
@@ -101,7 +101,7 @@ $list_is_configured = isset($options['mailchimp_list']) && (!empty($options['mai
|
|
101 |
<div class="box box-half margin-large">
|
102 |
<label>
|
103 |
<h4><?php esc_html_e('Checkbox Display Options', 'mailchimp-for-woocommerce');?></h4>
|
104 |
-
<p><?php _e('
|
105 |
</label>
|
106 |
</div>
|
107 |
|
@@ -133,22 +133,22 @@ $list_is_configured = isset($options['mailchimp_list']) && (!empty($options['mai
|
|
133 |
</div>
|
134 |
|
135 |
<div class="box fieldset-header" >
|
136 |
-
<
|
137 |
</div>
|
138 |
|
139 |
<div class="box box-half" >
|
140 |
<label for="<?php echo $this->plugin_name; ?>-user-tags">
|
141 |
-
<h4><?php esc_html_e('
|
|
|
142 |
</label>
|
143 |
</div>
|
144 |
|
145 |
<div class="box box-half" >
|
146 |
-
<input type="text" id="<?php echo $this->plugin_name; ?>-user-tags" name="<?php echo $this->plugin_name; ?>[mailchimp_user_tags]" value="<?php echo isset($options['mailchimp_user_tags']) ? str_replace(',',', ',$options['mailchimp_user_tags']) : '' ?>" />
|
147 |
-
<p class="description"><?= __( 'Add a comma separated list of tags to add to the subscriber at Mailchimp', 'mailchimp-for-woocommerce' ); ?></p>
|
148 |
</div>
|
149 |
|
150 |
<div class="box fieldset-header" >
|
151 |
-
<
|
152 |
</div>
|
153 |
|
154 |
|
@@ -160,9 +160,6 @@ $list_is_configured = isset($options['mailchimp_list']) && (!empty($options['mai
|
|
160 |
</div>
|
161 |
|
162 |
<div class="box box-half" >
|
163 |
-
<label for="<?php echo $this->plugin_name; ?>-mailchimp-product_image_key">
|
164 |
-
<span><?php esc_html_e('Size', 'mailchimp-for-woocommerce'); ?></span>
|
165 |
-
</label>
|
166 |
<div class="mailchimp-select-wrapper">
|
167 |
<select name="<?php echo $this->plugin_name; ?>[mailchimp_product_image_key]">
|
168 |
<?php
|
83 |
|
84 |
<div class="optional-settings-content">
|
85 |
<div class="box fieldset-header" >
|
86 |
+
<h3><?php esc_html_e('Opt-in Settings', 'mailchimp-for-woocommerce');?></h3>
|
87 |
</div>
|
88 |
|
89 |
<div class="box box-half">
|
90 |
<label for="<?php echo $this->plugin_name; ?>-newsletter-checkbox-label">
|
91 |
<h4><?php esc_html_e('Message for the opt-in checkbox', 'mailchimp-for-woocommerce'); ?></h4>
|
92 |
+
<p><?php _e('The call-to-action text that prompts customers to subscribe to your newsletter at checkout.', 'mailchimp-for-woocommerce');?> </p>
|
93 |
</label>
|
94 |
</div>
|
95 |
|
101 |
<div class="box box-half margin-large">
|
102 |
<label>
|
103 |
<h4><?php esc_html_e('Checkbox Display Options', 'mailchimp-for-woocommerce');?></h4>
|
104 |
+
<p><?php _e('Choose how you want the opt-in to your newsletter checkbox to render at checkout', 'mailchimp-for-woocommerce');?> </p>
|
105 |
</label>
|
106 |
</div>
|
107 |
|
133 |
</div>
|
134 |
|
135 |
<div class="box fieldset-header" >
|
136 |
+
<h3><?php esc_html_e('Subscriber Settings', 'mailchimp-for-woocommerce');?></h3>
|
137 |
</div>
|
138 |
|
139 |
<div class="box box-half" >
|
140 |
<label for="<?php echo $this->plugin_name; ?>-user-tags">
|
141 |
+
<h4><?php esc_html_e('Tags', 'mailchimp-for-woocommerce');?></h4>
|
142 |
+
<p><?= __( 'Add a comma-separated list of tags to apply to a subscriber in Mailchimp after a transaction occurs', 'mailchimp-for-woocommerce' ); ?></p>
|
143 |
</label>
|
144 |
</div>
|
145 |
|
146 |
<div class="box box-half" >
|
147 |
+
<input type="text" id="<?php echo $this->plugin_name; ?>-user-tags" name="<?php echo $this->plugin_name; ?>[mailchimp_user_tags]" value="<?php echo isset($options['mailchimp_user_tags']) ? str_replace(',',', ',$options['mailchimp_user_tags']) : '' ?>" />
|
|
|
148 |
</div>
|
149 |
|
150 |
<div class="box fieldset-header" >
|
151 |
+
<h3><?php esc_html_e('Product Settings', 'mailchimp-for-woocommerce');?></h3>
|
152 |
</div>
|
153 |
|
154 |
|
160 |
</div>
|
161 |
|
162 |
<div class="box box-half" >
|
|
|
|
|
|
|
163 |
<div class="mailchimp-select-wrapper">
|
164 |
<select name="<?php echo $this->plugin_name; ?>[mailchimp_product_image_key]">
|
165 |
<?php
|
admin/partials/tabs/store_info.php
CHANGED
@@ -90,7 +90,7 @@ if (!$handler->hasValidApiKey()) {
|
|
90 |
</div>
|
91 |
|
92 |
<div class="box fieldset-header" >
|
93 |
-
<
|
94 |
<br/>
|
95 |
<p><?= __('Please apply your locale settings. If you\'re unsure about these, use the defaults.', 'mailchimp-for-woocommerce');?></p>
|
96 |
</div>
|
90 |
</div>
|
91 |
|
92 |
<div class="box fieldset-header" >
|
93 |
+
<h3 style="padding-top: 1em;"><?= __('Locale Settings', 'mailchimp-for-woocommerce');?></h3>
|
94 |
<br/>
|
95 |
<p><?= __('Please apply your locale settings. If you\'re unsure about these, use the defaults.', 'mailchimp-for-woocommerce');?></p>
|
96 |
</div>
|
admin/partials/tabs/store_sync.php
CHANGED
@@ -33,7 +33,7 @@ if (!empty($last_updated_time)) {
|
|
33 |
|
34 |
// if we have a transient set to start the sync on this page view, initiate it now that the values have been saved.
|
35 |
if ((bool) get_site_transient('mailchimp_woocommerce_start_sync', false)) {
|
36 |
-
MailChimp_WooCommerce_Admin::startSync();
|
37 |
}
|
38 |
|
39 |
if (($mailchimp_api = mailchimp_get_api()) && ($store = $mailchimp_api->getStore($store_id))) {
|
@@ -205,14 +205,14 @@ $comm_enabled = $opt != null ? $opt : '0';
|
|
205 |
</div>
|
206 |
|
207 |
<?php if($mailchimp_api && (!$store_syncing || isset($_GET['resync']) && $_GET['resync'] === '1')): ?>
|
208 |
-
<
|
209 |
<p id="resync_data_help_text">
|
210 |
<?php esc_html_e('You can resync your audience at any time without losing any of your e-commerce data.', 'mailchimp-for-woocommerce');?>
|
211 |
</p>
|
212 |
<?php submit_button(__('Force Resync', 'mailchimp-for-woocommerce'), 'primary mc-woocommerce-resync-button','submit', TRUE); ?>
|
213 |
<?php endif; ?>
|
214 |
|
215 |
-
<
|
216 |
<ul>
|
217 |
<li><?= sprintf(/* translators: %s - Plugin review URL. */wp_kses( __( 'Is this plugin helping your e-commerce business? <a href=%s target=_blank>Please leave us a ★★★★★ review!</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://wordpress.org/support/plugin/mailchimp-for-woocommerce/reviews/' ) );?></li>
|
218 |
<li><?= sprintf(/* translators: %s - WP-CLI URL. */wp_kses( __( 'Have a larger store or having issues syncing? Consider using <a href=%s target=_blank>WP-CLI</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://github.com/mailchimp/mc-woocommerce/wiki/Advanced-Queue-Setup-In-CLI-mode' ) );?></li>
|
33 |
|
34 |
// if we have a transient set to start the sync on this page view, initiate it now that the values have been saved.
|
35 |
if ((bool) get_site_transient('mailchimp_woocommerce_start_sync', false)) {
|
36 |
+
MailChimp_WooCommerce_Admin::connect()->startSync();
|
37 |
}
|
38 |
|
39 |
if (($mailchimp_api = mailchimp_get_api()) && ($store = $mailchimp_api->getStore($store_id))) {
|
205 |
</div>
|
206 |
|
207 |
<?php if($mailchimp_api && (!$store_syncing || isset($_GET['resync']) && $_GET['resync'] === '1')): ?>
|
208 |
+
<h3 style="padding-top: 1em;"><?php esc_html_e('Advanced', 'mailchimp-for-woocommerce');?></h3>
|
209 |
<p id="resync_data_help_text">
|
210 |
<?php esc_html_e('You can resync your audience at any time without losing any of your e-commerce data.', 'mailchimp-for-woocommerce');?>
|
211 |
</p>
|
212 |
<?php submit_button(__('Force Resync', 'mailchimp-for-woocommerce'), 'primary mc-woocommerce-resync-button','submit', TRUE); ?>
|
213 |
<?php endif; ?>
|
214 |
|
215 |
+
<h3 style="padding-top: 1em;"><?php esc_html_e('More Information', 'mailchimp-for-woocommerce'); ?></h3>
|
216 |
<ul>
|
217 |
<li><?= sprintf(/* translators: %s - Plugin review URL. */wp_kses( __( 'Is this plugin helping your e-commerce business? <a href=%s target=_blank>Please leave us a ★★★★★ review!</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://wordpress.org/support/plugin/mailchimp-for-woocommerce/reviews/' ) );?></li>
|
218 |
<li><?= sprintf(/* translators: %s - WP-CLI URL. */wp_kses( __( 'Have a larger store or having issues syncing? Consider using <a href=%s target=_blank>WP-CLI</a>.', 'mailchimp-for-woocommerce' ), array( 'a' => array( 'href' => array(), 'target'=> '_blank' ) ) ), esc_url( 'https://github.com/mailchimp/mc-woocommerce/wiki/Advanced-Queue-Setup-In-CLI-mode' ) );?></li>
|
bootstrap.php
CHANGED
@@ -87,7 +87,7 @@ function mailchimp_environment_variables() {
|
|
87 |
return (object) array(
|
88 |
'repo' => 'master',
|
89 |
'environment' => 'production', // staging or production
|
90 |
-
'version' => '2.4.
|
91 |
'php_version' => phpversion(),
|
92 |
'wp_version' => (empty($wp_version) ? 'Unknown' : $wp_version),
|
93 |
'wc_version' => function_exists('WC') ? WC()->version : null,
|
@@ -223,9 +223,9 @@ function mailchimp_list_has_double_optin($force = false) {
|
|
223 |
return false;
|
224 |
}
|
225 |
|
226 |
-
$key = '
|
227 |
|
228 |
-
$double_optin =
|
229 |
|
230 |
if (!$force && ($double_optin === 'yes' || $double_optin === 'no')) {
|
231 |
return $double_optin === 'yes';
|
@@ -234,10 +234,11 @@ function mailchimp_list_has_double_optin($force = false) {
|
|
234 |
try {
|
235 |
$data = mailchimp_get_api()->getList(mailchimp_get_list_id());
|
236 |
$double_optin = array_key_exists('double_optin', $data) ? ($data['double_optin'] ? 'yes' : 'no') : 'no';
|
237 |
-
|
238 |
return $double_optin === 'yes';
|
239 |
} catch (\Exception $e) {
|
240 |
-
|
|
|
241 |
}
|
242 |
|
243 |
return $double_optin === 'yes';
|
@@ -318,22 +319,25 @@ function mailchimp_get_store_id() {
|
|
318 |
/**
|
319 |
* @return array
|
320 |
*/
|
321 |
-
function mailchimp_get_user_tags_to_update() {
|
322 |
$tags = mailchimp_get_option('mailchimp_user_tags');
|
|
|
|
|
|
|
|
|
323 |
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
$tags = explode(',', $tags);
|
329 |
-
|
330 |
-
foreach ($tags as $tag) {
|
331 |
-
$formatted_tags[] = array("name" => $tag, "status" => 'active');
|
332 |
}
|
333 |
|
334 |
// apply filter to user custom tags addition/removal
|
335 |
-
$formatted_tags = apply_filters('mailchimp_user_tags', $formatted_tags);
|
336 |
|
|
|
|
|
|
|
|
|
337 |
return $formatted_tags;
|
338 |
}
|
339 |
|
@@ -688,11 +692,6 @@ function mailchimp_update_connected_site_script() {
|
|
688 |
if ($store_id && ($api = mailchimp_get_api())) {
|
689 |
// if we have a store
|
690 |
if (($store = $api->getStore($store_id))) {
|
691 |
-
// handle the coupon sync if we don't have a flag that says otherwise.
|
692 |
-
$job = new MailChimp_WooCommerce_Process_Coupons();
|
693 |
-
if ($job->getData('sync.coupons.completed_at', false) === false) {
|
694 |
-
mailchimp_handle_or_queue($job);
|
695 |
-
}
|
696 |
return mailchimpi_refresh_connected_site_script($store);
|
697 |
}
|
698 |
}
|
@@ -902,7 +901,11 @@ function mailchimp_tell_system_about_user_submit($email, $status_meta, $seconds
|
|
902 |
* @return array
|
903 |
*/
|
904 |
function mailchimp_get_subscriber_status_options($subscribed) {
|
905 |
-
|
|
|
|
|
|
|
|
|
906 |
|
907 |
// if it's true - we set this value to NULL so that we do a 'pending' association on the member.
|
908 |
$status_if_new = $requires ? null : $subscribed;
|
@@ -910,6 +913,7 @@ function mailchimp_get_subscriber_status_options($subscribed) {
|
|
910 |
|
911 |
// set an array of status meta that we will use for comparison below to the transient data
|
912 |
return array(
|
|
|
913 |
'created' => $status_if_new,
|
914 |
'updated' => $status_if_update
|
915 |
);
|
@@ -1093,20 +1097,21 @@ function mailchimp_update_member_with_double_opt_in(MailChimp_WooCommerce_Order
|
|
1093 |
function mailchimp_update_communication_status() {
|
1094 |
$plugin_admin = MailChimp_WooCommerce_Admin::instance();
|
1095 |
$original_opt = $plugin_admin->getData('comm.opt',0);
|
1096 |
-
$
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
}
|
1101 |
|
1102 |
// call server to update comm status
|
1103 |
function mailchimp_remove_communication_status() {
|
1104 |
$plugin_admin = MailChimp_WooCommerce_Admin::instance();
|
1105 |
$original_opt = $plugin_admin->getData('comm.opt',0);
|
1106 |
-
$
|
1107 |
-
$
|
1108 |
-
|
1109 |
-
|
|
|
1110 |
}
|
1111 |
|
1112 |
// Print notices outside woocommerce admin bar
|
@@ -1119,30 +1124,47 @@ function mailchimp_settings_errors() {
|
|
1119 |
return $notices_html;
|
1120 |
}
|
1121 |
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1125 |
$hash = md5(strtolower(trim($user_email)));
|
1126 |
-
if (!mailchimp_get_transient($caller . ".member.{$hash}")) {
|
1127 |
$list_id = mailchimp_get_list_id();
|
1128 |
try {
|
1129 |
// try to get the member to update if already synced
|
1130 |
$member = mailchimp_get_api()->member($list_id, $user_email);
|
1131 |
// update member with new language
|
|
|
|
|
|
|
|
|
|
|
1132 |
mailchimp_get_api()->update($list_id, $user_email, $member['status'], null, null, $language);
|
1133 |
// set transient to prevent too many calls to update language
|
1134 |
mailchimp_set_transient($caller . ".member.{$hash}", true, 3600);
|
1135 |
-
mailchimp_log($caller . '.member.updated', "Updated {$user_email} language to {$language}");
|
1136 |
} catch (\Exception $e) {
|
1137 |
if ($e->getCode() == 404) {
|
1138 |
-
// member doesn't exist yet, create
|
1139 |
-
mailchimp_get_api()->subscribe($list_id, $user_email,
|
1140 |
// set transient to prevent too many calls to update language
|
1141 |
mailchimp_set_transient($caller . ".member.{$hash}", true, 3600);
|
1142 |
-
mailchimp_log($caller . '.member.created', "
|
1143 |
} else {
|
1144 |
mailchimp_error($caller . '.member.sync.error', $e->getMessage(), $user_email);
|
1145 |
-
|
1146 |
}
|
1147 |
}
|
1148 |
}
|
87 |
return (object) array(
|
88 |
'repo' => 'master',
|
89 |
'environment' => 'production', // staging or production
|
90 |
+
'version' => '2.4.1',
|
91 |
'php_version' => phpversion(),
|
92 |
'wp_version' => (empty($wp_version) ? 'Unknown' : $wp_version),
|
93 |
'wc_version' => function_exists('WC') ? WC()->version : null,
|
223 |
return false;
|
224 |
}
|
225 |
|
226 |
+
$key = 'double_optin';
|
227 |
|
228 |
+
$double_optin = mailchimp_get_transient($key);
|
229 |
|
230 |
if (!$force && ($double_optin === 'yes' || $double_optin === 'no')) {
|
231 |
return $double_optin === 'yes';
|
234 |
try {
|
235 |
$data = mailchimp_get_api()->getList(mailchimp_get_list_id());
|
236 |
$double_optin = array_key_exists('double_optin', $data) ? ($data['double_optin'] ? 'yes' : 'no') : 'no';
|
237 |
+
mailchimp_set_transient($key, $double_optin, 600);
|
238 |
return $double_optin === 'yes';
|
239 |
} catch (\Exception $e) {
|
240 |
+
mailchimp_error('api.list', __('Error retrieving list for double_optin check', 'mailchimp-for-woocommerce'));
|
241 |
+
throw $e;
|
242 |
}
|
243 |
|
244 |
return $double_optin === 'yes';
|
319 |
/**
|
320 |
* @return array
|
321 |
*/
|
322 |
+
function mailchimp_get_user_tags_to_update($email = null) {
|
323 |
$tags = mailchimp_get_option('mailchimp_user_tags');
|
324 |
+
$formatted_tags = array();
|
325 |
+
|
326 |
+
if (!empty($tags)) {
|
327 |
+
$tags = explode(',', $tags);
|
328 |
|
329 |
+
foreach ($tags as $tag) {
|
330 |
+
$formatted_tags[] = array("name" => $tag, "status" => 'active');
|
331 |
+
}
|
|
|
|
|
|
|
|
|
|
|
332 |
}
|
333 |
|
334 |
// apply filter to user custom tags addition/removal
|
335 |
+
$formatted_tags = apply_filters('mailchimp_user_tags', $formatted_tags, $email);
|
336 |
|
337 |
+
if (empty($formatted_tags)){
|
338 |
+
return false;
|
339 |
+
}
|
340 |
+
|
341 |
return $formatted_tags;
|
342 |
}
|
343 |
|
692 |
if ($store_id && ($api = mailchimp_get_api())) {
|
693 |
// if we have a store
|
694 |
if (($store = $api->getStore($store_id))) {
|
|
|
|
|
|
|
|
|
|
|
695 |
return mailchimpi_refresh_connected_site_script($store);
|
696 |
}
|
697 |
}
|
901 |
* @return array
|
902 |
*/
|
903 |
function mailchimp_get_subscriber_status_options($subscribed) {
|
904 |
+
try {
|
905 |
+
$requires = mailchimp_list_has_double_optin();
|
906 |
+
} catch (\Exception $e) {
|
907 |
+
return false;
|
908 |
+
}
|
909 |
|
910 |
// if it's true - we set this value to NULL so that we do a 'pending' association on the member.
|
911 |
$status_if_new = $requires ? null : $subscribed;
|
913 |
|
914 |
// set an array of status meta that we will use for comparison below to the transient data
|
915 |
return array(
|
916 |
+
'requires_double_optin' => $requires,
|
917 |
'created' => $status_if_new,
|
918 |
'updated' => $status_if_update
|
919 |
);
|
1097 |
function mailchimp_update_communication_status() {
|
1098 |
$plugin_admin = MailChimp_WooCommerce_Admin::instance();
|
1099 |
$original_opt = $plugin_admin->getData('comm.opt',0);
|
1100 |
+
$options = $plugin_admin->getOptions();
|
1101 |
+
if (is_array($options) && array_key_exists('admin_email', $options)) {
|
1102 |
+
$plugin_admin->mailchimp_set_communications_status_on_server($original_opt, $options['admin_email']);
|
1103 |
+
}
|
1104 |
}
|
1105 |
|
1106 |
// call server to update comm status
|
1107 |
function mailchimp_remove_communication_status() {
|
1108 |
$plugin_admin = MailChimp_WooCommerce_Admin::instance();
|
1109 |
$original_opt = $plugin_admin->getData('comm.opt',0);
|
1110 |
+
$options = $plugin_admin->getOptions();
|
1111 |
+
if (is_array($options) && array_key_exists('admin_email', $options)) {
|
1112 |
+
$remove = true;
|
1113 |
+
$plugin_admin->mailchimp_set_communications_status_on_server($original_opt, $options['admin_email'], $remove);
|
1114 |
+
}
|
1115 |
}
|
1116 |
|
1117 |
// Print notices outside woocommerce admin bar
|
1124 |
return $notices_html;
|
1125 |
}
|
1126 |
|
1127 |
+
/**
|
1128 |
+
* @param null $user_email
|
1129 |
+
* @param null $language
|
1130 |
+
* @param string $caller
|
1131 |
+
* @param string $status_if_new
|
1132 |
+
* @throws MailChimp_WooCommerce_Error
|
1133 |
+
* @throws MailChimp_WooCommerce_ServerError
|
1134 |
+
*/
|
1135 |
+
function mailchimp_member_language_update($user_email = null, $language = null, $caller = '', $status_if_new = 'transactional') {
|
1136 |
+
mailchimp_debug('debug', "mailchimp_member_language_update", array(
|
1137 |
+
'user_email' => $user_email,
|
1138 |
+
'user_language' => $language,
|
1139 |
+
'caller' => $caller,
|
1140 |
+
'status_if_new' => $status_if_new,
|
1141 |
+
));
|
1142 |
+
if (!$user_email) return;
|
1143 |
$hash = md5(strtolower(trim($user_email)));
|
1144 |
+
if ($caller !== 'cart' || !mailchimp_get_transient($caller . ".member.{$hash}")) {
|
1145 |
$list_id = mailchimp_get_list_id();
|
1146 |
try {
|
1147 |
// try to get the member to update if already synced
|
1148 |
$member = mailchimp_get_api()->member($list_id, $user_email);
|
1149 |
// update member with new language
|
1150 |
+
// if the member's subscriber status was transactional - and if we're passing in either one of these options below,
|
1151 |
+
// we can attach the new status to the member.
|
1152 |
+
if ($member['status'] === 'transactional' && in_array($status_if_new, array('subscribed', 'pending'))) {
|
1153 |
+
$member['status'] = $status_if_new;
|
1154 |
+
}
|
1155 |
mailchimp_get_api()->update($list_id, $user_email, $member['status'], null, null, $language);
|
1156 |
// set transient to prevent too many calls to update language
|
1157 |
mailchimp_set_transient($caller . ".member.{$hash}", true, 3600);
|
1158 |
+
mailchimp_log($caller . '.member.updated', "Updated {$user_email} subscriber status to {$member['status']} and language to {$language}");
|
1159 |
} catch (\Exception $e) {
|
1160 |
if ($e->getCode() == 404) {
|
1161 |
+
// member doesn't exist yet, create as transactional ( or what was passed in the function args )
|
1162 |
+
mailchimp_get_api()->subscribe($list_id, $user_email, $status_if_new, array(), array(), $language);
|
1163 |
// set transient to prevent too many calls to update language
|
1164 |
mailchimp_set_transient($caller . ".member.{$hash}", true, 3600);
|
1165 |
+
mailchimp_log($caller . '.member.created', "Added {$user_email} as transactional, setting language to [{$language}]");
|
1166 |
} else {
|
1167 |
mailchimp_error($caller . '.member.sync.error', $e->getMessage(), $user_email);
|
|
|
1168 |
}
|
1169 |
}
|
1170 |
}
|
includes/api/assets/class-mailchimp-cart.php
CHANGED
@@ -87,18 +87,29 @@ class MailChimp_WooCommerce_Cart
|
|
87 |
|
88 |
/**
|
89 |
* @param $id
|
|
|
90 |
* @return $this
|
|
|
91 |
*/
|
92 |
-
public function setCampaignID($id)
|
93 |
{
|
94 |
$api = MailChimp_WooCommerce_MailChimpApi::getInstance();
|
95 |
$cid = trim($id);
|
96 |
-
if (($campaign = $api->getCampaign($cid,
|
97 |
$this->campaign_id = $campaign['id'];
|
98 |
}
|
99 |
return $this;
|
100 |
}
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
/**
|
103 |
* @return mixed
|
104 |
*/
|
87 |
|
88 |
/**
|
89 |
* @param $id
|
90 |
+
* @param bool $throw_if_invalid
|
91 |
* @return $this
|
92 |
+
* @throws Exception
|
93 |
*/
|
94 |
+
public function setCampaignID($id, $throw_if_invalid = false)
|
95 |
{
|
96 |
$api = MailChimp_WooCommerce_MailChimpApi::getInstance();
|
97 |
$cid = trim($id);
|
98 |
+
if (!empty($cid) && ($campaign = $api->getCampaign($cid, $throw_if_invalid))) {
|
99 |
$this->campaign_id = $campaign['id'];
|
100 |
}
|
101 |
return $this;
|
102 |
}
|
103 |
|
104 |
+
/**
|
105 |
+
* @return $this
|
106 |
+
*/
|
107 |
+
public function removeCampaignID()
|
108 |
+
{
|
109 |
+
$this->campaign_id = null;
|
110 |
+
return $this;
|
111 |
+
}
|
112 |
+
|
113 |
/**
|
114 |
* @return mixed
|
115 |
*/
|
includes/api/assets/class-mailchimp-customer.php
CHANGED
@@ -231,6 +231,9 @@ class MailChimp_WooCommerce_Customer
|
|
231 |
$this->requires_double_optin = (bool) $bool;
|
232 |
|
233 |
if ($this->requires_double_optin) {
|
|
|
|
|
|
|
234 |
$this->opt_in_status = false;
|
235 |
}
|
236 |
|
231 |
$this->requires_double_optin = (bool) $bool;
|
232 |
|
233 |
if ($this->requires_double_optin) {
|
234 |
+
if (is_null($this->original_subscriber_status)) {
|
235 |
+
$this->original_subscriber_status = $this->opt_in_status;
|
236 |
+
}
|
237 |
$this->opt_in_status = false;
|
238 |
}
|
239 |
|
includes/api/class-mailchimp-api.php
CHANGED
@@ -198,10 +198,21 @@ class MailChimp_WooCommerce_MailChimpApi
|
|
198 |
*/
|
199 |
public function subscribe($list_id, $email, $subscribed = true, $merge_fields = array(), $list_interests = array(), $language = null)
|
200 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
$data = array(
|
202 |
'email_type' => 'html',
|
203 |
'email_address' => $email,
|
204 |
-
'status' =>
|
205 |
'merge_fields' => $merge_fields,
|
206 |
'interests' => $list_interests,
|
207 |
'language' => $language
|
@@ -323,7 +334,7 @@ class MailChimp_WooCommerce_MailChimpApi
|
|
323 |
public function updateMemberTags($list_id, $email, $fail_silently = false)
|
324 |
{
|
325 |
$hash = md5(strtolower(trim($email)));
|
326 |
-
$tags = mailchimp_get_user_tags_to_update();
|
327 |
|
328 |
if (empty($tags)) return false;
|
329 |
|
@@ -642,8 +653,11 @@ class MailChimp_WooCommerce_MailChimpApi
|
|
642 |
*/
|
643 |
public function getCampaign($campaign_id, $throw_if_invalid = true)
|
644 |
{
|
|
|
|
|
|
|
645 |
// if we found the campaign ID already and it's been stored in the cache, return it from the cache instead.
|
646 |
-
if (($data = get_site_transient('mailchimp-woocommerce-has-campaign-id-'.$campaign_id))) {
|
647 |
return $data;
|
648 |
}
|
649 |
if (get_site_transient('mailchimp-woocommerce-no-campaign-id-'.$campaign_id)) {
|
198 |
*/
|
199 |
public function subscribe($list_id, $email, $subscribed = true, $merge_fields = array(), $list_interests = array(), $language = null)
|
200 |
{
|
201 |
+
if (is_string($subscribed)) {
|
202 |
+
$status = $subscribed;
|
203 |
+
} else {
|
204 |
+
if ($subscribed === true) {
|
205 |
+
$status = 'subscribed';
|
206 |
+
} elseif ($subscribed === false) {
|
207 |
+
$status = 'pending';
|
208 |
+
} else {
|
209 |
+
$status = 'transactional';
|
210 |
+
}
|
211 |
+
}
|
212 |
$data = array(
|
213 |
'email_type' => 'html',
|
214 |
'email_address' => $email,
|
215 |
+
'status' => $status,
|
216 |
'merge_fields' => $merge_fields,
|
217 |
'interests' => $list_interests,
|
218 |
'language' => $language
|
334 |
public function updateMemberTags($list_id, $email, $fail_silently = false)
|
335 |
{
|
336 |
$hash = md5(strtolower(trim($email)));
|
337 |
+
$tags = mailchimp_get_user_tags_to_update($email);
|
338 |
|
339 |
if (empty($tags)) return false;
|
340 |
|
653 |
*/
|
654 |
public function getCampaign($campaign_id, $throw_if_invalid = true)
|
655 |
{
|
656 |
+
// don't let an empty campaign ID do anything
|
657 |
+
if (empty($campaign_id)) return false;
|
658 |
+
|
659 |
// if we found the campaign ID already and it's been stored in the cache, return it from the cache instead.
|
660 |
+
if (($data = get_site_transient('mailchimp-woocommerce-has-campaign-id-'.$campaign_id)) && !empty($data)) {
|
661 |
return $data;
|
662 |
}
|
663 |
if (get_site_transient('mailchimp-woocommerce-no-campaign-id-'.$campaign_id)) {
|
includes/api/class-mailchimp-woocommerce-create-list-submission.php
CHANGED
@@ -92,6 +92,17 @@ class MailChimp_WooCommerce_CreateListSubmission
|
|
92 |
return $this;
|
93 |
}
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
/**
|
96 |
* @param $name
|
97 |
* @param $email
|
92 |
return $this;
|
93 |
}
|
94 |
|
95 |
+
/**
|
96 |
+
* @param bool $public
|
97 |
+
* @return $this
|
98 |
+
*/
|
99 |
+
public function setDoi($doi = false)
|
100 |
+
{
|
101 |
+
$this->props['double_optin'] = (bool) $doi;
|
102 |
+
|
103 |
+
return $this;
|
104 |
+
}
|
105 |
+
|
106 |
/**
|
107 |
* @param $name
|
108 |
* @param $email
|
includes/api/class-mailchimp-woocommerce-transform-orders-wc3.php
CHANGED
@@ -251,7 +251,12 @@ class MailChimp_WooCommerce_Transform_Orders
|
|
251 |
|
252 |
$customer->setOptInStatus($subscribed_on_order);
|
253 |
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
255 |
$status_if_new = $doi ? false : $subscribed_on_order;
|
256 |
|
257 |
$customer->setOptInStatus($status_if_new);
|
251 |
|
252 |
$customer->setOptInStatus($subscribed_on_order);
|
253 |
|
254 |
+
try {
|
255 |
+
$doi = mailchimp_list_has_double_optin();
|
256 |
+
} catch (\Exception $e) {
|
257 |
+
$doi = false;
|
258 |
+
}
|
259 |
+
|
260 |
$status_if_new = $doi ? false : $subscribed_on_order;
|
261 |
|
262 |
$customer->setOptInStatus($status_if_new);
|
includes/api/class-mailchimp-woocommerce-transform-products.php
CHANGED
@@ -326,7 +326,14 @@ class MailChimp_WooCommerce_Transform_Products
|
|
326 |
$store_id = mailchimp_get_store_id();
|
327 |
$api = mailchimp_get_api();
|
328 |
|
329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
330 |
$title = $item->get_name();
|
331 |
|
332 |
// only do this if we haven't pushed this product ID up yet to Mailchimp
|
326 |
$store_id = mailchimp_get_store_id();
|
327 |
$api = mailchimp_get_api();
|
328 |
|
329 |
+
// If the $item->get_product_id() is null or 0, we can try to retrieve the id directly from "wc_order_product_lookup" table
|
330 |
+
if (!$id = $item->get_product_id()) {
|
331 |
+
global $wpdb;
|
332 |
+
$query = "SELECT product_id FROM {$wpdb->prefix}wc_order_product_lookup WHERE order_item_id = %s";
|
333 |
+
$query_result = $wpdb->get_results( $wpdb->prepare($query, $item->get_id()));
|
334 |
+
$id = $query_result[0]->product_id ?: 0;
|
335 |
+
}
|
336 |
+
|
337 |
$title = $item->get_name();
|
338 |
|
339 |
// only do this if we haven't pushed this product ID up yet to Mailchimp
|
includes/class-mailchimp-woocommerce-queue.php
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class MailChimp_WooCommerce_Queue
|
4 |
+
{
|
5 |
+
/**
|
6 |
+
* @var string
|
7 |
+
*/
|
8 |
+
public $table;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @var string
|
12 |
+
*/
|
13 |
+
public $failed_table;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var int
|
17 |
+
*/
|
18 |
+
public $release_time = 60;
|
19 |
+
|
20 |
+
public $max_tries = 3;
|
21 |
+
|
22 |
+
protected static $_instance = null;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @return MailChimp_WooCommerce_Queue
|
26 |
+
*/
|
27 |
+
public static function instance()
|
28 |
+
{
|
29 |
+
if (!empty(static::$_instance)) return static::$_instance;
|
30 |
+
return static::$_instance = new MailChimp_WooCommerce_Queue();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* WP_Queue constructor
|
35 |
+
*/
|
36 |
+
public function __construct() {
|
37 |
+
global $wpdb;
|
38 |
+
$this->table = $wpdb->prefix . 'queue';
|
39 |
+
$this->failed_table = $wpdb->prefix . 'failed_jobs';
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Push a job onto the queue.
|
44 |
+
*
|
45 |
+
* @param WP_Job $job
|
46 |
+
* @param int $delay
|
47 |
+
*
|
48 |
+
* @return $this
|
49 |
+
*/
|
50 |
+
public function push(WP_Job $job, $delay = 0)
|
51 |
+
{
|
52 |
+
global $wpdb;
|
53 |
+
|
54 |
+
$data = array(
|
55 |
+
'job' => maybe_serialize($job),
|
56 |
+
'available_at' => $this->datetime($delay),
|
57 |
+
'created_at' => $this->datetime(),
|
58 |
+
);
|
59 |
+
|
60 |
+
if (!$wpdb->insert($this->table, $data) && $this->create_tables_if_required()) {
|
61 |
+
if (!$wpdb->insert($this->table, $data)) {
|
62 |
+
mailchimp_debug('Queue Job '.get_class($job), $wpdb->last_error);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
return $this;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Release.
|
71 |
+
*
|
72 |
+
* @param object $job
|
73 |
+
* @param int $delay
|
74 |
+
*/
|
75 |
+
public function release( $job, $delay = 0 )
|
76 |
+
{
|
77 |
+
if ($job->attempts >= $this->max_tries) {
|
78 |
+
return $this->failed($job);
|
79 |
+
}
|
80 |
+
|
81 |
+
global $wpdb;
|
82 |
+
|
83 |
+
$wpdb->update($this->table, array(
|
84 |
+
'attempts' => $job->attempts + 1,
|
85 |
+
'locked' => 0,
|
86 |
+
'locked_at' => null,
|
87 |
+
'available_at' => $this->datetime( $delay ),
|
88 |
+
), array('id' => $job->id));
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Failed
|
93 |
+
*
|
94 |
+
* @param stdClass $job
|
95 |
+
*/
|
96 |
+
protected function failed($job)
|
97 |
+
{
|
98 |
+
global $wpdb;
|
99 |
+
|
100 |
+
$wpdb->insert($this->failed_table, array(
|
101 |
+
'job' => $job->job,
|
102 |
+
'failed_at' => $this->datetime(),
|
103 |
+
));
|
104 |
+
|
105 |
+
$payload = unserialize($job->job);
|
106 |
+
|
107 |
+
if (method_exists($payload, 'failed')) {
|
108 |
+
$payload->failed();
|
109 |
+
}
|
110 |
+
|
111 |
+
$this->delete($job);
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Delete.
|
116 |
+
*
|
117 |
+
* @param object $job
|
118 |
+
*/
|
119 |
+
public function delete( $job )
|
120 |
+
{
|
121 |
+
global $wpdb;
|
122 |
+
$wpdb->delete($this->table, array('id' => $job->id));
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Get MySQL datetime.
|
127 |
+
*
|
128 |
+
* @param int $offset Seconds, can pass negative int.
|
129 |
+
*
|
130 |
+
* @return string
|
131 |
+
*/
|
132 |
+
protected function datetime($offset = 0)
|
133 |
+
{
|
134 |
+
return gmdate( 'Y-m-d H:i:s', time() + $offset);
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Available jobs.
|
139 |
+
*/
|
140 |
+
public function available_jobs()
|
141 |
+
{
|
142 |
+
global $wpdb;
|
143 |
+
$now = $this->datetime();
|
144 |
+
$sql = $wpdb->prepare("SELECT COUNT(*) FROM {$this->table} WHERE available_at <= %s", $now);
|
145 |
+
return $wpdb->get_var($sql);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Available jobs.
|
150 |
+
*/
|
151 |
+
public function failed_jobs()
|
152 |
+
{
|
153 |
+
global $wpdb;
|
154 |
+
return $wpdb->get_var("SELECT COUNT(*) FROM {$this->failed_table}");
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Restart failed jobs.
|
159 |
+
*/
|
160 |
+
public function restart_failed_jobs()
|
161 |
+
{
|
162 |
+
global $wpdb;
|
163 |
+
$count = 0;
|
164 |
+
$jobs = $wpdb->get_results("SELECT * FROM {$this->failed_table}");
|
165 |
+
|
166 |
+
foreach ($jobs as $job) {
|
167 |
+
$this->push(maybe_unserialize($job->job));
|
168 |
+
$wpdb->delete($this->failed_table, array('id' => $job->id));
|
169 |
+
$count++;
|
170 |
+
}
|
171 |
+
|
172 |
+
return $count;
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Get next job.
|
177 |
+
*/
|
178 |
+
public function get_next_job()
|
179 |
+
{
|
180 |
+
global $wpdb;
|
181 |
+
$this->maybe_release_locked_jobs();
|
182 |
+
$now = $this->datetime();
|
183 |
+
$sql = $wpdb->prepare("SELECT * FROM {$this->table} WHERE locked = 0 AND available_at <= %s", $now);
|
184 |
+
return $wpdb->get_row($sql);
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Maybe release locked jobs.
|
189 |
+
*/
|
190 |
+
protected function maybe_release_locked_jobs()
|
191 |
+
{
|
192 |
+
global $wpdb;
|
193 |
+
$expired = $this->datetime(-$this->release_time);
|
194 |
+
$sql = $wpdb->prepare("UPDATE {$this->table} SET attempts = attempts + 1, locked = 0, locked_at = NULL WHERE locked = 1 AND locked_at <= %s", $expired);
|
195 |
+
$wpdb->query($sql);
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Lock job.
|
200 |
+
*
|
201 |
+
* @param object $job
|
202 |
+
*/
|
203 |
+
public function lock_job( $job )
|
204 |
+
{
|
205 |
+
global $wpdb;
|
206 |
+
$wpdb->update( $this->table, array('locked' => 1, 'locked_at' => $this->datetime()), array('id' => $job->id));
|
207 |
+
}
|
208 |
+
|
209 |
+
/**
|
210 |
+
* @return bool
|
211 |
+
*/
|
212 |
+
public function create_tables_if_required()
|
213 |
+
{
|
214 |
+
global $wpdb;
|
215 |
+
try {
|
216 |
+
if (mailchimp_string_contains($wpdb->last_error, 'Table')) {
|
217 |
+
mailchimp_debug('Queue Table Was Not Found!', 'Creating Tables');
|
218 |
+
MailChimp_WooCommerce_Activator::create_queue_tables();
|
219 |
+
return true;
|
220 |
+
}
|
221 |
+
} catch (\Exception $e) {
|
222 |
+
mailchimp_error_trace($e, 'trying to create queue tables');
|
223 |
+
}
|
224 |
+
return false;
|
225 |
+
}
|
226 |
+
}
|
includes/class-mailchimp-woocommerce-service.php
CHANGED
@@ -278,6 +278,22 @@ class MailChimp_Service extends MailChimp_WooCommerce_Options
|
|
278 |
$this->handleCouponSaved($post_id, new WC_Coupon($post_id));
|
279 |
}
|
280 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
281 |
/**
|
282 |
* Save post metadata when a post is saved.
|
283 |
*
|
278 |
$this->handleCouponSaved($post_id, new WC_Coupon($post_id));
|
279 |
}
|
280 |
|
281 |
+
/**
|
282 |
+
* @param WC_Data $object The deleted or trashed object.
|
283 |
+
* @param WP_REST_Response $response The response data.
|
284 |
+
* @param WP_REST_Request $request The request sent to the API.
|
285 |
+
*/
|
286 |
+
public function handleAPICouponTrashed($object, $response, $request)
|
287 |
+
{
|
288 |
+
try {
|
289 |
+
$deleted = mailchimp_get_api()->deletePromoRule(mailchimp_get_store_id(), $request['id']);
|
290 |
+
if ($deleted) mailchimp_log('api.promo_code.deleted', "deleted promo code {$request['id']}");
|
291 |
+
else mailchimp_log('api.promo_code.delete_fail', "Unable to delete promo code {$request['id']}");
|
292 |
+
} catch (\Exception $e) {
|
293 |
+
mailchimp_error('delete promo code', $e->getMessage());
|
294 |
+
}
|
295 |
+
}
|
296 |
+
|
297 |
/**
|
298 |
* Save post metadata when a post is saved.
|
299 |
*
|
includes/class-mailchimp-woocommerce.php
CHANGED
@@ -141,7 +141,12 @@ class MailChimp_WooCommerce
|
|
141 |
{
|
142 |
// if we need to refresh the double opt in for any reason - just do it here.
|
143 |
if ($this->queryStringEquals('mc_doi_refresh', '1')) {
|
144 |
-
|
|
|
|
|
|
|
|
|
|
|
145 |
mailchimp_log('mc.utils.doi_refresh', ($enabled_doi ? 'turned ON' : 'turned OFF'));
|
146 |
}
|
147 |
}
|
@@ -278,9 +283,7 @@ class MailChimp_WooCommerce
|
|
278 |
|
279 |
$plugin_public = new MailChimp_WooCommerce_Public( $this->get_plugin_name(), $this->get_version() );
|
280 |
$this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
|
281 |
-
|
282 |
-
$this->loader->add_action('wp_footer', $plugin_public, 'add_inline_footer_script');
|
283 |
-
}
|
284 |
}
|
285 |
|
286 |
/**
|
@@ -344,20 +347,21 @@ class MailChimp_WooCommerce
|
|
344 |
|
345 |
// save post hooks
|
346 |
$this->loader->add_action('save_post', $service, 'handlePostSaved', 10, 3);
|
347 |
-
$this->loader->add_action('wp_trash_post', $service, 'handlePostTrashed', 10);
|
348 |
-
$this->loader->add_action('untrashed_post', $service, 'handlePostRestored', 10);
|
349 |
|
350 |
//coupons
|
351 |
-
$this->loader->add_action('woocommerce_new_coupon', $service, 'handleNewCoupon', 10);
|
352 |
$this->loader->add_action('woocommerce_coupon_options_save', $service, 'handleCouponSaved', 10, 2);
|
353 |
$this->loader->add_action('woocommerce_api_create_coupon', $service, 'handleCouponSaved', 9, 2);
|
354 |
|
355 |
-
$this->loader->add_action('woocommerce_delete_coupon', $service, '
|
356 |
-
$this->loader->add_action('woocommerce_trash_coupon', $service, '
|
357 |
-
|
|
|
358 |
|
359 |
// handle the user registration hook
|
360 |
-
$this->loader->add_action('user_register', $service, 'handleUserRegistration');
|
361 |
// handle the user updated profile hook
|
362 |
$this->loader->add_action('profile_update', $service, 'handleUserUpdated', 10, 2);
|
363 |
|
141 |
{
|
142 |
// if we need to refresh the double opt in for any reason - just do it here.
|
143 |
if ($this->queryStringEquals('mc_doi_refresh', '1')) {
|
144 |
+
try {
|
145 |
+
$enabled_doi = mailchimp_list_has_double_optin(true);
|
146 |
+
} catch (\Exception $e) {
|
147 |
+
mailchimp_error('mc.utils.doi_refresh', 'failed updating doi transient');
|
148 |
+
return false;
|
149 |
+
}
|
150 |
mailchimp_log('mc.utils.doi_refresh', ($enabled_doi ? 'turned ON' : 'turned OFF'));
|
151 |
}
|
152 |
}
|
283 |
|
284 |
$plugin_public = new MailChimp_WooCommerce_Public( $this->get_plugin_name(), $this->get_version() );
|
285 |
$this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
|
286 |
+
$this->loader->add_action('wp_footer', $plugin_public, 'add_inline_footer_script');
|
|
|
|
|
287 |
}
|
288 |
|
289 |
/**
|
347 |
|
348 |
// save post hooks
|
349 |
$this->loader->add_action('save_post', $service, 'handlePostSaved', 10, 3);
|
350 |
+
$this->loader->add_action('wp_trash_post', $service, 'handlePostTrashed', 10, 1);
|
351 |
+
$this->loader->add_action('untrashed_post', $service, 'handlePostRestored', 10, 1);
|
352 |
|
353 |
//coupons
|
354 |
+
$this->loader->add_action('woocommerce_new_coupon', $service, 'handleNewCoupon', 10, 1);
|
355 |
$this->loader->add_action('woocommerce_coupon_options_save', $service, 'handleCouponSaved', 10, 2);
|
356 |
$this->loader->add_action('woocommerce_api_create_coupon', $service, 'handleCouponSaved', 9, 2);
|
357 |
|
358 |
+
$this->loader->add_action('woocommerce_delete_coupon', $service, 'handlePostTrashed', 10, 1);
|
359 |
+
$this->loader->add_action('woocommerce_trash_coupon', $service, 'handlePostTrashed', 10, 1);
|
360 |
+
|
361 |
+
$this->loader->add_action('woocommerce_rest_delete_shop_coupon_object', $service, 'handleAPICouponTrashed', 10, 3);
|
362 |
|
363 |
// handle the user registration hook
|
364 |
+
$this->loader->add_action('user_register', $service, 'handleUserRegistration', 10, 1);
|
365 |
// handle the user updated profile hook
|
366 |
$this->loader->add_action('profile_update', $service, 'handleUserUpdated', 10, 2);
|
367 |
|
includes/processes/class-mailchimp-woocommerce-cart-update.php
CHANGED
@@ -120,9 +120,8 @@ class MailChimp_WooCommerce_Cart_Update extends Mailchimp_Woocommerce_Job
|
|
120 |
// if we have a campaign id let's set it now.
|
121 |
if (!empty($this->campaign_id)) {
|
122 |
try {
|
123 |
-
$cart->setCampaignID($this->campaign_id);
|
124 |
-
}
|
125 |
-
catch (\Exception $e) {
|
126 |
mailchimp_log('cart_set_campaign_id.error', 'No campaign added to abandoned cart, with provided ID: '. $this->campaign_id. ' :: '. $e->getMessage(). ' :: in '.$e->getFile().' :: on '.$e->getLine());
|
127 |
}
|
128 |
}
|
@@ -151,9 +150,23 @@ class MailChimp_WooCommerce_Cart_Update extends Mailchimp_Woocommerce_Job
|
|
151 |
$cart->setOrderTotal($order_total);
|
152 |
|
153 |
try {
|
154 |
-
|
155 |
-
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
}
|
158 |
} catch (\Exception $e) {
|
159 |
|
120 |
// if we have a campaign id let's set it now.
|
121 |
if (!empty($this->campaign_id)) {
|
122 |
try {
|
123 |
+
$cart->setCampaignID($this->campaign_id, true);
|
124 |
+
} catch (\Exception $e) {
|
|
|
125 |
mailchimp_log('cart_set_campaign_id.error', 'No campaign added to abandoned cart, with provided ID: '. $this->campaign_id. ' :: '. $e->getMessage(). ' :: in '.$e->getFile().' :: on '.$e->getLine());
|
126 |
}
|
127 |
}
|
150 |
$cart->setOrderTotal($order_total);
|
151 |
|
152 |
try {
|
153 |
+
try {
|
154 |
+
// if the post is successful we're all good.
|
155 |
+
if ($api->addCart($store_id, $cart, false) !== false) {
|
156 |
+
mailchimp_log('abandoned_cart.success', "email: {$customer->getEmailAddress()} :: checkout_url: $checkout_url");
|
157 |
+
}
|
158 |
+
} catch (\Exception $e) {
|
159 |
+
// for some reason this happens on carts and we need to make sure that this doesn't prevent
|
160 |
+
// the submission from going through.
|
161 |
+
if (mailchimp_string_contains($e->getMessage(), 'campaign with the')) {
|
162 |
+
// remove the campaign ID and re-submit
|
163 |
+
$cart->removeCampaignID();
|
164 |
+
if ($api->addCart($store_id, $cart, false) !== false) {
|
165 |
+
mailchimp_log('abandoned_cart.success', "email: {$customer->getEmailAddress()} :: checkout_url: $checkout_url");
|
166 |
+
}
|
167 |
+
} else {
|
168 |
+
throw $e;
|
169 |
+
}
|
170 |
}
|
171 |
} catch (\Exception $e) {
|
172 |
|
includes/processes/class-mailchimp-woocommerce-single-order.php
CHANGED
@@ -158,8 +158,15 @@ class MailChimp_WooCommerce_Single_Order extends Mailchimp_Woocommerce_Job
|
|
158 |
mailchimp_error('order_sync.error', mailchimp_error_trace($e, "GET subscriber :: {$order->getId()}"));
|
159 |
throw $e;
|
160 |
}
|
|
|
161 |
// if they are using double opt in, we need to pass this in as false here so it doesn't auto subscribe.
|
162 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
$order->getCustomer()->setOptInStatus($status);
|
164 |
}
|
165 |
}
|
@@ -302,8 +309,17 @@ class MailChimp_WooCommerce_Single_Order extends Mailchimp_Woocommerce_Job
|
|
302 |
$log .= " :: abandoned cart deleted [{$this->cart_session_id}]";
|
303 |
}
|
304 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
305 |
// Maybe sync subscriber to set correct member.language
|
306 |
-
mailchimp_member_language_update($email, $this->user_language, 'order');
|
307 |
|
308 |
mailchimp_log('order_submit.success', $log);
|
309 |
|
158 |
mailchimp_error('order_sync.error', mailchimp_error_trace($e, "GET subscriber :: {$order->getId()}"));
|
159 |
throw $e;
|
160 |
}
|
161 |
+
|
162 |
// if they are using double opt in, we need to pass this in as false here so it doesn't auto subscribe.
|
163 |
+
try {
|
164 |
+
$doi = mailchimp_list_has_double_optin(true);
|
165 |
+
} catch (\Exception $e_doi) {
|
166 |
+
throw $e_doi;
|
167 |
+
}
|
168 |
+
|
169 |
+
$status = $doi ? false : $should_auto_subscribe;
|
170 |
$order->getCustomer()->setOptInStatus($status);
|
171 |
}
|
172 |
}
|
309 |
$log .= " :: abandoned cart deleted [{$this->cart_session_id}]";
|
310 |
}
|
311 |
|
312 |
+
// if we require double opt in on the list, and the customer requires double opt in,
|
313 |
+
// we should mark them as pending so they get the opt in email now.
|
314 |
+
if (mailchimp_list_has_double_optin()) {
|
315 |
+
$status_if_new = $order->getCustomer()->getOriginalSubscriberStatus() ? 'pending' : 'transactional';
|
316 |
+
} else {
|
317 |
+
// if true, subscribed - otherwise transactional
|
318 |
+
$status_if_new = $order->getCustomer()->getOptInStatus() ? 'subscribed' : 'transactional';
|
319 |
+
}
|
320 |
+
|
321 |
// Maybe sync subscriber to set correct member.language
|
322 |
+
mailchimp_member_language_update($email, $this->user_language, 'order', $status_if_new);
|
323 |
|
324 |
mailchimp_log('order_submit.success', $log);
|
325 |
|
includes/processes/class-mailchimp-woocommerce-user-submit.php
CHANGED
@@ -172,6 +172,10 @@ class MailChimp_WooCommerce_User_Submit extends Mailchimp_Woocommerce_Job
|
|
172 |
$api->deleteMember($list_id, $this->updated_data['user_email']);
|
173 |
// subscribe the new
|
174 |
$api->subscribe($list_id, $email, $status_meta['created'], $merge_fields, null, $language);
|
|
|
|
|
|
|
|
|
175 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
176 |
|
177 |
if ($status_meta['created']) {
|
@@ -201,6 +205,10 @@ class MailChimp_WooCommerce_User_Submit extends Mailchimp_Woocommerce_Job
|
|
201 |
if (isset($member_data['status']) && $member_data['status'] === 'transactional' || $member_data['status'] === 'cleaned') {
|
202 |
// ok let's update this member
|
203 |
$api->update($list_id, $email, $status_meta['updated'], $merge_fields, null, $language);
|
|
|
|
|
|
|
|
|
204 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
205 |
mailchimp_log('member.sync', "Updated Member {$email}", array(
|
206 |
'previous_status' => $member_data['status'],
|
@@ -214,6 +222,10 @@ class MailChimp_WooCommerce_User_Submit extends Mailchimp_Woocommerce_Job
|
|
214 |
if (isset($member_data['status'])) {
|
215 |
// ok let's update this member
|
216 |
$api->update($list_id, $email, $member_data['status'], $merge_fields, null, $language);
|
|
|
|
|
|
|
|
|
217 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
218 |
mailchimp_log('member.sync', "Updated Member {$email} ( merge fields only )", array(
|
219 |
'merge_fields' => $merge_fields
|
@@ -232,10 +244,17 @@ class MailChimp_WooCommerce_User_Submit extends Mailchimp_Woocommerce_Job
|
|
232 |
if ($e->getCode() == 404) {
|
233 |
|
234 |
try {
|
235 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
237 |
if ($status_meta['created']) {
|
238 |
-
mailchimp_log('member.sync', "Subscribed Member {$user->user_email}", array('status_if_new' => $
|
239 |
} else {
|
240 |
mailchimp_log('member.sync', "{$user->user_email} is Pending Double OptIn");
|
241 |
}
|
172 |
$api->deleteMember($list_id, $this->updated_data['user_email']);
|
173 |
// subscribe the new
|
174 |
$api->subscribe($list_id, $email, $status_meta['created'], $merge_fields, null, $language);
|
175 |
+
|
176 |
+
// update the member tags but fail silently just in case.
|
177 |
+
$api->updateMemberTags(mailchimp_get_list_id(), $email, true);
|
178 |
+
|
179 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
180 |
|
181 |
if ($status_meta['created']) {
|
205 |
if (isset($member_data['status']) && $member_data['status'] === 'transactional' || $member_data['status'] === 'cleaned') {
|
206 |
// ok let's update this member
|
207 |
$api->update($list_id, $email, $status_meta['updated'], $merge_fields, null, $language);
|
208 |
+
|
209 |
+
// update the member tags but fail silently just in case.
|
210 |
+
$api->updateMemberTags(mailchimp_get_list_id(), $email, true);
|
211 |
+
|
212 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
213 |
mailchimp_log('member.sync', "Updated Member {$email}", array(
|
214 |
'previous_status' => $member_data['status'],
|
222 |
if (isset($member_data['status'])) {
|
223 |
// ok let's update this member
|
224 |
$api->update($list_id, $email, $member_data['status'], $merge_fields, null, $language);
|
225 |
+
|
226 |
+
// update the member tags but fail silently just in case.
|
227 |
+
$api->updateMemberTags(mailchimp_get_list_id(), $email, true);
|
228 |
+
|
229 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
230 |
mailchimp_log('member.sync', "Updated Member {$email} ( merge fields only )", array(
|
231 |
'merge_fields' => $merge_fields
|
244 |
if ($e->getCode() == 404) {
|
245 |
|
246 |
try {
|
247 |
+
$uses_doi = isset($status_meta['requires_double_optin']) && $status_meta['requires_double_optin'];
|
248 |
+
$status_if_new = $uses_doi ? 'pending' : true;
|
249 |
+
|
250 |
+
$api->subscribe($list_id, $user->user_email, $status_if_new, $merge_fields, null, $language);
|
251 |
+
|
252 |
+
// update the member tags but fail silently just in case.
|
253 |
+
$api->updateMemberTags(mailchimp_get_list_id(), $email, true);
|
254 |
+
|
255 |
mailchimp_tell_system_about_user_submit($email, $status_meta, 60);
|
256 |
if ($status_meta['created']) {
|
257 |
+
mailchimp_log('member.sync', "Subscribed Member {$user->user_email}", array('status_if_new' => $status_if_new, 'merge_fields' => $merge_fields));
|
258 |
} else {
|
259 |
mailchimp_log('member.sync', "{$user->user_email} is Pending Double OptIn");
|
260 |
}
|
includes/vendor/action-scheduler/.editorconfig
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file is for unifying the coding style for different editors and IDEs
|
2 |
+
# editorconfig.org
|
3 |
+
|
4 |
+
# WordPress Coding Standards
|
5 |
+
# https://make.wordpress.org/core/handbook/coding-standards/
|
6 |
+
|
7 |
+
root = true
|
8 |
+
|
9 |
+
[*]
|
10 |
+
charset = utf-8
|
11 |
+
end_of_line = lf
|
12 |
+
indent_size = 4
|
13 |
+
tab_width = 4
|
14 |
+
indent_style = tab
|
15 |
+
insert_final_newline = true
|
16 |
+
trim_trailing_whitespace = true
|
17 |
+
|
18 |
+
[*.txt]
|
19 |
+
trim_trailing_whitespace = false
|
20 |
+
|
21 |
+
[*.{md,json,yml}]
|
22 |
+
trim_trailing_whitespace = false
|
23 |
+
indent_style = space
|
24 |
+
indent_size = 2
|
includes/vendor/action-scheduler/.gitattributes
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
docs export-ignore
|
2 |
+
tests export-ignore
|
3 |
+
codecov.yml export-ignore
|
4 |
+
.editorconfig export-ignore
|
5 |
+
.github export-ignore
|
6 |
+
.travis.yml export-ignore
|
7 |
+
.gitattributes export-ignore
|
8 |
+
.gitignore export-ignore
|
9 |
+
composer.* export-ignore
|
10 |
+
Gruntfile.js export-ignore
|
11 |
+
package.json export-ignore
|
12 |
+
package-lock.json export-ignore
|
13 |
+
phpcs.xml export-ignore
|
14 |
+
phpunit.* export-ignore
|
includes/vendor/action-scheduler/.gitignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
phpunit.xml
|
2 |
+
vendor
|
3 |
+
.idea
|
4 |
+
node_modules
|
includes/vendor/action-scheduler/.travis.yml
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Travis CI Configuration File
|
2 |
+
|
3 |
+
# Tell Travis CI we're using PHP
|
4 |
+
language: php
|
5 |
+
|
6 |
+
# We nee to use Precise, not Trusty, to test against PHP 5.3, see https://github.com/travis-ci/travis-ci/issues/8219
|
7 |
+
dist: precise
|
8 |
+
|
9 |
+
# Versions of PHP to test against
|
10 |
+
php:
|
11 |
+
- "5.3"
|
12 |
+
- "5.6"
|
13 |
+
- "7.0"
|
14 |
+
- "7.1"
|
15 |
+
- "7.2"
|
16 |
+
- "7.3"
|
17 |
+
|
18 |
+
# Specify versions of WordPress to test against
|
19 |
+
# WP_VERSION = WordPress version number (use "master" for SVN trunk)
|
20 |
+
# WP_MULTISITE = whether to test multisite (use either "0" or "1")
|
21 |
+
env:
|
22 |
+
- WP_VERSION=5.3 WP_MULTISITE=0
|
23 |
+
- WP_VERSION=5.2 WP_MULTISITE=0
|
24 |
+
- WP_VERSION=5.1 WP_MULTISITE=0
|
25 |
+
- WP_VERSION=5.3 WP_MULTISITE=1
|
26 |
+
- WP_VERSION=5.2 WP_MULTISITE=1
|
27 |
+
- WP_VERSION=5.1 WP_MULTISITE=1
|
28 |
+
|
29 |
+
# WordPress 5.3 requires PHP 5.6. Exclude WP 5.3 + PHP 5.3
|
30 |
+
jobs:
|
31 |
+
exclude:
|
32 |
+
- php: "5.3"
|
33 |
+
env: WP_VERSION=5.3 WP_MULTISITE=0
|
34 |
+
- php: "5.3"
|
35 |
+
env: WP_VERSION=5.3 WP_MULTISITE=1
|
36 |
+
|
37 |
+
# Grab the setup script and execute
|
38 |
+
before_script:
|
39 |
+
- source tests/travis/setup.sh $TRAVIS_PHP_VERSION
|
40 |
+
|
41 |
+
script:
|
42 |
+
- if [[ "$TRAVIS_PHP_VERSION" == "7.3" ]] && [[ "$WP_VERSION" == "5.3" ]] && [[ "$WP_MULTISITE" == "0" ]] && [[ "$TRAVIS_BRANCH" == "master" ]]; then phpunit --configuration tests/phpunit.xml.dist --coverage-clover clover.xml; else phpunit --configuration tests/phpunit.xml.dist; fi
|
43 |
+
|
44 |
+
after_script:
|
45 |
+
- bash <(curl -s https://codecov.io/bash)
|
includes/vendor/action-scheduler/Gruntfile.js
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
module.exports = function( grunt ) {
|
2 |
+
'use strict';
|
3 |
+
|
4 |
+
grunt.initConfig({
|
5 |
+
// Check textdomain errors.
|
6 |
+
checktextdomain: {
|
7 |
+
options:{
|
8 |
+
text_domain: 'action-scheduler',
|
9 |
+
keywords: [
|
10 |
+
'__:1,2d',
|
11 |
+
'_e:1,2d',
|
12 |
+
'_x:1,2c,3d',
|
13 |
+
'esc_html__:1,2d',
|
14 |
+
'esc_html_e:1,2d',
|
15 |
+
'esc_html_x:1,2c,3d',
|
16 |
+
'esc_attr__:1,2d',
|
17 |
+
'esc_attr_e:1,2d',
|
18 |
+
'esc_attr_x:1,2c,3d',
|
19 |
+
'_ex:1,2c,3d',
|
20 |
+
'_n:1,2,4d',
|
21 |
+
'_nx:1,2,4c,5d',
|
22 |
+
'_n_noop:1,2,3d',
|
23 |
+
'_nx_noop:1,2,3c,4d'
|
24 |
+
]
|
25 |
+
},
|
26 |
+
files: {
|
27 |
+
src: [
|
28 |
+
'**/*.php',
|
29 |
+
'!node_modules/**',
|
30 |
+
'!tests/**',
|
31 |
+
'!vendor/**',
|
32 |
+
'!tmp/**'
|
33 |
+
],
|
34 |
+
expand: true
|
35 |
+
}
|
36 |
+
},
|
37 |
+
|
38 |
+
// PHP Code Sniffer.
|
39 |
+
phpcs: {
|
40 |
+
options: {
|
41 |
+
bin: 'vendor/bin/phpcs'
|
42 |
+
},
|
43 |
+
dist: {
|
44 |
+
src: [
|
45 |
+
'**/*.php', // Include all php files.
|
46 |
+
'!deprecated/**',
|
47 |
+
'!node_modules/**',
|
48 |
+
'!vendor/**'
|
49 |
+
]
|
50 |
+
}
|
51 |
+
}
|
52 |
+
});
|
53 |
+
|
54 |
+
// Load NPM tasks to be used here.
|
55 |
+
grunt.loadNpmTasks( 'grunt-phpcs' );
|
56 |
+
grunt.loadNpmTasks( 'grunt-checktextdomain' );
|
57 |
+
};
|
includes/vendor/action-scheduler/classes/ActionScheduler_ActionFactory.php
CHANGED
@@ -22,7 +22,7 @@ class ActionScheduler_ActionFactory {
|
|
22 |
break;
|
23 |
case ActionScheduler_Store::STATUS_CANCELED :
|
24 |
$action_class = 'ActionScheduler_CanceledAction';
|
25 |
-
if ( ! is_null( $schedule ) && ! is_a( $schedule, 'ActionScheduler_CanceledSchedule' ) ) {
|
26 |
$schedule = new ActionScheduler_CanceledSchedule( $schedule->get_date() );
|
27 |
}
|
28 |
break;
|
@@ -61,7 +61,7 @@ class ActionScheduler_ActionFactory {
|
|
61 |
* @param array $args Args to pass when the hook is triggered
|
62 |
* @param string $group A group to put the action in
|
63 |
*
|
64 |
-
* @return
|
65 |
*/
|
66 |
public function async( $hook, $args = array(), $group = '' ) {
|
67 |
$schedule = new ActionScheduler_NullSchedule();
|
@@ -75,7 +75,7 @@ class ActionScheduler_ActionFactory {
|
|
75 |
* @param int $when Unix timestamp when the action will run
|
76 |
* @param string $group A group to put the action in
|
77 |
*
|
78 |
-
* @return
|
79 |
*/
|
80 |
public function single( $hook, $args = array(), $when = null, $group = '' ) {
|
81 |
$date = as_get_datetime_object( $when );
|
@@ -93,7 +93,7 @@ class ActionScheduler_ActionFactory {
|
|
93 |
* @param int $interval Seconds between runs
|
94 |
* @param string $group A group to put the action in
|
95 |
*
|
96 |
-
* @return
|
97 |
*/
|
98 |
public function recurring( $hook, $args = array(), $first = null, $interval = null, $group = '' ) {
|
99 |
if ( empty($interval) ) {
|
@@ -116,7 +116,7 @@ class ActionScheduler_ActionFactory {
|
|
116 |
* @param int $schedule A cron definition string
|
117 |
* @param string $group A group to put the action in
|
118 |
*
|
119 |
-
* @return
|
120 |
*/
|
121 |
public function cron( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '' ) {
|
122 |
if ( empty($schedule) ) {
|
@@ -170,7 +170,7 @@ class ActionScheduler_ActionFactory {
|
|
170 |
/**
|
171 |
* @param ActionScheduler_Action $action
|
172 |
*
|
173 |
-
* @return
|
174 |
*/
|
175 |
protected function store( ActionScheduler_Action $action ) {
|
176 |
$store = ActionScheduler_Store::instance();
|
22 |
break;
|
23 |
case ActionScheduler_Store::STATUS_CANCELED :
|
24 |
$action_class = 'ActionScheduler_CanceledAction';
|
25 |
+
if ( ! is_null( $schedule ) && ! is_a( $schedule, 'ActionScheduler_CanceledSchedule' ) && ! is_a( $schedule, 'ActionScheduler_NullSchedule' ) ) {
|
26 |
$schedule = new ActionScheduler_CanceledSchedule( $schedule->get_date() );
|
27 |
}
|
28 |
break;
|
61 |
* @param array $args Args to pass when the hook is triggered
|
62 |
* @param string $group A group to put the action in
|
63 |
*
|
64 |
+
* @return int The ID of the stored action
|
65 |
*/
|
66 |
public function async( $hook, $args = array(), $group = '' ) {
|
67 |
$schedule = new ActionScheduler_NullSchedule();
|
75 |
* @param int $when Unix timestamp when the action will run
|
76 |
* @param string $group A group to put the action in
|
77 |
*
|
78 |
+
* @return int The ID of the stored action
|
79 |
*/
|
80 |
public function single( $hook, $args = array(), $when = null, $group = '' ) {
|
81 |
$date = as_get_datetime_object( $when );
|
93 |
* @param int $interval Seconds between runs
|
94 |
* @param string $group A group to put the action in
|
95 |
*
|
96 |
+
* @return int The ID of the stored action
|
97 |
*/
|
98 |
public function recurring( $hook, $args = array(), $first = null, $interval = null, $group = '' ) {
|
99 |
if ( empty($interval) ) {
|
116 |
* @param int $schedule A cron definition string
|
117 |
* @param string $group A group to put the action in
|
118 |
*
|
119 |
+
* @return int The ID of the stored action
|
120 |
*/
|
121 |
public function cron( $hook, $args = array(), $base_timestamp = null, $schedule = null, $group = '' ) {
|
122 |
if ( empty($schedule) ) {
|
170 |
/**
|
171 |
* @param ActionScheduler_Action $action
|
172 |
*
|
173 |
+
* @return int The ID of the stored action
|
174 |
*/
|
175 |
protected function store( ActionScheduler_Action $action ) {
|
176 |
$store = ActionScheduler_Store::instance();
|
includes/vendor/action-scheduler/classes/ActionScheduler_DataController.php
CHANGED
@@ -101,7 +101,7 @@ class ActionScheduler_DataController {
|
|
101 |
* @param integer $sleep_time The number of seconds to pause before resuming operation.
|
102 |
*/
|
103 |
public static function set_sleep_time( $sleep_time ) {
|
104 |
-
self::$sleep_time = $sleep_time;
|
105 |
}
|
106 |
|
107 |
/**
|
@@ -110,7 +110,7 @@ class ActionScheduler_DataController {
|
|
110 |
* @param integer $free_ticks The number of ticks to free memory on.
|
111 |
*/
|
112 |
public static function set_free_ticks( $free_ticks ) {
|
113 |
-
self::$free_ticks = $free_ticks;
|
114 |
}
|
115 |
|
116 |
/**
|
101 |
* @param integer $sleep_time The number of seconds to pause before resuming operation.
|
102 |
*/
|
103 |
public static function set_sleep_time( $sleep_time ) {
|
104 |
+
self::$sleep_time = (int) $sleep_time;
|
105 |
}
|
106 |
|
107 |
/**
|
110 |
* @param integer $free_ticks The number of ticks to free memory on.
|
111 |
*/
|
112 |
public static function set_free_ticks( $free_ticks ) {
|
113 |
+
self::$free_ticks = (int) $free_ticks;
|
114 |
}
|
115 |
|
116 |
/**
|
includes/vendor/action-scheduler/classes/ActionScheduler_ListTable.php
CHANGED
@@ -307,7 +307,7 @@ class ActionScheduler_ListTable extends ActionScheduler_Abstract_ListTable {
|
|
307 |
* @return string
|
308 |
*/
|
309 |
protected function maybe_render_actions( $row, $column_name ) {
|
310 |
-
if ( 'pending' === strtolower( $row['
|
311 |
return parent::maybe_render_actions( $row, $column_name );
|
312 |
}
|
313 |
|
@@ -577,6 +577,7 @@ class ActionScheduler_ListTable extends ActionScheduler_Abstract_ListTable {
|
|
577 |
$this->items[ $action_id ] = array(
|
578 |
'ID' => $action_id,
|
579 |
'hook' => $action->get_hook(),
|
|
|
580 |
'status' => $status_labels[ $this->store->get_status( $action_id ) ],
|
581 |
'args' => $action->get_args(),
|
582 |
'group' => $action->get_group(),
|
307 |
* @return string
|
308 |
*/
|
309 |
protected function maybe_render_actions( $row, $column_name ) {
|
310 |
+
if ( 'pending' === strtolower( $row[ 'status_name' ] ) ) {
|
311 |
return parent::maybe_render_actions( $row, $column_name );
|
312 |
}
|
313 |
|
577 |
$this->items[ $action_id ] = array(
|
578 |
'ID' => $action_id,
|
579 |
'hook' => $action->get_hook(),
|
580 |
+
'status_name' => $this->store->get_status( $action_id ),
|
581 |
'status' => $status_labels[ $this->store->get_status( $action_id ) ],
|
582 |
'args' => $action->get_args(),
|
583 |
'group' => $action->get_group(),
|
includes/vendor/action-scheduler/classes/ActionScheduler_QueueRunner.php
CHANGED
@@ -50,16 +50,15 @@ class ActionScheduler_QueueRunner extends ActionScheduler_Abstract_QueueRunner {
|
|
50 |
|
51 |
add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) );
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
$cron_context = array( 'WP Cron' );
|
54 |
|
55 |
if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
|
56 |
-
|
57 |
-
// Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param
|
58 |
-
$next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
|
59 |
-
if ( $next_timestamp ) {
|
60 |
-
wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
|
61 |
-
}
|
62 |
-
|
63 |
$schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
|
64 |
wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
|
65 |
}
|
50 |
|
51 |
add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) );
|
52 |
|
53 |
+
// Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param
|
54 |
+
$next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
|
55 |
+
if ( $next_timestamp ) {
|
56 |
+
wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
|
57 |
+
}
|
58 |
+
|
59 |
$cron_context = array( 'WP Cron' );
|
60 |
|
61 |
if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
$schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
|
63 |
wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
|
64 |
}
|
includes/vendor/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php
CHANGED
@@ -48,8 +48,8 @@ class ActionScheduler_WPCLI_Scheduler_command extends WP_CLI_Command {
|
|
48 |
$hooks = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
|
49 |
$hooks = array_filter( array_map( 'trim', $hooks ) );
|
50 |
$group = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
|
51 |
-
$free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on',
|
52 |
-
$sleep = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause',
|
53 |
$force = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );
|
54 |
|
55 |
ActionScheduler_DataController::set_free_ticks( $free_on );
|
48 |
$hooks = explode( ',', WP_CLI\Utils\get_flag_value( $assoc_args, 'hooks', '' ) );
|
49 |
$hooks = array_filter( array_map( 'trim', $hooks ) );
|
50 |
$group = \WP_CLI\Utils\get_flag_value( $assoc_args, 'group', '' );
|
51 |
+
$free_on = \WP_CLI\Utils\get_flag_value( $assoc_args, 'free-memory-on', 50 );
|
52 |
+
$sleep = \WP_CLI\Utils\get_flag_value( $assoc_args, 'pause', 0 );
|
53 |
$force = \WP_CLI\Utils\get_flag_value( $assoc_args, 'force', false );
|
54 |
|
55 |
ActionScheduler_DataController::set_free_ticks( $free_on );
|
includes/vendor/action-scheduler/classes/abstracts/ActionScheduler.php
CHANGED
@@ -180,6 +180,24 @@ abstract class ActionScheduler {
|
|
180 |
add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
/**
|
184 |
* Determine if the class is one of our abstract classes.
|
185 |
*
|
180 |
add_action( 'action_scheduler/migration_complete', 'ActionScheduler_WPCommentCleaner::maybe_schedule_cleanup' );
|
181 |
}
|
182 |
|
183 |
+
/**
|
184 |
+
* Issue deprecated warning if an Action Scheduler function is called in the shutdown hook.
|
185 |
+
*
|
186 |
+
* @param string $function_name The name of the function being called.
|
187 |
+
*/
|
188 |
+
public static function check_shutdown_hook( $function_name ) {
|
189 |
+
if ( 'shutdown' === current_filter() ) {
|
190 |
+
$message = sprintf(
|
191 |
+
/* translators: $1: open code tag, $2: function name, $3: close code tag. */
|
192 |
+
__( 'Action Scheduler function %1$s%2$s%3$s should not be used within the WordPress %1$sshutdown%3$s hook.', 'action-scheduler' ),
|
193 |
+
'<code>',
|
194 |
+
esc_attr( $function_name ) . '()',
|
195 |
+
'</code>'
|
196 |
+
);
|
197 |
+
_deprecated_hook( 'shutdown', 'Action Scheduler 3.0', 'init', $message );
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
/**
|
202 |
* Determine if the class is one of our abstract classes.
|
203 |
*
|
includes/vendor/action-scheduler/classes/abstracts/ActionScheduler_Store.php
CHANGED
@@ -24,7 +24,7 @@ abstract class ActionScheduler_Store extends ActionScheduler_Store_Deprecated {
|
|
24 |
* to store. Otherwise uses the first date of the action's
|
25 |
* schedule.
|
26 |
*
|
27 |
-
* @return
|
28 |
*/
|
29 |
abstract public function save_action( ActionScheduler_Action $action, DateTime $scheduled_date = NULL );
|
30 |
|
24 |
* to store. Otherwise uses the first date of the action's
|
25 |
* schedule.
|
26 |
*
|
27 |
+
* @return int The action ID
|
28 |
*/
|
29 |
abstract public function save_action( ActionScheduler_Action $action, DateTime $scheduled_date = NULL );
|
30 |
|
includes/vendor/action-scheduler/classes/data-stores/ActionScheduler_HybridStore.php
CHANGED
@@ -77,18 +77,33 @@ class ActionScheduler_HybridStore extends Store {
|
|
77 |
}
|
78 |
/** @var \wpdb $wpdb */
|
79 |
global $wpdb;
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
$wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
|
82 |
[
|
83 |
-
'action_id'
|
84 |
-
'hook'
|
85 |
-
'status'
|
|
|
|
|
|
|
|
|
86 |
]
|
87 |
);
|
88 |
-
$
|
89 |
-
$wpdb->
|
90 |
-
|
91 |
-
|
|
|
|
|
92 |
}
|
93 |
}
|
94 |
|
@@ -220,6 +235,8 @@ class ActionScheduler_HybridStore extends Store {
|
|
220 |
*
|
221 |
* @param ActionScheduler_Action $action Action object to be saved.
|
222 |
* @param DateTime $date Optional. Schedule date. Default null.
|
|
|
|
|
223 |
*/
|
224 |
public function save_action( ActionScheduler_Action $action, DateTime $date = null ) {
|
225 |
return $this->primary_store->save_action( $action, $date );
|
@@ -231,10 +248,11 @@ class ActionScheduler_HybridStore extends Store {
|
|
231 |
* @param int $action_id Action ID.
|
232 |
*/
|
233 |
public function fetch_action( $action_id ) {
|
234 |
-
|
235 |
-
|
|
|
236 |
} else {
|
237 |
-
return
|
238 |
}
|
239 |
}
|
240 |
|
@@ -244,10 +262,9 @@ class ActionScheduler_HybridStore extends Store {
|
|
244 |
* @param int $action_id Action ID.
|
245 |
*/
|
246 |
public function cancel_action( $action_id ) {
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
$this->primary_store->cancel_action( $action_id );
|
251 |
}
|
252 |
}
|
253 |
|
@@ -257,10 +274,9 @@ class ActionScheduler_HybridStore extends Store {
|
|
257 |
* @param int $action_id Action ID.
|
258 |
*/
|
259 |
public function delete_action( $action_id ) {
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
$this->primary_store->delete_action( $action_id );
|
264 |
}
|
265 |
}
|
266 |
|
@@ -270,10 +286,11 @@ class ActionScheduler_HybridStore extends Store {
|
|
270 |
* @param int $action_id Action ID.
|
271 |
*/
|
272 |
public function get_date( $action_id ) {
|
273 |
-
|
274 |
-
|
|
|
275 |
} else {
|
276 |
-
return
|
277 |
}
|
278 |
}
|
279 |
|
@@ -283,10 +300,9 @@ class ActionScheduler_HybridStore extends Store {
|
|
283 |
* @param int $action_id Action ID.
|
284 |
*/
|
285 |
public function mark_failure( $action_id ) {
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
$this->primary_store->mark_failure( $action_id );
|
290 |
}
|
291 |
}
|
292 |
|
@@ -296,10 +312,9 @@ class ActionScheduler_HybridStore extends Store {
|
|
296 |
* @param int $action_id Action ID.
|
297 |
*/
|
298 |
public function log_execution( $action_id ) {
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
$this->primary_store->log_execution( $action_id );
|
303 |
}
|
304 |
}
|
305 |
|
@@ -309,10 +324,9 @@ class ActionScheduler_HybridStore extends Store {
|
|
309 |
* @param int $action_id Action ID.
|
310 |
*/
|
311 |
public function mark_complete( $action_id ) {
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
$this->primary_store->mark_complete( $action_id );
|
316 |
}
|
317 |
}
|
318 |
|
@@ -322,13 +336,45 @@ class ActionScheduler_HybridStore extends Store {
|
|
322 |
* @param int $action_id Action ID.
|
323 |
*/
|
324 |
public function get_status( $action_id ) {
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
return $this->primary_store->get_status( $action_id );
|
329 |
}
|
|
|
330 |
}
|
331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
|
333 |
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
|
334 |
* All claim-related functions should operate solely
|
77 |
}
|
78 |
/** @var \wpdb $wpdb */
|
79 |
global $wpdb;
|
80 |
+
/**
|
81 |
+
* A default date of '0000-00-00 00:00:00' is invalid in MySQL 5.7 when configured with
|
82 |
+
* sql_mode including both STRICT_TRANS_TABLES and NO_ZERO_DATE.
|
83 |
+
*/
|
84 |
+
$default_date = new DateTime( 'tomorrow' );
|
85 |
+
$null_action = new ActionScheduler_NullAction();
|
86 |
+
$date_gmt = $this->get_scheduled_date_string( $null_action, $default_date );
|
87 |
+
$date_local = $this->get_scheduled_date_string_local( $null_action, $default_date );
|
88 |
+
|
89 |
+
$row_count = $wpdb->insert(
|
90 |
$wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
|
91 |
[
|
92 |
+
'action_id' => $this->demarkation_id,
|
93 |
+
'hook' => '',
|
94 |
+
'status' => '',
|
95 |
+
'scheduled_date_gmt' => $date_gmt,
|
96 |
+
'scheduled_date_local' => $date_local,
|
97 |
+
'last_attempt_gmt' => $date_gmt,
|
98 |
+
'last_attempt_local' => $date_local,
|
99 |
]
|
100 |
);
|
101 |
+
if ( $row_count > 0 ) {
|
102 |
+
$wpdb->delete(
|
103 |
+
$wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
|
104 |
+
[ 'action_id' => $this->demarkation_id ]
|
105 |
+
);
|
106 |
+
}
|
107 |
}
|
108 |
}
|
109 |
|
235 |
*
|
236 |
* @param ActionScheduler_Action $action Action object to be saved.
|
237 |
* @param DateTime $date Optional. Schedule date. Default null.
|
238 |
+
*
|
239 |
+
* @return int The action ID
|
240 |
*/
|
241 |
public function save_action( ActionScheduler_Action $action, DateTime $date = null ) {
|
242 |
return $this->primary_store->save_action( $action, $date );
|
248 |
* @param int $action_id Action ID.
|
249 |
*/
|
250 |
public function fetch_action( $action_id ) {
|
251 |
+
$store = $this->get_store_from_action_id( $action_id, true );
|
252 |
+
if ( $store ) {
|
253 |
+
return $store->fetch_action( $action_id );
|
254 |
} else {
|
255 |
+
return new ActionScheduler_NullAction();
|
256 |
}
|
257 |
}
|
258 |
|
262 |
* @param int $action_id Action ID.
|
263 |
*/
|
264 |
public function cancel_action( $action_id ) {
|
265 |
+
$store = $this->get_store_from_action_id( $action_id );
|
266 |
+
if ( $store ) {
|
267 |
+
$store->cancel_action( $action_id );
|
|
|
268 |
}
|
269 |
}
|
270 |
|
274 |
* @param int $action_id Action ID.
|
275 |
*/
|
276 |
public function delete_action( $action_id ) {
|
277 |
+
$store = $this->get_store_from_action_id( $action_id );
|
278 |
+
if ( $store ) {
|
279 |
+
$store->delete_action( $action_id );
|
|
|
280 |
}
|
281 |
}
|
282 |
|
286 |
* @param int $action_id Action ID.
|
287 |
*/
|
288 |
public function get_date( $action_id ) {
|
289 |
+
$store = $this->get_store_from_action_id( $action_id );
|
290 |
+
if ( $store ) {
|
291 |
+
return $store->get_date( $action_id );
|
292 |
} else {
|
293 |
+
return null;
|
294 |
}
|
295 |
}
|
296 |
|
300 |
* @param int $action_id Action ID.
|
301 |
*/
|
302 |
public function mark_failure( $action_id ) {
|
303 |
+
$store = $this->get_store_from_action_id( $action_id );
|
304 |
+
if ( $store ) {
|
305 |
+
$store->mark_failure( $action_id );
|
|
|
306 |
}
|
307 |
}
|
308 |
|
312 |
* @param int $action_id Action ID.
|
313 |
*/
|
314 |
public function log_execution( $action_id ) {
|
315 |
+
$store = $this->get_store_from_action_id( $action_id );
|
316 |
+
if ( $store ) {
|
317 |
+
$store->log_execution( $action_id );
|
|
|
318 |
}
|
319 |
}
|
320 |
|
324 |
* @param int $action_id Action ID.
|
325 |
*/
|
326 |
public function mark_complete( $action_id ) {
|
327 |
+
$store = $this->get_store_from_action_id( $action_id );
|
328 |
+
if ( $store ) {
|
329 |
+
$store->mark_complete( $action_id );
|
|
|
330 |
}
|
331 |
}
|
332 |
|
336 |
* @param int $action_id Action ID.
|
337 |
*/
|
338 |
public function get_status( $action_id ) {
|
339 |
+
$store = $this->get_store_from_action_id( $action_id );
|
340 |
+
if ( $store ) {
|
341 |
+
return $store->get_status( $action_id );
|
|
|
342 |
}
|
343 |
+
return null;
|
344 |
}
|
345 |
|
346 |
+
/**
|
347 |
+
* Return which store an action is stored in.
|
348 |
+
*
|
349 |
+
* @param int $action_id ID of the action.
|
350 |
+
* @param bool $primary_first Optional flag indicating search the primary store first.
|
351 |
+
* @return ActionScheduler_Store
|
352 |
+
*/
|
353 |
+
protected function get_store_from_action_id( $action_id, $primary_first = false ) {
|
354 |
+
if ( $primary_first ) {
|
355 |
+
$stores = [
|
356 |
+
$this->primary_store,
|
357 |
+
$this->secondary_store,
|
358 |
+
];
|
359 |
+
} elseif ( $action_id < $this->demarkation_id ) {
|
360 |
+
$stores = [
|
361 |
+
$this->secondary_store,
|
362 |
+
$this->primary_store,
|
363 |
+
];
|
364 |
+
} else {
|
365 |
+
$stores = [
|
366 |
+
$this->primary_store,
|
367 |
+
];
|
368 |
+
}
|
369 |
+
|
370 |
+
foreach ( $stores as $store ) {
|
371 |
+
$action = $store->fetch_action( $action_id );
|
372 |
+
if ( ! is_a( $action, 'ActionScheduler_NullAction' ) ) {
|
373 |
+
return $store;
|
374 |
+
}
|
375 |
+
}
|
376 |
+
return null;
|
377 |
+
}
|
378 |
|
379 |
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
|
380 |
* All claim-related functions should operate solely
|
includes/vendor/action-scheduler/classes/migration/Controller.php
CHANGED
@@ -149,7 +149,7 @@ class Controller {
|
|
149 |
add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
|
150 |
add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
|
151 |
add_action( 'init', array( $this, 'maybe_hook_migration' ) );
|
152 |
-
add_action( '
|
153 |
|
154 |
// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen
|
155 |
add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
|
149 |
add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
|
150 |
add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
|
151 |
add_action( 'init', array( $this, 'maybe_hook_migration' ) );
|
152 |
+
add_action( 'wp_loaded', array( $this, 'schedule_migration' ) );
|
153 |
|
154 |
// Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen
|
155 |
add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
|
includes/vendor/action-scheduler/classes/migration/Scheduler.php
CHANGED
@@ -83,7 +83,7 @@ class Scheduler {
|
|
83 |
}
|
84 |
|
85 |
if ( empty( $when ) ) {
|
86 |
-
$when = time();
|
87 |
}
|
88 |
|
89 |
return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
|
83 |
}
|
84 |
|
85 |
if ( empty( $when ) ) {
|
86 |
+
$when = time() + MINUTE_IN_SECONDS;
|
87 |
}
|
88 |
|
89 |
return as_schedule_single_action( $when, self::HOOK, array(), self::GROUP );
|
includes/vendor/action-scheduler/codecov.yml
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
codecov:
|
2 |
+
branch: master
|
3 |
+
|
4 |
+
coverage:
|
5 |
+
ignore:
|
6 |
+
- tests/.*
|
7 |
+
- lib/.*
|
8 |
+
status:
|
9 |
+
project: false
|
10 |
+
patch: false
|
11 |
+
changes: false
|
12 |
+
|
13 |
+
comment: false
|
includes/vendor/action-scheduler/composer.json
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "woocommerce/action-scheduler",
|
3 |
+
"description": "Action Scheduler for WordPress and WooCommerce",
|
4 |
+
"homepage": "https://actionscheduler.org/",
|
5 |
+
"type": "wordpress-plugin",
|
6 |
+
"license": "GPL-3.0-or-later",
|
7 |
+
"prefer-stable": true,
|
8 |
+
"minimum-stability": "dev",
|
9 |
+
"require": {},
|
10 |
+
"require-dev": {
|
11 |
+
"phpunit/phpunit": "^5.6",
|
12 |
+
"wp-cli/wp-cli": "~1.5.1",
|
13 |
+
"woocommerce/woocommerce-sniffs": "0.0.8"
|
14 |
+
},
|
15 |
+
"scripts": {
|
16 |
+
"test": [
|
17 |
+
"phpunit"
|
18 |
+
],
|
19 |
+
"phpcs": [
|
20 |
+
"phpcs -s -p"
|
21 |
+
],
|
22 |
+
"phpcs-pre-commit": [
|
23 |
+
"phpcs -s -p -n"
|
24 |
+
],
|
25 |
+
"phpcbf": [
|
26 |
+
"phpcbf -p"
|
27 |
+
]
|
28 |
+
},
|
29 |
+
"extra": {
|
30 |
+
"scripts-description": {
|
31 |
+
"test": "Run unit tests",
|
32 |
+
"phpcs": "Analyze code against the WordPress coding standards with PHP_CodeSniffer",
|
33 |
+
"phpcbf": "Fix coding standards warnings/errors automatically with PHP Code Beautifier"
|
34 |
+
}
|
35 |
+
}
|
36 |
+
}
|
includes/vendor/action-scheduler/composer.lock
ADDED
@@ -0,0 +1,4878 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"_readme": [
|
3 |
+
"This file locks the dependencies of your project to a known state",
|
4 |
+
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
5 |
+
"This file is @generated automatically"
|
6 |
+
],
|
7 |
+
"content-hash": "fe700435a00b5cdde47170ab9811f5ae",
|
8 |
+
"packages": [],
|
9 |
+
"packages-dev": [
|
10 |
+
{
|
11 |
+
"name": "composer/ca-bundle",
|
12 |
+
"version": "1.2.6",
|
13 |
+
"source": {
|
14 |
+
"type": "git",
|
15 |
+
"url": "https://github.com/composer/ca-bundle.git",
|
16 |
+
"reference": "47fe531de31fca4a1b997f87308e7d7804348f7e"
|
17 |
+
},
|
18 |
+
"dist": {
|
19 |
+
"type": "zip",
|
20 |
+
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/47fe531de31fca4a1b997f87308e7d7804348f7e",
|
21 |
+
"reference": "47fe531de31fca4a1b997f87308e7d7804348f7e",
|
22 |
+
"shasum": ""
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"ext-openssl": "*",
|
26 |
+
"ext-pcre": "*",
|
27 |
+
"php": "^5.3.2 || ^7.0 || ^8.0"
|
28 |
+
},
|
29 |
+
"require-dev": {
|
30 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
|
31 |
+
"psr/log": "^1.0",
|
32 |
+
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
|
33 |
+
},
|
34 |
+
"type": "library",
|
35 |
+
"extra": {
|
36 |
+
"branch-alias": {
|
37 |
+
"dev-master": "1.x-dev"
|
38 |
+
}
|
39 |
+
},
|
40 |
+
"autoload": {
|
41 |
+
"psr-4": {
|
42 |
+
"Composer\\CaBundle\\": "src"
|
43 |
+
}
|
44 |
+
},
|
45 |
+
"notification-url": "https://packagist.org/downloads/",
|
46 |
+
"license": [
|
47 |
+
"MIT"
|
48 |
+
],
|
49 |
+
"authors": [
|
50 |
+
{
|
51 |
+
"name": "Jordi Boggiano",
|
52 |
+
"email": "j.boggiano@seld.be",
|
53 |
+
"homepage": "http://seld.be"
|
54 |
+
}
|
55 |
+
],
|
56 |
+
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
|
57 |
+
"keywords": [
|
58 |
+
"cabundle",
|
59 |
+
"cacert",
|
60 |
+
"certificate",
|
61 |
+
"ssl",
|
62 |
+
"tls"
|
63 |
+
],
|
64 |
+
"time": "2020-01-13T10:02:55+00:00"
|
65 |
+
},
|
66 |
+
{
|
67 |
+
"name": "composer/composer",
|
68 |
+
"version": "1.9.3",
|
69 |
+
"source": {
|
70 |
+
"type": "git",
|
71 |
+
"url": "https://github.com/composer/composer.git",
|
72 |
+
"reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b"
|
73 |
+
},
|
74 |
+
"dist": {
|
75 |
+
"type": "zip",
|
76 |
+
"url": "https://api.github.com/repos/composer/composer/zipball/1291a16ce3f48bfdeca39d64fca4875098af4d7b",
|
77 |
+
"reference": "1291a16ce3f48bfdeca39d64fca4875098af4d7b",
|
78 |
+
"shasum": ""
|
79 |
+
},
|
80 |
+
"require": {
|
81 |
+
"composer/ca-bundle": "^1.0",
|
82 |
+
"composer/semver": "^1.0",
|
83 |
+
"composer/spdx-licenses": "^1.2",
|
84 |
+
"composer/xdebug-handler": "^1.1",
|
85 |
+
"justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
|
86 |
+
"php": "^5.3.2 || ^7.0",
|
87 |
+
"psr/log": "^1.0",
|
88 |
+
"seld/jsonlint": "^1.4",
|
89 |
+
"seld/phar-utils": "^1.0",
|
90 |
+
"symfony/console": "^2.7 || ^3.0 || ^4.0",
|
91 |
+
"symfony/filesystem": "^2.7 || ^3.0 || ^4.0",
|
92 |
+
"symfony/finder": "^2.7 || ^3.0 || ^4.0",
|
93 |
+
"symfony/process": "^2.7 || ^3.0 || ^4.0"
|
94 |
+
},
|
95 |
+
"conflict": {
|
96 |
+
"symfony/console": "2.8.38"
|
97 |
+
},
|
98 |
+
"require-dev": {
|
99 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7",
|
100 |
+
"phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
|
101 |
+
},
|
102 |
+
"suggest": {
|
103 |
+
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
|
104 |
+
"ext-zip": "Enabling the zip extension allows you to unzip archives",
|
105 |
+
"ext-zlib": "Allow gzip compression of HTTP requests"
|
106 |
+
},
|
107 |
+
"bin": [
|
108 |
+
"bin/composer"
|
109 |
+
],
|
110 |
+
"type": "library",
|
111 |
+
"extra": {
|
112 |
+
"branch-alias": {
|
113 |
+
"dev-master": "1.9-dev"
|
114 |
+
}
|
115 |
+
},
|
116 |
+
"autoload": {
|
117 |
+
"psr-4": {
|
118 |
+
"Composer\\": "src/Composer"
|
119 |
+
}
|
120 |
+
},
|
121 |
+
"notification-url": "https://packagist.org/downloads/",
|
122 |
+
"license": [
|
123 |
+
"MIT"
|
124 |
+
],
|
125 |
+
"authors": [
|
126 |
+
{
|
127 |
+
"name": "Nils Adermann",
|
128 |
+
"email": "naderman@naderman.de",
|
129 |
+
"homepage": "http://www.naderman.de"
|
130 |
+
},
|
131 |
+
{
|
132 |
+
"name": "Jordi Boggiano",
|
133 |
+
"email": "j.boggiano@seld.be",
|
134 |
+
"homepage": "http://seld.be"
|
135 |
+
}
|
136 |
+
],
|
137 |
+
"description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
|
138 |
+
"homepage": "https://getcomposer.org/",
|
139 |
+
"keywords": [
|
140 |
+
"autoload",
|
141 |
+
"dependency",
|
142 |
+
"package"
|
143 |
+
],
|
144 |
+
"time": "2020-02-04T11:58:49+00:00"
|
145 |
+
},
|
146 |
+
{
|
147 |
+
"name": "composer/semver",
|
148 |
+
"version": "1.5.1",
|
149 |
+
"source": {
|
150 |
+
"type": "git",
|
151 |
+
"url": "https://github.com/composer/semver.git",
|
152 |
+
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
|
153 |
+
},
|
154 |
+
"dist": {
|
155 |
+
"type": "zip",
|
156 |
+
"url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
|
157 |
+
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
|
158 |
+
"shasum": ""
|
159 |
+
},
|
160 |
+
"require": {
|
161 |
+
"php": "^5.3.2 || ^7.0"
|
162 |
+
},
|
163 |
+
"require-dev": {
|
164 |
+
"phpunit/phpunit": "^4.5 || ^5.0.5"
|
165 |
+
},
|
166 |
+
"type": "library",
|
167 |
+
"extra": {
|
168 |
+
"branch-alias": {
|
169 |
+
"dev-master": "1.x-dev"
|
170 |
+
}
|
171 |
+
},
|
172 |
+
"autoload": {
|
173 |
+
"psr-4": {
|
174 |
+
"Composer\\Semver\\": "src"
|
175 |
+
}
|
176 |
+
},
|
177 |
+
"notification-url": "https://packagist.org/downloads/",
|
178 |
+
"license": [
|
179 |
+
"MIT"
|
180 |
+
],
|
181 |
+
"authors": [
|
182 |
+
{
|
183 |
+
"name": "Nils Adermann",
|
184 |
+
"email": "naderman@naderman.de",
|
185 |
+
"homepage": "http://www.naderman.de"
|
186 |
+
},
|
187 |
+
{
|
188 |
+
"name": "Jordi Boggiano",
|
189 |
+
"email": "j.boggiano@seld.be",
|
190 |
+
"homepage": "http://seld.be"
|
191 |
+
},
|
192 |
+
{
|
193 |
+
"name": "Rob Bast",
|
194 |
+
"email": "rob.bast@gmail.com",
|
195 |
+
"homepage": "http://robbast.nl"
|
196 |
+
}
|
197 |
+
],
|
198 |
+
"description": "Semver library that offers utilities, version constraint parsing and validation.",
|
199 |
+
"keywords": [
|
200 |
+
"semantic",
|
201 |
+
"semver",
|
202 |
+
"validation",
|
203 |
+
"versioning"
|
204 |
+
],
|
205 |
+
"time": "2020-01-13T12:06:48+00:00"
|
206 |
+
},
|
207 |
+
{
|
208 |
+
"name": "composer/spdx-licenses",
|
209 |
+
"version": "1.5.3",
|
210 |
+
"source": {
|
211 |
+
"type": "git",
|
212 |
+
"url": "https://github.com/composer/spdx-licenses.git",
|
213 |
+
"reference": "0c3e51e1880ca149682332770e25977c70cf9dae"
|
214 |
+
},
|
215 |
+
"dist": {
|
216 |
+
"type": "zip",
|
217 |
+
"url": "https://api.github.com/repos/composer/spdx-licenses/zipball/0c3e51e1880ca149682332770e25977c70cf9dae",
|
218 |
+
"reference": "0c3e51e1880ca149682332770e25977c70cf9dae",
|
219 |
+
"shasum": ""
|
220 |
+
},
|
221 |
+
"require": {
|
222 |
+
"php": "^5.3.2 || ^7.0 || ^8.0"
|
223 |
+
},
|
224 |
+
"require-dev": {
|
225 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
|
226 |
+
},
|
227 |
+
"type": "library",
|
228 |
+
"extra": {
|
229 |
+
"branch-alias": {
|
230 |
+
"dev-master": "1.x-dev"
|
231 |
+
}
|
232 |
+
},
|
233 |
+
"autoload": {
|
234 |
+
"psr-4": {
|
235 |
+
"Composer\\Spdx\\": "src"
|
236 |
+
}
|
237 |
+
},
|
238 |
+
"notification-url": "https://packagist.org/downloads/",
|
239 |
+
"license": [
|
240 |
+
"MIT"
|
241 |
+
],
|
242 |
+
"authors": [
|
243 |
+
{
|
244 |
+
"name": "Nils Adermann",
|
245 |
+
"email": "naderman@naderman.de",
|
246 |
+
"homepage": "http://www.naderman.de"
|
247 |
+
},
|
248 |
+
{
|
249 |
+
"name": "Jordi Boggiano",
|
250 |
+
"email": "j.boggiano@seld.be",
|
251 |
+
"homepage": "http://seld.be"
|
252 |
+
},
|
253 |
+
{
|
254 |
+
"name": "Rob Bast",
|
255 |
+
"email": "rob.bast@gmail.com",
|
256 |
+
"homepage": "http://robbast.nl"
|
257 |
+
}
|
258 |
+
],
|
259 |
+
"description": "SPDX licenses list and validation library.",
|
260 |
+
"keywords": [
|
261 |
+
"license",
|
262 |
+
"spdx",
|
263 |
+
"validator"
|
264 |
+
],
|
265 |
+
"time": "2020-02-14T07:44:31+00:00"
|
266 |
+
},
|
267 |
+
{
|
268 |
+
"name": "composer/xdebug-handler",
|
269 |
+
"version": "1.4.0",
|
270 |
+
"source": {
|
271 |
+
"type": "git",
|
272 |
+
"url": "https://github.com/composer/xdebug-handler.git",
|
273 |
+
"reference": "cbe23383749496fe0f373345208b79568e4bc248"
|
274 |
+
},
|
275 |
+
"dist": {
|
276 |
+
"type": "zip",
|
277 |
+
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248",
|
278 |
+
"reference": "cbe23383749496fe0f373345208b79568e4bc248",
|
279 |
+
"shasum": ""
|
280 |
+
},
|
281 |
+
"require": {
|
282 |
+
"php": "^5.3.2 || ^7.0 || ^8.0",
|
283 |
+
"psr/log": "^1.0"
|
284 |
+
},
|
285 |
+
"require-dev": {
|
286 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
|
287 |
+
},
|
288 |
+
"type": "library",
|
289 |
+
"autoload": {
|
290 |
+
"psr-4": {
|
291 |
+
"Composer\\XdebugHandler\\": "src"
|
292 |
+
}
|
293 |
+
},
|
294 |
+
"notification-url": "https://packagist.org/downloads/",
|
295 |
+
"license": [
|
296 |
+
"MIT"
|
297 |
+
],
|
298 |
+
"authors": [
|
299 |
+
{
|
300 |
+
"name": "John Stevenson",
|
301 |
+
"email": "john-stevenson@blueyonder.co.uk"
|
302 |
+
}
|
303 |
+
],
|
304 |
+
"description": "Restarts a process without Xdebug.",
|
305 |
+
"keywords": [
|
306 |
+
"Xdebug",
|
307 |
+
"performance"
|
308 |
+
],
|
309 |
+
"time": "2019-11-06T16:40:04+00:00"
|
310 |
+
},
|
311 |
+
{
|
312 |
+
"name": "dealerdirect/phpcodesniffer-composer-installer",
|
313 |
+
"version": "v0.5.0",
|
314 |
+
"source": {
|
315 |
+
"type": "git",
|
316 |
+
"url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
|
317 |
+
"reference": "e749410375ff6fb7a040a68878c656c2e610b132"
|
318 |
+
},
|
319 |
+
"dist": {
|
320 |
+
"type": "zip",
|
321 |
+
"url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/e749410375ff6fb7a040a68878c656c2e610b132",
|
322 |
+
"reference": "e749410375ff6fb7a040a68878c656c2e610b132",
|
323 |
+
"shasum": ""
|
324 |
+
},
|
325 |
+
"require": {
|
326 |
+
"composer-plugin-api": "^1.0",
|
327 |
+
"php": "^5.3|^7",
|
328 |
+
"squizlabs/php_codesniffer": "^2|^3"
|
329 |
+
},
|
330 |
+
"require-dev": {
|
331 |
+
"composer/composer": "*",
|
332 |
+
"phpcompatibility/php-compatibility": "^9.0",
|
333 |
+
"sensiolabs/security-checker": "^4.1.0"
|
334 |
+
},
|
335 |
+
"type": "composer-plugin",
|
336 |
+
"extra": {
|
337 |
+
"class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
|
338 |
+
},
|
339 |
+
"autoload": {
|
340 |
+
"psr-4": {
|
341 |
+
"Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
|
342 |
+
}
|
343 |
+
},
|
344 |
+
"notification-url": "https://packagist.org/downloads/",
|
345 |
+
"license": [
|
346 |
+
"MIT"
|
347 |
+
],
|
348 |
+
"authors": [
|
349 |
+
{
|
350 |
+
"name": "Franck Nijhof",
|
351 |
+
"email": "franck.nijhof@dealerdirect.com",
|
352 |
+
"homepage": "http://www.frenck.nl",
|
353 |
+
"role": "Developer / IT Manager"
|
354 |
+
}
|
355 |
+
],
|
356 |
+
"description": "PHP_CodeSniffer Standards Composer Installer Plugin",
|
357 |
+
"homepage": "http://www.dealerdirect.com",
|
358 |
+
"keywords": [
|
359 |
+
"PHPCodeSniffer",
|
360 |
+
"PHP_CodeSniffer",
|
361 |
+
"code quality",
|
362 |
+
"codesniffer",
|
363 |
+
"composer",
|
364 |
+
"installer",
|
365 |
+
"phpcs",
|
366 |
+
"plugin",
|
367 |
+
"qa",
|
368 |
+
"quality",
|
369 |
+
"standard",
|
370 |
+
"standards",
|
371 |
+
"style guide",
|
372 |
+
"stylecheck",
|
373 |
+
"tests"
|
374 |
+
],
|
375 |
+
"time": "2018-10-26T13:21:45+00:00"
|
376 |
+
},
|
377 |
+
{
|
378 |
+
"name": "doctrine/instantiator",
|
379 |
+
"version": "1.3.0",
|
380 |
+
"source": {
|
381 |
+
"type": "git",
|
382 |
+
"url": "https://github.com/doctrine/instantiator.git",
|
383 |
+
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
|
384 |
+
},
|
385 |
+
"dist": {
|
386 |
+
"type": "zip",
|
387 |
+
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
|
388 |
+
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
|
389 |
+
"shasum": ""
|
390 |
+
},
|
391 |
+
"require": {
|
392 |
+
"php": "^7.1"
|
393 |
+
},
|
394 |
+
"require-dev": {
|
395 |
+
"doctrine/coding-standard": "^6.0",
|
396 |
+
"ext-pdo": "*",
|
397 |
+
"ext-phar": "*",
|
398 |
+
"phpbench/phpbench": "^0.13",
|
399 |
+
"phpstan/phpstan-phpunit": "^0.11",
|
400 |
+
"phpstan/phpstan-shim": "^0.11",
|
401 |
+
"phpunit/phpunit": "^7.0"
|
402 |
+
},
|
403 |
+
"type": "library",
|
404 |
+
"extra": {
|
405 |
+
"branch-alias": {
|
406 |
+
"dev-master": "1.2.x-dev"
|
407 |
+
}
|
408 |
+
},
|
409 |
+
"autoload": {
|
410 |
+
"psr-4": {
|
411 |
+
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
|
412 |
+
}
|
413 |
+
},
|
414 |
+
"notification-url": "https://packagist.org/downloads/",
|
415 |
+
"license": [
|
416 |
+
"MIT"
|
417 |
+
],
|
418 |
+
"authors": [
|
419 |
+
{
|
420 |
+
"name": "Marco Pivetta",
|
421 |
+
"email": "ocramius@gmail.com",
|
422 |
+
"homepage": "http://ocramius.github.com/"
|
423 |
+
}
|
424 |
+
],
|
425 |
+
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
|
426 |
+
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
|
427 |
+
"keywords": [
|
428 |
+
"constructor",
|
429 |
+
"instantiate"
|
430 |
+
],
|
431 |
+
"time": "2019-10-21T16:45:58+00:00"
|
432 |
+
},
|
433 |
+
{
|
434 |
+
"name": "justinrainbow/json-schema",
|
435 |
+
"version": "5.2.9",
|
436 |
+
"source": {
|
437 |
+
"type": "git",
|
438 |
+
"url": "https://github.com/justinrainbow/json-schema.git",
|
439 |
+
"reference": "44c6787311242a979fa15c704327c20e7221a0e4"
|
440 |
+
},
|
441 |
+
"dist": {
|
442 |
+
"type": "zip",
|
443 |
+
"url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4",
|
444 |
+
"reference": "44c6787311242a979fa15c704327c20e7221a0e4",
|
445 |
+
"shasum": ""
|
446 |
+
},
|
447 |
+
"require": {
|
448 |
+
"php": ">=5.3.3"
|
449 |
+
},
|
450 |
+
"require-dev": {
|
451 |
+
"friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
|
452 |
+
"json-schema/json-schema-test-suite": "1.2.0",
|
453 |
+
"phpunit/phpunit": "^4.8.35"
|
454 |
+
},
|
455 |
+
"bin": [
|
456 |
+
"bin/validate-json"
|
457 |
+
],
|
458 |
+
"type": "library",
|
459 |
+
"extra": {
|
460 |
+
"branch-alias": {
|
461 |
+
"dev-master": "5.0.x-dev"
|
462 |
+
}
|
463 |
+
},
|
464 |
+
"autoload": {
|
465 |
+
"psr-4": {
|
466 |
+
"JsonSchema\\": "src/JsonSchema/"
|
467 |
+
}
|
468 |
+
},
|
469 |
+
"notification-url": "https://packagist.org/downloads/",
|
470 |
+
"license": [
|
471 |
+
"MIT"
|
472 |
+
],
|
473 |
+
"authors": [
|
474 |
+
{
|
475 |
+
"name": "Bruno Prieto Reis",
|
476 |
+
"email": "bruno.p.reis@gmail.com"
|
477 |
+
},
|
478 |
+
{
|
479 |
+
"name": "Justin Rainbow",
|
480 |
+
"email": "justin.rainbow@gmail.com"
|
481 |
+
},
|
482 |
+
{
|
483 |
+
"name": "Igor Wiedler",
|
484 |
+
"email": "igor@wiedler.ch"
|
485 |
+
},
|
486 |
+
{
|
487 |
+
"name": "Robert Schönthal",
|
488 |
+
"email": "seroscho@googlemail.com"
|
489 |
+
}
|
490 |
+
],
|
491 |
+
"description": "A library to validate a json schema.",
|
492 |
+
"homepage": "https://github.com/justinrainbow/json-schema",
|
493 |
+
"keywords": [
|
494 |
+
"json",
|
495 |
+
"schema"
|
496 |
+
],
|
497 |
+
"time": "2019-09-25T14:49:45+00:00"
|
498 |
+
},
|
499 |
+
{
|
500 |
+
"name": "mustache/mustache",
|
501 |
+
"version": "v2.13.0",
|
502 |
+
"source": {
|
503 |
+
"type": "git",
|
504 |
+
"url": "https://github.com/bobthecow/mustache.php.git",
|
505 |
+
"reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4"
|
506 |
+
},
|
507 |
+
"dist": {
|
508 |
+
"type": "zip",
|
509 |
+
"url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4",
|
510 |
+
"reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4",
|
511 |
+
"shasum": ""
|
512 |
+
},
|
513 |
+
"require": {
|
514 |
+
"php": ">=5.2.4"
|
515 |
+
},
|
516 |
+
"require-dev": {
|
517 |
+
"friendsofphp/php-cs-fixer": "~1.11",
|
518 |
+
"phpunit/phpunit": "~3.7|~4.0|~5.0"
|
519 |
+
},
|
520 |
+
"type": "library",
|
521 |
+
"autoload": {
|
522 |
+
"psr-0": {
|
523 |
+
"Mustache": "src/"
|
524 |
+
}
|
525 |
+
},
|
526 |
+
"notification-url": "https://packagist.org/downloads/",
|
527 |
+
"license": [
|
528 |
+
"MIT"
|
529 |
+
],
|
530 |
+
"authors": [
|
531 |
+
{
|
532 |
+
"name": "Justin Hileman",
|
533 |
+
"email": "justin@justinhileman.info",
|
534 |
+
"homepage": "http://justinhileman.com"
|
535 |
+
}
|
536 |
+
],
|
537 |
+
"description": "A Mustache implementation in PHP.",
|
538 |
+
"homepage": "https://github.com/bobthecow/mustache.php",
|
539 |
+
"keywords": [
|
540 |
+
"mustache",
|
541 |
+
"templating"
|
542 |
+
],
|
543 |
+
"time": "2019-11-23T21:40:31+00:00"
|
544 |
+
},
|
545 |
+
{
|
546 |
+
"name": "myclabs/deep-copy",
|
547 |
+
"version": "1.9.5",
|
548 |
+
"source": {
|
549 |
+
"type": "git",
|
550 |
+
"url": "https://github.com/myclabs/DeepCopy.git",
|
551 |
+
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
|
552 |
+
},
|
553 |
+
"dist": {
|
554 |
+
"type": "zip",
|
555 |
+
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
|
556 |
+
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
|
557 |
+
"shasum": ""
|
558 |
+
},
|
559 |
+
"require": {
|
560 |
+
"php": "^7.1"
|
561 |
+
},
|
562 |
+
"replace": {
|
563 |
+
"myclabs/deep-copy": "self.version"
|
564 |
+
},
|
565 |
+
"require-dev": {
|
566 |
+
"doctrine/collections": "^1.0",
|
567 |
+
"doctrine/common": "^2.6",
|
568 |
+
"phpunit/phpunit": "^7.1"
|
569 |
+
},
|
570 |
+
"type": "library",
|
571 |
+
"autoload": {
|
572 |
+
"psr-4": {
|
573 |
+
"DeepCopy\\": "src/DeepCopy/"
|
574 |
+
},
|
575 |
+
"files": [
|
576 |
+
"src/DeepCopy/deep_copy.php"
|
577 |
+
]
|
578 |
+
},
|
579 |
+
"notification-url": "https://packagist.org/downloads/",
|
580 |
+
"license": [
|
581 |
+
"MIT"
|
582 |
+
],
|
583 |
+
"description": "Create deep copies (clones) of your objects",
|
584 |
+
"keywords": [
|
585 |
+
"clone",
|
586 |
+
"copy",
|
587 |
+
"duplicate",
|
588 |
+
"object",
|
589 |
+
"object graph"
|
590 |
+
],
|
591 |
+
"time": "2020-01-17T21:11:47+00:00"
|
592 |
+
},
|
593 |
+
{
|
594 |
+
"name": "nb/oxymel",
|
595 |
+
"version": "v0.1.0",
|
596 |
+
"source": {
|
597 |
+
"type": "git",
|
598 |
+
"url": "https://github.com/nb/oxymel.git",
|
599 |
+
"reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c"
|
600 |
+
},
|
601 |
+
"dist": {
|
602 |
+
"type": "zip",
|
603 |
+
"url": "https://api.github.com/repos/nb/oxymel/zipball/cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
|
604 |
+
"reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
|
605 |
+
"shasum": ""
|
606 |
+
},
|
607 |
+
"require": {
|
608 |
+
"php": ">=5.2.4"
|
609 |
+
},
|
610 |
+
"type": "library",
|
611 |
+
"autoload": {
|
612 |
+
"psr-0": {
|
613 |
+
"Oxymel": ""
|
614 |
+
}
|
615 |
+
},
|
616 |
+
"notification-url": "https://packagist.org/downloads/",
|
617 |
+
"license": [
|
618 |
+
"MIT"
|
619 |
+
],
|
620 |
+
"authors": [
|
621 |
+
{
|
622 |
+
"name": "Nikolay Bachiyski",
|
623 |
+
"email": "nb@nikolay.bg",
|
624 |
+
"homepage": "http://extrapolate.me/"
|
625 |
+
}
|
626 |
+
],
|
627 |
+
"description": "A sweet XML builder",
|
628 |
+
"homepage": "https://github.com/nb/oxymel",
|
629 |
+
"keywords": [
|
630 |
+
"xml"
|
631 |
+
],
|
632 |
+
"time": "2013-02-24T15:01:54+00:00"
|
633 |
+
},
|
634 |
+
{
|
635 |
+
"name": "phpcompatibility/php-compatibility",
|
636 |
+
"version": "9.3.5",
|
637 |
+
"source": {
|
638 |
+
"type": "git",
|
639 |
+
"url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
|
640 |
+
"reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
|
641 |
+
},
|
642 |
+
"dist": {
|
643 |
+
"type": "zip",
|
644 |
+
"url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
|
645 |
+
"reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
|
646 |
+
"shasum": ""
|
647 |
+
},
|
648 |
+
"require": {
|
649 |
+
"php": ">=5.3",
|
650 |
+
"squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
|
651 |
+
},
|
652 |
+
"conflict": {
|
653 |
+
"squizlabs/php_codesniffer": "2.6.2"
|
654 |
+
},
|
655 |
+
"require-dev": {
|
656 |
+
"phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
|
657 |
+
},
|
658 |
+
"suggest": {
|
659 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
|
660 |
+
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
|
661 |
+
},
|
662 |
+
"type": "phpcodesniffer-standard",
|
663 |
+
"notification-url": "https://packagist.org/downloads/",
|
664 |
+
"license": [
|
665 |
+
"LGPL-3.0-or-later"
|
666 |
+
],
|
667 |
+
"authors": [
|
668 |
+
{
|
669 |
+
"name": "Wim Godden",
|
670 |
+
"homepage": "https://github.com/wimg",
|
671 |
+
"role": "lead"
|
672 |
+
},
|
673 |
+
{
|
674 |
+
"name": "Juliette Reinders Folmer",
|
675 |
+
"homepage": "https://github.com/jrfnl",
|
676 |
+
"role": "lead"
|
677 |
+
},
|
678 |
+
{
|
679 |
+
"name": "Contributors",
|
680 |
+
"homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
|
681 |
+
}
|
682 |
+
],
|
683 |
+
"description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
|
684 |
+
"homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
|
685 |
+
"keywords": [
|
686 |
+
"compatibility",
|
687 |
+
"phpcs",
|
688 |
+
"standards"
|
689 |
+
],
|
690 |
+
"time": "2019-12-27T09:44:58+00:00"
|
691 |
+
},
|
692 |
+
{
|
693 |
+
"name": "phpcompatibility/phpcompatibility-paragonie",
|
694 |
+
"version": "1.3.0",
|
695 |
+
"source": {
|
696 |
+
"type": "git",
|
697 |
+
"url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
|
698 |
+
"reference": "b862bc32f7e860d0b164b199bd995e690b4b191c"
|
699 |
+
},
|
700 |
+
"dist": {
|
701 |
+
"type": "zip",
|
702 |
+
"url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/b862bc32f7e860d0b164b199bd995e690b4b191c",
|
703 |
+
"reference": "b862bc32f7e860d0b164b199bd995e690b4b191c",
|
704 |
+
"shasum": ""
|
705 |
+
},
|
706 |
+
"require": {
|
707 |
+
"phpcompatibility/php-compatibility": "^9.0"
|
708 |
+
},
|
709 |
+
"require-dev": {
|
710 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5",
|
711 |
+
"paragonie/random_compat": "dev-master",
|
712 |
+
"paragonie/sodium_compat": "dev-master"
|
713 |
+
},
|
714 |
+
"suggest": {
|
715 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
|
716 |
+
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
|
717 |
+
},
|
718 |
+
"type": "phpcodesniffer-standard",
|
719 |
+
"notification-url": "https://packagist.org/downloads/",
|
720 |
+
"license": [
|
721 |
+
"LGPL-3.0-or-later"
|
722 |
+
],
|
723 |
+
"authors": [
|
724 |
+
{
|
725 |
+
"name": "Wim Godden",
|
726 |
+
"role": "lead"
|
727 |
+
},
|
728 |
+
{
|
729 |
+
"name": "Juliette Reinders Folmer",
|
730 |
+
"role": "lead"
|
731 |
+
}
|
732 |
+
],
|
733 |
+
"description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
|
734 |
+
"homepage": "http://phpcompatibility.com/",
|
735 |
+
"keywords": [
|
736 |
+
"compatibility",
|
737 |
+
"paragonie",
|
738 |
+
"phpcs",
|
739 |
+
"polyfill",
|
740 |
+
"standards"
|
741 |
+
],
|
742 |
+
"time": "2019-11-04T15:17:54+00:00"
|
743 |
+
},
|
744 |
+
{
|
745 |
+
"name": "phpcompatibility/phpcompatibility-wp",
|
746 |
+
"version": "2.1.0",
|
747 |
+
"source": {
|
748 |
+
"type": "git",
|
749 |
+
"url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
|
750 |
+
"reference": "41bef18ba688af638b7310666db28e1ea9158b2f"
|
751 |
+
},
|
752 |
+
"dist": {
|
753 |
+
"type": "zip",
|
754 |
+
"url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/41bef18ba688af638b7310666db28e1ea9158b2f",
|
755 |
+
"reference": "41bef18ba688af638b7310666db28e1ea9158b2f",
|
756 |
+
"shasum": ""
|
757 |
+
},
|
758 |
+
"require": {
|
759 |
+
"phpcompatibility/php-compatibility": "^9.0",
|
760 |
+
"phpcompatibility/phpcompatibility-paragonie": "^1.0"
|
761 |
+
},
|
762 |
+
"require-dev": {
|
763 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5"
|
764 |
+
},
|
765 |
+
"suggest": {
|
766 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
|
767 |
+
"roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
|
768 |
+
},
|
769 |
+
"type": "phpcodesniffer-standard",
|
770 |
+
"notification-url": "https://packagist.org/downloads/",
|
771 |
+
"license": [
|
772 |
+
"LGPL-3.0-or-later"
|
773 |
+
],
|
774 |
+
"authors": [
|
775 |
+
{
|
776 |
+
"name": "Wim Godden",
|
777 |
+
"role": "lead"
|
778 |
+
},
|
779 |
+
{
|
780 |
+
"name": "Juliette Reinders Folmer",
|
781 |
+
"role": "lead"
|
782 |
+
}
|
783 |
+
],
|
784 |
+
"description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
|
785 |
+
"homepage": "http://phpcompatibility.com/",
|
786 |
+
"keywords": [
|
787 |
+
"compatibility",
|
788 |
+
"phpcs",
|
789 |
+
"standards",
|
790 |
+
"wordpress"
|
791 |
+
],
|
792 |
+
"time": "2019-08-28T14:22:28+00:00"
|
793 |
+
},
|
794 |
+
{
|
795 |
+
"name": "phpdocumentor/reflection-common",
|
796 |
+
"version": "2.0.0",
|
797 |
+
"source": {
|
798 |
+
"type": "git",
|
799 |
+
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
|
800 |
+
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
|
801 |
+
},
|
802 |
+
"dist": {
|
803 |
+
"type": "zip",
|
804 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
|
805 |
+
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
|
806 |
+
"shasum": ""
|
807 |
+
},
|
808 |
+
"require": {
|
809 |
+
"php": ">=7.1"
|
810 |
+
},
|
811 |
+
"require-dev": {
|
812 |
+
"phpunit/phpunit": "~6"
|
813 |
+
},
|
814 |
+
"type": "library",
|
815 |
+
"extra": {
|
816 |
+
"branch-alias": {
|
817 |
+
"dev-master": "2.x-dev"
|
818 |
+
}
|
819 |
+
},
|
820 |
+
"autoload": {
|
821 |
+
"psr-4": {
|
822 |
+
"phpDocumentor\\Reflection\\": "src/"
|
823 |
+
}
|
824 |
+
},
|
825 |
+
"notification-url": "https://packagist.org/downloads/",
|
826 |
+
"license": [
|
827 |
+
"MIT"
|
828 |
+
],
|
829 |
+
"authors": [
|
830 |
+
{
|
831 |
+
"name": "Jaap van Otterdijk",
|
832 |
+
"email": "opensource@ijaap.nl"
|
833 |
+
}
|
834 |
+
],
|
835 |
+
"description": "Common reflection classes used by phpdocumentor to reflect the code structure",
|
836 |
+
"homepage": "http://www.phpdoc.org",
|
837 |
+
"keywords": [
|
838 |
+
"FQSEN",
|
839 |
+
"phpDocumentor",
|
840 |
+
"phpdoc",
|
841 |
+
"reflection",
|
842 |
+
"static analysis"
|
843 |
+
],
|
844 |
+
"time": "2018-08-07T13:53:10+00:00"
|
845 |
+
},
|
846 |
+
{
|
847 |
+
"name": "phpdocumentor/reflection-docblock",
|
848 |
+
"version": "4.3.4",
|
849 |
+
"source": {
|
850 |
+
"type": "git",
|
851 |
+
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
852 |
+
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c"
|
853 |
+
},
|
854 |
+
"dist": {
|
855 |
+
"type": "zip",
|
856 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c",
|
857 |
+
"reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c",
|
858 |
+
"shasum": ""
|
859 |
+
},
|
860 |
+
"require": {
|
861 |
+
"php": "^7.0",
|
862 |
+
"phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
|
863 |
+
"phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
|
864 |
+
"webmozart/assert": "^1.0"
|
865 |
+
},
|
866 |
+
"require-dev": {
|
867 |
+
"doctrine/instantiator": "^1.0.5",
|
868 |
+
"mockery/mockery": "^1.0",
|
869 |
+
"phpdocumentor/type-resolver": "0.4.*",
|
870 |
+
"phpunit/phpunit": "^6.4"
|
871 |
+
},
|
872 |
+
"type": "library",
|
873 |
+
"extra": {
|
874 |
+
"branch-alias": {
|
875 |
+
"dev-master": "4.x-dev"
|
876 |
+
}
|
877 |
+
},
|
878 |
+
"autoload": {
|
879 |
+
"psr-4": {
|
880 |
+
"phpDocumentor\\Reflection\\": [
|
881 |
+
"src/"
|
882 |
+
]
|
883 |
+
}
|
884 |
+
},
|
885 |
+
"notification-url": "https://packagist.org/downloads/",
|
886 |
+
"license": [
|
887 |
+
"MIT"
|
888 |
+
],
|
889 |
+
"authors": [
|
890 |
+
{
|
891 |
+
"name": "Mike van Riel",
|
892 |
+
"email": "me@mikevanriel.com"
|
893 |
+
}
|
894 |
+
],
|
895 |
+
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
896 |
+
"time": "2019-12-28T18:55:12+00:00"
|
897 |
+
},
|
898 |
+
{
|
899 |
+
"name": "phpdocumentor/type-resolver",
|
900 |
+
"version": "1.0.1",
|
901 |
+
"source": {
|
902 |
+
"type": "git",
|
903 |
+
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
904 |
+
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
|
905 |
+
},
|
906 |
+
"dist": {
|
907 |
+
"type": "zip",
|
908 |
+
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
909 |
+
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
910 |
+
"shasum": ""
|
911 |
+
},
|
912 |
+
"require": {
|
913 |
+
"php": "^7.1",
|
914 |
+
"phpdocumentor/reflection-common": "^2.0"
|
915 |
+
},
|
916 |
+
"require-dev": {
|
917 |
+
"ext-tokenizer": "^7.1",
|
918 |
+
"mockery/mockery": "~1",
|
919 |
+
"phpunit/phpunit": "^7.0"
|
920 |
+
},
|
921 |
+
"type": "library",
|
922 |
+
"extra": {
|
923 |
+
"branch-alias": {
|
924 |
+
"dev-master": "1.x-dev"
|
925 |
+
}
|
926 |
+
},
|
927 |
+
"autoload": {
|
928 |
+
"psr-4": {
|
929 |
+
"phpDocumentor\\Reflection\\": "src"
|
930 |
+
}
|
931 |
+
},
|
932 |
+
"notification-url": "https://packagist.org/downloads/",
|
933 |
+
"license": [
|
934 |
+
"MIT"
|
935 |
+
],
|
936 |
+
"authors": [
|
937 |
+
{
|
938 |
+
"name": "Mike van Riel",
|
939 |
+
"email": "me@mikevanriel.com"
|
940 |
+
}
|
941 |
+
],
|
942 |
+
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
943 |
+
"time": "2019-08-22T18:11:29+00:00"
|
944 |
+
},
|
945 |
+
{
|
946 |
+
"name": "phpspec/prophecy",
|
947 |
+
"version": "v1.10.2",
|
948 |
+
"source": {
|
949 |
+
"type": "git",
|
950 |
+
"url": "https://github.com/phpspec/prophecy.git",
|
951 |
+
"reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9"
|
952 |
+
},
|
953 |
+
"dist": {
|
954 |
+
"type": "zip",
|
955 |
+
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
|
956 |
+
"reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
|
957 |
+
"shasum": ""
|
958 |
+
},
|
959 |
+
"require": {
|
960 |
+
"doctrine/instantiator": "^1.0.2",
|
961 |
+
"php": "^5.3|^7.0",
|
962 |
+
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
|
963 |
+
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
|
964 |
+
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
|
965 |
+
},
|
966 |
+
"require-dev": {
|
967 |
+
"phpspec/phpspec": "^2.5 || ^3.2",
|
968 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
|
969 |
+
},
|
970 |
+
"type": "library",
|
971 |
+
"extra": {
|
972 |
+
"branch-alias": {
|
973 |
+
"dev-master": "1.10.x-dev"
|
974 |
+
}
|
975 |
+
},
|
976 |
+
"autoload": {
|
977 |
+
"psr-4": {
|
978 |
+
"Prophecy\\": "src/Prophecy"
|
979 |
+
}
|
980 |
+
},
|
981 |
+
"notification-url": "https://packagist.org/downloads/",
|
982 |
+
"license": [
|
983 |
+
"MIT"
|
984 |
+
],
|
985 |
+
"authors": [
|
986 |
+
{
|
987 |
+
"name": "Konstantin Kudryashov",
|
988 |
+
"email": "ever.zet@gmail.com",
|
989 |
+
"homepage": "http://everzet.com"
|
990 |
+
},
|
991 |
+
{
|
992 |
+
"name": "Marcello Duarte",
|
993 |
+
"email": "marcello.duarte@gmail.com"
|
994 |
+
}
|
995 |
+
],
|
996 |
+
"description": "Highly opinionated mocking framework for PHP 5.3+",
|
997 |
+
"homepage": "https://github.com/phpspec/prophecy",
|
998 |
+
"keywords": [
|
999 |
+
"Double",
|
1000 |
+
"Dummy",
|
1001 |
+
"fake",
|
1002 |
+
"mock",
|
1003 |
+
"spy",
|
1004 |
+
"stub"
|
1005 |
+
],
|
1006 |
+
"time": "2020-01-20T15:57:02+00:00"
|
1007 |
+
},
|
1008 |
+
{
|
1009 |
+
"name": "phpunit/php-code-coverage",
|
1010 |
+
"version": "4.0.8",
|
1011 |
+
"source": {
|
1012 |
+
"type": "git",
|
1013 |
+
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
1014 |
+
"reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
|
1015 |
+
},
|
1016 |
+
"dist": {
|
1017 |
+
"type": "zip",
|
1018 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
|
1019 |
+
"reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
|
1020 |
+
"shasum": ""
|
1021 |
+
},
|
1022 |
+
"require": {
|
1023 |
+
"ext-dom": "*",
|
1024 |
+
"ext-xmlwriter": "*",
|
1025 |
+
"php": "^5.6 || ^7.0",
|
1026 |
+
"phpunit/php-file-iterator": "^1.3",
|
1027 |
+
"phpunit/php-text-template": "^1.2",
|
1028 |
+
"phpunit/php-token-stream": "^1.4.2 || ^2.0",
|
1029 |
+
"sebastian/code-unit-reverse-lookup": "^1.0",
|
1030 |
+
"sebastian/environment": "^1.3.2 || ^2.0",
|
1031 |
+
"sebastian/version": "^1.0 || ^2.0"
|
1032 |
+
},
|
1033 |
+
"require-dev": {
|
1034 |
+
"ext-xdebug": "^2.1.4",
|
1035 |
+
"phpunit/phpunit": "^5.7"
|
1036 |
+
},
|
1037 |
+
"suggest": {
|
1038 |
+
"ext-xdebug": "^2.5.1"
|
1039 |
+
},
|
1040 |
+
"type": "library",
|
1041 |
+
"extra": {
|
1042 |
+
"branch-alias": {
|
1043 |
+
"dev-master": "4.0.x-dev"
|
1044 |
+
}
|
1045 |
+
},
|
1046 |
+
"autoload": {
|
1047 |
+
"classmap": [
|
1048 |
+
"src/"
|
1049 |
+
]
|
1050 |
+
},
|
1051 |
+
"notification-url": "https://packagist.org/downloads/",
|
1052 |
+
"license": [
|
1053 |
+
"BSD-3-Clause"
|
1054 |
+
],
|
1055 |
+
"authors": [
|
1056 |
+
{
|
1057 |
+
"name": "Sebastian Bergmann",
|
1058 |
+
"email": "sb@sebastian-bergmann.de",
|
1059 |
+
"role": "lead"
|
1060 |
+
}
|
1061 |
+
],
|
1062 |
+
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
|
1063 |
+
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
|
1064 |
+
"keywords": [
|
1065 |
+
"coverage",
|
1066 |
+
"testing",
|
1067 |
+
"xunit"
|
1068 |
+
],
|
1069 |
+
"time": "2017-04-02T07:44:40+00:00"
|
1070 |
+
},
|
1071 |
+
{
|
1072 |
+
"name": "phpunit/php-file-iterator",
|
1073 |
+
"version": "1.4.5",
|
1074 |
+
"source": {
|
1075 |
+
"type": "git",
|
1076 |
+
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
|
1077 |
+
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
|
1078 |
+
},
|
1079 |
+
"dist": {
|
1080 |
+
"type": "zip",
|
1081 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
|
1082 |
+
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
|
1083 |
+
"shasum": ""
|
1084 |
+
},
|
1085 |
+
"require": {
|
1086 |
+
"php": ">=5.3.3"
|
1087 |
+
},
|
1088 |
+
"type": "library",
|
1089 |
+
"extra": {
|
1090 |
+
"branch-alias": {
|
1091 |
+
"dev-master": "1.4.x-dev"
|
1092 |
+
}
|
1093 |
+
},
|
1094 |
+
"autoload": {
|
1095 |
+
"classmap": [
|
1096 |
+
"src/"
|
1097 |
+
]
|
1098 |
+
},
|
1099 |
+
"notification-url": "https://packagist.org/downloads/",
|
1100 |
+
"license": [
|
1101 |
+
"BSD-3-Clause"
|
1102 |
+
],
|
1103 |
+
"authors": [
|
1104 |
+
{
|
1105 |
+
"name": "Sebastian Bergmann",
|
1106 |
+
"email": "sb@sebastian-bergmann.de",
|
1107 |
+
"role": "lead"
|
1108 |
+
}
|
1109 |
+
],
|
1110 |
+
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
|
1111 |
+
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
|
1112 |
+
"keywords": [
|
1113 |
+
"filesystem",
|
1114 |
+
"iterator"
|
1115 |
+
],
|
1116 |
+
"time": "2017-11-27T13:52:08+00:00"
|
1117 |
+
},
|
1118 |
+
{
|
1119 |
+
"name": "phpunit/php-text-template",
|
1120 |
+
"version": "1.2.1",
|
1121 |
+
"source": {
|
1122 |
+
"type": "git",
|
1123 |
+
"url": "https://github.com/sebastianbergmann/php-text-template.git",
|
1124 |
+
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
|
1125 |
+
},
|
1126 |
+
"dist": {
|
1127 |
+
"type": "zip",
|
1128 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
1129 |
+
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
|
1130 |
+
"shasum": ""
|
1131 |
+
},
|
1132 |
+
"require": {
|
1133 |
+
"php": ">=5.3.3"
|
1134 |
+
},
|
1135 |
+
"type": "library",
|
1136 |
+
"autoload": {
|
1137 |
+
"classmap": [
|
1138 |
+
"src/"
|
1139 |
+
]
|
1140 |
+
},
|
1141 |
+
"notification-url": "https://packagist.org/downloads/",
|
1142 |
+
"license": [
|
1143 |
+
"BSD-3-Clause"
|
1144 |
+
],
|
1145 |
+
"authors": [
|
1146 |
+
{
|
1147 |
+
"name": "Sebastian Bergmann",
|
1148 |
+
"email": "sebastian@phpunit.de",
|
1149 |
+
"role": "lead"
|
1150 |
+
}
|
1151 |
+
],
|
1152 |
+
"description": "Simple template engine.",
|
1153 |
+
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
|
1154 |
+
"keywords": [
|
1155 |
+
"template"
|
1156 |
+
],
|
1157 |
+
"time": "2015-06-21T13:50:34+00:00"
|
1158 |
+
},
|
1159 |
+
{
|
1160 |
+
"name": "phpunit/php-timer",
|
1161 |
+
"version": "1.0.9",
|
1162 |
+
"source": {
|
1163 |
+
"type": "git",
|
1164 |
+
"url": "https://github.com/sebastianbergmann/php-timer.git",
|
1165 |
+
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
|
1166 |
+
},
|
1167 |
+
"dist": {
|
1168 |
+
"type": "zip",
|
1169 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
|
1170 |
+
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
|
1171 |
+
"shasum": ""
|
1172 |
+
},
|
1173 |
+
"require": {
|
1174 |
+
"php": "^5.3.3 || ^7.0"
|
1175 |
+
},
|
1176 |
+
"require-dev": {
|
1177 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
|
1178 |
+
},
|
1179 |
+
"type": "library",
|
1180 |
+
"extra": {
|
1181 |
+
"branch-alias": {
|
1182 |
+
"dev-master": "1.0-dev"
|
1183 |
+
}
|
1184 |
+
},
|
1185 |
+
"autoload": {
|
1186 |
+
"classmap": [
|
1187 |
+
"src/"
|
1188 |
+
]
|
1189 |
+
},
|
1190 |
+
"notification-url": "https://packagist.org/downloads/",
|
1191 |
+
"license": [
|
1192 |
+
"BSD-3-Clause"
|
1193 |
+
],
|
1194 |
+
"authors": [
|
1195 |
+
{
|
1196 |
+
"name": "Sebastian Bergmann",
|
1197 |
+
"email": "sb@sebastian-bergmann.de",
|
1198 |
+
"role": "lead"
|
1199 |
+
}
|
1200 |
+
],
|
1201 |
+
"description": "Utility class for timing",
|
1202 |
+
"homepage": "https://github.com/sebastianbergmann/php-timer/",
|
1203 |
+
"keywords": [
|
1204 |
+
"timer"
|
1205 |
+
],
|
1206 |
+
"time": "2017-02-26T11:10:40+00:00"
|
1207 |
+
},
|
1208 |
+
{
|
1209 |
+
"name": "phpunit/php-token-stream",
|
1210 |
+
"version": "2.0.2",
|
1211 |
+
"source": {
|
1212 |
+
"type": "git",
|
1213 |
+
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
|
1214 |
+
"reference": "791198a2c6254db10131eecfe8c06670700904db"
|
1215 |
+
},
|
1216 |
+
"dist": {
|
1217 |
+
"type": "zip",
|
1218 |
+
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db",
|
1219 |
+
"reference": "791198a2c6254db10131eecfe8c06670700904db",
|
1220 |
+
"shasum": ""
|
1221 |
+
},
|
1222 |
+
"require": {
|
1223 |
+
"ext-tokenizer": "*",
|
1224 |
+
"php": "^7.0"
|
1225 |
+
},
|
1226 |
+
"require-dev": {
|
1227 |
+
"phpunit/phpunit": "^6.2.4"
|
1228 |
+
},
|
1229 |
+
"type": "library",
|
1230 |
+
"extra": {
|
1231 |
+
"branch-alias": {
|
1232 |
+
"dev-master": "2.0-dev"
|
1233 |
+
}
|
1234 |
+
},
|
1235 |
+
"autoload": {
|
1236 |
+
"classmap": [
|
1237 |
+
"src/"
|
1238 |
+
]
|
1239 |
+
},
|
1240 |
+
"notification-url": "https://packagist.org/downloads/",
|
1241 |
+
"license": [
|
1242 |
+
"BSD-3-Clause"
|
1243 |
+
],
|
1244 |
+
"authors": [
|
1245 |
+
{
|
1246 |
+
"name": "Sebastian Bergmann",
|
1247 |
+
"email": "sebastian@phpunit.de"
|
1248 |
+
}
|
1249 |
+
],
|
1250 |
+
"description": "Wrapper around PHP's tokenizer extension.",
|
1251 |
+
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
|
1252 |
+
"keywords": [
|
1253 |
+
"tokenizer"
|
1254 |
+
],
|
1255 |
+
"time": "2017-11-27T05:48:46+00:00"
|
1256 |
+
},
|
1257 |
+
{
|
1258 |
+
"name": "phpunit/phpunit",
|
1259 |
+
"version": "5.7.27",
|
1260 |
+
"source": {
|
1261 |
+
"type": "git",
|
1262 |
+
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
1263 |
+
"reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
|
1264 |
+
},
|
1265 |
+
"dist": {
|
1266 |
+
"type": "zip",
|
1267 |
+
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
|
1268 |
+
"reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
|
1269 |
+
"shasum": ""
|
1270 |
+
},
|
1271 |
+
"require": {
|
1272 |
+
"ext-dom": "*",
|
1273 |
+
"ext-json": "*",
|
1274 |
+
"ext-libxml": "*",
|
1275 |
+
"ext-mbstring": "*",
|
1276 |
+
"ext-xml": "*",
|
1277 |
+
"myclabs/deep-copy": "~1.3",
|
1278 |
+
"php": "^5.6 || ^7.0",
|
1279 |
+
"phpspec/prophecy": "^1.6.2",
|
1280 |
+
"phpunit/php-code-coverage": "^4.0.4",
|
1281 |
+
"phpunit/php-file-iterator": "~1.4",
|
1282 |
+
"phpunit/php-text-template": "~1.2",
|
1283 |
+
"phpunit/php-timer": "^1.0.6",
|
1284 |
+
"phpunit/phpunit-mock-objects": "^3.2",
|
1285 |
+
"sebastian/comparator": "^1.2.4",
|
1286 |
+
"sebastian/diff": "^1.4.3",
|
1287 |
+
"sebastian/environment": "^1.3.4 || ^2.0",
|
1288 |
+
"sebastian/exporter": "~2.0",
|
1289 |
+
"sebastian/global-state": "^1.1",
|
1290 |
+
"sebastian/object-enumerator": "~2.0",
|
1291 |
+
"sebastian/resource-operations": "~1.0",
|
1292 |
+
"sebastian/version": "^1.0.6|^2.0.1",
|
1293 |
+
"symfony/yaml": "~2.1|~3.0|~4.0"
|
1294 |
+
},
|
1295 |
+
"conflict": {
|
1296 |
+
"phpdocumentor/reflection-docblock": "3.0.2"
|
1297 |
+
},
|
1298 |
+
"require-dev": {
|
1299 |
+
"ext-pdo": "*"
|
1300 |
+
},
|
1301 |
+
"suggest": {
|
1302 |
+
"ext-xdebug": "*",
|
1303 |
+
"phpunit/php-invoker": "~1.1"
|
1304 |
+
},
|
1305 |
+
"bin": [
|
1306 |
+
"phpunit"
|
1307 |
+
],
|
1308 |
+
"type": "library",
|
1309 |
+
"extra": {
|
1310 |
+
"branch-alias": {
|
1311 |
+
"dev-master": "5.7.x-dev"
|
1312 |
+
}
|
1313 |
+
},
|
1314 |
+
"autoload": {
|
1315 |
+
"classmap": [
|
1316 |
+
"src/"
|
1317 |
+
]
|
1318 |
+
},
|
1319 |
+
"notification-url": "https://packagist.org/downloads/",
|
1320 |
+
"license": [
|
1321 |
+
"BSD-3-Clause"
|
1322 |
+
],
|
1323 |
+
"authors": [
|
1324 |
+
{
|
1325 |
+
"name": "Sebastian Bergmann",
|
1326 |
+
"email": "sebastian@phpunit.de",
|
1327 |
+
"role": "lead"
|
1328 |
+
}
|
1329 |
+
],
|
1330 |
+
"description": "The PHP Unit Testing framework.",
|
1331 |
+
"homepage": "https://phpunit.de/",
|
1332 |
+
"keywords": [
|
1333 |
+
"phpunit",
|
1334 |
+
"testing",
|
1335 |
+
"xunit"
|
1336 |
+
],
|
1337 |
+
"time": "2018-02-01T05:50:59+00:00"
|
1338 |
+
},
|
1339 |
+
{
|
1340 |
+
"name": "phpunit/phpunit-mock-objects",
|
1341 |
+
"version": "3.4.4",
|
1342 |
+
"source": {
|
1343 |
+
"type": "git",
|
1344 |
+
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
|
1345 |
+
"reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
|
1346 |
+
},
|
1347 |
+
"dist": {
|
1348 |
+
"type": "zip",
|
1349 |
+
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
|
1350 |
+
"reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
|
1351 |
+
"shasum": ""
|
1352 |
+
},
|
1353 |
+
"require": {
|
1354 |
+
"doctrine/instantiator": "^1.0.2",
|
1355 |
+
"php": "^5.6 || ^7.0",
|
1356 |
+
"phpunit/php-text-template": "^1.2",
|
1357 |
+
"sebastian/exporter": "^1.2 || ^2.0"
|
1358 |
+
},
|
1359 |
+
"conflict": {
|
1360 |
+
"phpunit/phpunit": "<5.4.0"
|
1361 |
+
},
|
1362 |
+
"require-dev": {
|
1363 |
+
"phpunit/phpunit": "^5.4"
|
1364 |
+
},
|
1365 |
+
"suggest": {
|
1366 |
+
"ext-soap": "*"
|
1367 |
+
},
|
1368 |
+
"type": "library",
|
1369 |
+
"extra": {
|
1370 |
+
"branch-alias": {
|
1371 |
+
"dev-master": "3.2.x-dev"
|
1372 |
+
}
|
1373 |
+
},
|
1374 |
+
"autoload": {
|
1375 |
+
"classmap": [
|
1376 |
+
"src/"
|
1377 |
+
]
|
1378 |
+
},
|
1379 |
+
"notification-url": "https://packagist.org/downloads/",
|
1380 |
+
"license": [
|
1381 |
+
"BSD-3-Clause"
|
1382 |
+
],
|
1383 |
+
"authors": [
|
1384 |
+
{
|
1385 |
+
"name": "Sebastian Bergmann",
|
1386 |
+
"email": "sb@sebastian-bergmann.de",
|
1387 |
+
"role": "lead"
|
1388 |
+
}
|
1389 |
+
],
|
1390 |
+
"description": "Mock Object library for PHPUnit",
|
1391 |
+
"homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
|
1392 |
+
"keywords": [
|
1393 |
+
"mock",
|
1394 |
+
"xunit"
|
1395 |
+
],
|
1396 |
+
"abandoned": true,
|
1397 |
+
"time": "2017-06-30T09:13:00+00:00"
|
1398 |
+
},
|
1399 |
+
{
|
1400 |
+
"name": "psr/container",
|
1401 |
+
"version": "1.0.0",
|
1402 |
+
"source": {
|
1403 |
+
"type": "git",
|
1404 |
+
"url": "https://github.com/php-fig/container.git",
|
1405 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
1406 |
+
},
|
1407 |
+
"dist": {
|
1408 |
+
"type": "zip",
|
1409 |
+
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1410 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
1411 |
+
"shasum": ""
|
1412 |
+
},
|
1413 |
+
"require": {
|
1414 |
+
"php": ">=5.3.0"
|
1415 |
+
},
|
1416 |
+
"type": "library",
|
1417 |
+
"extra": {
|
1418 |
+
"branch-alias": {
|
1419 |
+
"dev-master": "1.0.x-dev"
|
1420 |
+
}
|
1421 |
+
},
|
1422 |
+
"autoload": {
|
1423 |
+
"psr-4": {
|
1424 |
+
"Psr\\Container\\": "src/"
|
1425 |
+
}
|
1426 |
+
},
|
1427 |
+
"notification-url": "https://packagist.org/downloads/",
|
1428 |
+
"license": [
|
1429 |
+
"MIT"
|
1430 |
+
],
|
1431 |
+
"authors": [
|
1432 |
+
{
|
1433 |
+
"name": "PHP-FIG",
|
1434 |
+
"homepage": "http://www.php-fig.org/"
|
1435 |
+
}
|
1436 |
+
],
|
1437 |
+
"description": "Common Container Interface (PHP FIG PSR-11)",
|
1438 |
+
"homepage": "https://github.com/php-fig/container",
|
1439 |
+
"keywords": [
|
1440 |
+
"PSR-11",
|
1441 |
+
"container",
|
1442 |
+
"container-interface",
|
1443 |
+
"container-interop",
|
1444 |
+
"psr"
|
1445 |
+
],
|
1446 |
+
"time": "2017-02-14T16:28:37+00:00"
|
1447 |
+
},
|
1448 |
+
{
|
1449 |
+
"name": "psr/log",
|
1450 |
+
"version": "1.1.2",
|
1451 |
+
"source": {
|
1452 |
+
"type": "git",
|
1453 |
+
"url": "https://github.com/php-fig/log.git",
|
1454 |
+
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
|
1455 |
+
},
|
1456 |
+
"dist": {
|
1457 |
+
"type": "zip",
|
1458 |
+
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1459 |
+
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
|
1460 |
+
"shasum": ""
|
1461 |
+
},
|
1462 |
+
"require": {
|
1463 |
+
"php": ">=5.3.0"
|
1464 |
+
},
|
1465 |
+
"type": "library",
|
1466 |
+
"extra": {
|
1467 |
+
"branch-alias": {
|
1468 |
+
"dev-master": "1.1.x-dev"
|
1469 |
+
}
|
1470 |
+
},
|
1471 |
+
"autoload": {
|
1472 |
+
"psr-4": {
|
1473 |
+
"Psr\\Log\\": "Psr/Log/"
|
1474 |
+
}
|
1475 |
+
},
|
1476 |
+
"notification-url": "https://packagist.org/downloads/",
|
1477 |
+
"license": [
|
1478 |
+
"MIT"
|
1479 |
+
],
|
1480 |
+
"authors": [
|
1481 |
+
{
|
1482 |
+
"name": "PHP-FIG",
|
1483 |
+
"homepage": "http://www.php-fig.org/"
|
1484 |
+
}
|
1485 |
+
],
|
1486 |
+
"description": "Common interface for logging libraries",
|
1487 |
+
"homepage": "https://github.com/php-fig/log",
|
1488 |
+
"keywords": [
|
1489 |
+
"log",
|
1490 |
+
"psr",
|
1491 |
+
"psr-3"
|
1492 |
+
],
|
1493 |
+
"time": "2019-11-01T11:05:21+00:00"
|
1494 |
+
},
|
1495 |
+
{
|
1496 |
+
"name": "ramsey/array_column",
|
1497 |
+
"version": "1.1.3",
|
1498 |
+
"source": {
|
1499 |
+
"type": "git",
|
1500 |
+
"url": "https://github.com/ramsey/array_column.git",
|
1501 |
+
"reference": "f8e52eb28e67eb50e613b451dd916abcf783c1db"
|
1502 |
+
},
|
1503 |
+
"dist": {
|
1504 |
+
"type": "zip",
|
1505 |
+
"url": "https://api.github.com/repos/ramsey/array_column/zipball/f8e52eb28e67eb50e613b451dd916abcf783c1db",
|
1506 |
+
"reference": "f8e52eb28e67eb50e613b451dd916abcf783c1db",
|
1507 |
+
"shasum": ""
|
1508 |
+
},
|
1509 |
+
"require-dev": {
|
1510 |
+
"jakub-onderka/php-parallel-lint": "0.8.*",
|
1511 |
+
"phpunit/phpunit": "~4.5",
|
1512 |
+
"satooshi/php-coveralls": "0.6.*",
|
1513 |
+
"squizlabs/php_codesniffer": "~2.2"
|
1514 |
+
},
|
1515 |
+
"type": "library",
|
1516 |
+
"autoload": {
|
1517 |
+
"files": [
|
1518 |
+
"src/array_column.php"
|
1519 |
+
]
|
1520 |
+
},
|
1521 |
+
"notification-url": "https://packagist.org/downloads/",
|
1522 |
+
"license": [
|
1523 |
+
"MIT"
|
1524 |
+
],
|
1525 |
+
"authors": [
|
1526 |
+
{
|
1527 |
+
"name": "Ben Ramsey",
|
1528 |
+
"homepage": "http://benramsey.com"
|
1529 |
+
}
|
1530 |
+
],
|
1531 |
+
"description": "Provides functionality for array_column() to projects using PHP earlier than version 5.5.",
|
1532 |
+
"homepage": "https://github.com/ramsey/array_column",
|
1533 |
+
"keywords": [
|
1534 |
+
"array",
|
1535 |
+
"array_column",
|
1536 |
+
"column"
|
1537 |
+
],
|
1538 |
+
"abandoned": true,
|
1539 |
+
"time": "2015-03-20T22:07:39+00:00"
|
1540 |
+
},
|
1541 |
+
{
|
1542 |
+
"name": "rmccue/requests",
|
1543 |
+
"version": "v1.7.0",
|
1544 |
+
"source": {
|
1545 |
+
"type": "git",
|
1546 |
+
"url": "https://github.com/rmccue/Requests.git",
|
1547 |
+
"reference": "87932f52ffad70504d93f04f15690cf16a089546"
|
1548 |
+
},
|
1549 |
+
"dist": {
|
1550 |
+
"type": "zip",
|
1551 |
+
"url": "https://api.github.com/repos/rmccue/Requests/zipball/87932f52ffad70504d93f04f15690cf16a089546",
|
1552 |
+
"reference": "87932f52ffad70504d93f04f15690cf16a089546",
|
1553 |
+
"shasum": ""
|
1554 |
+
},
|
1555 |
+
"require": {
|
1556 |
+
"php": ">=5.2"
|
1557 |
+
},
|
1558 |
+
"require-dev": {
|
1559 |
+
"requests/test-server": "dev-master"
|
1560 |
+
},
|
1561 |
+
"type": "library",
|
1562 |
+
"autoload": {
|
1563 |
+
"psr-0": {
|
1564 |
+
"Requests": "library/"
|
1565 |
+
}
|
1566 |
+
},
|
1567 |
+
"notification-url": "https://packagist.org/downloads/",
|
1568 |
+
"license": [
|
1569 |
+
"ISC"
|
1570 |
+
],
|
1571 |
+
"authors": [
|
1572 |
+
{
|
1573 |
+
"name": "Ryan McCue",
|
1574 |
+
"homepage": "http://ryanmccue.info"
|
1575 |
+
}
|
1576 |
+
],
|
1577 |
+
"description": "A HTTP library written in PHP, for human beings.",
|
1578 |
+
"homepage": "http://github.com/rmccue/Requests",
|
1579 |
+
"keywords": [
|
1580 |
+
"curl",
|
1581 |
+
"fsockopen",
|
1582 |
+
"http",
|
1583 |
+
"idna",
|
1584 |
+
"ipv6",
|
1585 |
+
"iri",
|
1586 |
+
"sockets"
|
1587 |
+
],
|
1588 |
+
"time": "2016-10-13T00:11:37+00:00"
|
1589 |
+
},
|
1590 |
+
{
|
1591 |
+
"name": "sebastian/code-unit-reverse-lookup",
|
1592 |
+
"version": "1.0.1",
|
1593 |
+
"source": {
|
1594 |
+
"type": "git",
|
1595 |
+
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
|
1596 |
+
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
|
1597 |
+
},
|
1598 |
+
"dist": {
|
1599 |
+
"type": "zip",
|
1600 |
+
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
|
1601 |
+
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
|
1602 |
+
"shasum": ""
|
1603 |
+
},
|
1604 |
+
"require": {
|
1605 |
+
"php": "^5.6 || ^7.0"
|
1606 |
+
},
|
1607 |
+
"require-dev": {
|
1608 |
+
"phpunit/phpunit": "^5.7 || ^6.0"
|
1609 |
+
},
|
1610 |
+
"type": "library",
|
1611 |
+
"extra": {
|
1612 |
+
"branch-alias": {
|
1613 |
+
"dev-master": "1.0.x-dev"
|
1614 |
+
}
|
1615 |
+
},
|
1616 |
+
"autoload": {
|
1617 |
+
"classmap": [
|
1618 |
+
"src/"
|
1619 |
+
]
|
1620 |
+
},
|
1621 |
+
"notification-url": "https://packagist.org/downloads/",
|
1622 |
+
"license": [
|
1623 |
+
"BSD-3-Clause"
|
1624 |
+
],
|
1625 |
+
"authors": [
|
1626 |
+
{
|
1627 |
+
"name": "Sebastian Bergmann",
|
1628 |
+
"email": "sebastian@phpunit.de"
|
1629 |
+
}
|
1630 |
+
],
|
1631 |
+
"description": "Looks up which function or method a line of code belongs to",
|
1632 |
+
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
|
1633 |
+
"time": "2017-03-04T06:30:41+00:00"
|
1634 |
+
},
|
1635 |
+
{
|
1636 |
+
"name": "sebastian/comparator",
|
1637 |
+
"version": "1.2.4",
|
1638 |
+
"source": {
|
1639 |
+
"type": "git",
|
1640 |
+
"url": "https://github.com/sebastianbergmann/comparator.git",
|
1641 |
+
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
|
1642 |
+
},
|
1643 |
+
"dist": {
|
1644 |
+
"type": "zip",
|
1645 |
+
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
|
1646 |
+
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
|
1647 |
+
"shasum": ""
|
1648 |
+
},
|
1649 |
+
"require": {
|
1650 |
+
"php": ">=5.3.3",
|
1651 |
+
"sebastian/diff": "~1.2",
|
1652 |
+
"sebastian/exporter": "~1.2 || ~2.0"
|
1653 |
+
},
|
1654 |
+
"require-dev": {
|
1655 |
+
"phpunit/phpunit": "~4.4"
|
1656 |
+
},
|
1657 |
+
"type": "library",
|
1658 |
+
"extra": {
|
1659 |
+
"branch-alias": {
|
1660 |
+
"dev-master": "1.2.x-dev"
|
1661 |
+
}
|
1662 |
+
},
|
1663 |
+
"autoload": {
|
1664 |
+
"classmap": [
|
1665 |
+
"src/"
|
1666 |
+
]
|
1667 |
+
},
|
1668 |
+
"notification-url": "https://packagist.org/downloads/",
|
1669 |
+
"license": [
|
1670 |
+
"BSD-3-Clause"
|
1671 |
+
],
|
1672 |
+
"authors": [
|
1673 |
+
{
|
1674 |
+
"name": "Jeff Welch",
|
1675 |
+
"email": "whatthejeff@gmail.com"
|
1676 |
+
},
|
1677 |
+
{
|
1678 |
+
"name": "Volker Dusch",
|
1679 |
+
"email": "github@wallbash.com"
|
1680 |
+
},
|
1681 |
+
{
|
1682 |
+
"name": "Bernhard Schussek",
|
1683 |
+
"email": "bschussek@2bepublished.at"
|
1684 |
+
},
|
1685 |
+
{
|
1686 |
+
"name": "Sebastian Bergmann",
|
1687 |
+
"email": "sebastian@phpunit.de"
|
1688 |
+
}
|
1689 |
+
],
|
1690 |
+
"description": "Provides the functionality to compare PHP values for equality",
|
1691 |
+
"homepage": "http://www.github.com/sebastianbergmann/comparator",
|
1692 |
+
"keywords": [
|
1693 |
+
"comparator",
|
1694 |
+
"compare",
|
1695 |
+
"equality"
|
1696 |
+
],
|
1697 |
+
"time": "2017-01-29T09:50:25+00:00"
|
1698 |
+
},
|
1699 |
+
{
|
1700 |
+
"name": "sebastian/diff",
|
1701 |
+
"version": "1.4.3",
|
1702 |
+
"source": {
|
1703 |
+
"type": "git",
|
1704 |
+
"url": "https://github.com/sebastianbergmann/diff.git",
|
1705 |
+
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
|
1706 |
+
},
|
1707 |
+
"dist": {
|
1708 |
+
"type": "zip",
|
1709 |
+
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
|
1710 |
+
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
|
1711 |
+
"shasum": ""
|
1712 |
+
},
|
1713 |
+
"require": {
|
1714 |
+
"php": "^5.3.3 || ^7.0"
|
1715 |
+
},
|
1716 |
+
"require-dev": {
|
1717 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
|
1718 |
+
},
|
1719 |
+
"type": "library",
|
1720 |
+
"extra": {
|
1721 |
+
"branch-alias": {
|
1722 |
+
"dev-master": "1.4-dev"
|
1723 |
+
}
|
1724 |
+
},
|
1725 |
+
"autoload": {
|
1726 |
+
"classmap": [
|
1727 |
+
"src/"
|
1728 |
+
]
|
1729 |
+
},
|
1730 |
+
"notification-url": "https://packagist.org/downloads/",
|
1731 |
+
"license": [
|
1732 |
+
"BSD-3-Clause"
|
1733 |
+
],
|
1734 |
+
"authors": [
|
1735 |
+
{
|
1736 |
+
"name": "Kore Nordmann",
|
1737 |
+
"email": "mail@kore-nordmann.de"
|
1738 |
+
},
|
1739 |
+
{
|
1740 |
+
"name": "Sebastian Bergmann",
|
1741 |
+
"email": "sebastian@phpunit.de"
|
1742 |
+
}
|
1743 |
+
],
|
1744 |
+
"description": "Diff implementation",
|
1745 |
+
"homepage": "https://github.com/sebastianbergmann/diff",
|
1746 |
+
"keywords": [
|
1747 |
+
"diff"
|
1748 |
+
],
|
1749 |
+
"time": "2017-05-22T07:24:03+00:00"
|
1750 |
+
},
|
1751 |
+
{
|
1752 |
+
"name": "sebastian/environment",
|
1753 |
+
"version": "2.0.0",
|
1754 |
+
"source": {
|
1755 |
+
"type": "git",
|
1756 |
+
"url": "https://github.com/sebastianbergmann/environment.git",
|
1757 |
+
"reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
|
1758 |
+
},
|
1759 |
+
"dist": {
|
1760 |
+
"type": "zip",
|
1761 |
+
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
|
1762 |
+
"reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
|
1763 |
+
"shasum": ""
|
1764 |
+
},
|
1765 |
+
"require": {
|
1766 |
+
"php": "^5.6 || ^7.0"
|
1767 |
+
},
|
1768 |
+
"require-dev": {
|
1769 |
+
"phpunit/phpunit": "^5.0"
|
1770 |
+
},
|
1771 |
+
"type": "library",
|
1772 |
+
"extra": {
|
1773 |
+
"branch-alias": {
|
1774 |
+
"dev-master": "2.0.x-dev"
|
1775 |
+
}
|
1776 |
+
},
|
1777 |
+
"autoload": {
|
1778 |
+
"classmap": [
|
1779 |
+
"src/"
|
1780 |
+
]
|
1781 |
+
},
|
1782 |
+
"notification-url": "https://packagist.org/downloads/",
|
1783 |
+
"license": [
|
1784 |
+
"BSD-3-Clause"
|
1785 |
+
],
|
1786 |
+
"authors": [
|
1787 |
+
{
|
1788 |
+
"name": "Sebastian Bergmann",
|
1789 |
+
"email": "sebastian@phpunit.de"
|
1790 |
+
}
|
1791 |
+
],
|
1792 |
+
"description": "Provides functionality to handle HHVM/PHP environments",
|
1793 |
+
"homepage": "http://www.github.com/sebastianbergmann/environment",
|
1794 |
+
"keywords": [
|
1795 |
+
"Xdebug",
|
1796 |
+
"environment",
|
1797 |
+
"hhvm"
|
1798 |
+
],
|
1799 |
+
"time": "2016-11-26T07:53:53+00:00"
|
1800 |
+
},
|
1801 |
+
{
|
1802 |
+
"name": "sebastian/exporter",
|
1803 |
+
"version": "2.0.0",
|
1804 |
+
"source": {
|
1805 |
+
"type": "git",
|
1806 |
+
"url": "https://github.com/sebastianbergmann/exporter.git",
|
1807 |
+
"reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4"
|
1808 |
+
},
|
1809 |
+
"dist": {
|
1810 |
+
"type": "zip",
|
1811 |
+
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
|
1812 |
+
"reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4",
|
1813 |
+
"shasum": ""
|
1814 |
+
},
|
1815 |
+
"require": {
|
1816 |
+
"php": ">=5.3.3",
|
1817 |
+
"sebastian/recursion-context": "~2.0"
|
1818 |
+
},
|
1819 |
+
"require-dev": {
|
1820 |
+
"ext-mbstring": "*",
|
1821 |
+
"phpunit/phpunit": "~4.4"
|
1822 |
+
},
|
1823 |
+
"type": "library",
|
1824 |
+
"extra": {
|
1825 |
+
"branch-alias": {
|
1826 |
+
"dev-master": "2.0.x-dev"
|
1827 |
+
}
|
1828 |
+
},
|
1829 |
+
"autoload": {
|
1830 |
+
"classmap": [
|
1831 |
+
"src/"
|
1832 |
+
]
|
1833 |
+
},
|
1834 |
+
"notification-url": "https://packagist.org/downloads/",
|
1835 |
+
"license": [
|
1836 |
+
"BSD-3-Clause"
|
1837 |
+
],
|
1838 |
+
"authors": [
|
1839 |
+
{
|
1840 |
+
"name": "Jeff Welch",
|
1841 |
+
"email": "whatthejeff@gmail.com"
|
1842 |
+
},
|
1843 |
+
{
|
1844 |
+
"name": "Volker Dusch",
|
1845 |
+
"email": "github@wallbash.com"
|
1846 |
+
},
|
1847 |
+
{
|
1848 |
+
"name": "Bernhard Schussek",
|
1849 |
+
"email": "bschussek@2bepublished.at"
|
1850 |
+
},
|
1851 |
+
{
|
1852 |
+
"name": "Sebastian Bergmann",
|
1853 |
+
"email": "sebastian@phpunit.de"
|
1854 |
+
},
|
1855 |
+
{
|
1856 |
+
"name": "Adam Harvey",
|
1857 |
+
"email": "aharvey@php.net"
|
1858 |
+
}
|
1859 |
+
],
|
1860 |
+
"description": "Provides the functionality to export PHP variables for visualization",
|
1861 |
+
"homepage": "http://www.github.com/sebastianbergmann/exporter",
|
1862 |
+
"keywords": [
|
1863 |
+
"export",
|
1864 |
+
"exporter"
|
1865 |
+
],
|
1866 |
+
"time": "2016-11-19T08:54:04+00:00"
|
1867 |
+
},
|
1868 |
+
{
|
1869 |
+
"name": "sebastian/global-state",
|
1870 |
+
"version": "1.1.1",
|
1871 |
+
"source": {
|
1872 |
+
"type": "git",
|
1873 |
+
"url": "https://github.com/sebastianbergmann/global-state.git",
|
1874 |
+
"reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
|
1875 |
+
},
|
1876 |
+
"dist": {
|
1877 |
+
"type": "zip",
|
1878 |
+
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
|
1879 |
+
"reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
|
1880 |
+
"shasum": ""
|
1881 |
+
},
|
1882 |
+
"require": {
|
1883 |
+
"php": ">=5.3.3"
|
1884 |
+
},
|
1885 |
+
"require-dev": {
|
1886 |
+
"phpunit/phpunit": "~4.2"
|
1887 |
+
},
|
1888 |
+
"suggest": {
|
1889 |
+
"ext-uopz": "*"
|
1890 |
+
},
|
1891 |
+
"type": "library",
|
1892 |
+
"extra": {
|
1893 |
+
"branch-alias": {
|
1894 |
+
"dev-master": "1.0-dev"
|
1895 |
+
}
|
1896 |
+
},
|
1897 |
+
"autoload": {
|
1898 |
+
"classmap": [
|
1899 |
+
"src/"
|
1900 |
+
]
|
1901 |
+
},
|
1902 |
+
"notification-url": "https://packagist.org/downloads/",
|
1903 |
+
"license": [
|
1904 |
+
"BSD-3-Clause"
|
1905 |
+
],
|
1906 |
+
"authors": [
|
1907 |
+
{
|
1908 |
+
"name": "Sebastian Bergmann",
|
1909 |
+
"email": "sebastian@phpunit.de"
|
1910 |
+
}
|
1911 |
+
],
|
1912 |
+
"description": "Snapshotting of global state",
|
1913 |
+
"homepage": "http://www.github.com/sebastianbergmann/global-state",
|
1914 |
+
"keywords": [
|
1915 |
+
"global state"
|
1916 |
+
],
|
1917 |
+
"time": "2015-10-12T03:26:01+00:00"
|
1918 |
+
},
|
1919 |
+
{
|
1920 |
+
"name": "sebastian/object-enumerator",
|
1921 |
+
"version": "2.0.1",
|
1922 |
+
"source": {
|
1923 |
+
"type": "git",
|
1924 |
+
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
|
1925 |
+
"reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7"
|
1926 |
+
},
|
1927 |
+
"dist": {
|
1928 |
+
"type": "zip",
|
1929 |
+
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7",
|
1930 |
+
"reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7",
|
1931 |
+
"shasum": ""
|
1932 |
+
},
|
1933 |
+
"require": {
|
1934 |
+
"php": ">=5.6",
|
1935 |
+
"sebastian/recursion-context": "~2.0"
|
1936 |
+
},
|
1937 |
+
"require-dev": {
|
1938 |
+
"phpunit/phpunit": "~5"
|
1939 |
+
},
|
1940 |
+
"type": "library",
|
1941 |
+
"extra": {
|
1942 |
+
"branch-alias": {
|
1943 |
+
"dev-master": "2.0.x-dev"
|
1944 |
+
}
|
1945 |
+
},
|
1946 |
+
"autoload": {
|
1947 |
+
"classmap": [
|
1948 |
+
"src/"
|
1949 |
+
]
|
1950 |
+
},
|
1951 |
+
"notification-url": "https://packagist.org/downloads/",
|
1952 |
+
"license": [
|
1953 |
+
"BSD-3-Clause"
|
1954 |
+
],
|
1955 |
+
"authors": [
|
1956 |
+
{
|
1957 |
+
"name": "Sebastian Bergmann",
|
1958 |
+
"email": "sebastian@phpunit.de"
|
1959 |
+
}
|
1960 |
+
],
|
1961 |
+
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
|
1962 |
+
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
|
1963 |
+
"time": "2017-02-18T15:18:39+00:00"
|
1964 |
+
},
|
1965 |
+
{
|
1966 |
+
"name": "sebastian/recursion-context",
|
1967 |
+
"version": "2.0.0",
|
1968 |
+
"source": {
|
1969 |
+
"type": "git",
|
1970 |
+
"url": "https://github.com/sebastianbergmann/recursion-context.git",
|
1971 |
+
"reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a"
|
1972 |
+
},
|
1973 |
+
"dist": {
|
1974 |
+
"type": "zip",
|
1975 |
+
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a",
|
1976 |
+
"reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a",
|
1977 |
+
"shasum": ""
|
1978 |
+
},
|
1979 |
+
"require": {
|
1980 |
+
"php": ">=5.3.3"
|
1981 |
+
},
|
1982 |
+
"require-dev": {
|
1983 |
+
"phpunit/phpunit": "~4.4"
|
1984 |
+
},
|
1985 |
+
"type": "library",
|
1986 |
+
"extra": {
|
1987 |
+
"branch-alias": {
|
1988 |
+
"dev-master": "2.0.x-dev"
|
1989 |
+
}
|
1990 |
+
},
|
1991 |
+
"autoload": {
|
1992 |
+
"classmap": [
|
1993 |
+
"src/"
|
1994 |
+
]
|
1995 |
+
},
|
1996 |
+
"notification-url": "https://packagist.org/downloads/",
|
1997 |
+
"license": [
|
1998 |
+
"BSD-3-Clause"
|
1999 |
+
],
|
2000 |
+
"authors": [
|
2001 |
+
{
|
2002 |
+
"name": "Jeff Welch",
|
2003 |
+
"email": "whatthejeff@gmail.com"
|
2004 |
+
},
|
2005 |
+
{
|
2006 |
+
"name": "Sebastian Bergmann",
|
2007 |
+
"email": "sebastian@phpunit.de"
|
2008 |
+
},
|
2009 |
+
{
|
2010 |
+
"name": "Adam Harvey",
|
2011 |
+
"email": "aharvey@php.net"
|
2012 |
+
}
|
2013 |
+
],
|
2014 |
+
"description": "Provides functionality to recursively process PHP variables",
|
2015 |
+
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
|
2016 |
+
"time": "2016-11-19T07:33:16+00:00"
|
2017 |
+
},
|
2018 |
+
{
|
2019 |
+
"name": "sebastian/resource-operations",
|
2020 |
+
"version": "1.0.0",
|
2021 |
+
"source": {
|
2022 |
+
"type": "git",
|
2023 |
+
"url": "https://github.com/sebastianbergmann/resource-operations.git",
|
2024 |
+
"reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
|
2025 |
+
},
|
2026 |
+
"dist": {
|
2027 |
+
"type": "zip",
|
2028 |
+
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
|
2029 |
+
"reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
|
2030 |
+
"shasum": ""
|
2031 |
+
},
|
2032 |
+
"require": {
|
2033 |
+
"php": ">=5.6.0"
|
2034 |
+
},
|
2035 |
+
"type": "library",
|
2036 |
+
"extra": {
|
2037 |
+
"branch-alias": {
|
2038 |
+
"dev-master": "1.0.x-dev"
|
2039 |
+
}
|
2040 |
+
},
|
2041 |
+
"autoload": {
|
2042 |
+
"classmap": [
|
2043 |
+
"src/"
|
2044 |
+
]
|
2045 |
+
},
|
2046 |
+
"notification-url": "https://packagist.org/downloads/",
|
2047 |
+
"license": [
|
2048 |
+
"BSD-3-Clause"
|
2049 |
+
],
|
2050 |
+
"authors": [
|
2051 |
+
{
|
2052 |
+
"name": "Sebastian Bergmann",
|
2053 |
+
"email": "sebastian@phpunit.de"
|
2054 |
+
}
|
2055 |
+
],
|
2056 |
+
"description": "Provides a list of PHP built-in functions that operate on resources",
|
2057 |
+
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
|
2058 |
+
"time": "2015-07-28T20:34:47+00:00"
|
2059 |
+
},
|
2060 |
+
{
|
2061 |
+
"name": "sebastian/version",
|
2062 |
+
"version": "2.0.1",
|
2063 |
+
"source": {
|
2064 |
+
"type": "git",
|
2065 |
+
"url": "https://github.com/sebastianbergmann/version.git",
|
2066 |
+
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
|
2067 |
+
},
|
2068 |
+
"dist": {
|
2069 |
+
"type": "zip",
|
2070 |
+
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
|
2071 |
+
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
|
2072 |
+
"shasum": ""
|
2073 |
+
},
|
2074 |
+
"require": {
|
2075 |
+
"php": ">=5.6"
|
2076 |
+
},
|
2077 |
+
"type": "library",
|
2078 |
+
"extra": {
|
2079 |
+
"branch-alias": {
|
2080 |
+
"dev-master": "2.0.x-dev"
|
2081 |
+
}
|
2082 |
+
},
|
2083 |
+
"autoload": {
|
2084 |
+
"classmap": [
|
2085 |
+
"src/"
|
2086 |
+
]
|
2087 |
+
},
|
2088 |
+
"notification-url": "https://packagist.org/downloads/",
|
2089 |
+
"license": [
|
2090 |
+
"BSD-3-Clause"
|
2091 |
+
],
|
2092 |
+
"authors": [
|
2093 |
+
{
|
2094 |
+
"name": "Sebastian Bergmann",
|
2095 |
+
"email": "sebastian@phpunit.de",
|
2096 |
+
"role": "lead"
|
2097 |
+
}
|
2098 |
+
],
|
2099 |
+
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
|
2100 |
+
"homepage": "https://github.com/sebastianbergmann/version",
|
2101 |
+
"time": "2016-10-03T07:35:21+00:00"
|
2102 |
+
},
|
2103 |
+
{
|
2104 |
+
"name": "seld/jsonlint",
|
2105 |
+
"version": "1.7.2",
|
2106 |
+
"source": {
|
2107 |
+
"type": "git",
|
2108 |
+
"url": "https://github.com/Seldaek/jsonlint.git",
|
2109 |
+
"reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19"
|
2110 |
+
},
|
2111 |
+
"dist": {
|
2112 |
+
"type": "zip",
|
2113 |
+
"url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19",
|
2114 |
+
"reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19",
|
2115 |
+
"shasum": ""
|
2116 |
+
},
|
2117 |
+
"require": {
|
2118 |
+
"php": "^5.3 || ^7.0"
|
2119 |
+
},
|
2120 |
+
"require-dev": {
|
2121 |
+
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
|
2122 |
+
},
|
2123 |
+
"bin": [
|
2124 |
+
"bin/jsonlint"
|
2125 |
+
],
|
2126 |
+
"type": "library",
|
2127 |
+
"autoload": {
|
2128 |
+
"psr-4": {
|
2129 |
+
"Seld\\JsonLint\\": "src/Seld/JsonLint/"
|
2130 |
+
}
|
2131 |
+
},
|
2132 |
+
"notification-url": "https://packagist.org/downloads/",
|
2133 |
+
"license": [
|
2134 |
+
"MIT"
|
2135 |
+
],
|
2136 |
+
"authors": [
|
2137 |
+
{
|
2138 |
+
"name": "Jordi Boggiano",
|
2139 |
+
"email": "j.boggiano@seld.be",
|
2140 |
+
"homepage": "http://seld.be"
|
2141 |
+
}
|
2142 |
+
],
|
2143 |
+
"description": "JSON Linter",
|
2144 |
+
"keywords": [
|
2145 |
+
"json",
|
2146 |
+
"linter",
|
2147 |
+
"parser",
|
2148 |
+
"validator"
|
2149 |
+
],
|
2150 |
+
"time": "2019-10-24T14:27:39+00:00"
|
2151 |
+
},
|
2152 |
+
{
|
2153 |
+
"name": "seld/phar-utils",
|
2154 |
+
"version": "1.1.0",
|
2155 |
+
"source": {
|
2156 |
+
"type": "git",
|
2157 |
+
"url": "https://github.com/Seldaek/phar-utils.git",
|
2158 |
+
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0"
|
2159 |
+
},
|
2160 |
+
"dist": {
|
2161 |
+
"type": "zip",
|
2162 |
+
"url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8800503d56b9867d43d9c303b9cbcc26016e82f0",
|
2163 |
+
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0",
|
2164 |
+
"shasum": ""
|
2165 |
+
},
|
2166 |
+
"require": {
|
2167 |
+
"php": ">=5.3"
|
2168 |
+
},
|
2169 |
+
"type": "library",
|
2170 |
+
"extra": {
|
2171 |
+
"branch-alias": {
|
2172 |
+
"dev-master": "1.x-dev"
|
2173 |
+
}
|
2174 |
+
},
|
2175 |
+
"autoload": {
|
2176 |
+
"psr-4": {
|
2177 |
+
"Seld\\PharUtils\\": "src/"
|
2178 |
+
}
|
2179 |
+
},
|
2180 |
+
"notification-url": "https://packagist.org/downloads/",
|
2181 |
+
"license": [
|
2182 |
+
"MIT"
|
2183 |
+
],
|
2184 |
+
"authors": [
|
2185 |
+
{
|
2186 |
+
"name": "Jordi Boggiano",
|
2187 |
+
"email": "j.boggiano@seld.be"
|
2188 |
+
}
|
2189 |
+
],
|
2190 |
+
"description": "PHAR file format utilities, for when PHP phars you up",
|
2191 |
+
"keywords": [
|
2192 |
+
"phar"
|
2193 |
+
],
|
2194 |
+
"time": "2020-02-14T15:25:33+00:00"
|
2195 |
+
},
|
2196 |
+
{
|
2197 |
+
"name": "squizlabs/php_codesniffer",
|
2198 |
+
"version": "3.5.4",
|
2199 |
+
"source": {
|
2200 |
+
"type": "git",
|
2201 |
+
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
2202 |
+
"reference": "dceec07328401de6211037abbb18bda423677e26"
|
2203 |
+
},
|
2204 |
+
"dist": {
|
2205 |
+
"type": "zip",
|
2206 |
+
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dceec07328401de6211037abbb18bda423677e26",
|
2207 |
+
"reference": "dceec07328401de6211037abbb18bda423677e26",
|
2208 |
+
"shasum": ""
|
2209 |
+
},
|
2210 |
+
"require": {
|
2211 |
+
"ext-simplexml": "*",
|
2212 |
+
"ext-tokenizer": "*",
|
2213 |
+
"ext-xmlwriter": "*",
|
2214 |
+
"php": ">=5.4.0"
|
2215 |
+
},
|
2216 |
+
"require-dev": {
|
2217 |
+
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
|
2218 |
+
},
|
2219 |
+
"bin": [
|
2220 |
+
"bin/phpcs",
|
2221 |
+
"bin/phpcbf"
|
2222 |
+
],
|
2223 |
+
"type": "library",
|
2224 |
+
"extra": {
|
2225 |
+
"branch-alias": {
|
2226 |
+
"dev-master": "3.x-dev"
|
2227 |
+
}
|
2228 |
+
},
|
2229 |
+
"notification-url": "https://packagist.org/downloads/",
|
2230 |
+
"license": [
|
2231 |
+
"BSD-3-Clause"
|
2232 |
+
],
|
2233 |
+
"authors": [
|
2234 |
+
{
|
2235 |
+
"name": "Greg Sherwood",
|
2236 |
+
"role": "lead"
|
2237 |
+
}
|
2238 |
+
],
|
2239 |
+
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
|
2240 |
+
"homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
|
2241 |
+
"keywords": [
|
2242 |
+
"phpcs",
|
2243 |
+
"standards"
|
2244 |
+
],
|
2245 |
+
"time": "2020-01-30T22:20:29+00:00"
|
2246 |
+
},
|
2247 |
+
{
|
2248 |
+
"name": "symfony/config",
|
2249 |
+
"version": "v3.4.37",
|
2250 |
+
"source": {
|
2251 |
+
"type": "git",
|
2252 |
+
"url": "https://github.com/symfony/config.git",
|
2253 |
+
"reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace"
|
2254 |
+
},
|
2255 |
+
"dist": {
|
2256 |
+
"type": "zip",
|
2257 |
+
"url": "https://api.github.com/repos/symfony/config/zipball/6abc18b2a97f63508d23929bbb2ae65aaa07bace",
|
2258 |
+
"reference": "6abc18b2a97f63508d23929bbb2ae65aaa07bace",
|
2259 |
+
"shasum": ""
|
2260 |
+
},
|
2261 |
+
"require": {
|
2262 |
+
"php": "^5.5.9|>=7.0.8",
|
2263 |
+
"symfony/filesystem": "~2.8|~3.0|~4.0",
|
2264 |
+
"symfony/polyfill-ctype": "~1.8"
|
2265 |
+
},
|
2266 |
+
"conflict": {
|
2267 |
+
"symfony/dependency-injection": "<3.3",
|
2268 |
+
"symfony/finder": "<3.3"
|
2269 |
+
},
|
2270 |
+
"require-dev": {
|
2271 |
+
"symfony/dependency-injection": "~3.3|~4.0",
|
2272 |
+
"symfony/event-dispatcher": "~3.3|~4.0",
|
2273 |
+
"symfony/finder": "~3.3|~4.0",
|
2274 |
+
"symfony/yaml": "~3.0|~4.0"
|
2275 |
+
},
|
2276 |
+
"suggest": {
|
2277 |
+
"symfony/yaml": "To use the yaml reference dumper"
|
2278 |
+
},
|
2279 |
+
"type": "library",
|
2280 |
+
"extra": {
|
2281 |
+
"branch-alias": {
|
2282 |
+
"dev-master": "3.4-dev"
|
2283 |
+
}
|
2284 |
+
},
|
2285 |
+
"autoload": {
|
2286 |
+
"psr-4": {
|
2287 |
+
"Symfony\\Component\\Config\\": ""
|
2288 |
+
},
|
2289 |
+
"exclude-from-classmap": [
|
2290 |
+
"/Tests/"
|
2291 |
+
]
|
2292 |
+
},
|
2293 |
+
"notification-url": "https://packagist.org/downloads/",
|
2294 |
+
"license": [
|
2295 |
+
"MIT"
|
2296 |
+
],
|
2297 |
+
"authors": [
|
2298 |
+
{
|
2299 |
+
"name": "Fabien Potencier",
|
2300 |
+
"email": "fabien@symfony.com"
|
2301 |
+
},
|
2302 |
+
{
|
2303 |
+
"name": "Symfony Community",
|
2304 |
+
"homepage": "https://symfony.com/contributors"
|
2305 |
+
}
|
2306 |
+
],
|
2307 |
+
"description": "Symfony Config Component",
|
2308 |
+
"homepage": "https://symfony.com",
|
2309 |
+
"time": "2020-01-04T12:05:51+00:00"
|
2310 |
+
},
|
2311 |
+
{
|
2312 |
+
"name": "symfony/console",
|
2313 |
+
"version": "v3.4.37",
|
2314 |
+
"source": {
|
2315 |
+
"type": "git",
|
2316 |
+
"url": "https://github.com/symfony/console.git",
|
2317 |
+
"reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12"
|
2318 |
+
},
|
2319 |
+
"dist": {
|
2320 |
+
"type": "zip",
|
2321 |
+
"url": "https://api.github.com/repos/symfony/console/zipball/7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12",
|
2322 |
+
"reference": "7c5bdd346f9d90a2d22d4e1fe61e02dc19b98f12",
|
2323 |
+
"shasum": ""
|
2324 |
+
},
|
2325 |
+
"require": {
|
2326 |
+
"php": "^5.5.9|>=7.0.8",
|
2327 |
+
"symfony/debug": "~2.8|~3.0|~4.0",
|
2328 |
+
"symfony/polyfill-mbstring": "~1.0"
|
2329 |
+
},
|
2330 |
+
"conflict": {
|
2331 |
+
"symfony/dependency-injection": "<3.4",
|
2332 |
+
"symfony/process": "<3.3"
|
2333 |
+
},
|
2334 |
+
"provide": {
|
2335 |
+
"psr/log-implementation": "1.0"
|
2336 |
+
},
|
2337 |
+
"require-dev": {
|
2338 |
+
"psr/log": "~1.0",
|
2339 |
+
"symfony/config": "~3.3|~4.0",
|
2340 |
+
"symfony/dependency-injection": "~3.4|~4.0",
|
2341 |
+
"symfony/event-dispatcher": "~2.8|~3.0|~4.0",
|
2342 |
+
"symfony/lock": "~3.4|~4.0",
|
2343 |
+
"symfony/process": "~3.3|~4.0"
|
2344 |
+
},
|
2345 |
+
"suggest": {
|
2346 |
+
"psr/log": "For using the console logger",
|
2347 |
+
"symfony/event-dispatcher": "",
|
2348 |
+
"symfony/lock": "",
|
2349 |
+
"symfony/process": ""
|
2350 |
+
},
|
2351 |
+
"type": "library",
|
2352 |
+
"extra": {
|
2353 |
+
"branch-alias": {
|
2354 |
+
"dev-master": "3.4-dev"
|
2355 |
+
}
|
2356 |
+
},
|
2357 |
+
"autoload": {
|
2358 |
+
"psr-4": {
|
2359 |
+
"Symfony\\Component\\Console\\": ""
|
2360 |
+
},
|
2361 |
+
"exclude-from-classmap": [
|
2362 |
+
"/Tests/"
|
2363 |
+
]
|
2364 |
+
},
|
2365 |
+
"notification-url": "https://packagist.org/downloads/",
|
2366 |
+
"license": [
|
2367 |
+
"MIT"
|
2368 |
+
],
|
2369 |
+
"authors": [
|
2370 |
+
{
|
2371 |
+
"name": "Fabien Potencier",
|
2372 |
+
"email": "fabien@symfony.com"
|
2373 |
+
},
|
2374 |
+
{
|
2375 |
+
"name": "Symfony Community",
|
2376 |
+
"homepage": "https://symfony.com/contributors"
|
2377 |
+
}
|
2378 |
+
],
|
2379 |
+
"description": "Symfony Console Component",
|
2380 |
+
"homepage": "https://symfony.com",
|
2381 |
+
"time": "2020-01-10T07:52:48+00:00"
|
2382 |
+
},
|
2383 |
+
{
|
2384 |
+
"name": "symfony/debug",
|
2385 |
+
"version": "v3.4.37",
|
2386 |
+
"source": {
|
2387 |
+
"type": "git",
|
2388 |
+
"url": "https://github.com/symfony/debug.git",
|
2389 |
+
"reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8"
|
2390 |
+
},
|
2391 |
+
"dist": {
|
2392 |
+
"type": "zip",
|
2393 |
+
"url": "https://api.github.com/repos/symfony/debug/zipball/70dd18e93bb8bdf3c4db7fde832619fef9828cf8",
|
2394 |
+
"reference": "70dd18e93bb8bdf3c4db7fde832619fef9828cf8",
|
2395 |
+
"shasum": ""
|
2396 |
+
},
|
2397 |
+
"require": {
|
2398 |
+
"php": "^5.5.9|>=7.0.8",
|
2399 |
+
"psr/log": "~1.0"
|
2400 |
+
},
|
2401 |
+
"conflict": {
|
2402 |
+
"symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
|
2403 |
+
},
|
2404 |
+
"require-dev": {
|
2405 |
+
"symfony/http-kernel": "~2.8|~3.0|~4.0"
|
2406 |
+
},
|
2407 |
+
"type": "library",
|
2408 |
+
"extra": {
|
2409 |
+
"branch-alias": {
|
2410 |
+
"dev-master": "3.4-dev"
|
2411 |
+
}
|
2412 |
+
},
|
2413 |
+
"autoload": {
|
2414 |
+
"psr-4": {
|
2415 |
+
"Symfony\\Component\\Debug\\": ""
|
2416 |
+
},
|
2417 |
+
"exclude-from-classmap": [
|
2418 |
+
"/Tests/"
|
2419 |
+
]
|
2420 |
+
},
|
2421 |
+
"notification-url": "https://packagist.org/downloads/",
|
2422 |
+
"license": [
|
2423 |
+
"MIT"
|
2424 |
+
],
|
2425 |
+
"authors": [
|
2426 |
+
{
|
2427 |
+
"name": "Fabien Potencier",
|
2428 |
+
"email": "fabien@symfony.com"
|
2429 |
+
},
|
2430 |
+
{
|
2431 |
+
"name": "Symfony Community",
|
2432 |
+
"homepage": "https://symfony.com/contributors"
|
2433 |
+
}
|
2434 |
+
],
|
2435 |
+
"description": "Symfony Debug Component",
|
2436 |
+
"homepage": "https://symfony.com",
|
2437 |
+
"time": "2020-01-08T16:36:15+00:00"
|
2438 |
+
},
|
2439 |
+
{
|
2440 |
+
"name": "symfony/dependency-injection",
|
2441 |
+
"version": "v3.4.37",
|
2442 |
+
"source": {
|
2443 |
+
"type": "git",
|
2444 |
+
"url": "https://github.com/symfony/dependency-injection.git",
|
2445 |
+
"reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc"
|
2446 |
+
},
|
2447 |
+
"dist": {
|
2448 |
+
"type": "zip",
|
2449 |
+
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/22000f10c9e1cfef051e8b4de46815b41a0223fc",
|
2450 |
+
"reference": "22000f10c9e1cfef051e8b4de46815b41a0223fc",
|
2451 |
+
"shasum": ""
|
2452 |
+
},
|
2453 |
+
"require": {
|
2454 |
+
"php": "^5.5.9|>=7.0.8",
|
2455 |
+
"psr/container": "^1.0"
|
2456 |
+
},
|
2457 |
+
"conflict": {
|
2458 |
+
"symfony/config": "<3.3.7",
|
2459 |
+
"symfony/finder": "<3.3",
|
2460 |
+
"symfony/proxy-manager-bridge": "<3.4",
|
2461 |
+
"symfony/yaml": "<3.4"
|
2462 |
+
},
|
2463 |
+
"provide": {
|
2464 |
+
"psr/container-implementation": "1.0"
|
2465 |
+
},
|
2466 |
+
"require-dev": {
|
2467 |
+
"symfony/config": "~3.3|~4.0",
|
2468 |
+
"symfony/expression-language": "~2.8|~3.0|~4.0",
|
2469 |
+
"symfony/yaml": "~3.4|~4.0"
|
2470 |
+
},
|
2471 |
+
"suggest": {
|
2472 |
+
"symfony/config": "",
|
2473 |
+
"symfony/expression-language": "For using expressions in service container configuration",
|
2474 |
+
"symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
|
2475 |
+
"symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
|
2476 |
+
"symfony/yaml": ""
|
2477 |
+
},
|
2478 |
+
"type": "library",
|
2479 |
+
"extra": {
|
2480 |
+
"branch-alias": {
|
2481 |
+
"dev-master": "3.4-dev"
|
2482 |
+
}
|
2483 |
+
},
|
2484 |
+
"autoload": {
|
2485 |
+
"psr-4": {
|
2486 |
+
"Symfony\\Component\\DependencyInjection\\": ""
|
2487 |
+
},
|
2488 |
+
"exclude-from-classmap": [
|
2489 |
+
"/Tests/"
|
2490 |
+
]
|
2491 |
+
},
|
2492 |
+
"notification-url": "https://packagist.org/downloads/",
|
2493 |
+
"license": [
|
2494 |
+
"MIT"
|
2495 |
+
],
|
2496 |
+
"authors": [
|
2497 |
+
{
|
2498 |
+
"name": "Fabien Potencier",
|
2499 |
+
"email": "fabien@symfony.com"
|
2500 |
+
},
|
2501 |
+
{
|
2502 |
+
"name": "Symfony Community",
|
2503 |
+
"homepage": "https://symfony.com/contributors"
|
2504 |
+
}
|
2505 |
+
],
|
2506 |
+
"description": "Symfony DependencyInjection Component",
|
2507 |
+
"homepage": "https://symfony.com",
|
2508 |
+
"time": "2020-01-08T11:20:51+00:00"
|
2509 |
+
},
|
2510 |
+
{
|
2511 |
+
"name": "symfony/event-dispatcher",
|
2512 |
+
"version": "v3.4.37",
|
2513 |
+
"source": {
|
2514 |
+
"type": "git",
|
2515 |
+
"url": "https://github.com/symfony/event-dispatcher.git",
|
2516 |
+
"reference": "79ede8f2836e5ec910ebb325bde40f987244baa8"
|
2517 |
+
},
|
2518 |
+
"dist": {
|
2519 |
+
"type": "zip",
|
2520 |
+
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/79ede8f2836e5ec910ebb325bde40f987244baa8",
|
2521 |
+
"reference": "79ede8f2836e5ec910ebb325bde40f987244baa8",
|
2522 |
+
"shasum": ""
|
2523 |
+
},
|
2524 |
+
"require": {
|
2525 |
+
"php": "^5.5.9|>=7.0.8"
|
2526 |
+
},
|
2527 |
+
"conflict": {
|
2528 |
+
"symfony/dependency-injection": "<3.3"
|
2529 |
+
},
|
2530 |
+
"require-dev": {
|
2531 |
+
"psr/log": "~1.0",
|
2532 |
+
"symfony/config": "~2.8|~3.0|~4.0",
|
2533 |
+
"symfony/dependency-injection": "~3.3|~4.0",
|
2534 |
+
"symfony/expression-language": "~2.8|~3.0|~4.0",
|
2535 |
+
"symfony/stopwatch": "~2.8|~3.0|~4.0"
|
2536 |
+
},
|
2537 |
+
"suggest": {
|
2538 |
+
"symfony/dependency-injection": "",
|
2539 |
+
"symfony/http-kernel": ""
|
2540 |
+
},
|
2541 |
+
"type": "library",
|
2542 |
+
"extra": {
|
2543 |
+
"branch-alias": {
|
2544 |
+
"dev-master": "3.4-dev"
|
2545 |
+
}
|
2546 |
+
},
|
2547 |
+
"autoload": {
|
2548 |
+
"psr-4": {
|
2549 |
+
"Symfony\\Component\\EventDispatcher\\": ""
|
2550 |
+
},
|
2551 |
+
"exclude-from-classmap": [
|
2552 |
+
"/Tests/"
|
2553 |
+
]
|
2554 |
+
},
|
2555 |
+
"notification-url": "https://packagist.org/downloads/",
|
2556 |
+
"license": [
|
2557 |
+
"MIT"
|
2558 |
+
],
|
2559 |
+
"authors": [
|
2560 |
+
{
|
2561 |
+
"name": "Fabien Potencier",
|
2562 |
+
"email": "fabien@symfony.com"
|
2563 |
+
},
|
2564 |
+
{
|
2565 |
+
"name": "Symfony Community",
|
2566 |
+
"homepage": "https://symfony.com/contributors"
|
2567 |
+
}
|
2568 |
+
],
|
2569 |
+
"description": "Symfony EventDispatcher Component",
|
2570 |
+
"homepage": "https://symfony.com",
|
2571 |
+
"time": "2020-01-04T12:05:51+00:00"
|
2572 |
+
},
|
2573 |
+
{
|
2574 |
+
"name": "symfony/filesystem",
|
2575 |
+
"version": "v3.4.37",
|
2576 |
+
"source": {
|
2577 |
+
"type": "git",
|
2578 |
+
"url": "https://github.com/symfony/filesystem.git",
|
2579 |
+
"reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628"
|
2580 |
+
},
|
2581 |
+
"dist": {
|
2582 |
+
"type": "zip",
|
2583 |
+
"url": "https://api.github.com/repos/symfony/filesystem/zipball/0a0d3b4bda11aa3a0464531c40e681e184e75628",
|
2584 |
+
"reference": "0a0d3b4bda11aa3a0464531c40e681e184e75628",
|
2585 |
+
"shasum": ""
|
2586 |
+
},
|
2587 |
+
"require": {
|
2588 |
+
"php": "^5.5.9|>=7.0.8",
|
2589 |
+
"symfony/polyfill-ctype": "~1.8"
|
2590 |
+
},
|
2591 |
+
"type": "library",
|
2592 |
+
"extra": {
|
2593 |
+
"branch-alias": {
|
2594 |
+
"dev-master": "3.4-dev"
|
2595 |
+
}
|
2596 |
+
},
|
2597 |
+
"autoload": {
|
2598 |
+
"psr-4": {
|
2599 |
+
"Symfony\\Component\\Filesystem\\": ""
|
2600 |
+
},
|
2601 |
+
"exclude-from-classmap": [
|
2602 |
+
"/Tests/"
|
2603 |
+
]
|
2604 |
+
},
|
2605 |
+
"notification-url": "https://packagist.org/downloads/",
|
2606 |
+
"license": [
|
2607 |
+
"MIT"
|
2608 |
+
],
|
2609 |
+
"authors": [
|
2610 |
+
{
|
2611 |
+
"name": "Fabien Potencier",
|
2612 |
+
"email": "fabien@symfony.com"
|
2613 |
+
},
|
2614 |
+
{
|
2615 |
+
"name": "Symfony Community",
|
2616 |
+
"homepage": "https://symfony.com/contributors"
|
2617 |
+
}
|
2618 |
+
],
|
2619 |
+
"description": "Symfony Filesystem Component",
|
2620 |
+
"homepage": "https://symfony.com",
|
2621 |
+
"time": "2020-01-17T08:50:08+00:00"
|
2622 |
+
},
|
2623 |
+
{
|
2624 |
+
"name": "symfony/finder",
|
2625 |
+
"version": "v3.4.37",
|
2626 |
+
"source": {
|
2627 |
+
"type": "git",
|
2628 |
+
"url": "https://github.com/symfony/finder.git",
|
2629 |
+
"reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f"
|
2630 |
+
},
|
2631 |
+
"dist": {
|
2632 |
+
"type": "zip",
|
2633 |
+
"url": "https://api.github.com/repos/symfony/finder/zipball/a90a9d3b9f458a5cdeabfa4090b20c000ca3962f",
|
2634 |
+
"reference": "a90a9d3b9f458a5cdeabfa4090b20c000ca3962f",
|
2635 |
+
"shasum": ""
|
2636 |
+
},
|
2637 |
+
"require": {
|
2638 |
+
"php": "^5.5.9|>=7.0.8"
|
2639 |
+
},
|
2640 |
+
"type": "library",
|
2641 |
+
"extra": {
|
2642 |
+
"branch-alias": {
|
2643 |
+
"dev-master": "3.4-dev"
|
2644 |
+
}
|
2645 |
+
},
|
2646 |
+
"autoload": {
|
2647 |
+
"psr-4": {
|
2648 |
+
"Symfony\\Component\\Finder\\": ""
|
2649 |
+
},
|
2650 |
+
"exclude-from-classmap": [
|
2651 |
+
"/Tests/"
|
2652 |
+
]
|
2653 |
+
},
|
2654 |
+
"notification-url": "https://packagist.org/downloads/",
|
2655 |
+
"license": [
|
2656 |
+
"MIT"
|
2657 |
+
],
|
2658 |
+
"authors": [
|
2659 |
+
{
|
2660 |
+
"name": "Fabien Potencier",
|
2661 |
+
"email": "fabien@symfony.com"
|
2662 |
+
},
|
2663 |
+
{
|
2664 |
+
"name": "Symfony Community",
|
2665 |
+
"homepage": "https://symfony.com/contributors"
|
2666 |
+
}
|
2667 |
+
],
|
2668 |
+
"description": "Symfony Finder Component",
|
2669 |
+
"homepage": "https://symfony.com",
|
2670 |
+
"time": "2020-01-01T11:03:25+00:00"
|
2671 |
+
},
|
2672 |
+
{
|
2673 |
+
"name": "symfony/polyfill-ctype",
|
2674 |
+
"version": "v1.14.0",
|
2675 |
+
"source": {
|
2676 |
+
"type": "git",
|
2677 |
+
"url": "https://github.com/symfony/polyfill-ctype.git",
|
2678 |
+
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
|
2679 |
+
},
|
2680 |
+
"dist": {
|
2681 |
+
"type": "zip",
|
2682 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
|
2683 |
+
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
|
2684 |
+
"shasum": ""
|
2685 |
+
},
|
2686 |
+
"require": {
|
2687 |
+
"php": ">=5.3.3"
|
2688 |
+
},
|
2689 |
+
"suggest": {
|
2690 |
+
"ext-ctype": "For best performance"
|
2691 |
+
},
|
2692 |
+
"type": "library",
|
2693 |
+
"extra": {
|
2694 |
+
"branch-alias": {
|
2695 |
+
"dev-master": "1.14-dev"
|
2696 |
+
}
|
2697 |
+
},
|
2698 |
+
"autoload": {
|
2699 |
+
"psr-4": {
|
2700 |
+
"Symfony\\Polyfill\\Ctype\\": ""
|
2701 |
+
},
|
2702 |
+
"files": [
|
2703 |
+
"bootstrap.php"
|
2704 |
+
]
|
2705 |
+
},
|
2706 |
+
"notification-url": "https://packagist.org/downloads/",
|
2707 |
+
"license": [
|
2708 |
+
"MIT"
|
2709 |
+
],
|
2710 |
+
"authors": [
|
2711 |
+
{
|
2712 |
+
"name": "Gert de Pagter",
|
2713 |
+
"email": "BackEndTea@gmail.com"
|
2714 |
+
},
|
2715 |
+
{
|
2716 |
+
"name": "Symfony Community",
|
2717 |
+
"homepage": "https://symfony.com/contributors"
|
2718 |
+
}
|
2719 |
+
],
|
2720 |
+
"description": "Symfony polyfill for ctype functions",
|
2721 |
+
"homepage": "https://symfony.com",
|
2722 |
+
"keywords": [
|
2723 |
+
"compatibility",
|
2724 |
+
"ctype",
|
2725 |
+
"polyfill",
|
2726 |
+
"portable"
|
2727 |
+
],
|
2728 |
+
"time": "2020-01-13T11:15:53+00:00"
|
2729 |
+
},
|
2730 |
+
{
|
2731 |
+
"name": "symfony/polyfill-mbstring",
|
2732 |
+
"version": "v1.14.0",
|
2733 |
+
"source": {
|
2734 |
+
"type": "git",
|
2735 |
+
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
2736 |
+
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
|
2737 |
+
},
|
2738 |
+
"dist": {
|
2739 |
+
"type": "zip",
|
2740 |
+
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
|
2741 |
+
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
|
2742 |
+
"shasum": ""
|
2743 |
+
},
|
2744 |
+
"require": {
|
2745 |
+
"php": ">=5.3.3"
|
2746 |
+
},
|
2747 |
+
"suggest": {
|
2748 |
+
"ext-mbstring": "For best performance"
|
2749 |
+
},
|
2750 |
+
"type": "library",
|
2751 |
+
"extra": {
|
2752 |
+
"branch-alias": {
|
2753 |
+
"dev-master": "1.14-dev"
|
2754 |
+
}
|
2755 |
+
},
|
2756 |
+
"autoload": {
|
2757 |
+
"psr-4": {
|
2758 |
+
"Symfony\\Polyfill\\Mbstring\\": ""
|
2759 |
+
},
|
2760 |
+
"files": [
|
2761 |
+
"bootstrap.php"
|
2762 |
+
]
|
2763 |
+
},
|
2764 |
+
"notification-url": "https://packagist.org/downloads/",
|
2765 |
+
"license": [
|
2766 |
+
"MIT"
|
2767 |
+
],
|
2768 |
+
"authors": [
|
2769 |
+
{
|
2770 |
+
"name": "Nicolas Grekas",
|
2771 |
+
"email": "p@tchwork.com"
|
2772 |
+
},
|
2773 |
+
{
|
2774 |
+
"name": "Symfony Community",
|
2775 |
+
"homepage": "https://symfony.com/contributors"
|
2776 |
+
}
|
2777 |
+
],
|
2778 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
2779 |
+
"homepage": "https://symfony.com",
|
2780 |
+
"keywords": [
|
2781 |
+
"compatibility",
|
2782 |
+
"mbstring",
|
2783 |
+
"polyfill",
|
2784 |
+
"portable",
|
2785 |
+
"shim"
|
2786 |
+
],
|
2787 |
+
"time": "2020-01-13T11:15:53+00:00"
|
2788 |
+
},
|
2789 |
+
{
|
2790 |
+
"name": "symfony/process",
|
2791 |
+
"version": "v3.4.37",
|
2792 |
+
"source": {
|
2793 |
+
"type": "git",
|
2794 |
+
"url": "https://github.com/symfony/process.git",
|
2795 |
+
"reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a"
|
2796 |
+
},
|
2797 |
+
"dist": {
|
2798 |
+
"type": "zip",
|
2799 |
+
"url": "https://api.github.com/repos/symfony/process/zipball/5b9d2bcffe4678911a4c941c00b7c161252cf09a",
|
2800 |
+
"reference": "5b9d2bcffe4678911a4c941c00b7c161252cf09a",
|
2801 |
+
"shasum": ""
|
2802 |
+
},
|
2803 |
+
"require": {
|
2804 |
+
"php": "^5.5.9|>=7.0.8"
|
2805 |
+
},
|
2806 |
+
"type": "library",
|
2807 |
+
"extra": {
|
2808 |
+
"branch-alias": {
|
2809 |
+
"dev-master": "3.4-dev"
|
2810 |
+
}
|
2811 |
+
},
|
2812 |
+
"autoload": {
|
2813 |
+
"psr-4": {
|
2814 |
+
"Symfony\\Component\\Process\\": ""
|
2815 |
+
},
|
2816 |
+
"exclude-from-classmap": [
|
2817 |
+
"/Tests/"
|
2818 |
+
]
|
2819 |
+
},
|
2820 |
+
"notification-url": "https://packagist.org/downloads/",
|
2821 |
+
"license": [
|
2822 |
+
"MIT"
|
2823 |
+
],
|
2824 |
+
"authors": [
|
2825 |
+
{
|
2826 |
+
"name": "Fabien Potencier",
|
2827 |
+
"email": "fabien@symfony.com"
|
2828 |
+
},
|
2829 |
+
{
|
2830 |
+
"name": "Symfony Community",
|
2831 |
+
"homepage": "https://symfony.com/contributors"
|
2832 |
+
}
|
2833 |
+
],
|
2834 |
+
"description": "Symfony Process Component",
|
2835 |
+
"homepage": "https://symfony.com",
|
2836 |
+
"time": "2020-01-01T11:03:25+00:00"
|
2837 |
+
},
|
2838 |
+
{
|
2839 |
+
"name": "symfony/translation",
|
2840 |
+
"version": "v3.4.37",
|
2841 |
+
"source": {
|
2842 |
+
"type": "git",
|
2843 |
+
"url": "https://github.com/symfony/translation.git",
|
2844 |
+
"reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf"
|
2845 |
+
},
|
2846 |
+
"dist": {
|
2847 |
+
"type": "zip",
|
2848 |
+
"url": "https://api.github.com/repos/symfony/translation/zipball/577ec9ba1d6443947c48058acc3de298ad25e2bf",
|
2849 |
+
"reference": "577ec9ba1d6443947c48058acc3de298ad25e2bf",
|
2850 |
+
"shasum": ""
|
2851 |
+
},
|
2852 |
+
"require": {
|
2853 |
+
"php": "^5.5.9|>=7.0.8",
|
2854 |
+
"symfony/polyfill-mbstring": "~1.0"
|
2855 |
+
},
|
2856 |
+
"conflict": {
|
2857 |
+
"symfony/config": "<2.8",
|
2858 |
+
"symfony/dependency-injection": "<3.4",
|
2859 |
+
"symfony/yaml": "<3.4"
|
2860 |
+
},
|
2861 |
+
"require-dev": {
|
2862 |
+
"psr/log": "~1.0",
|
2863 |
+
"symfony/config": "~2.8|~3.0|~4.0",
|
2864 |
+
"symfony/dependency-injection": "~3.4|~4.0",
|
2865 |
+
"symfony/finder": "~2.8|~3.0|~4.0",
|
2866 |
+
"symfony/http-kernel": "~3.4|~4.0",
|
2867 |
+
"symfony/intl": "^2.8.18|^3.2.5|~4.0",
|
2868 |
+
"symfony/var-dumper": "~3.4|~4.0",
|
2869 |
+
"symfony/yaml": "~3.4|~4.0"
|
2870 |
+
},
|
2871 |
+
"suggest": {
|
2872 |
+
"psr/log-implementation": "To use logging capability in translator",
|
2873 |
+
"symfony/config": "",
|
2874 |
+
"symfony/yaml": ""
|
2875 |
+
},
|
2876 |
+
"type": "library",
|
2877 |
+
"extra": {
|
2878 |
+
"branch-alias": {
|
2879 |
+
"dev-master": "3.4-dev"
|
2880 |
+
}
|
2881 |
+
},
|
2882 |
+
"autoload": {
|
2883 |
+
"psr-4": {
|
2884 |
+
"Symfony\\Component\\Translation\\": ""
|
2885 |
+
},
|
2886 |
+
"exclude-from-classmap": [
|
2887 |
+
"/Tests/"
|
2888 |
+
]
|
2889 |
+
},
|
2890 |
+
"notification-url": "https://packagist.org/downloads/",
|
2891 |
+
"license": [
|
2892 |
+
"MIT"
|
2893 |
+
],
|
2894 |
+
"authors": [
|
2895 |
+
{
|
2896 |
+
"name": "Fabien Potencier",
|
2897 |
+
"email": "fabien@symfony.com"
|
2898 |
+
},
|
2899 |
+
{
|
2900 |
+
"name": "Symfony Community",
|
2901 |
+
"homepage": "https://symfony.com/contributors"
|
2902 |
+
}
|
2903 |
+
],
|
2904 |
+
"description": "Symfony Translation Component",
|
2905 |
+
"homepage": "https://symfony.com",
|
2906 |
+
"time": "2020-01-04T12:05:51+00:00"
|
2907 |
+
},
|
2908 |
+
{
|
2909 |
+
"name": "symfony/yaml",
|
2910 |
+
"version": "v3.4.37",
|
2911 |
+
"source": {
|
2912 |
+
"type": "git",
|
2913 |
+
"url": "https://github.com/symfony/yaml.git",
|
2914 |
+
"reference": "aa46bc2233097d5212332c907f9911533acfbf80"
|
2915 |
+
},
|
2916 |
+
"dist": {
|
2917 |
+
"type": "zip",
|
2918 |
+
"url": "https://api.github.com/repos/symfony/yaml/zipball/aa46bc2233097d5212332c907f9911533acfbf80",
|
2919 |
+
"reference": "aa46bc2233097d5212332c907f9911533acfbf80",
|
2920 |
+
"shasum": ""
|
2921 |
+
},
|
2922 |
+
"require": {
|
2923 |
+
"php": "^5.5.9|>=7.0.8",
|
2924 |
+
"symfony/polyfill-ctype": "~1.8"
|
2925 |
+
},
|
2926 |
+
"conflict": {
|
2927 |
+
"symfony/console": "<3.4"
|
2928 |
+
},
|
2929 |
+
"require-dev": {
|
2930 |
+
"symfony/console": "~3.4|~4.0"
|
2931 |
+
},
|
2932 |
+
"suggest": {
|
2933 |
+
"symfony/console": "For validating YAML files using the lint command"
|
2934 |
+
},
|
2935 |
+
"type": "library",
|
2936 |
+
"extra": {
|
2937 |
+
"branch-alias": {
|
2938 |
+
"dev-master": "3.4-dev"
|
2939 |
+
}
|
2940 |
+
},
|
2941 |
+
"autoload": {
|
2942 |
+
"psr-4": {
|
2943 |
+
"Symfony\\Component\\Yaml\\": ""
|
2944 |
+
},
|
2945 |
+
"exclude-from-classmap": [
|
2946 |
+
"/Tests/"
|
2947 |
+
]
|
2948 |
+
},
|
2949 |
+
"notification-url": "https://packagist.org/downloads/",
|
2950 |
+
"license": [
|
2951 |
+
"MIT"
|
2952 |
+
],
|
2953 |
+
"authors": [
|
2954 |
+
{
|
2955 |
+
"name": "Fabien Potencier",
|
2956 |
+
"email": "fabien@symfony.com"
|
2957 |
+
},
|
2958 |
+
{
|
2959 |
+
"name": "Symfony Community",
|
2960 |
+
"homepage": "https://symfony.com/contributors"
|
2961 |
+
}
|
2962 |
+
],
|
2963 |
+
"description": "Symfony Yaml Component",
|
2964 |
+
"homepage": "https://symfony.com",
|
2965 |
+
"time": "2020-01-13T08:00:59+00:00"
|
2966 |
+
},
|
2967 |
+
{
|
2968 |
+
"name": "webmozart/assert",
|
2969 |
+
"version": "1.7.0",
|
2970 |
+
"source": {
|
2971 |
+
"type": "git",
|
2972 |
+
"url": "https://github.com/webmozart/assert.git",
|
2973 |
+
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
|
2974 |
+
},
|
2975 |
+
"dist": {
|
2976 |
+
"type": "zip",
|
2977 |
+
"url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
|
2978 |
+
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
|
2979 |
+
"shasum": ""
|
2980 |
+
},
|
2981 |
+
"require": {
|
2982 |
+
"php": "^5.3.3 || ^7.0",
|
2983 |
+
"symfony/polyfill-ctype": "^1.8"
|
2984 |
+
},
|
2985 |
+
"conflict": {
|
2986 |
+
"vimeo/psalm": "<3.6.0"
|
2987 |
+
},
|
2988 |
+
"require-dev": {
|
2989 |
+
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
|
2990 |
+
},
|
2991 |
+
"type": "library",
|
2992 |
+
"autoload": {
|
2993 |
+
"psr-4": {
|
2994 |
+
"Webmozart\\Assert\\": "src/"
|
2995 |
+
}
|
2996 |
+
},
|
2997 |
+
"notification-url": "https://packagist.org/downloads/",
|
2998 |
+
"license": [
|
2999 |
+
"MIT"
|
3000 |
+
],
|
3001 |
+
"authors": [
|
3002 |
+
{
|
3003 |
+
"name": "Bernhard Schussek",
|
3004 |
+
"email": "bschussek@gmail.com"
|
3005 |
+
}
|
3006 |
+
],
|
3007 |
+
"description": "Assertions to validate method input/output with nice error messages.",
|
3008 |
+
"keywords": [
|
3009 |
+
"assert",
|
3010 |
+
"check",
|
3011 |
+
"validate"
|
3012 |
+
],
|
3013 |
+
"time": "2020-02-14T12:15:55+00:00"
|
3014 |
+
},
|
3015 |
+
{
|
3016 |
+
"name": "woocommerce/woocommerce-sniffs",
|
3017 |
+
"version": "0.0.8",
|
3018 |
+
"source": {
|
3019 |
+
"type": "git",
|
3020 |
+
"url": "https://github.com/woocommerce/woocommerce-sniffs.git",
|
3021 |
+
"reference": "ccdae93ba678d59cd9741bec077d0c63c0a82958"
|
3022 |
+
},
|
3023 |
+
"dist": {
|
3024 |
+
"type": "zip",
|
3025 |
+
"url": "https://api.github.com/repos/woocommerce/woocommerce-sniffs/zipball/ccdae93ba678d59cd9741bec077d0c63c0a82958",
|
3026 |
+
"reference": "ccdae93ba678d59cd9741bec077d0c63c0a82958",
|
3027 |
+
"shasum": ""
|
3028 |
+
},
|
3029 |
+
"require": {
|
3030 |
+
"dealerdirect/phpcodesniffer-composer-installer": "0.5.0",
|
3031 |
+
"php": ">=7.0",
|
3032 |
+
"phpcompatibility/phpcompatibility-wp": "2.1.0",
|
3033 |
+
"wp-coding-standards/wpcs": "2.1.1"
|
3034 |
+
},
|
3035 |
+
"type": "phpcodesniffer-standard",
|
3036 |
+
"notification-url": "https://packagist.org/downloads/",
|
3037 |
+
"license": [
|
3038 |
+
"MIT"
|
3039 |
+
],
|
3040 |
+
"authors": [
|
3041 |
+
{
|
3042 |
+
"name": "Claudio Sanches",
|
3043 |
+
"email": "claudio@automattic.com"
|
3044 |
+
}
|
3045 |
+
],
|
3046 |
+
"description": "WooCommerce sniffs",
|
3047 |
+
"keywords": [
|
3048 |
+
"phpcs",
|
3049 |
+
"standards",
|
3050 |
+
"woocommerce",
|
3051 |
+
"wordpress"
|
3052 |
+
],
|
3053 |
+
"time": "2019-10-16T18:25:21+00:00"
|
3054 |
+
},
|
3055 |
+
{
|
3056 |
+
"name": "wp-cli/autoload-splitter",
|
3057 |
+
"version": "v0.1.5",
|
3058 |
+
"source": {
|
3059 |
+
"type": "git",
|
3060 |
+
"url": "https://github.com/wp-cli/autoload-splitter.git",
|
3061 |
+
"reference": "fb4302da26390811d2631c62b42b75976d224bb8"
|
3062 |
+
},
|
3063 |
+
"dist": {
|
3064 |
+
"type": "zip",
|
3065 |
+
"url": "https://api.github.com/repos/wp-cli/autoload-splitter/zipball/fb4302da26390811d2631c62b42b75976d224bb8",
|
3066 |
+
"reference": "fb4302da26390811d2631c62b42b75976d224bb8",
|
3067 |
+
"shasum": ""
|
3068 |
+
},
|
3069 |
+
"require": {
|
3070 |
+
"composer-plugin-api": "^1.1"
|
3071 |
+
},
|
3072 |
+
"type": "composer-plugin",
|
3073 |
+
"extra": {
|
3074 |
+
"class": "WP_CLI\\AutoloadSplitter\\ComposerPlugin"
|
3075 |
+
},
|
3076 |
+
"autoload": {
|
3077 |
+
"psr-4": {
|
3078 |
+
"WP_CLI\\AutoloadSplitter\\": "src"
|
3079 |
+
}
|
3080 |
+
},
|
3081 |
+
"notification-url": "https://packagist.org/downloads/",
|
3082 |
+
"license": [
|
3083 |
+
"MIT"
|
3084 |
+
],
|
3085 |
+
"authors": [
|
3086 |
+
{
|
3087 |
+
"name": "Alain Schlesser",
|
3088 |
+
"email": "alain.schlesser@gmail.com",
|
3089 |
+
"homepage": "https://www.alainschlesser.com"
|
3090 |
+
}
|
3091 |
+
],
|
3092 |
+
"description": "Composer plugin for splitting a generated autoloader into two distinct parts.",
|
3093 |
+
"homepage": "https://wp-cli.org",
|
3094 |
+
"time": "2017-08-03T08:40:16+00:00"
|
3095 |
+
},
|
3096 |
+
{
|
3097 |
+
"name": "wp-cli/cache-command",
|
3098 |
+
"version": "v1.0.6",
|
3099 |
+
"source": {
|
3100 |
+
"type": "git",
|
3101 |
+
"url": "https://github.com/wp-cli/cache-command.git",
|
3102 |
+
"reference": "d82cba9effa198f17847dce5771c8fb20c443ffa"
|
3103 |
+
},
|
3104 |
+
"dist": {
|
3105 |
+
"type": "zip",
|
3106 |
+
"url": "https://api.github.com/repos/wp-cli/cache-command/zipball/d82cba9effa198f17847dce5771c8fb20c443ffa",
|
3107 |
+
"reference": "d82cba9effa198f17847dce5771c8fb20c443ffa",
|
3108 |
+
"shasum": ""
|
3109 |
+
},
|
3110 |
+
"require-dev": {
|
3111 |
+
"behat/behat": "~2.5",
|
3112 |
+
"wp-cli/wp-cli": "*"
|
3113 |
+
},
|
3114 |
+
"type": "wp-cli-package",
|
3115 |
+
"extra": {
|
3116 |
+
"branch-alias": {
|
3117 |
+
"dev-master": "1.x-dev"
|
3118 |
+
},
|
3119 |
+
"bundled": true,
|
3120 |
+
"commands": [
|
3121 |
+
"cache",
|
3122 |
+
"cache add",
|
3123 |
+
"cache decr",
|
3124 |
+
"cache delete",
|
3125 |
+
"cache flush",
|
3126 |
+
"cache get",
|
3127 |
+
"cache incr",
|
3128 |
+
"cache replace",
|
3129 |
+
"cache set",
|
3130 |
+
"cache type",
|
3131 |
+
"transient",
|
3132 |
+
"transient delete",
|
3133 |
+
"transient get",
|
3134 |
+
"transient set",
|
3135 |
+
"transient type"
|
3136 |
+
]
|
3137 |
+
},
|
3138 |
+
"autoload": {
|
3139 |
+
"psr-4": {
|
3140 |
+
"": "src/"
|
3141 |
+
},
|
3142 |
+
"files": [
|
3143 |
+
"cache-command.php"
|
3144 |
+
]
|
3145 |
+
},
|
3146 |
+
"notification-url": "https://packagist.org/downloads/",
|
3147 |
+
"license": [
|
3148 |
+
"MIT"
|
3149 |
+
],
|
3150 |
+
"authors": [
|
3151 |
+
{
|
3152 |
+
"name": "Daniel Bachhuber",
|
3153 |
+
"email": "daniel@runcommand.io",
|
3154 |
+
"homepage": "https://runcommand.io"
|
3155 |
+
}
|
3156 |
+
],
|
3157 |
+
"description": "Manages object and transient caches.",
|
3158 |
+
"homepage": "https://github.com/wp-cli/cache-command",
|
3159 |
+
"time": "2017-12-14T19:21:19+00:00"
|
3160 |
+
},
|
3161 |
+
{
|
3162 |
+
"name": "wp-cli/checksum-command",
|
3163 |
+
"version": "v1.0.9",
|
3164 |
+
"source": {
|
3165 |
+
"type": "git",
|
3166 |
+
"url": "https://github.com/wp-cli/checksum-command.git",
|
3167 |
+
"reference": "89a319440651f2867f282339c2223cfe5e9cc3fb"
|
3168 |
+
},
|
3169 |
+
"dist": {
|
3170 |
+
"type": "zip",
|
3171 |
+
"url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/89a319440651f2867f282339c2223cfe5e9cc3fb",
|
3172 |
+
"reference": "89a319440651f2867f282339c2223cfe5e9cc3fb",
|
3173 |
+
"shasum": ""
|
3174 |
+
},
|
3175 |
+
"require-dev": {
|
3176 |
+
"behat/behat": "~2.5",
|
3177 |
+
"wp-cli/wp-cli": "^1.5"
|
3178 |
+
},
|
3179 |
+
"type": "wp-cli-package",
|
3180 |
+
"extra": {
|
3181 |
+
"branch-alias": {
|
3182 |
+
"dev-master": "1.x-dev"
|
3183 |
+
},
|
3184 |
+
"bundled": true,
|
3185 |
+
"commands": [
|
3186 |
+
"core verify-checksums",
|
3187 |
+
"plugin verify-checksums"
|
3188 |
+
]
|
3189 |
+
},
|
3190 |
+
"autoload": {
|
3191 |
+
"psr-4": {
|
3192 |
+
"": "src/"
|
3193 |
+
},
|
3194 |
+
"files": [
|
3195 |
+
"checksum-command.php"
|
3196 |
+
]
|
3197 |
+
},
|
3198 |
+
"notification-url": "https://packagist.org/downloads/",
|
3199 |
+
"license": [
|
3200 |
+
"MIT"
|
3201 |
+
],
|
3202 |
+
"authors": [
|
3203 |
+
{
|
3204 |
+
"name": "Daniel Bachhuber",
|
3205 |
+
"email": "daniel@runcommand.io",
|
3206 |
+
"homepage": "https://runcommand.io"
|
3207 |
+
}
|
3208 |
+
],
|
3209 |
+
"description": "Verifies file integrity by comparing to published checksums.",
|
3210 |
+
"homepage": "https://github.com/wp-cli/checksum-command",
|
3211 |
+
"time": "2018-04-20T07:47:27+00:00"
|
3212 |
+
},
|
3213 |
+
{
|
3214 |
+
"name": "wp-cli/config-command",
|
3215 |
+
"version": "v1.2.0",
|
3216 |
+
"source": {
|
3217 |
+
"type": "git",
|
3218 |
+
"url": "https://github.com/wp-cli/config-command.git",
|
3219 |
+
"reference": "7bec9b4685b4022ab511630422dd6acccadfca9b"
|
3220 |
+
},
|
3221 |
+
"dist": {
|
3222 |
+
"type": "zip",
|
3223 |
+
"url": "https://api.github.com/repos/wp-cli/config-command/zipball/7bec9b4685b4022ab511630422dd6acccadfca9b",
|
3224 |
+
"reference": "7bec9b4685b4022ab511630422dd6acccadfca9b",
|
3225 |
+
"shasum": ""
|
3226 |
+
},
|
3227 |
+
"require": {
|
3228 |
+
"wp-cli/wp-config-transformer": "^1.2.1"
|
3229 |
+
},
|
3230 |
+
"require-dev": {
|
3231 |
+
"behat/behat": "~2.5",
|
3232 |
+
"wp-cli/wp-cli": "*"
|
3233 |
+
},
|
3234 |
+
"type": "wp-cli-package",
|
3235 |
+
"extra": {
|
3236 |
+
"branch-alias": {
|
3237 |
+
"dev-master": "1.x-dev"
|
3238 |
+
},
|
3239 |
+
"bundled": true,
|
3240 |
+
"commands": [
|
3241 |
+
"config",
|
3242 |
+
"config edit",
|
3243 |
+
"config delete",
|
3244 |
+
"config create",
|
3245 |
+
"config get",
|
3246 |
+
"config has",
|
3247 |
+
"config list",
|
3248 |
+
"config path",
|
3249 |
+
"config set"
|
3250 |
+
]
|
3251 |
+
},
|
3252 |
+
"autoload": {
|
3253 |
+
"psr-4": {
|
3254 |
+
"": "src/"
|
3255 |
+
},
|
3256 |
+
"files": [
|
3257 |
+
"config-command.php"
|
3258 |
+
]
|
3259 |
+
},
|
3260 |
+
"notification-url": "https://packagist.org/downloads/",
|
3261 |
+
"license": [
|
3262 |
+
"MIT"
|
3263 |
+
],
|
3264 |
+
"authors": [
|
3265 |
+
{
|
3266 |
+
"name": "Daniel Bachhuber",
|
3267 |
+
"email": "daniel@runcommand.io",
|
3268 |
+
"homepage": "https://runcommand.io"
|
3269 |
+
},
|
3270 |
+
{
|
3271 |
+
"name": "Alain Schlesser",
|
3272 |
+
"email": "alain.schlesser@gmail.com",
|
3273 |
+
"homepage": "https://www.alainschlesser.com"
|
3274 |
+
}
|
3275 |
+
],
|
3276 |
+
"description": "Generates and reads the wp-config.php file.",
|
3277 |
+
"homepage": "https://github.com/wp-cli/config-command",
|
3278 |
+
"time": "2018-04-20T08:03:51+00:00"
|
3279 |
+
},
|
3280 |
+
{
|
3281 |
+
"name": "wp-cli/core-command",
|
3282 |
+
"version": "v1.0.12",
|
3283 |
+
"source": {
|
3284 |
+
"type": "git",
|
3285 |
+
"url": "https://github.com/wp-cli/core-command.git",
|
3286 |
+
"reference": "b41913707029c5147b38810700e424ed5f5fe8e0"
|
3287 |
+
},
|
3288 |
+
"dist": {
|
3289 |
+
"type": "zip",
|
3290 |
+
"url": "https://api.github.com/repos/wp-cli/core-command/zipball/b41913707029c5147b38810700e424ed5f5fe8e0",
|
3291 |
+
"reference": "b41913707029c5147b38810700e424ed5f5fe8e0",
|
3292 |
+
"shasum": ""
|
3293 |
+
},
|
3294 |
+
"require-dev": {
|
3295 |
+
"behat/behat": "~2.5",
|
3296 |
+
"wp-cli/wp-cli": "*"
|
3297 |
+
},
|
3298 |
+
"type": "wp-cli-package",
|
3299 |
+
"extra": {
|
3300 |
+
"branch-alias": {
|
3301 |
+
"dev-master": "1.x-dev"
|
3302 |
+
},
|
3303 |
+
"bundled": true,
|
3304 |
+
"commands": [
|
3305 |
+
"core",
|
3306 |
+
"core check-update",
|
3307 |
+
"core download",
|
3308 |
+
"core install",
|
3309 |
+
"core is-installed",
|
3310 |
+
"core multisite-convert",
|
3311 |
+
"core multisite-install",
|
3312 |
+
"core update",
|
3313 |
+
"core update-db",
|
3314 |
+
"core version"
|
3315 |
+
]
|
3316 |
+
},
|
3317 |
+
"autoload": {
|
3318 |
+
"psr-4": {
|
3319 |
+
"": "src/"
|
3320 |
+
},
|
3321 |
+
"files": [
|
3322 |
+
"core-command.php"
|
3323 |
+
]
|
3324 |
+
},
|
3325 |
+
"notification-url": "https://packagist.org/downloads/",
|
3326 |
+
"license": [
|
3327 |
+
"MIT"
|
3328 |
+
],
|
3329 |
+
"authors": [
|
3330 |
+
{
|
3331 |
+
"name": "Daniel Bachhuber",
|
3332 |
+
"email": "daniel@runcommand.io",
|
3333 |
+
"homepage": "https://runcommand.io"
|
3334 |
+
}
|
3335 |
+
],
|
3336 |
+
"description": "Downloads, installs, updates, and manages a WordPress installation.",
|
3337 |
+
"homepage": "https://github.com/wp-cli/core-command",
|
3338 |
+
"time": "2018-07-25T15:55:02+00:00"
|
3339 |
+
},
|
3340 |
+
{
|
3341 |
+
"name": "wp-cli/cron-command",
|
3342 |
+
"version": "v1.0.5",
|
3343 |
+
"source": {
|
3344 |
+
"type": "git",
|
3345 |
+
"url": "https://github.com/wp-cli/cron-command.git",
|
3346 |
+
"reference": "9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef"
|
3347 |
+
},
|
3348 |
+
"dist": {
|
3349 |
+
"type": "zip",
|
3350 |
+
"url": "https://api.github.com/repos/wp-cli/cron-command/zipball/9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef",
|
3351 |
+
"reference": "9da7e36e8f9c14cb171a3c5204cba2865e0ed7ef",
|
3352 |
+
"shasum": ""
|
3353 |
+
},
|
3354 |
+
"require-dev": {
|
3355 |
+
"behat/behat": "~2.5",
|
3356 |
+
"wp-cli/wp-cli": "*"
|
3357 |
+
},
|
3358 |
+
"type": "wp-cli-package",
|
3359 |
+
"extra": {
|
3360 |
+
"branch-alias": {
|
3361 |
+
"dev-master": "1.x-dev"
|
3362 |
+
},
|
3363 |
+
"bundled": true,
|
3364 |
+
"commands": [
|
3365 |
+
"cron",
|
3366 |
+
"cron test",
|
3367 |
+
"cron event",
|
3368 |
+
"cron event delete",
|
3369 |
+
"cron event list",
|
3370 |
+
"cron event run",
|
3371 |
+
"cron event schedule",
|
3372 |
+
"cron schedule",
|
3373 |
+
"cron schedule list"
|
3374 |
+
]
|
3375 |
+
},
|
3376 |
+
"autoload": {
|
3377 |
+
"psr-4": {
|
3378 |
+
"": "src/"
|
3379 |
+
},
|
3380 |
+
"files": [
|
3381 |
+
"cron-command.php"
|
3382 |
+
]
|
3383 |
+
},
|
3384 |
+
"notification-url": "https://packagist.org/downloads/",
|
3385 |
+
"license": [
|
3386 |
+
"MIT"
|
3387 |
+
],
|
3388 |
+
"authors": [
|
3389 |
+
{
|
3390 |
+
"name": "Daniel Bachhuber",
|
3391 |
+
"email": "daniel@runcommand.io",
|
3392 |
+
"homepage": "https://runcommand.io"
|
3393 |
+
}
|
3394 |
+
],
|
3395 |
+
"description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
|
3396 |
+
"homepage": "https://github.com/wp-cli/cron-command",
|
3397 |
+
"time": "2017-12-08T15:09:54+00:00"
|
3398 |
+
},
|
3399 |
+
{
|
3400 |
+
"name": "wp-cli/db-command",
|
3401 |
+
"version": "v1.3.5",
|
3402 |
+
"source": {
|
3403 |
+
"type": "git",
|
3404 |
+
"url": "https://github.com/wp-cli/db-command.git",
|
3405 |
+
"reference": "c260be59d9ac4c0012b016405e17d0251137fb89"
|
3406 |
+
},
|
3407 |
+
"dist": {
|
3408 |
+
"type": "zip",
|
3409 |
+
"url": "https://api.github.com/repos/wp-cli/db-command/zipball/c260be59d9ac4c0012b016405e17d0251137fb89",
|
3410 |
+
"reference": "c260be59d9ac4c0012b016405e17d0251137fb89",
|
3411 |
+
"shasum": ""
|
3412 |
+
},
|
3413 |
+
"require-dev": {
|
3414 |
+
"behat/behat": "~2.5",
|
3415 |
+
"wp-cli/wp-cli": "^1.5"
|
3416 |
+
},
|
3417 |
+
"type": "wp-cli-package",
|
3418 |
+
"extra": {
|
3419 |
+
"branch-alias": {
|
3420 |
+
"dev-master": "1.x-dev"
|
3421 |
+
},
|
3422 |
+
"bundled": true,
|
3423 |
+
"commands": [
|
3424 |
+
"db",
|
3425 |
+
"db create",
|
3426 |
+
"db drop",
|
3427 |
+
"db reset",
|
3428 |
+
"db check",
|
3429 |
+
"db optimize",
|
3430 |
+
"db prefix",
|
3431 |
+
"db repair",
|
3432 |
+
"db cli",
|
3433 |
+
"db query",
|
3434 |
+
"db export",
|
3435 |
+
"db import",
|
3436 |
+
"db search",
|
3437 |
+
"db tables",
|
3438 |
+
"db size",
|
3439 |
+
"db columns"
|
3440 |
+
]
|
3441 |
+
},
|
3442 |
+
"autoload": {
|
3443 |
+
"psr-4": {
|
3444 |
+
"": "src/"
|
3445 |
+
},
|
3446 |
+
"files": [
|
3447 |
+
"db-command.php"
|
3448 |
+
]
|
3449 |
+
},
|
3450 |
+
"notification-url": "https://packagist.org/downloads/",
|
3451 |
+
"license": [
|
3452 |
+
"MIT"
|
3453 |
+
],
|
3454 |
+
"authors": [
|
3455 |
+
{
|
3456 |
+
"name": "Daniel Bachhuber",
|
3457 |
+
"email": "daniel@runcommand.io",
|
3458 |
+
"homepage": "https://runcommand.io"
|
3459 |
+
}
|
3460 |
+
],
|
3461 |
+
"description": "Performs basic database operations using credentials stored in wp-config.php.",
|
3462 |
+
"homepage": "https://github.com/wp-cli/db-command",
|
3463 |
+
"time": "2018-07-31T02:06:59+00:00"
|
3464 |
+
},
|
3465 |
+
{
|
3466 |
+
"name": "wp-cli/embed-command",
|
3467 |
+
"version": "v1.0.0",
|
3468 |
+
"source": {
|
3469 |
+
"type": "git",
|
3470 |
+
"url": "https://github.com/wp-cli/embed-command.git",
|
3471 |
+
"reference": "81319d4243a8dfe096389bf54cdc4fc3dec53497"
|
3472 |
+
},
|
3473 |
+
"dist": {
|
3474 |
+
"type": "zip",
|
3475 |
+
"url": "https://api.github.com/repos/wp-cli/embed-command/zipball/81319d4243a8dfe096389bf54cdc4fc3dec53497",
|
3476 |
+
"reference": "81319d4243a8dfe096389bf54cdc4fc3dec53497",
|
3477 |
+
"shasum": ""
|
3478 |
+
},
|
3479 |
+
"require-dev": {
|
3480 |
+
"behat/behat": "~2.5",
|
3481 |
+
"wp-cli/wp-cli": "^1.5"
|
3482 |
+
},
|
3483 |
+
"type": "wp-cli-package",
|
3484 |
+
"extra": {
|
3485 |
+
"branch-alias": {
|
3486 |
+
"dev-master": "1.x-dev"
|
3487 |
+
},
|
3488 |
+
"bundled": true,
|
3489 |
+
"commands": [
|
3490 |
+
"embed",
|
3491 |
+
"embed fetch",
|
3492 |
+
"embed provider list",
|
3493 |
+
"embed provider match",
|
3494 |
+
"embed handler list",
|
3495 |
+
"embed cache clear",
|
3496 |
+
"embed cache find",
|
3497 |
+
"embed cache trigger"
|
3498 |
+
]
|
3499 |
+
},
|
3500 |
+
"autoload": {
|
3501 |
+
"psr-4": {
|
3502 |
+
"WP_CLI\\Embeds\\": "src/"
|
3503 |
+
},
|
3504 |
+
"files": [
|
3505 |
+
"embed-command.php"
|
3506 |
+
]
|
3507 |
+
},
|
3508 |
+
"notification-url": "https://packagist.org/downloads/",
|
3509 |
+
"license": [
|
3510 |
+
"MIT"
|
3511 |
+
],
|
3512 |
+
"authors": [
|
3513 |
+
{
|
3514 |
+
"name": "Pascal Birchler",
|
3515 |
+
"homepage": "https://pascalbirchler.com/"
|
3516 |
+
}
|
3517 |
+
],
|
3518 |
+
"description": "Inspects oEmbed providers, clears embed cache, and more.",
|
3519 |
+
"homepage": "https://github.com/wp-cli/embed-command",
|
3520 |
+
"time": "2018-01-22T21:26:48+00:00"
|
3521 |
+
},
|
3522 |
+
{
|
3523 |
+
"name": "wp-cli/entity-command",
|
3524 |
+
"version": "v1.3.1",
|
3525 |
+
"source": {
|
3526 |
+
"type": "git",
|
3527 |
+
"url": "https://github.com/wp-cli/entity-command.git",
|
3528 |
+
"reference": "7b000645684b6acbb1d55ab47b77eb08f35cd229"
|
3529 |
+
},
|
3530 |
+
"dist": {
|
3531 |
+
"type": "zip",
|
3532 |
+
"url": "https://api.github.com/repos/wp-cli/entity-command/zipball/7b000645684b6acbb1d55ab47b77eb08f35cd229",
|
3533 |
+
"reference": "7b000645684b6acbb1d55ab47b77eb08f35cd229",
|
3534 |
+
"shasum": ""
|
3535 |
+
},
|
3536 |
+
"require-dev": {
|
3537 |
+
"behat/behat": "~2.5",
|
3538 |
+
"phpunit/phpunit": "^4.8",
|
3539 |
+
"wp-cli/wp-cli": "^1.5"
|
3540 |
+
},
|
3541 |
+
"type": "wp-cli-package",
|
3542 |
+
"extra": {
|
3543 |
+
"branch-alias": {
|
3544 |
+
"dev-master": "1.x-dev"
|
3545 |
+
},
|
3546 |
+
"bundled": true,
|
3547 |
+
"commands": [
|
3548 |
+
"comment",
|
3549 |
+
"comment approve",
|
3550 |
+
"comment count",
|
3551 |
+
"comment create",
|
3552 |
+
"comment delete",
|
3553 |
+
"comment exists",
|
3554 |
+
"comment generate",
|
3555 |
+
"comment get",
|
3556 |
+
"comment list",
|
3557 |
+
"comment meta",
|
3558 |
+
"comment meta add",
|
3559 |
+
"comment meta delete",
|
3560 |
+
"comment meta get",
|
3561 |
+
"comment meta list",
|
3562 |
+
"comment meta patch",
|
3563 |
+
"comment meta pluck",
|
3564 |
+
"comment meta update",
|
3565 |
+
"comment recount",
|
3566 |
+
"comment spam",
|
3567 |
+
"comment status",
|
3568 |
+
"comment trash",
|
3569 |
+
"comment unapprove",
|
3570 |
+
"comment unspam",
|
3571 |
+
"comment untrash",
|
3572 |
+
"comment update",
|
3573 |
+
"menu",
|
3574 |
+
"menu create",
|
3575 |
+
"menu delete",
|
3576 |
+
"menu item",
|
3577 |
+
"menu item add-custom",
|
3578 |
+
"menu item add-post",
|
3579 |
+
"menu item add-term",
|
3580 |
+
"menu item delete",
|
3581 |
+
"menu item list",
|
3582 |
+
"menu item update",
|
3583 |
+
"menu list",
|
3584 |
+
"menu location",
|
3585 |
+
"menu location assign",
|
3586 |
+
"menu location list",
|
3587 |
+
"menu location remove",
|
3588 |
+
"network meta",
|
3589 |
+
"network meta add",
|
3590 |
+
"network meta delete",
|
3591 |
+
"network meta get",
|
3592 |
+
"network meta list",
|
3593 |
+
"network meta patch",
|
3594 |
+
"network meta pluck",
|
3595 |
+
"network meta update",
|
3596 |
+
"option",
|
3597 |
+
"option add",
|
3598 |
+
"option delete",
|
3599 |
+
"option get",
|
3600 |
+
"option list",
|
3601 |
+
"option patch",
|
3602 |
+
"option pluck",
|
3603 |
+
"option update",
|
3604 |
+
"post",
|
3605 |
+
"post create",
|
3606 |
+
"post delete",
|
3607 |
+
"post edit",
|
3608 |
+
"post generate",
|
3609 |
+
"post get",
|
3610 |
+
"post list",
|
3611 |
+
"post meta",
|
3612 |
+
"post meta add",
|
3613 |
+
"post meta delete",
|
3614 |
+
"post meta get",
|
3615 |
+
"post meta list",
|
3616 |
+
"post meta patch",
|
3617 |
+
"post meta pluck",
|
3618 |
+
"post meta update",
|
3619 |
+
"post term",
|
3620 |
+
"post term add",
|
3621 |
+
"post term list",
|
3622 |
+
"post term remove",
|
3623 |
+
"post term set",
|
3624 |
+
"post update",
|
3625 |
+
"post-type",
|
3626 |
+
"post-type get",
|
3627 |
+
"post-type list",
|
3628 |
+
"site",
|
3629 |
+
"site activate",
|
3630 |
+
"site archive",
|
3631 |
+
"site create",
|
3632 |
+
"site deactivate",
|
3633 |
+
"site delete",
|
3634 |
+
"site empty",
|
3635 |
+
"site list",
|
3636 |
+
"site mature",
|
3637 |
+
"site option",
|
3638 |
+
"site private",
|
3639 |
+
"site public",
|
3640 |
+
"site spam",
|
3641 |
+
"site unarchive",
|
3642 |
+
"site unmature",
|
3643 |
+
"site unspam",
|
3644 |
+
"taxonomy",
|
3645 |
+
"taxonomy get",
|
3646 |
+
"taxonomy list",
|
3647 |
+
"term",
|
3648 |
+
"term create",
|
3649 |
+
"term delete",
|
3650 |
+
"term generate",
|
3651 |
+
"term get",
|
3652 |
+
"term list",
|
3653 |
+
"term meta",
|
3654 |
+
"term meta add",
|
3655 |
+
"term meta delete",
|
3656 |
+
"term meta get",
|
3657 |
+
"term meta list",
|
3658 |
+
"term meta patch",
|
3659 |
+
"term meta pluck",
|
3660 |
+
"term meta update",
|
3661 |
+
"term recount",
|
3662 |
+
"term update",
|
3663 |
+
"user",
|
3664 |
+
"user add-cap",
|
3665 |
+
"user add-role",
|
3666 |
+
"user create",
|
3667 |
+
"user delete",
|
3668 |
+
"user generate",
|
3669 |
+
"user get",
|
3670 |
+
"user import-csv",
|
3671 |
+
"user list",
|
3672 |
+
"user list-caps",
|
3673 |
+
"user meta",
|
3674 |
+
"user meta add",
|
3675 |
+
"user meta delete",
|
3676 |
+
"user meta get",
|
3677 |
+
"user meta list",
|
3678 |
+
"user meta patch",
|
3679 |
+
"user meta pluck",
|
3680 |
+
"user meta update",
|
3681 |
+
"user remove-cap",
|
3682 |
+
"user remove-role",
|
3683 |
+
"user reset-password",
|
3684 |
+
"user session",
|
3685 |
+
"user session destroy",
|
3686 |
+
"user session list",
|
3687 |
+
"user set-role",
|
3688 |
+
"user spam",
|
3689 |
+
"user term",
|
3690 |
+
"user term add",
|
3691 |
+
"user term list",
|
3692 |
+
"user term remove",
|
3693 |
+
"user term set",
|
3694 |
+
"user unspam",
|
3695 |
+
"user update"
|
3696 |
+
]
|
3697 |
+
},
|
3698 |
+
"autoload": {
|
3699 |
+
"psr-4": {
|
3700 |
+
"": "src/",
|
3701 |
+
"WP_CLI\\": "src/WP_CLI"
|
3702 |
+
},
|
3703 |
+
"files": [
|
3704 |
+
"entity-command.php"
|
3705 |
+
]
|
3706 |
+
},
|
3707 |
+
"notification-url": "https://packagist.org/downloads/",
|
3708 |
+
"license": [
|
3709 |
+
"MIT"
|
3710 |
+
],
|
3711 |
+
"authors": [
|
3712 |
+
{
|
3713 |
+
"name": "Daniel Bachhuber",
|
3714 |
+
"email": "daniel@runcommand.io",
|
3715 |
+
"homepage": "https://runcommand.io"
|
3716 |
+
}
|
3717 |
+
],
|
3718 |
+
"description": "Manage WordPress core entities.",
|
3719 |
+
"homepage": "https://github.com/wp-cli/entity-command",
|
3720 |
+
"time": "2018-07-13T12:21:06+00:00"
|
3721 |
+
},
|
3722 |
+
{
|
3723 |
+
"name": "wp-cli/eval-command",
|
3724 |
+
"version": "v1.0.5",
|
3725 |
+
"source": {
|
3726 |
+
"type": "git",
|
3727 |
+
"url": "https://github.com/wp-cli/eval-command.git",
|
3728 |
+
"reference": "9640d40ab28cd86590396f08f8c382e659f57321"
|
3729 |
+
},
|
3730 |
+
"dist": {
|
3731 |
+
"type": "zip",
|
3732 |
+
"url": "https://api.github.com/repos/wp-cli/eval-command/zipball/9640d40ab28cd86590396f08f8c382e659f57321",
|
3733 |
+
"reference": "9640d40ab28cd86590396f08f8c382e659f57321",
|
3734 |
+
"shasum": ""
|
3735 |
+
},
|
3736 |
+
"require": {
|
3737 |
+
"wp-cli/wp-cli": "*"
|
3738 |
+
},
|
3739 |
+
"require-dev": {
|
3740 |
+
"behat/behat": "~2.5"
|
3741 |
+
},
|
3742 |
+
"type": "wp-cli-package",
|
3743 |
+
"extra": {
|
3744 |
+
"branch-alias": {
|
3745 |
+
"dev-master": "1.x-dev"
|
3746 |
+
},
|
3747 |
+
"bundled": true,
|
3748 |
+
"commands": [
|
3749 |
+
"eval",
|
3750 |
+
"eval-file"
|
3751 |
+
]
|
3752 |
+
},
|
3753 |
+
"autoload": {
|
3754 |
+
"psr-4": {
|
3755 |
+
"": "src/"
|
3756 |
+
},
|
3757 |
+
"files": [
|
3758 |
+
"eval-command.php"
|
3759 |
+
]
|
3760 |
+
},
|
3761 |
+
"notification-url": "https://packagist.org/downloads/",
|
3762 |
+
"license": [
|
3763 |
+
"MIT"
|
3764 |
+
],
|
3765 |
+
"authors": [
|
3766 |
+
{
|
3767 |
+
"name": "Daniel Bachhuber",
|
3768 |
+
"email": "daniel@runcommand.io",
|
3769 |
+
"homepage": "https://runcommand.io"
|
3770 |
+
}
|
3771 |
+
],
|
3772 |
+
"description": "Executes arbitrary PHP code or files.",
|
3773 |
+
"homepage": "https://github.com/wp-cli/eval-command",
|
3774 |
+
"time": "2017-12-08T14:33:34+00:00"
|
3775 |
+
},
|
3776 |
+
{
|
3777 |
+
"name": "wp-cli/export-command",
|
3778 |
+
"version": "v1.0.7",
|
3779 |
+
"source": {
|
3780 |
+
"type": "git",
|
3781 |
+
"url": "https://github.com/wp-cli/export-command.git",
|
3782 |
+
"reference": "776d33ad6b2ac93c00fded27402ca8e188e7bff0"
|
3783 |
+
},
|
3784 |
+
"dist": {
|
3785 |
+
"type": "zip",
|
3786 |
+
"url": "https://api.github.com/repos/wp-cli/export-command/zipball/776d33ad6b2ac93c00fded27402ca8e188e7bff0",
|
3787 |
+
"reference": "776d33ad6b2ac93c00fded27402ca8e188e7bff0",
|
3788 |
+
"shasum": ""
|
3789 |
+
},
|
3790 |
+
"require": {
|
3791 |
+
"nb/oxymel": "~0.1.0"
|
3792 |
+
},
|
3793 |
+
"require-dev": {
|
3794 |
+
"behat/behat": "~2.5",
|
3795 |
+
"wp-cli/wp-cli": "^1.5"
|
3796 |
+
},
|
3797 |
+
"type": "wp-cli-package",
|
3798 |
+
"extra": {
|
3799 |
+
"branch-alias": {
|
3800 |
+
"dev-master": "1.x-dev"
|
3801 |
+
},
|
3802 |
+
"bundled": true,
|
3803 |
+
"commands": [
|
3804 |
+
"export"
|
3805 |
+
]
|
3806 |
+
},
|
3807 |
+
"autoload": {
|
3808 |
+
"psr-4": {
|
3809 |
+
"": "src/"
|
3810 |
+
},
|
3811 |
+
"files": [
|
3812 |
+
"export-command.php"
|
3813 |
+
]
|
3814 |
+
},
|
3815 |
+
"notification-url": "https://packagist.org/downloads/",
|
3816 |
+
"license": [
|
3817 |
+
"MIT"
|
3818 |
+
],
|
3819 |
+
"authors": [
|
3820 |
+
{
|
3821 |
+
"name": "Daniel Bachhuber",
|
3822 |
+
"email": "daniel@runcommand.io",
|
3823 |
+
"homepage": "https://runcommand.io"
|
3824 |
+
}
|
3825 |
+
],
|
3826 |
+
"description": "Exports WordPress content to a WXR file.",
|
3827 |
+
"homepage": "https://github.com/wp-cli/export-command",
|
3828 |
+
"time": "2018-04-20T08:10:47+00:00"
|
3829 |
+
},
|
3830 |
+
{
|
3831 |
+
"name": "wp-cli/extension-command",
|
3832 |
+
"version": "v1.2.2",
|
3833 |
+
"source": {
|
3834 |
+
"type": "git",
|
3835 |
+
"url": "https://github.com/wp-cli/extension-command.git",
|
3836 |
+
"reference": "18f1036bad42f481f178c2f4139039e9424b6e14"
|
3837 |
+
},
|
3838 |
+
"dist": {
|
3839 |
+
"type": "zip",
|
3840 |
+
"url": "https://api.github.com/repos/wp-cli/extension-command/zipball/18f1036bad42f481f178c2f4139039e9424b6e14",
|
3841 |
+
"reference": "18f1036bad42f481f178c2f4139039e9424b6e14",
|
3842 |
+
"shasum": ""
|
3843 |
+
},
|
3844 |
+
"require-dev": {
|
3845 |
+
"behat/behat": "~2.5",
|
3846 |
+
"wp-cli/wp-cli": "*"
|
3847 |
+
},
|
3848 |
+
"type": "wp-cli-package",
|
3849 |
+
"extra": {
|
3850 |
+
"branch-alias": {
|
3851 |
+
"dev-master": "1.x-dev"
|
3852 |
+
},
|
3853 |
+
"bundled": true,
|
3854 |
+
"commands": [
|
3855 |
+
"plugin",
|
3856 |
+
"plugin activate",
|
3857 |
+
"plugin deactivate",
|
3858 |
+
"plugin delete",
|
3859 |
+
"plugin get",
|
3860 |
+
"plugin install",
|
3861 |
+
"plugin is-installed",
|
3862 |
+
"plugin list",
|
3863 |
+
"plugin path",
|
3864 |
+
"plugin search",
|
3865 |
+
"plugin status",
|
3866 |
+
"plugin toggle",
|
3867 |
+
"plugin uninstall",
|
3868 |
+
"plugin update",
|
3869 |
+
"theme",
|
3870 |
+
"theme activate",
|
3871 |
+
"theme delete",
|
3872 |
+
"theme disable",
|
3873 |
+
"theme enable",
|
3874 |
+
"theme get",
|
3875 |
+
"theme install",
|
3876 |
+
"theme is-installed",
|
3877 |
+
"theme list",
|
3878 |
+
"theme mod",
|
3879 |
+
"theme mod get",
|
3880 |
+
"theme mod set",
|
3881 |
+
"theme mod remove",
|
3882 |
+
"theme path",
|
3883 |
+
"theme search",
|
3884 |
+
"theme status",
|
3885 |
+
"theme update",
|
3886 |
+
"theme mod list"
|
3887 |
+
]
|
3888 |
+
},
|
3889 |
+
"autoload": {
|
3890 |
+
"psr-4": {
|
3891 |
+
"": "src/"
|
3892 |
+
},
|
3893 |
+
"files": [
|
3894 |
+
"extension-command.php"
|
3895 |
+
]
|
3896 |
+
},
|
3897 |
+
"notification-url": "https://packagist.org/downloads/",
|
3898 |
+
"license": [
|
3899 |
+
"MIT"
|
3900 |
+
],
|
3901 |
+
"authors": [
|
3902 |
+
{
|
3903 |
+
"name": "Daniel Bachhuber",
|
3904 |
+
"email": "daniel@runcommand.io",
|
3905 |
+
"homepage": "https://runcommand.io"
|
3906 |
+
}
|
3907 |
+
],
|
3908 |
+
"description": "Manages plugins and themes, including installs, activations, and updates.",
|
3909 |
+
"homepage": "https://github.com/wp-cli/extension-command",
|
3910 |
+
"time": "2018-07-31T17:46:49+00:00"
|
3911 |
+
},
|
3912 |
+
{
|
3913 |
+
"name": "wp-cli/import-command",
|
3914 |
+
"version": "v1.0.7",
|
3915 |
+
"source": {
|
3916 |
+
"type": "git",
|
3917 |
+
"url": "https://github.com/wp-cli/import-command.git",
|
3918 |
+
"reference": "421fec5bd96671931f2119a89d28bae2f9edeb6b"
|
3919 |
+
},
|
3920 |
+
"dist": {
|
3921 |
+
"type": "zip",
|
3922 |
+
"url": "https://api.github.com/repos/wp-cli/import-command/zipball/421fec5bd96671931f2119a89d28bae2f9edeb6b",
|
3923 |
+
"reference": "421fec5bd96671931f2119a89d28bae2f9edeb6b",
|
3924 |
+
"shasum": ""
|
3925 |
+
},
|
3926 |
+
"require": {
|
3927 |
+
"wp-cli/wp-cli": "*"
|
3928 |
+
},
|
3929 |
+
"require-dev": {
|
3930 |
+
"behat/behat": "~2.5"
|
3931 |
+
},
|
3932 |
+
"type": "wp-cli-package",
|
3933 |
+
"extra": {
|
3934 |
+
"branch-alias": {
|
3935 |
+
"dev-master": "1.x-dev"
|
3936 |
+
},
|
3937 |
+
"bundled": true,
|
3938 |
+
"commands": [
|
3939 |
+
"import"
|
3940 |
+
]
|
3941 |
+
},
|
3942 |
+
"autoload": {
|
3943 |
+
"psr-4": {
|
3944 |
+
"": "src/"
|
3945 |
+
},
|
3946 |
+
"files": [
|
3947 |
+
"import-command.php"
|
3948 |
+
]
|
3949 |
+
},
|
3950 |
+
"notification-url": "https://packagist.org/downloads/",
|
3951 |
+
"license": [
|
3952 |
+
"MIT"
|
3953 |
+
],
|
3954 |
+
"authors": [
|
3955 |
+
{
|
3956 |
+
"name": "Daniel Bachhuber",
|
3957 |
+
"email": "daniel@runcommand.io",
|
3958 |
+
"homepage": "https://runcommand.io"
|
3959 |
+
}
|
3960 |
+
],
|
3961 |
+
"description": "Imports content from a given WXR file.",
|
3962 |
+
"homepage": "https://github.com/wp-cli/import-command",
|
3963 |
+
"time": "2018-04-20T08:07:05+00:00"
|
3964 |
+
},
|
3965 |
+
{
|
3966 |
+
"name": "wp-cli/language-command",
|
3967 |
+
"version": "v1.0.6",
|
3968 |
+
"source": {
|
3969 |
+
"type": "git",
|
3970 |
+
"url": "https://github.com/wp-cli/language-command.git",
|
3971 |
+
"reference": "2a3d1ce5a722a4d70809619a065087aa933f6209"
|
3972 |
+
},
|
3973 |
+
"dist": {
|
3974 |
+
"type": "zip",
|
3975 |
+
"url": "https://api.github.com/repos/wp-cli/language-command/zipball/2a3d1ce5a722a4d70809619a065087aa933f6209",
|
3976 |
+
"reference": "2a3d1ce5a722a4d70809619a065087aa933f6209",
|
3977 |
+
"shasum": ""
|
3978 |
+
},
|
3979 |
+
"require-dev": {
|
3980 |
+
"behat/behat": "~2.5",
|
3981 |
+
"wp-cli/wp-cli": "*"
|
3982 |
+
},
|
3983 |
+
"type": "wp-cli-package",
|
3984 |
+
"extra": {
|
3985 |
+
"branch-alias": {
|
3986 |
+
"dev-master": "1.x-dev"
|
3987 |
+
},
|
3988 |
+
"commands": [
|
3989 |
+
"language",
|
3990 |
+
"language core",
|
3991 |
+
"language core activate",
|
3992 |
+
"language core install",
|
3993 |
+
"language core list",
|
3994 |
+
"language core uninstall",
|
3995 |
+
"language core update"
|
3996 |
+
],
|
3997 |
+
"bundled": true
|
3998 |
+
},
|
3999 |
+
"autoload": {
|
4000 |
+
"psr-4": {
|
4001 |
+
"": "src/"
|
4002 |
+
},
|
4003 |
+
"files": [
|
4004 |
+
"language-command.php"
|
4005 |
+
]
|
4006 |
+
},
|
4007 |
+
"notification-url": "https://packagist.org/downloads/",
|
4008 |
+
"license": [
|
4009 |
+
"MIT"
|
4010 |
+
],
|
4011 |
+
"authors": [
|
4012 |
+
{
|
4013 |
+
"name": "Daniel Bachhuber",
|
4014 |
+
"email": "daniel@runcommand.io",
|
4015 |
+
"homepage": "https://runcommand.io"
|
4016 |
+
}
|
4017 |
+
],
|
4018 |
+
"description": "Installs, activates, and manages language packs.",
|
4019 |
+
"homepage": "https://github.com/wp-cli/language-command",
|
4020 |
+
"time": "2017-12-08T17:50:26+00:00"
|
4021 |
+
},
|
4022 |
+
{
|
4023 |
+
"name": "wp-cli/media-command",
|
4024 |
+
"version": "v1.1.4",
|
4025 |
+
"source": {
|
4026 |
+
"type": "git",
|
4027 |
+
"url": "https://github.com/wp-cli/media-command.git",
|
4028 |
+
"reference": "7f8664ba722505446b3ef3dbc6717e8e7f20265c"
|
4029 |
+
},
|
4030 |
+
"dist": {
|
4031 |
+
"type": "zip",
|
4032 |
+
"url": "https://api.github.com/repos/wp-cli/media-command/zipball/7f8664ba722505446b3ef3dbc6717e8e7f20265c",
|
4033 |
+
"reference": "7f8664ba722505446b3ef3dbc6717e8e7f20265c",
|
4034 |
+
"shasum": ""
|
4035 |
+
},
|
4036 |
+
"require-dev": {
|
4037 |
+
"behat/behat": "~2.5",
|
4038 |
+
"wp-cli/wp-cli": "^1.5"
|
4039 |
+
},
|
4040 |
+
"type": "wp-cli-package",
|
4041 |
+
"extra": {
|
4042 |
+
"branch-alias": {
|
4043 |
+
"dev-master": "1.x-dev"
|
4044 |
+
},
|
4045 |
+
"bundled": true,
|
4046 |
+
"commands": [
|
4047 |
+
"media",
|
4048 |
+
"media import",
|
4049 |
+
"media regenerate",
|
4050 |
+
"media image-size"
|
4051 |
+
]
|
4052 |
+
},
|
4053 |
+
"autoload": {
|
4054 |
+
"psr-4": {
|
4055 |
+
"": "src/"
|
4056 |
+
},
|
4057 |
+
"files": [
|
4058 |
+
"media-command.php"
|
4059 |
+
]
|
4060 |
+
},
|
4061 |
+
"notification-url": "https://packagist.org/downloads/",
|
4062 |
+
"license": [
|
4063 |
+
"MIT"
|
4064 |
+
],
|
4065 |
+
"authors": [
|
4066 |
+
{
|
4067 |
+
"name": "Daniel Bachhuber",
|
4068 |
+
"email": "daniel@runcommand.io",
|
4069 |
+
"homepage": "https://runcommand.io"
|
4070 |
+
}
|
4071 |
+
],
|
4072 |
+
"description": "Imports files as attachments, regenerates thumbnails, or lists registered image sizes.",
|
4073 |
+
"homepage": "https://github.com/wp-cli/media-command",
|
4074 |
+
"time": "2018-01-29T02:17:56+00:00"
|
4075 |
+
},
|
4076 |
+
{
|
4077 |
+
"name": "wp-cli/mustangostang-spyc",
|
4078 |
+
"version": "0.6.3",
|
4079 |
+
"source": {
|
4080 |
+
"type": "git",
|
4081 |
+
"url": "https://github.com/wp-cli/spyc.git",
|
4082 |
+
"reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7"
|
4083 |
+
},
|
4084 |
+
"dist": {
|
4085 |
+
"type": "zip",
|
4086 |
+
"url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
|
4087 |
+
"reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
|
4088 |
+
"shasum": ""
|
4089 |
+
},
|
4090 |
+
"require": {
|
4091 |
+
"php": ">=5.3.1"
|
4092 |
+
},
|
4093 |
+
"require-dev": {
|
4094 |
+
"phpunit/phpunit": "4.3.*@dev"
|
4095 |
+
},
|
4096 |
+
"type": "library",
|
4097 |
+
"extra": {
|
4098 |
+
"branch-alias": {
|
4099 |
+
"dev-master": "0.5.x-dev"
|
4100 |
+
}
|
4101 |
+
},
|
4102 |
+
"autoload": {
|
4103 |
+
"psr-4": {
|
4104 |
+
"Mustangostang\\": "src/"
|
4105 |
+
},
|
4106 |
+
"files": [
|
4107 |
+
"includes/functions.php"
|
4108 |
+
]
|
4109 |
+
},
|
4110 |
+
"notification-url": "https://packagist.org/downloads/",
|
4111 |
+
"license": [
|
4112 |
+
"MIT"
|
4113 |
+
],
|
4114 |
+
"authors": [
|
4115 |
+
{
|
4116 |
+
"name": "mustangostang",
|
4117 |
+
"email": "vlad.andersen@gmail.com"
|
4118 |
+
}
|
4119 |
+
],
|
4120 |
+
"description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)",
|
4121 |
+
"homepage": "https://github.com/mustangostang/spyc/",
|
4122 |
+
"time": "2017-04-25T11:26:20+00:00"
|
4123 |
+
},
|
4124 |
+
{
|
4125 |
+
"name": "wp-cli/package-command",
|
4126 |
+
"version": "v1.0.14",
|
4127 |
+
"source": {
|
4128 |
+
"type": "git",
|
4129 |
+
"url": "https://github.com/wp-cli/package-command.git",
|
4130 |
+
"reference": "a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3"
|
4131 |
+
},
|
4132 |
+
"dist": {
|
4133 |
+
"type": "zip",
|
4134 |
+
"url": "https://api.github.com/repos/wp-cli/package-command/zipball/a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3",
|
4135 |
+
"reference": "a7ce916de5e1d0c3d910d4fc8ca31928ee3775d3",
|
4136 |
+
"shasum": ""
|
4137 |
+
},
|
4138 |
+
"require": {
|
4139 |
+
"composer/composer": "^1.2.0"
|
4140 |
+
},
|
4141 |
+
"require-dev": {
|
4142 |
+
"behat/behat": "~2.5",
|
4143 |
+
"wp-cli/wp-cli": "^1.5"
|
4144 |
+
},
|
4145 |
+
"type": "wp-cli-package",
|
4146 |
+
"extra": {
|
4147 |
+
"branch-alias": {
|
4148 |
+
"dev-master": "1.x-dev"
|
4149 |
+
},
|
4150 |
+
"bundled": true,
|
4151 |
+
"commands": [
|
4152 |
+
"package",
|
4153 |
+
"package browse",
|
4154 |
+
"package install",
|
4155 |
+
"package list",
|
4156 |
+
"package update",
|
4157 |
+
"package uninstall"
|
4158 |
+
]
|
4159 |
+
},
|
4160 |
+
"autoload": {
|
4161 |
+
"psr-4": {
|
4162 |
+
"": "src/"
|
4163 |
+
},
|
4164 |
+
"files": [
|
4165 |
+
"package-command.php"
|
4166 |
+
]
|
4167 |
+
},
|
4168 |
+
"notification-url": "https://packagist.org/downloads/",
|
4169 |
+
"license": [
|
4170 |
+
"MIT"
|
4171 |
+
],
|
4172 |
+
"authors": [
|
4173 |
+
{
|
4174 |
+
"name": "Daniel Bachhuber",
|
4175 |
+
"email": "daniel@runcommand.io",
|
4176 |
+
"homepage": "https://runcommand.io"
|
4177 |
+
}
|
4178 |
+
],
|
4179 |
+
"description": "Lists, installs, and removes WP-CLI packages.",
|
4180 |
+
"homepage": "https://github.com/wp-cli/package-command",
|
4181 |
+
"time": "2018-05-28T11:40:24+00:00"
|
4182 |
+
},
|
4183 |
+
{
|
4184 |
+
"name": "wp-cli/php-cli-tools",
|
4185 |
+
"version": "v0.11.11",
|
4186 |
+
"source": {
|
4187 |
+
"type": "git",
|
4188 |
+
"url": "https://github.com/wp-cli/php-cli-tools.git",
|
4189 |
+
"reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f"
|
4190 |
+
},
|
4191 |
+
"dist": {
|
4192 |
+
"type": "zip",
|
4193 |
+
"url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f",
|
4194 |
+
"reference": "fe9c7c44a9e1bf2196ec51dc38da0593dbf2993f",
|
4195 |
+
"shasum": ""
|
4196 |
+
},
|
4197 |
+
"require": {
|
4198 |
+
"php": ">= 5.3.0"
|
4199 |
+
},
|
4200 |
+
"type": "library",
|
4201 |
+
"autoload": {
|
4202 |
+
"psr-0": {
|
4203 |
+
"cli": "lib/"
|
4204 |
+
},
|
4205 |
+
"files": [
|
4206 |
+
"lib/cli/cli.php"
|
4207 |
+
]
|
4208 |
+
},
|
4209 |
+
"notification-url": "https://packagist.org/downloads/",
|
4210 |
+
"license": [
|
4211 |
+
"MIT"
|
4212 |
+
],
|
4213 |
+
"authors": [
|
4214 |
+
{
|
4215 |
+
"name": "James Logsdon",
|
4216 |
+
"email": "jlogsdon@php.net",
|
4217 |
+
"role": "Developer"
|
4218 |
+
},
|
4219 |
+
{
|
4220 |
+
"name": "Daniel Bachhuber",
|
4221 |
+
"email": "daniel@handbuilt.co",
|
4222 |
+
"role": "Maintainer"
|
4223 |
+
}
|
4224 |
+
],
|
4225 |
+
"description": "Console utilities for PHP",
|
4226 |
+
"homepage": "http://github.com/wp-cli/php-cli-tools",
|
4227 |
+
"keywords": [
|
4228 |
+
"cli",
|
4229 |
+
"console"
|
4230 |
+
],
|
4231 |
+
"time": "2018-09-04T13:28:00+00:00"
|
4232 |
+
},
|
4233 |
+
{
|
4234 |
+
"name": "wp-cli/rewrite-command",
|
4235 |
+
"version": "v1.0.5",
|
4236 |
+
"source": {
|
4237 |
+
"type": "git",
|
4238 |
+
"url": "https://github.com/wp-cli/rewrite-command.git",
|
4239 |
+
"reference": "6b1695887e289ffad14c8f4ea86b5f1d92757408"
|
4240 |
+
},
|
4241 |
+
"dist": {
|
4242 |
+
"type": "zip",
|
4243 |
+
"url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/6b1695887e289ffad14c8f4ea86b5f1d92757408",
|
4244 |
+
"reference": "6b1695887e289ffad14c8f4ea86b5f1d92757408",
|
4245 |
+
"shasum": ""
|
4246 |
+
},
|
4247 |
+
"require-dev": {
|
4248 |
+
"behat/behat": "~2.5",
|
4249 |
+
"wp-cli/wp-cli": "*"
|
4250 |
+
},
|
4251 |
+
"type": "wp-cli-package",
|
4252 |
+
"extra": {
|
4253 |
+
"branch-alias": {
|
4254 |
+
"dev-master": "1.x-dev"
|
4255 |
+
},
|
4256 |
+
"commands": [
|
4257 |
+
"rewrite",
|
4258 |
+
"rewrite flush",
|
4259 |
+
"rewrite list",
|
4260 |
+
"rewrite structure"
|
4261 |
+
],
|
4262 |
+
"bundled": true
|
4263 |
+
},
|
4264 |
+
"autoload": {
|
4265 |
+
"psr-4": {
|
4266 |
+
"": "src/"
|
4267 |
+
},
|
4268 |
+
"files": [
|
4269 |
+
"rewrite-command.php"
|
4270 |
+
]
|
4271 |
+
},
|
4272 |
+
"notification-url": "https://packagist.org/downloads/",
|
4273 |
+
"license": [
|
4274 |
+
"MIT"
|
4275 |
+
],
|
4276 |
+
"authors": [
|
4277 |
+
{
|
4278 |
+
"name": "Daniel Bachhuber",
|
4279 |
+
"email": "daniel@runcommand.io",
|
4280 |
+
"homepage": "https://runcommand.io"
|
4281 |
+
}
|
4282 |
+
],
|
4283 |
+
"description": "Lists or flushes the site's rewrite rules, updates the permalink structure.",
|
4284 |
+
"homepage": "https://github.com/wp-cli/rewrite-command",
|
4285 |
+
"time": "2017-12-08T17:51:04+00:00"
|
4286 |
+
},
|
4287 |
+
{
|
4288 |
+
"name": "wp-cli/role-command",
|
4289 |
+
"version": "v1.1.0",
|
4290 |
+
"source": {
|
4291 |
+
"type": "git",
|
4292 |
+
"url": "https://github.com/wp-cli/role-command.git",
|
4293 |
+
"reference": "f50134ea9c27c108b1069cf044f7395c8f9bf716"
|
4294 |
+
},
|
4295 |
+
"dist": {
|
4296 |
+
"type": "zip",
|
4297 |
+
"url": "https://api.github.com/repos/wp-cli/role-command/zipball/f50134ea9c27c108b1069cf044f7395c8f9bf716",
|
4298 |
+
"reference": "f50134ea9c27c108b1069cf044f7395c8f9bf716",
|
4299 |
+
"shasum": ""
|
4300 |
+
},
|
4301 |
+
"require-dev": {
|
4302 |
+
"behat/behat": "~2.5",
|
4303 |
+
"wp-cli/wp-cli": "*"
|
4304 |
+
},
|
4305 |
+
"type": "wp-cli-package",
|
4306 |
+
"extra": {
|
4307 |
+
"branch-alias": {
|
4308 |
+
"dev-master": "1.x-dev"
|
4309 |
+
},
|
4310 |
+
"commands": [
|
4311 |
+
"role",
|
4312 |
+
"role create",
|
4313 |
+
"role delete",
|
4314 |
+
"role exists",
|
4315 |
+
"role list",
|
4316 |
+
"role reset",
|
4317 |
+
"cap",
|
4318 |
+
"cap add",
|
4319 |
+
"cap list",
|
4320 |
+
"cap remove"
|
4321 |
+
],
|
4322 |
+
"bundled": true
|
4323 |
+
},
|
4324 |
+
"autoload": {
|
4325 |
+
"psr-4": {
|
4326 |
+
"": "src/"
|
4327 |
+
},
|
4328 |
+
"files": [
|
4329 |
+
"role-command.php"
|
4330 |
+
]
|
4331 |
+
},
|
4332 |
+
"notification-url": "https://packagist.org/downloads/",
|
4333 |
+
"license": [
|
4334 |
+
"MIT"
|
4335 |
+
],
|
4336 |
+
"authors": [
|
4337 |
+
{
|
4338 |
+
"name": "Daniel Bachhuber",
|
4339 |
+
"email": "daniel@runcommand.io",
|
4340 |
+
"homepage": "https://runcommand.io"
|
4341 |
+
}
|
4342 |
+
],
|
4343 |
+
"description": "Adds, removes, lists, and resets roles and capabilities.",
|
4344 |
+
"homepage": "https://github.com/wp-cli/role-command",
|
4345 |
+
"time": "2018-04-20T08:05:51+00:00"
|
4346 |
+
},
|
4347 |
+
{
|
4348 |
+
"name": "wp-cli/scaffold-command",
|
4349 |
+
"version": "v1.2.0",
|
4350 |
+
"source": {
|
4351 |
+
"type": "git",
|
4352 |
+
"url": "https://github.com/wp-cli/scaffold-command.git",
|
4353 |
+
"reference": "a897a54ba0a8199743d90204ff773b302fc77572"
|
4354 |
+
},
|
4355 |
+
"dist": {
|
4356 |
+
"type": "zip",
|
4357 |
+
"url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/a897a54ba0a8199743d90204ff773b302fc77572",
|
4358 |
+
"reference": "a897a54ba0a8199743d90204ff773b302fc77572",
|
4359 |
+
"shasum": ""
|
4360 |
+
},
|
4361 |
+
"require-dev": {
|
4362 |
+
"behat/behat": "~2.5",
|
4363 |
+
"wp-cli/wp-cli": "^1.5"
|
4364 |
+
},
|
4365 |
+
"type": "wp-cli-package",
|
4366 |
+
"extra": {
|
4367 |
+
"branch-alias": {
|
4368 |
+
"dev-master": "1.x-dev"
|
4369 |
+
},
|
4370 |
+
"bundled": true,
|
4371 |
+
"commands": [
|
4372 |
+
"scaffold",
|
4373 |
+
"scaffold _s",
|
4374 |
+
"scaffold block",
|
4375 |
+
"scaffold child-theme",
|
4376 |
+
"scaffold plugin",
|
4377 |
+
"scaffold plugin-tests",
|
4378 |
+
"scaffold post-type",
|
4379 |
+
"scaffold taxonomy",
|
4380 |
+
"scaffold theme-tests"
|
4381 |
+
]
|
4382 |
+
},
|
4383 |
+
"autoload": {
|
4384 |
+
"psr-4": {
|
4385 |
+
"": "src/"
|
4386 |
+
},
|
4387 |
+
"files": [
|
4388 |
+
"scaffold-command.php"
|
4389 |
+
]
|
4390 |
+
},
|
4391 |
+
"notification-url": "https://packagist.org/downloads/",
|
4392 |
+
"license": [
|
4393 |
+
"MIT"
|
4394 |
+
],
|
4395 |
+
"authors": [
|
4396 |
+
{
|
4397 |
+
"name": "Daniel Bachhuber",
|
4398 |
+
"email": "daniel@runcommand.io",
|
4399 |
+
"homepage": "https://runcommand.io"
|
4400 |
+
}
|
4401 |
+
],
|
4402 |
+
"description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
|
4403 |
+
"homepage": "https://github.com/wp-cli/scaffold-command",
|
4404 |
+
"time": "2018-07-29T15:02:24+00:00"
|
4405 |
+
},
|
4406 |
+
{
|
4407 |
+
"name": "wp-cli/search-replace-command",
|
4408 |
+
"version": "v1.3.1",
|
4409 |
+
"source": {
|
4410 |
+
"type": "git",
|
4411 |
+
"url": "https://github.com/wp-cli/search-replace-command.git",
|
4412 |
+
"reference": "be21639dc530ad6506664baa813862d39b6d78ba"
|
4413 |
+
},
|
4414 |
+
"dist": {
|
4415 |
+
"type": "zip",
|
4416 |
+
"url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/be21639dc530ad6506664baa813862d39b6d78ba",
|
4417 |
+
"reference": "be21639dc530ad6506664baa813862d39b6d78ba",
|
4418 |
+
"shasum": ""
|
4419 |
+
},
|
4420 |
+
"require-dev": {
|
4421 |
+
"behat/behat": "~2.5",
|
4422 |
+
"wp-cli/wp-cli": "^1.5"
|
4423 |
+
},
|
4424 |
+
"type": "wp-cli-package",
|
4425 |
+
"extra": {
|
4426 |
+
"branch-alias": {
|
4427 |
+
"dev-master": "1.x-dev"
|
4428 |
+
},
|
4429 |
+
"bundled": true,
|
4430 |
+
"commands": [
|
4431 |
+
"search-replace"
|
4432 |
+
]
|
4433 |
+
},
|
4434 |
+
"autoload": {
|
4435 |
+
"psr-4": {
|
4436 |
+
"": "src/"
|
4437 |
+
},
|
4438 |
+
"files": [
|
4439 |
+
"search-replace-command.php"
|
4440 |
+
]
|
4441 |
+
},
|
4442 |
+
"notification-url": "https://packagist.org/downloads/",
|
4443 |
+
"license": [
|
4444 |
+
"MIT"
|
4445 |
+
],
|
4446 |
+
"authors": [
|
4447 |
+
{
|
4448 |
+
"name": "Daniel Bachhuber",
|
4449 |
+
"email": "daniel@runcommand.io",
|
4450 |
+
"homepage": "https://runcommand.io"
|
4451 |
+
}
|
4452 |
+
],
|
4453 |
+
"description": "Searches/replaces strings in the database.",
|
4454 |
+
"homepage": "https://github.com/wp-cli/search-replace-command",
|
4455 |
+
"time": "2018-05-29T10:21:19+00:00"
|
4456 |
+
},
|
4457 |
+
{
|
4458 |
+
"name": "wp-cli/server-command",
|
4459 |
+
"version": "v1.0.9",
|
4460 |
+
"source": {
|
4461 |
+
"type": "git",
|
4462 |
+
"url": "https://github.com/wp-cli/server-command.git",
|
4463 |
+
"reference": "6192e6d7becd07e4c11a8f1560655c73a3b3526a"
|
4464 |
+
},
|
4465 |
+
"dist": {
|
4466 |
+
"type": "zip",
|
4467 |
+
"url": "https://api.github.com/repos/wp-cli/server-command/zipball/6192e6d7becd07e4c11a8f1560655c73a3b3526a",
|
4468 |
+
"reference": "6192e6d7becd07e4c11a8f1560655c73a3b3526a",
|
4469 |
+
"shasum": ""
|
4470 |
+
},
|
4471 |
+
"require": {
|
4472 |
+
"wp-cli/wp-cli": "*"
|
4473 |
+
},
|
4474 |
+
"require-dev": {
|
4475 |
+
"behat/behat": "~2.5"
|
4476 |
+
},
|
4477 |
+
"type": "wp-cli-package",
|
4478 |
+
"extra": {
|
4479 |
+
"branch-alias": {
|
4480 |
+
"dev-master": "1.x-dev"
|
4481 |
+
},
|
4482 |
+
"commands": [
|
4483 |
+
"server"
|
4484 |
+
],
|
4485 |
+
"bundled": true
|
4486 |
+
},
|
4487 |
+
"autoload": {
|
4488 |
+
"psr-4": {
|
4489 |
+
"": "src/"
|
4490 |
+
},
|
4491 |
+
"files": [
|
4492 |
+
"server-command.php"
|
4493 |
+
]
|
4494 |
+
},
|
4495 |
+
"notification-url": "https://packagist.org/downloads/",
|
4496 |
+
"license": [
|
4497 |
+
"MIT"
|
4498 |
+
],
|
4499 |
+
"authors": [
|
4500 |
+
{
|
4501 |
+
"name": "Daniel Bachhuber",
|
4502 |
+
"email": "daniel@runcommand.io",
|
4503 |
+
"homepage": "https://runcommand.io"
|
4504 |
+
}
|
4505 |
+
],
|
4506 |
+
"description": "Launches PHP's built-in web server for a specific WordPress installation.",
|
4507 |
+
"homepage": "https://github.com/wp-cli/server-command",
|
4508 |
+
"time": "2017-12-14T20:06:24+00:00"
|
4509 |
+
},
|
4510 |
+
{
|
4511 |
+
"name": "wp-cli/shell-command",
|
4512 |
+
"version": "v1.0.5",
|
4513 |
+
"source": {
|
4514 |
+
"type": "git",
|
4515 |
+
"url": "https://github.com/wp-cli/shell-command.git",
|
4516 |
+
"reference": "507603a8994d984b6c4d5bd26e31ede6d9cce37e"
|
4517 |
+
},
|
4518 |
+
"dist": {
|
4519 |
+
"type": "zip",
|
4520 |
+
"url": "https://api.github.com/repos/wp-cli/shell-command/zipball/507603a8994d984b6c4d5bd26e31ede6d9cce37e",
|
4521 |
+
"reference": "507603a8994d984b6c4d5bd26e31ede6d9cce37e",
|
4522 |
+
"shasum": ""
|
4523 |
+
},
|
4524 |
+
"require": {
|
4525 |
+
"wp-cli/wp-cli": "*"
|
4526 |
+
},
|
4527 |
+
"require-dev": {
|
4528 |
+
"behat/behat": "~2.5"
|
4529 |
+
},
|
4530 |
+
"type": "wp-cli-package",
|
4531 |
+
"extra": {
|
4532 |
+
"branch-alias": {
|
4533 |
+
"dev-master": "1.x-dev"
|
4534 |
+
},
|
4535 |
+
"commands": [
|
4536 |
+
"shell"
|
4537 |
+
],
|
4538 |
+
"bundled": true
|
4539 |
+
},
|
4540 |
+
"autoload": {
|
4541 |
+
"psr-4": {
|
4542 |
+
"": "src/",
|
4543 |
+
"WP_CLI\\": "src/WP_CLI"
|
4544 |
+
},
|
4545 |
+
"files": [
|
4546 |
+
"shell-command.php"
|
4547 |
+
]
|
4548 |
+
},
|
4549 |
+
"notification-url": "https://packagist.org/downloads/",
|
4550 |
+
"license": [
|
4551 |
+
"MIT"
|
4552 |
+
],
|
4553 |
+
"authors": [
|
4554 |
+
{
|
4555 |
+
"name": "Daniel Bachhuber",
|
4556 |
+
"email": "daniel@runcommand.io",
|
4557 |
+
"homepage": "https://runcommand.io"
|
4558 |
+
}
|
4559 |
+
],
|
4560 |
+
"description": "Opens an interactive PHP console for running and testing PHP code.",
|
4561 |
+
"homepage": "https://github.com/wp-cli/shell-command",
|
4562 |
+
"time": "2017-12-08T16:03:53+00:00"
|
4563 |
+
},
|
4564 |
+
{
|
4565 |
+
"name": "wp-cli/super-admin-command",
|
4566 |
+
"version": "v1.0.6",
|
4567 |
+
"source": {
|
4568 |
+
"type": "git",
|
4569 |
+
"url": "https://github.com/wp-cli/super-admin-command.git",
|
4570 |
+
"reference": "2982d2e6514dbb318561d72d0577746a3a37181e"
|
4571 |
+
},
|
4572 |
+
"dist": {
|
4573 |
+
"type": "zip",
|
4574 |
+
"url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/2982d2e6514dbb318561d72d0577746a3a37181e",
|
4575 |
+
"reference": "2982d2e6514dbb318561d72d0577746a3a37181e",
|
4576 |
+
"shasum": ""
|
4577 |
+
},
|
4578 |
+
"require-dev": {
|
4579 |
+
"behat/behat": "~2.5",
|
4580 |
+
"wp-cli/wp-cli": "*"
|
4581 |
+
},
|
4582 |
+
"type": "wp-cli-package",
|
4583 |
+
"extra": {
|
4584 |
+
"branch-alias": {
|
4585 |
+
"dev-master": "1.x-dev"
|
4586 |
+
},
|
4587 |
+
"commands": [
|
4588 |
+
"super-admin",
|
4589 |
+
"super-admin add",
|
4590 |
+
"super-admin list",
|
4591 |
+
"super-admin remove"
|
4592 |
+
],
|
4593 |
+
"bundled": true
|
4594 |
+
},
|
4595 |
+
"autoload": {
|
4596 |
+
"psr-4": {
|
4597 |
+
"": "src/"
|
4598 |
+
},
|
4599 |
+
"files": [
|
4600 |
+
"super-admin-command.php"
|
4601 |
+
]
|
4602 |
+
},
|
4603 |
+
"notification-url": "https://packagist.org/downloads/",
|
4604 |
+
"license": [
|
4605 |
+
"MIT"
|
4606 |
+
],
|
4607 |
+
"authors": [
|
4608 |
+
{
|
4609 |
+
"name": "Daniel Bachhuber",
|
4610 |
+
"email": "daniel@runcommand.io",
|
4611 |
+
"homepage": "https://runcommand.io"
|
4612 |
+
}
|
4613 |
+
],
|
4614 |
+
"description": "Lists, adds, or removes super admin users on a multisite installation.",
|
4615 |
+
"homepage": "https://github.com/wp-cli/super-admin-command",
|
4616 |
+
"time": "2017-12-08T17:43:53+00:00"
|
4617 |
+
},
|
4618 |
+
{
|
4619 |
+
"name": "wp-cli/widget-command",
|
4620 |
+
"version": "v1.0.5",
|
4621 |
+
"source": {
|
4622 |
+
"type": "git",
|
4623 |
+
"url": "https://github.com/wp-cli/widget-command.git",
|
4624 |
+
"reference": "657e0f77d80c892f8f72f90a3a25112c254386df"
|
4625 |
+
},
|
4626 |
+
"dist": {
|
4627 |
+
"type": "zip",
|
4628 |
+
"url": "https://api.github.com/repos/wp-cli/widget-command/zipball/657e0f77d80c892f8f72f90a3a25112c254386df",
|
4629 |
+
"reference": "657e0f77d80c892f8f72f90a3a25112c254386df",
|
4630 |
+
"shasum": ""
|
4631 |
+
},
|
4632 |
+
"require-dev": {
|
4633 |
+
"behat/behat": "~2.5",
|
4634 |
+
"wp-cli/wp-cli": "*"
|
4635 |
+
},
|
4636 |
+
"type": "wp-cli-package",
|
4637 |
+
"extra": {
|
4638 |
+
"branch-alias": {
|
4639 |
+
"dev-master": "1.x-dev"
|
4640 |
+
},
|
4641 |
+
"commands": [
|
4642 |
+
"widget",
|
4643 |
+
"widget add",
|
4644 |
+
"widget deactivate",
|
4645 |
+
"widget delete",
|
4646 |
+
"widget list",
|
4647 |
+
"widget move",
|
4648 |
+
"widget reset",
|
4649 |
+
"widget update",
|
4650 |
+
"sidebar",
|
4651 |
+
"sidebar list"
|
4652 |
+
],
|
4653 |
+
"bundled": true
|
4654 |
+
},
|
4655 |
+
"autoload": {
|
4656 |
+
"psr-4": {
|
4657 |
+
"": "src/"
|
4658 |
+
},
|
4659 |
+
"files": [
|
4660 |
+
"widget-command.php"
|
4661 |
+
]
|
4662 |
+
},
|
4663 |
+
"notification-url": "https://packagist.org/downloads/",
|
4664 |
+
"license": [
|
4665 |
+
"MIT"
|
4666 |
+
],
|
4667 |
+
"authors": [
|
4668 |
+
{
|
4669 |
+
"name": "Daniel Bachhuber",
|
4670 |
+
"email": "daniel@runcommand.io",
|
4671 |
+
"homepage": "https://runcommand.io"
|
4672 |
+
}
|
4673 |
+
],
|
4674 |
+
"description": "Adds, moves, and removes widgets; lists sidebars.",
|
4675 |
+
"homepage": "https://github.com/wp-cli/widget-command",
|
4676 |
+
"time": "2017-12-08T17:45:57+00:00"
|
4677 |
+
},
|
4678 |
+
{
|
4679 |
+
"name": "wp-cli/wp-cli",
|
4680 |
+
"version": "v1.5.1",
|
4681 |
+
"source": {
|
4682 |
+
"type": "git",
|
4683 |
+
"url": "https://github.com/wp-cli/wp-cli.git",
|
4684 |
+
"reference": "3aac73bc4d629372531f3e15bbb67945d19b5d5a"
|
4685 |
+
},
|
4686 |
+
"dist": {
|
4687 |
+
"type": "zip",
|
4688 |
+
"url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/3aac73bc4d629372531f3e15bbb67945d19b5d5a",
|
4689 |
+
"reference": "3aac73bc4d629372531f3e15bbb67945d19b5d5a",
|
4690 |
+
"shasum": ""
|
4691 |
+
},
|
4692 |
+
"require": {
|
4693 |
+
"composer/composer": "^1.2.0",
|
4694 |
+
"composer/semver": "~1.0",
|
4695 |
+
"justinrainbow/json-schema": "~5.2.5",
|
4696 |
+
"mustache/mustache": "~2.4",
|
4697 |
+
"php": ">=5.3.29",
|
4698 |
+
"ramsey/array_column": "~1.1",
|
4699 |
+
"rmccue/requests": "~1.6",
|
4700 |
+
"symfony/config": "^2.7|^3.0",
|
4701 |
+
"symfony/console": "^2.7|^3.0",
|
4702 |
+
"symfony/debug": "^2.7|^3.0",
|
4703 |
+
"symfony/dependency-injection": "^2.7|^3.0",
|
4704 |
+
"symfony/event-dispatcher": "^2.7|^3.0",
|
4705 |
+
"symfony/filesystem": "^2.7|^3.0",
|
4706 |
+
"symfony/finder": "^2.7|^3.0",
|
4707 |
+
"symfony/process": "^2.1|^3.0",
|
4708 |
+
"symfony/translation": "^2.7|^3.0",
|
4709 |
+
"symfony/yaml": "^2.7|^3.0",
|
4710 |
+
"wp-cli/autoload-splitter": "^0.1.5",
|
4711 |
+
"wp-cli/cache-command": "^1.0",
|
4712 |
+
"wp-cli/checksum-command": "^1.0",
|
4713 |
+
"wp-cli/config-command": "^1.0",
|
4714 |
+
"wp-cli/core-command": "^1.0",
|
4715 |
+
"wp-cli/cron-command": "^1.0",
|
4716 |
+
"wp-cli/db-command": "^1.0",
|
4717 |
+
"wp-cli/embed-command": "^1.0",
|
4718 |
+
"wp-cli/entity-command": "^1.0",
|
4719 |
+
"wp-cli/eval-command": "^1.0",
|
4720 |
+
"wp-cli/export-command": "^1.0",
|
4721 |
+
"wp-cli/extension-command": "^1.0",
|
4722 |
+
"wp-cli/import-command": "^1.0",
|
4723 |
+
"wp-cli/language-command": "^1.0",
|
4724 |
+
"wp-cli/media-command": "^1.0",
|
4725 |
+
"wp-cli/mustangostang-spyc": "^0.6.3",
|
4726 |
+
"wp-cli/package-command": "^1.0",
|
4727 |
+
"wp-cli/php-cli-tools": "~0.11.2",
|
4728 |
+
"wp-cli/rewrite-command": "^1.0",
|
4729 |
+
"wp-cli/role-command": "^1.0",
|
4730 |
+
"wp-cli/scaffold-command": "^1.0",
|
4731 |
+
"wp-cli/search-replace-command": "^1.0",
|
4732 |
+
"wp-cli/server-command": "^1.0",
|
4733 |
+
"wp-cli/shell-command": "^1.0",
|
4734 |
+
"wp-cli/super-admin-command": "^1.0",
|
4735 |
+
"wp-cli/widget-command": "^1.0"
|
4736 |
+
},
|
4737 |
+
"require-dev": {
|
4738 |
+
"behat/behat": "2.5.*",
|
4739 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.4.3",
|
4740 |
+
"phpunit/phpunit": "3.7.*",
|
4741 |
+
"roave/security-advisories": "dev-master",
|
4742 |
+
"wimg/php-compatibility": "^8.0",
|
4743 |
+
"wp-coding-standards/wpcs": "^0.13.1"
|
4744 |
+
},
|
4745 |
+
"suggest": {
|
4746 |
+
"psy/psysh": "Enhanced `wp shell` functionality"
|
4747 |
+
},
|
4748 |
+
"bin": [
|
4749 |
+
"bin/wp.bat",
|
4750 |
+
"bin/wp"
|
4751 |
+
],
|
4752 |
+
"type": "library",
|
4753 |
+
"extra": {
|
4754 |
+
"branch-alias": {
|
4755 |
+
"dev-master": "1.5.x-dev"
|
4756 |
+
},
|
4757 |
+
"autoload-splitter": {
|
4758 |
+
"splitter-logic": "WP_CLI\\AutoloadSplitter",
|
4759 |
+
"splitter-location": "php/WP_CLI/AutoloadSplitter.php",
|
4760 |
+
"split-target-prefix-true": "autoload_commands",
|
4761 |
+
"split-target-prefix-false": "autoload_framework"
|
4762 |
+
}
|
4763 |
+
},
|
4764 |
+
"autoload": {
|
4765 |
+
"psr-0": {
|
4766 |
+
"WP_CLI": "php"
|
4767 |
+
},
|
4768 |
+
"psr-4": {
|
4769 |
+
"": "php/commands/src"
|
4770 |
+
}
|
4771 |
+
},
|
4772 |
+
"notification-url": "https://packagist.org/downloads/",
|
4773 |
+
"license": [
|
4774 |
+
"MIT"
|
4775 |
+
],
|
4776 |
+
"description": "The command line interface for WordPress",
|
4777 |
+
"homepage": "https://wp-cli.org",
|
4778 |
+
"keywords": [
|
4779 |
+
"cli",
|
4780 |
+
"wordpress"
|
4781 |
+
],
|
4782 |
+
"time": "2018-05-31T11:04:05+00:00"
|
4783 |
+
},
|
4784 |
+
{
|
4785 |
+
"name": "wp-cli/wp-config-transformer",
|
4786 |
+
"version": "v1.2.6",
|
4787 |
+
"source": {
|
4788 |
+
"type": "git",
|
4789 |
+
"url": "https://github.com/wp-cli/wp-config-transformer.git",
|
4790 |
+
"reference": "1ca98343443a8e4585865db5f50e8e6121fee70b"
|
4791 |
+
},
|
4792 |
+
"dist": {
|
4793 |
+
"type": "zip",
|
4794 |
+
"url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/1ca98343443a8e4585865db5f50e8e6121fee70b",
|
4795 |
+
"reference": "1ca98343443a8e4585865db5f50e8e6121fee70b",
|
4796 |
+
"shasum": ""
|
4797 |
+
},
|
4798 |
+
"require": {
|
4799 |
+
"php": ">=5.3.29"
|
4800 |
+
},
|
4801 |
+
"require-dev": {
|
4802 |
+
"composer/composer": "^1.5.6",
|
4803 |
+
"phpunit/phpunit": "^6.5.5",
|
4804 |
+
"wp-coding-standards/wpcs": "^0.14.0 || ^1.0.0 || ^2.0.0"
|
4805 |
+
},
|
4806 |
+
"type": "library",
|
4807 |
+
"autoload": {
|
4808 |
+
"files": [
|
4809 |
+
"src/WPConfigTransformer.php"
|
4810 |
+
]
|
4811 |
+
},
|
4812 |
+
"notification-url": "https://packagist.org/downloads/",
|
4813 |
+
"license": [
|
4814 |
+
"MIT"
|
4815 |
+
],
|
4816 |
+
"authors": [
|
4817 |
+
{
|
4818 |
+
"name": "Frankie Jarrett",
|
4819 |
+
"email": "fjarrett@gmail.com"
|
4820 |
+
}
|
4821 |
+
],
|
4822 |
+
"description": "Programmatically edit a wp-config.php file.",
|
4823 |
+
"time": "2019-07-23T17:24:43+00:00"
|
4824 |
+
},
|
4825 |
+
{
|
4826 |
+
"name": "wp-coding-standards/wpcs",
|
4827 |
+
"version": "2.1.1",
|
4828 |
+
"source": {
|
4829 |
+
"type": "git",
|
4830 |
+
"url": "https://github.com/WordPress/WordPress-Coding-Standards.git",
|
4831 |
+
"reference": "bd9c33152115e6741e3510ff7189605b35167908"
|
4832 |
+
},
|
4833 |
+
"dist": {
|
4834 |
+
"type": "zip",
|
4835 |
+
"url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/bd9c33152115e6741e3510ff7189605b35167908",
|
4836 |
+
"reference": "bd9c33152115e6741e3510ff7189605b35167908",
|
4837 |
+
"shasum": ""
|
4838 |
+
},
|
4839 |
+
"require": {
|
4840 |
+
"php": ">=5.4",
|
4841 |
+
"squizlabs/php_codesniffer": "^3.3.1"
|
4842 |
+
},
|
4843 |
+
"require-dev": {
|
4844 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5.0",
|
4845 |
+
"phpcompatibility/php-compatibility": "^9.0",
|
4846 |
+
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
|
4847 |
+
},
|
4848 |
+
"suggest": {
|
4849 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.5.0 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically."
|
4850 |
+
},
|
4851 |
+
"type": "phpcodesniffer-standard",
|
4852 |
+
"notification-url": "https://packagist.org/downloads/",
|
4853 |
+
"license": [
|
4854 |
+
"MIT"
|
4855 |
+
],
|
4856 |
+
"authors": [
|
4857 |
+
{
|
4858 |
+
"name": "Contributors",
|
4859 |
+
"homepage": "https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/graphs/contributors"
|
4860 |
+
}
|
4861 |
+
],
|
4862 |
+
"description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions",
|
4863 |
+
"keywords": [
|
4864 |
+
"phpcs",
|
4865 |
+
"standards",
|
4866 |
+
"wordpress"
|
4867 |
+
],
|
4868 |
+
"time": "2019-05-21T02:50:00+00:00"
|
4869 |
+
}
|
4870 |
+
],
|
4871 |
+
"aliases": [],
|
4872 |
+
"minimum-stability": "dev",
|
4873 |
+
"stability-flags": [],
|
4874 |
+
"prefer-stable": true,
|
4875 |
+
"prefer-lowest": false,
|
4876 |
+
"platform": [],
|
4877 |
+
"platform-dev": []
|
4878 |
+
}
|
includes/vendor/action-scheduler/docs/_layouts/default.html
CHANGED
@@ -21,13 +21,13 @@
|
|
21 |
<body>
|
22 |
|
23 |
<header>
|
24 |
-
<a class="github-corner" href="https://github.com/
|
25 |
<svg width="80" height="80" viewBox="0 0 250 250" style="fill:#b5e853; color:#151513; position: fixed; top: 0; border: 0; right: 0;" aria-hidden="true">
|
26 |
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>
|
27 |
</svg>
|
28 |
</a>
|
29 |
<div class="container">
|
30 |
-
<p><a href="/usage/">Usage</a> | <a href="/admin/">Admin</a> | <a href="/wp-cli/">WP-CLI</a> | <a href="/perf/">Background Processing at Scale</a> | <a href="/api/">API</a> | <a href="/faq/">FAQ</a>
|
31 |
<h1><a href="/">action-scheduler</a></h1>
|
32 |
<h2>A scalable, traceable job queue for background processing large queues of tasks in WordPress. Designed for distribution in WordPress plugins - no server access required.</h2>
|
33 |
</div>
|
@@ -42,9 +42,6 @@
|
|
42 |
<footer>
|
43 |
<div class="container">
|
44 |
<p><a href="/usage/">Usage</a> | <a href="/admin/">Admin</a> | <a href="/wp-cli/">WP-CLI</a> | <a href="/perf/">Background Processing at Scale</a> | <a href="/api/">API</a> | <a href="/faq/">FAQ</a>
|
45 |
-
<p class="footer-image">
|
46 |
-
<a href="https://prospress.com"><img src="http://pic.pros.pr/eb8dcec9bd54/prospress-hacker-green-logo.png" width="120"></a>
|
47 |
-
</p>
|
48 |
</div>
|
49 |
</footer>
|
50 |
|
21 |
<body>
|
22 |
|
23 |
<header>
|
24 |
+
<a class="github-corner" href="https://github.com/woocommerce/action-scheduler/" aria-label="View on GitHub">
|
25 |
<svg width="80" height="80" viewBox="0 0 250 250" style="fill:#b5e853; color:#151513; position: fixed; top: 0; border: 0; right: 0;" aria-hidden="true">
|
26 |
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>
|
27 |
</svg>
|
28 |
</a>
|
29 |
<div class="container">
|
30 |
+
<p><a href="/usage/">Usage</a> | <a href="/admin/">Admin</a> | <a href="/wp-cli/">WP-CLI</a> | <a href="/perf/">Background Processing at Scale</a> | <a href="/api/">API</a> | <a href="/faq/">FAQ</a> | <a href="/version3-0/">Version 3.0</a>
|
31 |
<h1><a href="/">action-scheduler</a></h1>
|
32 |
<h2>A scalable, traceable job queue for background processing large queues of tasks in WordPress. Designed for distribution in WordPress plugins - no server access required.</h2>
|
33 |
</div>
|
42 |
<footer>
|
43 |
<div class="container">
|
44 |
<p><a href="/usage/">Usage</a> | <a href="/admin/">Admin</a> | <a href="/wp-cli/">WP-CLI</a> | <a href="/perf/">Background Processing at Scale</a> | <a href="/api/">API</a> | <a href="/faq/">FAQ</a>
|
|
|
|
|
|
|
45 |
</div>
|
46 |
</footer>
|
47 |
|
includes/vendor/action-scheduler/docs/android-chrome-192x192.png
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/android-chrome-256x256.png
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/api.md
CHANGED
@@ -5,7 +5,7 @@ description: Reference guide for background processing functions provided by the
|
|
5 |
|
6 |
Action Scheduler provides a range of functions for scheduling hooks to run at some time in the future on one or more occassions.
|
7 |
|
8 |
-
To understand the scheduling
|
9 |
|
10 |
## WP-Cron APIs vs. Action Scheduler APIs
|
11 |
|
@@ -13,39 +13,62 @@ The Action Scheduler API functions are designed to mirror the WordPress [WP-Cron
|
|
13 |
|
14 |
Functions return similar values and accept similar arguments to their WP-Cron counterparts. The notable differences are:
|
15 |
|
16 |
-
* `as_schedule_single_action()` & `as_schedule_recurring_action()` will return the
|
17 |
* `as_schedule_recurring_action()` takes an interval in seconds as the recurring interval rather than an arbitrary string
|
18 |
* `as_schedule_single_action()` & `as_schedule_recurring_action()` can accept a `$group` parameter to group different actions for the one plugin together.
|
19 |
* the `wp_` prefix is substituted with `as_` and the term `event` is replaced with `action`
|
20 |
|
21 |
## API Function Availability
|
22 |
|
23 |
-
As mentioned in the [Usage - Load Order](/usage/#load-order) section, Action Scheduler will initialize itself on the `'init'` hook with priority `1`. While API functions are loaded prior to this and
|
24 |
|
25 |
Do not use Action Scheduler API functions prior to `'init'` hook with priority `1`. Doing so could lead to unexpected results, like data being stored in the incorrect location.
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
## Function Reference / `as_schedule_single_action()`
|
28 |
|
29 |
### Description
|
30 |
|
31 |
-
Schedule an action to run one time.
|
32 |
|
33 |
### Usage
|
34 |
|
35 |
```php
|
36 |
-
as_schedule_single_action( $timestamp, $hook, $args, $group )
|
37 |
-
|
38 |
|
39 |
### Parameters
|
40 |
|
41 |
-
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
42 |
-
- **$hook** (string)(required) Name of the action hook.
|
43 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
44 |
-
- **$group** (
|
45 |
|
46 |
### Return value
|
47 |
|
48 |
-
(integer) the action's ID
|
49 |
|
50 |
|
51 |
## Function Reference / `as_schedule_recurring_action()`
|
@@ -57,20 +80,20 @@ Schedule an action to run repeatedly with a specified interval in seconds.
|
|
57 |
### Usage
|
58 |
|
59 |
```php
|
60 |
-
as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args, $group )
|
61 |
-
|
62 |
|
63 |
### Parameters
|
64 |
|
65 |
-
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
66 |
-
- **$interval_in_seconds** (integer)(required) How long to wait between runs.
|
67 |
-
- **$hook** (string)(required) Name of the action hook.
|
68 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
69 |
-
- **$group** (
|
70 |
|
71 |
### Return value
|
72 |
|
73 |
-
(integer) the action's ID
|
74 |
|
75 |
|
76 |
## Function Reference / `as_schedule_cron_action()`
|
@@ -82,44 +105,66 @@ Schedule an action that recurs on a cron-like schedule.
|
|
82 |
### Usage
|
83 |
|
84 |
```php
|
85 |
-
as_schedule_cron_action( $timestamp, $schedule, $hook, $args, $group )
|
86 |
-
|
87 |
|
88 |
### Parameters
|
89 |
|
90 |
-
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
91 |
-
- **$schedule** (string)(required) $schedule A cron-
|
92 |
-
- **$hook** (string)(required) Name of the action hook.
|
93 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
94 |
-
- **$group** (
|
95 |
|
96 |
### Return value
|
97 |
|
98 |
-
(integer) the action's ID
|
99 |
|
100 |
|
101 |
## Function Reference / `as_unschedule_action()`
|
102 |
|
103 |
### Description
|
104 |
|
105 |
-
Cancel the next occurrence of a
|
106 |
|
107 |
### Usage
|
108 |
|
109 |
```php
|
110 |
-
as_unschedule_action( $hook, $args, $group )
|
111 |
-
|
112 |
|
113 |
### Parameters
|
114 |
|
115 |
-
- **$hook** (string)(required) Name of the action hook.
|
116 |
-
- **$args** (array) Arguments
|
117 |
-
- **$group** (
|
118 |
|
119 |
### Return value
|
120 |
|
121 |
(null)
|
122 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
|
124 |
## Function Reference / `as_next_scheduled_action()`
|
125 |
|
@@ -130,14 +175,14 @@ Returns the next timestamp for a scheduled action.
|
|
130 |
### Usage
|
131 |
|
132 |
```php
|
133 |
-
as_next_scheduled_action( $hook, $args, $group )
|
134 |
-
|
135 |
|
136 |
### Parameters
|
137 |
|
138 |
- **$hook** (string)(required) Name of the action hook. Default: _none_.
|
139 |
-
- **$args** (array) Arguments
|
140 |
-
- **$group** (
|
141 |
|
142 |
### Return value
|
143 |
|
@@ -153,8 +198,8 @@ Find scheduled actions.
|
|
153 |
### Usage
|
154 |
|
155 |
```php
|
156 |
-
as_get_scheduled_actions( $args, $return_format )
|
157 |
-
|
158 |
|
159 |
### Parameters
|
160 |
|
@@ -176,4 +221,4 @@ as_get_scheduled_actions( $args, $return_format )
|
|
176 |
|
177 |
### Return value
|
178 |
|
179 |
-
(array) Array of
|
5 |
|
6 |
Action Scheduler provides a range of functions for scheduling hooks to run at some time in the future on one or more occassions.
|
7 |
|
8 |
+
To understand the scheduling functions, it can help to think of them as extensions to WordPress' `do_action()` function that add the ability to delay and repeat when the hook will be triggered.
|
9 |
|
10 |
## WP-Cron APIs vs. Action Scheduler APIs
|
11 |
|
13 |
|
14 |
Functions return similar values and accept similar arguments to their WP-Cron counterparts. The notable differences are:
|
15 |
|
16 |
+
* `as_schedule_single_action()` & `as_schedule_recurring_action()` will return the ID of the scheduled action rather than boolean indicating whether the event was scheduled
|
17 |
* `as_schedule_recurring_action()` takes an interval in seconds as the recurring interval rather than an arbitrary string
|
18 |
* `as_schedule_single_action()` & `as_schedule_recurring_action()` can accept a `$group` parameter to group different actions for the one plugin together.
|
19 |
* the `wp_` prefix is substituted with `as_` and the term `event` is replaced with `action`
|
20 |
|
21 |
## API Function Availability
|
22 |
|
23 |
+
As mentioned in the [Usage - Load Order](/usage/#load-order) section, Action Scheduler will initialize itself on the `'init'` hook with priority `1`. While API functions are loaded prior to this and can be called, they should not be called until after `'init'` with priority `1`, because each component, like the data store, has not yet been initialized.
|
24 |
|
25 |
Do not use Action Scheduler API functions prior to `'init'` hook with priority `1`. Doing so could lead to unexpected results, like data being stored in the incorrect location.
|
26 |
|
27 |
+
## Function Reference / `as_enqueue_async_action()`
|
28 |
+
|
29 |
+
### Description
|
30 |
+
|
31 |
+
Enqueue an action to run one time, as soon as possible.
|
32 |
+
|
33 |
+
### Usage
|
34 |
+
|
35 |
+
```php
|
36 |
+
as_enqueue_async_action( $hook, $args, $group );
|
37 |
+
```
|
38 |
+
|
39 |
+
### Parameters
|
40 |
+
|
41 |
+
- **$hook** (string)(required) Name of the action hook.
|
42 |
+
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
43 |
+
- **$group** (string) The group to assign this job to. Default: _''_.
|
44 |
+
|
45 |
+
### Return value
|
46 |
+
|
47 |
+
(integer) the action's ID.
|
48 |
+
|
49 |
+
|
50 |
## Function Reference / `as_schedule_single_action()`
|
51 |
|
52 |
### Description
|
53 |
|
54 |
+
Schedule an action to run one time at some defined point in the future.
|
55 |
|
56 |
### Usage
|
57 |
|
58 |
```php
|
59 |
+
as_schedule_single_action( $timestamp, $hook, $args, $group );
|
60 |
+
```
|
61 |
|
62 |
### Parameters
|
63 |
|
64 |
+
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
65 |
+
- **$hook** (string)(required) Name of the action hook.
|
66 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
67 |
+
- **$group** (string) The group to assign this job to. Default: _''_.
|
68 |
|
69 |
### Return value
|
70 |
|
71 |
+
(integer) the action's ID.
|
72 |
|
73 |
|
74 |
## Function Reference / `as_schedule_recurring_action()`
|
80 |
### Usage
|
81 |
|
82 |
```php
|
83 |
+
as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args, $group );
|
84 |
+
```
|
85 |
|
86 |
### Parameters
|
87 |
|
88 |
+
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
89 |
+
- **$interval_in_seconds** (integer)(required) How long to wait between runs.
|
90 |
+
- **$hook** (string)(required) Name of the action hook.
|
91 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
92 |
+
- **$group** (string) The group to assign this job to. Default: _''_.
|
93 |
|
94 |
### Return value
|
95 |
|
96 |
+
(integer) the action's ID.
|
97 |
|
98 |
|
99 |
## Function Reference / `as_schedule_cron_action()`
|
105 |
### Usage
|
106 |
|
107 |
```php
|
108 |
+
as_schedule_cron_action( $timestamp, $schedule, $hook, $args, $group );
|
109 |
+
```
|
110 |
|
111 |
### Parameters
|
112 |
|
113 |
+
- **$timestamp** (integer)(required) The Unix timestamp representing the date you want the action to run.
|
114 |
+
- **$schedule** (string)(required) $schedule A cron-like schedule string, see http://en.wikipedia.org/wiki/Cron.
|
115 |
+
- **$hook** (string)(required) Name of the action hook.
|
116 |
- **$args** (array) Arguments to pass to callbacks when the hook triggers. Default: _`array()`_.
|
117 |
+
- **$group** (string) The group to assign this job to. Default: _''_.
|
118 |
|
119 |
### Return value
|
120 |
|
121 |
+
(integer) the action's ID.
|
122 |
|
123 |
|
124 |
## Function Reference / `as_unschedule_action()`
|
125 |
|
126 |
### Description
|
127 |
|
128 |
+
Cancel the next occurrence of a scheduled action.
|
129 |
|
130 |
### Usage
|
131 |
|
132 |
```php
|
133 |
+
as_unschedule_action( $hook, $args, $group );
|
134 |
+
```
|
135 |
|
136 |
### Parameters
|
137 |
|
138 |
+
- **$hook** (string)(required) Name of the action hook.
|
139 |
+
- **$args** (array) Arguments passed to callbacks when the hook triggers. Default: _`array()`_.
|
140 |
+
- **$group** (string) The group the job is assigned to. Default: _''_.
|
141 |
|
142 |
### Return value
|
143 |
|
144 |
(null)
|
145 |
|
146 |
+
## Function Reference / `as_unschedule_all_actions()`
|
147 |
+
|
148 |
+
### Description
|
149 |
+
|
150 |
+
Cancel all occurrences of a scheduled action.
|
151 |
+
|
152 |
+
### Usage
|
153 |
+
|
154 |
+
```php
|
155 |
+
as_unschedule_all_actions( $hook, $args, $group )
|
156 |
+
```
|
157 |
+
|
158 |
+
### Parameters
|
159 |
+
|
160 |
+
- **$hook** (string)(required) Name of the action hook.
|
161 |
+
- **$args** (array) Arguments passed to callbacks when the hook triggers. Default: _`array()`_.
|
162 |
+
- **$group** (string) The group the job is assigned to. Default: _''_.
|
163 |
+
|
164 |
+
### Return value
|
165 |
+
|
166 |
+
(string|null) The scheduled action ID if a scheduled action was found, or null if no matching action found.
|
167 |
+
|
168 |
|
169 |
## Function Reference / `as_next_scheduled_action()`
|
170 |
|
175 |
### Usage
|
176 |
|
177 |
```php
|
178 |
+
as_next_scheduled_action( $hook, $args, $group );
|
179 |
+
```
|
180 |
|
181 |
### Parameters
|
182 |
|
183 |
- **$hook** (string)(required) Name of the action hook. Default: _none_.
|
184 |
+
- **$args** (array) Arguments passed to callbacks when the hook triggers. Default: _`array()`_.
|
185 |
+
- **$group** (string) The group the job is assigned to. Default: _''_.
|
186 |
|
187 |
### Return value
|
188 |
|
198 |
### Usage
|
199 |
|
200 |
```php
|
201 |
+
as_get_scheduled_actions( $args, $return_format );
|
202 |
+
```
|
203 |
|
204 |
### Parameters
|
205 |
|
221 |
|
222 |
### Return value
|
223 |
|
224 |
+
(array) Array of action rows matching the criteria specified with `$args`.
|
includes/vendor/action-scheduler/docs/apple-touch-icon.png
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/assets/css/style.scss
CHANGED
@@ -35,7 +35,7 @@ footer {
|
|
35 |
animation:octocat-wave 560ms ease-in-out
|
36 |
}
|
37 |
|
38 |
-
@keyframes octocat-wave{
|
39 |
0%,100%{
|
40 |
transform:rotate(0)
|
41 |
}
|
@@ -51,7 +51,7 @@ footer {
|
|
51 |
.github-corner:hover .octo-arm {
|
52 |
animation:none
|
53 |
}
|
54 |
-
.github-corner .octo-arm{
|
55 |
animation:octocat-wave 560ms ease-in-out
|
56 |
}
|
57 |
}
|
35 |
animation:octocat-wave 560ms ease-in-out
|
36 |
}
|
37 |
|
38 |
+
@keyframes octocat-wave {
|
39 |
0%,100%{
|
40 |
transform:rotate(0)
|
41 |
}
|
51 |
.github-corner:hover .octo-arm {
|
52 |
animation:none
|
53 |
}
|
54 |
+
.github-corner .octo-arm {
|
55 |
animation:octocat-wave 560ms ease-in-out
|
56 |
}
|
57 |
}
|
includes/vendor/action-scheduler/docs/faq.md
CHANGED
@@ -4,11 +4,11 @@
|
|
4 |
|
5 |
Action Scheduler is designed to be used and released in plugins. It avoids redeclaring public API functions when more than one copy of the library is being loaded by different plugins. It will also load only the most recent version of itself (by checking registered versions after all plugins are loaded on the `'plugins_loaded'` hook).
|
6 |
|
7 |
-
To use it in your plugin, simply require the `action-scheduler/action-scheduler.php` file. Action Scheduler will take care of the rest.
|
8 |
|
9 |
### I don't want to use WP-Cron. Does Action Scheduler depend on WP-Cron?
|
10 |
|
11 |
-
By default, Action Scheduler is initiated by WP-Cron. However, it has no dependency on the WP-Cron system. You can initiate the Action Scheduler queue in other ways with just one or two lines of code.
|
12 |
|
13 |
For example, you can start a queue directly by calling:
|
14 |
|
@@ -19,30 +19,38 @@ ActionScheduler::runner()->run();
|
|
19 |
Or trigger the `'action_scheduler_run_queue'` hook and let Action Scheduler do it for you:
|
20 |
|
21 |
```php
|
22 |
-
do_action( 'action_scheduler_run_queue' );
|
23 |
```
|
24 |
|
25 |
-
Further customization can be done by extending the `ActionScheduler_Abstract_QueueRunner` class to create a custom Queue Runner. For an example of a customized queue runner, see the [`ActionScheduler_WPCLI_QueueRunner`](https://github.com/
|
26 |
|
27 |
-
Want to create some other method for initiating Action Scheduler? [Open a new issue](https://github.com/
|
28 |
|
29 |
### I don't want to use WP-Cron, ever. Does Action Scheduler replace WP-Cron?
|
30 |
|
31 |
By default, Action Scheduler is designed to work alongside WP-Cron and not change any of its behaviour. This helps avoid unexpectedly overriding WP-Cron on sites installing your plugin, which may have nothing to do with WP-Cron.
|
32 |
|
33 |
-
However, we can understand why you might want to replace WP-Cron completely in environments within
|
34 |
|
35 |
You could use the `'schedule_event'` hook in WordPress to use Action Scheduler for only newly scheduled WP-Cron jobs and map the `$event` param to Action Scheduler API functions.
|
36 |
|
37 |
Alternatively, you can use a combination of the `'pre_update_option_cron'` and `'pre_option_cron'` hooks to override all new and previously scheduled WP-Cron jobs (similar to the way [Cavalcade](https://github.com/humanmade/Cavalcade) does it).
|
38 |
|
39 |
-
If you'd like to create a plugin to do this automatically and want to share your work with others, [open a new issue to let us know](https://github.com/
|
40 |
|
41 |
-
###
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
Of course! Action Scheduler data storage is completely swappable, and always has been.
|
44 |
|
45 |
-
|
46 |
|
47 |
To implement a custom store:
|
48 |
|
@@ -56,11 +64,9 @@ function eg_define_custom_store( $existing_storage_class ) {
|
|
56 |
add_filter( 'action_scheduler_store_class', 'eg_define_custom_store', 10, 1 );
|
57 |
```
|
58 |
|
59 |
-
Take a look at the `
|
60 |
-
|
61 |
-
If you'd like to create a plugin to do this automatically and release it publicly to help others, [open a new issue to let us know](https://github.com/Prospress/action-scheduler/issues/new), we'd love to help you with it.
|
62 |
|
63 |
-
|
64 |
|
65 |
### Can I use a different storage scheme just for logging?
|
66 |
|
@@ -78,7 +84,7 @@ function eg_define_custom_logger( $existing_storage_class ) {
|
|
78 |
add_filter( 'action_scheduler_logger_class', 'eg_define_custom_logger', 10, 1 );
|
79 |
```
|
80 |
|
81 |
-
Take a look at the `
|
82 |
|
83 |
### I want to run Action Scheduler only on a dedicated application server in my cluster. Can I do that?
|
84 |
|
@@ -96,6 +102,6 @@ It requires no setup, and won't override any WordPress APIs (unless you want it
|
|
96 |
|
97 |
### How does Action Scheduler work on WordPress Multisite?
|
98 |
|
99 |
-
Action Scheduler is designed to manage the scheduled actions on a single site. It has no special handling for running queues across multiple sites in a multisite network. That said, because
|
100 |
|
101 |
-
If you'd like to create a multisite plugin to do this and release it publicly to help others, [open a new issue to let us know](https://github.com/
|
4 |
|
5 |
Action Scheduler is designed to be used and released in plugins. It avoids redeclaring public API functions when more than one copy of the library is being loaded by different plugins. It will also load only the most recent version of itself (by checking registered versions after all plugins are loaded on the `'plugins_loaded'` hook).
|
6 |
|
7 |
+
To use it in your plugin (or theme), simply require the `action-scheduler/action-scheduler.php` file. Action Scheduler will take care of the rest. __Note:__ Action Scheduler is only loaded from a theme if it is not included in any active plugins.
|
8 |
|
9 |
### I don't want to use WP-Cron. Does Action Scheduler depend on WP-Cron?
|
10 |
|
11 |
+
By default, Action Scheduler is initiated by WP-Cron (and the `'shutdown'` hook on admin requests). However, it has no dependency on the WP-Cron system. You can initiate the Action Scheduler queue in other ways with just one or two lines of code.
|
12 |
|
13 |
For example, you can start a queue directly by calling:
|
14 |
|
19 |
Or trigger the `'action_scheduler_run_queue'` hook and let Action Scheduler do it for you:
|
20 |
|
21 |
```php
|
22 |
+
do_action( 'action_scheduler_run_queue', $context_identifier );
|
23 |
```
|
24 |
|
25 |
+
Further customization can be done by extending the `ActionScheduler_Abstract_QueueRunner` class to create a custom Queue Runner. For an example of a customized queue runner, see the [`ActionScheduler_WPCLI_QueueRunner`](https://github.com/woocommerce/action-scheduler/blob/master/classes/ActionScheduler_WPCLI_QueueRunner.php), which is used when running WP CLI.
|
26 |
|
27 |
+
Want to create some other method for initiating Action Scheduler? [Open a new issue](https://github.com/woocommerce/action-scheduler/issues/new), we'd love to help you with it.
|
28 |
|
29 |
### I don't want to use WP-Cron, ever. Does Action Scheduler replace WP-Cron?
|
30 |
|
31 |
By default, Action Scheduler is designed to work alongside WP-Cron and not change any of its behaviour. This helps avoid unexpectedly overriding WP-Cron on sites installing your plugin, which may have nothing to do with WP-Cron.
|
32 |
|
33 |
+
However, we can understand why you might want to replace WP-Cron completely in environments within your control, especially as it gets you the advantages of Action Scheduler. This should be possible without too much code.
|
34 |
|
35 |
You could use the `'schedule_event'` hook in WordPress to use Action Scheduler for only newly scheduled WP-Cron jobs and map the `$event` param to Action Scheduler API functions.
|
36 |
|
37 |
Alternatively, you can use a combination of the `'pre_update_option_cron'` and `'pre_option_cron'` hooks to override all new and previously scheduled WP-Cron jobs (similar to the way [Cavalcade](https://github.com/humanmade/Cavalcade) does it).
|
38 |
|
39 |
+
If you'd like to create a plugin to do this automatically and want to share your work with others, [open a new issue to let us know](https://github.com/woocommerce/action-scheduler/issues/new), we'd love to help you with it.
|
40 |
|
41 |
+
### How does Action Scheduler store its data?
|
42 |
+
|
43 |
+
Action Scheduler 3.0 and newer stores data in custom tables prefixed with `actionscheduler_`. For the list of all tables and their schemas, refer to the `ActionScheduler_StoreSchema` class.
|
44 |
+
|
45 |
+
Prior to Action 3.0, actions were a custom post type, and data was stored in `wp_posts`, `wp_postmeta` and related tables.
|
46 |
+
|
47 |
+
Action Scheduler 3+ migrates data from the custom post type to custom tables.
|
48 |
+
|
49 |
+
### Can I use a different storage scheme?
|
50 |
|
51 |
Of course! Action Scheduler data storage is completely swappable, and always has been.
|
52 |
|
53 |
+
If you choose to, you can actually store them anywhere, like in a remote storage service from Amazon Web Services.
|
54 |
|
55 |
To implement a custom store:
|
56 |
|
64 |
add_filter( 'action_scheduler_store_class', 'eg_define_custom_store', 10, 1 );
|
65 |
```
|
66 |
|
67 |
+
Take a look at the `classes/data-stores/ActionScheduler_DBStore.php` class for an example implementation of `ActionScheduler_Store`.
|
|
|
|
|
68 |
|
69 |
+
If you'd like to create a plugin to do this automatically and release it publicly to help others, [open a new issue to let us know](https://github.com/woocommerce/action-scheduler/issues/new), we'd love to help you with it.
|
70 |
|
71 |
### Can I use a different storage scheme just for logging?
|
72 |
|
84 |
add_filter( 'action_scheduler_logger_class', 'eg_define_custom_logger', 10, 1 );
|
85 |
```
|
86 |
|
87 |
+
Take a look at the `classes/data-stores/ActionScheduler_DBLogger.php` class for an example implementation of `ActionScheduler_Logger`.
|
88 |
|
89 |
### I want to run Action Scheduler only on a dedicated application server in my cluster. Can I do that?
|
90 |
|
102 |
|
103 |
### How does Action Scheduler work on WordPress Multisite?
|
104 |
|
105 |
+
Action Scheduler is designed to manage the scheduled actions on a single site. It has no special handling for running queues across multiple sites in a multisite network. That said, because its storage and Queue Runner are completely swappable, it would be possible to write multisite handling classes to use with it.
|
106 |
|
107 |
+
If you'd like to create a multisite plugin to do this and release it publicly to help others, [open a new issue to let us know](https://github.com/woocommerce/action-scheduler/issues/new), we'd love to help you with it.
|
includes/vendor/action-scheduler/docs/favicon-16x16.png
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/favicon-32x32.png
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/favicon.ico
CHANGED
Binary file
|
includes/vendor/action-scheduler/docs/index.md
CHANGED
@@ -3,11 +3,11 @@ title: Action Scheduler - Background Processing Job Queue for WordPress
|
|
3 |
---
|
4 |
## WordPress Job Queue with Background Processing
|
5 |
|
6 |
-
Action Scheduler is a library for triggering a WordPress hook to run at some time in the future. Each hook can be scheduled with unique data, to allow callbacks to perform operations on that data. The hook can also be scheduled to run on one or more occassions.
|
7 |
|
8 |
Think of it like an extension to `do_action()` which adds the ability to delay and repeat a hook.
|
9 |
|
10 |
-
It just so happens, this functionality also creates a robust job queue for background processing large queues of tasks in WordPress. With the
|
11 |
|
12 |
### Battle-Tested Background Processing
|
13 |
|
@@ -21,25 +21,25 @@ Action Scheduler is specifically designed for distribution in WordPress plugins
|
|
21 |
|
22 |
### How it Works
|
23 |
|
24 |
-
Action Scheduler
|
25 |
|
26 |
-
The scheduler will attempt to run every minute by attaching itself as a callback to the `'action_scheduler_run_schedule'` hook, which is scheduled using WordPress's built-in [WP-Cron](http://codex.wordpress.org/Function_Reference/wp_cron) system.
|
27 |
|
28 |
-
When triggered, Action Scheduler will check for
|
29 |
|
30 |
### Batch Processing Background Jobs
|
31 |
|
32 |
-
If there are actions to be processed, Action Scheduler will stake a unique claim for a batch of
|
33 |
|
34 |
-
|
35 |
|
36 |
-
This will continue until all actions are processed
|
37 |
|
38 |
### Housekeeping
|
39 |
|
40 |
-
Before processing a batch, the scheduler will remove any existing claims on actions which have been sitting in a queue for more than five minutes.
|
41 |
|
42 |
-
Action Scheduler will also
|
43 |
|
44 |
If an action runs for more than 5 minutes, Action Scheduler will assume the action has timed out and will mark it as failed. However, if all callbacks attached to the action were to successfully complete sometime after that 5 minute timeout, its status would later be updated to completed.
|
45 |
|
@@ -49,20 +49,18 @@ Did your background job run?
|
|
49 |
|
50 |
Never be left wondering with Action Scheduler's built-in record keeping.
|
51 |
|
52 |
-
All events for each action are logged in the
|
53 |
|
54 |
The events logged by default include when an action:
|
55 |
* is created
|
56 |
-
* starts
|
57 |
* completes
|
58 |
* fails
|
59 |
|
60 |
If it fails with an error that can be recorded, that error will be recorded in the log and visible in administration interface, making it possible to trace what went wrong at some point in the past on a site you didn't have access to in the past.
|
61 |
|
62 |
-
Actions can also be grouped together using a custom taxonomy named `action-group`.
|
63 |
-
|
64 |
## Credits
|
65 |
|
66 |
-
|
67 |
|
68 |
-
Collaboration is cool. We'd love to work with you to improve Action Scheduler. [Pull Requests](https://github.com/
|
3 |
---
|
4 |
## WordPress Job Queue with Background Processing
|
5 |
|
6 |
+
Action Scheduler is a library for triggering a WordPress hook to run at some time in the future (or as soon as possible, in the case of an async action). Each hook can be scheduled with unique data, to allow callbacks to perform operations on that data. The hook can also be scheduled to run on one or more occassions.
|
7 |
|
8 |
Think of it like an extension to `do_action()` which adds the ability to delay and repeat a hook.
|
9 |
|
10 |
+
It just so happens, this functionality also creates a robust job queue for background processing large queues of tasks in WordPress. With the addition of logging and an [administration interface](/admin/), it also provide tracability on your tasks processed in the background.
|
11 |
|
12 |
### Battle-Tested Background Processing
|
13 |
|
21 |
|
22 |
### How it Works
|
23 |
|
24 |
+
Action Scheduler stores the hook name, arguments and scheduled date for an action that should be triggered at some time in the future.
|
25 |
|
26 |
+
The scheduler will attempt to run every minute by attaching itself as a callback to the `'action_scheduler_run_schedule'` hook, which is scheduled using WordPress's built-in [WP-Cron](http://codex.wordpress.org/Function_Reference/wp_cron) system. Once per minute on, it will also check on the `'shutdown'` hook of WP Admin requests whether there are pending actions, and if there are, it will initiate a queue via an async loopback request.
|
27 |
|
28 |
+
When triggered, Action Scheduler will check for scheduled actions that have a due date at or before this point in time i.e. actions scheduled to run now or at sometime in the past. Action scheduled to run asynchronously, i.e. not scheduled, have a zero date, meaning they will always be due no matter when the check occurs.
|
29 |
|
30 |
### Batch Processing Background Jobs
|
31 |
|
32 |
+
If there are actions to be processed, Action Scheduler will stake a unique claim for a batch of 25 actions and begin processing that batch. The PHP process spawned to run the batch will then continue processing batches of 25 actions until it uses 90% of available memory or has been processing for 30 seconds.
|
33 |
|
34 |
+
At that point, if there are additional actions to process, an asynchronous loopback request will be made to the site to continue processing actions in a new request.
|
35 |
|
36 |
+
This process and the loopback requests will continue until all actions are processed.
|
37 |
|
38 |
### Housekeeping
|
39 |
|
40 |
+
Before processing a batch, the scheduler will remove any existing claims on actions which have been sitting in a queue for more than five minutes (or more specifically, 10 times the allowed time limit, which defaults to 30 seconds).
|
41 |
|
42 |
+
Action Scheduler will also delete any actions which were completed or canceled more than a month ago.
|
43 |
|
44 |
If an action runs for more than 5 minutes, Action Scheduler will assume the action has timed out and will mark it as failed. However, if all callbacks attached to the action were to successfully complete sometime after that 5 minute timeout, its status would later be updated to completed.
|
45 |
|
49 |
|
50 |
Never be left wondering with Action Scheduler's built-in record keeping.
|
51 |
|
52 |
+
All events for each action are logged in the `actionscheduler_logs` table and displayed in the [administration interface](/admin/).
|
53 |
|
54 |
The events logged by default include when an action:
|
55 |
* is created
|
56 |
+
* starts (including details of how it was run, e.g. via [WP CLI](/wp-cli/) or WP Cron)
|
57 |
* completes
|
58 |
* fails
|
59 |
|
60 |
If it fails with an error that can be recorded, that error will be recorded in the log and visible in administration interface, making it possible to trace what went wrong at some point in the past on a site you didn't have access to in the past.
|
61 |
|
|
|
|
|
62 |
## Credits
|
63 |
|
64 |
+
Action Scheduler is developed and maintained by folks at [Automattic](http://automattic.com/) with significant early development completed by [Flightless](https://flightless.us/).
|
65 |
|
66 |
+
Collaboration is cool. We'd love to work with you to improve Action Scheduler. [Pull Requests](https://github.com/woocommerce/action-scheduler/pulls) welcome.
|
includes/vendor/action-scheduler/docs/perf.md
CHANGED
@@ -4,24 +4,25 @@ description: Learn how to do WordPress background processing at scale by tuning
|
|
4 |
---
|
5 |
# Background Processing at Scale
|
6 |
|
7 |
-
Action Scheduler's default processing is designed to work reliably across all different hosting environments. In order to achieve that, the default processing thresholds are
|
8 |
|
9 |
-
Specifically, Action Scheduler will only process actions until:
|
10 |
|
11 |
* 90% of available memory is used
|
12 |
* processing another 3 actions would exceed 30 seconds of total request time, based on the average processing time for the current batch
|
|
|
13 |
|
14 |
-
|
15 |
|
16 |
-
While using [WP CLI to process queues](/wp-cli/) is the best approach to increasing processing speed, on occasion, that is not a viable option. In these cases, it's also possible to increase the processing thresholds in Action Scheduler to increase the rate at which actions are processed by the default
|
17 |
|
18 |
## Increasing Time Limit
|
19 |
|
20 |
-
By default, Action Scheduler will only process actions for a maximum of 30 seconds. This time limit minimises the risk of a script timeout on unknown hosting environments, some of which enforce 30 second timeouts.
|
21 |
|
22 |
-
If you know your host supports longer than this time limit for web requests, you can increase this time limit. This allows more actions to be processed in each request and reduces the lag between processing each queue,
|
23 |
|
24 |
-
For example, the following snippet will increase the
|
25 |
|
26 |
```php
|
27 |
function eg_increase_time_limit( $time_limit ) {
|
@@ -38,7 +39,7 @@ Some of the known host time limits are:
|
|
38 |
|
39 |
## Increasing Batch Size
|
40 |
|
41 |
-
By default, Action Scheduler will claim a batch of 25 actions. This small batch size is because the default time limit is only 30 seconds; however, if you know your actions are processing very quickly, e.g. taking microseconds not seconds, or that you have more than 30 second available to process each batch, increasing the batch size can improve performance.
|
42 |
|
43 |
This is because claiming a batch has some overhead, so the less often a batch needs to be claimed, the faster actions can be processed.
|
44 |
|
@@ -53,11 +54,11 @@ add_filter( 'action_scheduler_queue_runner_batch_size', 'eg_increase_action_sche
|
|
53 |
|
54 |
## Increasing Concurrent Batches
|
55 |
|
56 |
-
By default, Action Scheduler will run
|
57 |
|
58 |
-
However, your server may allow a large number of
|
59 |
|
60 |
-
If this is the case, you can use the `'action_scheduler_queue_runner_concurrent_batches'` filter to increase the number of
|
61 |
|
62 |
For example, to increase the allowed number of concurrent queues to 10, we can use the following code:
|
63 |
|
@@ -68,17 +69,19 @@ function eg_increase_action_scheduler_concurrent_batches( $concurrent_batches )
|
|
68 |
add_filter( 'action_scheduler_queue_runner_concurrent_batches', 'eg_increase_action_scheduler_concurrent_batches' );
|
69 |
```
|
70 |
|
|
|
|
|
71 |
## Increasing Initialisation Rate of Runners
|
72 |
|
73 |
-
By default, Action scheduler initiates at most
|
74 |
|
75 |
-
Because this action is only triggered at most once every minute,
|
76 |
|
77 |
-
To handle larger queues on more powerful servers, it's
|
78 |
|
79 |
That can be done by initiated additional secure requests to our server via loopback requests.
|
80 |
|
81 |
-
The code below demonstrates how to create 5 loopback requests each time a queue begins
|
82 |
|
83 |
```php
|
84 |
/**
|
@@ -122,6 +125,8 @@ function eg_create_additional_runners() {
|
|
122 |
add_action( 'wp_ajax_nopriv_eg_create_additional_runners', 'eg_create_additional_runners', 0 );
|
123 |
```
|
124 |
|
|
|
|
|
125 |
## High Volume Plugin
|
126 |
|
127 |
-
It's not necessary to add all of this code yourself,
|
4 |
---
|
5 |
# Background Processing at Scale
|
6 |
|
7 |
+
Action Scheduler's default processing is designed to work reliably across all different hosting environments. In order to achieve that, the default processing thresholds are more conservative than many servers could support.
|
8 |
|
9 |
+
Specifically, Action Scheduler will only process actions in a request until:
|
10 |
|
11 |
* 90% of available memory is used
|
12 |
* processing another 3 actions would exceed 30 seconds of total request time, based on the average processing time for the current batch
|
13 |
+
* in a single concurrent queue
|
14 |
|
15 |
+
While Action Scheduler will initiate an asychronous loopback request to process additional actions, on sites with very large queues, this can result in slow processing times.
|
16 |
|
17 |
+
While using [WP CLI to process queues](/wp-cli/) is the best approach to increasing processing speed, on occasion, that is not a viable option. In these cases, it's also possible to increase the processing thresholds in Action Scheduler to increase the rate at which actions are processed by the default queue runner.
|
18 |
|
19 |
## Increasing Time Limit
|
20 |
|
21 |
+
By default, Action Scheduler will only process actions for a maximum of 30 seconds in each request. This time limit minimises the risk of a script timeout on unknown hosting environments, some of which enforce 30 second timeouts.
|
22 |
|
23 |
+
If you know your host supports longer than this time limit for web requests, you can increase this time limit. This allows more actions to be processed in each request and reduces the lag between processing each queue, greatly speeding up the processing rate of scheduled actions.
|
24 |
|
25 |
+
For example, the following snippet will increase the time limit to 2 minutes (120 seconds):
|
26 |
|
27 |
```php
|
28 |
function eg_increase_time_limit( $time_limit ) {
|
39 |
|
40 |
## Increasing Batch Size
|
41 |
|
42 |
+
By default, Action Scheduler will claim a batch of 25 actions. This small batch size is because the default time limit is only 30 seconds; however, if you know your actions are processing very quickly, e.g. taking microseconds not seconds, or that you have more than 30 second available to process each batch, increasing the batch size can slightly improve performance.
|
43 |
|
44 |
This is because claiming a batch has some overhead, so the less often a batch needs to be claimed, the faster actions can be processed.
|
45 |
|
54 |
|
55 |
## Increasing Concurrent Batches
|
56 |
|
57 |
+
By default, Action Scheduler will run only one concurrent batches of actions. This is to prevent consuming a lot of available connections or processes on your webserver.
|
58 |
|
59 |
+
However, your server may allow a large number of connections, for example, because it has a high value for Apache's `MaxClients` setting or PHP-FPM's `pm.max_children` setting.
|
60 |
|
61 |
+
If this is the case, you can use the `'action_scheduler_queue_runner_concurrent_batches'` filter to increase the number of concurrent batches allowed, and therefore speed up processing large numbers of actions scheduled to be processed simultaneously.
|
62 |
|
63 |
For example, to increase the allowed number of concurrent queues to 10, we can use the following code:
|
64 |
|
69 |
add_filter( 'action_scheduler_queue_runner_concurrent_batches', 'eg_increase_action_scheduler_concurrent_batches' );
|
70 |
```
|
71 |
|
72 |
+
> WARNING: because of the async queue runner introduced in Action Scheduler 3.0 will continue asynchronous loopback requests to process actions, increasing the number of concurrent batches can substantially increase server load and take down a site. [WP CLI](/wp-cli/) is a better method to achieve higher throughput.
|
73 |
+
|
74 |
## Increasing Initialisation Rate of Runners
|
75 |
|
76 |
+
By default, Action scheduler initiates at most one queue runner every time the `'action_scheduler_run_queue'` action is triggered by WP Cron.
|
77 |
|
78 |
+
Because this action is only triggered at most once every minute, then there will rarely be more than one queue processing actions even if the concurrent runners is increased.
|
79 |
|
80 |
+
To handle larger queues on more powerful servers, it's possible to initiate additional queue runners whenever the `'action_scheduler_run_queue'` action is run.
|
81 |
|
82 |
That can be done by initiated additional secure requests to our server via loopback requests.
|
83 |
|
84 |
+
The code below demonstrates how to create 5 loopback requests each time a queue begins:
|
85 |
|
86 |
```php
|
87 |
/**
|
125 |
add_action( 'wp_ajax_nopriv_eg_create_additional_runners', 'eg_create_additional_runners', 0 );
|
126 |
```
|
127 |
|
128 |
+
> WARNING: because of the processing rate of scheduled actions, this kind of increase can very easily take down a site. Use only on high powered servers and be sure to test before attempting to use it in production.
|
129 |
+
|
130 |
## High Volume Plugin
|
131 |
|
132 |
+
It's not necessary to add all of this code yourself, there is a handy plugin to get access to each of these increases - the [Action Scheduler - High Volume](https://github.com/woocommerce/action-scheduler-high-volume) plugin.
|
includes/vendor/action-scheduler/docs/usage.md
CHANGED
@@ -6,39 +6,7 @@ description: Learn how to use the Action Scheduler background processing job que
|
|
6 |
Using Action Scheduler requires:
|
7 |
|
8 |
1. installing the library
|
9 |
-
1. scheduling
|
10 |
-
1. attaching a callback to that action
|
11 |
-
|
12 |
-
## Scheduling an Action
|
13 |
-
|
14 |
-
To schedule an action, call the [API function](/api/) for the desired schedule type passing in the required parameters.
|
15 |
-
|
16 |
-
The example code below shows everything needed to schedule a function to run at midnight, if it's not already scheduled:
|
17 |
-
|
18 |
-
```php
|
19 |
-
require_once( plugin_dir_path( __FILE__ ) . '/libraries/action-scheduler/action-scheduler.php' );
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Schedule an action with the hook 'eg_midnight_log' to run at midnight each day
|
23 |
-
* so that our callback is run then.
|
24 |
-
*/
|
25 |
-
function eg_schedule_midnight_log() {
|
26 |
-
if ( false === as_next_scheduled_action( 'eg_midnight_log' ) ) {
|
27 |
-
as_schedule_recurring_action( strtotime( 'midnight tonight' ), DAY_IN_SECONDS, 'eg_midnight_log' );
|
28 |
-
}
|
29 |
-
}
|
30 |
-
add_action( 'init', 'eg_schedule_midnight_log' );
|
31 |
-
|
32 |
-
/**
|
33 |
-
* A callback to run when the 'eg_midnight_log' scheduled action is run.
|
34 |
-
*/
|
35 |
-
function eg_log_action_data() {
|
36 |
-
error_log( 'It is just after midnight on ' . date( 'Y-m-d' ) );
|
37 |
-
}
|
38 |
-
add_action( 'eg_midnight_log', 'eg_log_action_data' );
|
39 |
-
```
|
40 |
-
|
41 |
-
For more details on all available API functions, and the data they accept, refer to the [API Reference](/api/).
|
42 |
|
43 |
## Installation
|
44 |
|
@@ -53,7 +21,7 @@ Action Scheduler includes the necessary file headers to be used as a standard Wo
|
|
53 |
|
54 |
To install it as a plugin:
|
55 |
|
56 |
-
1. Download the .zip archive of the latest [stable release](https://github.com/
|
57 |
1. Go to the **Plugins > Add New > Upload** administration screen on your WordPress site
|
58 |
1. Select the archive file you just downloaded
|
59 |
1. Click **Install Now**
|
@@ -77,7 +45,7 @@ To include Action Scheduler as a git subtree:
|
|
77 |
#### Step 1. Add the Repository as a Remote
|
78 |
|
79 |
```
|
80 |
-
git remote add -f subtree-action-scheduler https://github.com/
|
81 |
```
|
82 |
|
83 |
Adding the subtree as a remote allows us to refer to it in short from via the name `subtree-action-scheduler`, instead of the full GitHub URL.
|
@@ -112,7 +80,7 @@ require_once( plugin_dir_path( __FILE__ ) . '/libraries/action-scheduler/action-
|
|
112 |
|
113 |
There is no need to call any functions or do else to initialize Action Scheduler.
|
114 |
|
115 |
-
When the `action-scheduler.php` file is included, Action Scheduler will register the version in that file and then load the most recent version of itself on the site. It will also load the most recent version of [all API functions](https://
|
116 |
|
117 |
### Load Order
|
118 |
|
@@ -121,3 +89,38 @@ Action Scheduler will register its version on `'plugins_loaded'` with priority `
|
|
121 |
It is recommended to load it _when the file including it is included_. However, if you need to load it on a hook, then the hook must occur before `'plugins_loaded'`, or you can use `'plugins_loaded'` with negative priority, like `-10`.
|
122 |
|
123 |
Action Scheduler will later initialize itself on `'init'` with priority `1`. Action Scheduler APIs should not be used until after `'init'` with priority `1`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
Using Action Scheduler requires:
|
7 |
|
8 |
1. installing the library
|
9 |
+
1. scheduling an action
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
## Installation
|
12 |
|
21 |
|
22 |
To install it as a plugin:
|
23 |
|
24 |
+
1. Download the .zip archive of the latest [stable release](https://github.com/woocommerce/action-scheduler/releases)
|
25 |
1. Go to the **Plugins > Add New > Upload** administration screen on your WordPress site
|
26 |
1. Select the archive file you just downloaded
|
27 |
1. Click **Install Now**
|
45 |
#### Step 1. Add the Repository as a Remote
|
46 |
|
47 |
```
|
48 |
+
git remote add -f subtree-action-scheduler https://github.com/woocommerce/action-scheduler.git
|
49 |
```
|
50 |
|
51 |
Adding the subtree as a remote allows us to refer to it in short from via the name `subtree-action-scheduler`, instead of the full GitHub URL.
|
80 |
|
81 |
There is no need to call any functions or do else to initialize Action Scheduler.
|
82 |
|
83 |
+
When the `action-scheduler.php` file is included, Action Scheduler will register the version in that file and then load the most recent version of itself on the site. It will also load the most recent version of [all API functions](https://actionscheduler.org/api/).
|
84 |
|
85 |
### Load Order
|
86 |
|
89 |
It is recommended to load it _when the file including it is included_. However, if you need to load it on a hook, then the hook must occur before `'plugins_loaded'`, or you can use `'plugins_loaded'` with negative priority, like `-10`.
|
90 |
|
91 |
Action Scheduler will later initialize itself on `'init'` with priority `1`. Action Scheduler APIs should not be used until after `'init'` with priority `1`.
|
92 |
+
|
93 |
+
### Usage in Themes
|
94 |
+
|
95 |
+
When using Action Scheduler in themes, it's important to note that if Action Scheduler has been registered by a plugin, then the latest version registered by a plugin will be used, rather than the version included in the theme. This is because of the version dependency handling code using `'plugins_loaded'` since version 1.0.
|
96 |
+
|
97 |
+
## Scheduling an Action
|
98 |
+
|
99 |
+
To schedule an action, call the [API function](/api/) for the desired schedule type passing in the required parameters.
|
100 |
+
|
101 |
+
The example code below shows everything needed to schedule a function to run at midnight, if it's not already scheduled:
|
102 |
+
|
103 |
+
```php
|
104 |
+
require_once( plugin_dir_path( __FILE__ ) . '/libraries/action-scheduler/action-scheduler.php' );
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Schedule an action with the hook 'eg_midnight_log' to run at midnight each day
|
108 |
+
* so that our callback is run then.
|
109 |
+
*/
|
110 |
+
function eg_schedule_midnight_log() {
|
111 |
+
if ( false === as_next_scheduled_action( 'eg_midnight_log' ) ) {
|
112 |
+
as_schedule_recurring_action( strtotime( 'tomorrow' ), DAY_IN_SECONDS, 'eg_midnight_log' );
|
113 |
+
}
|
114 |
+
}
|
115 |
+
add_action( 'init', 'eg_schedule_midnight_log' );
|
116 |
+
|
117 |
+
/**
|
118 |
+
* A callback to run when the 'eg_midnight_log' scheduled action is run.
|
119 |
+
*/
|
120 |
+
function eg_log_action_data() {
|
121 |
+
error_log( 'It is just after midnight on ' . date( 'Y-m-d' ) );
|
122 |
+
}
|
123 |
+
add_action( 'eg_midnight_log', 'eg_log_action_data' );
|
124 |
+
```
|
125 |
+
|
126 |
+
For more details on all available API functions, and the data they accept, refer to the [API Reference](/api/).
|
includes/vendor/action-scheduler/docs/version3-0.md
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Version 3.0 FAQ
|
2 |
+
|
3 |
+
### Do we need to wait for this to be bundled with WooCommerce?
|
4 |
+
|
5 |
+
No. Action Scheduler can be run as a standalone plugin. Action Scheduler 3.X is also part of WooCommerce 4.0 and WooCommerce Subscriptions 3.0, so when updating WooCommerce or WooCommerce Subscriptions, Action Scheduler will also be updated.
|
6 |
+
|
7 |
+
### Can we safely switch to action scheduler version 3.0 and ditch the custom tables plugin?
|
8 |
+
|
9 |
+
Yes! The Action Scheduler Custom Tables plugin code is now part of Action Scheduler itself (with a few improvements). We recommend disabling the Custom Tables plugin immediately after activating Action Scheduler 3.0, or a plugin containing Action Scheduler 3.0, like WooCommerce Subscriptions 3.0 and newer.
|
10 |
+
|
11 |
+
### How do we migrate from our own custom data store?
|
12 |
+
|
13 |
+
By default, Action Scheduler will only initiate a migration from the internal `WPPostStore` data store. To enable migration from any custom datastore add the following filter `add_filter( 'action_scheduler_migrate_data_store', '__return_true' );`.
|
14 |
+
|
15 |
+
### I'm currently on PHP <5.5. When I update PHP will the migration start automatically?
|
16 |
+
|
17 |
+
Yes! The migration is initiated as soon as all dependencies are met.
|
18 |
+
|
19 |
+
### I would like to update a plugin for testing that includes Action Scheduler 3.0 but would like to postpone the migration until that testing is complete. Is that possible?
|
20 |
+
|
21 |
+
Yes, while we recommend migrating to custom tables as soon as possible for performance reasons, you can use `add_filter( 'action_scheduler_migration_dependencies_met', '__return_false' );` to prevent the migration from initiating.
|
22 |
+
|
23 |
+
### I updated to Action Scheduler 3.0+, the migration is running, and I'm seeing a lot of `admin-ajax.php?action=as_async_request_queue` requests. Is it possible to reduce this load?
|
24 |
+
|
25 |
+
You can increase the delay (in seconds) between these requests with
|
26 |
+
|
27 |
+
```
|
28 |
+
add_filter( 'action_scheduler_async_request_sleep_seconds', function( $sleep ) {
|
29 |
+
return 10;
|
30 |
+
} );
|
31 |
+
```
|
32 |
+
|
33 |
+
The default value for this filter is `1` in versions 3.0.X and `5` in versions 3.1.X.
|
34 |
+
|
35 |
+
Alternatively, the async queue runner can be disabled while your migration is in process with `add_filter( 'action_scheduler_allow_async_request_runner', '__return_false' );`.
|
36 |
+
|
37 |
+
Once the migration is complete, these filters should be removed.
|
38 |
+
|
39 |
+
### Is it safe to use Action Scheduler function in the WordPress `shutdown` hook.
|
40 |
+
|
41 |
+
No, you should avoid calls to Action Scheduler functions in the `shutdown` hook because the `shutdown` hook is still triggered after a fatal error. If this occurs while WordPress is loading, Action Scheduler is in an unknown state.
|
42 |
+
|
43 |
+
### Is there a strong likelihood of migration issues with any of the above?
|
44 |
+
|
45 |
+
There is always the possibilities of issues, but it is not a strong likelihood. We tested migrating from Action Scheduler 2.n with the custom data stores (including Action Scheduler Custom Tables plugin) active to Action Scheduler 3.0 on a number of test sites.
|
46 |
+
|
47 |
+
As with all major, and minor, upgrades, we still testing the update on a staging site before updating the live site. We also recommending taking a backup before updating the live site.
|
48 |
+
|
49 |
+
If you wish to undertake more comprehensive testing on a development or staging site before updating, or want to closely monitor the update on a live site, follow these steps:
|
50 |
+
|
51 |
+
#### Stage 1: Prepare your site:
|
52 |
+
|
53 |
+
1. Take a backup of your database (AS 3.0 migrates data to custom tables, this can not be undone, you’ll need to restore a backup to downgrade).
|
54 |
+
1. Go to Tools > Action Scheduler
|
55 |
+
1. Take a screenshot of the action status counts at the top of the page. Example screenshot: https://cld.wthms.co/kwIqv7
|
56 |
+
|
57 |
+
|
58 |
+
#### Stage 2: Install & Activate Action Scheduler 3.0+ as a plugin
|
59 |
+
|
60 |
+
1. The migration will start almost immediately
|
61 |
+
1. Keep an eye on your error log
|
62 |
+
1. Report any notices, errors or other issues on GitHub
|
63 |
+
|
64 |
+
#### Stage 3: Verify Migration
|
65 |
+
|
66 |
+
1. Go to Tools > Action Scheduler
|
67 |
+
1. Take a screenshot of the action status counts at the top of the page.
|
68 |
+
1. Verify the counts match the status counts taken in Stage 1 (the Completed counts could be higher because actions will have been completed to run the migration).
|
includes/vendor/action-scheduler/docs/wp-cli.md
CHANGED
@@ -13,12 +13,16 @@ For large sites, WP CLI is a much better choice for running queues of actions th
|
|
13 |
|
14 |
With a regular web request, you may have to deal with script timeouts enforced by hosts, or other restraints that make it more challenging to run Action Scheduler tasks. Utilizing WP CLI to run commands directly on the server give you more freedom. This means that you typically don't have the same constraints of a normal web request.
|
15 |
|
16 |
-
If you choose to utilize WP CLI exclusively, you can disable the normal WP CLI queue runner by installing the [Action Scheduler - Disable Default Queue Runner](https://github.com/
|
17 |
|
18 |
## Commands
|
19 |
|
20 |
These are the commands available to use with Action Scheduler:
|
21 |
|
|
|
|
|
|
|
|
|
22 |
* `action-scheduler run`
|
23 |
|
24 |
Options:
|
13 |
|
14 |
With a regular web request, you may have to deal with script timeouts enforced by hosts, or other restraints that make it more challenging to run Action Scheduler tasks. Utilizing WP CLI to run commands directly on the server give you more freedom. This means that you typically don't have the same constraints of a normal web request.
|
15 |
|
16 |
+
If you choose to utilize WP CLI exclusively, you can disable the normal WP CLI queue runner by installing the [Action Scheduler - Disable Default Queue Runner](https://github.com/woocommerce/action-scheduler-disable-default-runner) plugin. Note that if you do this, you **must** run Action Scheduler via WP CLI or another method, otherwise no scheduled actions will be processed.
|
17 |
|
18 |
## Commands
|
19 |
|
20 |
These are the commands available to use with Action Scheduler:
|
21 |
|
22 |
+
* `action-scheduler migrate`
|
23 |
+
|
24 |
+
**Note**: This command is only available while the migration to custom tables is in progress.
|
25 |
+
|
26 |
* `action-scheduler run`
|
27 |
|
28 |
Options:
|
includes/vendor/action-scheduler/functions.php
CHANGED
@@ -10,38 +10,41 @@
|
|
10 |
* @param string $hook The hook to trigger.
|
11 |
* @param array $args Arguments to pass when the hook triggers.
|
12 |
* @param string $group The group to assign this job to.
|
13 |
-
* @return
|
14 |
*/
|
15 |
function as_enqueue_async_action( $hook, $args = array(), $group = '' ) {
|
|
|
16 |
return ActionScheduler::factory()->async( $hook, $args, $group );
|
17 |
}
|
18 |
|
19 |
/**
|
20 |
* Schedule an action to run one time
|
21 |
*
|
22 |
-
* @param int $timestamp When the job will run
|
23 |
-
* @param string $hook The hook to trigger
|
24 |
-
* @param array $args Arguments to pass when the hook triggers
|
25 |
-
* @param string $group The group to assign this job to
|
26 |
*
|
27 |
-
* @return
|
28 |
*/
|
29 |
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '' ) {
|
|
|
30 |
return ActionScheduler::factory()->single( $hook, $args, $timestamp, $group );
|
31 |
}
|
32 |
|
33 |
/**
|
34 |
* Schedule a recurring action
|
35 |
*
|
36 |
-
* @param int $timestamp When the first instance of the job will run
|
37 |
-
* @param int $interval_in_seconds How long to wait between runs
|
38 |
-
* @param string $hook The hook to trigger
|
39 |
-
* @param array $args Arguments to pass when the hook triggers
|
40 |
-
* @param string $group The group to assign this job to
|
41 |
*
|
42 |
-
* @return
|
43 |
*/
|
44 |
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '' ) {
|
|
|
45 |
return ActionScheduler::factory()->recurring( $hook, $args, $timestamp, $interval_in_seconds, $group );
|
46 |
}
|
47 |
|
@@ -62,13 +65,14 @@ function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook,
|
|
62 |
* | | +--------------- day of month (1 - 31)
|
63 |
* | +-------------------- hour (0 - 23)
|
64 |
* +------------------------- min (0 - 59)
|
65 |
-
* @param string $hook The hook to trigger
|
66 |
-
* @param array $args Arguments to pass when the hook triggers
|
67 |
-
* @param string $group The group to assign this job to
|
68 |
*
|
69 |
-
* @return
|
70 |
*/
|
71 |
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '' ) {
|
|
|
72 |
return ActionScheduler::factory()->cron( $hook, $args, $timestamp, $schedule, $group );
|
73 |
}
|
74 |
|
@@ -82,13 +86,14 @@ function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(),
|
|
82 |
* then the following instance will never be scheduled (or exist), which is effectively the same as being unscheduled
|
83 |
* by this method also.
|
84 |
*
|
85 |
-
* @param string $hook The hook that the job will trigger
|
86 |
-
* @param array $args Args that would have been passed to the job
|
87 |
-
* @param string $group
|
88 |
*
|
89 |
-
* @return string The scheduled action ID if a scheduled action was found, or
|
90 |
*/
|
91 |
function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
|
|
92 |
$params = array();
|
93 |
if ( is_array($args) ) {
|
94 |
$params['args'] = $args;
|
@@ -108,11 +113,12 @@ function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
|
108 |
/**
|
109 |
* Cancel all occurrences of a scheduled action.
|
110 |
*
|
111 |
-
* @param string $hook The hook that the job will trigger
|
112 |
-
* @param array $args Args that would have been passed to the job
|
113 |
-
* @param string $group
|
114 |
*/
|
115 |
function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
|
|
116 |
if ( empty( $args ) ) {
|
117 |
if ( ! empty( $hook ) && empty( $group ) ) {
|
118 |
ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook );
|
@@ -131,7 +137,7 @@ function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
|
131 |
/**
|
132 |
* Check if there is an existing action in the queue with a given hook, args and group combination.
|
133 |
*
|
134 |
-
* An action in the queue could be pending, in-progress or
|
135 |
* future, its scheduled date will be returned as a timestamp. If it is currently being run, or an
|
136 |
* async action sitting in the queue waiting to be processed, in which case boolean true will be
|
137 |
* returned. Or there may be no async, in-progress or pending action for this hook, in which case,
|
@@ -144,6 +150,7 @@ function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
|
144 |
* @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action.
|
145 |
*/
|
146 |
function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
|
|
147 |
$params = array();
|
148 |
if ( is_array($args) ) {
|
149 |
$params['args'] = $args;
|
@@ -191,11 +198,12 @@ function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
|
191 |
* 'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', or 'date'
|
192 |
* 'order' => 'ASC'
|
193 |
*
|
194 |
-
* @param string $return_format OBJECT, ARRAY_A, or ids
|
195 |
*
|
196 |
* @return array
|
197 |
*/
|
198 |
function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
|
|
|
199 |
$store = ActionScheduler::store();
|
200 |
foreach ( array('date', 'modified') as $key ) {
|
201 |
if ( isset($args[$key]) ) {
|
@@ -234,8 +242,8 @@ function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
|
|
234 |
* timezone when instantiating datetimes rather than leaving it up to
|
235 |
* the PHP default.
|
236 |
*
|
237 |
-
* @param mixed $date_string A date/time string. Valid formats are explained in http://php.net/manual/en/datetime.formats.php
|
238 |
-
* @param string $timezone A timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available http://php.net/manual/en/timezones.php
|
239 |
*
|
240 |
* @return ActionScheduler_DateTime
|
241 |
*/
|
10 |
* @param string $hook The hook to trigger.
|
11 |
* @param array $args Arguments to pass when the hook triggers.
|
12 |
* @param string $group The group to assign this job to.
|
13 |
+
* @return int The action ID.
|
14 |
*/
|
15 |
function as_enqueue_async_action( $hook, $args = array(), $group = '' ) {
|
16 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
17 |
return ActionScheduler::factory()->async( $hook, $args, $group );
|
18 |
}
|
19 |
|
20 |
/**
|
21 |
* Schedule an action to run one time
|
22 |
*
|
23 |
+
* @param int $timestamp When the job will run.
|
24 |
+
* @param string $hook The hook to trigger.
|
25 |
+
* @param array $args Arguments to pass when the hook triggers.
|
26 |
+
* @param string $group The group to assign this job to.
|
27 |
*
|
28 |
+
* @return int The action ID.
|
29 |
*/
|
30 |
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '' ) {
|
31 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
32 |
return ActionScheduler::factory()->single( $hook, $args, $timestamp, $group );
|
33 |
}
|
34 |
|
35 |
/**
|
36 |
* Schedule a recurring action
|
37 |
*
|
38 |
+
* @param int $timestamp When the first instance of the job will run.
|
39 |
+
* @param int $interval_in_seconds How long to wait between runs.
|
40 |
+
* @param string $hook The hook to trigger.
|
41 |
+
* @param array $args Arguments to pass when the hook triggers.
|
42 |
+
* @param string $group The group to assign this job to.
|
43 |
*
|
44 |
+
* @return int The action ID.
|
45 |
*/
|
46 |
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '' ) {
|
47 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
48 |
return ActionScheduler::factory()->recurring( $hook, $args, $timestamp, $interval_in_seconds, $group );
|
49 |
}
|
50 |
|
65 |
* | | +--------------- day of month (1 - 31)
|
66 |
* | +-------------------- hour (0 - 23)
|
67 |
* +------------------------- min (0 - 59)
|
68 |
+
* @param string $hook The hook to trigger.
|
69 |
+
* @param array $args Arguments to pass when the hook triggers.
|
70 |
+
* @param string $group The group to assign this job to.
|
71 |
*
|
72 |
+
* @return int The action ID.
|
73 |
*/
|
74 |
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '' ) {
|
75 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
76 |
return ActionScheduler::factory()->cron( $hook, $args, $timestamp, $schedule, $group );
|
77 |
}
|
78 |
|
86 |
* then the following instance will never be scheduled (or exist), which is effectively the same as being unscheduled
|
87 |
* by this method also.
|
88 |
*
|
89 |
+
* @param string $hook The hook that the job will trigger.
|
90 |
+
* @param array $args Args that would have been passed to the job.
|
91 |
+
* @param string $group The group the job is assigned to.
|
92 |
*
|
93 |
+
* @return string|null The scheduled action ID if a scheduled action was found, or null if no matching action found.
|
94 |
*/
|
95 |
function as_unschedule_action( $hook, $args = array(), $group = '' ) {
|
96 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
97 |
$params = array();
|
98 |
if ( is_array($args) ) {
|
99 |
$params['args'] = $args;
|
113 |
/**
|
114 |
* Cancel all occurrences of a scheduled action.
|
115 |
*
|
116 |
+
* @param string $hook The hook that the job will trigger.
|
117 |
+
* @param array $args Args that would have been passed to the job.
|
118 |
+
* @param string $group The group the job is assigned to.
|
119 |
*/
|
120 |
function as_unschedule_all_actions( $hook, $args = array(), $group = '' ) {
|
121 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
122 |
if ( empty( $args ) ) {
|
123 |
if ( ! empty( $hook ) && empty( $group ) ) {
|
124 |
ActionScheduler_Store::instance()->cancel_actions_by_hook( $hook );
|
137 |
/**
|
138 |
* Check if there is an existing action in the queue with a given hook, args and group combination.
|
139 |
*
|
140 |
+
* An action in the queue could be pending, in-progress or async. If the is pending for a time in
|
141 |
* future, its scheduled date will be returned as a timestamp. If it is currently being run, or an
|
142 |
* async action sitting in the queue waiting to be processed, in which case boolean true will be
|
143 |
* returned. Or there may be no async, in-progress or pending action for this hook, in which case,
|
150 |
* @return int|bool The timestamp for the next occurrence of a pending scheduled action, true for an async or in-progress action or false if there is no matching action.
|
151 |
*/
|
152 |
function as_next_scheduled_action( $hook, $args = NULL, $group = '' ) {
|
153 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
154 |
$params = array();
|
155 |
if ( is_array($args) ) {
|
156 |
$params['args'] = $args;
|
198 |
* 'orderby' => 'date' - accepted values are 'hook', 'group', 'modified', or 'date'
|
199 |
* 'order' => 'ASC'
|
200 |
*
|
201 |
+
* @param string $return_format OBJECT, ARRAY_A, or ids.
|
202 |
*
|
203 |
* @return array
|
204 |
*/
|
205 |
function as_get_scheduled_actions( $args = array(), $return_format = OBJECT ) {
|
206 |
+
ActionScheduler::check_shutdown_hook( __FUNCTION__ );
|
207 |
$store = ActionScheduler::store();
|
208 |
foreach ( array('date', 'modified') as $key ) {
|
209 |
if ( isset($args[$key]) ) {
|
242 |
* timezone when instantiating datetimes rather than leaving it up to
|
243 |
* the PHP default.
|
244 |
*
|
245 |
+
* @param mixed $date_string A date/time string. Valid formats are explained in http://php.net/manual/en/datetime.formats.php.
|
246 |
+
* @param string $timezone A timezone identifier, like UTC or Europe/Lisbon. The list of valid identifiers is available http://php.net/manual/en/timezones.php.
|
247 |
*
|
248 |
* @return ActionScheduler_DateTime
|
249 |
*/
|
includes/vendor/action-scheduler/package-lock.json
ADDED
@@ -0,0 +1,2138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "action-scheduler",
|
3 |
+
"version": "3.0.0",
|
4 |
+
"lockfileVersion": 1,
|
5 |
+
"requires": true,
|
6 |
+
"dependencies": {
|
7 |
+
"@babel/code-frame": {
|
8 |
+
"version": "7.5.5",
|
9 |
+
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
|
10 |
+
"integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
|
11 |
+
"dev": true,
|
12 |
+
"requires": {
|
13 |
+
"@babel/highlight": "^7.0.0"
|
14 |
+
}
|
15 |
+
},
|
16 |
+
"@babel/highlight": {
|
17 |
+
"version": "7.5.0",
|
18 |
+
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
|
19 |
+
"integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
|
20 |
+
"dev": true,
|
21 |
+
"requires": {
|
22 |
+
"chalk": "^2.0.0",
|
23 |
+
"esutils": "^2.0.2",
|
24 |
+
"js-tokens": "^4.0.0"
|
25 |
+
}
|
26 |
+
},
|
27 |
+
"@nodelib/fs.scandir": {
|
28 |
+
"version": "2.1.3",
|
29 |
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
|
30 |
+
"integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
|
31 |
+
"dev": true,
|
32 |
+
"requires": {
|
33 |
+
"@nodelib/fs.stat": "2.0.3",
|
34 |
+
"run-parallel": "^1.1.9"
|
35 |
+
}
|
36 |
+
},
|
37 |
+
"@nodelib/fs.stat": {
|
38 |
+
"version": "2.0.3",
|
39 |
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
|
40 |
+
"integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
|
41 |
+
"dev": true
|
42 |
+
},
|
43 |
+
"@nodelib/fs.walk": {
|
44 |
+
"version": "1.2.4",
|
45 |
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
|
46 |
+
"integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
|
47 |
+
"dev": true,
|
48 |
+
"requires": {
|
49 |
+
"@nodelib/fs.scandir": "2.1.3",
|
50 |
+
"fastq": "^1.6.0"
|
51 |
+
}
|
52 |
+
},
|
53 |
+
"@samverschueren/stream-to-observable": {
|
54 |
+
"version": "0.3.0",
|
55 |
+
"resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
|
56 |
+
"integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
|
57 |
+
"dev": true,
|
58 |
+
"requires": {
|
59 |
+
"any-observable": "^0.3.0"
|
60 |
+
}
|
61 |
+
},
|
62 |
+
"@types/events": {
|
63 |
+
"version": "3.0.0",
|
64 |
+
"resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
|
65 |
+
"integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
|
66 |
+
"dev": true
|
67 |
+
},
|
68 |
+
"@types/glob": {
|
69 |
+
"version": "7.1.1",
|
70 |
+
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
|
71 |
+
"integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
|
72 |
+
"dev": true,
|
73 |
+
"requires": {
|
74 |
+
"@types/events": "*",
|
75 |
+
"@types/minimatch": "*",
|
76 |
+
"@types/node": "*"
|
77 |
+
}
|
78 |
+
},
|
79 |
+
"@types/minimatch": {
|
80 |
+
"version": "3.0.3",
|
81 |
+
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
|
82 |
+
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
|
83 |
+
"dev": true
|
84 |
+
},
|
85 |
+
"@types/node": {
|
86 |
+
"version": "12.11.7",
|
87 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz",
|
88 |
+
"integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==",
|
89 |
+
"dev": true
|
90 |
+
},
|
91 |
+
"@types/normalize-package-data": {
|
92 |
+
"version": "2.4.0",
|
93 |
+
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
|
94 |
+
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
|
95 |
+
"dev": true
|
96 |
+
},
|
97 |
+
"abbrev": {
|
98 |
+
"version": "1.1.1",
|
99 |
+
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
100 |
+
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
|
101 |
+
"dev": true
|
102 |
+
},
|
103 |
+
"aggregate-error": {
|
104 |
+
"version": "3.0.1",
|
105 |
+
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
|
106 |
+
"integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
|
107 |
+
"dev": true,
|
108 |
+
"requires": {
|
109 |
+
"clean-stack": "^2.0.0",
|
110 |
+
"indent-string": "^4.0.0"
|
111 |
+
},
|
112 |
+
"dependencies": {
|
113 |
+
"indent-string": {
|
114 |
+
"version": "4.0.0",
|
115 |
+
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
|
116 |
+
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
|
117 |
+
"dev": true
|
118 |
+
}
|
119 |
+
}
|
120 |
+
},
|
121 |
+
"ansi-escapes": {
|
122 |
+
"version": "3.2.0",
|
123 |
+
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
|
124 |
+
"integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
|
125 |
+
"dev": true
|
126 |
+
},
|
127 |
+
"ansi-regex": {
|
128 |
+
"version": "2.1.1",
|
129 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
130 |
+
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
131 |
+
"dev": true
|
132 |
+
},
|
133 |
+
"ansi-styles": {
|
134 |
+
"version": "3.2.1",
|
135 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
136 |
+
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
137 |
+
"dev": true,
|
138 |
+
"requires": {
|
139 |
+
"color-convert": "^1.9.0"
|
140 |
+
}
|
141 |
+
},
|
142 |
+
"any-observable": {
|
143 |
+
"version": "0.3.0",
|
144 |
+
"resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
|
145 |
+
"integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
|
146 |
+
"dev": true
|
147 |
+
},
|
148 |
+
"argparse": {
|
149 |
+
"version": "1.0.10",
|
150 |
+
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
151 |
+
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
152 |
+
"dev": true,
|
153 |
+
"requires": {
|
154 |
+
"sprintf-js": "~1.0.2"
|
155 |
+
},
|
156 |
+
"dependencies": {
|
157 |
+
"sprintf-js": {
|
158 |
+
"version": "1.0.3",
|
159 |
+
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
160 |
+
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
161 |
+
"dev": true
|
162 |
+
}
|
163 |
+
}
|
164 |
+
},
|
165 |
+
"array-find-index": {
|
166 |
+
"version": "1.0.2",
|
167 |
+
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
|
168 |
+
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
|
169 |
+
"dev": true
|
170 |
+
},
|
171 |
+
"array-union": {
|
172 |
+
"version": "2.1.0",
|
173 |
+
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
|
174 |
+
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
|
175 |
+
"dev": true
|
176 |
+
},
|
177 |
+
"async": {
|
178 |
+
"version": "1.5.2",
|
179 |
+
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
|
180 |
+
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
|
181 |
+
"dev": true
|
182 |
+
},
|
183 |
+
"balanced-match": {
|
184 |
+
"version": "1.0.0",
|
185 |
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
186 |
+
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
187 |
+
"dev": true
|
188 |
+
},
|
189 |
+
"brace-expansion": {
|
190 |
+
"version": "1.1.11",
|
191 |
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
192 |
+
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
193 |
+
"dev": true,
|
194 |
+
"requires": {
|
195 |
+
"balanced-match": "^1.0.0",
|
196 |
+
"concat-map": "0.0.1"
|
197 |
+
}
|
198 |
+
},
|
199 |
+
"braces": {
|
200 |
+
"version": "3.0.2",
|
201 |
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
202 |
+
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
203 |
+
"dev": true,
|
204 |
+
"requires": {
|
205 |
+
"fill-range": "^7.0.1"
|
206 |
+
}
|
207 |
+
},
|
208 |
+
"caller-callsite": {
|
209 |
+
"version": "2.0.0",
|
210 |
+
"resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
|
211 |
+
"integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
|
212 |
+
"dev": true,
|
213 |
+
"requires": {
|
214 |
+
"callsites": "^2.0.0"
|
215 |
+
}
|
216 |
+
},
|
217 |
+
"caller-path": {
|
218 |
+
"version": "2.0.0",
|
219 |
+
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
|
220 |
+
"integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
|
221 |
+
"dev": true,
|
222 |
+
"requires": {
|
223 |
+
"caller-callsite": "^2.0.0"
|
224 |
+
}
|
225 |
+
},
|
226 |
+
"callsites": {
|
227 |
+
"version": "2.0.0",
|
228 |
+
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
229 |
+
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
|
230 |
+
"dev": true
|
231 |
+
},
|
232 |
+
"camelcase": {
|
233 |
+
"version": "2.1.1",
|
234 |
+
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
|
235 |
+
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
|
236 |
+
"dev": true
|
237 |
+
},
|
238 |
+
"camelcase-keys": {
|
239 |
+
"version": "2.1.0",
|
240 |
+
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
|
241 |
+
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
|
242 |
+
"dev": true,
|
243 |
+
"requires": {
|
244 |
+
"camelcase": "^2.0.0",
|
245 |
+
"map-obj": "^1.0.0"
|
246 |
+
}
|
247 |
+
},
|
248 |
+
"chalk": {
|
249 |
+
"version": "2.4.2",
|
250 |
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
251 |
+
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
252 |
+
"dev": true,
|
253 |
+
"requires": {
|
254 |
+
"ansi-styles": "^3.2.1",
|
255 |
+
"escape-string-regexp": "^1.0.5",
|
256 |
+
"supports-color": "^5.3.0"
|
257 |
+
}
|
258 |
+
},
|
259 |
+
"ci-info": {
|
260 |
+
"version": "2.0.0",
|
261 |
+
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
|
262 |
+
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
|
263 |
+
"dev": true
|
264 |
+
},
|
265 |
+
"clean-stack": {
|
266 |
+
"version": "2.2.0",
|
267 |
+
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
268 |
+
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
|
269 |
+
"dev": true
|
270 |
+
},
|
271 |
+
"cli-cursor": {
|
272 |
+
"version": "2.1.0",
|
273 |
+
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
|
274 |
+
"integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
|
275 |
+
"dev": true,
|
276 |
+
"requires": {
|
277 |
+
"restore-cursor": "^2.0.0"
|
278 |
+
}
|
279 |
+
},
|
280 |
+
"cli-truncate": {
|
281 |
+
"version": "0.2.1",
|
282 |
+
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
|
283 |
+
"integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
|
284 |
+
"dev": true,
|
285 |
+
"requires": {
|
286 |
+
"slice-ansi": "0.0.4",
|
287 |
+
"string-width": "^1.0.1"
|
288 |
+
}
|
289 |
+
},
|
290 |
+
"code-point-at": {
|
291 |
+
"version": "1.1.0",
|
292 |
+
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
293 |
+
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
|
294 |
+
"dev": true
|
295 |
+
},
|
296 |
+
"coffeescript": {
|
297 |
+
"version": "1.10.0",
|
298 |
+
"resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz",
|
299 |
+
"integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=",
|
300 |
+
"dev": true
|
301 |
+
},
|
302 |
+
"color-convert": {
|
303 |
+
"version": "1.9.3",
|
304 |
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
305 |
+
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
306 |
+
"dev": true,
|
307 |
+
"requires": {
|
308 |
+
"color-name": "1.1.3"
|
309 |
+
}
|
310 |
+
},
|
311 |
+
"color-name": {
|
312 |
+
"version": "1.1.3",
|
313 |
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
314 |
+
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
315 |
+
"dev": true
|
316 |
+
},
|
317 |
+
"colors": {
|
318 |
+
"version": "1.1.2",
|
319 |
+
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
|
320 |
+
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
|
321 |
+
"dev": true
|
322 |
+
},
|
323 |
+
"commander": {
|
324 |
+
"version": "2.20.3",
|
325 |
+
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
326 |
+
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
327 |
+
"dev": true
|
328 |
+
},
|
329 |
+
"concat-map": {
|
330 |
+
"version": "0.0.1",
|
331 |
+
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
332 |
+
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
333 |
+
"dev": true
|
334 |
+
},
|
335 |
+
"cosmiconfig": {
|
336 |
+
"version": "5.2.1",
|
337 |
+
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
|
338 |
+
"integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
|
339 |
+
"dev": true,
|
340 |
+
"requires": {
|
341 |
+
"import-fresh": "^2.0.0",
|
342 |
+
"is-directory": "^0.3.1",
|
343 |
+
"js-yaml": "^3.13.1",
|
344 |
+
"parse-json": "^4.0.0"
|
345 |
+
},
|
346 |
+
"dependencies": {
|
347 |
+
"parse-json": {
|
348 |
+
"version": "4.0.0",
|
349 |
+
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
|
350 |
+
"integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
|
351 |
+
"dev": true,
|
352 |
+
"requires": {
|
353 |
+
"error-ex": "^1.3.1",
|
354 |
+
"json-parse-better-errors": "^1.0.1"
|
355 |
+
}
|
356 |
+
}
|
357 |
+
}
|
358 |
+
},
|
359 |
+
"cross-spawn": {
|
360 |
+
"version": "6.0.5",
|
361 |
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
|
362 |
+
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
|
363 |
+
"dev": true,
|
364 |
+
"requires": {
|
365 |
+
"nice-try": "^1.0.4",
|
366 |
+
"path-key": "^2.0.1",
|
367 |
+
"semver": "^5.5.0",
|
368 |
+
"shebang-command": "^1.2.0",
|
369 |
+
"which": "^1.2.9"
|
370 |
+
}
|
371 |
+
},
|
372 |
+
"currently-unhandled": {
|
373 |
+
"version": "0.4.1",
|
374 |
+
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
375 |
+
"integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
|
376 |
+
"dev": true,
|
377 |
+
"requires": {
|
378 |
+
"array-find-index": "^1.0.1"
|
379 |
+
}
|
380 |
+
},
|
381 |
+
"date-fns": {
|
382 |
+
"version": "1.30.1",
|
383 |
+
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
|
384 |
+
"integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
|
385 |
+
"dev": true
|
386 |
+
},
|
387 |
+
"dateformat": {
|
388 |
+
"version": "1.0.12",
|
389 |
+
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
|
390 |
+
"integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
|
391 |
+
"dev": true,
|
392 |
+
"requires": {
|
393 |
+
"get-stdin": "^4.0.1",
|
394 |
+
"meow": "^3.3.0"
|
395 |
+
}
|
396 |
+
},
|
397 |
+
"debug": {
|
398 |
+
"version": "4.1.1",
|
399 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
400 |
+
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
401 |
+
"dev": true,
|
402 |
+
"requires": {
|
403 |
+
"ms": "^2.1.1"
|
404 |
+
}
|
405 |
+
},
|
406 |
+
"decamelize": {
|
407 |
+
"version": "1.2.0",
|
408 |
+
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
409 |
+
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
410 |
+
"dev": true
|
411 |
+
},
|
412 |
+
"dedent": {
|
413 |
+
"version": "0.7.0",
|
414 |
+
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
|
415 |
+
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
|
416 |
+
"dev": true
|
417 |
+
},
|
418 |
+
"del": {
|
419 |
+
"version": "5.1.0",
|
420 |
+
"resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
|
421 |
+
"integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==",
|
422 |
+
"dev": true,
|
423 |
+
"requires": {
|
424 |
+
"globby": "^10.0.1",
|
425 |
+
"graceful-fs": "^4.2.2",
|
426 |
+
"is-glob": "^4.0.1",
|
427 |
+
"is-path-cwd": "^2.2.0",
|
428 |
+
"is-path-inside": "^3.0.1",
|
429 |
+
"p-map": "^3.0.0",
|
430 |
+
"rimraf": "^3.0.0",
|
431 |
+
"slash": "^3.0.0"
|
432 |
+
},
|
433 |
+
"dependencies": {
|
434 |
+
"glob": {
|
435 |
+
"version": "7.1.5",
|
436 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
|
437 |
+
"integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
|
438 |
+
"dev": true,
|
439 |
+
"requires": {
|
440 |
+
"fs.realpath": "^1.0.0",
|
441 |
+
"inflight": "^1.0.4",
|
442 |
+
"inherits": "2",
|
443 |
+
"minimatch": "^3.0.4",
|
444 |
+
"once": "^1.3.0",
|
445 |
+
"path-is-absolute": "^1.0.0"
|
446 |
+
}
|
447 |
+
},
|
448 |
+
"rimraf": {
|
449 |
+
"version": "3.0.0",
|
450 |
+
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
|
451 |
+
"integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
|
452 |
+
"dev": true,
|
453 |
+
"requires": {
|
454 |
+
"glob": "^7.1.3"
|
455 |
+
}
|
456 |
+
}
|
457 |
+
}
|
458 |
+
},
|
459 |
+
"dir-glob": {
|
460 |
+
"version": "3.0.1",
|
461 |
+
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
|
462 |
+
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
|
463 |
+
"dev": true,
|
464 |
+
"requires": {
|
465 |
+
"path-type": "^4.0.0"
|
466 |
+
},
|
467 |
+
"dependencies": {
|
468 |
+
"path-type": {
|
469 |
+
"version": "4.0.0",
|
470 |
+
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
|
471 |
+
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
|
472 |
+
"dev": true
|
473 |
+
}
|
474 |
+
}
|
475 |
+
},
|
476 |
+
"elegant-spinner": {
|
477 |
+
"version": "1.0.1",
|
478 |
+
"resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
|
479 |
+
"integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
|
480 |
+
"dev": true
|
481 |
+
},
|
482 |
+
"end-of-stream": {
|
483 |
+
"version": "1.4.4",
|
484 |
+
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
485 |
+
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
486 |
+
"dev": true,
|
487 |
+
"requires": {
|
488 |
+
"once": "^1.4.0"
|
489 |
+
}
|
490 |
+
},
|
491 |
+
"error-ex": {
|
492 |
+
"version": "1.3.2",
|
493 |
+
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
494 |
+
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
495 |
+
"dev": true,
|
496 |
+
"requires": {
|
497 |
+
"is-arrayish": "^0.2.1"
|
498 |
+
}
|
499 |
+
},
|
500 |
+
"escape-string-regexp": {
|
501 |
+
"version": "1.0.5",
|
502 |
+
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
503 |
+
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
504 |
+
"dev": true
|
505 |
+
},
|
506 |
+
"esprima": {
|
507 |
+
"version": "4.0.1",
|
508 |
+
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
509 |
+
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
|
510 |
+
"dev": true
|
511 |
+
},
|
512 |
+
"esutils": {
|
513 |
+
"version": "2.0.3",
|
514 |
+
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
|
515 |
+
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
|
516 |
+
"dev": true
|
517 |
+
},
|
518 |
+
"eventemitter2": {
|
519 |
+
"version": "0.4.14",
|
520 |
+
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
|
521 |
+
"integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
|
522 |
+
"dev": true
|
523 |
+
},
|
524 |
+
"execa": {
|
525 |
+
"version": "1.0.0",
|
526 |
+
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
|
527 |
+
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
|
528 |
+
"dev": true,
|
529 |
+
"requires": {
|
530 |
+
"cross-spawn": "^6.0.0",
|
531 |
+
"get-stream": "^4.0.0",
|
532 |
+
"is-stream": "^1.1.0",
|
533 |
+
"npm-run-path": "^2.0.0",
|
534 |
+
"p-finally": "^1.0.0",
|
535 |
+
"signal-exit": "^3.0.0",
|
536 |
+
"strip-eof": "^1.0.0"
|
537 |
+
}
|
538 |
+
},
|
539 |
+
"exit": {
|
540 |
+
"version": "0.1.2",
|
541 |
+
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
|
542 |
+
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
|
543 |
+
"dev": true
|
544 |
+
},
|
545 |
+
"fast-glob": {
|
546 |
+
"version": "3.1.0",
|
547 |
+
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz",
|
548 |
+
"integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==",
|
549 |
+
"dev": true,
|
550 |
+
"requires": {
|
551 |
+
"@nodelib/fs.stat": "^2.0.2",
|
552 |
+
"@nodelib/fs.walk": "^1.2.3",
|
553 |
+
"glob-parent": "^5.1.0",
|
554 |
+
"merge2": "^1.3.0",
|
555 |
+
"micromatch": "^4.0.2"
|
556 |
+
}
|
557 |
+
},
|
558 |
+
"fastq": {
|
559 |
+
"version": "1.6.0",
|
560 |
+
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
|
561 |
+
"integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
|
562 |
+
"dev": true,
|
563 |
+
"requires": {
|
564 |
+
"reusify": "^1.0.0"
|
565 |
+
}
|
566 |
+
},
|
567 |
+
"figures": {
|
568 |
+
"version": "1.7.0",
|
569 |
+
"resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
|
570 |
+
"integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
|
571 |
+
"dev": true,
|
572 |
+
"requires": {
|
573 |
+
"escape-string-regexp": "^1.0.5",
|
574 |
+
"object-assign": "^4.1.0"
|
575 |
+
}
|
576 |
+
},
|
577 |
+
"fill-range": {
|
578 |
+
"version": "7.0.1",
|
579 |
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
580 |
+
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
581 |
+
"dev": true,
|
582 |
+
"requires": {
|
583 |
+
"to-regex-range": "^5.0.1"
|
584 |
+
}
|
585 |
+
},
|
586 |
+
"find-up": {
|
587 |
+
"version": "1.1.2",
|
588 |
+
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
|
589 |
+
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
|
590 |
+
"dev": true,
|
591 |
+
"requires": {
|
592 |
+
"path-exists": "^2.0.0",
|
593 |
+
"pinkie-promise": "^2.0.0"
|
594 |
+
}
|
595 |
+
},
|
596 |
+
"findup-sync": {
|
597 |
+
"version": "0.3.0",
|
598 |
+
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
|
599 |
+
"integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
|
600 |
+
"dev": true,
|
601 |
+
"requires": {
|
602 |
+
"glob": "~5.0.0"
|
603 |
+
},
|
604 |
+
"dependencies": {
|
605 |
+
"glob": {
|
606 |
+
"version": "5.0.15",
|
607 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
|
608 |
+
"integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
|
609 |
+
"dev": true,
|
610 |
+
"requires": {
|
611 |
+
"inflight": "^1.0.4",
|
612 |
+
"inherits": "2",
|
613 |
+
"minimatch": "2 || 3",
|
614 |
+
"once": "^1.3.0",
|
615 |
+
"path-is-absolute": "^1.0.0"
|
616 |
+
}
|
617 |
+
}
|
618 |
+
}
|
619 |
+
},
|
620 |
+
"fs.realpath": {
|
621 |
+
"version": "1.0.0",
|
622 |
+
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
623 |
+
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
624 |
+
"dev": true
|
625 |
+
},
|
626 |
+
"get-own-enumerable-property-symbols": {
|
627 |
+
"version": "3.0.1",
|
628 |
+
"resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz",
|
629 |
+
"integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==",
|
630 |
+
"dev": true
|
631 |
+
},
|
632 |
+
"get-stdin": {
|
633 |
+
"version": "4.0.1",
|
634 |
+
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
|
635 |
+
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
|
636 |
+
"dev": true
|
637 |
+
},
|
638 |
+
"get-stream": {
|
639 |
+
"version": "4.1.0",
|
640 |
+
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
|
641 |
+
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
|
642 |
+
"dev": true,
|
643 |
+
"requires": {
|
644 |
+
"pump": "^3.0.0"
|
645 |
+
}
|
646 |
+
},
|
647 |
+
"getobject": {
|
648 |
+
"version": "0.1.0",
|
649 |
+
"resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
|
650 |
+
"integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
|
651 |
+
"dev": true
|
652 |
+
},
|
653 |
+
"glob": {
|
654 |
+
"version": "7.0.6",
|
655 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
|
656 |
+
"integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
|
657 |
+
"dev": true,
|
658 |
+
"requires": {
|
659 |
+
"fs.realpath": "^1.0.0",
|
660 |
+
"inflight": "^1.0.4",
|
661 |
+
"inherits": "2",
|
662 |
+
"minimatch": "^3.0.2",
|
663 |
+
"once": "^1.3.0",
|
664 |
+
"path-is-absolute": "^1.0.0"
|
665 |
+
}
|
666 |
+
},
|
667 |
+
"glob-parent": {
|
668 |
+
"version": "5.1.0",
|
669 |
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
|
670 |
+
"integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
|
671 |
+
"dev": true,
|
672 |
+
"requires": {
|
673 |
+
"is-glob": "^4.0.1"
|
674 |
+
}
|
675 |
+
},
|
676 |
+
"globby": {
|
677 |
+
"version": "10.0.1",
|
678 |
+
"resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
|
679 |
+
"integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
|
680 |
+
"dev": true,
|
681 |
+
"requires": {
|
682 |
+
"@types/glob": "^7.1.1",
|
683 |
+
"array-union": "^2.1.0",
|
684 |
+
"dir-glob": "^3.0.1",
|
685 |
+
"fast-glob": "^3.0.3",
|
686 |
+
"glob": "^7.1.3",
|
687 |
+
"ignore": "^5.1.1",
|
688 |
+
"merge2": "^1.2.3",
|
689 |
+
"slash": "^3.0.0"
|
690 |
+
},
|
691 |
+
"dependencies": {
|
692 |
+
"glob": {
|
693 |
+
"version": "7.1.5",
|
694 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
|
695 |
+
"integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
|
696 |
+
"dev": true,
|
697 |
+
"requires": {
|
698 |
+
"fs.realpath": "^1.0.0",
|
699 |
+
"inflight": "^1.0.4",
|
700 |
+
"inherits": "2",
|
701 |
+
"minimatch": "^3.0.4",
|
702 |
+
"once": "^1.3.0",
|
703 |
+
"path-is-absolute": "^1.0.0"
|
704 |
+
}
|
705 |
+
}
|
706 |
+
}
|
707 |
+
},
|
708 |
+
"graceful-fs": {
|
709 |
+
"version": "4.2.3",
|
710 |
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
711 |
+
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
|
712 |
+
"dev": true
|
713 |
+
},
|
714 |
+
"grunt": {
|
715 |
+
"version": "1.0.4",
|
716 |
+
"resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz",
|
717 |
+
"integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==",
|
718 |
+
"dev": true,
|
719 |
+
"requires": {
|
720 |
+
"coffeescript": "~1.10.0",
|
721 |
+
"dateformat": "~1.0.12",
|
722 |
+
"eventemitter2": "~0.4.13",
|
723 |
+
"exit": "~0.1.1",
|
724 |
+
"findup-sync": "~0.3.0",
|
725 |
+
"glob": "~7.0.0",
|
726 |
+
"grunt-cli": "~1.2.0",
|
727 |
+
"grunt-known-options": "~1.1.0",
|
728 |
+
"grunt-legacy-log": "~2.0.0",
|
729 |
+
"grunt-legacy-util": "~1.1.1",
|
730 |
+
"iconv-lite": "~0.4.13",
|
731 |
+
"js-yaml": "~3.13.0",
|
732 |
+
"minimatch": "~3.0.2",
|
733 |
+
"mkdirp": "~0.5.1",
|
734 |
+
"nopt": "~3.0.6",
|
735 |
+
"path-is-absolute": "~1.0.0",
|
736 |
+
"rimraf": "~2.6.2"
|
737 |
+
},
|
738 |
+
"dependencies": {
|
739 |
+
"grunt-cli": {
|
740 |
+
"version": "1.2.0",
|
741 |
+
"resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
|
742 |
+
"integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
|
743 |
+
"dev": true,
|
744 |
+
"requires": {
|
745 |
+
"findup-sync": "~0.3.0",
|
746 |
+
"grunt-known-options": "~1.1.0",
|
747 |
+
"nopt": "~3.0.6",
|
748 |
+
"resolve": "~1.1.0"
|
749 |
+
}
|
750 |
+
},
|
751 |
+
"resolve": {
|
752 |
+
"version": "1.1.7",
|
753 |
+
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
|
754 |
+
"integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
|
755 |
+
"dev": true
|
756 |
+
}
|
757 |
+
}
|
758 |
+
},
|
759 |
+
"grunt-checktextdomain": {
|
760 |
+
"version": "1.0.1",
|
761 |
+
"resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz",
|
762 |
+
"integrity": "sha1-slTQHh3pEwBdTbHFMD2QI7mD4Zs=",
|
763 |
+
"dev": true,
|
764 |
+
"requires": {
|
765 |
+
"chalk": "~0.2.1",
|
766 |
+
"text-table": "~0.2.0"
|
767 |
+
},
|
768 |
+
"dependencies": {
|
769 |
+
"ansi-styles": {
|
770 |
+
"version": "0.2.0",
|
771 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz",
|
772 |
+
"integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=",
|
773 |
+
"dev": true
|
774 |
+
},
|
775 |
+
"chalk": {
|
776 |
+
"version": "0.2.1",
|
777 |
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz",
|
778 |
+
"integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=",
|
779 |
+
"dev": true,
|
780 |
+
"requires": {
|
781 |
+
"ansi-styles": "~0.2.0",
|
782 |
+
"has-color": "~0.1.0"
|
783 |
+
}
|
784 |
+
}
|
785 |
+
}
|
786 |
+
},
|
787 |
+
"grunt-known-options": {
|
788 |
+
"version": "1.1.1",
|
789 |
+
"resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
|
790 |
+
"integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==",
|
791 |
+
"dev": true
|
792 |
+
},
|
793 |
+
"grunt-legacy-log": {
|
794 |
+
"version": "2.0.0",
|
795 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
|
796 |
+
"integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
|
797 |
+
"dev": true,
|
798 |
+
"requires": {
|
799 |
+
"colors": "~1.1.2",
|
800 |
+
"grunt-legacy-log-utils": "~2.0.0",
|
801 |
+
"hooker": "~0.2.3",
|
802 |
+
"lodash": "~4.17.5"
|
803 |
+
}
|
804 |
+
},
|
805 |
+
"grunt-legacy-log-utils": {
|
806 |
+
"version": "2.0.1",
|
807 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
|
808 |
+
"integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
|
809 |
+
"dev": true,
|
810 |
+
"requires": {
|
811 |
+
"chalk": "~2.4.1",
|
812 |
+
"lodash": "~4.17.10"
|
813 |
+
}
|
814 |
+
},
|
815 |
+
"grunt-legacy-util": {
|
816 |
+
"version": "1.1.1",
|
817 |
+
"resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
|
818 |
+
"integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
|
819 |
+
"dev": true,
|
820 |
+
"requires": {
|
821 |
+
"async": "~1.5.2",
|
822 |
+
"exit": "~0.1.1",
|
823 |
+
"getobject": "~0.1.0",
|
824 |
+
"hooker": "~0.2.3",
|
825 |
+
"lodash": "~4.17.10",
|
826 |
+
"underscore.string": "~3.3.4",
|
827 |
+
"which": "~1.3.0"
|
828 |
+
}
|
829 |
+
},
|
830 |
+
"grunt-phpcs": {
|
831 |
+
"version": "0.4.0",
|
832 |
+
"resolved": "https://registry.npmjs.org/grunt-phpcs/-/grunt-phpcs-0.4.0.tgz",
|
833 |
+
"integrity": "sha1-oI1iX8ZEZeRTsr2T+BCyqB6Uvao=",
|
834 |
+
"dev": true
|
835 |
+
},
|
836 |
+
"has-ansi": {
|
837 |
+
"version": "2.0.0",
|
838 |
+
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
|
839 |
+
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
|
840 |
+
"dev": true,
|
841 |
+
"requires": {
|
842 |
+
"ansi-regex": "^2.0.0"
|
843 |
+
}
|
844 |
+
},
|
845 |
+
"has-color": {
|
846 |
+
"version": "0.1.7",
|
847 |
+
"resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
|
848 |
+
"integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
|
849 |
+
"dev": true
|
850 |
+
},
|
851 |
+
"has-flag": {
|
852 |
+
"version": "3.0.0",
|
853 |
+
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
854 |
+
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
855 |
+
"dev": true
|
856 |
+
},
|
857 |
+
"hooker": {
|
858 |
+
"version": "0.2.3",
|
859 |
+
"resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
|
860 |
+
"integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
|
861 |
+
"dev": true
|
862 |
+
},
|
863 |
+
"hosted-git-info": {
|
864 |
+
"version": "2.8.5",
|
865 |
+
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
|
866 |
+
"integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
|
867 |
+
"dev": true
|
868 |
+
},
|
869 |
+
"husky": {
|
870 |
+
"version": "3.0.9",
|
871 |
+
"resolved": "https://registry.npmjs.org/husky/-/husky-3.0.9.tgz",
|
872 |
+
"integrity": "sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg==",
|
873 |
+
"dev": true,
|
874 |
+
"requires": {
|
875 |
+
"chalk": "^2.4.2",
|
876 |
+
"ci-info": "^2.0.0",
|
877 |
+
"cosmiconfig": "^5.2.1",
|
878 |
+
"execa": "^1.0.0",
|
879 |
+
"get-stdin": "^7.0.0",
|
880 |
+
"opencollective-postinstall": "^2.0.2",
|
881 |
+
"pkg-dir": "^4.2.0",
|
882 |
+
"please-upgrade-node": "^3.2.0",
|
883 |
+
"read-pkg": "^5.2.0",
|
884 |
+
"run-node": "^1.0.0",
|
885 |
+
"slash": "^3.0.0"
|
886 |
+
},
|
887 |
+
"dependencies": {
|
888 |
+
"get-stdin": {
|
889 |
+
"version": "7.0.0",
|
890 |
+
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
|
891 |
+
"integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
|
892 |
+
"dev": true
|
893 |
+
},
|
894 |
+
"parse-json": {
|
895 |
+
"version": "5.0.0",
|
896 |
+
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
|
897 |
+
"integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
|
898 |
+
"dev": true,
|
899 |
+
"requires": {
|
900 |
+
"@babel/code-frame": "^7.0.0",
|
901 |
+
"error-ex": "^1.3.1",
|
902 |
+
"json-parse-better-errors": "^1.0.1",
|
903 |
+
"lines-and-columns": "^1.1.6"
|
904 |
+
}
|
905 |
+
},
|
906 |
+
"read-pkg": {
|
907 |
+
"version": "5.2.0",
|
908 |
+
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
|
909 |
+
"integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
|
910 |
+
"dev": true,
|
911 |
+
"requires": {
|
912 |
+
"@types/normalize-package-data": "^2.4.0",
|
913 |
+
"normalize-package-data": "^2.5.0",
|
914 |
+
"parse-json": "^5.0.0",
|
915 |
+
"type-fest": "^0.6.0"
|
916 |
+
}
|
917 |
+
}
|
918 |
+
}
|
919 |
+
},
|
920 |
+
"iconv-lite": {
|
921 |
+
"version": "0.4.24",
|
922 |
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
923 |
+
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
924 |
+
"dev": true,
|
925 |
+
"requires": {
|
926 |
+
"safer-buffer": ">= 2.1.2 < 3"
|
927 |
+
}
|
928 |
+
},
|
929 |
+
"ignore": {
|
930 |
+
"version": "5.1.4",
|
931 |
+
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
|
932 |
+
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
|
933 |
+
"dev": true
|
934 |
+
},
|
935 |
+
"import-fresh": {
|
936 |
+
"version": "2.0.0",
|
937 |
+
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
|
938 |
+
"integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
|
939 |
+
"dev": true,
|
940 |
+
"requires": {
|
941 |
+
"caller-path": "^2.0.0",
|
942 |
+
"resolve-from": "^3.0.0"
|
943 |
+
}
|
944 |
+
},
|
945 |
+
"indent-string": {
|
946 |
+
"version": "2.1.0",
|
947 |
+
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
|
948 |
+
"integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
|
949 |
+
"dev": true,
|
950 |
+
"requires": {
|
951 |
+
"repeating": "^2.0.0"
|
952 |
+
}
|
953 |
+
},
|
954 |
+
"inflight": {
|
955 |
+
"version": "1.0.6",
|
956 |
+
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
957 |
+
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
958 |
+
"dev": true,
|
959 |
+
"requires": {
|
960 |
+
"once": "^1.3.0",
|
961 |
+
"wrappy": "1"
|
962 |
+
}
|
963 |
+
},
|
964 |
+
"inherits": {
|
965 |
+
"version": "2.0.4",
|
966 |
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
967 |
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
968 |
+
"dev": true
|
969 |
+
},
|
970 |
+
"is-arrayish": {
|
971 |
+
"version": "0.2.1",
|
972 |
+
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
973 |
+
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
|
974 |
+
"dev": true
|
975 |
+
},
|
976 |
+
"is-directory": {
|
977 |
+
"version": "0.3.1",
|
978 |
+
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
|
979 |
+
"integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
|
980 |
+
"dev": true
|
981 |
+
},
|
982 |
+
"is-extglob": {
|
983 |
+
"version": "2.1.1",
|
984 |
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
985 |
+
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
|
986 |
+
"dev": true
|
987 |
+
},
|
988 |
+
"is-finite": {
|
989 |
+
"version": "1.0.2",
|
990 |
+
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
|
991 |
+
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
|
992 |
+
"dev": true,
|
993 |
+
"requires": {
|
994 |
+
"number-is-nan": "^1.0.0"
|
995 |
+
}
|
996 |
+
},
|
997 |
+
"is-fullwidth-code-point": {
|
998 |
+
"version": "1.0.0",
|
999 |
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
1000 |
+
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
1001 |
+
"dev": true,
|
1002 |
+
"requires": {
|
1003 |
+
"number-is-nan": "^1.0.0"
|
1004 |
+
}
|
1005 |
+
},
|
1006 |
+
"is-glob": {
|
1007 |
+
"version": "4.0.1",
|
1008 |
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
1009 |
+
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
1010 |
+
"dev": true,
|
1011 |
+
"requires": {
|
1012 |
+
"is-extglob": "^2.1.1"
|
1013 |
+
}
|
1014 |
+
},
|
1015 |
+
"is-number": {
|
1016 |
+
"version": "7.0.0",
|
1017 |
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
1018 |
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
1019 |
+
"dev": true
|
1020 |
+
},
|
1021 |
+
"is-obj": {
|
1022 |
+
"version": "1.0.1",
|
1023 |
+
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
|
1024 |
+
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
|
1025 |
+
"dev": true
|
1026 |
+
},
|
1027 |
+
"is-observable": {
|
1028 |
+
"version": "1.1.0",
|
1029 |
+
"resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
|
1030 |
+
"integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
|
1031 |
+
"dev": true,
|
1032 |
+
"requires": {
|
1033 |
+
"symbol-observable": "^1.1.0"
|
1034 |
+
}
|
1035 |
+
},
|
1036 |
+
"is-path-cwd": {
|
1037 |
+
"version": "2.2.0",
|
1038 |
+
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
|
1039 |
+
"integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
|
1040 |
+
"dev": true
|
1041 |
+
},
|
1042 |
+
"is-path-inside": {
|
1043 |
+
"version": "3.0.2",
|
1044 |
+
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
|
1045 |
+
"integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
|
1046 |
+
"dev": true
|
1047 |
+
},
|
1048 |
+
"is-promise": {
|
1049 |
+
"version": "2.1.0",
|
1050 |
+
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
|
1051 |
+
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
|
1052 |
+
"dev": true
|
1053 |
+
},
|
1054 |
+
"is-regexp": {
|
1055 |
+
"version": "1.0.0",
|
1056 |
+
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
|
1057 |
+
"integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
|
1058 |
+
"dev": true
|
1059 |
+
},
|
1060 |
+
"is-stream": {
|
1061 |
+
"version": "1.1.0",
|
1062 |
+
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
|
1063 |
+
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
|
1064 |
+
"dev": true
|
1065 |
+
},
|
1066 |
+
"is-utf8": {
|
1067 |
+
"version": "0.2.1",
|
1068 |
+
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
1069 |
+
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
|
1070 |
+
"dev": true
|
1071 |
+
},
|
1072 |
+
"isexe": {
|
1073 |
+
"version": "2.0.0",
|
1074 |
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
1075 |
+
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
|
1076 |
+
"dev": true
|
1077 |
+
},
|
1078 |
+
"js-tokens": {
|
1079 |
+
"version": "4.0.0",
|
1080 |
+
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
1081 |
+
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
1082 |
+
"dev": true
|
1083 |
+
},
|
1084 |
+
"js-yaml": {
|
1085 |
+
"version": "3.13.1",
|
1086 |
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
|
1087 |
+
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
|
1088 |
+
"dev": true,
|
1089 |
+
"requires": {
|
1090 |
+
"argparse": "^1.0.7",
|
1091 |
+
"esprima": "^4.0.0"
|
1092 |
+
}
|
1093 |
+
},
|
1094 |
+
"json-parse-better-errors": {
|
1095 |
+
"version": "1.0.2",
|
1096 |
+
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
|
1097 |
+
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
|
1098 |
+
"dev": true
|
1099 |
+
},
|
1100 |
+
"lines-and-columns": {
|
1101 |
+
"version": "1.1.6",
|
1102 |
+
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
|
1103 |
+
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
|
1104 |
+
"dev": true
|
1105 |
+
},
|
1106 |
+
"lint-staged": {
|
1107 |
+
"version": "9.4.2",
|
1108 |
+
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz",
|
1109 |
+
"integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==",
|
1110 |
+
"dev": true,
|
1111 |
+
"requires": {
|
1112 |
+
"chalk": "^2.4.2",
|
1113 |
+
"commander": "^2.20.0",
|
1114 |
+
"cosmiconfig": "^5.2.1",
|
1115 |
+
"debug": "^4.1.1",
|
1116 |
+
"dedent": "^0.7.0",
|
1117 |
+
"del": "^5.0.0",
|
1118 |
+
"execa": "^2.0.3",
|
1119 |
+
"listr": "^0.14.3",
|
1120 |
+
"log-symbols": "^3.0.0",
|
1121 |
+
"micromatch": "^4.0.2",
|
1122 |
+
"normalize-path": "^3.0.0",
|
1123 |
+
"please-upgrade-node": "^3.1.1",
|
1124 |
+
"string-argv": "^0.3.0",
|
1125 |
+
"stringify-object": "^3.3.0"
|
1126 |
+
},
|
1127 |
+
"dependencies": {
|
1128 |
+
"cross-spawn": {
|
1129 |
+
"version": "7.0.1",
|
1130 |
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
|
1131 |
+
"integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
|
1132 |
+
"dev": true,
|
1133 |
+
"requires": {
|
1134 |
+
"path-key": "^3.1.0",
|
1135 |
+
"shebang-command": "^2.0.0",
|
1136 |
+
"which": "^2.0.1"
|
1137 |
+
}
|
1138 |
+
},
|
1139 |
+
"execa": {
|
1140 |
+
"version": "2.1.0",
|
1141 |
+
"resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz",
|
1142 |
+
"integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==",
|
1143 |
+
"dev": true,
|
1144 |
+
"requires": {
|
1145 |
+
"cross-spawn": "^7.0.0",
|
1146 |
+
"get-stream": "^5.0.0",
|
1147 |
+
"is-stream": "^2.0.0",
|
1148 |
+
"merge-stream": "^2.0.0",
|
1149 |
+
"npm-run-path": "^3.0.0",
|
1150 |
+
"onetime": "^5.1.0",
|
1151 |
+
"p-finally": "^2.0.0",
|
1152 |
+
"signal-exit": "^3.0.2",
|
1153 |
+
"strip-final-newline": "^2.0.0"
|
1154 |
+
}
|
1155 |
+
},
|
1156 |
+
"get-stream": {
|
1157 |
+
"version": "5.1.0",
|
1158 |
+
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
|
1159 |
+
"integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
|
1160 |
+
"dev": true,
|
1161 |
+
"requires": {
|
1162 |
+
"pump": "^3.0.0"
|
1163 |
+
}
|
1164 |
+
},
|
1165 |
+
"is-stream": {
|
1166 |
+
"version": "2.0.0",
|
1167 |
+
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
|
1168 |
+
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
|
1169 |
+
"dev": true
|
1170 |
+
},
|
1171 |
+
"npm-run-path": {
|
1172 |
+
"version": "3.1.0",
|
1173 |
+
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz",
|
1174 |
+
"integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==",
|
1175 |
+
"dev": true,
|
1176 |
+
"requires": {
|
1177 |
+
"path-key": "^3.0.0"
|
1178 |
+
}
|
1179 |
+
},
|
1180 |
+
"p-finally": {
|
1181 |
+
"version": "2.0.1",
|
1182 |
+
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
|
1183 |
+
"integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
|
1184 |
+
"dev": true
|
1185 |
+
},
|
1186 |
+
"path-key": {
|
1187 |
+
"version": "3.1.0",
|
1188 |
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz",
|
1189 |
+
"integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==",
|
1190 |
+
"dev": true
|
1191 |
+
},
|
1192 |
+
"shebang-command": {
|
1193 |
+
"version": "2.0.0",
|
1194 |
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
1195 |
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
1196 |
+
"dev": true,
|
1197 |
+
"requires": {
|
1198 |
+
"shebang-regex": "^3.0.0"
|
1199 |
+
}
|
1200 |
+
},
|
1201 |
+
"shebang-regex": {
|
1202 |
+
"version": "3.0.0",
|
1203 |
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
1204 |
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
1205 |
+
"dev": true
|
1206 |
+
},
|
1207 |
+
"which": {
|
1208 |
+
"version": "2.0.1",
|
1209 |
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz",
|
1210 |
+
"integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==",
|
1211 |
+
"dev": true,
|
1212 |
+
"requires": {
|
1213 |
+
"isexe": "^2.0.0"
|
1214 |
+
}
|
1215 |
+
}
|
1216 |
+
}
|
1217 |
+
},
|
1218 |
+
"listr": {
|
1219 |
+
"version": "0.14.3",
|
1220 |
+
"resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
|
1221 |
+
"integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
|
1222 |
+
"dev": true,
|
1223 |
+
"requires": {
|
1224 |
+
"@samverschueren/stream-to-observable": "^0.3.0",
|
1225 |
+
"is-observable": "^1.1.0",
|
1226 |
+
"is-promise": "^2.1.0",
|
1227 |
+
"is-stream": "^1.1.0",
|
1228 |
+
"listr-silent-renderer": "^1.1.1",
|
1229 |
+
"listr-update-renderer": "^0.5.0",
|
1230 |
+
"listr-verbose-renderer": "^0.5.0",
|
1231 |
+
"p-map": "^2.0.0",
|
1232 |
+
"rxjs": "^6.3.3"
|
1233 |
+
},
|
1234 |
+
"dependencies": {
|
1235 |
+
"p-map": {
|
1236 |
+
"version": "2.1.0",
|
1237 |
+
"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
|
1238 |
+
"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
|
1239 |
+
"dev": true
|
1240 |
+
}
|
1241 |
+
}
|
1242 |
+
},
|
1243 |
+
"listr-silent-renderer": {
|
1244 |
+
"version": "1.1.1",
|
1245 |
+
"resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
|
1246 |
+
"integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
|
1247 |
+
"dev": true
|
1248 |
+
},
|
1249 |
+
"listr-update-renderer": {
|
1250 |
+
"version": "0.5.0",
|
1251 |
+
"resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
|
1252 |
+
"integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
|
1253 |
+
"dev": true,
|
1254 |
+
"requires": {
|
1255 |
+
"chalk": "^1.1.3",
|
1256 |
+
"cli-truncate": "^0.2.1",
|
1257 |
+
"elegant-spinner": "^1.0.1",
|
1258 |
+
"figures": "^1.7.0",
|
1259 |
+
"indent-string": "^3.0.0",
|
1260 |
+
"log-symbols": "^1.0.2",
|
1261 |
+
"log-update": "^2.3.0",
|
1262 |
+
"strip-ansi": "^3.0.1"
|
1263 |
+
},
|
1264 |
+
"dependencies": {
|
1265 |
+
"ansi-styles": {
|
1266 |
+
"version": "2.2.1",
|
1267 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
|
1268 |
+
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
|
1269 |
+
"dev": true
|
1270 |
+
},
|
1271 |
+
"chalk": {
|
1272 |
+
"version": "1.1.3",
|
1273 |
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
1274 |
+
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
|
1275 |
+
"dev": true,
|
1276 |
+
"requires": {
|
1277 |
+
"ansi-styles": "^2.2.1",
|
1278 |
+
"escape-string-regexp": "^1.0.2",
|
1279 |
+
"has-ansi": "^2.0.0",
|
1280 |
+
"strip-ansi": "^3.0.0",
|
1281 |
+
"supports-color": "^2.0.0"
|
1282 |
+
}
|
1283 |
+
},
|
1284 |
+
"indent-string": {
|
1285 |
+
"version": "3.2.0",
|
1286 |
+
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
|
1287 |
+
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
|
1288 |
+
"dev": true
|
1289 |
+
},
|
1290 |
+
"log-symbols": {
|
1291 |
+
"version": "1.0.2",
|
1292 |
+
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
|
1293 |
+
"integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
|
1294 |
+
"dev": true,
|
1295 |
+
"requires": {
|
1296 |
+
"chalk": "^1.0.0"
|
1297 |
+
}
|
1298 |
+
},
|
1299 |
+
"supports-color": {
|
1300 |
+
"version": "2.0.0",
|
1301 |
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
1302 |
+
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
|
1303 |
+
"dev": true
|
1304 |
+
}
|
1305 |
+
}
|
1306 |
+
},
|
1307 |
+
"listr-verbose-renderer": {
|
1308 |
+
"version": "0.5.0",
|
1309 |
+
"resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
|
1310 |
+
"integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
|
1311 |
+
"dev": true,
|
1312 |
+
"requires": {
|
1313 |
+
"chalk": "^2.4.1",
|
1314 |
+
"cli-cursor": "^2.1.0",
|
1315 |
+
"date-fns": "^1.27.2",
|
1316 |
+
"figures": "^2.0.0"
|
1317 |
+
},
|
1318 |
+
"dependencies": {
|
1319 |
+
"figures": {
|
1320 |
+
"version": "2.0.0",
|
1321 |
+
"resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
|
1322 |
+
"integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
|
1323 |
+
"dev": true,
|
1324 |
+
"requires": {
|
1325 |
+
"escape-string-regexp": "^1.0.5"
|
1326 |
+
}
|
1327 |
+
}
|
1328 |
+
}
|
1329 |
+
},
|
1330 |
+
"load-json-file": {
|
1331 |
+
"version": "1.1.0",
|
1332 |
+
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
1333 |
+
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
|
1334 |
+
"dev": true,
|
1335 |
+
"requires": {
|
1336 |
+
"graceful-fs": "^4.1.2",
|
1337 |
+
"parse-json": "^2.2.0",
|
1338 |
+
"pify": "^2.0.0",
|
1339 |
+
"pinkie-promise": "^2.0.0",
|
1340 |
+
"strip-bom": "^2.0.0"
|
1341 |
+
}
|
1342 |
+
},
|
1343 |
+
"locate-path": {
|
1344 |
+
"version": "5.0.0",
|
1345 |
+
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
1346 |
+
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
1347 |
+
"dev": true,
|
1348 |
+
"requires": {
|
1349 |
+
"p-locate": "^4.1.0"
|
1350 |
+
}
|
1351 |
+
},
|
1352 |
+
"lodash": {
|
1353 |
+
"version": "4.17.15",
|
1354 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
1355 |
+
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
|
1356 |
+
"dev": true
|
1357 |
+
},
|
1358 |
+
"log-symbols": {
|
1359 |
+
"version": "3.0.0",
|
1360 |
+
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
|
1361 |
+
"integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
|
1362 |
+
"dev": true,
|
1363 |
+
"requires": {
|
1364 |
+
"chalk": "^2.4.2"
|
1365 |
+
}
|
1366 |
+
},
|
1367 |
+
"log-update": {
|
1368 |
+
"version": "2.3.0",
|
1369 |
+
"resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
|
1370 |
+
"integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
|
1371 |
+
"dev": true,
|
1372 |
+
"requires": {
|
1373 |
+
"ansi-escapes": "^3.0.0",
|
1374 |
+
"cli-cursor": "^2.0.0",
|
1375 |
+
"wrap-ansi": "^3.0.1"
|
1376 |
+
}
|
1377 |
+
},
|
1378 |
+
"loud-rejection": {
|
1379 |
+
"version": "1.6.0",
|
1380 |
+
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
|
1381 |
+
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
|
1382 |
+
"dev": true,
|
1383 |
+
"requires": {
|
1384 |
+
"currently-unhandled": "^0.4.1",
|
1385 |
+
"signal-exit": "^3.0.0"
|
1386 |
+
}
|
1387 |
+
},
|
1388 |
+
"map-obj": {
|
1389 |
+
"version": "1.0.1",
|
1390 |
+
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
|
1391 |
+
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
|
1392 |
+
"dev": true
|
1393 |
+
},
|
1394 |
+
"meow": {
|
1395 |
+
"version": "3.7.0",
|
1396 |
+
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
|
1397 |
+
"integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
|
1398 |
+
"dev": true,
|
1399 |
+
"requires": {
|
1400 |
+
"camelcase-keys": "^2.0.0",
|
1401 |
+
"decamelize": "^1.1.2",
|
1402 |
+
"loud-rejection": "^1.0.0",
|
1403 |
+
"map-obj": "^1.0.1",
|
1404 |
+
"minimist": "^1.1.3",
|
1405 |
+
"normalize-package-data": "^2.3.4",
|
1406 |
+
"object-assign": "^4.0.1",
|
1407 |
+
"read-pkg-up": "^1.0.1",
|
1408 |
+
"redent": "^1.0.0",
|
1409 |
+
"trim-newlines": "^1.0.0"
|
1410 |
+
}
|
1411 |
+
},
|
1412 |
+
"merge-stream": {
|
1413 |
+
"version": "2.0.0",
|
1414 |
+
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
1415 |
+
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
1416 |
+
"dev": true
|
1417 |
+
},
|
1418 |
+
"merge2": {
|
1419 |
+
"version": "1.3.0",
|
1420 |
+
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
|
1421 |
+
"integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
|
1422 |
+
"dev": true
|
1423 |
+
},
|
1424 |
+
"micromatch": {
|
1425 |
+
"version": "4.0.2",
|
1426 |
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
|
1427 |
+
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
|
1428 |
+
"dev": true,
|
1429 |
+
"requires": {
|
1430 |
+
"braces": "^3.0.1",
|
1431 |
+
"picomatch": "^2.0.5"
|
1432 |
+
}
|
1433 |
+
},
|
1434 |
+
"mimic-fn": {
|
1435 |
+
"version": "2.1.0",
|
1436 |
+
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
1437 |
+
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
|
1438 |
+
"dev": true
|
1439 |
+
},
|
1440 |
+
"minimatch": {
|
1441 |
+
"version": "3.0.4",
|
1442 |
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
1443 |
+
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
1444 |
+
"dev": true,
|
1445 |
+
"requires": {
|
1446 |
+
"brace-expansion": "^1.1.7"
|
1447 |
+
}
|
1448 |
+
},
|
1449 |
+
"minimist": {
|
1450 |
+
"version": "1.2.0",
|
1451 |
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
1452 |
+
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
|
1453 |
+
"dev": true
|
1454 |
+
},
|
1455 |
+
"mkdirp": {
|
1456 |
+
"version": "0.5.1",
|
1457 |
+
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
1458 |
+
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
1459 |
+
"dev": true,
|
1460 |
+
"requires": {
|
1461 |
+
"minimist": "0.0.8"
|
1462 |
+
},
|
1463 |
+
"dependencies": {
|
1464 |
+
"minimist": {
|
1465 |
+
"version": "0.0.8",
|
1466 |
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
1467 |
+
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
|
1468 |
+
"dev": true
|
1469 |
+
}
|
1470 |
+
}
|
1471 |
+
},
|
1472 |
+
"ms": {
|
1473 |
+
"version": "2.1.2",
|
1474 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
1475 |
+
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
1476 |
+
"dev": true
|
1477 |
+
},
|
1478 |
+
"nice-try": {
|
1479 |
+
"version": "1.0.5",
|
1480 |
+
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
|
1481 |
+
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
|
1482 |
+
"dev": true
|
1483 |
+
},
|
1484 |
+
"nopt": {
|
1485 |
+
"version": "3.0.6",
|
1486 |
+
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
|
1487 |
+
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
|
1488 |
+
"dev": true,
|
1489 |
+
"requires": {
|
1490 |
+
"abbrev": "1"
|
1491 |
+
}
|
1492 |
+
},
|
1493 |
+
"normalize-package-data": {
|
1494 |
+
"version": "2.5.0",
|
1495 |
+
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
1496 |
+
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
1497 |
+
"dev": true,
|
1498 |
+
"requires": {
|
1499 |
+
"hosted-git-info": "^2.1.4",
|
1500 |
+
"resolve": "^1.10.0",
|
1501 |
+
"semver": "2 || 3 || 4 || 5",
|
1502 |
+
"validate-npm-package-license": "^3.0.1"
|
1503 |
+
}
|
1504 |
+
},
|
1505 |
+
"normalize-path": {
|
1506 |
+
"version": "3.0.0",
|
1507 |
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
1508 |
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
1509 |
+
"dev": true
|
1510 |
+
},
|
1511 |
+
"npm-run-path": {
|
1512 |
+
"version": "2.0.2",
|
1513 |
+
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
1514 |
+
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
|
1515 |
+
"dev": true,
|
1516 |
+
"requires": {
|
1517 |
+
"path-key": "^2.0.0"
|
1518 |
+
}
|
1519 |
+
},
|
1520 |
+
"number-is-nan": {
|
1521 |
+
"version": "1.0.1",
|
1522 |
+
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
1523 |
+
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
1524 |
+
"dev": true
|
1525 |
+
},
|
1526 |
+
"object-assign": {
|
1527 |
+
"version": "4.1.1",
|
1528 |
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
1529 |
+
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
1530 |
+
"dev": true
|
1531 |
+
},
|
1532 |
+
"once": {
|
1533 |
+
"version": "1.4.0",
|
1534 |
+
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
1535 |
+
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
1536 |
+
"dev": true,
|
1537 |
+
"requires": {
|
1538 |
+
"wrappy": "1"
|
1539 |
+
}
|
1540 |
+
},
|
1541 |
+
"onetime": {
|
1542 |
+
"version": "5.1.0",
|
1543 |
+
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
|
1544 |
+
"integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
|
1545 |
+
"dev": true,
|
1546 |
+
"requires": {
|
1547 |
+
"mimic-fn": "^2.1.0"
|
1548 |
+
}
|
1549 |
+
},
|
1550 |
+
"opencollective-postinstall": {
|
1551 |
+
"version": "2.0.2",
|
1552 |
+
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
|
1553 |
+
"integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
|
1554 |
+
"dev": true
|
1555 |
+
},
|
1556 |
+
"p-finally": {
|
1557 |
+
"version": "1.0.0",
|
1558 |
+
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
|
1559 |
+
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
|
1560 |
+
"dev": true
|
1561 |
+
},
|
1562 |
+
"p-limit": {
|
1563 |
+
"version": "2.2.1",
|
1564 |
+
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
|
1565 |
+
"integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
|
1566 |
+
"dev": true,
|
1567 |
+
"requires": {
|
1568 |
+
"p-try": "^2.0.0"
|
1569 |
+
}
|
1570 |
+
},
|
1571 |
+
"p-locate": {
|
1572 |
+
"version": "4.1.0",
|
1573 |
+
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
1574 |
+
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
1575 |
+
"dev": true,
|
1576 |
+
"requires": {
|
1577 |
+
"p-limit": "^2.2.0"
|
1578 |
+
}
|
1579 |
+
},
|
1580 |
+
"p-map": {
|
1581 |
+
"version": "3.0.0",
|
1582 |
+
"resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
|
1583 |
+
"integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
|
1584 |
+
"dev": true,
|
1585 |
+
"requires": {
|
1586 |
+
"aggregate-error": "^3.0.0"
|
1587 |
+
}
|
1588 |
+
},
|
1589 |
+
"p-try": {
|
1590 |
+
"version": "2.2.0",
|
1591 |
+
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
1592 |
+
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
1593 |
+
"dev": true
|
1594 |
+
},
|
1595 |
+
"parse-json": {
|
1596 |
+
"version": "2.2.0",
|
1597 |
+
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
1598 |
+
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
|
1599 |
+
"dev": true,
|
1600 |
+
"requires": {
|
1601 |
+
"error-ex": "^1.2.0"
|
1602 |
+
}
|
1603 |
+
},
|
1604 |
+
"path-exists": {
|
1605 |
+
"version": "2.1.0",
|
1606 |
+
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
|
1607 |
+
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
|
1608 |
+
"dev": true,
|
1609 |
+
"requires": {
|
1610 |
+
"pinkie-promise": "^2.0.0"
|
1611 |
+
}
|
1612 |
+
},
|
1613 |
+
"path-is-absolute": {
|
1614 |
+
"version": "1.0.1",
|
1615 |
+
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
1616 |
+
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
1617 |
+
"dev": true
|
1618 |
+
},
|
1619 |
+
"path-key": {
|
1620 |
+
"version": "2.0.1",
|
1621 |
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
|
1622 |
+
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
|
1623 |
+
"dev": true
|
1624 |
+
},
|
1625 |
+
"path-parse": {
|
1626 |
+
"version": "1.0.6",
|
1627 |
+
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
1628 |
+
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
1629 |
+
"dev": true
|
1630 |
+
},
|
1631 |
+
"path-type": {
|
1632 |
+
"version": "1.1.0",
|
1633 |
+
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
|
1634 |
+
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
|
1635 |
+
"dev": true,
|
1636 |
+
"requires": {
|
1637 |
+
"graceful-fs": "^4.1.2",
|
1638 |
+
"pify": "^2.0.0",
|
1639 |
+
"pinkie-promise": "^2.0.0"
|
1640 |
+
}
|
1641 |
+
},
|
1642 |
+
"picomatch": {
|
1643 |
+
"version": "2.0.7",
|
1644 |
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz",
|
1645 |
+
"integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==",
|
1646 |
+
"dev": true
|
1647 |
+
},
|
1648 |
+
"pify": {
|
1649 |
+
"version": "2.3.0",
|
1650 |
+
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
1651 |
+
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
1652 |
+
"dev": true
|
1653 |
+
},
|
1654 |
+
"pinkie": {
|
1655 |
+
"version": "2.0.4",
|
1656 |
+
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
|
1657 |
+
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
|
1658 |
+
"dev": true
|
1659 |
+
},
|
1660 |
+
"pinkie-promise": {
|
1661 |
+
"version": "2.0.1",
|
1662 |
+
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
|
1663 |
+
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
|
1664 |
+
"dev": true,
|
1665 |
+
"requires": {
|
1666 |
+
"pinkie": "^2.0.0"
|
1667 |
+
}
|
1668 |
+
},
|
1669 |
+
"pkg-dir": {
|
1670 |
+
"version": "4.2.0",
|
1671 |
+
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
|
1672 |
+
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
|
1673 |
+
"dev": true,
|
1674 |
+
"requires": {
|
1675 |
+
"find-up": "^4.0.0"
|
1676 |
+
},
|
1677 |
+
"dependencies": {
|
1678 |
+
"find-up": {
|
1679 |
+
"version": "4.1.0",
|
1680 |
+
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
1681 |
+
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
1682 |
+
"dev": true,
|
1683 |
+
"requires": {
|
1684 |
+
"locate-path": "^5.0.0",
|
1685 |
+
"path-exists": "^4.0.0"
|
1686 |
+
}
|
1687 |
+
},
|
1688 |
+
"path-exists": {
|
1689 |
+
"version": "4.0.0",
|
1690 |
+
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
1691 |
+
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
1692 |
+
"dev": true
|
1693 |
+
}
|
1694 |
+
}
|
1695 |
+
},
|
1696 |
+
"please-upgrade-node": {
|
1697 |
+
"version": "3.2.0",
|
1698 |
+
"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
|
1699 |
+
"integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
|
1700 |
+
"dev": true,
|
1701 |
+
"requires": {
|
1702 |
+
"semver-compare": "^1.0.0"
|
1703 |
+
}
|
1704 |
+
},
|
1705 |
+
"pump": {
|
1706 |
+
"version": "3.0.0",
|
1707 |
+
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
1708 |
+
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
1709 |
+
"dev": true,
|
1710 |
+
"requires": {
|
1711 |
+
"end-of-stream": "^1.1.0",
|
1712 |
+
"once": "^1.3.1"
|
1713 |
+
}
|
1714 |
+
},
|
1715 |
+
"read-pkg": {
|
1716 |
+
"version": "1.1.0",
|
1717 |
+
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
|
1718 |
+
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
|
1719 |
+
"dev": true,
|
1720 |
+
"requires": {
|
1721 |
+
"load-json-file": "^1.0.0",
|
1722 |
+
"normalize-package-data": "^2.3.2",
|
1723 |
+
"path-type": "^1.0.0"
|
1724 |
+
}
|
1725 |
+
},
|
1726 |
+
"read-pkg-up": {
|
1727 |
+
"version": "1.0.1",
|
1728 |
+
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
|
1729 |
+
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
|
1730 |
+
"dev": true,
|
1731 |
+
"requires": {
|
1732 |
+
"find-up": "^1.0.0",
|
1733 |
+
"read-pkg": "^1.0.0"
|
1734 |
+
}
|
1735 |
+
},
|
1736 |
+
"redent": {
|
1737 |
+
"version": "1.0.0",
|
1738 |
+
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
|
1739 |
+
"integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
|
1740 |
+
"dev": true,
|
1741 |
+
"requires": {
|
1742 |
+
"indent-string": "^2.1.0",
|
1743 |
+
"strip-indent": "^1.0.1"
|
1744 |
+
}
|
1745 |
+
},
|
1746 |
+
"repeating": {
|
1747 |
+
"version": "2.0.1",
|
1748 |
+
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
|
1749 |
+
"integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
|
1750 |
+
"dev": true,
|
1751 |
+
"requires": {
|
1752 |
+
"is-finite": "^1.0.0"
|
1753 |
+
}
|
1754 |
+
},
|
1755 |
+
"resolve": {
|
1756 |
+
"version": "1.12.0",
|
1757 |
+
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
|
1758 |
+
"integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
|
1759 |
+
"dev": true,
|
1760 |
+
"requires": {
|
1761 |
+
"path-parse": "^1.0.6"
|
1762 |
+
}
|
1763 |
+
},
|
1764 |
+
"resolve-from": {
|
1765 |
+
"version": "3.0.0",
|
1766 |
+
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
|
1767 |
+
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
|
1768 |
+
"dev": true
|
1769 |
+
},
|
1770 |
+
"restore-cursor": {
|
1771 |
+
"version": "2.0.0",
|
1772 |
+
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
|
1773 |
+
"integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
|
1774 |
+
"dev": true,
|
1775 |
+
"requires": {
|
1776 |
+
"onetime": "^2.0.0",
|
1777 |
+
"signal-exit": "^3.0.2"
|
1778 |
+
},
|
1779 |
+
"dependencies": {
|
1780 |
+
"mimic-fn": {
|
1781 |
+
"version": "1.2.0",
|
1782 |
+
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
|
1783 |
+
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
|
1784 |
+
"dev": true
|
1785 |
+
},
|
1786 |
+
"onetime": {
|
1787 |
+
"version": "2.0.1",
|
1788 |
+
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
|
1789 |
+
"integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
|
1790 |
+
"dev": true,
|
1791 |
+
"requires": {
|
1792 |
+
"mimic-fn": "^1.0.0"
|
1793 |
+
}
|
1794 |
+
}
|
1795 |
+
}
|
1796 |
+
},
|
1797 |
+
"reusify": {
|
1798 |
+
"version": "1.0.4",
|
1799 |
+
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
|
1800 |
+
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
|
1801 |
+
"dev": true
|
1802 |
+
},
|
1803 |
+
"rimraf": {
|
1804 |
+
"version": "2.6.3",
|
1805 |
+
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
1806 |
+
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
1807 |
+
"dev": true,
|
1808 |
+
"requires": {
|
1809 |
+
"glob": "^7.1.3"
|
1810 |
+
},
|
1811 |
+
"dependencies": {
|
1812 |
+
"glob": {
|
1813 |
+
"version": "7.1.5",
|
1814 |
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.5.tgz",
|
1815 |
+
"integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
|
1816 |
+
"dev": true,
|
1817 |
+
"requires": {
|
1818 |
+
"fs.realpath": "^1.0.0",
|
1819 |
+
"inflight": "^1.0.4",
|
1820 |
+
"inherits": "2",
|
1821 |
+
"minimatch": "^3.0.4",
|
1822 |
+
"once": "^1.3.0",
|
1823 |
+
"path-is-absolute": "^1.0.0"
|
1824 |
+
}
|
1825 |
+
}
|
1826 |
+
}
|
1827 |
+
},
|
1828 |
+
"run-node": {
|
1829 |
+
"version": "1.0.0",
|
1830 |
+
"resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
|
1831 |
+
"integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
|
1832 |
+
"dev": true
|
1833 |
+
},
|
1834 |
+
"run-parallel": {
|
1835 |
+
"version": "1.1.9",
|
1836 |
+
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
|
1837 |
+
"integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
|
1838 |
+
"dev": true
|
1839 |
+
},
|
1840 |
+
"rxjs": {
|
1841 |
+
"version": "6.5.3",
|
1842 |
+
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
|
1843 |
+
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
|
1844 |
+
"dev": true,
|
1845 |
+
"requires": {
|
1846 |
+
"tslib": "^1.9.0"
|
1847 |
+
}
|
1848 |
+
},
|
1849 |
+
"safer-buffer": {
|
1850 |
+
"version": "2.1.2",
|
1851 |
+
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
1852 |
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
1853 |
+
"dev": true
|
1854 |
+
},
|
1855 |
+
"semver": {
|
1856 |
+
"version": "5.7.1",
|
1857 |
+
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
1858 |
+
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
1859 |
+
"dev": true
|
1860 |
+
},
|
1861 |
+
"semver-compare": {
|
1862 |
+
"version": "1.0.0",
|
1863 |
+
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
|
1864 |
+
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
|
1865 |
+
"dev": true
|
1866 |
+
},
|
1867 |
+
"shebang-command": {
|
1868 |
+
"version": "1.2.0",
|
1869 |
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
|
1870 |
+
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
|
1871 |
+
"dev": true,
|
1872 |
+
"requires": {
|
1873 |
+
"shebang-regex": "^1.0.0"
|
1874 |
+
}
|
1875 |
+
},
|
1876 |
+
"shebang-regex": {
|
1877 |
+
"version": "1.0.0",
|
1878 |
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
|
1879 |
+
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
|
1880 |
+
"dev": true
|
1881 |
+
},
|
1882 |
+
"signal-exit": {
|
1883 |
+
"version": "3.0.2",
|
1884 |
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
1885 |
+
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
1886 |
+
"dev": true
|
1887 |
+
},
|
1888 |
+
"slash": {
|
1889 |
+
"version": "3.0.0",
|
1890 |
+
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
1891 |
+
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
|
1892 |
+
"dev": true
|
1893 |
+
},
|
1894 |
+
"slice-ansi": {
|
1895 |
+
"version": "0.0.4",
|
1896 |
+
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
|
1897 |
+
"integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
|
1898 |
+
"dev": true
|
1899 |
+
},
|
1900 |
+
"spdx-correct": {
|
1901 |
+
"version": "3.1.0",
|
1902 |
+
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
|
1903 |
+
"integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
|
1904 |
+
"dev": true,
|
1905 |
+
"requires": {
|
1906 |
+
"spdx-expression-parse": "^3.0.0",
|
1907 |
+
"spdx-license-ids": "^3.0.0"
|
1908 |
+
}
|
1909 |
+
},
|
1910 |
+
"spdx-exceptions": {
|
1911 |
+
"version": "2.2.0",
|
1912 |
+
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
|
1913 |
+
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
|
1914 |
+
"dev": true
|
1915 |
+
},
|
1916 |
+
"spdx-expression-parse": {
|
1917 |
+
"version": "3.0.0",
|
1918 |
+
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
|
1919 |
+
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
|
1920 |
+
"dev": true,
|
1921 |
+
"requires": {
|
1922 |
+
"spdx-exceptions": "^2.1.0",
|
1923 |
+
"spdx-license-ids": "^3.0.0"
|
1924 |
+
}
|
1925 |
+
},
|
1926 |
+
"spdx-license-ids": {
|
1927 |
+
"version": "3.0.5",
|
1928 |
+
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
1929 |
+
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
1930 |
+
"dev": true
|
1931 |
+
},
|
1932 |
+
"sprintf-js": {
|
1933 |
+
"version": "1.1.2",
|
1934 |
+
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
|
1935 |
+
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
|
1936 |
+
"dev": true
|
1937 |
+
},
|
1938 |
+
"string-argv": {
|
1939 |
+
"version": "0.3.1",
|
1940 |
+
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
|
1941 |
+
"integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
|
1942 |
+
"dev": true
|
1943 |
+
},
|
1944 |
+
"string-width": {
|
1945 |
+
"version": "1.0.2",
|
1946 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
1947 |
+
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
1948 |
+
"dev": true,
|
1949 |
+
"requires": {
|
1950 |
+
"code-point-at": "^1.0.0",
|
1951 |
+
"is-fullwidth-code-point": "^1.0.0",
|
1952 |
+
"strip-ansi": "^3.0.0"
|
1953 |
+
}
|
1954 |
+
},
|
1955 |
+
"stringify-object": {
|
1956 |
+
"version": "3.3.0",
|
1957 |
+
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
|
1958 |
+
"integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
|
1959 |
+
"dev": true,
|
1960 |
+
"requires": {
|
1961 |
+
"get-own-enumerable-property-symbols": "^3.0.0",
|
1962 |
+
"is-obj": "^1.0.1",
|
1963 |
+
"is-regexp": "^1.0.0"
|
1964 |
+
}
|
1965 |
+
},
|
1966 |
+
"strip-ansi": {
|
1967 |
+
"version": "3.0.1",
|
1968 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
1969 |
+
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
1970 |
+
"dev": true,
|
1971 |
+
"requires": {
|
1972 |
+
"ansi-regex": "^2.0.0"
|
1973 |
+
}
|
1974 |
+
},
|
1975 |
+
"strip-bom": {
|
1976 |
+
"version": "2.0.0",
|
1977 |
+
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
|
1978 |
+
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
|
1979 |
+
"dev": true,
|
1980 |
+
"requires": {
|
1981 |
+
"is-utf8": "^0.2.0"
|
1982 |
+
}
|
1983 |
+
},
|
1984 |
+
"strip-eof": {
|
1985 |
+
"version": "1.0.0",
|
1986 |
+
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
|
1987 |
+
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
|
1988 |
+
"dev": true
|
1989 |
+
},
|
1990 |
+
"strip-final-newline": {
|
1991 |
+
"version": "2.0.0",
|
1992 |
+
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
|
1993 |
+
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
|
1994 |
+
"dev": true
|
1995 |
+
},
|
1996 |
+
"strip-indent": {
|
1997 |
+
"version": "1.0.1",
|
1998 |
+
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
|
1999 |
+
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
|
2000 |
+
"dev": true,
|
2001 |
+
"requires": {
|
2002 |
+
"get-stdin": "^4.0.1"
|
2003 |
+
}
|
2004 |
+
},
|
2005 |
+
"supports-color": {
|
2006 |
+
"version": "5.5.0",
|
2007 |
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
2008 |
+
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
2009 |
+
"dev": true,
|
2010 |
+
"requires": {
|
2011 |
+
"has-flag": "^3.0.0"
|
2012 |
+
}
|
2013 |
+
},
|
2014 |
+
"symbol-observable": {
|
2015 |
+
"version": "1.2.0",
|
2016 |
+
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
2017 |
+
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
|
2018 |
+
"dev": true
|
2019 |
+
},
|
2020 |
+
"text-table": {
|
2021 |
+
"version": "0.2.0",
|
2022 |
+
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
|
2023 |
+
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
|
2024 |
+
"dev": true
|
2025 |
+
},
|
2026 |
+
"to-regex-range": {
|
2027 |
+
"version": "5.0.1",
|
2028 |
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
2029 |
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
2030 |
+
"dev": true,
|
2031 |
+
"requires": {
|
2032 |
+
"is-number": "^7.0.0"
|
2033 |
+
}
|
2034 |
+
},
|
2035 |
+
"trim-newlines": {
|
2036 |
+
"version": "1.0.0",
|
2037 |
+
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
|
2038 |
+
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
|
2039 |
+
"dev": true
|
2040 |
+
},
|
2041 |
+
"tslib": {
|
2042 |
+
"version": "1.10.0",
|
2043 |
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
|
2044 |
+
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
|
2045 |
+
"dev": true
|
2046 |
+
},
|
2047 |
+
"type-fest": {
|
2048 |
+
"version": "0.6.0",
|
2049 |
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
|
2050 |
+
"integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
|
2051 |
+
"dev": true
|
2052 |
+
},
|
2053 |
+
"underscore.string": {
|
2054 |
+
"version": "3.3.5",
|
2055 |
+
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
|
2056 |
+
"integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
|
2057 |
+
"dev": true,
|
2058 |
+
"requires": {
|
2059 |
+
"sprintf-js": "^1.0.3",
|
2060 |
+
"util-deprecate": "^1.0.2"
|
2061 |
+
}
|
2062 |
+
},
|
2063 |
+
"util-deprecate": {
|
2064 |
+
"version": "1.0.2",
|
2065 |
+
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
2066 |
+
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
2067 |
+
"dev": true
|
2068 |
+
},
|
2069 |
+
"validate-npm-package-license": {
|
2070 |
+
"version": "3.0.4",
|
2071 |
+
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
2072 |
+
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
2073 |
+
"dev": true,
|
2074 |
+
"requires": {
|
2075 |
+
"spdx-correct": "^3.0.0",
|
2076 |
+
"spdx-expression-parse": "^3.0.0"
|
2077 |
+
}
|
2078 |
+
},
|
2079 |
+
"which": {
|
2080 |
+
"version": "1.3.1",
|
2081 |
+
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
2082 |
+
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
|
2083 |
+
"dev": true,
|
2084 |
+
"requires": {
|
2085 |
+
"isexe": "^2.0.0"
|
2086 |
+
}
|
2087 |
+
},
|
2088 |
+
"wrap-ansi": {
|
2089 |
+
"version": "3.0.1",
|
2090 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
|
2091 |
+
"integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
|
2092 |
+
"dev": true,
|
2093 |
+
"requires": {
|
2094 |
+
"string-width": "^2.1.1",
|
2095 |
+
"strip-ansi": "^4.0.0"
|
2096 |
+
},
|
2097 |
+
"dependencies": {
|
2098 |
+
"ansi-regex": {
|
2099 |
+
"version": "3.0.0",
|
2100 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
|
2101 |
+
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
|
2102 |
+
"dev": true
|
2103 |
+
},
|
2104 |
+
"is-fullwidth-code-point": {
|
2105 |
+
"version": "2.0.0",
|
2106 |
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
|
2107 |
+
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
|
2108 |
+
"dev": true
|
2109 |
+
},
|
2110 |
+
"string-width": {
|
2111 |
+
"version": "2.1.1",
|
2112 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
2113 |
+
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
|
2114 |
+
"dev": true,
|
2115 |
+
"requires": {
|
2116 |
+
"is-fullwidth-code-point": "^2.0.0",
|
2117 |
+
"strip-ansi": "^4.0.0"
|
2118 |
+
}
|
2119 |
+
},
|
2120 |
+
"strip-ansi": {
|
2121 |
+
"version": "4.0.0",
|
2122 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
|
2123 |
+
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
|
2124 |
+
"dev": true,
|
2125 |
+
"requires": {
|
2126 |
+
"ansi-regex": "^3.0.0"
|
2127 |
+
}
|
2128 |
+
}
|
2129 |
+
}
|
2130 |
+
},
|
2131 |
+
"wrappy": {
|
2132 |
+
"version": "1.0.2",
|
2133 |
+
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
2134 |
+
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
2135 |
+
"dev": true
|
2136 |
+
}
|
2137 |
+
}
|
2138 |
+
}
|
includes/vendor/action-scheduler/package.json
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "action-scheduler",
|
3 |
+
"title": "Action Scheduler",
|
4 |
+
"version": "3.1.4",
|
5 |
+
"homepage": "https://actionscheduler.org/",
|
6 |
+
"repository": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/woocommerce/action-scheduler.git"
|
9 |
+
},
|
10 |
+
"license": "GPL-3.0+",
|
11 |
+
"main": "Gruntfile.js",
|
12 |
+
"scripts": {
|
13 |
+
"build": "grunt",
|
14 |
+
"check-textdomain": "grunt checktextdomain",
|
15 |
+
"phpcs": "grunt phpcs"
|
16 |
+
},
|
17 |
+
"devDependencies": {
|
18 |
+
"grunt": "1.0.4",
|
19 |
+
"grunt-checktextdomain": "1.0.1",
|
20 |
+
"grunt-phpcs": "0.4.0",
|
21 |
+
"husky": "3.0.9",
|
22 |
+
"lint-staged": "9.4.2"
|
23 |
+
},
|
24 |
+
"engines": {
|
25 |
+
"node": ">=10.15.0",
|
26 |
+
"npm": ">=6.4.1"
|
27 |
+
},
|
28 |
+
"husky": {
|
29 |
+
"hooks": {
|
30 |
+
"pre-commit": "lint-staged"
|
31 |
+
}
|
32 |
+
},
|
33 |
+
"lint-staged": {
|
34 |
+
"*.php": [
|
35 |
+
"php -d display_errors=1 -l",
|
36 |
+
"composer run-script phpcs-pre-commit"
|
37 |
+
]
|
38 |
+
}
|
39 |
+
}
|
includes/vendor/action-scheduler/phpcs.xml
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<ruleset name="WordPress Coding Standards">
|
3 |
+
<description>WooCommerce dev PHP_CodeSniffer ruleset.</description>
|
4 |
+
|
5 |
+
<!-- Exclude paths -->
|
6 |
+
<exclude-pattern>docs/</exclude-pattern>
|
7 |
+
<exclude-pattern>*/node_modules/*</exclude-pattern>
|
8 |
+
<exclude-pattern>*/vendor/*</exclude-pattern>
|
9 |
+
|
10 |
+
<!-- Configs -->
|
11 |
+
<config name="minimum_supported_wp_version" value="4.7" />
|
12 |
+
<config name="testVersion" value="5.6-" />
|
13 |
+
|
14 |
+
<!-- Rules -->
|
15 |
+
<rule ref="WooCommerce-Core" />
|
16 |
+
|
17 |
+
<rule ref="WordPress.WP.I18n">
|
18 |
+
<properties>
|
19 |
+
<property name="text_domain" type="array" value="action-scheduler" />
|
20 |
+
</properties>
|
21 |
+
</rule>
|
22 |
+
|
23 |
+
<rule ref="WordPress.Files.FileName.InvalidClassFileName">
|
24 |
+
<exclude-pattern>classes/*</exclude-pattern>
|
25 |
+
<exclude-pattern>deprecated/*</exclude-pattern>
|
26 |
+
<exclude-pattern>lib/*</exclude-pattern>
|
27 |
+
<exclude-pattern>tests/*</exclude-pattern>
|
28 |
+
</rule>
|
29 |
+
<rule ref="WordPress.Files.FileName.NotHyphenatedLowercase">
|
30 |
+
<exclude-pattern>classes/*</exclude-pattern>
|
31 |
+
<exclude-pattern>deprecated/*</exclude-pattern>
|
32 |
+
<exclude-pattern>lib/*</exclude-pattern>
|
33 |
+
<exclude-pattern>tests/*</exclude-pattern>
|
34 |
+
</rule>
|
35 |
+
|
36 |
+
<rule ref="Generic.Commenting">
|
37 |
+
<exclude-pattern>tests/</exclude-pattern>
|
38 |
+
</rule>
|
39 |
+
</ruleset>
|
includes/vendor/action-scheduler/tests/bootstrap.php
CHANGED
@@ -29,3 +29,6 @@ if ( class_exists( 'PHPUnit\Framework\TestResult' ) ) { // PHPUnit 6.0 or newer
|
|
29 |
} else {
|
30 |
include_once('phpunit/deprecated/ActionScheduler_UnitTestCase.php');
|
31 |
}
|
|
|
|
|
|
29 |
} else {
|
30 |
include_once('phpunit/deprecated/ActionScheduler_UnitTestCase.php');
|
31 |
}
|
32 |
+
|
33 |
+
include_once('phpunit/ActionScheduler_Mocker.php');
|
34 |
+
include_once('phpunit/ActionScheduler_Mock_Async_Request_QueueRunner.php');
|
includes/vendor/action-scheduler/tests/phpunit.xml.dist
CHANGED
@@ -12,8 +12,24 @@
|
|
12 |
bootstrap="bootstrap.php"
|
13 |
>
|
14 |
<testsuites>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
<testsuite name="Action Scheduler">
|
16 |
-
<directory>./phpunit</directory>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
</testsuite>
|
18 |
</testsuites>
|
19 |
<groups>
|
12 |
bootstrap="bootstrap.php"
|
13 |
>
|
14 |
<testsuites>
|
15 |
+
<testsuite name="Migration">
|
16 |
+
<directory phpVersion="5.6">./phpunit/migration</directory>
|
17 |
+
</testsuite>
|
18 |
+
<testsuite name="Tables">
|
19 |
+
<file phpVersion="5.6">./phpunit/jobstore/ActionScheduler_DBStoreMigrator_Test.php</file>
|
20 |
+
<file phpVersion="5.6">./phpunit/jobstore/ActionScheduler_DBStore_Test.php</file>
|
21 |
+
<file phpVersion="5.6">./phpunit/jobstore/ActionScheduler_HybridStore_Test.php</file>
|
22 |
+
<file phpVersion="5.6">./phpunit/logging/ActionScheduler_DBLogger_Test.php</file>
|
23 |
+
</testsuite>
|
24 |
<testsuite name="Action Scheduler">
|
25 |
+
<directory>./phpunit/helpers</directory>
|
26 |
+
<directory>./phpunit/jobs</directory>
|
27 |
+
<directory>./phpunit/procedural_api</directory>
|
28 |
+
<directory>./phpunit/runner</directory>
|
29 |
+
<directory>./phpunit/schedules</directory>
|
30 |
+
<directory>./phpunit/versioning</directory>
|
31 |
+
<file>./phpunit/logging/ActionScheduler_wpCommentLogger_Test.php</file>
|
32 |
+
<file>./phpunit/jobstore/ActionScheduler_wpPostStore_Test.php</file>
|
33 |
</testsuite>
|
34 |
</testsuites>
|
35 |
<groups>
|
includes/vendor/action-scheduler/tests/phpunit/ActionScheduler_Mock_Async_Request_QueueRunner.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ActionScheduler_Mock_AsyncRequest_QueueRunner
|
4 |
+
*/
|
5 |
+
|
6 |
+
defined( 'ABSPATH' ) || exit;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ActionScheduler_Mock_AsyncRequest_QueueRunner class.
|
10 |
+
*/
|
11 |
+
class ActionScheduler_Mock_AsyncRequest_QueueRunner extends ActionScheduler_AsyncRequest_QueueRunner {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Do not run queues via async requests.
|
15 |
+
*/
|
16 |
+
protected function allow() {
|
17 |
+
return false;
|
18 |
+
}
|
19 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/ActionScheduler_Mocker.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* ActionScheduler_Mocker
|
4 |
+
*/
|
5 |
+
|
6 |
+
defined( 'ABSPATH' ) || exit;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* ActionScheduler_Mocker class.
|
10 |
+
*/
|
11 |
+
class ActionScheduler_Mocker {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Do not run queues via async requests.
|
15 |
+
*
|
16 |
+
* @param ActionScheduler_Store $store
|
17 |
+
*/
|
18 |
+
public static function get_queue_runner( ActionScheduler_Store $store = null ) {
|
19 |
+
|
20 |
+
if ( ! $store ) {
|
21 |
+
$store = ActionScheduler_Store::instance();
|
22 |
+
}
|
23 |
+
|
24 |
+
return new ActionScheduler_QueueRunner( $store, null, null, self::get_async_request_queue_runner( $store ) );
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Get an instance of the mock queue runner
|
29 |
+
*
|
30 |
+
* @param ActionScheduler_Store $store
|
31 |
+
*/
|
32 |
+
protected static function get_async_request_queue_runner( ActionScheduler_Store $store ) {
|
33 |
+
return new ActionScheduler_Mock_AsyncRequest_QueueRunner( $store );
|
34 |
+
}
|
35 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/jobs/ActionScheduler_NullAction_Test.php
CHANGED
@@ -10,7 +10,7 @@ class ActionScheduler_NullAction_Test extends ActionScheduler_UnitTestCase {
|
|
10 |
|
11 |
$this->assertEmpty($action->get_hook());
|
12 |
$this->assertEmpty($action->get_args());
|
13 |
-
$this->assertNull($action->get_schedule()->
|
14 |
}
|
15 |
}
|
16 |
|
10 |
|
11 |
$this->assertEmpty($action->get_hook());
|
12 |
$this->assertEmpty($action->get_args());
|
13 |
+
$this->assertNull( $action->get_schedule()->get_date() );
|
14 |
}
|
15 |
}
|
16 |
|
includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStoreMigrator_Test.php
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_DBStoreMigrator_Test
|
5 |
+
* @group tables
|
6 |
+
*/
|
7 |
+
class ActionScheduler_DBStoreMigrator_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
|
9 |
+
public function test_create_action_with_last_attempt_date() {
|
10 |
+
$scheduled_date = as_get_datetime_object( strtotime( '-24 hours' ) );
|
11 |
+
$last_attempt_date = as_get_datetime_object( strtotime( '-23 hours' ) );
|
12 |
+
|
13 |
+
$action = new ActionScheduler_FinishedAction( 'my_hook', [], new ActionScheduler_SimpleSchedule( $scheduled_date ) );
|
14 |
+
$store = new ActionScheduler_DBStoreMigrator();
|
15 |
+
|
16 |
+
$action_id = $store->save_action( $action, null, $last_attempt_date );
|
17 |
+
$action_date = $store->get_date( $action_id );
|
18 |
+
|
19 |
+
$this->assertEquals( $last_attempt_date->format( 'U' ), $action_date->format( 'U' ) );
|
20 |
+
|
21 |
+
$action_id = $store->save_action( $action, $scheduled_date, $last_attempt_date );
|
22 |
+
$action_date = $store->get_date( $action_id );
|
23 |
+
|
24 |
+
$this->assertEquals( $last_attempt_date->format( 'U' ), $action_date->format( 'U' ) );
|
25 |
+
}
|
26 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_DBStore_Test.php
ADDED
@@ -0,0 +1,396 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_DBStore_Test
|
5 |
+
* @group tables
|
6 |
+
*/
|
7 |
+
class ActionScheduler_DBStore_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
|
9 |
+
public function test_create_action() {
|
10 |
+
$time = as_get_datetime_object();
|
11 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
12 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
13 |
+
$store = new ActionScheduler_DBStore();
|
14 |
+
$action_id = $store->save_action( $action );
|
15 |
+
|
16 |
+
$this->assertNotEmpty( $action_id );
|
17 |
+
}
|
18 |
+
|
19 |
+
public function test_create_action_with_scheduled_date() {
|
20 |
+
$time = as_get_datetime_object( strtotime( '-1 week' ) );
|
21 |
+
$action = new ActionScheduler_Action( 'my_hook', [], new ActionScheduler_SimpleSchedule( $time ) );
|
22 |
+
$store = new ActionScheduler_DBStore();
|
23 |
+
$action_id = $store->save_action( $action, $time );
|
24 |
+
$action_date = $store->get_date( $action_id );
|
25 |
+
|
26 |
+
$this->assertEquals( $time->format( 'U' ), $action_date->format( 'U' ) );
|
27 |
+
}
|
28 |
+
|
29 |
+
public function test_retrieve_action() {
|
30 |
+
$time = as_get_datetime_object();
|
31 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
32 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
33 |
+
$store = new ActionScheduler_DBStore();
|
34 |
+
$action_id = $store->save_action( $action );
|
35 |
+
|
36 |
+
$retrieved = $store->fetch_action( $action_id );
|
37 |
+
$this->assertEquals( $action->get_hook(), $retrieved->get_hook() );
|
38 |
+
$this->assertEqualSets( $action->get_args(), $retrieved->get_args() );
|
39 |
+
$this->assertEquals( $action->get_schedule()->get_date()->format( 'U' ), $retrieved->get_schedule()->get_date()->format( 'U' ) );
|
40 |
+
$this->assertEquals( $action->get_group(), $retrieved->get_group() );
|
41 |
+
}
|
42 |
+
|
43 |
+
public function test_cancel_action() {
|
44 |
+
$time = as_get_datetime_object();
|
45 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
46 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
47 |
+
$store = new ActionScheduler_DBStore();
|
48 |
+
$action_id = $store->save_action( $action );
|
49 |
+
$store->cancel_action( $action_id );
|
50 |
+
|
51 |
+
$fetched = $store->fetch_action( $action_id );
|
52 |
+
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
53 |
+
}
|
54 |
+
|
55 |
+
public function test_cancel_actions_by_hook() {
|
56 |
+
$store = new ActionScheduler_DBStore();
|
57 |
+
$actions = [];
|
58 |
+
$hook = 'by_hook_test';
|
59 |
+
for ( $day = 1; $day <= 3; $day++ ) {
|
60 |
+
$delta = sprintf( '+%d day', $day );
|
61 |
+
$time = as_get_datetime_object( $delta );
|
62 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
63 |
+
$action = new ActionScheduler_Action( $hook, [], $schedule, 'my_group' );
|
64 |
+
$actions[] = $store->save_action( $action );
|
65 |
+
}
|
66 |
+
$store->cancel_actions_by_hook( $hook );
|
67 |
+
|
68 |
+
foreach ( $actions as $action_id ) {
|
69 |
+
$fetched = $store->fetch_action( $action_id );
|
70 |
+
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
public function test_cancel_actions_by_group() {
|
75 |
+
$store = new ActionScheduler_DBStore();
|
76 |
+
$actions = [];
|
77 |
+
$group = 'by_group_test';
|
78 |
+
for ( $day = 1; $day <= 3; $day++ ) {
|
79 |
+
$delta = sprintf( '+%d day', $day );
|
80 |
+
$time = as_get_datetime_object( $delta );
|
81 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
82 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, $group );
|
83 |
+
$actions[] = $store->save_action( $action );
|
84 |
+
}
|
85 |
+
$store->cancel_actions_by_group( $group );
|
86 |
+
|
87 |
+
foreach ( $actions as $action_id ) {
|
88 |
+
$fetched = $store->fetch_action( $action_id );
|
89 |
+
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
public function test_claim_actions() {
|
94 |
+
$created_actions = [];
|
95 |
+
$store = new ActionScheduler_DBStore();
|
96 |
+
for ( $i = 3; $i > - 3; $i -- ) {
|
97 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
98 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
99 |
+
$action = new ActionScheduler_Action( 'my_hook', [ $i ], $schedule, 'my_group' );
|
100 |
+
|
101 |
+
$created_actions[] = $store->save_action( $action );
|
102 |
+
}
|
103 |
+
|
104 |
+
$claim = $store->stake_claim();
|
105 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
106 |
+
|
107 |
+
$this->assertCount( 3, $claim->get_actions() );
|
108 |
+
$this->assertEqualSets( array_slice( $created_actions, 3, 3 ), $claim->get_actions() );
|
109 |
+
}
|
110 |
+
|
111 |
+
public function test_claim_actions_order() {
|
112 |
+
|
113 |
+
$store = new ActionScheduler_DBStore();
|
114 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( '-1 hour' ) );
|
115 |
+
$created_actions = array(
|
116 |
+
$store->save_action( new ActionScheduler_Action( 'my_hook', array( 1 ), $schedule, 'my_group' ) ),
|
117 |
+
$store->save_action( new ActionScheduler_Action( 'my_hook', array( 1 ), $schedule, 'my_group' ) ),
|
118 |
+
);
|
119 |
+
|
120 |
+
$claim = $store->stake_claim();
|
121 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
122 |
+
|
123 |
+
// Verify uniqueness of action IDs.
|
124 |
+
$this->assertEquals( 2, count( array_unique( $created_actions ) ) );
|
125 |
+
|
126 |
+
// Verify the count and order of the actions.
|
127 |
+
$claimed_actions = $claim->get_actions();
|
128 |
+
$this->assertCount( 2, $claimed_actions );
|
129 |
+
$this->assertEquals( $created_actions, $claimed_actions );
|
130 |
+
|
131 |
+
// Verify the reversed order doesn't pass.
|
132 |
+
$reversed_actions = array_reverse( $created_actions );
|
133 |
+
$this->assertNotEquals( $reversed_actions, $claimed_actions );
|
134 |
+
}
|
135 |
+
|
136 |
+
public function test_claim_actions_by_hooks() {
|
137 |
+
$created_actions = $created_actions_by_hook = [];
|
138 |
+
$store = new ActionScheduler_DBStore();
|
139 |
+
$unique_hook_one = 'my_unique_hook_one';
|
140 |
+
$unique_hook_two = 'my_unique_hook_two';
|
141 |
+
$unique_hooks = array(
|
142 |
+
$unique_hook_one,
|
143 |
+
$unique_hook_two,
|
144 |
+
);
|
145 |
+
|
146 |
+
for ( $i = 3; $i > - 3; $i -- ) {
|
147 |
+
foreach ( $unique_hooks as $unique_hook ) {
|
148 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
149 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
150 |
+
$action = new ActionScheduler_Action( $unique_hook, [ $i ], $schedule, 'my_group' );
|
151 |
+
|
152 |
+
$action_id = $store->save_action( $action );
|
153 |
+
$created_actions[] = $created_actions_by_hook[ $unique_hook ][] = $action_id;
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
$claim = $store->stake_claim( 10, null, $unique_hooks );
|
158 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
159 |
+
$this->assertCount( 6, $claim->get_actions() );
|
160 |
+
$this->assertEqualSets( array_slice( $created_actions, 6, 6 ), $claim->get_actions() );
|
161 |
+
|
162 |
+
$store->release_claim( $claim );
|
163 |
+
|
164 |
+
$claim = $store->stake_claim( 10, null, array( $unique_hook_one ) );
|
165 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
166 |
+
$this->assertCount( 3, $claim->get_actions() );
|
167 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_one ], 3, 3 ), $claim->get_actions() );
|
168 |
+
|
169 |
+
$store->release_claim( $claim );
|
170 |
+
|
171 |
+
$claim = $store->stake_claim( 10, null, array( $unique_hook_two ) );
|
172 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
173 |
+
$this->assertCount( 3, $claim->get_actions() );
|
174 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_two ], 3, 3 ), $claim->get_actions() );
|
175 |
+
}
|
176 |
+
|
177 |
+
public function test_claim_actions_by_group() {
|
178 |
+
$created_actions = [];
|
179 |
+
$store = new ActionScheduler_DBStore();
|
180 |
+
$unique_group_one = 'my_unique_group_one';
|
181 |
+
$unique_group_two = 'my_unique_group_two';
|
182 |
+
$unique_groups = array(
|
183 |
+
$unique_group_one,
|
184 |
+
$unique_group_two,
|
185 |
+
);
|
186 |
+
|
187 |
+
for ( $i = 3; $i > - 3; $i -- ) {
|
188 |
+
foreach ( $unique_groups as $unique_group ) {
|
189 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
190 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
191 |
+
$action = new ActionScheduler_Action( 'my_hook', [ $i ], $schedule, $unique_group );
|
192 |
+
|
193 |
+
$created_actions[ $unique_group ][] = $store->save_action( $action );
|
194 |
+
}
|
195 |
+
}
|
196 |
+
|
197 |
+
$claim = $store->stake_claim( 10, null, array(), $unique_group_one );
|
198 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
199 |
+
$this->assertCount( 3, $claim->get_actions() );
|
200 |
+
$this->assertEqualSets( array_slice( $created_actions[ $unique_group_one ], 3, 3 ), $claim->get_actions() );
|
201 |
+
|
202 |
+
$store->release_claim( $claim );
|
203 |
+
|
204 |
+
$claim = $store->stake_claim( 10, null, array(), $unique_group_two );
|
205 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
206 |
+
$this->assertCount( 3, $claim->get_actions() );
|
207 |
+
$this->assertEqualSets( array_slice( $created_actions[ $unique_group_two ], 3, 3 ), $claim->get_actions() );
|
208 |
+
}
|
209 |
+
|
210 |
+
public function test_claim_actions_by_hook_and_group() {
|
211 |
+
$created_actions = $created_actions_by_hook = [];
|
212 |
+
$store = new ActionScheduler_DBStore();
|
213 |
+
|
214 |
+
$unique_hook_one = 'my_other_unique_hook_one';
|
215 |
+
$unique_hook_two = 'my_other_unique_hook_two';
|
216 |
+
$unique_hooks = array(
|
217 |
+
$unique_hook_one,
|
218 |
+
$unique_hook_two,
|
219 |
+
);
|
220 |
+
|
221 |
+
$unique_group_one = 'my_other_other_unique_group_one';
|
222 |
+
$unique_group_two = 'my_other_unique_group_two';
|
223 |
+
$unique_groups = array(
|
224 |
+
$unique_group_one,
|
225 |
+
$unique_group_two,
|
226 |
+
);
|
227 |
+
|
228 |
+
for ( $i = 3; $i > - 3; $i -- ) {
|
229 |
+
foreach ( $unique_hooks as $unique_hook ) {
|
230 |
+
foreach ( $unique_groups as $unique_group ) {
|
231 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
232 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
233 |
+
$action = new ActionScheduler_Action( $unique_hook, [ $i ], $schedule, $unique_group );
|
234 |
+
|
235 |
+
$action_id = $store->save_action( $action );
|
236 |
+
$created_actions[ $unique_group ][] = $action_id;
|
237 |
+
$created_actions_by_hook[ $unique_hook ][ $unique_group ][] = $action_id;
|
238 |
+
}
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
/** Test Both Hooks with Each Group */
|
243 |
+
|
244 |
+
$claim = $store->stake_claim( 10, null, $unique_hooks, $unique_group_one );
|
245 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
246 |
+
$this->assertCount( 6, $claim->get_actions() );
|
247 |
+
$this->assertEqualSets( array_slice( $created_actions[ $unique_group_one ], 6, 6 ), $claim->get_actions() );
|
248 |
+
|
249 |
+
$store->release_claim( $claim );
|
250 |
+
|
251 |
+
$claim = $store->stake_claim( 10, null, $unique_hooks, $unique_group_two );
|
252 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
253 |
+
$this->assertCount( 6, $claim->get_actions() );
|
254 |
+
$this->assertEqualSets( array_slice( $created_actions[ $unique_group_two ], 6, 6 ), $claim->get_actions() );
|
255 |
+
|
256 |
+
$store->release_claim( $claim );
|
257 |
+
|
258 |
+
/** Test Just One Hook with Group One */
|
259 |
+
|
260 |
+
$claim = $store->stake_claim( 10, null, array( $unique_hook_one ), $unique_group_one );
|
261 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
262 |
+
$this->assertCount( 3, $claim->get_actions() );
|
263 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_one ][ $unique_group_one ], 3, 3 ), $claim->get_actions() );
|
264 |
+
|
265 |
+
$store->release_claim( $claim );
|
266 |
+
|
267 |
+
$claim = $store->stake_claim( 24, null, array( $unique_hook_two ), $unique_group_one );
|
268 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
269 |
+
$this->assertCount( 3, $claim->get_actions() );
|
270 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_two ][ $unique_group_one ], 3, 3 ), $claim->get_actions() );
|
271 |
+
|
272 |
+
$store->release_claim( $claim );
|
273 |
+
|
274 |
+
/** Test Just One Hook with Group Two */
|
275 |
+
|
276 |
+
$claim = $store->stake_claim( 10, null, array( $unique_hook_one ), $unique_group_two );
|
277 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
278 |
+
$this->assertCount( 3, $claim->get_actions() );
|
279 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_one ][ $unique_group_two ], 3, 3 ), $claim->get_actions() );
|
280 |
+
|
281 |
+
$store->release_claim( $claim );
|
282 |
+
|
283 |
+
$claim = $store->stake_claim( 24, null, array( $unique_hook_two ), $unique_group_two );
|
284 |
+
$this->assertInstanceof( 'ActionScheduler_ActionClaim', $claim );
|
285 |
+
$this->assertCount( 3, $claim->get_actions() );
|
286 |
+
$this->assertEqualSets( array_slice( $created_actions_by_hook[ $unique_hook_two ][ $unique_group_two ], 3, 3 ), $claim->get_actions() );
|
287 |
+
}
|
288 |
+
|
289 |
+
public function test_duplicate_claim() {
|
290 |
+
$created_actions = [];
|
291 |
+
$store = new ActionScheduler_DBStore();
|
292 |
+
for ( $i = 0; $i > - 3; $i -- ) {
|
293 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
294 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
295 |
+
$action = new ActionScheduler_Action( 'my_hook', [ $i ], $schedule, 'my_group' );
|
296 |
+
|
297 |
+
$created_actions[] = $store->save_action( $action );
|
298 |
+
}
|
299 |
+
|
300 |
+
$claim1 = $store->stake_claim();
|
301 |
+
$claim2 = $store->stake_claim();
|
302 |
+
$this->assertCount( 3, $claim1->get_actions() );
|
303 |
+
$this->assertCount( 0, $claim2->get_actions() );
|
304 |
+
}
|
305 |
+
|
306 |
+
public function test_release_claim() {
|
307 |
+
$created_actions = [];
|
308 |
+
$store = new ActionScheduler_DBStore();
|
309 |
+
for ( $i = 0; $i > - 3; $i -- ) {
|
310 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
311 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
312 |
+
$action = new ActionScheduler_Action( 'my_hook', [ $i ], $schedule, 'my_group' );
|
313 |
+
|
314 |
+
$created_actions[] = $store->save_action( $action );
|
315 |
+
}
|
316 |
+
|
317 |
+
$claim1 = $store->stake_claim();
|
318 |
+
|
319 |
+
$store->release_claim( $claim1 );
|
320 |
+
|
321 |
+
$claim2 = $store->stake_claim();
|
322 |
+
$this->assertCount( 3, $claim2->get_actions() );
|
323 |
+
}
|
324 |
+
|
325 |
+
public function test_search() {
|
326 |
+
$created_actions = [];
|
327 |
+
$store = new ActionScheduler_DBStore();
|
328 |
+
for ( $i = - 3; $i <= 3; $i ++ ) {
|
329 |
+
$time = as_get_datetime_object( $i . ' hours' );
|
330 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
331 |
+
$action = new ActionScheduler_Action( 'my_hook', [ $i ], $schedule, 'my_group' );
|
332 |
+
|
333 |
+
$created_actions[] = $store->save_action( $action );
|
334 |
+
}
|
335 |
+
|
336 |
+
$next_no_args = $store->find_action( 'my_hook' );
|
337 |
+
$this->assertEquals( $created_actions[ 0 ], $next_no_args );
|
338 |
+
|
339 |
+
$next_with_args = $store->find_action( 'my_hook', [ 'args' => [ 1 ] ] );
|
340 |
+
$this->assertEquals( $created_actions[ 4 ], $next_with_args );
|
341 |
+
|
342 |
+
$non_existent = $store->find_action( 'my_hook', [ 'args' => [ 17 ] ] );
|
343 |
+
$this->assertNull( $non_existent );
|
344 |
+
}
|
345 |
+
|
346 |
+
public function test_search_by_group() {
|
347 |
+
$store = new ActionScheduler_DBStore();
|
348 |
+
$schedule = new ActionScheduler_SimpleSchedule( as_get_datetime_object( 'tomorrow' ) );
|
349 |
+
|
350 |
+
$abc = $store->save_action( new ActionScheduler_Action( 'my_hook', [ 1 ], $schedule, 'abc' ) );
|
351 |
+
$def = $store->save_action( new ActionScheduler_Action( 'my_hook', [ 1 ], $schedule, 'def' ) );
|
352 |
+
$ghi = $store->save_action( new ActionScheduler_Action( 'my_hook', [ 1 ], $schedule, 'ghi' ) );
|
353 |
+
|
354 |
+
$this->assertEquals( $abc, $store->find_action( 'my_hook', [ 'group' => 'abc' ] ) );
|
355 |
+
$this->assertEquals( $def, $store->find_action( 'my_hook', [ 'group' => 'def' ] ) );
|
356 |
+
$this->assertEquals( $ghi, $store->find_action( 'my_hook', [ 'group' => 'ghi' ] ) );
|
357 |
+
}
|
358 |
+
|
359 |
+
public function test_get_run_date() {
|
360 |
+
$time = as_get_datetime_object( '-10 minutes' );
|
361 |
+
$schedule = new ActionScheduler_IntervalSchedule( $time, HOUR_IN_SECONDS );
|
362 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
363 |
+
$store = new ActionScheduler_DBStore();
|
364 |
+
$action_id = $store->save_action( $action );
|
365 |
+
|
366 |
+
$this->assertEquals( $time->format( 'U' ), $store->get_date( $action_id )->format( 'U' ) );
|
367 |
+
|
368 |
+
$action = $store->fetch_action( $action_id );
|
369 |
+
$action->execute();
|
370 |
+
$now = as_get_datetime_object();
|
371 |
+
$store->mark_complete( $action_id );
|
372 |
+
|
373 |
+
$this->assertEquals( $now->format( 'U' ), $store->get_date( $action_id )->format( 'U' ) );
|
374 |
+
|
375 |
+
$next = $action->get_schedule()->get_next( $now );
|
376 |
+
$new_action_id = $store->save_action( $action, $next );
|
377 |
+
|
378 |
+
$this->assertEquals( (int) ( $now->format( 'U' ) ) + HOUR_IN_SECONDS, $store->get_date( $new_action_id )->format( 'U' ) );
|
379 |
+
}
|
380 |
+
|
381 |
+
public function test_get_status() {
|
382 |
+
$time = as_get_datetime_object('-10 minutes');
|
383 |
+
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
384 |
+
$action = new ActionScheduler_Action('my_hook', array(), $schedule);
|
385 |
+
$store = new ActionScheduler_DBStore();
|
386 |
+
$action_id = $store->save_action($action);
|
387 |
+
|
388 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_PENDING, $store->get_status( $action_id ) );
|
389 |
+
|
390 |
+
$store->mark_complete( $action_id );
|
391 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_COMPLETE, $store->get_status( $action_id ) );
|
392 |
+
|
393 |
+
$store->mark_failure( $action_id );
|
394 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_FAILED, $store->get_status( $action_id ) );
|
395 |
+
}
|
396 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_HybridStore_Test.php
ADDED
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
use Action_Scheduler\Migration\Config;
|
5 |
+
use ActionScheduler_NullAction as NullAction;
|
6 |
+
use ActionScheduler_wpCommentLogger as CommentLogger;
|
7 |
+
use ActionScheduler_wpPostStore as PostStore;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class ActionScheduler_HybridStore_Test
|
11 |
+
* @group tables
|
12 |
+
*/
|
13 |
+
|
14 |
+
class ActionScheduler_HybridStore_Test extends ActionScheduler_UnitTestCase {
|
15 |
+
private $demarkation_id = 1000;
|
16 |
+
|
17 |
+
public function setUp() {
|
18 |
+
parent::setUp();
|
19 |
+
if ( ! taxonomy_exists( PostStore::GROUP_TAXONOMY ) ) {
|
20 |
+
// register the post type and taxonomy necessary for the store to work
|
21 |
+
$store = new PostStore();
|
22 |
+
$store->init();
|
23 |
+
}
|
24 |
+
update_option( ActionScheduler_HybridStore::DEMARKATION_OPTION, $this->demarkation_id );
|
25 |
+
$hybrid = new ActionScheduler_HybridStore();
|
26 |
+
$hybrid->set_autoincrement( '', ActionScheduler_StoreSchema::ACTIONS_TABLE );
|
27 |
+
}
|
28 |
+
|
29 |
+
public function tearDown() {
|
30 |
+
parent::tearDown();
|
31 |
+
|
32 |
+
// reset the autoincrement index
|
33 |
+
/** @var \wpdb $wpdb */
|
34 |
+
global $wpdb;
|
35 |
+
$wpdb->query( "TRUNCATE TABLE {$wpdb->actionscheduler_actions}" );
|
36 |
+
$wpdb->query( "TRUNCATE TABLE {$wpdb->actionscheduler_logs}" );
|
37 |
+
delete_option( ActionScheduler_HybridStore::DEMARKATION_OPTION );
|
38 |
+
}
|
39 |
+
|
40 |
+
public function test_actions_are_migrated_on_find() {
|
41 |
+
$source_store = new PostStore();
|
42 |
+
$destination_store = new ActionScheduler_DBStore();
|
43 |
+
$source_logger = new CommentLogger();
|
44 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
45 |
+
|
46 |
+
$config = new Config();
|
47 |
+
$config->set_source_store( $source_store );
|
48 |
+
$config->set_source_logger( $source_logger );
|
49 |
+
$config->set_destination_store( $destination_store );
|
50 |
+
$config->set_destination_logger( $destination_logger );
|
51 |
+
|
52 |
+
$hybrid_store = new ActionScheduler_HybridStore( $config );
|
53 |
+
|
54 |
+
$time = as_get_datetime_object( '10 minutes ago' );
|
55 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
56 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
57 |
+
$source_id = $source_store->save_action( $action );
|
58 |
+
|
59 |
+
$found = $hybrid_store->find_action( __FUNCTION__, [] );
|
60 |
+
|
61 |
+
$this->assertNotEquals( $source_id, $found );
|
62 |
+
$this->assertGreaterThanOrEqual( $this->demarkation_id, $found );
|
63 |
+
|
64 |
+
$found_in_source = $source_store->fetch_action( $source_id );
|
65 |
+
$this->assertInstanceOf( NullAction::class, $found_in_source );
|
66 |
+
}
|
67 |
+
|
68 |
+
|
69 |
+
public function test_actions_are_migrated_on_query() {
|
70 |
+
$source_store = new PostStore();
|
71 |
+
$destination_store = new ActionScheduler_DBStore();
|
72 |
+
$source_logger = new CommentLogger();
|
73 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
74 |
+
|
75 |
+
$config = new Config();
|
76 |
+
$config->set_source_store( $source_store );
|
77 |
+
$config->set_source_logger( $source_logger );
|
78 |
+
$config->set_destination_store( $destination_store );
|
79 |
+
$config->set_destination_logger( $destination_logger );
|
80 |
+
|
81 |
+
$hybrid_store = new ActionScheduler_HybridStore( $config );
|
82 |
+
|
83 |
+
$source_actions = [];
|
84 |
+
$destination_actions = [];
|
85 |
+
|
86 |
+
for ( $i = 0; $i < 10; $i++ ) {
|
87 |
+
// create in instance in the source store
|
88 |
+
$time = as_get_datetime_object( ( $i * 10 + 1 ) . ' minutes' );
|
89 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
90 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
91 |
+
|
92 |
+
$source_actions[] = $source_store->save_action( $action );
|
93 |
+
|
94 |
+
// create an instance in the destination store
|
95 |
+
$time = as_get_datetime_object( ( $i * 10 + 5 ) . ' minutes' );
|
96 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
97 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
98 |
+
|
99 |
+
$destination_actions[] = $destination_store->save_action( $action );
|
100 |
+
}
|
101 |
+
|
102 |
+
$found = $hybrid_store->query_actions([
|
103 |
+
'hook' => __FUNCTION__,
|
104 |
+
'per_page' => 6,
|
105 |
+
] );
|
106 |
+
|
107 |
+
$this->assertCount( 6, $found );
|
108 |
+
foreach ( $found as $key => $action_id ) {
|
109 |
+
$this->assertNotContains( $action_id, $source_actions );
|
110 |
+
$this->assertGreaterThanOrEqual( $this->demarkation_id, $action_id );
|
111 |
+
if ( $key % 2 == 0 ) { // it should have been in the source store
|
112 |
+
$this->assertNotContains( $action_id, $destination_actions );
|
113 |
+
} else { // it should have already been in the destination store
|
114 |
+
$this->assertContains( $action_id, $destination_actions );
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
// six of the original 10 should have migrated to the new store
|
119 |
+
// even though only three were retrieve in the final query
|
120 |
+
$found_in_source = $source_store->query_actions( [
|
121 |
+
'hook' => __FUNCTION__,
|
122 |
+
'per_page' => 10,
|
123 |
+
] );
|
124 |
+
$this->assertCount( 4, $found_in_source );
|
125 |
+
}
|
126 |
+
|
127 |
+
|
128 |
+
public function test_actions_are_migrated_on_claim() {
|
129 |
+
$source_store = new PostStore();
|
130 |
+
$destination_store = new ActionScheduler_DBStore();
|
131 |
+
$source_logger = new CommentLogger();
|
132 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
133 |
+
|
134 |
+
$config = new Config();
|
135 |
+
$config->set_source_store( $source_store );
|
136 |
+
$config->set_source_logger( $source_logger );
|
137 |
+
$config->set_destination_store( $destination_store );
|
138 |
+
$config->set_destination_logger( $destination_logger );
|
139 |
+
|
140 |
+
$hybrid_store = new ActionScheduler_HybridStore( $config );
|
141 |
+
|
142 |
+
$source_actions = [];
|
143 |
+
$destination_actions = [];
|
144 |
+
|
145 |
+
for ( $i = 0; $i < 10; $i++ ) {
|
146 |
+
// create in instance in the source store
|
147 |
+
$time = as_get_datetime_object( ( $i * 10 + 1 ) . ' minutes ago' );
|
148 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
149 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
150 |
+
|
151 |
+
$source_actions[] = $source_store->save_action( $action );
|
152 |
+
|
153 |
+
// create an instance in the destination store
|
154 |
+
$time = as_get_datetime_object( ( $i * 10 + 5 ) . ' minutes ago' );
|
155 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
156 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
157 |
+
|
158 |
+
$destination_actions[] = $destination_store->save_action( $action );
|
159 |
+
}
|
160 |
+
|
161 |
+
$claim = $hybrid_store->stake_claim( 6 );
|
162 |
+
|
163 |
+
$claimed_actions = $claim->get_actions();
|
164 |
+
$this->assertCount( 6, $claimed_actions );
|
165 |
+
$this->assertCount( 3, array_intersect( $destination_actions, $claimed_actions ) );
|
166 |
+
|
167 |
+
|
168 |
+
// six of the original 10 should have migrated to the new store
|
169 |
+
// even though only three were retrieve in the final claim
|
170 |
+
$found_in_source = $source_store->query_actions( [
|
171 |
+
'hook' => __FUNCTION__,
|
172 |
+
'per_page' => 10,
|
173 |
+
] );
|
174 |
+
$this->assertCount( 4, $found_in_source );
|
175 |
+
|
176 |
+
$this->assertEquals( 0, $source_store->get_claim_count() );
|
177 |
+
$this->assertEquals( 1, $destination_store->get_claim_count() );
|
178 |
+
$this->assertEquals( 1, $hybrid_store->get_claim_count() );
|
179 |
+
|
180 |
+
}
|
181 |
+
|
182 |
+
public function test_fetch_respects_demarkation() {
|
183 |
+
$source_store = new PostStore();
|
184 |
+
$destination_store = new ActionScheduler_DBStore();
|
185 |
+
$source_logger = new CommentLogger();
|
186 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
187 |
+
|
188 |
+
$config = new Config();
|
189 |
+
$config->set_source_store( $source_store );
|
190 |
+
$config->set_source_logger( $source_logger );
|
191 |
+
$config->set_destination_store( $destination_store );
|
192 |
+
$config->set_destination_logger( $destination_logger );
|
193 |
+
|
194 |
+
$hybrid_store = new ActionScheduler_HybridStore( $config );
|
195 |
+
|
196 |
+
$source_actions = [];
|
197 |
+
$destination_actions = [];
|
198 |
+
|
199 |
+
for ( $i = 0; $i < 2; $i++ ) {
|
200 |
+
// create in instance in the source store
|
201 |
+
$time = as_get_datetime_object( ( $i * 10 + 1 ) . ' minutes ago' );
|
202 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
203 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
204 |
+
|
205 |
+
$source_actions[] = $source_store->save_action( $action );
|
206 |
+
|
207 |
+
// create an instance in the destination store
|
208 |
+
$time = as_get_datetime_object( ( $i * 10 + 5 ) . ' minutes ago' );
|
209 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
210 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
211 |
+
|
212 |
+
$destination_actions[] = $destination_store->save_action( $action );
|
213 |
+
}
|
214 |
+
|
215 |
+
foreach ( $source_actions as $action_id ) {
|
216 |
+
$action = $hybrid_store->fetch_action( $action_id );
|
217 |
+
$this->assertInstanceOf( ActionScheduler_Action::class, $action );
|
218 |
+
$this->assertNotInstanceOf( NullAction::class, $action );
|
219 |
+
}
|
220 |
+
|
221 |
+
foreach ( $destination_actions as $action_id ) {
|
222 |
+
$action = $hybrid_store->fetch_action( $action_id );
|
223 |
+
$this->assertInstanceOf( ActionScheduler_Action::class, $action );
|
224 |
+
$this->assertNotInstanceOf( NullAction::class, $action );
|
225 |
+
}
|
226 |
+
}
|
227 |
+
|
228 |
+
public function test_mark_complete_respects_demarkation() {
|
229 |
+
$source_store = new PostStore();
|
230 |
+
$destination_store = new ActionScheduler_DBStore();
|
231 |
+
$source_logger = new CommentLogger();
|
232 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
233 |
+
|
234 |
+
$config = new Config();
|
235 |
+
$config->set_source_store( $source_store );
|
236 |
+
$config->set_source_logger( $source_logger );
|
237 |
+
$config->set_destination_store( $destination_store );
|
238 |
+
$config->set_destination_logger( $destination_logger );
|
239 |
+
|
240 |
+
$hybrid_store = new ActionScheduler_HybridStore( $config );
|
241 |
+
|
242 |
+
$source_actions = [];
|
243 |
+
$destination_actions = [];
|
244 |
+
|
245 |
+
for ( $i = 0; $i < 2; $i++ ) {
|
246 |
+
// create in instance in the source store
|
247 |
+
$time = as_get_datetime_object( ( $i * 10 + 1 ) . ' minutes ago' );
|
248 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
249 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
250 |
+
|
251 |
+
$source_actions[] = $source_store->save_action( $action );
|
252 |
+
|
253 |
+
// create an instance in the destination store
|
254 |
+
$time = as_get_datetime_object( ( $i * 10 + 5 ) . ' minutes ago' );
|
255 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
256 |
+
$action = new ActionScheduler_Action( __FUNCTION__, [], $schedule );
|
257 |
+
|
258 |
+
$destination_actions[] = $destination_store->save_action( $action );
|
259 |
+
}
|
260 |
+
|
261 |
+
foreach ( $source_actions as $action_id ) {
|
262 |
+
$hybrid_store->mark_complete( $action_id );
|
263 |
+
$action = $hybrid_store->fetch_action( $action_id );
|
264 |
+
$this->assertInstanceOf( ActionScheduler_FinishedAction::class, $action );
|
265 |
+
}
|
266 |
+
|
267 |
+
foreach ( $destination_actions as $action_id ) {
|
268 |
+
$hybrid_store->mark_complete( $action_id );
|
269 |
+
$action = $hybrid_store->fetch_action( $action_id );
|
270 |
+
$this->assertInstanceOf( ActionScheduler_FinishedAction::class, $action );
|
271 |
+
}
|
272 |
+
}
|
273 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/jobstore/ActionScheduler_wpPostStore_Test.php
CHANGED
@@ -37,7 +37,7 @@ class ActionScheduler_wpPostStore_Test extends ActionScheduler_UnitTestCase {
|
|
37 |
$retrieved = $store->fetch_action($action_id);
|
38 |
$this->assertEquals($action->get_hook(), $retrieved->get_hook());
|
39 |
$this->assertEqualSets($action->get_args(), $retrieved->get_args());
|
40 |
-
$this->assertEquals($action->get_schedule()->
|
41 |
$this->assertEquals($action->get_group(), $retrieved->get_group());
|
42 |
}
|
43 |
|
@@ -76,6 +76,45 @@ class ActionScheduler_wpPostStore_Test extends ActionScheduler_UnitTestCase {
|
|
76 |
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
public function test_claim_actions() {
|
80 |
$created_actions = array();
|
81 |
$store = new ActionScheduler_wpPostStore();
|
@@ -225,7 +264,7 @@ class ActionScheduler_wpPostStore_Test extends ActionScheduler_UnitTestCase {
|
|
225 |
$action->execute();
|
226 |
$store->mark_complete( $action_id );
|
227 |
|
228 |
-
$next = $action->get_schedule()->
|
229 |
$new_action_id = $store->save_action( $action, $next );
|
230 |
|
231 |
$this->assertEquals('publish', get_post_status($action_id));
|
@@ -246,9 +285,9 @@ class ActionScheduler_wpPostStore_Test extends ActionScheduler_UnitTestCase {
|
|
246 |
$now = as_get_datetime_object();
|
247 |
$store->mark_complete( $action_id );
|
248 |
|
249 |
-
$this->assertEquals( $store->get_date($action_id)->getTimestamp(), $now->getTimestamp() );
|
250 |
|
251 |
-
$next = $action->get_schedule()->
|
252 |
$new_action_id = $store->save_action( $action, $next );
|
253 |
|
254 |
$this->assertEquals( (int)($now->getTimestamp()) + HOUR_IN_SECONDS, $store->get_date($new_action_id)->getTimestamp() );
|
37 |
$retrieved = $store->fetch_action($action_id);
|
38 |
$this->assertEquals($action->get_hook(), $retrieved->get_hook());
|
39 |
$this->assertEqualSets($action->get_args(), $retrieved->get_args());
|
40 |
+
$this->assertEquals( $action->get_schedule()->get_date()->getTimestamp(), $retrieved->get_schedule()->get_date()->getTimestamp() );
|
41 |
$this->assertEquals($action->get_group(), $retrieved->get_group());
|
42 |
}
|
43 |
|
76 |
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
77 |
}
|
78 |
|
79 |
+
public function test_cancel_actions_by_hook() {
|
80 |
+
$store = new ActionScheduler_wpPostStore();
|
81 |
+
$actions = array();
|
82 |
+
$hook = 'by_hook_test';
|
83 |
+
for ( $day = 1; $day <= 3; $day++ ) {
|
84 |
+
$delta = sprintf( '+%d day', $day );
|
85 |
+
$time = as_get_datetime_object( $delta );
|
86 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
87 |
+
$action = new ActionScheduler_Action( $hook, array(), $schedule, 'my_group' );
|
88 |
+
$actions[] = $store->save_action( $action );
|
89 |
+
}
|
90 |
+
$store->cancel_actions_by_hook( $hook );
|
91 |
+
|
92 |
+
foreach ( $actions as $action_id ) {
|
93 |
+
$fetched = $store->fetch_action( $action_id );
|
94 |
+
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
public function test_cancel_actions_by_group() {
|
99 |
+
$store = new ActionScheduler_wpPostStore();
|
100 |
+
$actions = array();
|
101 |
+
$group = 'by_group_test';
|
102 |
+
|
103 |
+
for ( $day = 1; $day <= 3; $day++ ) {
|
104 |
+
$delta = sprintf( '+%d day', $day );
|
105 |
+
$time = as_get_datetime_object( $delta );
|
106 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
107 |
+
$action = new ActionScheduler_Action( 'my_hook', array(), $schedule, $group );
|
108 |
+
$actions[] = $store->save_action( $action );
|
109 |
+
}
|
110 |
+
$store->cancel_actions_by_group( $group );
|
111 |
+
|
112 |
+
foreach ( $actions as $action_id ) {
|
113 |
+
$fetched = $store->fetch_action( $action_id );
|
114 |
+
$this->assertInstanceOf( 'ActionScheduler_CanceledAction', $fetched );
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
public function test_claim_actions() {
|
119 |
$created_actions = array();
|
120 |
$store = new ActionScheduler_wpPostStore();
|
264 |
$action->execute();
|
265 |
$store->mark_complete( $action_id );
|
266 |
|
267 |
+
$next = $action->get_schedule()->get_next( as_get_datetime_object() );
|
268 |
$new_action_id = $store->save_action( $action, $next );
|
269 |
|
270 |
$this->assertEquals('publish', get_post_status($action_id));
|
285 |
$now = as_get_datetime_object();
|
286 |
$store->mark_complete( $action_id );
|
287 |
|
288 |
+
$this->assertEquals( $store->get_date( $action_id )->getTimestamp(), $now->getTimestamp(), '', 1 ); // allow timestamp to be 1 second off for older versions of PHP
|
289 |
|
290 |
+
$next = $action->get_schedule()->get_next( $now );
|
291 |
$new_action_id = $store->save_action( $action, $next );
|
292 |
|
293 |
$this->assertEquals( (int)($now->getTimestamp()) + HOUR_IN_SECONDS, $store->get_date($new_action_id)->getTimestamp() );
|
includes/vendor/action-scheduler/tests/phpunit/lock/ActionScheduler_OptionLock_Test.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_Lock_Test
|
5 |
+
* @package test_cases\lock
|
6 |
+
*/
|
7 |
+
class ActionScheduler_OptionLock_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
public function test_instance() {
|
9 |
+
$lock = ActionScheduler::lock();
|
10 |
+
$this->assertInstanceOf( 'ActionScheduler_Lock', $lock );
|
11 |
+
$this->assertInstanceOf( 'ActionScheduler_OptionLock', $lock );
|
12 |
+
}
|
13 |
+
|
14 |
+
public function test_is_locked() {
|
15 |
+
$lock = ActionScheduler::lock();
|
16 |
+
$lock_type = md5( rand() );
|
17 |
+
|
18 |
+
$this->assertFalse( $lock->is_locked( $lock_type ) );
|
19 |
+
|
20 |
+
$lock->set( $lock_type );
|
21 |
+
$this->assertTrue( $lock->is_locked( $lock_type ) );
|
22 |
+
}
|
23 |
+
|
24 |
+
public function test_set() {
|
25 |
+
$lock = ActionScheduler::lock();
|
26 |
+
$lock_type = md5( rand() );
|
27 |
+
|
28 |
+
$lock->set( $lock_type );
|
29 |
+
$this->assertTrue( $lock->is_locked( $lock_type ) );
|
30 |
+
}
|
31 |
+
|
32 |
+
public function test_get_expiration() {
|
33 |
+
$lock = ActionScheduler::lock();
|
34 |
+
$lock_type = md5( rand() );
|
35 |
+
|
36 |
+
$lock->set( $lock_type );
|
37 |
+
|
38 |
+
$expiration = $lock->get_expiration( $lock_type );
|
39 |
+
$current_time = time();
|
40 |
+
|
41 |
+
$this->assertGreaterThanOrEqual( 0, $expiration );
|
42 |
+
$this->assertGreaterThan( $current_time, $expiration );
|
43 |
+
$this->assertLessThan( $current_time + MINUTE_IN_SECONDS + 1, $expiration );
|
44 |
+
}
|
45 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/logging/ActionScheduler_DBLogger_Test.php
ADDED
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class ActionScheduler_DBLogger_Test
|
5 |
+
* @package test_cases\logging
|
6 |
+
* @group tables
|
7 |
+
*/
|
8 |
+
class ActionScheduler_DBLogger_Test extends ActionScheduler_UnitTestCase {
|
9 |
+
public function test_default_logger() {
|
10 |
+
$logger = ActionScheduler::logger();
|
11 |
+
$this->assertInstanceOf( 'ActionScheduler_Logger', $logger );
|
12 |
+
$this->assertInstanceOf( ActionScheduler_DBLogger::class, $logger );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function test_add_log_entry() {
|
16 |
+
$action_id = as_schedule_single_action( time(), __METHOD__ );
|
17 |
+
$logger = ActionScheduler::logger();
|
18 |
+
$message = 'Logging that something happened';
|
19 |
+
$log_id = $logger->log( $action_id, $message );
|
20 |
+
$entry = $logger->get_entry( $log_id );
|
21 |
+
|
22 |
+
$this->assertEquals( $action_id, $entry->get_action_id() );
|
23 |
+
$this->assertEquals( $message, $entry->get_message() );
|
24 |
+
}
|
25 |
+
|
26 |
+
public function test_storage_logs() {
|
27 |
+
$action_id = as_schedule_single_action( time(), __METHOD__ );
|
28 |
+
$logger = ActionScheduler::logger();
|
29 |
+
$logs = $logger->get_logs( $action_id );
|
30 |
+
$expected = new ActionScheduler_LogEntry( $action_id, 'action created' );
|
31 |
+
$this->assertCount( 1, $logs );
|
32 |
+
$this->assertEquals( $expected->get_action_id(), $logs[0]->get_action_id() );
|
33 |
+
$this->assertEquals( $expected->get_message(), $logs[0]->get_message() );
|
34 |
+
}
|
35 |
+
|
36 |
+
public function test_execution_logs() {
|
37 |
+
$action_id = as_schedule_single_action( time(), __METHOD__ );
|
38 |
+
$logger = ActionScheduler::logger();
|
39 |
+
$started = new ActionScheduler_LogEntry( $action_id, 'action started via Unit Tests' );
|
40 |
+
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete via Unit Tests' );
|
41 |
+
|
42 |
+
$runner = ActionScheduler_Mocker::get_queue_runner();
|
43 |
+
$runner->run( 'Unit Tests' );
|
44 |
+
|
45 |
+
// Expect 3 logs with the correct action ID.
|
46 |
+
$logs = $logger->get_logs( $action_id );
|
47 |
+
$this->assertCount( 3, $logs );
|
48 |
+
foreach ( $logs as $log ) {
|
49 |
+
$this->assertEquals( $action_id, $log->get_action_id() );
|
50 |
+
}
|
51 |
+
|
52 |
+
// Expect created, then started, then completed.
|
53 |
+
$this->assertEquals( 'action created', $logs[0]->get_message() );
|
54 |
+
$this->assertEquals( $started->get_message(), $logs[1]->get_message() );
|
55 |
+
$this->assertEquals( $finished->get_message(), $logs[2]->get_message() );
|
56 |
+
}
|
57 |
+
|
58 |
+
public function test_failed_execution_logs() {
|
59 |
+
$hook = __METHOD__;
|
60 |
+
add_action( $hook, array( $this, '_a_hook_callback_that_throws_an_exception' ) );
|
61 |
+
$action_id = as_schedule_single_action( time(), $hook );
|
62 |
+
$logger = ActionScheduler::logger();
|
63 |
+
$started = new ActionScheduler_LogEntry( $action_id, 'action started via Unit Tests' );
|
64 |
+
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete via Unit Tests' );
|
65 |
+
$failed = new ActionScheduler_LogEntry( $action_id, 'action failed via Unit Tests: Execution failed' );
|
66 |
+
|
67 |
+
$runner = ActionScheduler_Mocker::get_queue_runner();
|
68 |
+
$runner->run( 'Unit Tests' );
|
69 |
+
|
70 |
+
// Expect 3 logs with the correct action ID.
|
71 |
+
$logs = $logger->get_logs( $action_id );
|
72 |
+
$this->assertCount( 3, $logs );
|
73 |
+
foreach ( $logs as $log ) {
|
74 |
+
$this->assertEquals( $action_id, $log->get_action_id() );
|
75 |
+
$this->assertNotEquals( $finished->get_message(), $log->get_message() );
|
76 |
+
}
|
77 |
+
|
78 |
+
// Expect created, then started, then failed.
|
79 |
+
$this->assertEquals( 'action created', $logs[0]->get_message() );
|
80 |
+
$this->assertEquals( $started->get_message(), $logs[1]->get_message() );
|
81 |
+
$this->assertEquals( $failed->get_message(), $logs[2]->get_message() );
|
82 |
+
}
|
83 |
+
|
84 |
+
public function test_fatal_error_log() {
|
85 |
+
$action_id = as_schedule_single_action( time(), __METHOD__ );
|
86 |
+
$logger = ActionScheduler::logger();
|
87 |
+
do_action( 'action_scheduler_unexpected_shutdown', $action_id, array(
|
88 |
+
'type' => E_ERROR,
|
89 |
+
'message' => 'Test error',
|
90 |
+
'file' => __FILE__,
|
91 |
+
'line' => __LINE__,
|
92 |
+
));
|
93 |
+
|
94 |
+
$logs = $logger->get_logs( $action_id );
|
95 |
+
$found_log = FALSE;
|
96 |
+
foreach ( $logs as $l ) {
|
97 |
+
if ( strpos( $l->get_message(), 'unexpected shutdown' ) === 0 ) {
|
98 |
+
$found_log = TRUE;
|
99 |
+
}
|
100 |
+
}
|
101 |
+
$this->assertTrue( $found_log, 'Unexpected shutdown log not found' );
|
102 |
+
}
|
103 |
+
|
104 |
+
public function test_canceled_action_log() {
|
105 |
+
$action_id = as_schedule_single_action( time(), __METHOD__ );
|
106 |
+
as_unschedule_action( __METHOD__ );
|
107 |
+
$logger = ActionScheduler::logger();
|
108 |
+
$logs = $logger->get_logs( $action_id );
|
109 |
+
$expected = new ActionScheduler_LogEntry( $action_id, 'action canceled' );
|
110 |
+
$this->assertEquals( $expected->get_message(), end( $logs )->get_message() );
|
111 |
+
}
|
112 |
+
|
113 |
+
public function test_deleted_action_cleanup() {
|
114 |
+
$time = as_get_datetime_object('-10 minutes');
|
115 |
+
$schedule = new \ActionScheduler_SimpleSchedule($time);
|
116 |
+
$action = new \ActionScheduler_Action('my_hook', array(), $schedule);
|
117 |
+
$store = new ActionScheduler_DBStore();
|
118 |
+
$action_id = $store->save_action($action);
|
119 |
+
|
120 |
+
$logger = new ActionScheduler_DBLogger();
|
121 |
+
$logs = $logger->get_logs( $action_id );
|
122 |
+
$this->assertNotEmpty( $logs );
|
123 |
+
|
124 |
+
$store->delete_action( $action_id );
|
125 |
+
$logs = $logger->get_logs( $action_id );
|
126 |
+
$this->assertEmpty( $logs );
|
127 |
+
}
|
128 |
+
|
129 |
+
public function _a_hook_callback_that_throws_an_exception() {
|
130 |
+
throw new \RuntimeException('Execution failed');
|
131 |
+
}
|
132 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/logging/ActionScheduler_wpCommentLogger_Test.php
CHANGED
@@ -5,10 +5,16 @@
|
|
5 |
* @package test_cases\logging
|
6 |
*/
|
7 |
class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase {
|
|
|
|
|
8 |
public function test_default_logger() {
|
9 |
$logger = ActionScheduler::logger();
|
10 |
$this->assertInstanceOf( 'ActionScheduler_Logger', $logger );
|
11 |
-
$this->
|
|
|
|
|
|
|
|
|
12 |
}
|
13 |
|
14 |
public function test_add_log_entry() {
|
@@ -41,13 +47,6 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
41 |
$this->assertEquals( $message, $entry->get_message() );
|
42 |
}
|
43 |
|
44 |
-
public function test_null_log_entry() {
|
45 |
-
$logger = ActionScheduler::logger();
|
46 |
-
$entry = $logger->get_entry( 1 );
|
47 |
-
$this->assertEquals( '', $entry->get_action_id() );
|
48 |
-
$this->assertEquals( '', $entry->get_message() );
|
49 |
-
}
|
50 |
-
|
51 |
public function test_erroneous_entry_id() {
|
52 |
$comment = wp_insert_comment(array(
|
53 |
'comment_post_ID' => 1,
|
@@ -83,11 +82,11 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
83 |
public function test_execution_comments() {
|
84 |
$action_id = as_schedule_single_action( time(), 'a hook' );
|
85 |
$logger = ActionScheduler::logger();
|
86 |
-
$started = new ActionScheduler_LogEntry( $action_id, 'action started' );
|
87 |
-
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete' );
|
88 |
|
89 |
-
$runner =
|
90 |
-
$runner->run();
|
91 |
|
92 |
$logs = $logger->get_logs( $action_id );
|
93 |
$this->assertTrue( in_array( $this->log_entry_to_array( $started ), $this->log_entry_to_array( $logs ) ) );
|
@@ -99,12 +98,12 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
99 |
add_action( $hook, array( $this, '_a_hook_callback_that_throws_an_exception' ) );
|
100 |
$action_id = as_schedule_single_action( time(), $hook );
|
101 |
$logger = ActionScheduler::logger();
|
102 |
-
$started = new ActionScheduler_LogEntry( $action_id, 'action started' );
|
103 |
-
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete' );
|
104 |
-
$failed = new ActionScheduler_LogEntry( $action_id, 'action failed: Execution failed' );
|
105 |
|
106 |
-
$runner =
|
107 |
-
$runner->run();
|
108 |
|
109 |
$logs = $logger->get_logs( $action_id );
|
110 |
$this->assertTrue( in_array( $this->log_entry_to_array( $started ), $this->log_entry_to_array( $logs ) ) );
|
@@ -112,6 +111,21 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
112 |
$this->assertTrue( in_array( $this->log_entry_to_array( $failed ), $this->log_entry_to_array( $logs ) ) );
|
113 |
}
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
public function test_fatal_error_comments() {
|
116 |
$hook = md5(rand());
|
117 |
$action_id = as_schedule_single_action( time(), $hook );
|
@@ -147,6 +161,10 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
147 |
}
|
148 |
|
149 |
public function test_filtering_of_get_comments() {
|
|
|
|
|
|
|
|
|
150 |
$post_id = $this->factory->post->create_object(array(
|
151 |
'post_title' => __FUNCTION__,
|
152 |
));
|
@@ -181,5 +199,13 @@ class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase
|
|
181 |
$this->assertCount( 2, $comments );
|
182 |
$this->assertContains( $log_id, wp_list_pluck($comments, 'comment_ID'));
|
183 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
}
|
185 |
|
5 |
* @package test_cases\logging
|
6 |
*/
|
7 |
class ActionScheduler_wpCommentLogger_Test extends ActionScheduler_UnitTestCase {
|
8 |
+
private $use_comment_logger;
|
9 |
+
|
10 |
public function test_default_logger() {
|
11 |
$logger = ActionScheduler::logger();
|
12 |
$this->assertInstanceOf( 'ActionScheduler_Logger', $logger );
|
13 |
+
if ( $this->using_comment_logger() ) {
|
14 |
+
$this->assertInstanceOf( 'ActionScheduler_wpCommentLogger', $logger );
|
15 |
+
} else {
|
16 |
+
$this->assertNotInstanceOf( 'ActionScheduler_wpCommentLogger', $logger );
|
17 |
+
}
|
18 |
}
|
19 |
|
20 |
public function test_add_log_entry() {
|
47 |
$this->assertEquals( $message, $entry->get_message() );
|
48 |
}
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
public function test_erroneous_entry_id() {
|
51 |
$comment = wp_insert_comment(array(
|
52 |
'comment_post_ID' => 1,
|
82 |
public function test_execution_comments() {
|
83 |
$action_id = as_schedule_single_action( time(), 'a hook' );
|
84 |
$logger = ActionScheduler::logger();
|
85 |
+
$started = new ActionScheduler_LogEntry( $action_id, 'action started via Unit Tests' );
|
86 |
+
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete via Unit Tests' );
|
87 |
|
88 |
+
$runner = ActionScheduler_Mocker::get_queue_runner();
|
89 |
+
$runner->run( 'Unit Tests' );
|
90 |
|
91 |
$logs = $logger->get_logs( $action_id );
|
92 |
$this->assertTrue( in_array( $this->log_entry_to_array( $started ), $this->log_entry_to_array( $logs ) ) );
|
98 |
add_action( $hook, array( $this, '_a_hook_callback_that_throws_an_exception' ) );
|
99 |
$action_id = as_schedule_single_action( time(), $hook );
|
100 |
$logger = ActionScheduler::logger();
|
101 |
+
$started = new ActionScheduler_LogEntry( $action_id, 'action started via Unit Tests' );
|
102 |
+
$finished = new ActionScheduler_LogEntry( $action_id, 'action complete via Unit Tests' );
|
103 |
+
$failed = new ActionScheduler_LogEntry( $action_id, 'action failed via Unit Tests: Execution failed' );
|
104 |
|
105 |
+
$runner = ActionScheduler_Mocker::get_queue_runner();
|
106 |
+
$runner->run( 'Unit Tests' );
|
107 |
|
108 |
$logs = $logger->get_logs( $action_id );
|
109 |
$this->assertTrue( in_array( $this->log_entry_to_array( $started ), $this->log_entry_to_array( $logs ) ) );
|
111 |
$this->assertTrue( in_array( $this->log_entry_to_array( $failed ), $this->log_entry_to_array( $logs ) ) );
|
112 |
}
|
113 |
|
114 |
+
public function test_failed_schedule_next_instance_comments() {
|
115 |
+
$action_id = rand();
|
116 |
+
$logger = ActionScheduler::logger();
|
117 |
+
$log_entry = new ActionScheduler_LogEntry( $action_id, 'There was a failure scheduling the next instance of this action: Execution failed' );
|
118 |
+
|
119 |
+
try {
|
120 |
+
$this->_a_hook_callback_that_throws_an_exception();
|
121 |
+
} catch ( Exception $e ) {
|
122 |
+
do_action( 'action_scheduler_failed_to_schedule_next_instance', $action_id, $e, new ActionScheduler_Action('my_hook') );
|
123 |
+
}
|
124 |
+
|
125 |
+
$logs = $logger->get_logs( $action_id );
|
126 |
+
$this->assertTrue( in_array( $this->log_entry_to_array( $log_entry ), $this->log_entry_to_array( $logs ) ) );
|
127 |
+
}
|
128 |
+
|
129 |
public function test_fatal_error_comments() {
|
130 |
$hook = md5(rand());
|
131 |
$action_id = as_schedule_single_action( time(), $hook );
|
161 |
}
|
162 |
|
163 |
public function test_filtering_of_get_comments() {
|
164 |
+
if ( ! $this->using_comment_logger() ) {
|
165 |
+
return;
|
166 |
+
}
|
167 |
+
|
168 |
$post_id = $this->factory->post->create_object(array(
|
169 |
'post_title' => __FUNCTION__,
|
170 |
));
|
199 |
$this->assertCount( 2, $comments );
|
200 |
$this->assertContains( $log_id, wp_list_pluck($comments, 'comment_ID'));
|
201 |
}
|
202 |
+
|
203 |
+
private function using_comment_logger() {
|
204 |
+
if ( null === $this->use_comment_logger ) {
|
205 |
+
$this->use_comment_logger = ! ActionScheduler_DataController::dependencies_met();
|
206 |
+
}
|
207 |
+
|
208 |
+
return $this->use_comment_logger;
|
209 |
+
}
|
210 |
}
|
211 |
|
includes/vendor/action-scheduler/tests/phpunit/migration/ActionMigrator_Test.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use Action_Scheduler\Migration\ActionMigrator;
|
4 |
+
use Action_Scheduler\Migration\LogMigrator;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class ActionMigrator_Test
|
8 |
+
* @group migration
|
9 |
+
*/
|
10 |
+
class ActionMigrator_Test extends ActionScheduler_UnitTestCase {
|
11 |
+
public function setUp() {
|
12 |
+
parent::setUp();
|
13 |
+
if ( ! taxonomy_exists( ActionScheduler_wpPostStore::GROUP_TAXONOMY ) ) {
|
14 |
+
// register the post type and taxonomy necessary for the store to work
|
15 |
+
$store = new ActionScheduler_wpPostStore();
|
16 |
+
$store->init();
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
public function test_migrate_from_wpPost_to_db() {
|
21 |
+
$source = new ActionScheduler_wpPostStore();
|
22 |
+
$destination = new ActionScheduler_DBStore();
|
23 |
+
$migrator = new ActionMigrator( $source, $destination, $this->get_log_migrator() );
|
24 |
+
|
25 |
+
$time = as_get_datetime_object();
|
26 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
27 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
28 |
+
$action_id = $source->save_action( $action );
|
29 |
+
|
30 |
+
$new_id = $migrator->migrate( $action_id );
|
31 |
+
|
32 |
+
// ensure we get the same record out of the new store as we stored in the old
|
33 |
+
$retrieved = $destination->fetch_action( $new_id );
|
34 |
+
$this->assertEquals( $action->get_hook(), $retrieved->get_hook() );
|
35 |
+
$this->assertEqualSets( $action->get_args(), $retrieved->get_args() );
|
36 |
+
$this->assertEquals( $action->get_schedule()->get_date()->format( 'U' ), $retrieved->get_schedule()->get_date()->format( 'U' ) );
|
37 |
+
$this->assertEquals( $action->get_group(), $retrieved->get_group() );
|
38 |
+
$this->assertEquals( \ActionScheduler_Store::STATUS_PENDING, $destination->get_status( $new_id ) );
|
39 |
+
|
40 |
+
|
41 |
+
// ensure that the record in the old store does not exist
|
42 |
+
$old_action = $source->fetch_action( $action_id );
|
43 |
+
$this->assertInstanceOf( 'ActionScheduler_NullAction', $old_action );
|
44 |
+
}
|
45 |
+
|
46 |
+
public function test_does_not_migrate_missing_action_from_wpPost_to_db() {
|
47 |
+
$source = new ActionScheduler_wpPostStore();
|
48 |
+
$destination = new ActionScheduler_DBStore();
|
49 |
+
$migrator = new ActionMigrator( $source, $destination, $this->get_log_migrator() );
|
50 |
+
|
51 |
+
$action_id = rand( 100, 100000 );
|
52 |
+
|
53 |
+
$new_id = $migrator->migrate( $action_id );
|
54 |
+
$this->assertEquals( 0, $new_id );
|
55 |
+
|
56 |
+
// ensure we get the same record out of the new store as we stored in the old
|
57 |
+
$retrieved = $destination->fetch_action( $new_id );
|
58 |
+
$this->assertInstanceOf( 'ActionScheduler_NullAction', $retrieved );
|
59 |
+
}
|
60 |
+
|
61 |
+
public function test_migrate_completed_action_from_wpPost_to_db() {
|
62 |
+
$source = new ActionScheduler_wpPostStore();
|
63 |
+
$destination = new ActionScheduler_DBStore();
|
64 |
+
$migrator = new ActionMigrator( $source, $destination, $this->get_log_migrator() );
|
65 |
+
|
66 |
+
$time = as_get_datetime_object();
|
67 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
68 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
69 |
+
$action_id = $source->save_action( $action );
|
70 |
+
$source->mark_complete( $action_id );
|
71 |
+
|
72 |
+
$new_id = $migrator->migrate( $action_id );
|
73 |
+
|
74 |
+
// ensure we get the same record out of the new store as we stored in the old
|
75 |
+
$retrieved = $destination->fetch_action( $new_id );
|
76 |
+
$this->assertEquals( $action->get_hook(), $retrieved->get_hook() );
|
77 |
+
$this->assertEqualSets( $action->get_args(), $retrieved->get_args() );
|
78 |
+
$this->assertEquals( $action->get_schedule()->get_date()->format( 'U' ), $retrieved->get_schedule()->get_date()->format( 'U' ) );
|
79 |
+
$this->assertEquals( $action->get_group(), $retrieved->get_group() );
|
80 |
+
$this->assertTrue( $retrieved->is_finished() );
|
81 |
+
$this->assertEquals( \ActionScheduler_Store::STATUS_COMPLETE, $destination->get_status( $new_id ) );
|
82 |
+
|
83 |
+
// ensure that the record in the old store does not exist
|
84 |
+
$old_action = $source->fetch_action( $action_id );
|
85 |
+
$this->assertInstanceOf( 'ActionScheduler_NullAction', $old_action );
|
86 |
+
}
|
87 |
+
|
88 |
+
public function test_migrate_failed_action_from_wpPost_to_db() {
|
89 |
+
$source = new ActionScheduler_wpPostStore();
|
90 |
+
$destination = new ActionScheduler_DBStore();
|
91 |
+
$migrator = new ActionMigrator( $source, $destination, $this->get_log_migrator() );
|
92 |
+
|
93 |
+
$time = as_get_datetime_object();
|
94 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
95 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
96 |
+
$action_id = $source->save_action( $action );
|
97 |
+
$source->mark_failure( $action_id );
|
98 |
+
|
99 |
+
$new_id = $migrator->migrate( $action_id );
|
100 |
+
|
101 |
+
// ensure we get the same record out of the new store as we stored in the old
|
102 |
+
$retrieved = $destination->fetch_action( $new_id );
|
103 |
+
$this->assertEquals( $action->get_hook(), $retrieved->get_hook() );
|
104 |
+
$this->assertEqualSets( $action->get_args(), $retrieved->get_args() );
|
105 |
+
$this->assertEquals( $action->get_schedule()->get_date()->format( 'U' ), $retrieved->get_schedule()->get_date()->format( 'U' ) );
|
106 |
+
$this->assertEquals( $action->get_group(), $retrieved->get_group() );
|
107 |
+
$this->assertTrue( $retrieved->is_finished() );
|
108 |
+
$this->assertEquals( \ActionScheduler_Store::STATUS_FAILED, $destination->get_status( $new_id ) );
|
109 |
+
|
110 |
+
// ensure that the record in the old store does not exist
|
111 |
+
$old_action = $source->fetch_action( $action_id );
|
112 |
+
$this->assertInstanceOf( 'ActionScheduler_NullAction', $old_action );
|
113 |
+
}
|
114 |
+
|
115 |
+
public function test_migrate_canceled_action_from_wpPost_to_db() {
|
116 |
+
$source = new ActionScheduler_wpPostStore();
|
117 |
+
$destination = new ActionScheduler_DBStore();
|
118 |
+
$migrator = new ActionMigrator( $source, $destination, $this->get_log_migrator() );
|
119 |
+
|
120 |
+
$time = as_get_datetime_object();
|
121 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
122 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule, 'my_group' );
|
123 |
+
$action_id = $source->save_action( $action );
|
124 |
+
$source->cancel_action( $action_id );
|
125 |
+
|
126 |
+
$new_id = $migrator->migrate( $action_id );
|
127 |
+
|
128 |
+
// ensure we get the same record out of the new store as we stored in the old
|
129 |
+
$retrieved = $destination->fetch_action( $new_id );
|
130 |
+
$this->assertEquals( $action->get_hook(), $retrieved->get_hook() );
|
131 |
+
$this->assertEqualSets( $action->get_args(), $retrieved->get_args() );
|
132 |
+
$this->assertEquals( $action->get_schedule()->get_date()->format( 'U' ), $retrieved->get_schedule()->get_date()->format( 'U' ) );
|
133 |
+
$this->assertEquals( $action->get_group(), $retrieved->get_group() );
|
134 |
+
$this->assertTrue( $retrieved->is_finished() );
|
135 |
+
$this->assertEquals( \ActionScheduler_Store::STATUS_CANCELED, $destination->get_status( $new_id ) );
|
136 |
+
|
137 |
+
// ensure that the record in the old store does not exist
|
138 |
+
$old_action = $source->fetch_action( $action_id );
|
139 |
+
$this->assertInstanceOf( 'ActionScheduler_NullAction', $old_action );
|
140 |
+
}
|
141 |
+
|
142 |
+
private function get_log_migrator() {
|
143 |
+
return new LogMigrator( \ActionScheduler::logger(), new ActionScheduler_DBLogger() );
|
144 |
+
}
|
145 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/migration/BatchFetcher_Test.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use Action_Scheduler\Migration\BatchFetcher;
|
4 |
+
use ActionScheduler_wpPostStore as PostStore;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class BatchFetcher_Test
|
8 |
+
* @group migration
|
9 |
+
*/
|
10 |
+
class BatchFetcher_Test extends ActionScheduler_UnitTestCase {
|
11 |
+
public function setUp() {
|
12 |
+
parent::setUp();
|
13 |
+
if ( ! taxonomy_exists( PostStore::GROUP_TAXONOMY ) ) {
|
14 |
+
// register the post type and taxonomy necessary for the store to work
|
15 |
+
$store = new PostStore();
|
16 |
+
$store->init();
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
public function test_nothing_to_migrate() {
|
21 |
+
$store = new PostStore();
|
22 |
+
$batch_fetcher = new BatchFetcher( $store );
|
23 |
+
|
24 |
+
$actions = $batch_fetcher->fetch();
|
25 |
+
$this->assertEmpty( $actions );
|
26 |
+
}
|
27 |
+
|
28 |
+
public function test_get_due_before_future() {
|
29 |
+
$store = new PostStore();
|
30 |
+
$due = [];
|
31 |
+
$future = [];
|
32 |
+
|
33 |
+
for ( $i = 0; $i < 5; $i ++ ) {
|
34 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes' );
|
35 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
36 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
37 |
+
$future[] = $store->save_action( $action );
|
38 |
+
|
39 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
40 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
41 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
42 |
+
$due[] = $store->save_action( $action );
|
43 |
+
}
|
44 |
+
|
45 |
+
$batch_fetcher = new BatchFetcher( $store );
|
46 |
+
|
47 |
+
$actions = $batch_fetcher->fetch();
|
48 |
+
|
49 |
+
$this->assertEqualSets( $due, $actions );
|
50 |
+
}
|
51 |
+
|
52 |
+
|
53 |
+
public function test_get_future_before_complete() {
|
54 |
+
$store = new PostStore();
|
55 |
+
$future = [];
|
56 |
+
$complete = [];
|
57 |
+
|
58 |
+
for ( $i = 0; $i < 5; $i ++ ) {
|
59 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes' );
|
60 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
61 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
62 |
+
$future[] = $store->save_action( $action );
|
63 |
+
|
64 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
65 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
66 |
+
$action = new ActionScheduler_FinishedAction( 'my_hook', [], $schedule );
|
67 |
+
$complete[] = $store->save_action( $action );
|
68 |
+
}
|
69 |
+
|
70 |
+
$batch_fetcher = new BatchFetcher( $store );
|
71 |
+
|
72 |
+
$actions = $batch_fetcher->fetch();
|
73 |
+
|
74 |
+
$this->assertEqualSets( $future, $actions );
|
75 |
+
}
|
76 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/migration/Config_Test.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use Action_Scheduler\Migration\Config;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class Config_Test
|
7 |
+
* @group migration
|
8 |
+
*/
|
9 |
+
class Config_Test extends ActionScheduler_UnitTestCase {
|
10 |
+
public function test_source_store_required() {
|
11 |
+
$config = new Config();
|
12 |
+
$this->expectException( \RuntimeException::class );
|
13 |
+
$config->get_source_store();
|
14 |
+
}
|
15 |
+
|
16 |
+
public function test_source_logger_required() {
|
17 |
+
$config = new Config();
|
18 |
+
$this->expectException( \RuntimeException::class );
|
19 |
+
$config->get_source_logger();
|
20 |
+
}
|
21 |
+
|
22 |
+
public function test_destination_store_required() {
|
23 |
+
$config = new Config();
|
24 |
+
$this->expectException( \RuntimeException::class );
|
25 |
+
$config->get_destination_store();
|
26 |
+
}
|
27 |
+
|
28 |
+
public function test_destination_logger_required() {
|
29 |
+
$config = new Config();
|
30 |
+
$this->expectException( \RuntimeException::class );
|
31 |
+
$config->get_destination_logger();
|
32 |
+
}
|
33 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/migration/LogMigrator_Test.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use Action_Scheduler\Migration\LogMigrator;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class LogMigrator_Test
|
7 |
+
* @group migration
|
8 |
+
*/
|
9 |
+
class LogMigrator_Test extends ActionScheduler_UnitTestCase {
|
10 |
+
function setUp() {
|
11 |
+
parent::setUp();
|
12 |
+
if ( ! taxonomy_exists( ActionScheduler_wpPostStore::GROUP_TAXONOMY ) ) {
|
13 |
+
// register the post type and taxonomy necessary for the store to work
|
14 |
+
$store = new ActionScheduler_wpPostStore();
|
15 |
+
$store->init();
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
public function test_migrate_from_wpComment_to_db() {
|
20 |
+
$source = new ActionScheduler_wpCommentLogger();
|
21 |
+
$destination = new ActionScheduler_DBLogger();
|
22 |
+
$migrator = new LogMigrator( $source, $destination );
|
23 |
+
$source_action_id = rand( 10, 10000 );
|
24 |
+
$destination_action_id = rand( 10, 10000 );
|
25 |
+
|
26 |
+
$logs = [];
|
27 |
+
for ( $i = 0 ; $i < 3 ; $i++ ) {
|
28 |
+
for ( $j = 0 ; $j < 5 ; $j++ ) {
|
29 |
+
$logs[ $i ][ $j ] = md5(rand());
|
30 |
+
if ( $i == 1 ) {
|
31 |
+
$source->log( $source_action_id, $logs[ $i ][ $j ] );
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
$migrator->migrate( $source_action_id, $destination_action_id );
|
37 |
+
|
38 |
+
$migrated = $destination->get_logs( $destination_action_id );
|
39 |
+
$this->assertEqualSets( $logs[ 1 ], array_map( function( $log ) { return $log->get_message(); }, $migrated ) );
|
40 |
+
|
41 |
+
// no API for deleting logs, so we leave them for manual cleanup later
|
42 |
+
$this->assertCount( 5, $source->get_logs( $source_action_id ) );
|
43 |
+
}
|
44 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/migration/Runner_Test.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
use Action_Scheduler\Migration\Config;
|
5 |
+
use Action_Scheduler\Migration\Runner;
|
6 |
+
use ActionScheduler_wpCommentLogger as CommentLogger;
|
7 |
+
use ActionScheduler_wpPostStore as PostStore;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Class Runner_Test
|
11 |
+
* @group migration
|
12 |
+
*/
|
13 |
+
class Runner_Test extends ActionScheduler_UnitTestCase {
|
14 |
+
public function setUp() {
|
15 |
+
parent::setUp();
|
16 |
+
if ( ! taxonomy_exists( PostStore::GROUP_TAXONOMY ) ) {
|
17 |
+
// register the post type and taxonomy necessary for the store to work
|
18 |
+
$store = new PostStore();
|
19 |
+
$store->init();
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
+
public function test_migrate_batches() {
|
24 |
+
$source_store = new PostStore();
|
25 |
+
$destination_store = new ActionScheduler_DBStore();
|
26 |
+
$source_logger = new CommentLogger();
|
27 |
+
$destination_logger = new ActionScheduler_DBLogger();
|
28 |
+
|
29 |
+
$config = new Config();
|
30 |
+
$config->set_source_store( $source_store );
|
31 |
+
$config->set_source_logger( $source_logger );
|
32 |
+
$config->set_destination_store( $destination_store );
|
33 |
+
$config->set_destination_logger( $destination_logger );
|
34 |
+
|
35 |
+
$runner = new Runner( $config );
|
36 |
+
|
37 |
+
$due = [];
|
38 |
+
$future = [];
|
39 |
+
$complete = [];
|
40 |
+
|
41 |
+
for ( $i = 0; $i < 5; $i ++ ) {
|
42 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes' );
|
43 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
44 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
45 |
+
$future[] = $source_store->save_action( $action );
|
46 |
+
|
47 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
48 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
49 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
50 |
+
$due[] = $source_store->save_action( $action );
|
51 |
+
|
52 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
53 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
54 |
+
$action = new ActionScheduler_FinishedAction( 'my_hook', [], $schedule );
|
55 |
+
$complete[] = $source_store->save_action( $action );
|
56 |
+
}
|
57 |
+
|
58 |
+
$created = $source_store->query_actions( [ 'per_page' => 0 ] );
|
59 |
+
$this->assertCount( 15, $created );
|
60 |
+
|
61 |
+
$runner->run( 10 );
|
62 |
+
|
63 |
+
// due actions should migrate in the first batch
|
64 |
+
$migrated = $destination_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
65 |
+
$this->assertCount( 5, $migrated );
|
66 |
+
|
67 |
+
$remaining = $source_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
68 |
+
$this->assertCount( 10, $remaining );
|
69 |
+
|
70 |
+
|
71 |
+
$runner->run( 10 );
|
72 |
+
|
73 |
+
// pending actions should migrate in the second batch
|
74 |
+
$migrated = $destination_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
75 |
+
$this->assertCount( 10, $migrated );
|
76 |
+
|
77 |
+
$remaining = $source_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
78 |
+
$this->assertCount( 5, $remaining );
|
79 |
+
|
80 |
+
|
81 |
+
$runner->run( 10 );
|
82 |
+
|
83 |
+
// completed actions should migrate in the third batch
|
84 |
+
$migrated = $destination_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
85 |
+
$this->assertCount( 15, $migrated );
|
86 |
+
|
87 |
+
$remaining = $source_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] );
|
88 |
+
$this->assertCount( 0, $remaining );
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/migration/Scheduler_Test.php
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
use Action_Scheduler\Migration\Scheduler;
|
4 |
+
use ActionScheduler_wpPostStore as PostStore;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Class Scheduler_Test
|
8 |
+
* @group migration
|
9 |
+
*/
|
10 |
+
class Scheduler_Test extends ActionScheduler_UnitTestCase {
|
11 |
+
public function setUp() {
|
12 |
+
parent::setUp();
|
13 |
+
if ( ! taxonomy_exists( PostStore::GROUP_TAXONOMY ) ) {
|
14 |
+
// register the post type and taxonomy necessary for the store to work
|
15 |
+
$store = new PostStore();
|
16 |
+
$store->init();
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
public function test_migration_is_complete() {
|
21 |
+
ActionScheduler_DataController::mark_migration_complete();
|
22 |
+
$this->assertTrue( ActionScheduler_DataController::is_migration_complete() );
|
23 |
+
}
|
24 |
+
|
25 |
+
public function test_migration_is_not_complete() {
|
26 |
+
$this->assertFalse( ActionScheduler_DataController::is_migration_complete() );
|
27 |
+
update_option( ActionScheduler_DataController::STATUS_FLAG, 'something_random' );
|
28 |
+
$this->assertFalse( ActionScheduler_DataController::is_migration_complete() );
|
29 |
+
}
|
30 |
+
|
31 |
+
public function test_migration_is_scheduled() {
|
32 |
+
$scheduler = new Scheduler();
|
33 |
+
$this->assertTrue( $scheduler->is_migration_scheduled() );
|
34 |
+
}
|
35 |
+
|
36 |
+
public function test_scheduler_runs_migration() {
|
37 |
+
$source_store = new PostStore();
|
38 |
+
$destination_store = new ActionScheduler_DBStore();
|
39 |
+
|
40 |
+
$return_5 = function () {
|
41 |
+
return 5;
|
42 |
+
};
|
43 |
+
add_filter( 'action_scheduler/migration_batch_size', $return_5 );
|
44 |
+
|
45 |
+
// Make sure successive migration actions are delayed so all actions aren't migrated at once on separate hooks
|
46 |
+
$return_60 = function () {
|
47 |
+
return 60;
|
48 |
+
};
|
49 |
+
add_filter( 'action_scheduler/migration_interval', $return_60 );
|
50 |
+
|
51 |
+
for ( $i = 0; $i < 10; $i ++ ) {
|
52 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes' );
|
53 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
54 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
55 |
+
$future[] = $source_store->save_action( $action );
|
56 |
+
|
57 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
58 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
59 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
60 |
+
$due[] = $source_store->save_action( $action );
|
61 |
+
}
|
62 |
+
|
63 |
+
$this->assertCount( 20, $source_store->query_actions( [ 'per_page' => 0 ] ) );
|
64 |
+
|
65 |
+
$scheduler = new Scheduler();
|
66 |
+
$scheduler->unschedule_migration();
|
67 |
+
$scheduler->schedule_migration( time() - 1 );
|
68 |
+
|
69 |
+
$queue_runner = ActionScheduler_Mocker::get_queue_runner( $destination_store );
|
70 |
+
$queue_runner->run();
|
71 |
+
|
72 |
+
// 5 actions should have moved from the source store when the queue runner triggered the migration action
|
73 |
+
$this->assertCount( 15, $source_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] ) );
|
74 |
+
|
75 |
+
remove_filter( 'action_scheduler/migration_batch_size', $return_5 );
|
76 |
+
remove_filter( 'action_scheduler/migration_interval', $return_60 );
|
77 |
+
}
|
78 |
+
|
79 |
+
public function test_scheduler_marks_itself_complete() {
|
80 |
+
$source_store = new PostStore();
|
81 |
+
$destination_store = new ActionScheduler_DBStore();
|
82 |
+
|
83 |
+
for ( $i = 0; $i < 5; $i ++ ) {
|
84 |
+
$time = as_get_datetime_object( $i + 1 . ' minutes ago' );
|
85 |
+
$schedule = new ActionScheduler_SimpleSchedule( $time );
|
86 |
+
$action = new ActionScheduler_Action( 'my_hook', [], $schedule );
|
87 |
+
$due[] = $source_store->save_action( $action );
|
88 |
+
}
|
89 |
+
|
90 |
+
$this->assertCount( 5, $source_store->query_actions( [ 'per_page' => 0 ] ) );
|
91 |
+
|
92 |
+
$scheduler = new Scheduler();
|
93 |
+
$scheduler->unschedule_migration();
|
94 |
+
$scheduler->schedule_migration( time() - 1 );
|
95 |
+
|
96 |
+
$queue_runner = ActionScheduler_Mocker::get_queue_runner( $destination_store );
|
97 |
+
$queue_runner->run();
|
98 |
+
|
99 |
+
// All actions should have moved from the source store when the queue runner triggered the migration action
|
100 |
+
$this->assertCount( 0, $source_store->query_actions( [ 'per_page' => 0, 'hook' => 'my_hook' ] ) );
|
101 |
+
|
102 |
+
// schedule another so we can get it to run immediately
|
103 |
+
$scheduler->unschedule_migration();
|
104 |
+
$scheduler->schedule_migration( time() - 1 );
|
105 |
+
|
106 |
+
// run again so it knows that there's nothing left to process
|
107 |
+
$queue_runner->run();
|
108 |
+
|
109 |
+
$scheduler->unhook();
|
110 |
+
|
111 |
+
// ensure the flag is set marking migration as complete
|
112 |
+
$this->assertTrue( ActionScheduler_DataController::is_migration_complete() );
|
113 |
+
|
114 |
+
// ensure that another instance has not been scheduled
|
115 |
+
$this->assertFalse( $scheduler->is_migration_scheduled() );
|
116 |
+
|
117 |
+
}
|
118 |
+
}
|
includes/vendor/action-scheduler/tests/phpunit/procedural_api/procedural_api_Test.php
CHANGED
@@ -12,7 +12,7 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
12 |
|
13 |
$store = ActionScheduler::store();
|
14 |
$action = $store->fetch_action($action_id);
|
15 |
-
$this->assertEquals( $time, $action->get_schedule()->
|
16 |
$this->assertEquals( $hook, $action->get_hook() );
|
17 |
}
|
18 |
|
@@ -23,8 +23,8 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
23 |
|
24 |
$store = ActionScheduler::store();
|
25 |
$action = $store->fetch_action($action_id);
|
26 |
-
$this->assertEquals( $time, $action->get_schedule()->
|
27 |
-
$this->assertEquals( $time + HOUR_IN_SECONDS + 2, $action->get_schedule()->
|
28 |
$this->assertEquals( $hook, $action->get_hook() );
|
29 |
}
|
30 |
|
@@ -36,8 +36,11 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
36 |
$store = ActionScheduler::store();
|
37 |
$action = $store->fetch_action($action_id);
|
38 |
$expected_date = as_get_datetime_object('2014-10-10');
|
39 |
-
$this->assertEquals( $expected_date->getTimestamp(), $action->get_schedule()->
|
40 |
$this->assertEquals( $hook, $action->get_hook() );
|
|
|
|
|
|
|
41 |
}
|
42 |
|
43 |
public function test_get_next() {
|
@@ -50,6 +53,32 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
50 |
$this->assertEquals( $time->getTimestamp(), $next );
|
51 |
}
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
public function provider_time_hook_args_group() {
|
54 |
$time = time() + 60 * 2;
|
55 |
$hook = md5( rand() );
|
@@ -111,13 +140,16 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
111 |
|
112 |
// Make sure the next scheduled action is unscheduled
|
113 |
$this->assertEquals( $hook, $unscheduled_action->get_hook() );
|
114 |
-
$this->
|
|
|
|
|
115 |
|
116 |
// Make sure other scheduled actions are not unscheduled
|
|
|
117 |
$scheduled_action = $store->fetch_action( $action_id_scheduled );
|
118 |
|
119 |
$this->assertEquals( $hook, $scheduled_action->get_hook() );
|
120 |
-
$this->assertEquals( $action_scheduled_time, $scheduled_action->get_schedule()->
|
121 |
}
|
122 |
|
123 |
/**
|
@@ -137,13 +169,18 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
137 |
$next = as_next_scheduled_action( $hook );
|
138 |
$this->assertFalse($next);
|
139 |
|
|
|
|
|
|
|
140 |
$store = ActionScheduler::store();
|
141 |
|
142 |
foreach ( $action_ids as $action_id ) {
|
143 |
$action = $store->fetch_action($action_id);
|
144 |
|
145 |
-
$this->
|
146 |
-
$this->assertEquals($
|
|
|
|
|
147 |
}
|
148 |
}
|
149 |
|
@@ -201,7 +238,7 @@ class procedural_api_Test extends ActionScheduler_UnitTestCase {
|
|
201 |
$au_now = new ActionScheduler_DateTime(null);
|
202 |
$as_au_now = as_get_datetime_object();
|
203 |
|
204 |
-
$this->assertEquals($au_now->getTimestamp()
|
205 |
|
206 |
// But not in the same timezone, as $as_now should be using UTC
|
207 |
$this->assertNotEquals($au_now->format('Y-m-d H:i:s'),$as_now->format('Y-m-d H:i:s'));
|
12 |
|
13 |
$store = ActionScheduler::store();
|
14 |
$action = $store->fetch_action($action_id);
|
15 |
+
$this->assertEquals( $time, $action->get_schedule()->get_date()->getTimestamp() );
|
16 |
$this->assertEquals( $hook, $action->get_hook() );
|
17 |
}
|
18 |
|
23 |
|
24 |
$store = ActionScheduler::store();
|
25 |
$action = $store->fetch_action($action_id);
|
26 |
+
$this->assertEquals( $time, $action->get_schedule()->get_date()->getTimestamp() );
|
27 |
+
$this->assertEquals( $time + HOUR_IN_SECONDS + 2, $action->get_schedule()->get_next(as_get_datetime_object($time + 2))->getTimestamp());
|
28 |
$this->assertEquals( $hook, $action->get_hook() );
|
29 |
}
|
30 |
|
36 |
$store = ActionScheduler::store();
|
37 |
$action = $store->fetch_action($action_id);
|
38 |
$expected_date = as_get_datetime_object('2014-10-10');
|
39 |
+
$this->assertEquals( $expected_date->getTimestamp(), $action->get_schedule()->get_date()->getTimestamp() );
|
40 |
$this->assertEquals( $hook, $action->get_hook() );
|
41 |
+
|
42 |
+
$expected_date = as_get_datetime_object( '2015-10-10' );
|
43 |
+
$this->assertEquals( $expected_date->getTimestamp(), $action->get_schedule()->get_next( as_get_datetime_object( '2015-01-02' ) )->getTimestamp() );
|
44 |
}
|
45 |
|
46 |
public function test_get_next() {
|
53 |
$this->assertEquals( $time->getTimestamp(), $next );
|
54 |
}
|
55 |
|
56 |
+
public function test_get_next_async() {
|
57 |
+
$hook = md5(rand());
|
58 |
+
$action_id = as_enqueue_async_action( $hook );
|
59 |
+
|
60 |
+
$next = as_next_scheduled_action( $hook );
|
61 |
+
|
62 |
+
$this->assertTrue( $next );
|
63 |
+
|
64 |
+
$store = ActionScheduler::store();
|
65 |
+
|
66 |
+
// Completed async actions should still return false
|
67 |
+
$store->mark_complete( $action_id );
|
68 |
+
$next = as_next_scheduled_action( $hook );
|
69 |
+
$this->assertFalse( $next );
|
70 |
+
|
71 |
+
// Failed async actions should still return false
|
72 |
+
$store->mark_failure( $action_id );
|
73 |
+
$next = as_next_scheduled_action( $hook );
|
74 |
+
$this->assertFalse( $next );
|
75 |
+
|
76 |
+
// Cancelled async actions should still return false
|
77 |
+
$store->cancel_action( $action_id );
|
78 |
+
$next = as_next_scheduled_action( $hook );
|
79 |
+
$this->assertFalse( $next );
|
80 |
+
}
|
81 |
+
|
82 |
public function provider_time_hook_args_group() {
|
83 |
$time = time() + 60 * 2;
|
84 |
$hook = md5( rand() );
|
140 |
|
141 |
// Make sure the next scheduled action is unscheduled
|
142 |
$this->assertEquals( $hook, $unscheduled_action->get_hook() );
|
143 |
+
$this->assertEquals( as_get_datetime_object($time), $unscheduled_action->get_schedule()->get_date() );
|
144 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_CANCELED, $store->get_status( $action_id_unscheduled ) );
|
145 |
+
$this->assertNull( $unscheduled_action->get_schedule()->get_next( as_get_datetime_object() ) );
|
146 |
|
147 |
// Make sure other scheduled actions are not unscheduled
|
148 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_PENDING, $store->get_status( $action_id_scheduled ) );
|
149 |
$scheduled_action = $store->fetch_action( $action_id_scheduled );
|
150 |
|
151 |
$this->assertEquals( $hook, $scheduled_action->get_hook() );
|
152 |
+
$this->assertEquals( $action_scheduled_time, $scheduled_action->get_schedule()->get_date()->getTimestamp() );
|
153 |
}
|
154 |
|
155 |
/**
|
169 |
$next = as_next_scheduled_action( $hook );
|
170 |
$this->assertFalse($next);
|
171 |
|
172 |
+
$after = as_get_datetime_object( $time );
|
173 |
+
$after->modify( '+1 minute' );
|
174 |
+
|
175 |
$store = ActionScheduler::store();
|
176 |
|
177 |
foreach ( $action_ids as $action_id ) {
|
178 |
$action = $store->fetch_action($action_id);
|
179 |
|
180 |
+
$this->assertEquals( $hook, $action->get_hook() );
|
181 |
+
$this->assertEquals( as_get_datetime_object( $time ), $action->get_schedule()->get_date() );
|
182 |
+
$this->assertEquals( ActionScheduler_Store::STATUS_CANCELED, $store->get_status( $action_id ) );
|
183 |
+
$this->assertNull( $action->get_schedule()->get_next( $after ) );
|
184 |
}
|
185 |
}
|
186 |
|
238 |
$au_now = new ActionScheduler_DateTime(null);
|
239 |
$as_au_now = as_get_datetime_object();
|
240 |
|
241 |
+
$this->assertEquals( $au_now->getTimestamp(), $as_now->getTimestamp(), '', 2 );
|
242 |
|
243 |
// But not in the same timezone, as $as_now should be using UTC
|
244 |
$this->assertNotEquals($au_now->format('Y-m-d H:i:s'),$as_now->format('Y-m-d H:i:s'));
|
includes/vendor/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueCleaner_Test.php
CHANGED
@@ -7,7 +7,7 @@ class ActionScheduler_QueueCleaner_Test extends ActionScheduler_UnitTestCase {
|
|
7 |
|
8 |
public function test_delete_old_actions() {
|
9 |
$store = ActionScheduler::store();
|
10 |
-
$runner =
|
11 |
|
12 |
$random = md5(rand());
|
13 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
@@ -62,7 +62,7 @@ class ActionScheduler_QueueCleaner_Test extends ActionScheduler_UnitTestCase {
|
|
62 |
|
63 |
public function test_do_not_delete_recent_actions() {
|
64 |
$store = ActionScheduler::store();
|
65 |
-
$runner =
|
66 |
|
67 |
$random = md5(rand());
|
68 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
7 |
|
8 |
public function test_delete_old_actions() {
|
9 |
$store = ActionScheduler::store();
|
10 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
11 |
|
12 |
$random = md5(rand());
|
13 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
62 |
|
63 |
public function test_do_not_delete_recent_actions() {
|
64 |
$store = ActionScheduler::store();
|
65 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
66 |
|
67 |
$random = md5(rand());
|
68 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('1 day ago'));
|
includes/vendor/action-scheduler/tests/phpunit/runner/ActionScheduler_QueueRunner_Test.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
8 |
public function test_create_runner() {
|
9 |
$store = ActionScheduler::store();
|
10 |
-
$runner =
|
11 |
$actions_run = $runner->run();
|
12 |
|
13 |
$this->assertEquals( 0, $actions_run );
|
@@ -15,7 +15,7 @@ class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
|
15 |
|
16 |
public function test_run() {
|
17 |
$store = ActionScheduler::store();
|
18 |
-
$runner =
|
19 |
|
20 |
$mock = new MockAction();
|
21 |
$random = md5(rand());
|
@@ -37,7 +37,7 @@ class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
|
37 |
|
38 |
public function test_run_with_future_actions() {
|
39 |
$store = ActionScheduler::store();
|
40 |
-
$runner =
|
41 |
|
42 |
$mock = new MockAction();
|
43 |
$random = md5(rand());
|
@@ -65,7 +65,7 @@ class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
|
65 |
|
66 |
public function test_completed_action_status() {
|
67 |
$store = ActionScheduler::store();
|
68 |
-
$runner =
|
69 |
|
70 |
$random = md5(rand());
|
71 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('12 hours ago'));
|
@@ -80,77 +80,145 @@ class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
|
80 |
$this->assertTrue( $finished_action->is_finished() );
|
81 |
}
|
82 |
|
83 |
-
public function
|
84 |
-
|
85 |
-
$
|
|
|
|
|
|
|
86 |
|
87 |
-
|
88 |
-
$
|
|
|
|
|
|
|
89 |
|
90 |
-
$
|
91 |
-
$store->save_action( $action );
|
92 |
|
93 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
|
95 |
-
|
96 |
-
$
|
97 |
|
98 |
-
$claim = $store->stake_claim(10,
|
99 |
$actions = $claim->get_actions();
|
100 |
-
$this->assertCount(1, $actions);
|
101 |
|
102 |
-
$
|
103 |
-
$
|
104 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
|
106 |
-
$
|
107 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
}
|
109 |
|
110 |
public function test_hooked_into_wp_cron() {
|
111 |
-
$next = wp_next_scheduled( ActionScheduler_QueueRunner::WP_CRON_HOOK );
|
112 |
$this->assertNotEmpty($next);
|
113 |
}
|
114 |
|
115 |
public function test_batch_count_limit() {
|
116 |
$store = ActionScheduler::store();
|
117 |
-
$runner =
|
118 |
|
119 |
$mock = new MockAction();
|
120 |
$random = md5(rand());
|
121 |
add_action( $random, array( $mock, 'action' ) );
|
122 |
$schedule = new ActionScheduler_SimpleSchedule(new ActionScheduler_DateTime('1 day ago'));
|
123 |
|
124 |
-
for ( $i = 0 ; $i <
|
125 |
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
126 |
$store->save_action( $action );
|
127 |
}
|
128 |
|
129 |
-
$
|
130 |
-
|
131 |
-
for ( $i = 0 ; $i < 5 ; $i++ ) {
|
132 |
-
$claims[] = $store->stake_claim( 5 );
|
133 |
-
}
|
134 |
|
135 |
$actions_run = $runner->run();
|
136 |
|
137 |
-
|
138 |
$this->assertEquals( 0, $mock->get_call_count() );
|
139 |
$this->assertEquals( 0, $actions_run );
|
140 |
|
141 |
-
$
|
142 |
-
$store->release_claim( $first );
|
143 |
|
144 |
$actions_run = $runner->run();
|
145 |
-
|
146 |
-
$this->assertEquals(
|
|
|
147 |
|
148 |
remove_action( $random, array( $mock, 'action' ) );
|
149 |
}
|
150 |
|
151 |
public function test_changing_batch_count_limit() {
|
152 |
$store = ActionScheduler::store();
|
153 |
-
$runner =
|
154 |
|
155 |
$random = md5(rand());
|
156 |
$schedule = new ActionScheduler_SimpleSchedule(new ActionScheduler_DateTime('1 day ago'));
|
7 |
class ActionScheduler_QueueRunner_Test extends ActionScheduler_UnitTestCase {
|
8 |
public function test_create_runner() {
|
9 |
$store = ActionScheduler::store();
|
10 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
11 |
$actions_run = $runner->run();
|
12 |
|
13 |
$this->assertEquals( 0, $actions_run );
|
15 |
|
16 |
public function test_run() {
|
17 |
$store = ActionScheduler::store();
|
18 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
19 |
|
20 |
$mock = new MockAction();
|
21 |
$random = md5(rand());
|
37 |
|
38 |
public function test_run_with_future_actions() {
|
39 |
$store = ActionScheduler::store();
|
40 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
41 |
|
42 |
$mock = new MockAction();
|
43 |
$random = md5(rand());
|
65 |
|
66 |
public function test_completed_action_status() {
|
67 |
$store = ActionScheduler::store();
|
68 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
69 |
|
70 |
$random = md5(rand());
|
71 |
$schedule = new ActionScheduler_SimpleSchedule(as_get_datetime_object('12 hours ago'));
|
80 |
$this->assertTrue( $finished_action->is_finished() );
|
81 |
}
|
82 |
|
83 |
+
public function test_next_instance_of_cron_action() {
|
84 |
+
// Create an action with daily Cron expression (i.e. midnight each day)
|
85 |
+
$random = md5( rand() );
|
86 |
+
$action_id = ActionScheduler::factory()->cron( $random, array(), null, '0 0 * * *' );
|
87 |
+
$store = ActionScheduler::store();
|
88 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
89 |
|
90 |
+
// Make sure the 1st instance of the action is scheduled to occur tomorrow
|
91 |
+
$date = as_get_datetime_object( 'tomorrow' );
|
92 |
+
$date->modify( '-1 minute' );
|
93 |
+
$claim = $store->stake_claim( 10, $date );
|
94 |
+
$this->assertCount( 0, $claim->get_actions() );
|
95 |
|
96 |
+
$store->release_claim( $claim );
|
|
|
97 |
|
98 |
+
$date->modify( '+1 minute' );
|
99 |
+
|
100 |
+
$claim = $store->stake_claim( 10, $date );
|
101 |
+
$actions = $claim->get_actions();
|
102 |
+
$this->assertCount( 1, $actions );
|
103 |
+
|
104 |
+
$fetched_action_id = reset( $actions );
|
105 |
+
$fetched_action = $store->fetch_action( $fetched_action_id );
|
106 |
+
|
107 |
+
$this->assertEquals( $fetched_action_id, $action_id );
|
108 |
+
$this->assertEquals( $random, $fetched_action->get_hook() );
|
109 |
+
$this->assertEquals( $date->getTimestamp(), $fetched_action->get_schedule()->get_date()->getTimestamp(), '', 1 );
|
110 |
+
|
111 |
+
$store->release_claim( $claim );
|
112 |
|
113 |
+
// Make sure the 2nd instance of the cron action is scheduled to occur tomorrow still
|
114 |
+
$runner->process_action( $action_id );
|
115 |
|
116 |
+
$claim = $store->stake_claim( 10, $date );
|
117 |
$actions = $claim->get_actions();
|
118 |
+
$this->assertCount( 1, $actions );
|
119 |
|
120 |
+
$fetched_action_id = reset( $actions );
|
121 |
+
$fetched_action = $store->fetch_action( $fetched_action_id );
|
122 |
|
123 |
+
$this->assertNotEquals( $fetched_action_id, $action_id );
|
124 |
+
$this->assertEquals( $random, $fetched_action->get_hook() );
|
125 |
+
$this->assertEquals( $date->getTimestamp(), $fetched_action->get_schedule()->get_date()->getTimestamp(), '', 1 );
|
126 |
+
}
|
127 |
+
|
128 |
+
public function test_next_instance_of_interval_action() {
|
129 |
+
// Create an action to recur every 24 hours, with the first instance scheduled to run 12 hours ago
|
130 |
+
$random = md5( rand() );
|
131 |
+
$date = as_get_datetime_object( '12 hours ago' );
|
132 |
+
$action_id = ActionScheduler::factory()->recurring( $random, array(), $date->getTimestamp(), DAY_IN_SECONDS );
|
133 |
+
$store = ActionScheduler::store();
|
134 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
135 |
+
|
136 |
+
// Make sure the 1st instance of the action is scheduled to occur 12 hours ago
|
137 |
+
$claim = $store->stake_claim( 10, $date );
|
138 |
+
$actions = $claim->get_actions();
|
139 |
+
$this->assertCount( 1, $actions );
|
140 |
|
141 |
+
$fetched_action_id = reset( $actions );
|
142 |
+
$fetched_action = $store->fetch_action( $fetched_action_id );
|
143 |
+
|
144 |
+
$this->assertEquals( $fetched_action_id, $action_id );
|
145 |
+
$this->assertEquals( $random, $fetched_action->get_hook() );
|
146 |
+
$this->assertEquals( $date->getTimestamp(), $fetched_action->get_schedule()->get_date()->getTimestamp(), '', 1 );
|
147 |
+
|
148 |
+
$store->release_claim( $claim );
|
149 |
+
|
150 |
+
// Make sure after the queue is run, the 2nd instance of the action is scheduled to occur in 24 hours
|
151 |
+
$runner->run();
|
152 |
+
|
153 |
+
$date = as_get_datetime_object( '+1 day' );
|
154 |
+
$claim = $store->stake_claim( 10, $date );
|
155 |
+
$actions = $claim->get_actions();
|
156 |
+
$this->assertCount( 1, $actions );
|
157 |
+
|
158 |
+
$fetched_action_id = reset( $actions );
|
159 |
+
$fetched_action = $store->fetch_action( $fetched_action_id );
|
160 |
+
|
161 |
+
$this->assertNotEquals( $fetched_action_id, $action_id );
|
162 |
+
$this->assertEquals( $random, $fetched_action->get_hook() );
|
163 |
+
$this->assertEquals( $date->getTimestamp(), $fetched_action->get_schedule()->get_date()->getTimestamp(), '', 1 );
|
164 |
+
|
165 |
+
$store->release_claim( $claim );
|
166 |
+
|
167 |
+
// Make sure the 3rd instance of the cron action is scheduled for 24 hours from now, as the action was run early, ahead of schedule
|
168 |
+
$runner->process_action( $action_id );
|
169 |
+
$date = as_get_datetime_object( '+1 day' );
|
170 |
+
|
171 |
+
$claim = $store->stake_claim( 10, $date );
|
172 |
+
$actions = $claim->get_actions();
|
173 |
+
$this->assertCount( 1, $actions );
|
174 |
+
|
175 |
+
$fetched_action_id = reset( $actions );
|
176 |
+
$fetched_action = $store->fetch_action( $fetched_action_id );
|
177 |
+
|
178 |
+
$this->assertNotEquals( $fetched_action_id, $action_id );
|
179 |
+
$this->assertEquals( $random, $fetched_action->get_hook() );
|
180 |
+
$this->assertEquals( $date->getTimestamp(), $fetched_action->get_schedule()->get_date()->getTimestamp(), '', 1 );
|
181 |
}
|
182 |
|
183 |
public function test_hooked_into_wp_cron() {
|
184 |
+
$next = wp_next_scheduled( ActionScheduler_QueueRunner::WP_CRON_HOOK, array( 'WP Cron' ) );
|
185 |
$this->assertNotEmpty($next);
|
186 |
}
|
187 |
|
188 |
public function test_batch_count_limit() {
|
189 |
$store = ActionScheduler::store();
|
190 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
191 |
|
192 |
$mock = new MockAction();
|
193 |
$random = md5(rand());
|
194 |
add_action( $random, array( $mock, 'action' ) );
|
195 |
$schedule = new ActionScheduler_SimpleSchedule(new ActionScheduler_DateTime('1 day ago'));
|
196 |
|
197 |
+
for ( $i = 0 ; $i < 2 ; $i++ ) {
|
198 |
$action = new ActionScheduler_Action( $random, array($random), $schedule );
|
199 |
$store->save_action( $action );
|
200 |
}
|
201 |
|
202 |
+
$claim = $store->stake_claim();
|
|
|
|
|
|
|
|
|
203 |
|
204 |
$actions_run = $runner->run();
|
205 |
|
|
|
206 |
$this->assertEquals( 0, $mock->get_call_count() );
|
207 |
$this->assertEquals( 0, $actions_run );
|
208 |
|
209 |
+
$store->release_claim( $claim );
|
|
|
210 |
|
211 |
$actions_run = $runner->run();
|
212 |
+
|
213 |
+
$this->assertEquals( 2, $mock->get_call_count() );
|
214 |
+
$this->assertEquals( 2, $actions_run );
|
215 |
|
216 |
remove_action( $random, array( $mock, 'action' ) );
|
217 |
}
|
218 |
|
219 |
public function test_changing_batch_count_limit() {
|
220 |
$store = ActionScheduler::store();
|
221 |
+
$runner = ActionScheduler_Mocker::get_queue_runner( $store );
|
222 |
|
223 |
$random = md5(rand());
|
224 |
$schedule = new ActionScheduler_SimpleSchedule(new ActionScheduler_DateTime('1 day ago'));
|
includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_CronSchedule_Test.php
CHANGED
@@ -8,15 +8,46 @@ class ActionScheduler_CronSchedule_Test extends ActionScheduler_UnitTestCase {
|
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object('tomorrow');
|
10 |
$cron = CronExpression::factory('@daily');
|
11 |
-
$
|
12 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
public function test_next() {
|
16 |
$time = as_get_datetime_object('2013-06-14');
|
17 |
$cron = CronExpression::factory('@daily');
|
18 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
19 |
-
$this->assertEquals( as_get_datetime_object('tomorrow'), $schedule->
|
20 |
}
|
21 |
|
22 |
public function test_is_recurring() {
|
@@ -28,18 +59,18 @@ class ActionScheduler_CronSchedule_Test extends ActionScheduler_UnitTestCase {
|
|
28 |
$time = as_get_datetime_object('2014-01-01');
|
29 |
$cron = CronExpression::factory('0 0 10 10 *');
|
30 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
31 |
-
$this->assertEquals( as_get_datetime_object('2014-10-10'), $schedule->
|
32 |
|
33 |
$cron = CronExpression::factory('0 0 L 1/2 *');
|
34 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
35 |
-
$this->assertEquals( as_get_datetime_object('2014-01-31'), $schedule->
|
36 |
-
$this->assertEquals( as_get_datetime_object('2014-07-31'), $schedule->
|
37 |
-
$this->assertEquals( as_get_datetime_object('2028-11-30'), $schedule->
|
38 |
|
39 |
$cron = CronExpression::factory('30 14 * * MON#3 *');
|
40 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
41 |
-
$this->assertEquals( as_get_datetime_object('2014-01-20 14:30:00'), $schedule->
|
42 |
-
$this->assertEquals( as_get_datetime_object('2014-05-19 14:30:00'), $schedule->
|
43 |
}
|
44 |
}
|
45 |
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object('tomorrow');
|
10 |
$cron = CronExpression::factory('@daily');
|
11 |
+
$start = clone $time;
|
12 |
+
$start->modify( '-1 hour' );
|
13 |
+
$schedule = new ActionScheduler_CronSchedule( $start, $cron );
|
14 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
15 |
+
$this->assertEquals( $start, $schedule->get_first_date() );
|
16 |
+
|
17 |
+
// Test delaying for a future start date
|
18 |
+
$start->modify( '+1 week' );
|
19 |
+
$time->modify( '+1 week' );
|
20 |
+
|
21 |
+
$schedule = new ActionScheduler_CronSchedule( $start, $cron );
|
22 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
23 |
+
$this->assertEquals( $start, $schedule->get_first_date() );
|
24 |
+
}
|
25 |
+
|
26 |
+
public function test_creation_with_first_date() {
|
27 |
+
$time = as_get_datetime_object( 'tomorrow' );
|
28 |
+
$cron = CronExpression::factory( '@daily' );
|
29 |
+
$start = clone $time;
|
30 |
+
$start->modify( '-1 hour' );
|
31 |
+
$schedule = new ActionScheduler_CronSchedule( $start, $cron );
|
32 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
33 |
+
$this->assertEquals( $start, $schedule->get_first_date() );
|
34 |
+
|
35 |
+
// Test delaying for a future start date
|
36 |
+
$first = clone $time;
|
37 |
+
$first->modify( '-1 day' );
|
38 |
+
$start->modify( '+1 week' );
|
39 |
+
$time->modify( '+1 week' );
|
40 |
+
|
41 |
+
$schedule = new ActionScheduler_CronSchedule( $start, $cron, $first );
|
42 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
43 |
+
$this->assertEquals( $first, $schedule->get_first_date() );
|
44 |
}
|
45 |
|
46 |
public function test_next() {
|
47 |
$time = as_get_datetime_object('2013-06-14');
|
48 |
$cron = CronExpression::factory('@daily');
|
49 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
50 |
+
$this->assertEquals( as_get_datetime_object('tomorrow'), $schedule->get_next( as_get_datetime_object() ) );
|
51 |
}
|
52 |
|
53 |
public function test_is_recurring() {
|
59 |
$time = as_get_datetime_object('2014-01-01');
|
60 |
$cron = CronExpression::factory('0 0 10 10 *');
|
61 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
62 |
+
$this->assertEquals( as_get_datetime_object('2014-10-10'), $schedule->get_date() );
|
63 |
|
64 |
$cron = CronExpression::factory('0 0 L 1/2 *');
|
65 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
66 |
+
$this->assertEquals( as_get_datetime_object('2014-01-31'), $schedule->get_date() );
|
67 |
+
$this->assertEquals( as_get_datetime_object('2014-07-31'), $schedule->get_next( as_get_datetime_object('2014-06-01') ) );
|
68 |
+
$this->assertEquals( as_get_datetime_object('2028-11-30'), $schedule->get_next( as_get_datetime_object('2028-11-01') ) );
|
69 |
|
70 |
$cron = CronExpression::factory('30 14 * * MON#3 *');
|
71 |
$schedule = new ActionScheduler_CronSchedule($time, $cron);
|
72 |
+
$this->assertEquals( as_get_datetime_object('2014-01-20 14:30:00'), $schedule->get_date() );
|
73 |
+
$this->assertEquals( as_get_datetime_object('2014-05-19 14:30:00'), $schedule->get_next( as_get_datetime_object('2014-05-01') ) );
|
74 |
}
|
75 |
}
|
76 |
|
includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_IntervalSchedule_Test.php
CHANGED
@@ -8,16 +8,25 @@ class ActionScheduler_IntervalSchedule_Test extends ActionScheduler_UnitTestCase
|
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object();
|
10 |
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
11 |
-
$this->assertEquals( $time, $schedule->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
}
|
13 |
|
14 |
public function test_next() {
|
15 |
$now = time();
|
16 |
$start = $now - 30;
|
17 |
$schedule = new ActionScheduler_IntervalSchedule( as_get_datetime_object("@$start"), MINUTE_IN_SECONDS );
|
18 |
-
$this->assertEquals( $start, $schedule->
|
19 |
-
$this->assertEquals( $now + MINUTE_IN_SECONDS, $schedule->
|
20 |
-
$this->assertEquals( $start, $schedule->
|
21 |
}
|
22 |
|
23 |
public function test_is_recurring() {
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object();
|
10 |
$schedule = new ActionScheduler_IntervalSchedule($time, HOUR_IN_SECONDS);
|
11 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
12 |
+
$this->assertEquals( $time, $schedule->get_first_date() );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function test_creation_with_first_date() {
|
16 |
+
$first = as_get_datetime_object();
|
17 |
+
$time = as_get_datetime_object( '+12 hours' );
|
18 |
+
$schedule = new ActionScheduler_IntervalSchedule( $time, HOUR_IN_SECONDS, $first );
|
19 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
20 |
+
$this->assertEquals( $first, $schedule->get_first_date() );
|
21 |
}
|
22 |
|
23 |
public function test_next() {
|
24 |
$now = time();
|
25 |
$start = $now - 30;
|
26 |
$schedule = new ActionScheduler_IntervalSchedule( as_get_datetime_object("@$start"), MINUTE_IN_SECONDS );
|
27 |
+
$this->assertEquals( $start, $schedule->get_date()->getTimestamp() );
|
28 |
+
$this->assertEquals( $now + MINUTE_IN_SECONDS, $schedule->get_next(as_get_datetime_object())->getTimestamp() );
|
29 |
+
$this->assertEquals( $start, $schedule->get_next( as_get_datetime_object( "@$start" ) )->getTimestamp() );
|
30 |
}
|
31 |
|
32 |
public function test_is_recurring() {
|
includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_NullSchedule_Test.php
CHANGED
@@ -7,7 +7,7 @@
|
|
7 |
class ActionScheduler_NullSchedule_Test extends ActionScheduler_UnitTestCase {
|
8 |
public function test_null_schedule() {
|
9 |
$schedule = new ActionScheduler_NullSchedule();
|
10 |
-
$this->assertNull( $schedule->
|
11 |
}
|
12 |
|
13 |
public function test_is_recurring() {
|
7 |
class ActionScheduler_NullSchedule_Test extends ActionScheduler_UnitTestCase {
|
8 |
public function test_null_schedule() {
|
9 |
$schedule = new ActionScheduler_NullSchedule();
|
10 |
+
$this->assertNull( $schedule->get_date() );
|
11 |
}
|
12 |
|
13 |
public function test_is_recurring() {
|
includes/vendor/action-scheduler/tests/phpunit/schedules/ActionScheduler_SimpleSchedule_Test.php
CHANGED
@@ -8,25 +8,25 @@ class ActionScheduler_SimpleSchedule_Test extends ActionScheduler_UnitTestCase {
|
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object();
|
10 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
11 |
-
$this->assertEquals( $time, $schedule->
|
12 |
}
|
13 |
|
14 |
public function test_past_date() {
|
15 |
$time = as_get_datetime_object('-1 day');
|
16 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
17 |
-
$this->assertEquals( $time, $schedule->
|
18 |
}
|
19 |
|
20 |
public function test_future_date() {
|
21 |
$time = as_get_datetime_object('+1 day');
|
22 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
23 |
-
$this->assertEquals( $time, $schedule->
|
24 |
}
|
25 |
|
26 |
public function test_grace_period_for_next() {
|
27 |
$time = as_get_datetime_object('3 seconds ago');
|
28 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
29 |
-
$this->assertEquals( $time, $schedule->
|
30 |
}
|
31 |
|
32 |
public function test_is_recurring() {
|
8 |
public function test_creation() {
|
9 |
$time = as_get_datetime_object();
|
10 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
11 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
12 |
}
|
13 |
|
14 |
public function test_past_date() {
|
15 |
$time = as_get_datetime_object('-1 day');
|
16 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
17 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
18 |
}
|
19 |
|
20 |
public function test_future_date() {
|
21 |
$time = as_get_datetime_object('+1 day');
|
22 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
23 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
24 |
}
|
25 |
|
26 |
public function test_grace_period_for_next() {
|
27 |
$time = as_get_datetime_object('3 seconds ago');
|
28 |
$schedule = new ActionScheduler_SimpleSchedule($time);
|
29 |
+
$this->assertEquals( $time, $schedule->get_date() );
|
30 |
}
|
31 |
|
32 |
public function test_is_recurring() {
|
languages/mc-woocommerce-pt_BR.mo
DELETED
Binary file
|
languages/mc-woocommerce-pt_BR.po
DELETED
@@ -1,933 +0,0 @@
|
|
1 |
-
msgid ""
|
2 |
-
msgstr ""
|
3 |
-
"Project-Id-Version: \n"
|
4 |
-
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mailchimp-for-"
|
5 |
-
"woocommerce\n"
|
6 |
-
"POT-Creation-Date: 2019-11-06T10:22:06+00:00\n"
|
7 |
-
"PO-Revision-Date: 2019-11-06 11:23+0100\n"
|
8 |
-
"Last-Translator: \n"
|
9 |
-
"Language-Team: \n"
|
10 |
-
"Language: pt_BR\n"
|
11 |
-
"MIME-Version: 1.0\n"
|
12 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
13 |
-
"Content-Transfer-Encoding: 8bit\n"
|
14 |
-
"X-Generator: Poedit 2.0.7\n"
|
15 |
-
"X-Poedit-Basepath: .\n"
|
16 |
-
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
17 |
-
|
18 |
-
#. Plugin Name of the plugin
|
19 |
-
msgid "Mailchimp for WooCommerce"
|
20 |
-
msgstr "Mailchimp para Woocommerce"
|
21 |
-
|
22 |
-
#. Plugin URI of the plugin
|
23 |
-
msgid "https://mailchimp.com/connect-your-store/"
|
24 |
-
msgstr ""
|
25 |
-
|
26 |
-
#. Description of the plugin
|
27 |
-
msgid ""
|
28 |
-
"Connects WooCommerce to Mailchimp to sync your store data, send targeted "
|
29 |
-
"campaigns to your customers, and sell more stuff."
|
30 |
-
msgstr ""
|
31 |
-
"Conecta o Woocommerce ao Mailchimp para sincronizar sua Loja, enviar "
|
32 |
-
"campanhas segmentadas para seus clientes, e vender mais."
|
33 |
-
|
34 |
-
#. Author of the plugin
|
35 |
-
msgid "Mailchimp"
|
36 |
-
msgstr "Mailchimp"
|
37 |
-
|
38 |
-
#. Author URI of the plugin
|
39 |
-
msgid "https://mailchimp.com"
|
40 |
-
msgstr ""
|
41 |
-
|
42 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:179
|
43 |
-
msgid "Please select an option"
|
44 |
-
msgstr "Por favor selecione uma opção"
|
45 |
-
|
46 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:182
|
47 |
-
msgid "Sending Feedback"
|
48 |
-
msgstr "Enviando Feedback"
|
49 |
-
|
50 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:327
|
51 |
-
msgid "I want to change the audience associated with this integration."
|
52 |
-
msgstr "Gostaria de trocar a audiência associada a esta integração."
|
53 |
-
|
54 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:331
|
55 |
-
msgid "I want to change the site or store connected through this integration."
|
56 |
-
msgstr "Gostaria de trocar o Site ou Loja conectado a esta integração."
|
57 |
-
|
58 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:335
|
59 |
-
msgid "The order data isn't syncing."
|
60 |
-
msgstr "Os dados de Pedidos não estão sincronizando."
|
61 |
-
|
62 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:339
|
63 |
-
msgid "The promo codes aren't showing up."
|
64 |
-
msgstr "Os Cupons não estão sincronizando."
|
65 |
-
|
66 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:343
|
67 |
-
msgid "I'm trying to troubleshoot the integration."
|
68 |
-
msgstr "Estou tentando resolver um problema com a integração."
|
69 |
-
|
70 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:347
|
71 |
-
msgid "I was instructed to disconnect by Mailchimp Support."
|
72 |
-
msgstr "Fui instruído pelo suporte do Mailchimp a desconectar."
|
73 |
-
|
74 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:351
|
75 |
-
msgid "I no longer use this integration."
|
76 |
-
msgstr "Não utilizo mais esta integração."
|
77 |
-
|
78 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:355
|
79 |
-
msgid "It's a temporary deactivation."
|
80 |
-
msgstr "É uma desativação temporária."
|
81 |
-
|
82 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:359
|
83 |
-
msgid "Other"
|
84 |
-
msgstr "Outros"
|
85 |
-
|
86 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:361
|
87 |
-
msgid "Please share the reason"
|
88 |
-
msgstr "Por favor, compartilhe o motivo"
|
89 |
-
|
90 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:370
|
91 |
-
msgid "Quick Feedback"
|
92 |
-
msgstr "Feedback rápido"
|
93 |
-
|
94 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:371
|
95 |
-
msgid "Close"
|
96 |
-
msgstr "Fechar"
|
97 |
-
|
98 |
-
#. translators: %s - plugin name.
|
99 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:378
|
100 |
-
msgid "If you have a moment, please share why you are deactivating %s:"
|
101 |
-
msgstr ""
|
102 |
-
"Se você tiver um momento, por favor nos diga porque você está desativando %s:"
|
103 |
-
|
104 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:379
|
105 |
-
#: admin/class-mailchimp-woocommerce-admin.php:270
|
106 |
-
msgid "Mailchimp for Woocommerce"
|
107 |
-
msgstr "Mailchimp para Woocommerce"
|
108 |
-
|
109 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:398
|
110 |
-
msgid "Submit & Deactivate"
|
111 |
-
msgstr "Enviar e Desativar"
|
112 |
-
|
113 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:399
|
114 |
-
msgid "Skip & Deactivate"
|
115 |
-
msgstr "Pular e Desativar"
|
116 |
-
|
117 |
-
#. translators: %s - Mailchimp Privacy Policy URL.
|
118 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:12
|
119 |
-
msgid ""
|
120 |
-
"When shopping, we keep a record of your email and the cart contents for up "
|
121 |
-
"to 30 days on our server. This record is kept to repopulate the contents of "
|
122 |
-
"your cart if you switch devices or needed to come back another day. Read our "
|
123 |
-
"privacy policy <a href=\"%s\">here</a>."
|
124 |
-
msgstr ""
|
125 |
-
"Quando em compras, nós mantemos seu email e o conteúdo do carrinho de "
|
126 |
-
"compras por até 30 dias em nossos servidores. Este registro é armazenado "
|
127 |
-
"para popular o conteúdo do seu carrinho de compras se você trocar de "
|
128 |
-
"dispositivo ou precisa voltar em um outro dia. Leia nossa Política de "
|
129 |
-
"Privacidade <a href=“%s”>aqui</a>."
|
130 |
-
|
131 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:78
|
132 |
-
msgid "MailChimp Shopping Cart Data"
|
133 |
-
msgstr "Dados de carrinho de compras do Mailchimp"
|
134 |
-
|
135 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:82
|
136 |
-
msgid "User ID"
|
137 |
-
msgstr "ID do Usuário"
|
138 |
-
|
139 |
-
#: includes/class-mailchimp-woocommerce-newsletter.php:43
|
140 |
-
#: admin/class-mailchimp-woocommerce-admin.php:748
|
141 |
-
#: admin/partials/tabs/newsletter_settings.php:97
|
142 |
-
msgid "Subscribe to our newsletter"
|
143 |
-
msgstr "Inscreva-se em nossa newsletter"
|
144 |
-
|
145 |
-
#: includes/class-mailchimp-woocommerce-rest-api.php:141
|
146 |
-
#: admin/partials/tabs/store_sync.php:169
|
147 |
-
msgid "D, M j, Y g:i A"
|
148 |
-
msgstr "l, d\\/m\\/Y H:i"
|
149 |
-
|
150 |
-
#: admin/class-mailchimp-woocommerce-admin.php:123
|
151 |
-
msgid "Mailchimp - WooCommerce Setup"
|
152 |
-
msgstr "Mailchimp para Woocommerce"
|
153 |
-
|
154 |
-
#: admin/class-mailchimp-woocommerce-admin.php:271
|
155 |
-
msgid ""
|
156 |
-
"We dectected that this site has the following constants defined, likely at "
|
157 |
-
"wp-config.php file"
|
158 |
-
msgstr ""
|
159 |
-
"Detectamos que este site tem as seguintes constantes definidas, "
|
160 |
-
"possivelmente no arquivo wp-config.php"
|
161 |
-
|
162 |
-
#: admin/class-mailchimp-woocommerce-admin.php:273
|
163 |
-
msgid ""
|
164 |
-
"These constants are deprecated since Mailchimp for Woocommerce version 2.3. "
|
165 |
-
"Please refer to the <a href=\"https://github.com/mailchimp/mc-woocommerce/"
|
166 |
-
"wiki/\">plugin official wiki</a> for further details."
|
167 |
-
msgstr ""
|
168 |
-
"Estas constantes estão obsoletas desde Mailchimp para Woocommerce versão "
|
169 |
-
"2.3. Leia o <a href=“https://github.com/mailchimp/mc-woocommerce/wiki/“>wiki "
|
170 |
-
"oficial do plugin</a> para maiores detalhes."
|
171 |
-
|
172 |
-
#: admin/class-mailchimp-woocommerce-admin.php:393
|
173 |
-
msgid "Store Disconnected"
|
174 |
-
msgstr "Loja desconectada"
|
175 |
-
|
176 |
-
#: admin/class-mailchimp-woocommerce-admin.php:397
|
177 |
-
msgid "Store Disconnect Failed"
|
178 |
-
msgstr "Falha ao desconectar da Loja"
|
179 |
-
|
180 |
-
#: admin/class-mailchimp-woocommerce-admin.php:668
|
181 |
-
msgid ""
|
182 |
-
"As part of the Mailchimp Terms of Use, we require a contact email and a "
|
183 |
-
"physical mailing address."
|
184 |
-
msgstr ""
|
185 |
-
"Como parte dos Termos de Uso do Mailchimp, são mandatórios um email de "
|
186 |
-
"contato e um endereço físico de correspondência."
|
187 |
-
|
188 |
-
#: admin/class-mailchimp-woocommerce-admin.php:676
|
189 |
-
msgid ""
|
190 |
-
"As part of the Mailchimp Terms of Use, we require a valid phone number for "
|
191 |
-
"your store."
|
192 |
-
msgstr ""
|
193 |
-
"Como parte dos Termos de Uso do Mailchimp, é mandatório um número de "
|
194 |
-
"telefone válido para sua Loja."
|
195 |
-
|
196 |
-
#: admin/class-mailchimp-woocommerce-admin.php:684
|
197 |
-
msgid "Mailchimp for WooCommerce requires a Store Name to connect your store."
|
198 |
-
msgstr ""
|
199 |
-
"Mailchimp para Woocommerce requer um Nome de Loja para conectar sua Loja."
|
200 |
-
|
201 |
-
#. translators: %s - plugin name.
|
202 |
-
#: admin/class-mailchimp-woocommerce-admin.php:702
|
203 |
-
#: admin/partials/tabs/campaign_defaults.php:68
|
204 |
-
msgid "You were subscribed to the newsletter from %s"
|
205 |
-
msgstr "Você foi inscrito na newsletter de %s"
|
206 |
-
|
207 |
-
#: admin/class-mailchimp-woocommerce-admin.php:707
|
208 |
-
msgid "One or more fields were not updated"
|
209 |
-
msgstr "Um ou mais campos não foram atualizados"
|
210 |
-
|
211 |
-
#: admin/class-mailchimp-woocommerce-admin.php:858
|
212 |
-
msgid "You must supply your Mailchimp API key to pull the audiences."
|
213 |
-
msgstr ""
|
214 |
-
"É necessário fornecer a sua Mailchimp API Key para recuperar as audiências."
|
215 |
-
|
216 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1320
|
217 |
-
msgid "Starting the sync process..."
|
218 |
-
msgstr "Iniciando a Sincronização…"
|
219 |
-
|
220 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1322
|
221 |
-
msgid ""
|
222 |
-
"The plugin has started the initial sync with your store, and the process "
|
223 |
-
"will work in the background automatically."
|
224 |
-
msgstr ""
|
225 |
-
"O plugin iniciou a sincronização inicial com a sua Loja, e o processo "
|
226 |
-
"executará em segundo plano automaticamente."
|
227 |
-
|
228 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1324
|
229 |
-
msgid ""
|
230 |
-
"Sometimes the sync can take a while, especially on sites with lots of orders "
|
231 |
-
"and/or products. It is safe to navigate away from this screen while it is "
|
232 |
-
"running."
|
233 |
-
msgstr ""
|
234 |
-
"Em alguns casos a sincronização pode levar algum tempo, especialmente em "
|
235 |
-
"sites com muitos pedidos e/ou produtos. É seguro navegar para fora desta "
|
236 |
-
"página."
|
237 |
-
|
238 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1334
|
239 |
-
msgid "Your store is synced with Mailchimp!"
|
240 |
-
msgstr "Sua Loja está sincronizada com o Mailchimp!"
|
241 |
-
|
242 |
-
#. translators: %1$s: Number of synced orders %2$s: Audience name
|
243 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1337
|
244 |
-
msgid ""
|
245 |
-
"We've successfully synced %1$s orders to your Audience %2$s, that's awesome!"
|
246 |
-
msgstr ""
|
247 |
-
"%1$s ordem foi sincronizada a sua Audiência %2$s com sucesso. Muito bom!"
|
248 |
-
|
249 |
-
#. translators: %s - Wordpress.org plugin review URL.
|
250 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1345
|
251 |
-
msgid ""
|
252 |
-
"Could you please do us a favor and leave the plugin a 5-star <a href=%s "
|
253 |
-
"target='_blank'>rating on Wordpress.org</a>? It helps our community know "
|
254 |
-
"that we're working hard to make it better each day."
|
255 |
-
msgstr ""
|
256 |
-
"Você poderia nos fazer um favor e avaliar o nosso plugin com uma <a href=%s "
|
257 |
-
"target=_blank>avaliação 5 estrelas no WordPress.org</a>?. Ajude a comunidade "
|
258 |
-
"saber que estamos melhorando a cada dia."
|
259 |
-
|
260 |
-
#: admin/class-mailchimp-woocommerce-admin.php:1348
|
261 |
-
msgid "Leave a Review"
|
262 |
-
msgstr "Faça uma avaliação"
|
263 |
-
|
264 |
-
#: admin/partials/tabs/newsletter_settings.php:36
|
265 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:162
|
266 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:185
|
267 |
-
msgid "Audience Settings"
|
268 |
-
msgstr "Configurações de Audiência"
|
269 |
-
|
270 |
-
#: admin/partials/tabs/newsletter_settings.php:41
|
271 |
-
msgid "Sync audience with your store"
|
272 |
-
msgstr "Escolha uma Audiência para sincronizar com a sua Loja"
|
273 |
-
|
274 |
-
#: admin/partials/tabs/newsletter_settings.php:47
|
275 |
-
msgid "Create New Audience"
|
276 |
-
msgstr "Criar nova Audiência"
|
277 |
-
|
278 |
-
#: admin/partials/tabs/newsletter_settings.php:51
|
279 |
-
msgid "Select Audience"
|
280 |
-
msgstr "Selecione a Audiência"
|
281 |
-
|
282 |
-
#: admin/partials/tabs/newsletter_settings.php:76
|
283 |
-
msgid "During initial sync, auto subscribe the existing customers."
|
284 |
-
msgstr ""
|
285 |
-
"Durante a sincronização inicial, inscreva automaticamente os clientes "
|
286 |
-
"existentes."
|
287 |
-
|
288 |
-
#: admin/partials/tabs/newsletter_settings.php:81
|
289 |
-
msgid "Optional Audience Settings"
|
290 |
-
msgstr "Configurações Opcionais de Audiência"
|
291 |
-
|
292 |
-
#: admin/partials/tabs/newsletter_settings.php:86
|
293 |
-
msgid "Opt-in Settings"
|
294 |
-
msgstr "Configurações de inscrição"
|
295 |
-
|
296 |
-
#: admin/partials/tabs/newsletter_settings.php:91
|
297 |
-
msgid "Message for the opt-in checkbox"
|
298 |
-
msgstr "Texto para a caixa de seleção de inclusão"
|
299 |
-
|
300 |
-
#: admin/partials/tabs/newsletter_settings.php:92
|
301 |
-
#: admin/partials/tabs/newsletter_settings.php:104
|
302 |
-
msgid ""
|
303 |
-
"Add text to go along with the other opt-in checkboxes. <br/>Customers can "
|
304 |
-
"click a box at checkout to opt in to your newsletter."
|
305 |
-
msgstr ""
|
306 |
-
"Adicione um texto para exibir próximo à caixa de seleção de inscrição <br/> "
|
307 |
-
"Usuários podem clicar em uma caixa de seleção na etapa de pagamento para se "
|
308 |
-
"inscrever em sua newsletter."
|
309 |
-
|
310 |
-
#: admin/partials/tabs/newsletter_settings.php:98
|
311 |
-
msgid "HTML tags allowed: <a href=\"\" target=\"\" title=\"\"></a> and <br>"
|
312 |
-
msgstr "Tags HTML permitidas: <a href=“” target=“” title=“”></a> e <br>"
|
313 |
-
|
314 |
-
#: admin/partials/tabs/newsletter_settings.php:103
|
315 |
-
msgid "Checkbox Display Options"
|
316 |
-
msgstr "Opções de exibição da caixa de seleção"
|
317 |
-
|
318 |
-
#: admin/partials/tabs/newsletter_settings.php:112
|
319 |
-
msgid "Visible, checked by default"
|
320 |
-
msgstr "Visível, ativada por padrão"
|
321 |
-
|
322 |
-
#: admin/partials/tabs/newsletter_settings.php:115
|
323 |
-
msgid "Visible, unchecked by default"
|
324 |
-
msgstr "Visível, desativada por padrão"
|
325 |
-
|
326 |
-
#: admin/partials/tabs/newsletter_settings.php:118
|
327 |
-
msgid "Hidden, unchecked by default"
|
328 |
-
msgstr "Escondida, desativada por padrão"
|
329 |
-
|
330 |
-
#: admin/partials/tabs/newsletter_settings.php:125
|
331 |
-
msgid "Advanced Checkbox Settings"
|
332 |
-
msgstr "Configurações avançadas para a caixa de seleção"
|
333 |
-
|
334 |
-
#. translators: %s - Woocommerce Actions documentation URL.
|
335 |
-
#: admin/partials/tabs/newsletter_settings.php:126
|
336 |
-
msgid ""
|
337 |
-
"To change the location of the opt-in <br/>checkbox at checkout, input one of "
|
338 |
-
"the <a href=%s target=_blank>available WooCommerce form actions</a>."
|
339 |
-
msgstr ""
|
340 |
-
"Para alterar a localização da caixa de seleção de inscrição na etapa de "
|
341 |
-
"pagamento, insira uma das <a href=%s target=_blank>Actions de formulário do "
|
342 |
-
"WooCommerce</a>."
|
343 |
-
|
344 |
-
#: admin/partials/tabs/newsletter_settings.php:132
|
345 |
-
msgid "Enter a WooCommerce form action"
|
346 |
-
msgstr "Insira uma action de formulário do Woocommerce"
|
347 |
-
|
348 |
-
#: admin/partials/tabs/newsletter_settings.php:136
|
349 |
-
#: admin/partials/tabs/newsletter_settings.php:141
|
350 |
-
msgid "Subscriber Tags"
|
351 |
-
msgstr "Etiquetas de Usuário"
|
352 |
-
|
353 |
-
#: admin/partials/tabs/newsletter_settings.php:147
|
354 |
-
msgid ""
|
355 |
-
"Add a comma separated list of tags to add to the subscriber at Mailchimp"
|
356 |
-
msgstr ""
|
357 |
-
"Adicione uma lista de etiquetas separadas por vírgulas para adicionar ao "
|
358 |
-
"usuário no Mailchimp"
|
359 |
-
|
360 |
-
#: admin/partials/tabs/newsletter_settings.php:151
|
361 |
-
msgid "Product Settings"
|
362 |
-
msgstr "Configurações de Produto"
|
363 |
-
|
364 |
-
#: admin/partials/tabs/newsletter_settings.php:157
|
365 |
-
msgid "Product Image Size"
|
366 |
-
msgstr "Tamanho da imagem de Produto"
|
367 |
-
|
368 |
-
#: admin/partials/tabs/newsletter_settings.php:158
|
369 |
-
msgid ""
|
370 |
-
"Define the product image size used by abandoned carts, order notifications, "
|
371 |
-
"and product recommendations."
|
372 |
-
msgstr ""
|
373 |
-
"Defina o tamanho das imagens utilizado em carrinhos de compra abandonados, "
|
374 |
-
"outras notificações, e recomendações de produtos."
|
375 |
-
|
376 |
-
#: admin/partials/tabs/newsletter_settings.php:164
|
377 |
-
msgid "Size"
|
378 |
-
msgstr "Tamanho"
|
379 |
-
|
380 |
-
#: admin/partials/tabs/logs.php:38
|
381 |
-
msgid "Logging Preference"
|
382 |
-
msgstr "Preferências de Log"
|
383 |
-
|
384 |
-
#: admin/partials/tabs/logs.php:42
|
385 |
-
msgid "Logging Preferences"
|
386 |
-
msgstr "Preferências de Log"
|
387 |
-
|
388 |
-
#: admin/partials/tabs/logs.php:47
|
389 |
-
msgid ""
|
390 |
-
"Advanced troubleshooting can be conducted with the logging capability turned "
|
391 |
-
"on.\n"
|
392 |
-
" By default, it’s set to “standard” and you may toggle to either "
|
393 |
-
"“debug” or “none” as needed.\n"
|
394 |
-
" With standard logging, you can see basic information about the "
|
395 |
-
"data submission to Mailchimp including any errors.\n"
|
396 |
-
" “Debug” gives a much deeper insight that is useful to share with "
|
397 |
-
"support if problems arise."
|
398 |
-
msgstr ""
|
399 |
-
"A resolução de problemas pode ser realizada com os Logs ativados.\n"
|
400 |
-
"Por padrão, está configurado para “nenhum” e pode ser trocado para “padrão” "
|
401 |
-
"ou “debug” de acordo com sua necessidade.\n"
|
402 |
-
"Com o Log padrão, são registradas informações básicas sobre o envio de dados "
|
403 |
-
"para o Mailchimp incluindo os erros.\n"
|
404 |
-
"A opção “Debug” exibe informações mais aprofundadas e é útil para "
|
405 |
-
"compartilhar com o suporte se surgirem problemas."
|
406 |
-
|
407 |
-
#: admin/partials/tabs/logs.php:59
|
408 |
-
msgid "None"
|
409 |
-
msgstr "Nenhum"
|
410 |
-
|
411 |
-
#: admin/partials/tabs/logs.php:59
|
412 |
-
msgid "Debug"
|
413 |
-
msgstr "Debug"
|
414 |
-
|
415 |
-
#: admin/partials/tabs/logs.php:59
|
416 |
-
msgid "Standard"
|
417 |
-
msgstr "Padrão"
|
418 |
-
|
419 |
-
#: admin/partials/tabs/logs.php:71
|
420 |
-
msgid "Recent Logs"
|
421 |
-
msgstr "Logs Recentes"
|
422 |
-
|
423 |
-
#: admin/partials/tabs/logs.php:97
|
424 |
-
msgid "Delete log"
|
425 |
-
msgstr "Apagar Log"
|
426 |
-
|
427 |
-
#: admin/partials/tabs/logs.php:101
|
428 |
-
msgid "Copy log"
|
429 |
-
msgstr "Copiar Log"
|
430 |
-
|
431 |
-
#: admin/partials/tabs/notices.php:6
|
432 |
-
msgid "Mailchimp says: You must enter in a valid API key."
|
433 |
-
msgstr "Maichimp diz: Insira uma API Key válida."
|
434 |
-
|
435 |
-
#: admin/partials/tabs/notices.php:9
|
436 |
-
msgid ""
|
437 |
-
"Mailchimp says: Sorry you must set up your campaign defaults before you "
|
438 |
-
"proceed!"
|
439 |
-
msgstr ""
|
440 |
-
"Maichimp diz: É necessário configurar os Padrões de Lista antes de continuar!"
|
441 |
-
|
442 |
-
#: admin/partials/tabs/notices.php:12
|
443 |
-
msgid "Mailchimp says: You must select a marketing audience."
|
444 |
-
msgstr "Maichimp diz: É Necessário selecionar uma Audiência."
|
445 |
-
|
446 |
-
#: admin/partials/tabs/notices.php:15
|
447 |
-
msgid "Mailchimp says: Sorry you must set up your store before you proceed!"
|
448 |
-
msgstr "Maichimp diz: É necessário configurar sua Loja antes de continuar!"
|
449 |
-
|
450 |
-
#: admin/partials/tabs/notices.php:18
|
451 |
-
msgid ""
|
452 |
-
"Mailchimp says: You are not fully ready to run the Store Sync, please verify "
|
453 |
-
"your settings before proceeding."
|
454 |
-
msgstr ""
|
455 |
-
"Maichimp diz: Ainda não está tudo pronto para iniciar a sincronização de sua "
|
456 |
-
"Loja, verifique as configurações antes de continuar."
|
457 |
-
|
458 |
-
#: admin/partials/tabs/notices.php:32
|
459 |
-
msgid "Mailchimp says: Your re-sync has been started!"
|
460 |
-
msgstr "Maichimp diz: A ressincronização foi iniciada!"
|
461 |
-
|
462 |
-
#: admin/partials/tabs/campaign_defaults.php:19
|
463 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:150
|
464 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:182
|
465 |
-
msgid "Audience Defaults"
|
466 |
-
msgstr "Padrões de Audiência"
|
467 |
-
|
468 |
-
#: admin/partials/tabs/campaign_defaults.php:24
|
469 |
-
msgid "Default from name"
|
470 |
-
msgstr "Nome padrão do Remetente"
|
471 |
-
|
472 |
-
#: admin/partials/tabs/campaign_defaults.php:31
|
473 |
-
msgid "Default from email"
|
474 |
-
msgstr "Email padrão do Remetente"
|
475 |
-
|
476 |
-
#: admin/partials/tabs/campaign_defaults.php:38
|
477 |
-
msgid "Default subject"
|
478 |
-
msgstr "Assunto padrão"
|
479 |
-
|
480 |
-
#: admin/partials/tabs/campaign_defaults.php:40
|
481 |
-
msgid "Store Newsletter"
|
482 |
-
msgstr "Newsletter da Loja"
|
483 |
-
|
484 |
-
#: admin/partials/tabs/campaign_defaults.php:45
|
485 |
-
msgid "Default language"
|
486 |
-
msgstr "Lingua padrão"
|
487 |
-
|
488 |
-
#: admin/partials/tabs/campaign_defaults.php:62
|
489 |
-
msgid "Permission reminder message"
|
490 |
-
msgstr "Mensagem de lembrete"
|
491 |
-
|
492 |
-
#: admin/partials/tabs/store_sync.php:82
|
493 |
-
msgid "Coupons"
|
494 |
-
msgstr "Cupons"
|
495 |
-
|
496 |
-
#: admin/partials/tabs/store_sync.php:92
|
497 |
-
msgid "Products"
|
498 |
-
msgstr "Produtos"
|
499 |
-
|
500 |
-
#: admin/partials/tabs/store_sync.php:102
|
501 |
-
msgid "Orders"
|
502 |
-
msgstr "Pedidos"
|
503 |
-
|
504 |
-
#: admin/partials/tabs/store_sync.php:115
|
505 |
-
msgid "Subscribers"
|
506 |
-
msgstr "Inscritos"
|
507 |
-
|
508 |
-
#: admin/partials/tabs/store_sync.php:122
|
509 |
-
msgid "Transactional"
|
510 |
-
msgstr "Transacional"
|
511 |
-
|
512 |
-
#: admin/partials/tabs/store_sync.php:129
|
513 |
-
msgid "Unsubscribed"
|
514 |
-
msgstr "Desinscritos"
|
515 |
-
|
516 |
-
#: admin/partials/tabs/store_sync.php:148
|
517 |
-
msgid "DISCONNECT STORE"
|
518 |
-
msgstr "DESCONECTAR LOJA"
|
519 |
-
|
520 |
-
#: admin/partials/tabs/store_sync.php:151
|
521 |
-
msgid "Account Connected"
|
522 |
-
msgstr "Conta conectada"
|
523 |
-
|
524 |
-
#: admin/partials/tabs/store_sync.php:153
|
525 |
-
msgid "Audience Connected"
|
526 |
-
msgstr "Audiência conectada"
|
527 |
-
|
528 |
-
#: admin/partials/tabs/store_sync.php:159
|
529 |
-
msgid "Status:"
|
530 |
-
msgstr "Status:"
|
531 |
-
|
532 |
-
#: admin/partials/tabs/store_sync.php:160
|
533 |
-
msgid "Sync Completed"
|
534 |
-
msgstr "Sincronização Completa"
|
535 |
-
|
536 |
-
#: admin/partials/tabs/store_sync.php:160
|
537 |
-
msgid "Syncing..."
|
538 |
-
msgstr "Sincronizando..."
|
539 |
-
|
540 |
-
#: admin/partials/tabs/store_sync.php:162
|
541 |
-
msgid "Initial sync in progress"
|
542 |
-
msgstr "Sincronização inicial em progresso"
|
543 |
-
|
544 |
-
#: admin/partials/tabs/store_sync.php:166
|
545 |
-
msgid "Last Updated:"
|
546 |
-
msgstr "Última atualização:"
|
547 |
-
|
548 |
-
#: admin/partials/tabs/store_sync.php:171
|
549 |
-
msgid "Starting..."
|
550 |
-
msgstr "Iniciando…"
|
551 |
-
|
552 |
-
#: admin/partials/tabs/store_sync.php:182
|
553 |
-
msgid "Advanced"
|
554 |
-
msgstr "Avançado"
|
555 |
-
|
556 |
-
#: admin/partials/tabs/store_sync.php:184
|
557 |
-
msgid ""
|
558 |
-
"You can resync your audience at any time without losing any of your e-"
|
559 |
-
"commerce data."
|
560 |
-
msgstr ""
|
561 |
-
"Você pode ressincronizar sua Audiência a qualquer momento, sem perder nenhum "
|
562 |
-
"de seus dados."
|
563 |
-
|
564 |
-
#: admin/partials/tabs/store_sync.php:186
|
565 |
-
msgid "Force Resync"
|
566 |
-
msgstr "Ressincronizar"
|
567 |
-
|
568 |
-
#: admin/partials/tabs/store_sync.php:189
|
569 |
-
msgid "More Information"
|
570 |
-
msgstr "Mais informações"
|
571 |
-
|
572 |
-
#: admin/partials/tabs/api_key.php:6 admin/partials/tabs/api_key.php:11
|
573 |
-
msgid "Connect your store to Mailchimp"
|
574 |
-
msgstr "Conecte sua loja ao Mailchimp"
|
575 |
-
|
576 |
-
#: admin/partials/tabs/api_key.php:10
|
577 |
-
msgid "Reconnect"
|
578 |
-
msgstr "Reconectar"
|
579 |
-
|
580 |
-
#: admin/partials/tabs/api_key.php:10
|
581 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:129
|
582 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:176
|
583 |
-
msgid "Connect"
|
584 |
-
msgstr "Conectar"
|
585 |
-
|
586 |
-
#: admin/partials/tabs/api_key.php:14
|
587 |
-
msgid ""
|
588 |
-
"Already connected. You can reconnect with another Mailchimp account if you "
|
589 |
-
"want."
|
590 |
-
msgstr ""
|
591 |
-
"Já conectado. Você pode reconectar com outra conta Mailchimp se assim "
|
592 |
-
"desejar."
|
593 |
-
|
594 |
-
#: admin/partials/tabs/api_key.php:16
|
595 |
-
msgid ""
|
596 |
-
"Connecting. A new window will open with Mailchimp's OAuth service. Please "
|
597 |
-
"log-in an we will take care of the rest."
|
598 |
-
msgstr ""
|
599 |
-
"Conectando. Uma nova janela abrirá com o Login OAuth do Mailchimp. Por favor "
|
600 |
-
"faça o login e cuidaremos do resto."
|
601 |
-
|
602 |
-
#: admin/partials/tabs/api_key.php:17
|
603 |
-
msgid "Error, can't login."
|
604 |
-
msgstr "Erro. Não foi possível conectar."
|
605 |
-
|
606 |
-
#: admin/partials/tabs/api_key.php:18
|
607 |
-
msgid "Connection in progress"
|
608 |
-
msgstr "Conexão em progresso"
|
609 |
-
|
610 |
-
#: admin/partials/tabs/api_key.php:19
|
611 |
-
msgid "Connected! Please wait while loading next step"
|
612 |
-
msgstr "Conectado! Por favor aguarde o carregamento do próximo passo"
|
613 |
-
|
614 |
-
#: admin/partials/tabs/store_info.php:15
|
615 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:138
|
616 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:179
|
617 |
-
msgid "Store Settings"
|
618 |
-
msgstr "Configurações de Loja"
|
619 |
-
|
620 |
-
#: admin/partials/tabs/store_info.php:19
|
621 |
-
msgid "Name"
|
622 |
-
msgstr "Nome"
|
623 |
-
|
624 |
-
#: admin/partials/tabs/store_info.php:26
|
625 |
-
msgid "Email"
|
626 |
-
msgstr "Email"
|
627 |
-
|
628 |
-
#: admin/partials/tabs/store_info.php:33
|
629 |
-
msgid "Street address"
|
630 |
-
msgstr "Endereço"
|
631 |
-
|
632 |
-
#: admin/partials/tabs/store_info.php:40
|
633 |
-
msgid "City"
|
634 |
-
msgstr "Cidade"
|
635 |
-
|
636 |
-
#: admin/partials/tabs/store_info.php:47
|
637 |
-
msgid "State"
|
638 |
-
msgstr "Estado"
|
639 |
-
|
640 |
-
#: admin/partials/tabs/store_info.php:54
|
641 |
-
msgid "Postal Code"
|
642 |
-
msgstr "CEP"
|
643 |
-
|
644 |
-
#: admin/partials/tabs/store_info.php:61
|
645 |
-
msgid "Country"
|
646 |
-
msgstr "País"
|
647 |
-
|
648 |
-
#: admin/partials/tabs/store_info.php:87
|
649 |
-
msgid "Phone Number"
|
650 |
-
msgstr "Telefone"
|
651 |
-
|
652 |
-
#: admin/partials/tabs/store_info.php:93
|
653 |
-
msgid "Locale Settings"
|
654 |
-
msgstr "Configurações de Local"
|
655 |
-
|
656 |
-
#: admin/partials/tabs/store_info.php:95
|
657 |
-
msgid ""
|
658 |
-
"Please apply your locale settings. If you're unsure about these, use the "
|
659 |
-
"defaults."
|
660 |
-
msgstr ""
|
661 |
-
"Configure seu local. Se estive inseguro com estas informações, deixe o "
|
662 |
-
"padrão."
|
663 |
-
|
664 |
-
#: admin/partials/tabs/store_info.php:100
|
665 |
-
msgid "Locale"
|
666 |
-
msgstr "Língua"
|
667 |
-
|
668 |
-
#: admin/partials/tabs/store_info.php:104
|
669 |
-
msgid "Select store's locale"
|
670 |
-
msgstr "Selecione o Locale da loja"
|
671 |
-
|
672 |
-
#: admin/partials/tabs/store_info.php:119
|
673 |
-
msgid "Woocommerce Currency"
|
674 |
-
msgstr "Moeda do Woocommerce"
|
675 |
-
|
676 |
-
#: admin/partials/tabs/store_info.php:126
|
677 |
-
msgid "Timezone"
|
678 |
-
msgstr "Fuso Horário"
|
679 |
-
|
680 |
-
#: admin/partials/tabs/store_info.php:130
|
681 |
-
msgid "Select store's timezone"
|
682 |
-
msgstr "Selecione o fuso horário da Loja"
|
683 |
-
|
684 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:65
|
685 |
-
msgid "Mailchimp says: Please upgrade your PHP version to a minimum of 7.0"
|
686 |
-
msgstr "Mailchimp diz: Atualize a versão do PHP para no mínimo 7.0"
|
687 |
-
|
688 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:71
|
689 |
-
msgid "Mailchimp says: API Request Error - "
|
690 |
-
msgstr "Mailchimp diz: API Request Error - "
|
691 |
-
|
692 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:103
|
693 |
-
msgid ""
|
694 |
-
"Add Mailchimp for WooCommerce to build custom segments,<br/>send "
|
695 |
-
"automations, and track purchase activity in Mailchimp"
|
696 |
-
msgstr ""
|
697 |
-
"Configure o Mailchimp para Woocommerce para criar segmentações customizadas, "
|
698 |
-
"<br/> enviar automatizações, e rastrear atividade de compras no Mailchimp"
|
699 |
-
|
700 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:107
|
701 |
-
msgid "Please provide a bit of information<br/>about your WooCommerce store"
|
702 |
-
msgstr "Insira as informações relativas<br/>à sua loja WooCommerce"
|
703 |
-
|
704 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:111
|
705 |
-
msgid "Please fill out the audience default<br/>campaign information"
|
706 |
-
msgstr "Por favor preencha <br/>as informações padrão da Lista"
|
707 |
-
|
708 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:115
|
709 |
-
msgid ""
|
710 |
-
"Please apply your audience settings. If you don’t<br/>have an audience, you "
|
711 |
-
"can choose to create one"
|
712 |
-
msgstr ""
|
713 |
-
"Configure sua Audiência. Se você não tem <br/>nenhuma audiência, você pode "
|
714 |
-
"escolher criar uma"
|
715 |
-
|
716 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:118
|
717 |
-
msgid ""
|
718 |
-
"Connect your WooCommerce store to a<br/>Mailchimp audience in less than 60 "
|
719 |
-
"seconds"
|
720 |
-
msgstr ""
|
721 |
-
"Conecte sua loja Woocommerce a uma<br/>Audiência Mailchimp em menos de 60 "
|
722 |
-
"segundos"
|
723 |
-
|
724 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:122
|
725 |
-
msgid "Log events from the <br/>Mailchimp plugin"
|
726 |
-
msgstr "Grave eventos do<br/>plugin Mailchimp"
|
727 |
-
|
728 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:178
|
729 |
-
msgid "Overview"
|
730 |
-
msgstr "Visão Geral"
|
731 |
-
|
732 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:188
|
733 |
-
msgid "Logs"
|
734 |
-
msgstr "Logs"
|
735 |
-
|
736 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:202
|
737 |
-
msgid "Start sync"
|
738 |
-
msgstr "Iniciar Sincronização"
|
739 |
-
|
740 |
-
#~ msgid ""
|
741 |
-
#~ "Have a larger store or having issues syncing? Consider using <a href=%s "
|
742 |
-
#~ "target=_blank>WP-CLI</a>."
|
743 |
-
#~ msgstr ""
|
744 |
-
#~ "Tem uma loja muito grande, ou está encontrando problemas ao sincronizar? "
|
745 |
-
#~ "Considere usar o <a href=%s target=_blank>WP-CLI</a>."
|
746 |
-
|
747 |
-
#~ msgid ""
|
748 |
-
#~ "Order and customer information will not sync if they contain an Amazon or "
|
749 |
-
#~ "generic email address."
|
750 |
-
#~ msgstr ""
|
751 |
-
#~ "Dados de Pedidos e Clientes não serão sincronizados se eles conterem um "
|
752 |
-
#~ "email genérico ou da Amazon."
|
753 |
-
|
754 |
-
#~ msgid ""
|
755 |
-
#~ "Need help to connect your store? Visit the Mailchimp <a href=%s "
|
756 |
-
#~ "target=_blank>Knowledge Base</a>."
|
757 |
-
#~ msgstr ""
|
758 |
-
#~ "Precisa de ajuda para conectar sua Loja? Visite a <a href=%s "
|
759 |
-
#~ "target=_blank>Base de Conhecimento do Mailchimp</a>."
|
760 |
-
|
761 |
-
#~ msgid ""
|
762 |
-
#~ "Want to tell us how we're doing? <a href=%s target=_blank>Leave a review "
|
763 |
-
#~ "on Wordpress.org</a>."
|
764 |
-
#~ msgstr ""
|
765 |
-
#~ "Quer nos contar o que você acha deste plugin? <a href=%s "
|
766 |
-
#~ "target=_blank>Deixe uma classificação no Wordpress.org</a>."
|
767 |
-
|
768 |
-
#~ msgid ""
|
769 |
-
#~ "By using this plugin, Mailchimp will process customer information in "
|
770 |
-
#~ "accordance with their <a href=%s target=_blank>Privacy Policy</a>."
|
771 |
-
#~ msgstr ""
|
772 |
-
#~ "Ao utilizar este plugin, o Mailchimp irá processar as informações de "
|
773 |
-
#~ "clientes de acordo com sua <a href=%s target=_blank>Política de "
|
774 |
-
#~ "Privacidade</a>."
|
775 |
-
|
776 |
-
#~ msgid "MailChimp for WooCommerce"
|
777 |
-
#~ msgstr "Mailchimp para Woocommerce"
|
778 |
-
|
779 |
-
#~ msgid "Email Address"
|
780 |
-
#~ msgstr "Email"
|
781 |
-
|
782 |
-
#~ msgid "Settings"
|
783 |
-
#~ msgstr "Configurações"
|
784 |
-
|
785 |
-
#~ msgid "View"
|
786 |
-
#~ msgstr "Ver"
|
787 |
-
|
788 |
-
#~ msgid "There are currently no logs to view."
|
789 |
-
#~ msgstr "Não há nenhum Log para ser visualizado."
|
790 |
-
|
791 |
-
#~ msgid "Select a Country"
|
792 |
-
#~ msgstr "Selecione um País"
|
793 |
-
|
794 |
-
#~ msgid "Save all changes"
|
795 |
-
#~ msgstr "Salvar todas alterações"
|
796 |
-
|
797 |
-
#~ msgid "Next"
|
798 |
-
#~ msgstr "Próximo"
|
799 |
-
|
800 |
-
#~ msgid ""
|
801 |
-
#~ "The MailChimp For WooCommerce plugin requires the <a href=\"http://"
|
802 |
-
#~ "wordpress.org/extend/plugins/woocommerce/\">WooCommerce</a> plugin to be "
|
803 |
-
#~ "active!"
|
804 |
-
#~ msgstr ""
|
805 |
-
#~ "O plugin Mailchimp para Woocommerce requer que o plugin <a href=“http://"
|
806 |
-
#~ "wordpress.org/extend/plugins/woocommerce/“>WooCommerce</a> esteja ativo!"
|
807 |
-
|
808 |
-
#~ msgid "function \"wp_remote_post\" does not exist"
|
809 |
-
#~ msgstr "a funcão “wp_remote_post” não existe"
|
810 |
-
|
811 |
-
#~ msgid ""
|
812 |
-
#~ "The REST API seems to be disabled on this wordpress site. Please enable "
|
813 |
-
#~ "to sync data."
|
814 |
-
#~ msgstr ""
|
815 |
-
#~ "A REST API aparenta ester desabilitada nest site WordPress. For favor, "
|
816 |
-
#~ "habilite para sincronizar dados."
|
817 |
-
|
818 |
-
#~ msgid "Please hang tight while we work our mojo."
|
819 |
-
#~ msgstr "Por favor aguarde."
|
820 |
-
|
821 |
-
#~ msgid "Initial Sync:"
|
822 |
-
#~ msgstr "Sincronização inicial:"
|
823 |
-
|
824 |
-
#~ msgid "In Progress"
|
825 |
-
#~ msgstr "Em progresso"
|
826 |
-
|
827 |
-
#~ msgid "Mailchimp API Key"
|
828 |
-
#~ msgstr "Insira sua API Key do Mailchimp"
|
829 |
-
|
830 |
-
#~ msgid "Enter your Mailchimp API key."
|
831 |
-
#~ msgstr "Insira sua API Key do Mailchimp."
|
832 |
-
|
833 |
-
#~ msgid ""
|
834 |
-
#~ "To find your Mailchimp API key, log into your account settings > Extras > "
|
835 |
-
#~ "API keys. From there, either grab an existing key or generate a new one "
|
836 |
-
#~ "for your WooCommerce store."
|
837 |
-
#~ msgstr ""
|
838 |
-
#~ "Para localizar sua Mailchimp API key, entre em sua conta no Mailchimp, "
|
839 |
-
#~ "abra “Account Settings > Extras > API Keys”. Copie a chave existente, ou "
|
840 |
-
#~ "crie uma nova para sua Loja Woocommerce."
|
841 |
-
|
842 |
-
#~ msgid "Optional Store Settings"
|
843 |
-
#~ msgstr "Configurações Opcionais da Loja"
|
844 |
-
|
845 |
-
#~ msgid "Sync"
|
846 |
-
#~ msgstr "Sincronização"
|
847 |
-
|
848 |
-
#~ msgid "Audience Name"
|
849 |
-
#~ msgstr "Nome da Audiência"
|
850 |
-
|
851 |
-
#~ msgid "Auto Subscribe On Initial Sync"
|
852 |
-
#~ msgstr "Inscrição automática na Sincronização inicial"
|
853 |
-
|
854 |
-
#~ msgid "No"
|
855 |
-
#~ msgstr "Não"
|
856 |
-
|
857 |
-
#~ msgid "Yes"
|
858 |
-
#~ msgstr "Sim"
|
859 |
-
|
860 |
-
#~ msgid "Newsletter Label"
|
861 |
-
#~ msgstr "Texto da Newsletter"
|
862 |
-
|
863 |
-
#~ msgid "Newsletter Checkbox Action"
|
864 |
-
#~ msgstr "Action para a caixa de seleção de inscrição"
|
865 |
-
|
866 |
-
#~ msgid "Audience Member Tags"
|
867 |
-
#~ msgstr "Etiquetas para Membros de Audiência"
|
868 |
-
|
869 |
-
#~ msgid "Contact Name"
|
870 |
-
#~ msgstr "Nome de contato"
|
871 |
-
|
872 |
-
#~ msgid "From Email"
|
873 |
-
#~ msgstr "Email do Remetente"
|
874 |
-
|
875 |
-
#~ msgid "Permission Reminder"
|
876 |
-
#~ msgstr "Mensagem de lembrete de inclusão"
|
877 |
-
|
878 |
-
#~ msgid "Sync Information"
|
879 |
-
#~ msgstr "Informações de sincronização"
|
880 |
-
|
881 |
-
#~ msgid "API Information"
|
882 |
-
#~ msgstr "Informações da API"
|
883 |
-
|
884 |
-
#~ msgid "Store Name"
|
885 |
-
#~ msgstr "Nome da Loja"
|
886 |
-
|
887 |
-
#~ msgid "Street Address"
|
888 |
-
#~ msgstr "Endereço"
|
889 |
-
|
890 |
-
#~ msgid "Currency Code"
|
891 |
-
#~ msgstr "Código da Moeda"
|
892 |
-
|
893 |
-
#~ msgid "Currency"
|
894 |
-
#~ msgstr "Moeda"
|
895 |
-
|
896 |
-
#~ msgid "Retrieved from Woocommerce Settings"
|
897 |
-
#~ msgstr "Configuração do Woocommerce"
|
898 |
-
|
899 |
-
#~ msgid "Mailchimp for Woocommerce Settings"
|
900 |
-
#~ msgstr "Mailchimp para Woocommerce - Configurações"
|
901 |
-
|
902 |
-
#~ msgid ""
|
903 |
-
#~ "Currency is currently deprecated. Please select one from the list above"
|
904 |
-
#~ msgstr "Moeda obsoleta. Selecione uma da lista acima"
|
905 |
-
|
906 |
-
#~ msgid "deprecated"
|
907 |
-
#~ msgstr "obsoleta"
|
908 |
-
|
909 |
-
#~ msgid "List Settings"
|
910 |
-
#~ msgstr "Configurações de Lista"
|
911 |
-
|
912 |
-
#~ msgid "List Name"
|
913 |
-
#~ msgstr "Nome da Lista"
|
914 |
-
|
915 |
-
#, fuzzy
|
916 |
-
#~| msgid "List Defaults"
|
917 |
-
#~ msgid "List Defaults"
|
918 |
-
#~ msgstr "Padrões de Lista"
|
919 |
-
|
920 |
-
#~ msgid "Phone"
|
921 |
-
#~ msgstr "Telefone"
|
922 |
-
|
923 |
-
#~ msgid "Default Subject"
|
924 |
-
#~ msgstr "Assunto padrão"
|
925 |
-
|
926 |
-
#~ msgid "Default Language"
|
927 |
-
#~ msgstr "Lingua padrão"
|
928 |
-
|
929 |
-
#~ msgid "Mailchimp Settings"
|
930 |
-
#~ msgstr "Configurações Mailchimp para Woocommerce"
|
931 |
-
|
932 |
-
#~ msgid "Every %d Minutes"
|
933 |
-
#~ msgstr "Cada %d minutos"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
languages/mc-woocommerce.pot
CHANGED
@@ -2,19 +2,20 @@
|
|
2 |
# This file is distributed under the same license as the Mailchimp for WooCommerce plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Mailchimp for WooCommerce 2.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mailchimp-for-woocommerce\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"POT-Creation-Date: 2020-
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
-
"X-Generator: WP-CLI 2.
|
15 |
"X-Domain: mailchimp-for-woocommerce\n"
|
16 |
|
17 |
#. Plugin Name of the plugin
|
|
|
18 |
msgid "Mailchimp for WooCommerce"
|
19 |
msgstr ""
|
20 |
|
@@ -34,283 +35,211 @@ msgstr ""
|
|
34 |
msgid "https://mailchimp.com"
|
35 |
msgstr ""
|
36 |
|
37 |
-
#:
|
38 |
-
msgid "
|
39 |
-
msgstr ""
|
40 |
-
|
41 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:182
|
42 |
-
msgid "Sending Feedback"
|
43 |
-
msgstr ""
|
44 |
-
|
45 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:327
|
46 |
-
msgid "I want to change the audience associated with this integration."
|
47 |
-
msgstr ""
|
48 |
-
|
49 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:331
|
50 |
-
msgid "I want to change the site or store connected through this integration."
|
51 |
-
msgstr ""
|
52 |
-
|
53 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:335
|
54 |
-
msgid "The order data isn't syncing."
|
55 |
-
msgstr ""
|
56 |
-
|
57 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:339
|
58 |
-
msgid "The promo codes aren't showing up."
|
59 |
-
msgstr ""
|
60 |
-
|
61 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:343
|
62 |
-
msgid "I'm trying to troubleshoot the integration."
|
63 |
-
msgstr ""
|
64 |
-
|
65 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:347
|
66 |
-
msgid "I was instructed to disconnect by Mailchimp Support."
|
67 |
-
msgstr ""
|
68 |
-
|
69 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:351
|
70 |
-
msgid "I no longer use this integration."
|
71 |
-
msgstr ""
|
72 |
-
|
73 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:355
|
74 |
-
msgid "It's a temporary deactivation."
|
75 |
msgstr ""
|
76 |
|
77 |
-
#:
|
78 |
-
|
|
|
|
|
79 |
msgstr ""
|
80 |
|
81 |
-
#:
|
82 |
-
|
|
|
|
|
|
|
|
|
83 |
msgstr ""
|
84 |
|
85 |
-
#:
|
86 |
-
|
|
|
|
|
|
|
|
|
87 |
msgstr ""
|
88 |
|
89 |
-
#:
|
90 |
-
|
|
|
|
|
|
|
|
|
91 |
msgstr ""
|
92 |
|
93 |
-
|
94 |
-
#:
|
95 |
-
|
|
|
96 |
msgstr ""
|
97 |
|
|
|
98 |
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:379
|
99 |
-
#: admin/class-mailchimp-woocommerce-admin.php:274
|
100 |
msgid "Mailchimp for Woocommerce"
|
101 |
msgstr ""
|
102 |
|
103 |
-
#:
|
104 |
-
msgid "Submit & Deactivate"
|
105 |
-
msgstr ""
|
106 |
-
|
107 |
-
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:399
|
108 |
-
msgid "Skip & Deactivate"
|
109 |
-
msgstr ""
|
110 |
-
|
111 |
-
#. translators: %s - Mailchimp Privacy Policy URL.
|
112 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:12
|
113 |
-
msgid "When shopping, we keep a record of your email and the cart contents for up to 30 days on our server. This record is kept to repopulate the contents of your cart if you switch devices or needed to come back another day. Read our privacy policy <a href=\"%s\">here</a>."
|
114 |
-
msgstr ""
|
115 |
-
|
116 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:78
|
117 |
-
msgid "MailChimp Shopping Cart Data"
|
118 |
-
msgstr ""
|
119 |
-
|
120 |
-
#: includes/class-mailchimp-woocommerce-privacy.php:82
|
121 |
-
msgid "User ID"
|
122 |
-
msgstr ""
|
123 |
-
|
124 |
-
#: includes/class-mailchimp-woocommerce-newsletter.php:43
|
125 |
-
#: admin/class-mailchimp-woocommerce-admin.php:870
|
126 |
-
#: admin/partials/tabs/newsletter_settings.php:97
|
127 |
-
msgid "Subscribe to our newsletter"
|
128 |
-
msgstr ""
|
129 |
-
|
130 |
-
#: includes/class-mailchimp-woocommerce-rest-api.php:141
|
131 |
-
#: admin/partials/tabs/store_sync.php:164
|
132 |
-
msgid "D, M j, Y g:i A"
|
133 |
-
msgstr ""
|
134 |
-
|
135 |
-
#: admin/class-mailchimp-woocommerce-admin.php:127
|
136 |
-
msgid "Mailchimp - WooCommerce Setup"
|
137 |
-
msgstr ""
|
138 |
-
|
139 |
-
#: admin/class-mailchimp-woocommerce-admin.php:275
|
140 |
msgid "We dectected that this site has the following constants defined, likely at wp-config.php file"
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
144 |
msgid "These constants are deprecated since Mailchimp for Woocommerce version 2.3. Please refer to the <a href=\"https://github.com/mailchimp/mc-woocommerce/wiki/\">plugin official wiki</a> for further details."
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
148 |
msgid "Store Disconnected"
|
149 |
msgstr ""
|
150 |
|
151 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
152 |
msgid "Store Disconnect Failed"
|
153 |
msgstr ""
|
154 |
|
155 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
156 |
msgid "As part of the Mailchimp Terms of Use, we require a contact email and a physical mailing address."
|
157 |
msgstr ""
|
158 |
|
159 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
160 |
msgid "As part of the Mailchimp Terms of Use, we require a valid phone number for your store."
|
161 |
msgstr ""
|
162 |
|
163 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
164 |
msgid "Mailchimp for WooCommerce requires a Store Name to connect your store."
|
165 |
msgstr ""
|
166 |
|
167 |
#. translators: %s - plugin name.
|
168 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
169 |
#: admin/partials/tabs/campaign_defaults.php:68
|
170 |
msgid "You were subscribed to the newsletter from %s"
|
171 |
msgstr ""
|
172 |
|
173 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
|
|
174 |
msgid "One or more fields were not updated"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
msgid "You must supply your Mailchimp API key to pull the audiences."
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
182 |
msgid "Starting the sync process..."
|
183 |
msgstr ""
|
184 |
|
185 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
186 |
msgid "The plugin has started the initial sync with your store, and the process will work in the background automatically."
|
187 |
msgstr ""
|
188 |
|
189 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
190 |
msgid "Sometimes the sync can take a while, especially on sites with lots of orders and/or products. It is safe to navigate away from this screen while it is running."
|
191 |
msgstr ""
|
192 |
|
193 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
194 |
msgid "Your store is synced with Mailchimp!"
|
195 |
msgstr ""
|
196 |
|
197 |
#. translators: %1$s: Number of synced orders %2$s: Audience name
|
198 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
199 |
msgid "We've successfully synced %1$s orders to your Audience %2$s, that's awesome!"
|
200 |
msgstr ""
|
201 |
|
202 |
#. translators: %s - Wordpress.org plugin review URL.
|
203 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
204 |
msgid "Could you please do us a favor and leave the plugin a 5-star <a href=%s target='_blank'>rating on Wordpress.org</a>? It helps our community know that we're working hard to make it better each day."
|
205 |
msgstr ""
|
206 |
|
207 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
208 |
msgid "Leave a Review"
|
209 |
msgstr ""
|
210 |
|
211 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
212 |
msgid "Saved"
|
213 |
msgstr ""
|
214 |
|
215 |
-
#: admin/class-mailchimp-woocommerce-admin.php:
|
216 |
msgid "Error setting communications status"
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: admin/partials/tabs
|
220 |
-
|
221 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:185
|
222 |
-
msgid "Audience Settings"
|
223 |
-
msgstr ""
|
224 |
-
|
225 |
-
#: admin/partials/tabs/newsletter_settings.php:41
|
226 |
-
msgid "Sync audience with your store"
|
227 |
-
msgstr ""
|
228 |
-
|
229 |
-
#: admin/partials/tabs/newsletter_settings.php:47
|
230 |
-
msgid "Create New Audience"
|
231 |
-
msgstr ""
|
232 |
-
|
233 |
-
#: admin/partials/tabs/newsletter_settings.php:51
|
234 |
-
msgid "Select Audience"
|
235 |
-
msgstr ""
|
236 |
-
|
237 |
-
#: admin/partials/tabs/newsletter_settings.php:76
|
238 |
-
msgid "During initial sync, auto subscribe the existing customers."
|
239 |
-
msgstr ""
|
240 |
-
|
241 |
-
#: admin/partials/tabs/newsletter_settings.php:81
|
242 |
-
msgid "Optional Audience Settings"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: admin/partials/tabs
|
246 |
-
msgid "
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: admin/partials/tabs
|
250 |
-
msgid "
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: admin/partials/tabs
|
254 |
-
|
255 |
-
msgid "Add text to go along with the other opt-in checkboxes. <br/>Customers can click a box at checkout to opt in to your newsletter."
|
256 |
msgstr ""
|
257 |
|
258 |
-
#: admin/partials/tabs
|
259 |
-
msgid "
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: admin/partials/tabs
|
263 |
-
msgid "
|
264 |
msgstr ""
|
265 |
|
266 |
-
#: admin/partials/tabs
|
267 |
-
msgid "
|
268 |
msgstr ""
|
269 |
|
270 |
-
#: admin/partials/tabs
|
271 |
-
msgid "
|
272 |
msgstr ""
|
273 |
|
274 |
-
#: admin/partials/tabs
|
275 |
-
msgid "
|
276 |
msgstr ""
|
277 |
|
278 |
-
#: admin/partials/tabs
|
279 |
-
|
|
|
|
|
280 |
msgstr ""
|
281 |
|
282 |
-
|
283 |
-
|
284 |
-
msgid "To change the location of the opt-in <br/>checkbox at checkout, input one of the <a href=%s target=_blank>available WooCommerce form actions</a>."
|
285 |
msgstr ""
|
286 |
|
287 |
-
#: admin/partials/tabs/
|
288 |
-
|
|
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: admin/partials/tabs/
|
292 |
-
|
293 |
-
msgid "Subscriber Tags"
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: admin/partials/tabs/
|
297 |
-
msgid "
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: admin/partials/tabs/
|
301 |
-
msgid "
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: admin/partials/tabs/
|
305 |
-
msgid "
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: admin/partials/tabs/
|
309 |
-
msgid "
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: admin/partials/tabs/
|
313 |
-
msgid "
|
314 |
msgstr ""
|
315 |
|
316 |
#: admin/partials/tabs/api_key_create_account.php:33
|
@@ -372,7 +301,7 @@ msgstr ""
|
|
372 |
|
373 |
#. translators: %s - Mailchimp legal pages
|
374 |
#: admin/partials/tabs/api_key_create_account.php:161
|
375 |
-
msgid "By clicking the \"Get Started!\" button, you are creating a Mailchimp account, and you agree to Mailchimp's <a href=%s target=_blank>Terms of Use</a> and <a href=%s target=_blank>Privacy Policy</a>."
|
376 |
msgstr ""
|
377 |
|
378 |
#: admin/partials/tabs/api_key_create_account.php:167
|
@@ -415,6 +344,30 @@ msgstr ""
|
|
415 |
msgid "Connecting..."
|
416 |
msgstr ""
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
#: admin/partials/tabs/logs.php:38
|
419 |
msgid "Logging Preference"
|
420 |
msgstr ""
|
@@ -447,12 +400,109 @@ msgstr ""
|
|
447 |
msgid "Recent Logs"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: admin/partials/tabs/logs.php:
|
|
|
|
|
|
|
|
|
451 |
msgid "Delete log"
|
452 |
msgstr ""
|
453 |
|
454 |
-
#: admin/partials/tabs/
|
455 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
456 |
msgstr ""
|
457 |
|
458 |
#: admin/partials/tabs/notices.php:6
|
@@ -479,34 +529,64 @@ msgstr ""
|
|
479 |
msgid "Mailchimp says: Your re-sync has been started!"
|
480 |
msgstr ""
|
481 |
|
482 |
-
#: admin/partials/tabs/
|
483 |
-
|
484 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:182
|
485 |
-
msgid "Audience Defaults"
|
486 |
msgstr ""
|
487 |
|
488 |
-
#: admin/partials/tabs/
|
489 |
-
msgid "
|
490 |
msgstr ""
|
491 |
|
492 |
-
#: admin/partials/tabs/
|
493 |
-
msgid "
|
494 |
msgstr ""
|
495 |
|
496 |
-
#: admin/partials/tabs/
|
497 |
-
msgid "
|
498 |
msgstr ""
|
499 |
|
500 |
-
#: admin/partials/tabs/
|
501 |
-
msgid "
|
502 |
msgstr ""
|
503 |
|
504 |
-
#: admin/partials/tabs/
|
505 |
-
msgid "
|
506 |
msgstr ""
|
507 |
|
508 |
-
#: admin/partials/tabs/
|
509 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
510 |
msgstr ""
|
511 |
|
512 |
#: admin/partials/tabs/store_sync.php:77
|
@@ -565,6 +645,11 @@ msgstr ""
|
|
565 |
msgid "Last Updated:"
|
566 |
msgstr ""
|
567 |
|
|
|
|
|
|
|
|
|
|
|
568 |
#: admin/partials/tabs/store_sync.php:166
|
569 |
msgid "Starting..."
|
570 |
msgstr ""
|
@@ -610,7 +695,7 @@ msgstr ""
|
|
610 |
|
611 |
#. translators: %s - Mailchimp Support URL.
|
612 |
#: admin/partials/tabs/store_sync.php:220
|
613 |
-
msgid "Need help
|
614 |
msgstr ""
|
615 |
|
616 |
#. translators: %s - Mailchimp Privacy Policy URL.
|
@@ -618,147 +703,84 @@ msgstr ""
|
|
618 |
msgid "By using this plugin, Mailchimp will process customer information in accordance with their <a href=%s target=_blank>Privacy Policy</a>."
|
619 |
msgstr ""
|
620 |
|
621 |
-
#:
|
622 |
-
|
623 |
-
msgid "Connect your store to Mailchimp"
|
624 |
-
msgstr ""
|
625 |
-
|
626 |
-
#: admin/partials/tabs/api_key.php:10
|
627 |
-
msgid "Reconnect"
|
628 |
-
msgstr ""
|
629 |
-
|
630 |
-
#: admin/partials/tabs/api_key.php:10
|
631 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:129
|
632 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:176
|
633 |
-
msgid "Connect"
|
634 |
-
msgstr ""
|
635 |
-
|
636 |
-
#: admin/partials/tabs/api_key.php:14
|
637 |
-
msgid "Already connected. You can reconnect with another Mailchimp account if you want."
|
638 |
-
msgstr ""
|
639 |
-
|
640 |
-
#: admin/partials/tabs/api_key.php:16
|
641 |
-
msgid "Connecting. A new window will open with Mailchimp's OAuth service. Please log-in an we will take care of the rest."
|
642 |
-
msgstr ""
|
643 |
-
|
644 |
-
#: admin/partials/tabs/api_key.php:17
|
645 |
-
msgid "Error, can't login."
|
646 |
-
msgstr ""
|
647 |
-
|
648 |
-
#: admin/partials/tabs/api_key.php:18
|
649 |
-
msgid "Connection in progress"
|
650 |
-
msgstr ""
|
651 |
-
|
652 |
-
#: admin/partials/tabs/api_key.php:19
|
653 |
-
msgid "Connected! Please wait while loading next step"
|
654 |
-
msgstr ""
|
655 |
-
|
656 |
-
#: admin/partials/tabs/store_info.php:15
|
657 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:138
|
658 |
-
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:179
|
659 |
-
msgid "Store Settings"
|
660 |
-
msgstr ""
|
661 |
-
|
662 |
-
#: admin/partials/tabs/store_info.php:19
|
663 |
-
msgid "Name"
|
664 |
-
msgstr ""
|
665 |
-
|
666 |
-
#: admin/partials/tabs/store_info.php:33
|
667 |
-
msgid "Street address"
|
668 |
-
msgstr ""
|
669 |
-
|
670 |
-
#: admin/partials/tabs/store_info.php:54
|
671 |
-
msgid "Postal Code"
|
672 |
-
msgstr ""
|
673 |
-
|
674 |
-
#: admin/partials/tabs/store_info.php:87
|
675 |
-
msgid "Phone Number"
|
676 |
-
msgstr ""
|
677 |
-
|
678 |
-
#: admin/partials/tabs/store_info.php:93
|
679 |
-
msgid "Locale Settings"
|
680 |
-
msgstr ""
|
681 |
-
|
682 |
-
#: admin/partials/tabs/store_info.php:95
|
683 |
-
msgid "Please apply your locale settings. If you're unsure about these, use the defaults."
|
684 |
-
msgstr ""
|
685 |
-
|
686 |
-
#: admin/partials/tabs/store_info.php:100
|
687 |
-
msgid "Locale"
|
688 |
msgstr ""
|
689 |
|
690 |
-
#:
|
691 |
-
msgid "
|
692 |
msgstr ""
|
693 |
|
694 |
-
#:
|
695 |
-
msgid "
|
696 |
msgstr ""
|
697 |
|
698 |
-
#:
|
699 |
-
msgid "
|
700 |
msgstr ""
|
701 |
|
702 |
-
#:
|
703 |
-
msgid "
|
704 |
msgstr ""
|
705 |
|
706 |
-
#:
|
707 |
-
msgid "
|
708 |
msgstr ""
|
709 |
|
710 |
-
#:
|
711 |
-
msgid "
|
712 |
msgstr ""
|
713 |
|
714 |
-
#:
|
715 |
-
msgid "
|
716 |
msgstr ""
|
717 |
|
718 |
-
#:
|
719 |
-
msgid "
|
720 |
msgstr ""
|
721 |
|
722 |
-
#:
|
723 |
-
msgid "
|
724 |
msgstr ""
|
725 |
|
726 |
-
#:
|
727 |
-
msgid "
|
728 |
msgstr ""
|
729 |
|
730 |
-
#:
|
731 |
-
msgid "
|
732 |
msgstr ""
|
733 |
|
734 |
-
#:
|
735 |
-
msgid "
|
736 |
msgstr ""
|
737 |
|
738 |
-
#:
|
739 |
-
msgid "
|
740 |
msgstr ""
|
741 |
|
742 |
-
|
743 |
-
|
|
|
744 |
msgstr ""
|
745 |
|
746 |
-
#:
|
747 |
-
msgid "
|
748 |
msgstr ""
|
749 |
|
750 |
-
#:
|
751 |
-
msgid "
|
752 |
msgstr ""
|
753 |
|
754 |
-
|
755 |
-
|
|
|
756 |
msgstr ""
|
757 |
|
758 |
-
#:
|
759 |
-
msgid "
|
760 |
msgstr ""
|
761 |
|
762 |
-
#:
|
763 |
-
msgid "
|
764 |
msgstr ""
|
2 |
# This file is distributed under the same license as the Mailchimp for WooCommerce plugin.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Mailchimp for WooCommerce 2.4.1\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/mailchimp-for-woocommerce\n"
|
7 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
8 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"POT-Creation-Date: 2020-05-19T08:19:38+00:00\n"
|
13 |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
14 |
+
"X-Generator: WP-CLI 2.4.0\n"
|
15 |
"X-Domain: mailchimp-for-woocommerce\n"
|
16 |
|
17 |
#. Plugin Name of the plugin
|
18 |
+
#: admin/class-mailchimp-woocommerce-admin.php:219
|
19 |
msgid "Mailchimp for WooCommerce"
|
20 |
msgstr ""
|
21 |
|
35 |
msgid "https://mailchimp.com"
|
36 |
msgstr ""
|
37 |
|
38 |
+
#: admin/class-mailchimp-woocommerce-admin.php:129
|
39 |
+
msgid "Mailchimp - WooCommerce Setup"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
msgstr ""
|
41 |
|
42 |
+
#: admin/class-mailchimp-woocommerce-admin.php:142
|
43 |
+
#: admin/class-mailchimp-woocommerce-admin.php:143
|
44 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:176
|
45 |
+
msgid "Overview"
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: admin/class-mailchimp-woocommerce-admin.php:151
|
49 |
+
#: admin/class-mailchimp-woocommerce-admin.php:152
|
50 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:136
|
51 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:177
|
52 |
+
#: admin/partials/tabs/store_info.php:15
|
53 |
+
msgid "Store Settings"
|
54 |
msgstr ""
|
55 |
|
56 |
+
#: admin/class-mailchimp-woocommerce-admin.php:160
|
57 |
+
#: admin/class-mailchimp-woocommerce-admin.php:161
|
58 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:148
|
59 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:180
|
60 |
+
#: admin/partials/tabs/campaign_defaults.php:19
|
61 |
+
msgid "Audience Defaults"
|
62 |
msgstr ""
|
63 |
|
64 |
+
#: admin/class-mailchimp-woocommerce-admin.php:169
|
65 |
+
#: admin/class-mailchimp-woocommerce-admin.php:170
|
66 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:160
|
67 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:183
|
68 |
+
#: admin/partials/tabs/newsletter_settings.php:36
|
69 |
+
msgid "Audience Settings"
|
70 |
msgstr ""
|
71 |
|
72 |
+
#: admin/class-mailchimp-woocommerce-admin.php:178
|
73 |
+
#: admin/class-mailchimp-woocommerce-admin.php:179
|
74 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:186
|
75 |
+
msgid "Logs"
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: admin/class-mailchimp-woocommerce-admin.php:375
|
79 |
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:379
|
|
|
80 |
msgid "Mailchimp for Woocommerce"
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: admin/class-mailchimp-woocommerce-admin.php:376
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
msgid "We dectected that this site has the following constants defined, likely at wp-config.php file"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: admin/class-mailchimp-woocommerce-admin.php:378
|
88 |
msgid "These constants are deprecated since Mailchimp for Woocommerce version 2.3. Please refer to the <a href=\"https://github.com/mailchimp/mc-woocommerce/wiki/\">plugin official wiki</a> for further details."
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: admin/class-mailchimp-woocommerce-admin.php:537
|
92 |
msgid "Store Disconnected"
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: admin/class-mailchimp-woocommerce-admin.php:541
|
96 |
msgid "Store Disconnect Failed"
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: admin/class-mailchimp-woocommerce-admin.php:884
|
100 |
msgid "As part of the Mailchimp Terms of Use, we require a contact email and a physical mailing address."
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: admin/class-mailchimp-woocommerce-admin.php:892
|
104 |
msgid "As part of the Mailchimp Terms of Use, we require a valid phone number for your store."
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: admin/class-mailchimp-woocommerce-admin.php:900
|
108 |
msgid "Mailchimp for WooCommerce requires a Store Name to connect your store."
|
109 |
msgstr ""
|
110 |
|
111 |
#. translators: %s - plugin name.
|
112 |
+
#: admin/class-mailchimp-woocommerce-admin.php:918
|
113 |
#: admin/partials/tabs/campaign_defaults.php:68
|
114 |
msgid "You were subscribed to the newsletter from %s"
|
115 |
msgstr ""
|
116 |
|
117 |
+
#: admin/class-mailchimp-woocommerce-admin.php:923
|
118 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1018
|
119 |
msgid "One or more fields were not updated"
|
120 |
msgstr ""
|
121 |
|
122 |
+
#: admin/class-mailchimp-woocommerce-admin.php:970
|
123 |
+
#: admin/partials/tabs/newsletter_settings.php:97
|
124 |
+
#: includes/class-mailchimp-woocommerce-newsletter.php:43
|
125 |
+
msgid "Subscribe to our newsletter"
|
126 |
+
msgstr ""
|
127 |
+
|
128 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1083
|
129 |
msgid "You must supply your Mailchimp API key to pull the audiences."
|
130 |
msgstr ""
|
131 |
|
132 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1548
|
133 |
msgid "Starting the sync process..."
|
134 |
msgstr ""
|
135 |
|
136 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1550
|
137 |
msgid "The plugin has started the initial sync with your store, and the process will work in the background automatically."
|
138 |
msgstr ""
|
139 |
|
140 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1552
|
141 |
msgid "Sometimes the sync can take a while, especially on sites with lots of orders and/or products. It is safe to navigate away from this screen while it is running."
|
142 |
msgstr ""
|
143 |
|
144 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1568
|
145 |
msgid "Your store is synced with Mailchimp!"
|
146 |
msgstr ""
|
147 |
|
148 |
#. translators: %1$s: Number of synced orders %2$s: Audience name
|
149 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1571
|
150 |
msgid "We've successfully synced %1$s orders to your Audience %2$s, that's awesome!"
|
151 |
msgstr ""
|
152 |
|
153 |
#. translators: %s - Wordpress.org plugin review URL.
|
154 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1579
|
155 |
msgid "Could you please do us a favor and leave the plugin a 5-star <a href=%s target='_blank'>rating on Wordpress.org</a>? It helps our community know that we're working hard to make it better each day."
|
156 |
msgstr ""
|
157 |
|
158 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1582
|
159 |
msgid "Leave a Review"
|
160 |
msgstr ""
|
161 |
|
162 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1607
|
163 |
msgid "Saved"
|
164 |
msgstr ""
|
165 |
|
166 |
+
#: admin/class-mailchimp-woocommerce-admin.php:1612
|
167 |
msgid "Error setting communications status"
|
168 |
msgstr ""
|
169 |
|
170 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:65
|
171 |
+
msgid "Mailchimp says: Please upgrade your PHP version to a minimum of 7.0"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:71
|
175 |
+
msgid "Mailchimp says: API Request Error - "
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:96
|
179 |
+
msgid "Add Mailchimp for WooCommerce to build custom segments,<br/>send automations, and track purchase activity in Mailchimp"
|
180 |
msgstr ""
|
181 |
|
182 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:100
|
183 |
+
msgid "Please provide a bit of information<br/>about your WooCommerce store"
|
|
|
184 |
msgstr ""
|
185 |
|
186 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:104
|
187 |
+
msgid "Please fill out the audience default<br/>campaign information"
|
188 |
msgstr ""
|
189 |
|
190 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:108
|
191 |
+
msgid "Please apply your audience settings. If you don’t<br/>have an audience, you can choose to create one"
|
192 |
msgstr ""
|
193 |
|
194 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:112
|
195 |
+
msgid "Sweet! You're connected with<br/>Mailchimp and syncing data"
|
196 |
msgstr ""
|
197 |
|
198 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:115
|
199 |
+
msgid "Connect your WooCommerce store to a<br/>Mailchimp audience in less than 60 seconds"
|
200 |
msgstr ""
|
201 |
|
202 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:120
|
203 |
+
msgid "Log events from the <br/>Mailchimp plugin"
|
204 |
msgstr ""
|
205 |
|
206 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:127
|
207 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:174
|
208 |
+
#: admin/partials/tabs/api_key.php:10
|
209 |
+
msgid "Connect"
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: admin/partials/mailchimp-woocommerce-admin-tabs.php:205
|
213 |
+
msgid "Start sync"
|
|
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: admin/partials/tabs/api_key.php:6
|
217 |
+
#: admin/partials/tabs/api_key.php:11
|
218 |
+
msgid "Connect your store to Mailchimp"
|
219 |
msgstr ""
|
220 |
|
221 |
+
#: admin/partials/tabs/api_key.php:10
|
222 |
+
msgid "Reconnect"
|
|
|
223 |
msgstr ""
|
224 |
|
225 |
+
#: admin/partials/tabs/api_key.php:14
|
226 |
+
msgid "Already connected. You can reconnect with another Mailchimp account if you want."
|
227 |
msgstr ""
|
228 |
|
229 |
+
#: admin/partials/tabs/api_key.php:16
|
230 |
+
msgid "Connecting. A new window will open with Mailchimp's OAuth service. Please log-in an we will take care of the rest."
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: admin/partials/tabs/api_key.php:17
|
234 |
+
msgid "Error, can't login."
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: admin/partials/tabs/api_key.php:18
|
238 |
+
msgid "Connection in progress"
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: admin/partials/tabs/api_key.php:19
|
242 |
+
msgid "Connected! Please wait while loading next step"
|
243 |
msgstr ""
|
244 |
|
245 |
#: admin/partials/tabs/api_key_create_account.php:33
|
301 |
|
302 |
#. translators: %s - Mailchimp legal pages
|
303 |
#: admin/partials/tabs/api_key_create_account.php:161
|
304 |
+
msgid "By clicking the \"Get Started!\" button, you are creating a Mailchimp account, and you agree to Mailchimp's <a href=%1$s target=_blank>Terms of Use</a> and <a href=%2$s target=_blank>Privacy Policy</a>."
|
305 |
msgstr ""
|
306 |
|
307 |
#: admin/partials/tabs/api_key_create_account.php:167
|
344 |
msgid "Connecting..."
|
345 |
msgstr ""
|
346 |
|
347 |
+
#: admin/partials/tabs/campaign_defaults.php:24
|
348 |
+
msgid "Default from name"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: admin/partials/tabs/campaign_defaults.php:31
|
352 |
+
msgid "Default from email"
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: admin/partials/tabs/campaign_defaults.php:38
|
356 |
+
msgid "Default subject"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: admin/partials/tabs/campaign_defaults.php:40
|
360 |
+
msgid "Store Newsletter"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: admin/partials/tabs/campaign_defaults.php:45
|
364 |
+
msgid "Default language"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#: admin/partials/tabs/campaign_defaults.php:62
|
368 |
+
msgid "Permission reminder message"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
#: admin/partials/tabs/logs.php:38
|
372 |
msgid "Logging Preference"
|
373 |
msgstr ""
|
400 |
msgid "Recent Logs"
|
401 |
msgstr ""
|
402 |
|
403 |
+
#: admin/partials/tabs/logs.php:94
|
404 |
+
msgid "Copy log"
|
405 |
+
msgstr ""
|
406 |
+
|
407 |
+
#: admin/partials/tabs/logs.php:100
|
408 |
msgid "Delete log"
|
409 |
msgstr ""
|
410 |
|
411 |
+
#: admin/partials/tabs/newsletter_settings.php:41
|
412 |
+
msgid "Sync audience with your store"
|
413 |
+
msgstr ""
|
414 |
+
|
415 |
+
#: admin/partials/tabs/newsletter_settings.php:47
|
416 |
+
msgid "Create New Audience"
|
417 |
+
msgstr ""
|
418 |
+
|
419 |
+
#: admin/partials/tabs/newsletter_settings.php:51
|
420 |
+
msgid "Select Audience"
|
421 |
+
msgstr ""
|
422 |
+
|
423 |
+
#: admin/partials/tabs/newsletter_settings.php:76
|
424 |
+
msgid "During initial sync, auto subscribe the existing customers."
|
425 |
+
msgstr ""
|
426 |
+
|
427 |
+
#: admin/partials/tabs/newsletter_settings.php:81
|
428 |
+
msgid "Optional Audience Settings"
|
429 |
+
msgstr ""
|
430 |
+
|
431 |
+
#: admin/partials/tabs/newsletter_settings.php:86
|
432 |
+
msgid "Opt-in Settings"
|
433 |
+
msgstr ""
|
434 |
+
|
435 |
+
#: admin/partials/tabs/newsletter_settings.php:91
|
436 |
+
msgid "Message for the opt-in checkbox"
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#: admin/partials/tabs/newsletter_settings.php:92
|
440 |
+
msgid "The call-to-action text that prompts customers to subscribe to your newsletter at checkout."
|
441 |
+
msgstr ""
|
442 |
+
|
443 |
+
#: admin/partials/tabs/newsletter_settings.php:98
|
444 |
+
msgid "HTML tags allowed: <a href=\"\" target=\"\" title=\"\"></a> and <br>"
|
445 |
+
msgstr ""
|
446 |
+
|
447 |
+
#: admin/partials/tabs/newsletter_settings.php:103
|
448 |
+
msgid "Checkbox Display Options"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: admin/partials/tabs/newsletter_settings.php:104
|
452 |
+
msgid "Choose how you want the opt-in to your newsletter checkbox to render at checkout"
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: admin/partials/tabs/newsletter_settings.php:112
|
456 |
+
msgid "Visible, checked by default"
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: admin/partials/tabs/newsletter_settings.php:115
|
460 |
+
msgid "Visible, unchecked by default"
|
461 |
+
msgstr ""
|
462 |
+
|
463 |
+
#: admin/partials/tabs/newsletter_settings.php:118
|
464 |
+
msgid "Hidden, unchecked by default"
|
465 |
+
msgstr ""
|
466 |
+
|
467 |
+
#: admin/partials/tabs/newsletter_settings.php:125
|
468 |
+
msgid "Advanced Checkbox Settings"
|
469 |
+
msgstr ""
|
470 |
+
|
471 |
+
#. translators: %s - Woocommerce Actions documentation URL.
|
472 |
+
#: admin/partials/tabs/newsletter_settings.php:126
|
473 |
+
msgid "To change the location of the opt-in <br/>checkbox at checkout, input one of the <a href=%s target=_blank>available WooCommerce form actions</a>."
|
474 |
+
msgstr ""
|
475 |
+
|
476 |
+
#: admin/partials/tabs/newsletter_settings.php:132
|
477 |
+
msgid "Enter a WooCommerce form action"
|
478 |
+
msgstr ""
|
479 |
+
|
480 |
+
#: admin/partials/tabs/newsletter_settings.php:136
|
481 |
+
msgid "Subscriber Settings"
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: admin/partials/tabs/newsletter_settings.php:141
|
485 |
+
msgid "Tags"
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: admin/partials/tabs/newsletter_settings.php:142
|
489 |
+
msgid "Add a comma-separated list of tags to apply to a subscriber in Mailchimp after a transaction occurs"
|
490 |
+
msgstr ""
|
491 |
+
|
492 |
+
#: admin/partials/tabs/newsletter_settings.php:151
|
493 |
+
msgid "Product Settings"
|
494 |
+
msgstr ""
|
495 |
+
|
496 |
+
#: admin/partials/tabs/newsletter_settings.php:157
|
497 |
+
msgid "Product Image Size"
|
498 |
+
msgstr ""
|
499 |
+
|
500 |
+
#: admin/partials/tabs/newsletter_settings.php:158
|
501 |
+
msgid "Define the product image size used by abandoned carts, order notifications, and product recommendations."
|
502 |
+
msgstr ""
|
503 |
+
|
504 |
+
#: admin/partials/tabs/newsletter_settings.php:164
|
505 |
+
msgid "Size"
|
506 |
msgstr ""
|
507 |
|
508 |
#: admin/partials/tabs/notices.php:6
|
529 |
msgid "Mailchimp says: Your re-sync has been started!"
|
530 |
msgstr ""
|
531 |
|
532 |
+
#: admin/partials/tabs/store_info.php:19
|
533 |
+
msgid "Name"
|
|
|
|
|
534 |
msgstr ""
|
535 |
|
536 |
+
#: admin/partials/tabs/store_info.php:33
|
537 |
+
msgid "Street address"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: admin/partials/tabs/store_info.php:54
|
541 |
+
msgid "Postal Code"
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: admin/partials/tabs/store_info.php:87
|
545 |
+
msgid "Phone Number"
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: admin/partials/tabs/store_info.php:93
|
549 |
+
msgid "Locale Settings"
|
550 |
msgstr ""
|
551 |
|
552 |
+
#: admin/partials/tabs/store_info.php:95
|
553 |
+
msgid "Please apply your locale settings. If you're unsure about these, use the defaults."
|
554 |
msgstr ""
|
555 |
|
556 |
+
#: admin/partials/tabs/store_info.php:100
|
557 |
+
msgid "Locale"
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#: admin/partials/tabs/store_info.php:104
|
561 |
+
msgid "Select store's locale"
|
562 |
+
msgstr ""
|
563 |
+
|
564 |
+
#: admin/partials/tabs/store_info.php:119
|
565 |
+
msgid "Woocommerce Currency"
|
566 |
+
msgstr ""
|
567 |
+
|
568 |
+
#: admin/partials/tabs/store_info.php:130
|
569 |
+
msgid "Select store's timezone"
|
570 |
+
msgstr ""
|
571 |
+
|
572 |
+
#: admin/partials/tabs/store_info.php:146
|
573 |
+
msgid "Optional Store Settings"
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: admin/partials/tabs/store_info.php:152
|
577 |
+
msgid "Plugin Permission Level"
|
578 |
+
msgstr ""
|
579 |
+
|
580 |
+
#: admin/partials/tabs/store_info.php:153
|
581 |
+
msgid "Select the minimum permission capability to manage Mailchimp for Woocommerce options"
|
582 |
+
msgstr ""
|
583 |
+
|
584 |
+
#: admin/partials/tabs/store_info.php:160
|
585 |
+
msgid "Administrators Only"
|
586 |
+
msgstr ""
|
587 |
+
|
588 |
+
#: admin/partials/tabs/store_info.php:163
|
589 |
+
msgid "Shop Managers and Administrators"
|
590 |
msgstr ""
|
591 |
|
592 |
#: admin/partials/tabs/store_sync.php:77
|
645 |
msgid "Last Updated:"
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: admin/partials/tabs/store_sync.php:164
|
649 |
+
#: includes/class-mailchimp-woocommerce-rest-api.php:140
|
650 |
+
msgid "D, M j, Y g:i A"
|
651 |
+
msgstr ""
|
652 |
+
|
653 |
#: admin/partials/tabs/store_sync.php:166
|
654 |
msgid "Starting..."
|
655 |
msgstr ""
|
695 |
|
696 |
#. translators: %s - Mailchimp Support URL.
|
697 |
#: admin/partials/tabs/store_sync.php:220
|
698 |
+
msgid "Need help? Visit Mailchimp <a href=%s target=_blank>support</a>."
|
699 |
msgstr ""
|
700 |
|
701 |
#. translators: %s - Mailchimp Privacy Policy URL.
|
703 |
msgid "By using this plugin, Mailchimp will process customer information in accordance with their <a href=%s target=_blank>Privacy Policy</a>."
|
704 |
msgstr ""
|
705 |
|
706 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:179
|
707 |
+
msgid "Please select an option"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
708 |
msgstr ""
|
709 |
|
710 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:182
|
711 |
+
msgid "Sending Feedback"
|
712 |
msgstr ""
|
713 |
|
714 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:327
|
715 |
+
msgid "I want to change the audience associated with this integration."
|
716 |
msgstr ""
|
717 |
|
718 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:331
|
719 |
+
msgid "I want to change the site or store connected through this integration."
|
720 |
msgstr ""
|
721 |
|
722 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:335
|
723 |
+
msgid "The order data isn't syncing."
|
724 |
msgstr ""
|
725 |
|
726 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:339
|
727 |
+
msgid "The promo codes aren't showing up."
|
728 |
msgstr ""
|
729 |
|
730 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:343
|
731 |
+
msgid "I'm trying to troubleshoot the integration."
|
732 |
msgstr ""
|
733 |
|
734 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:347
|
735 |
+
msgid "I was instructed to disconnect by Mailchimp Support."
|
736 |
msgstr ""
|
737 |
|
738 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:351
|
739 |
+
msgid "I no longer use this integration."
|
740 |
msgstr ""
|
741 |
|
742 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:355
|
743 |
+
msgid "It's a temporary deactivation."
|
744 |
msgstr ""
|
745 |
|
746 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:359
|
747 |
+
msgid "Other"
|
748 |
msgstr ""
|
749 |
|
750 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:361
|
751 |
+
msgid "Please share the reason"
|
752 |
msgstr ""
|
753 |
|
754 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:370
|
755 |
+
msgid "Quick Feedback"
|
756 |
msgstr ""
|
757 |
|
758 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:371
|
759 |
+
msgid "Close"
|
760 |
msgstr ""
|
761 |
|
762 |
+
#. translators: %s - plugin name.
|
763 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:378
|
764 |
+
msgid "If you have a moment, please share why you are deactivating %s:"
|
765 |
msgstr ""
|
766 |
|
767 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:398
|
768 |
+
msgid "Submit & Deactivate"
|
769 |
msgstr ""
|
770 |
|
771 |
+
#: includes/class-mailchimp-woocommerce-deactivation-survey.php:399
|
772 |
+
msgid "Skip & Deactivate"
|
773 |
msgstr ""
|
774 |
|
775 |
+
#. translators: %s - Mailchimp Privacy Policy URL.
|
776 |
+
#: includes/class-mailchimp-woocommerce-privacy.php:12
|
777 |
+
msgid "When shopping, we keep a record of your email and the cart contents for up to 30 days on our server. This record is kept to repopulate the contents of your cart if you switch devices or needed to come back another day. Read our privacy policy <a href=\"%s\">here</a>."
|
778 |
msgstr ""
|
779 |
|
780 |
+
#: includes/class-mailchimp-woocommerce-privacy.php:78
|
781 |
+
msgid "MailChimp Shopping Cart Data"
|
782 |
msgstr ""
|
783 |
|
784 |
+
#: includes/class-mailchimp-woocommerce-privacy.php:82
|
785 |
+
msgid "User ID"
|
786 |
msgstr ""
|
mailchimp-woocommerce.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* Plugin Name: Mailchimp for WooCommerce
|
17 |
* Plugin URI: https://mailchimp.com/connect-your-store/
|
18 |
* Description: Connects WooCommerce to Mailchimp to sync your store data, send targeted campaigns to your customers, and sell more stuff.
|
19 |
-
* Version: 2.4.
|
20 |
* Author: Mailchimp
|
21 |
* Author URI: https://mailchimp.com
|
22 |
* License: GPL-2.0+
|
@@ -26,7 +26,7 @@
|
|
26 |
* Requires at least: 4.9
|
27 |
* Tested up to: 5.4
|
28 |
* WC requires at least: 3.5
|
29 |
-
* WC tested up to: 4.
|
30 |
*/
|
31 |
|
32 |
// If this file is called directly, abort.
|
16 |
* Plugin Name: Mailchimp for WooCommerce
|
17 |
* Plugin URI: https://mailchimp.com/connect-your-store/
|
18 |
* Description: Connects WooCommerce to Mailchimp to sync your store data, send targeted campaigns to your customers, and sell more stuff.
|
19 |
+
* Version: 2.4.1
|
20 |
* Author: Mailchimp
|
21 |
* Author URI: https://mailchimp.com
|
22 |
* License: GPL-2.0+
|
26 |
* Requires at least: 4.9
|
27 |
* Tested up to: 5.4
|
28 |
* WC requires at least: 3.5
|
29 |
+
* WC tested up to: 4.1
|
30 |
*/
|
31 |
|
32 |
// If this file is called directly, abort.
|
public/class-mailchimp-woocommerce-public.php
CHANGED
@@ -76,9 +76,15 @@ class MailChimp_WooCommerce_Public {
|
|
76 |
//}
|
77 |
}
|
78 |
|
79 |
-
|
80 |
-
|
81 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
}
|
83 |
}
|
84 |
}
|
76 |
//}
|
77 |
}
|
78 |
|
79 |
+
/**
|
80 |
+
* Add the inline footer script if the filter allows it.
|
81 |
+
*/
|
82 |
+
public function add_inline_footer_script()
|
83 |
+
{
|
84 |
+
if (apply_filters( 'mailchimp_add_inline_footer_script', true)) {
|
85 |
+
if (($fragment = mailchimp_get_connected_site_script_fragment()) && !empty($fragment)) {
|
86 |
+
echo $fragment;
|
87 |
+
}
|
88 |
}
|
89 |
}
|
90 |
}
|